From 74e49d1f5a26e8f0e5316179024671164f15978e Mon Sep 17 00:00:00 2001 From: Apricot <50947830+Apricot-ale@users.noreply.github.com> Date: Sat, 28 May 2022 04:06:51 +0900 Subject: [PATCH 01/92] Translations - Add and Improve Missing Japanese (#8924) * Japanese Translation Update Fill missing Japanese translation and Weird translation fixes made long ago. * Remove Corner Bracket and change it to apostrophe * Update STR_ACE_Common_unloadWeapon * Update SunflowerSeeds Description --- addons/casings/stringtable.xml | 5 +++++ addons/common/stringtable.xml | 7 ++++-- addons/csw/stringtable.xml | 4 ++++ addons/field_rations/stringtable.xml | 26 ++++++++++++---------- addons/finger/stringtable.xml | 4 ++++ addons/fire/stringtable.xml | 4 ++++ addons/fortify/stringtable.xml | 8 +++++++ addons/laser/stringtable.xml | 2 ++ addons/magazinerepack/stringtable.xml | 1 + addons/marker_flags/stringtable.xml | 14 +++++++++++- addons/medical_gui/stringtable.xml | 2 ++ addons/medical_treatment/stringtable.xml | 12 +++++----- addons/noradio/stringtable.xml | 1 + addons/overheating/stringtable.xml | 4 ++++ addons/overpressure/stringtable.xml | 1 + addons/realisticnames/stringtable.xml | 20 ++++++++--------- addons/slideshow/stringtable.xml | 2 ++ addons/tacticalladder/stringtable.xml | 10 ++++----- addons/tagging/stringtable.xml | 26 +++++++++++++++------- addons/trenches/stringtable.xml | 4 ++-- addons/ui/stringtable.xml | 2 ++ addons/vehicles/stringtable.xml | 11 +++++---- addons/viewdistance/stringtable.xml | 1 + addons/viewports/stringtable.xml | 2 ++ addons/zeus/stringtable.xml | 1 + optionals/compat_rhs_afrf3/stringtable.xml | 14 ++++++++++++ optionals/compat_rhs_usf3/stringtable.xml | 12 ++++++++++ 27 files changed, 150 insertions(+), 50 deletions(-) diff --git a/addons/casings/stringtable.xml b/addons/casings/stringtable.xml index b8d35196f3..25fd4f4ba7 100644 --- a/addons/casings/stringtable.xml +++ b/addons/casings/stringtable.xml @@ -3,18 +3,23 @@ ACE Casings + ACE 薬莢 Casings Enabled + 薬莢の有効化 Enable persistent casings (POTENTIAL performance impact on old/weak systems) + 永続的な薬莢を有効にする (古い/弱いシステムに対する潜在的なパフォーマンスの影響) Maximum casings + 薬莢の最大量 Maximum amount of casings to display + 表示される薬莢の最大の数 diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 26c2d69406..6c8f14afdb 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -743,7 +743,7 @@ Banane Banán Banana - 甘蕉 + バナナ 바나나 香蕉 香蕉 @@ -759,7 +759,7 @@ Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.<br />Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.<br />Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana. Une banane est un fruit comestible qui, d'un point de vue botanique, fait partie du groupe des baies.\nProduite par plusieurs espèces de grandes plantes à fleurs herbacées du genre Musa. 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),为芭蕉科芭蕉属小果野蕉及野蕉的人工栽培杂交种,为多年生草本植物。果实长有棱; 果皮黄色,果肉白色,味道香甜。主要生长在热带、亚热带地区。原产于亚洲东南部热带、亚热带地区。 @@ -1320,6 +1320,7 @@ ACE 未分类 ACE 무분류 ACE Unkategorisiert + ACE 無区分 No Room to unload @@ -1492,6 +1493,7 @@ 인공지능만 Nur KI 仅 AI + AIのみ Players and AI @@ -1637,6 +1639,7 @@ Unload Weapon + 武器からマガジンを抜く diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml index aa652afe98..3770c870e2 100644 --- a/addons/csw/stringtable.xml +++ b/addons/csw/stringtable.xml @@ -176,18 +176,22 @@ Ammo Storage Munitionslager + 弾薬の格納 Determines whether extra magazines are stored on the ground or inside an ammo box Legt fest, ob zusätzliche Magazine auf dem Boden oder in einer Munitionskiste aufbewahrt werden + 追加のマガジンを地面に設置するか、弾薬箱の中に保管するかを決定します Ground Boden + 地面 Ammo Box Munitionskiste + 弾薬箱 Ammo handling diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 98fb15930a..cea1322f6f 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -784,7 +784,7 @@ Ein erfrischender Softdrink mit Zitronen- und Limettengeschmack. 清新檸檬以及有著酸橙味的汽水 清爽的柠檬和青柠味汽水 - 新鮮なレモンとライムの風味を味わえるソフト ドリンク + 新鮮なレモンとライムの風味を味わえるソフトドリンク Odświeżający napój cytronowo-limonkowy Освежающий напиток со вкусом лимона и лайма Limon Ve Yeşil Limondan Yapılmış Gazlı Bir Içecek @@ -795,7 +795,7 @@ Ein nach Orange schmeckender Softdrink mit einem prickelndem und fruchtigem Geschmack 有著微微的橘子水果味的汽水 橙子味汽水,有刺鼻的水果味 - 口いっぱいに果物を感じるオレンジ風味のソフト ドリンク + 口いっぱいに果物を感じるオレンジ風味のソフトドリンク Napój pomarańczowy Напиток с апельсиновым вкусом Gazlı Portakallı Bir Içecek @@ -806,7 +806,7 @@ Red Gull verleiht Flügel 紅鷹讓你猛虎添翼 红鹰让你猛虎添翼 - レッドガルは翼をさずける + レッドガル 翼をさずける Red Gull doda ci skrzydeł Рэд Гулл окрыляет! Red Gull kanatlandırrrrr @@ -821,7 +821,7 @@ EPA Lamm Curry MRE bárány Curry MRE Curry di agnello - MRE 羊カレー + MRE ラムカレー MRE 양고기 카레 MRE jagnięcina Curry MRE cordeiro ao Curry @@ -838,7 +838,7 @@ Eine EPA mit Lamm Curry. Für den besten Geschmack erhitzen. Egy MRE, amely Lamb Curry-t tartalmaz. Hő a legjobb hatás érdekében Un MRE contenente Lamb Curry. Calore per il miglior effetto - 羊カレーの MRE。温めるとなお美味しい + ラム(羊肉)カレーの MRE。温めるとなお美味しい 양고기 카레가 들어있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다 MRE zawierające jagnięcine Curry. Podgrzej dla najlepszego efektu Um MRE contendo Lamb Curry. Calor para melhor efeito @@ -851,7 +851,7 @@ EPA Rindereintopf 軍糧 牛肉燉湯 军粮炖牛肉汤 - MRE ビーフ シチュー + MRE ビーフシチュー MRE Gulasz wołowy ИРП Тушеная говядина MRE Dana Yahni @@ -877,7 +877,7 @@ EPA Cremige Tomatensuppe MRE krémes paradicsomleves MRE Crema di pomodoro - MRE クリーム トマト スープ + MRE クリームトマトスープ MRE 크림 토마토 수프 MRE Kremowa Zupa Pomidorowa MRE Sopa de creme de tomate @@ -894,7 +894,7 @@ Eine EPA mit Creme Tomatensuppe. Für beste Wirkung mit Wasser und Hitze mischen. Egy krémes paradicsomleveset tartalmazó MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében Un MRE contenente zuppa di pomodoro crema. Mescolare con acqua e calore per ottenere il massimo effetto - クリーム トマト スープの MRE。水と混ぜて温めるとなお美味しい + クリームトマトスープの MRE。水と混ぜて温めるとなお美味しい 크림 토마토 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다 MRE zawierające śmietanową zupę pomidorową. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt Uma MRE contendo Cream Tomato Soup. Misture com água e calor para melhor efeito @@ -911,7 +911,7 @@ EPA Cream Hühnersuppe MRE krémes csirke leves MRE Zuppa di pollo crema - MRE クリーム チキン スープ + MRE クリームチキンスープ MRE 크림 치킨 수프 MRE Kremowy Rosół MRE Sopa de creme de galinha @@ -928,7 +928,7 @@ Eine EPA mit Hühnersuppe. Für beste Wirkung mit Wasser und Hitze mischen. A csirke leves tartalmú MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében Un MRE contenente zuppa di pollo. Mescolare con acqua e calore per ottenere il massimo effetto - チキン スープの MRE。水と混ぜて温めるとなお美味しい + クリームチキンスープの MRE。水と混ぜて温めるとなお美味しい 치킨 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다 MRE zawierające rosół. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt Um MRE contendo Sopa de Frango. Misture com água e calor para melhor efeito @@ -1047,7 +1047,7 @@ EPA Huhn mit Kraut Knödel MRE csirke Herb galuskával MRE pollo con gnocchi alle erbe - MRE 鶏肉団子 + MRE チキンとハーブ団子 MRE 허브 치킨 만두 MRE kurczak z pierogami ziołowymi. MRE Frango com Dumplings de ervas @@ -1064,7 +1064,7 @@ Eine EPA mit Hühnchen mit Kräuterknödeln. Für den besten Geschmack erhitzen. Egy MRE, amely csirkét és fűszeres gombócokat tartalmaz. Hő a legjobb hatás érdekében Un MRE contenente pollo con gnocchi alle erbe. Calore per il miglior effetto - 鶏肉を団子で包んだ MRE。温めるとなお美味しい + チキンとハーブ団子のMRE。温めるとなお美味しい 허브 치킨 만두 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다 MRE z kurczakiem i pierogamii ziołowymi. Podgrzej dla najlepszego efektu Uma MRE que contém Bolinhos De Frango Com Erva. Calor para melhor efeito @@ -1107,10 +1107,12 @@ Sunflower Seeds Sonnenblumenkerne + ヒマワリの種 Roasted And Salted Geröstet und Gesalzen + 炒って塩で味付け済 diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index d2330e890e..e85dedfdf3 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -89,21 +89,25 @@ Visual Marker Size Coefficient Visueller Markergrößenkoeffizient 보이는 마커 크기 계수 + 指さし表記大きさ係数 Adjusts the size of the visual marker. Passt die Größe der visuellen Markierung an. 눈에 보이는 마커의 크기를 조정합니다. + 指さし表記の大きさを調整します。 Proximity Scaling Näherungsskalierung 근접 스케일링 + 近接性スケーリング Scales the size of the visual marker based on the distance between the player observing and the player pointing. Skaliert die Größe der visuellen Markierung basierend auf der Entfernung zwischen dem beobachtenden Spieler und dem zeigenden Spieler. 관찰하는 플레이어와 가리키는 플레이어 사이의 거리에 따라 보이는 마커의 크기를 조정합니다. + 見ているプレーヤーと指さししたプレーヤーの距離に基づいて、指さし表記の大きさを調整します。 Show pointing indicator to self diff --git a/addons/fire/stringtable.xml b/addons/fire/stringtable.xml index e1bb46b72e..ac168bbebc 100644 --- a/addons/fire/stringtable.xml +++ b/addons/fire/stringtable.xml @@ -73,6 +73,7 @@ 启用着火单位发出惨叫声 불 붙은 유닛 비명 Schreie von brennenden Einheiten aktivieren + 炎上中の悲鳴を有効 Enables if units on fire will play the screaming sound @@ -80,6 +81,7 @@ 启用着火的单位是否会发出惨叫声。 불이 붙은 유닛이 소리를 지르게 합니다 Aktiviert, ob brennende Einheiten den Schrei-Ton abspielen + 有効化すると炎上しているユニットが悲鳴を上げます Drop Weapons When on Fire @@ -88,6 +90,7 @@ 着火时扔掉武器 불 붙을 경우 무기 내려놓음 Waffen fallen lassen, wenn in Brand geraten. + 炎上時に武器を落とす Controls whether units drop their weapons when on fire. @@ -96,6 +99,7 @@ 控制单位在着火时是否丢掉武器。 유닛이 불에 붙이면 무기를 떨굴지를 결정합니다. Steuert, ob Einheiten ihre Waffen fallen lassen, wenn sie brennen. + ユニットが炎上時に武器を落とすかどうかを定義します。 diff --git a/addons/fortify/stringtable.xml b/addons/fortify/stringtable.xml index 61e2004851..8e59c5dd76 100644 --- a/addons/fortify/stringtable.xml +++ b/addons/fortify/stringtable.xml @@ -171,42 +171,49 @@ 时间—成本系数 시간-가격 계수 Zeit-Kosten-Koeffizient + 時間コスト係数 Coefficient used to determine time to build structure.<br/>A in Ax + b where x is cost of object 用于确定建造建筑所需时间的系数。<br/>A是 Ax+b中的一个参数,其中x是物体的成本 건축물을 지을 때 걸리는 시간을 계수를 적용하여 계산합니다. Koeffizient zur Bestimmung der Bauzeit <br/>A in Ax + b, wobei x die Kosten des Objekts sind. + 建造する時間を決定するために使用される係数。<br/>計算式はAx + bです。この係数はAであり、xは建造物のコストです。 Minimum Build Time 最短建造时间 최소 건축 시간 Minimale Bauzeit + 建造に掛かる最小の時間 Minimum time to build any structure.<br/>b in Ax + b where x is cost of object 建造任何建筑的最短时间。<br/>b是 Ax+b中的一个参数,其中x是物体的成本 건축물을 지을 때 걸리는 최소 시간을 계수를 적용하여 계산합니다. Mindestzeit für den Bau eines beliebigen Bauwerks.<br/>b in Ax + b, wobei x die Kosten des Objekts sind. + 建造に掛かる最小の時間。<br/>計算式はAx + bです。この時間はbであり、xは建造物のコストです。 Building 建造 건설 중 Bauwerk + 建造 Create map markers 创建地图标记 지도에 마커 생성 Kartenmarkierungen erstellen + マップマーカーを生成する Create map markers that look like terrain buildings when static fortifications are placed 在放置静态防御工事时,创建看起来像地形建筑的地图标记 건축물을 건설하고 나서 지도에 마커를 생성합니다 Erstellen von Kartenmarkierungen, die wie Gebäude im Gelände aussehen, wenn statische Befestigungen platziert werden + 静的な建築物が配置されたときに地形の建物のように見えるマップマーカーを生成します Never @@ -229,6 +236,7 @@ 对放置者友军单位 아군 유닛이 지은 건물만 Für, zum Erbauer, verbündete Einheiten. + 設置者の友軍に For everyone diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index fca7366075..d9562d93d8 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -87,9 +87,11 @@ Draw Laser on Map + 地図上にレーザーを表示する Active laser designator's position will be drawn on the map + アクティブな指示レーザーの位置が地図上に描画されます diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index be2d0fa090..adb8a6ee00 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -190,6 +190,7 @@ Repack Animation Animation für Umpacken Animacja przepakowywania + 詰め替え時のアニメーション diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index 2430961c43..1a2742959f 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -4,17 +4,21 @@ Marker Flags Markierungsfahnen + 旗マーカー Place Anywhere Überall platzieren + どこでも設置可能 Place marker flag anywhere regardless of surface. + どのような地表でも旗を設置できるようにします Place Flag Flagge platzieren + 旗を設置 Pick Up @@ -28,41 +32,49 @@ Pegar 확보 提取点 - 受け取り + 拾う Al Aufheben Marker Flag (White) Markierungsfahne (Weiß) + 旗マーカー (白) Marker Flag (Black) Markierungsfahne (Schwarz) + 旗マーカー (黒) Marker Flag (Red) Markierungsfahne (Rot) + 旗マーカー (赤) Marker Flag (Green) Markierungsfahne (Grün) + 旗マーカー (緑) Marker Flag (Blue) Markierungsfahne (Blau) + 旗マーカー (青) Marker Flag (Yellow) Markierungsfahne (Gelb) + 旗マーカー (黄) Marker Flag (Orange) Markierungsfahne (Orange) + 旗マーカー (橙) Marker Flag (Purple) Markierungsfahne (Lila) + 旗マーカー (紫) diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 35753798e2..4b7678ccbd 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1227,10 +1227,12 @@ Show Blood Loss Blutverlust anzeigen + 失血量の表示 Show qualitative blood loss in the injury list. Qualitativen Blutverlust in der Verletzungsliste anzeigen. + 負傷リストに段階的な失血量を表示します。 diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 00dff31fcf..0c0f8cfe5f 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -1521,7 +1521,7 @@ Bendaggio compressivo Bandagem de Compressão Obvaz (Tlakový) - 弾性包帯 + 包帯 (弾性) 붕대 (거즈) 绷带(包扎型) 繃帶(包紮型) @@ -2148,7 +2148,7 @@ Bendaggio emostatico (QuikClot) Bandagem básica (Coagulante) Hemostatický obvaz (QuikClot) - 緊急圧迫止血包帯 (クイッククロット) + 包帯 (クイッククロット) 붕대 (퀵 클롯) 绷带(止血型) 繃帶 (止血粉) @@ -2807,7 +2807,7 @@ Zárókötszer Bendaggio rapido Curativo de Campo - 緊急圧迫包帯を巻く + 包帯を巻く (緊急圧迫) 붕대 (기본) 绷带(基础型) 基礎繃帶 @@ -2823,7 +2823,7 @@ Bandage compressif Bandagem de Compressão Obvaz Tlakový - 弾性包帯を巻く + 包帯を巻く (弾性) 붕대 (거즈) 绷带(包扎型) 包紮繃帶 @@ -2840,7 +2840,7 @@ Rögzitő kötszer Bendaggio elastico Bandagem Elástica - 伸縮包帯を巻く + 包帯を巻く (伸縮) 붕대 (압박) 绷带(弹性型) 彈性繃帶 @@ -2857,7 +2857,7 @@ QuikClot QuikClot (polvere emostatica) QuikClot - クイッククロットを巻く + 包帯を巻く (クイッククロット) 붕대 (퀵 클롯) 绷带(止血型) 止血粉 diff --git a/addons/noradio/stringtable.xml b/addons/noradio/stringtable.xml index 676885541a..01990659df 100644 --- a/addons/noradio/stringtable.xml +++ b/addons/noradio/stringtable.xml @@ -6,6 +6,7 @@ 去无线电 Kein Funkgerät 음소거 + 無線無し Mute Player diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index c51d938b81..4373d114c7 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -72,24 +72,28 @@ 冷却系数 냉각 계수 Abkühlungskoeffizienten + 冷却係数 Coefficient for how quickly a weapon cools down.\nHigher value increases cooling speed. 武器冷却速度系数。\n数值越高,冷却速度越快。 무기가 차가워지는 정도를 정합니다.\n높은 계수는 무기가 빨리 차가워지는데 관여합니다. Koeffizient, der angibt, wie schnell eine Waffe abkühlt.\nEin höherer Wert erhöht die Abkühlgeschwindigkeit. + 武器の冷却速度の係数。\n値を大きくすると冷却速度が速くなります。 Suppressor Coefficient 消音器系数 소음기 계수 Schalldämpfer-Koeffizient + サプレッサー係数 Coefficient for how much additional heat is added from having a suppressor attached.\nHigher value increases heat, 0 means no additional heat from the suppressor. 附加了消音器后,产生的额外热量系数。\n数值越高,热量越高,0意味着消音器不产生额外热量。 소음기 장착 시 만들어 지는 열에 대한 계수를 적용합니다.\n높을 수록 온도가 높아집니다, 0으로 설정 시 추가적인 열을 얻지 않습니다. Koeffizient, der angibt, wie viel zusätzliche Wärme durch das Anbringen eines Schalldämpfers hinzugefügt wird. Ein höherer Wert erhöht die Menge an Wärme, 0 bedeutet, dass keine zusätzliche Wärme durch den Schalldämpfer hinzukommt. + サプレッサーを取り付けることで追加される熱量の係数。\n値が大きいほど熱が増加し、0はサプレッサーからの追加の熱がないことを意味します。 Display Text on Jam diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index a8ef3b0ffb..b206883698 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -6,6 +6,7 @@ 超压 Überdruck 과중압력 + 過圧 Overpressure Distance Coefficient diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 275f3eff61..f71a705522 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -267,7 +267,7 @@ Sholef Sholef Sholef - ショルフ + ショレフ 숄레프 자주포 "神槍"自走炮 "神枪" @@ -301,7 +301,7 @@ Namer Namer Namer - ネイマー + ナメル 나메르 APC "花豹"裝甲運兵車 "花豹" @@ -318,7 +318,7 @@ Bardelas Bardelas Bardelas - バーラデラス + バルデラス 바델라스 자주대공포 "布萊德斯"防空車 "布莱德斯" @@ -335,7 +335,7 @@ Badger IFV Badger IFV Badger IFV - バッジ IFV + バジャー IFV 뱃져 IFV "蜜獾"步兵戰車 "蜜獾" @@ -556,7 +556,7 @@ Leopard 2SG Leopard 2SG Leopard 2SG - レオパルド 2SG + レオパルト 2SG 레오파르트 2SG "豹2型新加坡版"主戰坦克 "豹"2 新加坡版 @@ -573,7 +573,7 @@ FV510 Warrior FV510 Warrior FV510 Warrior - FV510 ウォーリアー + FV510 ウォーリア FV510 워리어 IFV FV510 "戰士"步兵戰車 FV510 "战士" @@ -1409,7 +1409,7 @@ M83 Granada de fumaça (Branca) M83 füstgránát (Fehér) M83 Granata fumogena (Bianco) - M18 発煙手榴弾 (白) + M83 発煙手榴弾 (白) M83 연막탄 (하양) M83煙霧彈 (白色) M83 烟雾弹(白色) @@ -1630,7 +1630,7 @@ Custom Covert II Custom Covert II ACP-C2 - カスタム コンバート II + カスタム コバートⅡ 커스텀 커버트 II 特裝隱蔽Ⅱ型手槍 金柏特特装隐蔽二型 @@ -3048,7 +3048,7 @@ Burraq UCAV Burraq UCAV Burraq UCAV - ブラーク UCAV + ブラク UCAV 부라크 UCAV "柏拉格"空中無人戰鬥載具 "柏拉格" 战斗无人机 @@ -3827,7 +3827,7 @@ Wiesel 2 AFF (Radar) "鼬鼠"2(雷达) "鼬鼠"2裝甲車 (雷達) - ウィーゼル 2 (レーダー) + ウィーゼル 2 RFCV (レーダー) Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Радар) diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 6a433cdbcc..b776d75c40 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -233,6 +233,7 @@ 텍스쳐 선택 텍스쳐 선택 Auswahl der Textur + テクスチャの選択 Object texture selection. Default: 0 @@ -240,6 +241,7 @@ 개체 텍스처 선택(기본값: 0) 물체의 텍스쳐를 선택합니다. 기본: 0 Auswahl der Objekttextur. Standard: 0 + オブジェクトテクスチャの選択。デフォルト: 0 Slides diff --git a/addons/tacticalladder/stringtable.xml b/addons/tacticalladder/stringtable.xml index d05491eb4f..8cd2f5266d 100644 --- a/addons/tacticalladder/stringtable.xml +++ b/addons/tacticalladder/stringtable.xml @@ -12,7 +12,7 @@ Scala Telescopica Teleszkopikus létra Escada telescópica - タクティカル ラダー + 伸縮はしご 접이식 사다리 伸缩梯子 伸縮梯子 @@ -29,7 +29,7 @@ Piazza scala Létra lerakása Implantar escada - ラダーを設置 + はしごを設置 사다리 배치 部署梯子 佈署梯子 @@ -46,7 +46,7 @@ Lascia scala Létra eldobása Derrubar escada - ラダーを落とす + はしごを落とす 사다리 내려놓기 降下梯子 降下梯子 @@ -94,7 +94,7 @@ Posiziona scala Létra elhelyezése Posicionar escada - ラダーの位置 + はしごの位置 사다리 설치 梯子位置 梯子位置 @@ -111,7 +111,7 @@ Prendi scala Létra felvétele Pegar escada - ラダーを拾う + はしごを拾う 사다리 줍기 捡起梯子 撿起梯子 diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 3d36ceb295..709456d101 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -137,7 +137,7 @@ X černě X em preto Черный Х - 黒のX印 + X印 검정 X 黑色X标记 黑色X標記 @@ -153,7 +153,7 @@ X červeně X em vermelho Красный Х - 赤のX印 + X印 빨간 X 红色X标记 紅色X標記 @@ -169,7 +169,7 @@ X zeleně X em verde Зеленый Х - 緑のX印 + X印 초록 X 绿色X标记 綠色X標記 @@ -185,7 +185,7 @@ X modře X em azul Синий Х - 青のX印 + X印 파랑 X 蓝色X标记 藍色X標記 @@ -193,33 +193,43 @@ Up Arrow + 上矢印 Down Arrow + 下矢印 Left Arrow + 左矢印 Right Arrow + 右矢印 Circle + Cross + 十字 Diamond + ひし形 Square + 四角 Triangle + 三角形 Triangle Inverted + 三角形 (反転) Spray Paint (Black) @@ -231,7 +241,7 @@ Černý sprej Spray de tinta preta Черный спрей - 黒のスプレー缶 + スプレー缶 (黒) 검정 스프레이 黑色喷漆 黑色噴漆 @@ -247,7 +257,7 @@ Červený sprej Spray de tinta vermelha Красный спрей - 赤のスプレー缶 + スプレー缶 (赤) 빨강 스프레이 红色喷漆 紅色噴漆 @@ -263,7 +273,7 @@ Zelený sprej Spray de tinta verde Зеленый спрей - 緑のスプレー缶 + スプレー缶 (緑) 초록 스프레이 绿色喷漆 綠色噴漆 @@ -279,7 +289,7 @@ Modrý sprej Spray de tinta azul Синий спрей - 青のスプレー缶 + スプレー缶 (青) 파랑 스프레이 蓝色喷漆 藍色噴漆 diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index a0f986914b..175af32794 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -11,7 +11,7 @@ Polní lopatka Ferramenta de trincheira Саперная лопата - シャベル + 塹壕ツール 야전삽 战备锹 戰備鍬 @@ -27,7 +27,7 @@ Polní lopatky se používají k zákopovým a jiným pracem. Ferramenta de trincheira Саперная лопата - シャベル + 塹壕ツール 야전삽 战备锹 戰備鍬 diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 803a41ae87..5e0a40e508 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -690,9 +690,11 @@ Hide Default Action Icon + デフォルトのアクションアイコンを非表示 Hides the icon shown automatically when something is in front of the cursor. Requires a game restart.\nWarning: Does not remove the action itself! It is advisable to unbind 'Use default action' key to prevent unwanted interactions. + カーソルの前に何かがあるときに自動的に表示されるアイコンを非表示にします。 ゲームを再起動する必要があります。\n警告:アクション自体は削除されません! 誤って実行することを防ぐために、'標準アクション'キーのバインドを解除することをお勧めします。 diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index d8b823ce1b..1009eeee28 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -22,6 +22,7 @@ Cruise control on Tempomat an 속도 유지기 켜짐 + クルーズコントロールを有効化 Speed Limiter off @@ -44,12 +45,13 @@ Cruise control off Tempomat aus 속도 유지기 꺼짐 + クルーズコントロールを無効化 Speed Limit Geschwindigkeitsbegrenzung Limite di velocità - 速度制限 + 制限速度 Ograniczenie prędkości Ограничение скорости Limite de Velocidade @@ -82,12 +84,13 @@ Cruise Control Tempomat 속도 유지기 + クルーズコントロール Increase Speed Limit Maximale Geschwindigkeit erhöhen Aumenta limite di velocità - 速度制限を増やす + 制限速度を増やす Zwiększ ograniczenie prędkości Увеличить ограничение скорости Aumentar Limite de Velocidade @@ -103,7 +106,7 @@ Decrease Speed Limit Maximale Geschwindigkeit verringern Diminuisce limite di velocità - 速度制限を減らす + 制限速度を減らす Zmniejsz ograniczenie prędkości Уменьшить ограничение скорости Diminuir Limite de Velocidade @@ -182,7 +185,7 @@ Schrittgröße des Geschwindigkeitsbegrenzers Przeskok limitera prędkości Pas du limiteur de vitesse - 設定速度の増減量 + 制限速度の増減量 Krokování omezovače rychlosti Шаг ограничителя скорости Salto de limitador de vehículo diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 1b48d18c18..5e76c88b51 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -123,6 +123,7 @@ 设置为0将使用默认的视频设置 0으로 설정시 기존 비디오 설정을 사용합니다. Bei Einstellung auf 0 werden die Standard-Videoeinstellungen verwendet. + 0に設定すると、デフォルトのビデオ設定が使用されます Client View Distance (On Foot) diff --git a/addons/viewports/stringtable.xml b/addons/viewports/stringtable.xml index 9691b29b85..b2c391eccb 100644 --- a/addons/viewports/stringtable.xml +++ b/addons/viewports/stringtable.xml @@ -3,9 +3,11 @@ Viewports + ビューポート Allows crew to look through periscopes + 乗組員がペリスコープを通して外を見ることができます diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index c994b39021..4b7086c600 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1928,6 +1928,7 @@ Einheit anzünden 焚烧单位 유닛 불로 태우기 + ユニットを燃やす diff --git a/optionals/compat_rhs_afrf3/stringtable.xml b/optionals/compat_rhs_afrf3/stringtable.xml index 5a208e7a40..2e1dee95d0 100644 --- a/optionals/compat_rhs_afrf3/stringtable.xml +++ b/optionals/compat_rhs_afrf3/stringtable.xml @@ -12,6 +12,7 @@ [CSW] ВОГ-17М [CSW] VOG-17M [CSW] VOG-17M + [CSW] VOG-17M [CSW] VOG-30 @@ -24,6 +25,7 @@ [CSW] ВОГ-30 [CSW] VOG-30 [CSW] VOG-30 + [CSW] VOG-30 [CSW] GPD-30 @@ -36,6 +38,7 @@ [CSW] ГПД-30 [CSW] GPD-30 [CSW] GPD-30 + [CSW] GPD-30 [CSW] ATGM 9M131M @@ -48,6 +51,7 @@ [CSW] ПТРК 9М131М [CSW] ATGM 9M131M [CSW] ATGM 9M131M + [CSW] ATGM 9M131M [CSW] ATGM 9M131F @@ -60,6 +64,7 @@ [CSW] ПТРК 9М131Ф [CSW] ATGM 9M131F [CSW] ATGM 9M131F + [CSW] ATGM 9M131F [CSW] ATGM 9M133F @@ -72,6 +77,7 @@ [CSW] ПТРК 9М133Ф [CSW] ATGM 9M133F [CSW] ATGM 9M133F + [CSW] ATGM 9M133F [CSW] ATGM 9M133 @@ -84,6 +90,7 @@ [CSW] ПТРК 9М133 [CSW] ATGM 9M133 [CSW] ATGM 9M133 + [CSW] ATGM 9M133 [CSW] ATGM 9M133-1 @@ -96,6 +103,7 @@ [CSW] ПТРК 9М133-1 [CSW] ATGM 9M133-1 [CSW] ATGM 9M133-1 + [CSW] ATGM 9M133-1 [CSW] ATGM 9M133M2 @@ -108,6 +116,7 @@ [CSW] ПТРК 9М133M2 [CSW] ATGM 9M133M2 [CSW] ATGM 9M133M2 + [CSW] ATGM 9M133M2 [CSW] HEAT PG-9V @@ -120,6 +129,7 @@ [CSW] ПГ-9В [CSW] HEAT PG-9V [CSW] HEAT PG-9V + [CSW] HEAT PG-9V [CSW] HEAT PG-9N @@ -132,6 +142,7 @@ [CSW] ПГ-9Н [CSW] HEAT PG-9N [CSW] HEAT PG-9N + [CSW] HEAT PG-9N [CSW] HEAT PG-9VNT @@ -144,6 +155,7 @@ [CSW] ПГ-9ВНТ [CSW] HEAT PG-9VNT [CSW] HEAT PG-9VNT + [CSW] HEAT PG-9VNT [CSW] HE-FRAG OG-9V @@ -156,6 +168,7 @@ [CSW] ОГ-9В [CSW] HE-FRAG OG-9V [CSW] HE-FRAG OG-9V + [CSW] HE-FRAG OG-9V [CSW] HE-FRAG OG-9VM @@ -168,6 +181,7 @@ [CSW] ОГ-9ВМ [CSW] HE-FRAG OG-9VM [CSW] HE-FRAG OG-9VM + [CSW] HE-FRAG OG-9VM diff --git a/optionals/compat_rhs_usf3/stringtable.xml b/optionals/compat_rhs_usf3/stringtable.xml index 1868709b58..41d539b16a 100644 --- a/optionals/compat_rhs_usf3/stringtable.xml +++ b/optionals/compat_rhs_usf3/stringtable.xml @@ -4,50 +4,62 @@ [CSW] BGM-71A TOW [CSW] BGM-71A TOW + [CSW] BGM-71A TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW + [CSW] BGM-71B TOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW + [CSW] BGM-71C ITOW [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 + [CSW] BGM-71D TOW-2 [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A + [CSW] BGM-71E TOW-2A [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B + [CSW] BGM-71F TOW-2B [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO + [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71H Bunker Buster [CSW] BGM-71H 벙커버스터 + [CSW] BGM-71H Bunker Buster [CSW] Mk. 19 40mm M384 HE [CSW] Mk.19 40mm M384 HE + [CSW] Mk. 19 40mm M384 HE [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk.19 40mm M430I 이중목적고폭탄 + [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk.19 40mm M430A1 이중목적고폭탄 + [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk. 19 40mm M1001 Canister [CSW] Mk.19 40mm M1001 산탄 + [CSW] Mk. 19 40mm M1001 キャニスター From cce1700f9cd8a9a571d954f2ebc5088158d60c2a Mon Sep 17 00:00:00 2001 From: Krzyciu <63709320+Krzyciu@users.noreply.github.com> Date: Sat, 28 May 2022 19:30:28 +0200 Subject: [PATCH 02/92] Translations - Add Missing Polish (#8921) * Translations - Add Missing Polish When merged this pull request will: - Add missing Polish Translations * Missing space * Typo Co-authored-by: Filip Maciejewski * Typo Co-authored-by: Filip Maciejewski Co-authored-by: PabstMirror --- addons/casings/stringtable.xml | 5 +++++ addons/common/stringtable.xml | 2 ++ addons/csw/stringtable.xml | 4 ++++ addons/field_rations/stringtable.xml | 2 ++ addons/finger/stringtable.xml | 6 +++++- addons/fire/stringtable.xml | 2 ++ addons/laser/stringtable.xml | 2 ++ addons/marker_flags/stringtable.xml | 12 ++++++++++++ addons/medical_gui/stringtable.xml | 2 ++ addons/noradio/stringtable.xml | 1 + addons/overheating/stringtable.xml | 4 ++++ addons/overpressure/stringtable.xml | 1 + addons/slideshow/stringtable.xml | 2 ++ addons/tagging/stringtable.xml | 10 ++++++++++ addons/ui/stringtable.xml | 2 ++ addons/vehicles/stringtable.xml | 3 +++ addons/viewdistance/stringtable.xml | 1 + addons/viewports/stringtable.xml | 1 + addons/zeus/stringtable.xml | 1 + 19 files changed, 62 insertions(+), 1 deletion(-) diff --git a/addons/casings/stringtable.xml b/addons/casings/stringtable.xml index 25fd4f4ba7..8c1e3c8818 100644 --- a/addons/casings/stringtable.xml +++ b/addons/casings/stringtable.xml @@ -4,22 +4,27 @@ ACE Casings ACE 薬莢 + ACE Łuski Casings Enabled 薬莢の有効化 + Łuski włączone Enable persistent casings (POTENTIAL performance impact on old/weak systems) 永続的な薬莢を有効にする (古い/弱いシステムに対する潜在的なパフォーマンスの影響) + Włącz pozostawanie łusek (MOŻLIWY wpływ na wydajność na starych/słabych komputerach) Maximum casings 薬莢の最大量 + Maksymalna liczba łusek Maximum amount of casings to display 表示される薬莢の最大の数 + Maksymalna liczba wyświetlanych łusek diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 6c8f14afdb..c50ceb4c17 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1320,6 +1320,7 @@ ACE 未分类 ACE 무분류 ACE Unkategorisiert + ACE Nieskategoryzowane ACE 無区分 @@ -1639,6 +1640,7 @@ Unload Weapon + Wyładuj Broń 武器からマガジンを抜く diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml index 3770c870e2..0bef3673c5 100644 --- a/addons/csw/stringtable.xml +++ b/addons/csw/stringtable.xml @@ -176,21 +176,25 @@ Ammo Storage Munitionslager + Magazyn amunicji 弾薬の格納 Determines whether extra magazines are stored on the ground or inside an ammo box Legt fest, ob zusätzliche Magazine auf dem Boden oder in einer Munitionskiste aufbewahrt werden + Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją. 追加のマガジンを地面に設置するか、弾薬箱の中に保管するかを決定します Ground Boden + Ziemia 地面 Ammo Box Munitionskiste + Skrzynka amunicyjna 弾薬箱 diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index cea1322f6f..d67eb846c3 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1107,11 +1107,13 @@ Sunflower Seeds Sonnenblumenkerne + Nasiona Słonecznika ヒマワリの種 Roasted And Salted Geröstet und Gesalzen + Pieczone i Solone 炒って塩で味付け済 diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index e85dedfdf3..acff462486 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -38,7 +38,7 @@ Points, and shows a virtual marker of where you are looking to nearby units. Can be held down. Zeigt in der Nähe befindlichen Spielern die eigene Blickrichtung mit Hilfe eines Kreissymbols an. Permet d'effectuer un pointage du doigt, ce qui a pour effet d'afficher sur l'écran des joueurs alliés proches un marqueur virtuel, indiquant la direction dans laquelle vous regardez. Peut être maintenu. - Wskazuje a także wyświetla wirtualny marker-okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany. + Wskazuje a także wyświetla wirtualny znacznik - okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany. Mutat, és elhelyez egy virtuális jelölőt a nézett területhez közeli egységekhez. Lenyomva tartható. Aponta e mostra um marcador virtual para onde você está olhando para unidades próximas. Pode ser utilizado para baixo. Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать. @@ -89,24 +89,28 @@ Visual Marker Size Coefficient Visueller Markergrößenkoeffizient 보이는 마커 크기 계수 + Współczynnik wielkości wirtualnego znacznika 指さし表記大きさ係数 Adjusts the size of the visual marker. Passt die Größe der visuellen Markierung an. 눈에 보이는 마커의 크기를 조정합니다. + Dostosowuje rozmiar wirtualnego znacznika. 指さし表記の大きさを調整します。 Proximity Scaling Näherungsskalierung 근접 스케일링 + Skalowanie odległościowe 近接性スケーリング Scales the size of the visual marker based on the distance between the player observing and the player pointing. Skaliert die Größe der visuellen Markierung basierend auf der Entfernung zwischen dem beobachtenden Spieler und dem zeigenden Spieler. 관찰하는 플레이어와 가리키는 플레이어 사이의 거리에 따라 보이는 마커의 크기를 조정합니다. + Skaluje rozmiar wirtualnego znacznika, na podstawie odległości między graczem obserwującym a graczem wskazującym. 見ているプレーヤーと指さししたプレーヤーの距離に基づいて、指さし表記の大きさを調整します。 diff --git a/addons/fire/stringtable.xml b/addons/fire/stringtable.xml index ac168bbebc..0f59b88693 100644 --- a/addons/fire/stringtable.xml +++ b/addons/fire/stringtable.xml @@ -73,6 +73,7 @@ 启用着火单位发出惨叫声 불 붙은 유닛 비명 Schreie von brennenden Einheiten aktivieren + Włącz krzyki podpalonych jednostek 炎上中の悲鳴を有効 @@ -81,6 +82,7 @@ 启用着火的单位是否会发出惨叫声。 불이 붙은 유닛이 소리를 지르게 합니다 Aktiviert, ob brennende Einheiten den Schrei-Ton abspielen + Włącza, czy płonące jednostki będą odtwarzać dźwięk krzyku 有効化すると炎上しているユニットが悲鳴を上げます diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index d9562d93d8..441f47375d 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -88,10 +88,12 @@ Draw Laser on Map 地図上にレーザーを表示する + Rysuj Laser na Mapie Active laser designator's position will be drawn on the map アクティブな指示レーザーの位置が地図上に描画されます + Pozycja aktywnego wskaźnika laserowego będzie rysowana na mapie. diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index 1a2742959f..32c676cd7b 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -4,20 +4,24 @@ Marker Flags Markierungsfahnen + Chorągiewki 旗マーカー Place Anywhere Überall platzieren どこでも設置可能 + Umieść w dowolnym miejscu Place marker flag anywhere regardless of surface. どのような地表でも旗を設置できるようにします + Umieść chorągiewkę w dowolnym miejscu, niezależnie od powierzchni. Place Flag Flagge platzieren + Postaw chorągiewkę 旗を設置 @@ -39,41 +43,49 @@ Marker Flag (White) Markierungsfahne (Weiß) + Chorągiewka (Biała) 旗マーカー (白) Marker Flag (Black) Markierungsfahne (Schwarz) + Chorągiewka (Czarna) 旗マーカー (黒) Marker Flag (Red) Markierungsfahne (Rot) + Chorągiewka (Czerwona) 旗マーカー (赤) Marker Flag (Green) Markierungsfahne (Grün) + Chorągiewka (Zielona) 旗マーカー (緑) Marker Flag (Blue) Markierungsfahne (Blau) + Chorągiewka (Niebieska) 旗マーカー (青) Marker Flag (Yellow) Markierungsfahne (Gelb) + Chorągiewka (Żółta) 旗マーカー (黄) Marker Flag (Orange) Markierungsfahne (Orange) + Chorągiewka (Pomarańczowa) 旗マーカー (橙) Marker Flag (Purple) Markierungsfahne (Lila) + Chorągiewka (Fioletowa) 旗マーカー (紫) diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 4b7678ccbd..98de8632ae 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1227,11 +1227,13 @@ Show Blood Loss Blutverlust anzeigen + Pokaż utratę krwi 失血量の表示 Show qualitative blood loss in the injury list. Qualitativen Blutverlust in der Verletzungsliste anzeigen. + Pokaż jakościową utratę krwi na liście ran. 負傷リストに段階的な失血量を表示します。 diff --git a/addons/noradio/stringtable.xml b/addons/noradio/stringtable.xml index 01990659df..6da884d07a 100644 --- a/addons/noradio/stringtable.xml +++ b/addons/noradio/stringtable.xml @@ -6,6 +6,7 @@ 去无线电 Kein Funkgerät 음소거 + Brak Radia 無線無し diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 4373d114c7..fe0df759d7 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -72,6 +72,7 @@ 冷却系数 냉각 계수 Abkühlungskoeffizienten + Współczynnik chłodzenia 冷却係数 @@ -79,6 +80,7 @@ 武器冷却速度系数。\n数值越高,冷却速度越快。 무기가 차가워지는 정도를 정합니다.\n높은 계수는 무기가 빨리 차가워지는데 관여합니다. Koeffizient, der angibt, wie schnell eine Waffe abkühlt.\nEin höherer Wert erhöht die Abkühlgeschwindigkeit. + Współczynnik szybkości chłodzenia broni.\nWiększa wartość zwiększa szybkość chłodzenia. 武器の冷却速度の係数。\n値を大きくすると冷却速度が速くなります。 @@ -86,6 +88,7 @@ 消音器系数 소음기 계수 Schalldämpfer-Koeffizient + Współczynnik tłumika サプレッサー係数 @@ -93,6 +96,7 @@ 附加了消音器后,产生的额外热量系数。\n数值越高,热量越高,0意味着消音器不产生额外热量。 소음기 장착 시 만들어 지는 열에 대한 계수를 적용합니다.\n높을 수록 온도가 높아집니다, 0으로 설정 시 추가적인 열을 얻지 않습니다. Koeffizient, der angibt, wie viel zusätzliche Wärme durch das Anbringen eines Schalldämpfers hinzugefügt wird. Ein höherer Wert erhöht die Menge an Wärme, 0 bedeutet, dass keine zusätzliche Wärme durch den Schalldämpfer hinzukommt. + Współczynnik określający, ile dodatkowego ciepła jest dodawane z założonego tłumika.\nWyższa wartość zwiększa ciepło, 0 oznacza brak dodatkowego ciepła z tłumika. サプレッサーを取り付けることで追加される熱量の係数。\n値が大きいほど熱が増加し、0はサプレッサーからの追加の熱がないことを意味します。 diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index b206883698..27777fdf42 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -6,6 +6,7 @@ 超压 Überdruck 과중압력 + Nadciśnienie 過圧 diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index b776d75c40..7affe102b1 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -233,6 +233,7 @@ 텍스쳐 선택 텍스쳐 선택 Auswahl der Textur + Wybór Tekstury テクスチャの選択 @@ -241,6 +242,7 @@ 개체 텍스처 선택(기본값: 0) 물체의 텍스쳐를 선택합니다. 기본: 0 Auswahl der Objekttextur. Standard: 0 + Wybór tekstury obiektu. Domyślnie: 0 オブジェクトテクスチャの選択。デフォルト: 0 diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 709456d101..4ab9cbf96d 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -194,42 +194,52 @@ Up Arrow 上矢印 + Strzałka w górę Down Arrow 下矢印 + Strzałka w dół Left Arrow 左矢印 + Strzałka w lewo Right Arrow 右矢印 + Strzałka w prawo Circle + Okrąg Cross 十字 + Krzyż Diamond ひし形 + Diament Square 四角 + Kwadrat Triangle 三角形 + Trójkąt Triangle Inverted 三角形 (反転) + Odwrócony trójkąt Spray Paint (Black) diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 5e0a40e508..3144187d4d 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -691,10 +691,12 @@ Hide Default Action Icon デフォルトのアクションアイコンを非表示 + Ukryj domyślną ikonę akcji Hides the icon shown automatically when something is in front of the cursor. Requires a game restart.\nWarning: Does not remove the action itself! It is advisable to unbind 'Use default action' key to prevent unwanted interactions. カーソルの前に何かがあるときに自動的に表示されるアイコンを非表示にします。 ゲームを再起動する必要があります。\n警告:アクション自体は削除されません! 誤って実行することを防ぐために、'標準アクション'キーのバインドを解除することをお勧めします。 + Ukrywa ikonę wyświetlaną automatycznie, gdy coś znajduje się przed kursorem. Wymaga ponownego uruchomienia gry.\nOstrzeżenie: Nie usuwa samej akcji! Zaleca się usunięcia przypisania klawisza „Użyj domyślnej akcji”, aby zapobiec niechcianym interakcjom. diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 1009eeee28..26c6f86203 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -22,6 +22,7 @@ Cruise control on Tempomat an 속도 유지기 켜짐 + Tempomat włączony クルーズコントロールを有効化 @@ -45,6 +46,7 @@ Cruise control off Tempomat aus 속도 유지기 꺼짐 + Tempomat wyłączony クルーズコントロールを無効化 @@ -84,6 +86,7 @@ Cruise Control Tempomat 속도 유지기 + Tempomat クルーズコントロール diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 5e76c88b51..124726731a 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -123,6 +123,7 @@ 设置为0将使用默认的视频设置 0으로 설정시 기존 비디오 설정을 사용합니다. Bei Einstellung auf 0 werden die Standard-Videoeinstellungen verwendet. + Ustawienie na 0, spowoduje użycie domyślnych ustawień wideo. 0に設定すると、デフォルトのビデオ設定が使用されます diff --git a/addons/viewports/stringtable.xml b/addons/viewports/stringtable.xml index b2c391eccb..44656f4fa8 100644 --- a/addons/viewports/stringtable.xml +++ b/addons/viewports/stringtable.xml @@ -7,6 +7,7 @@ Allows crew to look through periscopes + Pozwala załodze patrzeć przez peryskop 乗組員がペリスコープを通して外を見ることができます diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 4b7086c600..1e84c3fc6c 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1928,6 +1928,7 @@ Einheit anzünden 焚烧单位 유닛 불로 태우기 + Podpal Jednostkę ユニットを燃やす From 3f7530d89eed5d23d0cc386aaf3f4a83505ea2f8 Mon Sep 17 00:00:00 2001 From: ZluskeN Date: Tue, 31 May 2022 15:50:55 +0200 Subject: [PATCH 03/92] Cookoff - Add setting to destroy vehicle after cooking off (#8734) * Add setting to destroy vehicle after cooking off * Update stringtable.xml * Update stringtable.xml * Update addons/cookoff/stringtable.xml Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> * Update addons/cookoff/stringtable.xml Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> * Update initSettings.sqf Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> --- addons/cookoff/functions/fnc_cookOff.sqf | 4 ++-- addons/cookoff/initSettings.sqf | 10 ++++++++++ addons/cookoff/stringtable.xml | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/addons/cookoff/functions/fnc_cookOff.sqf b/addons/cookoff/functions/fnc_cookOff.sqf index fa842c0640..442cde80f2 100644 --- a/addons/cookoff/functions/fnc_cookOff.sqf +++ b/addons/cookoff/functions/fnc_cookOff.sqf @@ -69,8 +69,8 @@ if (_smokeDelayEnabled) then { _vehicle setVariable [QGVAR(isCookingOff), false, true]; [_pfh] call CBA_fnc_removePerFrameHandler; - if (_detonateAfterCookoff) then { - _vehicle setDamage 1; + if (GVAR(destroyVehicleAfterCookoff) || _detonateAfterCookoff) then { + _vehicle setDamage [1, _detonateAfterCookoff]; }; }; diff --git a/addons/cookoff/initSettings.sqf b/addons/cookoff/initSettings.sqf index cbba7c1719..8912636fd6 100644 --- a/addons/cookoff/initSettings.sqf +++ b/addons/cookoff/initSettings.sqf @@ -18,6 +18,16 @@ false // Needs mission restart ] call CBA_fnc_addSetting; +[ + QGVAR(destroyVehicleAfterCookoff), "CHECKBOX", + [LSTRING(destroyVehicleAfterCookoff_name), LSTRING(destroyVehicleAfterCookoff_tooltip)], + LSTRING(category_displayName), + false, // default value + true, // isGlobal + {[QGVAR(destroyVehicleAfterCookoff), _this] call EFUNC(common,cbaSettings_settingChanged)}, + false // Needs mission restart +] call CBA_fnc_addSetting; + [ QGVAR(enableAmmoCookoff), "CHECKBOX", [LSTRING(enableAmmoCookoff_name), LSTRING(enableAmmoCookoff_tooltip)], diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 81eb49e8c0..9f45b68450 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -166,6 +166,12 @@ Multiplikátor pro pravděpodobnost vznícení munice. Vyšší hodnota znamená vyšší šanci vznícení munice. 쿡오프가 일어날 확률에 계수를 곱합니다. 더 큰 숫자는 더 높은 확률의 쿡오프를 일으킵니다. + + Destroy Vehicles After Cook-off + + + Controls whether vehicles will always be destroyed after cooking off. Depending on the cookoff, the vehicle may explode or may simply be killed without effects. + Enable Cook-Off Vehicle Fire 誘爆火災を有効化 From d8af7b34b721048d9fd0b772785706d622c64a57 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Mon, 6 Jun 2022 13:50:53 +0200 Subject: [PATCH 04/92] Cookoff - Fix ammo not being removed from turrets with additional FFV (#8928) --- addons/cookoff/functions/fnc_getVehicleAmmo.sqf | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/addons/cookoff/functions/fnc_getVehicleAmmo.sqf b/addons/cookoff/functions/fnc_getVehicleAmmo.sqf index 62015cadae..295d54a54f 100644 --- a/addons/cookoff/functions/fnc_getVehicleAmmo.sqf +++ b/addons/cookoff/functions/fnc_getVehicleAmmo.sqf @@ -24,21 +24,18 @@ TRACE_1("getVehicleAmmo",_vehicle); private _ammoToDetonate = []; private _totalAmmo = 0; -// from ace_common, tweaked becasue command is busted -private _ffvTurrets = fullCrew [_vehicle, "", true] select {_x select 4} apply {_x select 3}; - // Get ammo from turrets { _x params ["_mag", "_turret", "_count"]; // if the turret is an FFV seat, it takes magazines from the soldier - if (!(_turret in _ffvTurrets) && {_count > 0}) then { + if (_count > 0) then { private _ammo = getText (configFile >> "CfgMagazines" >> _mag >> "ammo"); private _model = getText (configFile >> "CfgAmmo" >> _ammo >> "model"); if (_model == "\A3\weapons_f\empty") exitWith {TRACE_3("skipping",_mag,_ammo,_model);}; _ammoToDetonate pushBack [_mag, _count]; _totalAmmo = _totalAmmo + _count; }; -} forEach (magazinesAllTurrets _vehicle); +} forEach (magazinesAllTurrets [_vehicle, true]); // Get ammo from cargo space { From 57893f311dfa1940f94fdc8d5cdfd99494752beb Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Wed, 22 Jun 2022 03:35:06 +0900 Subject: [PATCH 05/92] KoreanTranslation (#8937) Someone has returned all the translations in Korean to English. there is no need to return them. --- addons/arsenal/stringtable.xml | 2 +- addons/csw/stringtable.xml | 4 ++++ addons/field_rations/stringtable.xml | 2 ++ addons/kestrel4500/stringtable.xml | 14 +++++++------- addons/magazinerepack/stringtable.xml | 1 + addons/medical_gui/stringtable.xml | 2 ++ addons/medical_treatment/stringtable.xml | 2 +- addons/missileguidance/stringtable.xml | 2 +- addons/realisticnames/stringtable.xml | 16 ++++++++-------- addons/repair/stringtable.xml | 8 ++++---- addons/scopes/stringtable.xml | 6 +++--- addons/tagging/stringtable.xml | 8 ++++---- addons/vehicles/stringtable.xml | 6 +++--- optionals/compat_rhs_afrf3/stringtable.xml | 22 +++++++++++----------- 14 files changed, 52 insertions(+), 43 deletions(-) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 9c8f8644d1..657dc6ce94 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -967,7 +967,7 @@ Importer les sets BI VA dans l'arsenal ACE Importiert die BI-VA-Ausrüstungen in das ACE-Arsenal 標準の VA 装備から ACE 武器庫へ取り込み - 바닐라 로드아웃을 ace 아스날로 가져오기 + 바닐라 로드아웃을 ACE 아스날로 가져오기 匯入BI原廠虛擬軍火庫的裝備到ACE虛擬軍火庫中 导入 BI 原版虚拟军火库的负载到 ACE 虚拟军火库中 Importa l'arsenale virtuale BI nell'arsenale ACE diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml index 0bef3673c5..df4892558a 100644 --- a/addons/csw/stringtable.xml +++ b/addons/csw/stringtable.xml @@ -176,24 +176,28 @@ Ammo Storage Munitionslager + 탄약 보관 Magazyn amunicji 弾薬の格納 Determines whether extra magazines are stored on the ground or inside an ammo box Legt fest, ob zusätzliche Magazine auf dem Boden oder in einer Munitionskiste aufbewahrt werden + 여분의 탄약을 지면 또는 탄약 상자에 넣을지 결정합니다. Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją. 追加のマガジンを地面に設置するか、弾薬箱の中に保管するかを決定します Ground Boden + 지면 Ziemia 地面 Ammo Box Munitionskiste + 탄약 상자 Skrzynka amunicyjna 弾薬箱 diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index d67eb846c3..5f8961e12b 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1107,12 +1107,14 @@ Sunflower Seeds Sonnenblumenkerne + 해바라기씨 Nasiona Słonecznika ヒマワリの種 Roasted And Salted Geröstet und Gesalzen + 굽고 간을 했습니다 Pieczone i Solone 炒って塩で味付け済 diff --git a/addons/kestrel4500/stringtable.xml b/addons/kestrel4500/stringtable.xml index 04327c3c5f..f6580aa507 100644 --- a/addons/kestrel4500/stringtable.xml +++ b/addons/kestrel4500/stringtable.xml @@ -13,7 +13,7 @@ Kestrel 4500NV Kestrel 4500NV ケストレル 4500NV - Kestrel 4500NV + 케스트렐 4500NV 猎隼4500 测风仪 獵隼4500測風儀 Kestrel 4500NV @@ -30,7 +30,7 @@ Kestrel 4500 kézi szél-és időjárásmérő Příruční meteostanice Kestrel 4500 ケストレル 4500 携帯型風速計 - Kestrel 4500 휴대형 기상 관측기 + 케스트렐 4500 휴대형 기상 관측기 猎隼4500 掌上型天气追踪仪 獵隼4500掌上型天氣追蹤儀 Kestrel 4500 Cep Hava Durumu Izleyicisi @@ -47,7 +47,7 @@ Abrir Kestrel 4500 Otevřít Kestrel 4500 Kestrel 4500 を開く - Kestrel 4500 열기 + 케스트렐 4500 열기 开启猎隼4500 测风仪 開啟獵隼4500測風儀 Aç Kestrel 4500 @@ -64,7 +64,7 @@ Zobrazit Kestrel 4500 Mostrar Kestrel 4500 ケストレル 4500 を見る - Kestrel 4500 보이기 + 케스트렐 4500 보이기 显示猎隼4500 测风仪 顯示獵隼4500測風儀 Göster Kestrel 4500 @@ -81,7 +81,7 @@ Skrýt Kestrel 4500 Ocultar Kestrel 4500 Kestrel 4500 を隠す - Kestrel 4500 숨기기 + 케스트렐 4500 숨기기 隐藏猎隼4500 测风仪 隱藏獵隼4500測風儀 Gizle Kestrel 4500 @@ -98,7 +98,7 @@ Otevřít Kestrel 4500 Abrir Kestrel 4500 ケストレル 4500 を開く - Kestrel 4500 열기 + 케스트렐 4500 열기 开启猎隼4500 测风仪 開啟獵隼4500測風儀 Aç Kestrel 4500 @@ -115,7 +115,7 @@ Zobrazit Kestrel 4500 Mostrar Kestrel 4500 ケストレル 4500 を見る - Kestrel 4500 숨기기 + 케스트렐 4500 숨기기 显示猎隼4500 测风仪 顯示獵隼4500測風儀 Göster Kestrel 4500 diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index adb8a6ee00..3030f98b54 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -190,6 +190,7 @@ Repack Animation Animation für Umpacken Animacja przepakowywania + 탄약 합치기 애니메이션 詰め替え時のアニメーション diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 98de8632ae..ae7c076a4c 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1227,12 +1227,14 @@ Show Blood Loss Blutverlust anzeigen + 혈액 손실 표시 Pokaż utratę krwi 失血量の表示 Show qualitative blood loss in the injury list. Qualitativen Blutverlust in der Verletzungsliste anzeigen. + 부상 목록에 혈액 손실량을 표시합니다. Pokaż jakościową utratę krwi na liście ran. 負傷リストに段階的な失血量を表示します。 diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 0c0f8cfe5f..5d1dbf53c1 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -4662,7 +4662,7 @@ Ciało drgnęło i może nie być martwe! Der Körper zuckte und kann nicht tot sein! 身体抽搐了一下,可能还没死! - 꿈틀대는걸 보니 죽은것 같지는 않습니다! + 꿈틀대는걸 보니 죽은 것 같지는 않습니다! diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index a0177a41e6..11092501b2 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -47,7 +47,7 @@ Hydra-70 DAGR rakéta Hydra-70 DAGR ハイドラ-70 DAGR ミサイル - Hydra-70 DAGR 미사일 + 히드라-70 DAGR 미사일 Hydra-70 DAGR 制导火箭 九頭蛇-70 直接攻擊導引飛彈 Hydra-70 DAGR Füze diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index f71a705522..df3987b6fc 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -573,7 +573,7 @@ FV510 Warrior FV510 Warrior FV510 Warrior - FV510 ウォーリア + FV510 ウォーリアー FV510 워리어 IFV FV510 "戰士"步兵戰車 FV510 "战士" @@ -1234,7 +1234,7 @@ Ka-60 Kasatka (fegyvertelen) Ka-60 Kasatka (disarmato) Ka-60 カサートカ (非武装) - Ka-60 Kasatka (비무장) + Ka-60 카사트카 (비무장) Ka-60 "逆戟鯨"直升機 (無武裝) Ka-60 "虎鲸"(无武装) Ka-60 Kasatka (Silahsız) @@ -3852,7 +3852,7 @@ Leupold Mark 4 HAMR Leupold Mark 4 HAMR Leupold Mark 4 HAMR - 류폴드 Mark 4 HAMR + 류폴드 마크 4 HAMR Leupold Mark 4 HAMR (Khaki) @@ -3868,7 +3868,7 @@ Leupold Mark 4 HAMR (Khaki) Leupold Mark 4 HAMR (Haki) Leupold Mark 4 HAMR (Caqui) - 류폴드 Mark 4 HAMR (카키) + 류폴드 마크 4 HAMR (카키) Leupold Mark 4 HAMR (2D) @@ -3884,7 +3884,7 @@ Leupold Mark 4 HAMR (2D) Leupold Mark 4 HAMR (2D) Leupold Mark 4 HAMR (2D) - 류폴드 Mark 4 HAMR (2D) + 류폴드 마크 4 HAMR (2D) Leupold Mark 4 HAMR (PIP) @@ -3900,7 +3900,7 @@ Leupold Mark 4 HAMR (PIP) Leupold Mark 4 HAMR (PIP) Leupold Mark 4 HAMR (PIP) - 류폴드 Mark 4 HAMR (PIP) + 류폴드 마크 4 HAMR (PIP) ELCAN SpecterOS (Tan) @@ -4315,7 +4315,7 @@ Burris XTR II (ASP-1 Kir) Burris XTR II (ASP-1 Kir) Burris XTR II(ASP-1 Kir) - 버리스 XTR II (ASP-1 Kir) + 버리스 XTR II (ASP-1 키르) EOTech XPS3 (Tan) @@ -4862,7 +4862,7 @@ 口径: 5.7mm<br />装弾数: 50<br />次で使用: P90 口徑: 5.7毫米<br />發數: 50<br />使用於: P90 口径:5.7 mm<br />发数:50<br />使用于:P90 - 구경: 5.7mm<br />장탄수: 50<br />사용됨: P90 + 구경: 5.7mm<br />장탄수: 50<br />사용처: P90 Kalibre: 5.7mm<br />Mermi: 50<br />Kullanıyor: P90 diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 7c4ab3fe63..462101738c 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -424,7 +424,7 @@ javítása... Ремонтируем... 修理しています・・・ - 수리중... + 수리 중... 正在维修... 維修中... Tamir Ediliyor... @@ -441,7 +441,7 @@ %1 javítása... Ремонтируем %1... %1 を修理しています・・・ - %1 수리중... + %1 수리 중... 正在维修%1... 維修%1中... Tamir Ediliyor %1... @@ -474,7 +474,7 @@ Parte riparata completamente Pièce entièrement réparée. 完全に修理された部品 - 부분 완벽히 수리됨 + 완전수리된 부품 完整维修部分 完整維修部分 @@ -1455,7 +1455,7 @@ Lista di unità che verranno classificate come genieri, separate da virgole. Liste d'unités qui seront classées comme ingénieurs, séparées par des virgules. 一覧に記載されたユニット名を、工兵として指定します。コンマで複数を指定できます。 - 목록내 보직이름은 정비공으로 분류됩니다. 쉼표로 구분합니다. + 목록 내 보직이름은 정비공으로 분류됩니다. 쉼표로 구분합니다. 工兵名单,把单位名称输入在这边即可定义其为工兵。每个单位使用逗号以做区隔。 工兵名單,把單位名稱輸入在這邊即可定義其為工兵。每個單位使用逗號以做區隔。 diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index f869c19972..af79a5fe3c 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -529,7 +529,7 @@ %1D %1D %1D - %1D + %1하 %1D %1D %1D @@ -545,7 +545,7 @@ %1L %1L %1L - %1L + %1좌 %1L %1L %1L @@ -561,7 +561,7 @@ %1R %1R %1R - %1R + %1우 %1R %1R %1R diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 4ab9cbf96d..da80e58847 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -7,7 +7,7 @@ タグ付け Tagowanie Markieren (Spraydose) - 낙서하기 + 태그하기 Marquage Marcamento 喷漆 @@ -23,7 +23,7 @@ 標準で開くタグ付けシステムの設定を行います。 Skonfiguruj zachowanie systemu tagowania. Konfiguriert, wie das Markieren standardmäßig funktioniert. - 낙서 시스템의 기본사항을 설정합니다. + 태그 시스템의 기본사항을 설정합니다. Configure le fonctionnement par défaut du système de marquage. Configura quanto il sistema di marcamento agirà da se. 定义喷漆系统预设设定 @@ -38,7 +38,7 @@ クイック タグ Szybkie tagowanie Schnelle Markierung (Spraydose) - 스프레이 페인트 - 빠른 낙서 + 스프레이 페인트 - 빠른 태그 Peinture en spray - Marquage rapide Marcamento Rapido 快速喷漆 @@ -121,7 +121,7 @@ Marcar Маркер タグ - 낙서하기 + 태그 Tag 喷漆 噴漆 diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 26c6f86203..b6212a35d6 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -21,7 +21,7 @@ Cruise control on Tempomat an - 속도 유지기 켜짐 + 자동운전 켜짐 Tempomat włączony クルーズコントロールを有効化 @@ -45,7 +45,7 @@ Cruise control off Tempomat aus - 속도 유지기 꺼짐 + 자동운전 꺼짐 Tempomat wyłączony クルーズコントロールを無効化 @@ -85,7 +85,7 @@ Cruise Control Tempomat - 속도 유지기 + 자동운전 Tempomat クルーズコントロール diff --git a/optionals/compat_rhs_afrf3/stringtable.xml b/optionals/compat_rhs_afrf3/stringtable.xml index 2e1dee95d0..de15850d76 100644 --- a/optionals/compat_rhs_afrf3/stringtable.xml +++ b/optionals/compat_rhs_afrf3/stringtable.xml @@ -50,7 +50,7 @@ [CSW] ATGM 9M131M [CSW] ПТРК 9М131М [CSW] ATGM 9M131M - [CSW] ATGM 9M131M + [CSW] 9M131M 대전차미사일 [CSW] ATGM 9M131M @@ -63,7 +63,7 @@ [CSW] ATGM 9M131F [CSW] ПТРК 9М131Ф [CSW] ATGM 9M131F - [CSW] ATGM 9M131F + [CSW] 9M131F 대전차미사일 [CSW] ATGM 9M131F @@ -76,7 +76,7 @@ [CSW] ATGM 9M133F [CSW] ПТРК 9М133Ф [CSW] ATGM 9M133F - [CSW] ATGM 9M133F + [CSW] 9M133F 대전차미사일 [CSW] ATGM 9M133F @@ -89,7 +89,7 @@ [CSW] ATGM 9M133 [CSW] ПТРК 9М133 [CSW] ATGM 9M133 - [CSW] ATGM 9M133 + [CSW] 9M133 대전차미사일 [CSW] ATGM 9M133 @@ -102,7 +102,7 @@ [CSW] ATGM 9M133-1 [CSW] ПТРК 9М133-1 [CSW] ATGM 9M133-1 - [CSW] ATGM 9M133-1 + [CSW] 9M133-1 대전차미사일 [CSW] ATGM 9M133-1 @@ -115,7 +115,7 @@ [CSW] ATGM 9M133M2 [CSW] ПТРК 9М133M2 [CSW] ATGM 9M133M2 - [CSW] ATGM 9M133M2 + [CSW] 9M133M2 대전차미사일 [CSW] ATGM 9M133M2 @@ -128,7 +128,7 @@ [CSW] HEAT PG-9V [CSW] ПГ-9В [CSW] HEAT PG-9V - [CSW] HEAT PG-9V + [CSW] PG-9V 대전차고폭탄 [CSW] HEAT PG-9V @@ -141,7 +141,7 @@ [CSW] HEAT PG-9N [CSW] ПГ-9Н [CSW] HEAT PG-9N - [CSW] HEAT PG-9N + [CSW] PG-9N 대전차고폭탄 [CSW] HEAT PG-9N @@ -154,7 +154,7 @@ [CSW] HEAT PG-9VNT [CSW] ПГ-9ВНТ [CSW] HEAT PG-9VNT - [CSW] HEAT PG-9VNT + [CSW] PG-9VNT 대전차고폭탄 [CSW] HEAT PG-9VNT @@ -167,7 +167,7 @@ [CSW] HE-FRAG OG-9V [CSW] ОГ-9В [CSW] HE-FRAG OG-9V - [CSW] HE-FRAG OG-9V + [CSW] OG-9V 고폭파편탄 [CSW] HE-FRAG OG-9V @@ -180,7 +180,7 @@ [CSW] HE-FRAG OG-9VM [CSW] ОГ-9ВМ [CSW] HE-FRAG OG-9VM - [CSW] HE-FRAG OG-9VM + [CSW] OG-9VM 고폭파편탄 [CSW] HE-FRAG OG-9VM From 654e4c1b7d8be68cedbede3794b87b7e783c31c4 Mon Sep 17 00:00:00 2001 From: JonBons Date: Fri, 1 Jul 2022 11:20:31 -0500 Subject: [PATCH 06/92] Cookoff - Add ability to disable fire jet effect in configs (#8953) * Cookoff: Add ability to disable fire jet effect for vehicles it doesn't make sense on * Cookoff: Fixed pressure jet sound playing when both jet and ring effects are disabled --- addons/cookoff/functions/fnc_cookOff.sqf | 13 ++++++++----- addons/cookoff/functions/fnc_cookOffEffect.sqf | 6 ++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/addons/cookoff/functions/fnc_cookOff.sqf b/addons/cookoff/functions/fnc_cookOff.sqf index 442cde80f2..37e0164eae 100644 --- a/addons/cookoff/functions/fnc_cookOff.sqf +++ b/addons/cookoff/functions/fnc_cookOff.sqf @@ -49,6 +49,9 @@ if (_positions isEqualTo []) then { }; }; +// default fire jet to enabled when not set in configs +private _canJet = ([_config >> QGVAR(canHaveFireJet), "number", 1] call CBA_fnc_getConfigEntry) == 1; + private _delay = 0; if (_smokeDelayEnabled) then { _delay = SMOKE_TIME + random SMOKE_TIME; @@ -56,13 +59,13 @@ if (_smokeDelayEnabled) then { [QGVAR(smoke), [_vehicle, _positions]] call CBA_fnc_globalEvent; [{ - params ["_vehicle", "_positions", "_intensity", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing"]; + params ["_vehicle", "_positions", "_intensity", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing", "_canJet"]; _vehicle setVariable [QGVAR(intensity), _intensity]; private _smokeEffects = _vehicle getVariable [QGVAR(effects), []]; [{ params ["_args", "_pfh"]; - _args params ["_vehicle", "_positions", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing", "_smokeEffects"]; + _args params ["_vehicle", "_positions", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing", "_canJet", "_smokeEffects"]; private _intensity = _vehicle getVariable [QGVAR(intensity), 0]; if (isNull _vehicle || {_intensity <= 1}) exitWith { [QGVAR(cleanupEffects), [_vehicle, _smokeEffects]] call CBA_fnc_globalEvent; @@ -96,7 +99,7 @@ if (_smokeDelayEnabled) then { _fireSource = selectRandom _positions; }; - [QGVAR(cookOffEffect), [_vehicle, true, _ring, _time, _fireSource, _intensity]] call CBA_fnc_globalEvent; + [QGVAR(cookOffEffect), [_vehicle, _canJet, _ring, _time, _fireSource, _intensity]] call CBA_fnc_globalEvent; _intensity = _intensity - (0.5 max random 1); _vehicle setVariable [QGVAR(intensity), _intensity]; @@ -122,5 +125,5 @@ if (_smokeDelayEnabled) then { _vehicle setVariable [QGVAR(nextExplosiveDetonation), random 60]; }; }; - }, 0.25, [_vehicle, _positions, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing, _smokeEffects]] call CBA_fnc_addPerFrameHandler -}, [_vehicle, _positions, _intensity, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing], _delay] call CBA_fnc_waitAndExecute; + }, 0.25, [_vehicle, _positions, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing, _canJet, _smokeEffects]] call CBA_fnc_addPerFrameHandler +}, [_vehicle, _positions, _intensity, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing, _canJet], _delay] call CBA_fnc_waitAndExecute; diff --git a/addons/cookoff/functions/fnc_cookOffEffect.sqf b/addons/cookoff/functions/fnc_cookOffEffect.sqf index 23a9b13ae0..2634d0ceb3 100644 --- a/addons/cookoff/functions/fnc_cookOffEffect.sqf +++ b/addons/cookoff/functions/fnc_cookOffEffect.sqf @@ -32,8 +32,10 @@ private _sound = objNull; if (isServer) then { // ironically biggest performance hit is this. Creating a new sound source takes up aprox 400 milliseconds. // I dont think there is an alternative that takes into effect distance and whatever, but if you find one please fix! - private _soundName = selectRandomWeighted [QGVAR(Sound_low), 0.1, QGVAR(Sound_mid), 0.25, QGVAR(Sound_high), 0.65]; - _sound = createSoundSource [_soundName, position _obj, [], 0]; + if (_jet || _ring) then { + private _soundName = selectRandomWeighted [QGVAR(Sound_low), 0.1, QGVAR(Sound_mid), 0.25, QGVAR(Sound_high), 0.65]; + _sound = createSoundSource [_soundName, position _obj, [], 0]; + }; if (_ring) then { private _intensity = 6; From 4400d860acd41b384cff829dbb6d40a06845c983 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 8 Jul 2022 16:49:11 -0500 Subject: [PATCH 07/92] Kestrel4500 - Cleanup unused `onUnload` handler (2.10 compatiblity) (#8961) --- addons/kestrel4500/RscTitles.hpp | 1 - addons/kestrel4500/XEH_PREP.hpp | 1 - .../functions/fnc_onCloseDisplay.sqf | 19 ------------------- 3 files changed, 21 deletions(-) delete mode 100644 addons/kestrel4500/functions/fnc_onCloseDisplay.sqf diff --git a/addons/kestrel4500/RscTitles.hpp b/addons/kestrel4500/RscTitles.hpp index b4a85951be..88d4cacb0e 100644 --- a/addons/kestrel4500/RscTitles.hpp +++ b/addons/kestrel4500/RscTitles.hpp @@ -223,7 +223,6 @@ class RscTitles { class RscKestrel4500 { idd=-1; onLoad="with uiNameSpace do { RscKestrel4500 = _this select 0 };"; - onUnload=(_this call FUNC(onCloseDisplay)); movingEnable=0; duration=60; fadeIn="false"; diff --git a/addons/kestrel4500/XEH_PREP.hpp b/addons/kestrel4500/XEH_PREP.hpp index 7d062c9ac8..ce9ecf95db 100644 --- a/addons/kestrel4500/XEH_PREP.hpp +++ b/addons/kestrel4500/XEH_PREP.hpp @@ -7,7 +7,6 @@ PREP(displayKestrel); PREP(generateOutputData); PREP(measureWindSpeed); PREP(onCloseDialog); -PREP(onCloseDisplay); PREP(restoreUserData); PREP(storeUserData); PREP(updateDisplay); diff --git a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf b/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf deleted file mode 100644 index 09e5941a77..0000000000 --- a/addons/kestrel4500/functions/fnc_onCloseDisplay.sqf +++ /dev/null @@ -1,19 +0,0 @@ -#include "script_component.hpp" -/* - * Author: Ruthberg - * Called if Kestrel Display is closed - * - * Arguments: - * None - * - * Return Value: - * None - * - * Example: - * call ace_kestrel4500_fnc_onCloseDisplay - * - * Public: No - */ - -uiNamespace setVariable ['RscKestrel4500', nil]; -GVAR(Overlay) = false; From 088e5ebb6d3f7b37e3b6f0b90e2f68ca5c9e8df1 Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Sat, 9 Jul 2022 10:15:04 +0900 Subject: [PATCH 08/92] Added Korean Translation for new stuff (#8960) * KoreanTranslation Someone has returned all the translations in Korean to English. there is no need to return them. * koreantranslation --- addons/casings/stringtable.xml | 5 +++++ addons/common/stringtable.xml | 3 ++- addons/cookoff/stringtable.xml | 2 ++ addons/laser/stringtable.xml | 2 ++ addons/marker_flags/stringtable.xml | 14 +++++++++++++- addons/tagging/stringtable.xml | 10 ++++++++++ addons/ui/stringtable.xml | 2 ++ addons/viewports/stringtable.xml | 2 ++ 8 files changed, 38 insertions(+), 2 deletions(-) diff --git a/addons/casings/stringtable.xml b/addons/casings/stringtable.xml index 8c1e3c8818..7b64c188b4 100644 --- a/addons/casings/stringtable.xml +++ b/addons/casings/stringtable.xml @@ -5,26 +5,31 @@ ACE Casings ACE 薬莢 ACE Łuski + ACE 탄피 Casings Enabled 薬莢の有効化 Łuski włączone + 탄피 활성화 Enable persistent casings (POTENTIAL performance impact on old/weak systems) 永続的な薬莢を有効にする (古い/弱いシステムに対する潜在的なパフォーマンスの影響) Włącz pozostawanie łusek (MOŻLIWY wpływ na wydajność na starych/słabych komputerach) + 영구적으로 남는 탄피를 활성화합니다(오래되고 취약한 시스템에 잠재적인 성능에 영향을 미칩니다.) Maximum casings 薬莢の最大量 Maksymalna liczba łusek + 탄피 최대 갯수 Maximum amount of casings to display 表示される薬莢の最大の数 Maksymalna liczba wyświetlanych łusek + 표시할 최대 탄피 갯수 diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index c50ceb4c17..f3f5b8941b 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1568,7 +1568,7 @@ Prozent Procent 百分比 - 퍼센트 + 백분율 Time remaining @@ -1642,6 +1642,7 @@ Unload Weapon Wyładuj Broń 武器からマガジンを抜く + 탄창 빼기 diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 9f45b68450..49757a2328 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -168,9 +168,11 @@ Destroy Vehicles After Cook-off + 쿡오프 후 차량 파괴 Controls whether vehicles will always be destroyed after cooking off. Depending on the cookoff, the vehicle may explode or may simply be killed without effects. + 차량이 쿡오프된 후 파괴할 지에 대한 여부를 제어합니다. 쿡오프에 따라 차량이 폭발하거나 아무런 효과 없이 파괴될 수 있습니다. Enable Cook-Off Vehicle Fire diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index 441f47375d..9cdfa77dab 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -89,11 +89,13 @@ Draw Laser on Map 地図上にレーザーを表示する Rysuj Laser na Mapie + 맵에 레이저 그리기 Active laser designator's position will be drawn on the map アクティブな指示レーザーの位置が地図上に描画されます Pozycja aktywnego wskaźnika laserowego będzie rysowana na mapie. + 지도에 능동 레이저 표시기의 위치가 그려집니다. diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index 32c676cd7b..d8fd27bf45 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -6,23 +6,27 @@ Markierungsfahnen Chorągiewki 旗マーカー + 마킹용 깃발 Place Anywhere Überall platzieren どこでも設置可能 Umieść w dowolnym miejscu + 아무 곳에나 배치 Place marker flag anywhere regardless of surface. どのような地表でも旗を設置できるようにします Umieść chorągiewkę w dowolnym miejscu, niezależnie od powierzchni. + 지면에 상관없이 아무곳에서나 마킹용 깃발을 배치합니다. Place Flag Flagge platzieren Postaw chorągiewkę 旗を設置 + 깃발 배치 Pick Up @@ -34,7 +38,7 @@ Подобрать Vyzvednutí Pegar - 확보 + 가져가기 提取点 拾う Al @@ -45,48 +49,56 @@ Markierungsfahne (Weiß) Chorągiewka (Biała) 旗マーカー (白) + 마킹용 깃발(하양) Marker Flag (Black) Markierungsfahne (Schwarz) Chorągiewka (Czarna) 旗マーカー (黒) + 마킹용 깃발(검정) Marker Flag (Red) Markierungsfahne (Rot) Chorągiewka (Czerwona) 旗マーカー (赤) + 마킹용 깃발(빨강) Marker Flag (Green) Markierungsfahne (Grün) Chorągiewka (Zielona) 旗マーカー (緑) + 마킹용 깃발(초록) Marker Flag (Blue) Markierungsfahne (Blau) Chorągiewka (Niebieska) 旗マーカー (青) + 마킹용 깃발(파랑) Marker Flag (Yellow) Markierungsfahne (Gelb) Chorągiewka (Żółta) 旗マーカー (黄) + 마킹용 깃발(노랑) Marker Flag (Orange) Markierungsfahne (Orange) Chorągiewka (Pomarańczowa) 旗マーカー (橙) + 마킹용 깃발(주황) Marker Flag (Purple) Markierungsfahne (Lila) Chorągiewka (Fioletowa) 旗マーカー (紫) + 마킹용 깃발(보라) diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index da80e58847..17cc2543a0 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -195,51 +195,61 @@ Up Arrow 上矢印 Strzałka w górę + 화살표(위) Down Arrow 下矢印 Strzałka w dół + 화살표(아래) Left Arrow 左矢印 Strzałka w lewo + 화살표(왼쪽) Right Arrow 右矢印 Strzałka w prawo + 화살표(오른쪽) Circle Okrąg + Cross 十字 Krzyż + 십자 Diamond ひし形 Diament + 마름모 Square 四角 Kwadrat + 사각형 Triangle 三角形 Trójkąt + 삼각형 Triangle Inverted 三角形 (反転) Odwrócony trójkąt + 역삼각형 Spray Paint (Black) diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 3144187d4d..42e40a669b 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -692,11 +692,13 @@ Hide Default Action Icon デフォルトのアクションアイコンを非表示 Ukryj domyślną ikonę akcji + 기본 행동 아이콘 숨기기 Hides the icon shown automatically when something is in front of the cursor. Requires a game restart.\nWarning: Does not remove the action itself! It is advisable to unbind 'Use default action' key to prevent unwanted interactions. カーソルの前に何かがあるときに自動的に表示されるアイコンを非表示にします。 ゲームを再起動する必要があります。\n警告:アクション自体は削除されません! 誤って実行することを防ぐために、'標準アクション'キーのバインドを解除することをお勧めします。 Ukrywa ikonę wyświetlaną automatycznie, gdy coś znajduje się przed kursorem. Wymaga ponownego uruchomienia gry.\nOstrzeżenie: Nie usuwa samej akcji! Zaleca się usunięcia przypisania klawisza „Użyj domyślnej akcji”, aby zapobiec niechcianym interakcjom. + 커서 앞에 무언가가 있을 때 자동으로 표시되는 아이콘을 숨깁니다. 게임을 재시작해야 합니다\n경고: 작업 자체를 제거하지 않습니다! 원하지 않는 상호작용을 방지하려면 '기본 행동' 키를 삭제하는 것이 좋습니다. diff --git a/addons/viewports/stringtable.xml b/addons/viewports/stringtable.xml index 44656f4fa8..4e5432ae7a 100644 --- a/addons/viewports/stringtable.xml +++ b/addons/viewports/stringtable.xml @@ -4,11 +4,13 @@ Viewports ビューポート + 뷰포트 Allows crew to look through periscopes Pozwala załodze patrzeć przez peryskop 乗組員がペリスコープを通して外を見ることができます + 승무원이 잠망경을 통해 볼 수 있도록 허용합니다 From 1b7755225ab450d04b8e746c80049529242e291e Mon Sep 17 00:00:00 2001 From: formtapez Date: Sat, 9 Jul 2022 03:15:29 +0200 Subject: [PATCH 09/92] new fences for the wirecutter (#8945) --- addons/logistics_wirecutter/script_component.hpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/logistics_wirecutter/script_component.hpp b/addons/logistics_wirecutter/script_component.hpp index 7c65bfe26c..a499b6ae32 100644 --- a/addons/logistics_wirecutter/script_component.hpp +++ b/addons/logistics_wirecutter/script_component.hpp @@ -74,7 +74,13 @@ "netfence_03_m_3m_corner_f.p3d",\ "netfence_03_m_9m_f.p3d",\ "vineyardfence_01_f.p3d",\ - "gameprooffence_01_l_5m_f.p3d"\ + "gameprooffence_01_l_5m_f.p3d",\ + "netfence_01_m_gate_f.p3d",\ + "netfence_02_m_2m_f.p3d",\ + "netfence_02_m_4m_f.p3d",\ + "netfence_02_m_8m_f.p3d",\ + "net_fence_gate_f.p3d",\ + "new_wiredfence_10m_dam_f.p3d"\ ] #define SOUND_CLIP_TIME_SPACING 1.5 From 9569a16efc8c27a9eeb1923294f156e1159ea161 Mon Sep 17 00:00:00 2001 From: Dystopian Date: Sun, 10 Jul 2022 11:47:47 +0300 Subject: [PATCH 10/92] Fix rearm of dead vehicles (#8962) --- addons/rearm/functions/fnc_addRearmActions.sqf | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/rearm/functions/fnc_addRearmActions.sqf b/addons/rearm/functions/fnc_addRearmActions.sqf index 86db3eef78..2159ff8b62 100644 --- a/addons/rearm/functions/fnc_addRearmActions.sqf +++ b/addons/rearm/functions/fnc_addRearmActions.sqf @@ -19,7 +19,12 @@ params ["_truck", "_player"]; private _vehicles = nearestObjects [_truck, ["AllVehicles"], GVAR(distance)]; -_vehicles = _vehicles select {(_x != _truck) && {!(_x isKindOf "CAManBase")} && {!(_x getVariable [QGVAR(disabled), false])}}; +_vehicles = _vehicles select { + _x != _truck + && {!(_x isKindOf "CAManBase")} + && {alive _x} + && {!(_x getVariable [QGVAR(disabled), false])} +}; private _cswCarryMagazines = []; private _vehicleActions = []; From 15deea56cbf173324053eff94001d487540bc4b3 Mon Sep 17 00:00:00 2001 From: JonBons Date: Thu, 14 Jul 2022 15:27:07 -0500 Subject: [PATCH 11/92] Cookoff - Removed references to unused ignoreTurret parameter --- addons/cookoff/CfgVehicles.hpp | 7 ------- docs/wiki/framework/cookoff-framework.md | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/addons/cookoff/CfgVehicles.hpp b/addons/cookoff/CfgVehicles.hpp index d2da771b01..78cbd0c623 100644 --- a/addons/cookoff/CfgVehicles.hpp +++ b/addons/cookoff/CfgVehicles.hpp @@ -35,13 +35,6 @@ class CfgVehicles { explosionEffect = "FuelExplosionBig"; }; - class APC_Wheeled_02_base_F: Wheeled_APC_F { // Otokar ARMA - RCWS Turret - GVAR(ignoreTurret) = 1; - }; - class APC_Tracked_01_base_F: Tank_F { // Namera, Nemmera - RCWS Turret - GVAR(ignoreTurret) = 1; - }; - class MRAP_01_base_F: Car_F { GVAR(engineSmokeOffset)[] = {0,-2,0}; diff --git a/docs/wiki/framework/cookoff-framework.md b/docs/wiki/framework/cookoff-framework.md index 2f2734df23..b53fea2049 100644 --- a/docs/wiki/framework/cookoff-framework.md +++ b/docs/wiki/framework/cookoff-framework.md @@ -49,6 +49,6 @@ e.g. RCWS turrets ``` class MyVehicle { - ace_cookoff_ignoreTurret = 1; + ace_vehicle_damage_turretFireProb = 0; }; ``` From 1a95070b809d2b27618615ad93720af9c4f02843 Mon Sep 17 00:00:00 2001 From: Cyruz Date: Fri, 15 Jul 2022 15:42:00 +0100 Subject: [PATCH 12/92] Trenches - Add camouflage action using surfaceTexture (#8935) * Port 7833 to use surfaceTexture * Add camo action * Remove unused args from statement call * Rogue missing space * Add animation + delay for camo action * Add authors --- AUTHORS.txt | 4 ++- addons/apl/ace_envelope_small.p3d | Bin 156576 -> 159287 bytes addons/apl/ace_envelope_small4.p3d | Bin 164059 -> 166770 bytes addons/apl/ace_envelope_small4_nogeo.p3d | Bin 133631 -> 136342 bytes addons/apl/model.cfg | 17 +++++----- addons/trenches/CfgVehicles.hpp | 9 ++++++ addons/trenches/XEH_PREP.hpp | 2 ++ .../functions/fnc_camouflageTrench.sqf | 26 ++++++++++++++++ .../functions/fnc_canCamouflageTrench.sqf | 29 ++++++++++++++++++ addons/trenches/stringtable.xml | 4 +++ 10 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 addons/trenches/functions/fnc_camouflageTrench.sqf create mode 100644 addons/trenches/functions/fnc_canCamouflageTrench.sqf diff --git a/AUTHORS.txt b/AUTHORS.txt index b6ced26e82..3db9e6636b 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -68,6 +68,7 @@ Clon1998 Codingboy Coren Crusty +Cyruz143 dabako dgibso29 Dharma Bellamkonda @@ -130,6 +131,7 @@ meat Michail Nikolaev MikeMatrix mjc4wilton +Mysteryjuju nic547 nikolauska nomisum @@ -178,4 +180,4 @@ wizpig64 YetheSamartaka xrufix Zakant -zGuba \ No newline at end of file +zGuba diff --git a/addons/apl/ace_envelope_small.p3d b/addons/apl/ace_envelope_small.p3d index 9bc35d7b4ad343c1d8f137f6c574a62e583b10c1..8b4c0e5f5e356d3665c1a5e176c4f54b31b7fed7 100644 GIT binary patch delta 8564 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 KFq6?p<-Y)4xfcll delta 8345 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 D7z4*o diff --git a/addons/apl/ace_envelope_small4.p3d b/addons/apl/ace_envelope_small4.p3d index d139f6bbca8b14e6ff7d38ee29764ee84686312e..8cd6bc3325cc5d6865fb02a6eebf2fe545eab98b 100644 GIT binary patch delta 10487 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 diff --git a/addons/apl/ace_envelope_small4_nogeo.p3d b/addons/apl/ace_envelope_small4_nogeo.p3d index a39195505c9f79a71ec3ab76e125a9c805cb96f5..b3a261918f41bb1c55e58b4434f5d3fafbc1be38 100644 GIT binary patch delta 7569 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 delta 4838 zcmWNVhdJhZ7Kq#Ji8Hgx#3Mnjs6OZjQ|m5aOs6ZZjDY z>9n7|q_Q@GKYH?;#Lo&eHZzsKmtRILH{z*z%0zDR=n{1uY9*(JGHM-{jzEhNVey{( zY)S4+SP5-{cbm14R<@PLNhcQo zv}iUc+>wvFXoE>V=Ch^F9P@iyU>nz_rt*073Ass;xhKS;*8zxh>xYOlQS{42MY8I0 z5N;gQ#PY$S@IP&a-Z!nFWV4DPoxnqCz9u;ig>e6wt|kR|UGU$Qf9QCRf&6#gAbxmxJ*ho&;Q>D3 z{CM^eIyB=tOS1jKbNaiVytEGa)u@RVw|DV zw}$og@j+&MZ_IZc!bW~{#9Y}iW3xd%o(jU~vD;bu`xKm(8%%oFEqINg7q-g&`&;4H z1*PnkMHEWToTaSJf7pz&u}DmLOZ(?&G94u~C|XX$p?FQ`9kv1Q^`0SY0qeCf7#67t z@cd|paXk&-;?>MTx;*gx+a~f`Xux&DLb0u~fZSy>P0XaLYl?-qxa9zaWL{4Q(y-K`|@n~l?BuJs%z}FUObu)^rFBXMx6S2;l;54 z@;GnFHGjJ!HE=Yo8Cp)-8L4>G)}I=MYWCA*28!w`C_}KNwTU@+J!QY3*L%E_mq#dJ zv`zsP6^-Nj9klVM@wVvJ7R~QXeL!wAhmv)3Jg@29M5Akm(+c}9!fWeX?1_IeqVo1_ z(L^&B3l$d&bBm5r-G>BRZ1-oY-d58igBXbVo7r@w4)Wa=iKsQv>{e434N{(lBdfm& z%WdZ1XK@8}6iS_0k9#u_U$vF~r?rbsX-&YGUE4{1)M8fuAPN2#1E@ZH4{Hy}VPRoe z$VuBJ80P(A)`KDtW;lo(BlY>5QNGB|=}$EL8q*mPhFec+ndx{5zZ7AMr@OY+Cx5U+ z=@SNXHBoS=9*E7vk#j`GO0*2HSO2v?)(7bcGgr9rFqt`2%a_r6x9L2o=_kFBnV9KF zTaCAproAP9U^pBX+R|yxg!3$NX*}}R4yTo$1%5MJ7na&3bV+^`ZwOverudt15 zHS(BpeK7u)^pNzr&#;EwI%ITc7LJuSvwtNM*;l_zjPwa$H76W!zT&Stw>q<-PG8vu zgK3zRs7w6}T7>SJT;x?o)NkD=5EVsY-UXSfxu%ura7S#t-XY#TZ-{-0ZU}4ILG%A& zrB-5#0e!=$*)akMm2%*+G;=L!k4;7}?6Zub!h)bL*AHXly2OF{A?PpkMenQo>rZ?O zhr~`EyEf_3fj__59r%^ax=q4B_dLyu90C-&?$uess2hDTQCJVCA zlIAV3#(|y9H0GV@-!;__n_PRLf484F$I}_J!(DL5d5P$?-wzps4Ke0PV|{&AE_x;3 z6SqHJK&IX?*pc5%&3VV_yN;*8Ked{YW|h#{JSVu1v%nT-8w$OdiX)9BbZBH8GqRtL zHl+)~%CGxb=#?a#)E5ldySV#wR(l#sLJO!wHI3gi-9%c77A)J$i|>%h4H+U;|9MB4 zY<-mM!c#FOep>y916Jt&M8NUg*9DU_1sXT%B_c@Lb&$8{|xA^4fFXHPoCWko|h zsFe*qX~P#ZNuX_@EY6GFBEH=ahyBX!to`jl){&lo%)A-whW2J5BqtQqt;+2;9irO} z=4g3s$E(Iw$ts5okU9ksSP zx95tzMTu_&j& zpgPAIALX}+-<(ZpNW(&`6(#jyFDI}!(o7XBT04fx)ikp^G9ODLX@}fjS00{(SxZHU zUxj?#+C#DEZ~cNjtg(j5PKM7@U)T2<)j%6OlX10OQ6d>3BNU_}If$_xZ=_WEFbj)r zY_6NKvXmbGPQw;;CHi=v2mTD20;P%Ctm|m+da+ZAdHRd%r^Jnc`h6w1-zuff(XJT3 z-c%hXahoZ>&o~^YQpbAPM@v1859gxj`I{j7s_u|vkR7HbgFU|t|d0H%2C(p+jB1*OY6bg z?k4iiM~5hSxesf7;K%1ZJVny!a(tKbOv!<-3*ld?&juVjDMmdR4b_cC{L3FXoKBpA zk!L?k#eY0qaB4y~9se$el`$bOJA8+xexuxO1!17gM08G7$H}`_gs}Og z=edp@%R38Z)2%a<+DUUSy!thJttIbikkobZ9I<3g>TDzi3_JNt*V90o7 ziiaKnwCV6Unp*O}MG7)!Iy|yRwR2%D<{y^V^lK zIN$L~X!>o!eINHl*c2s13Pbq5K!!e7G|8>Yi1+liM^s$BA*(nvhVvo~B)p2HJ<1;3 zBHjkyp~40%w1cB;^-vwDM5zZtT6Qq?{n@-VJDPsFe{u^<&*Uw(?V?XZ0exk;JgCi8 zXtR4D1lDBns{9ghAkSi>^m2K!&RH=oW{V(P59eyr>L@3xiHh|CdHd-d)MC-iZccOM z=_G#U%UimWzK(je`14`QRd7$Pgeiu4@mF~k zn7Z#)eM-X^zO6zX$MU7*6CJ@X7Aj!WSaYGahZ*lK?;uA-GejL;!9E$vcG+m!%1sMq z&3EnLkmZ0t!)%uD$plwDB&bxjWG^>Nfa3MOm~`5eXV32c7qZ7TI+MfNJ?Q8$e_l3R z7tj94Q*_EO-Uxg6H_xYi-oe~pO&6*5DIvQ>60Q*0AH%O5C-?lG+*i*N8*4Aq-8UE5 z>bL%Q#y*keVF~w!Av|`hpgLKQt(Mfhd>frEI>(5NFyrr;a{PbBeD-E7%qUmHk@gzq zwZs)Ca&?jCP#}=WB=jU@Y@{vX?)FS9@>xOq{id*7^ElK#K1W)kO9aI(AFOjRLCke8 zw(6xm6hpl6<$w)ou8YGPjaG`d{FJ88x5N9@TIlZ8E~T<%2FP4&g{LY>ByXjU5BQ|9z^vr!>4V zzdovZKCU{?rOfFKv_g9Zj=U>o7cV{&m3uBgK_3aJe#)YcR#})M8)t7MO&^?Ezs!Cr zc6!XmpXvlsOg}81oT~}z`zpv?Y`~YLkA*?YXL3!cXNpE)n7Qv3T|0Y%E%_TIrZ(AQ z^`mz2&g@buEVsbri;gJ$Cj^nFMLH31gS1-HAUCj_&Q{+Q?t8`Hsoz1;e7%$Im@=%p z^@=1F-BK19>yEUDftWt^IQy?^5-vZN!#+=U_EC2x)V|)ML|=JUlKPcheJ}|Z2WB!) zg>I%aW)c*V6X@%vSYEBxLCHhD39l?ec<16!!l#~m^R7%@VbLloUo2pet?kV1u>jS# z3Vf5I7GHkR7gkn_XtGZm>*_6y#@mpY?Dfz2{O+n*G+jSHTy-y%AGz>ITrjwTZJ#lg zdwXrCkg+{^wdOSL>u`boRoKk}-?p$m|Bl28wO;&gP7>{V@s+AV!@2*@L42#)X}Z13 zl{+nx<0l%;pD%@SY`Pbw%Vr8lU^0oZ=x&Rf)#HDGDr_vnd{#$aYljL@W{vX$8GnoJY diff --git a/addons/apl/model.cfg b/addons/apl/model.cfg index 7ed0ad7378..9d9a99a7d4 100644 --- a/addons/apl/model.cfg +++ b/addons/apl/model.cfg @@ -18,11 +18,14 @@ class CfgModels { skeletonName = ""; }; class ace_entrchtool: Default {}; - class ace_envelope_big: Default {}; - class ace_envelope_big4: Default {}; - class ace_envelope_big4_nogeo: Default {}; - class ace_envelope_small: Default {}; - class ace_envelope_small4: Default {}; - class ace_envelope_small4_nogeo: Default {}; + class ace_envelope: Default { + sections[] = {"velka"}; + }; + class ace_envelope_big: ace_envelope {}; + class ace_envelope_big4: ace_envelope {}; + class ace_envelope_big4_nogeo: ace_envelope {}; + class ace_envelope_small: ace_envelope {}; + class ace_envelope_small4: ace_envelope {}; + class ace_envelope_small4_nogeo: ace_envelope {}; class LWTS_optic: Default {}; -}; \ No newline at end of file +}; diff --git a/addons/trenches/CfgVehicles.hpp b/addons/trenches/CfgVehicles.hpp index 478243345d..d34886f2ae 100644 --- a/addons/trenches/CfgVehicles.hpp +++ b/addons/trenches/CfgVehicles.hpp @@ -16,6 +16,11 @@ class CBA_Extended_EventHandlers; condition = QUOTE([ARR_2(_target,_player)] call FUNC(canRemoveTrench)); \ statement = QUOTE([ARR_2(_target,_player)] call FUNC(removeTrench);); \ }; \ + class ACE_CamouflageTrench { \ + displayName = CSTRING(CamouflageTrench); \ + condition = QUOTE([ARR_2(_target,_player)] call FUNC(canCamouflageTrench)); \ + statement = QUOTE([ARR_2(_target,_player)] call FUNC(camouflageTrench)); \ + }; \ }; \ } @@ -62,6 +67,8 @@ class CfgVehicles { class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; + hiddenSelections[] = {"velka"}; + hiddenSelectionsTextures[] = {"a3\map_data\gdt_mud_co.paa"}; }; class ACE_envelope_big: BagFence_base_F { author = ECSTRING(common,ACETeam); @@ -78,6 +85,8 @@ class CfgVehicles { class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; + hiddenSelections[] = {"velka"}; + hiddenSelectionsTextures[] = {"a3\map_data\gdt_mud_co.paa"}; }; class ACE_envelope_small_NoGeo: ACE_envelope_small { diff --git a/addons/trenches/XEH_PREP.hpp b/addons/trenches/XEH_PREP.hpp index 2e671acb85..bace06f625 100644 --- a/addons/trenches/XEH_PREP.hpp +++ b/addons/trenches/XEH_PREP.hpp @@ -1,4 +1,6 @@ +PREP(camouflageTrench); +PREP(canCamouflageTrench); PREP(canContinueDiggingTrench); PREP(canDigTrench); PREP(canRemoveTrench); diff --git a/addons/trenches/functions/fnc_camouflageTrench.sqf b/addons/trenches/functions/fnc_camouflageTrench.sqf new file mode 100644 index 0000000000..02cd2b5602 --- /dev/null +++ b/addons/trenches/functions/fnc_camouflageTrench.sqf @@ -0,0 +1,26 @@ +#include "script_component.hpp" +/* + * Author: Cyruz + * Apply surfaceTexture to a completed trench. + * + * Arguments: + * 0: Trench + * 1: Unit + * + * Return Value: + * None + * + * Example: + * [TrenchObj, ACE_player] call ace_trenches_fnc_camouflageTrench + * + * Public: No + */ + +params ["_trench", "_unit"]; + +_unit playActionNow "PutDown"; + +[{ + _this setObjectTextureGlobal [0, surfaceTexture getPosATL _this]; + _this setVariable [QGVAR(camouflaged), true, true]; +}, _trench, 2] call CBA_fnc_waitAndExecute; diff --git a/addons/trenches/functions/fnc_canCamouflageTrench.sqf b/addons/trenches/functions/fnc_canCamouflageTrench.sqf new file mode 100644 index 0000000000..266f145e37 --- /dev/null +++ b/addons/trenches/functions/fnc_canCamouflageTrench.sqf @@ -0,0 +1,29 @@ +#include "script_component.hpp" +/* + * Author: Cyruz + * Checks if a unit can camouflage a trench. + * + * Arguments: + * 0: Trench + * 1: Unit + * + * Return Value: + * Can camouflage + * + * Example: + * [TrenchObj, ACE_player] call ace_trenches_fnc_canCamouflageTrench + * + * Public: No + */ + +params ["_trench", "_unit"]; + +if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false}; + +// Prevent camouflage if not fully dug +if ((_trench getVariable [QGVAR(progress), 0]) != 1) exitWith {false}; + +// Prevent camouflage being applied once already camouflaged +if (_trench getVariable [QGVAR(camouflaged), false]) exitWith {false}; + +true diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 175af32794..add1dbae64 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -226,6 +226,10 @@ Siperi Kaldır Eliminar trinchera + + Camouflage Trench + Zakamufluj Okop + Removing Trench Usuwanie wnęki From 36442d34cd0ea67d60474ac71ec56daf62418523 Mon Sep 17 00:00:00 2001 From: JonBons Date: Fri, 15 Jul 2022 09:59:49 -0500 Subject: [PATCH 13/92] Cookoff - Fix smoke effects not getting cleaned up (#8933) * Cookoff: Added handling for cleaning up smoke effects when vehicle is deleted mid-cookoff * Cookoff - Prevent effects cleanup Deleted EH from getting duplicated * Cookoff - Added locality safety check to effects cleanup * Cookoff - Global effects cleanup is now triggered by the server to handle locality transfer --- addons/cookoff/XEH_postInit.sqf | 16 ++++++++++++++++ addons/cookoff/functions/fnc_cookOff.sqf | 2 ++ 2 files changed, 18 insertions(+) diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index 52073d39b1..36cebc1d17 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -11,6 +11,22 @@ [QGVAR(smoke), FUNC(smoke)] call CBA_fnc_addEventHandler; [QGVAR(cookOffBox), FUNC(cookOffBox)] call CBA_fnc_addEventHandler; +// handle cleaning up effects when vehicle is deleted mid-cookoff +[QGVAR(addCleanupHandlers), { + params ["_vehicle"]; + + // Don't add a new EH if cookoff is run multiple times + if ((_vehicle getVariable [QGVAR(deletedEH), -1]) == -1) then { + private _deletedEH = _vehicle addEventHandler ["Deleted", { + params ["_vehicle"]; + + [QGVAR(cleanupEffects), [_vehicle]] call CBA_fnc_globalEvent; + }]; + + _vehicle setVariable [QGVAR(deletedEH), _deletedEH]; + }; +}] call CBA_fnc_addEventHandler; + [QGVAR(cleanupEffects), { params ["_vehicle", ["_effects", []]]; diff --git a/addons/cookoff/functions/fnc_cookOff.sqf b/addons/cookoff/functions/fnc_cookOff.sqf index 37e0164eae..8176b8d085 100644 --- a/addons/cookoff/functions/fnc_cookOff.sqf +++ b/addons/cookoff/functions/fnc_cookOff.sqf @@ -30,6 +30,8 @@ TRACE_9("cooking off",_vehicle,_intensity,_instigator,_smokeDelayEnabled,_ammoDe if (_vehicle getVariable [QGVAR(isCookingOff), false]) exitWith {}; _vehicle setVariable [QGVAR(isCookingOff), true, true]; +[QGVAR(addCleanupHandlers), [_vehicle]] call CBA_fnc_serverEvent; + // limit maximum value of intensity to prevent very long cook-off times _intensity = _intensity min _maxIntensity; From 44ccc7b18524062f78f47963720983a0d45823b9 Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Wed, 20 Jul 2022 07:09:08 +0900 Subject: [PATCH 14/92] Korean Typo Fix (#8968) * KoreanTranslation Someone has returned all the translations in Korean to English. there is no need to return them. * koreantranslation * Korean Typo Fix --- addons/common/stringtable.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index f3f5b8941b..1ac67eaf80 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -558,7 +558,7 @@ Comprueba la lista de PBOs permitidos Задать список непроверяемых аддонов. Ermöglicht das Erstellen einer Liste von immer erlaubten Erweiterungen. - 허용할 에드온의 목록입니다. + 허용할 애드온의 목록입니다. Feedback icons @@ -791,7 +791,7 @@ /!\ Module obsolète /!\ - Vérifie l'intégrité des addons avec le serveur, et effectue l'action sélectionnée si un addon est manquant. Controlla l'integrità degli addon con il server ed esegui l'azione selezionata se un addon è mancante サーバがアドオンの整合性を検査し、もし不備があれば実行する動作を選択できます。 - 서버 에드온의 무결성을 검사하고 사라진 에드온이 있을경우 행동을 선택합니다. + 서버 애드온의 무결성을 검사하고 사라진 애드온이 있을 경우 행동을 선택합니다. 檢查客戶端與伺服器端的模組清單是否一致且完整,並提供訊息表示遺失的模組 检查客户端与服务器端的模组清单是否一致且完整,并提供信息表示遗失的模组。 @@ -823,7 +823,7 @@ Что делать с игроками с неправильными аддонами? Cosa fare con giocatori che non hanno i PBO corretti? プレイヤーが正しい PBO を持っていない場合は? - 올바르지 않는 PBO를 가진 사람을 어떻게 할까요? + 올바르지 않은 PBO를 가진 사람을 어떻게 할까요? 若玩家沒有正確的PBO檔時,將採取何種動作? 若玩家没有正确的 PBO 档时,将采取何种动作? @@ -971,7 +971,7 @@ Добавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам Aggiunge effetti LSD ai veicoli sincronizzati 同期されたオブジェクトに LSD の効果を追加します - 동기화된 차량에 LSD효과를 추가합니다. + 동기화된 차량에 LSD 효과를 추가합니다. 使被同步的載具產生瘋狂的迷幻效果。(後果自負) 使被同步的载具产生疯狂的迷幻效果。(后果自负) From 83f9c8331d79c509d5c44e12a39a96ccea8edc8a Mon Sep 17 00:00:00 2001 From: diwako Date: Sat, 23 Jul 2022 17:37:18 +0200 Subject: [PATCH 15/92] Interaction Menu - Fix black screen option not removing background properly (#8969) --- addons/interact_menu/CursorMenus.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/interact_menu/CursorMenus.hpp b/addons/interact_menu/CursorMenus.hpp index 98f05082a9..79f1109598 100644 --- a/addons/interact_menu/CursorMenus.hpp +++ b/addons/interact_menu/CursorMenus.hpp @@ -9,11 +9,10 @@ class RscTitles { class GVAR(menuBackground) { idd = -1; onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(menuBackground)),_this select 0)]); - onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(menuBackground)),displayNull)]); fadeIn = 0.25; fadeOut = 0.25; movingEnable = 0; - duration = 10e10; + duration = QUOTE(10e10); name = QGVAR(menuBackground); class controls {}; class controlsBackground { From df3a9de7cd6e56374e1346d7f8b7de06e586362e Mon Sep 17 00:00:00 2001 From: ZluskeN Date: Sat, 23 Jul 2022 19:59:21 +0200 Subject: [PATCH 16/92] Advanced Vehicle Damage disabled by default. (#8925) Maintainers [...] want Advanced Vehicle Damage disabled by default. https://github.com/acemod/ACE3/pull/8734#discussion_r787918244 --- addons/vehicle_damage/initSettings.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/vehicle_damage/initSettings.sqf b/addons/vehicle_damage/initSettings.sqf index e0d02acfbb..ae322a6fd8 100644 --- a/addons/vehicle_damage/initSettings.sqf +++ b/addons/vehicle_damage/initSettings.sqf @@ -2,7 +2,7 @@ QGVAR(enabled), "CHECKBOX", [ELSTRING(common,Enabled), LSTRING(setting_description)], LSTRING(category_displayName), - true, // default value + false, // default value true, // isGlobal {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, true // Needs mission restart From 904310c99a5139ec918ccf547a4a532598011e47 Mon Sep 17 00:00:00 2001 From: RcINS Date: Sun, 31 Jul 2022 07:08:44 +0800 Subject: [PATCH 17/92] Translation - Add Simplified Chinese translation (#8984) * Complete Simplified Chinese translation * Slight tweak translation --- AUTHORS.txt | 1 + addons/casings/stringtable.xml | 5 +++++ addons/common/stringtable.xml | 3 ++- addons/cookoff/stringtable.xml | 2 ++ addons/csw/stringtable.xml | 4 ++++ addons/field_rations/stringtable.xml | 2 ++ addons/finger/stringtable.xml | 4 ++++ addons/laser/stringtable.xml | 2 ++ addons/magazinerepack/stringtable.xml | 1 + addons/marker_flags/stringtable.xml | 12 ++++++++++++ addons/medical_gui/stringtable.xml | 2 ++ addons/repair/stringtable.xml | 2 +- addons/trenches/stringtable.xml | 1 + addons/ui/stringtable.xml | 2 ++ addons/vehicles/stringtable.xml | 3 +++ addons/viewports/stringtable.xml | 2 ++ optionals/compat_rhs_afrf3/stringtable.xml | 14 ++++++++++++++ optionals/compat_rhs_usf3/stringtable.xml | 12 ++++++++++++ 18 files changed, 72 insertions(+), 2 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 3db9e6636b..e4720402ee 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -149,6 +149,7 @@ QuickDagger rakowozz ramius86 Raspu86 +RcINS Riccardo Petricca Robert Boklahánics ruPaladin diff --git a/addons/casings/stringtable.xml b/addons/casings/stringtable.xml index 7b64c188b4..8f6213f8b5 100644 --- a/addons/casings/stringtable.xml +++ b/addons/casings/stringtable.xml @@ -6,30 +6,35 @@ ACE 薬莢 ACE Łuski ACE 탄피 + ACE 弹壳 Casings Enabled 薬莢の有効化 Łuski włączone 탄피 활성화 + 开启弹壳生成 Enable persistent casings (POTENTIAL performance impact on old/weak systems) 永続的な薬莢を有効にする (古い/弱いシステムに対する潜在的なパフォーマンスの影響) Włącz pozostawanie łusek (MOŻLIWY wpływ na wydajność na starych/słabych komputerach) 영구적으로 남는 탄피를 활성화합니다(오래되고 취약한 시스템에 잠재적인 성능에 영향을 미칩니다.) + 开启生成持续存在的弹壳(可能对较老和性能不行的系统有影响) Maximum casings 薬莢の最大量 Maksymalna liczba łusek 탄피 최대 갯수 + 最大弹壳量 Maximum amount of casings to display 表示される薬莢の最大の数 Maksymalna liczba wyświetlanych łusek 표시할 최대 탄피 갯수 + 显示的最大弹壳数量 diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 1ac67eaf80..dde0787a0a 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1634,7 +1634,7 @@ Места ускоренного обучения 衛生能力の上昇位置 교육 증가 지역 - 受所在位置影响提升医疗能力 + 位置提升能力 受所在位置影響提升醫療能力 Konumlar Tedaviyi Hızlandırır @@ -1643,6 +1643,7 @@ Wyładuj Broń 武器からマガジンを抜く 탄창 빼기 + 卸掉武器弹匣 diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 49757a2328..d6d71a0f50 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -169,10 +169,12 @@ Destroy Vehicles After Cook-off 쿡오프 후 차량 파괴 + 殉爆发生后摧毁载具 Controls whether vehicles will always be destroyed after cooking off. Depending on the cookoff, the vehicle may explode or may simply be killed without effects. 차량이 쿡오프된 후 파괴할 지에 대한 여부를 제어합니다. 쿡오프에 따라 차량이 폭발하거나 아무런 효과 없이 파괴될 수 있습니다. + 控制载具是否总是会在殉爆结束后被摧毁。根据殉爆的剧烈程度,载具可能会爆炸,也可能只是被没有效果地摧毁。 Enable Cook-Off Vehicle Fire diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml index df4892558a..27cdb43b9f 100644 --- a/addons/csw/stringtable.xml +++ b/addons/csw/stringtable.xml @@ -179,6 +179,7 @@ 탄약 보관 Magazyn amunicji 弾薬の格納 + 弹药存储 Determines whether extra magazines are stored on the ground or inside an ammo box @@ -186,6 +187,7 @@ 여분의 탄약을 지면 또는 탄약 상자에 넣을지 결정합니다. Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją. 追加のマガジンを地面に設置するか、弾薬箱の中に保管するかを決定します + 设置多余的弹夹是存放在地面上还是弹药箱内 Ground @@ -193,6 +195,7 @@ 지면 Ziemia 地面 + 地面 Ammo Box @@ -200,6 +203,7 @@ 탄약 상자 Skrzynka amunicyjna 弾薬箱 + 弹药箱 Ammo handling diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 5f8961e12b..ad5fea0e5c 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1110,6 +1110,7 @@ 해바라기씨 Nasiona Słonecznika ヒマワリの種 + 葵花籽 Roasted And Salted @@ -1117,6 +1118,7 @@ 굽고 간을 했습니다 Pieczone i Solone 炒って塩で味付け済 + 焙烤盐焗 diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index acff462486..780e1dfefa 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -91,6 +91,7 @@ 보이는 마커 크기 계수 Współczynnik wielkości wirtualnego znacznika 指さし表記大きさ係数 + 屏幕标记大小系数 Adjusts the size of the visual marker. @@ -98,6 +99,7 @@ 눈에 보이는 마커의 크기를 조정합니다. Dostosowuje rozmiar wirtualnego znacznika. 指さし表記の大きさを調整します。 + 调整屏幕上显示的标记大小 Proximity Scaling @@ -105,6 +107,7 @@ 근접 스케일링 Skalowanie odległościowe 近接性スケーリング + 根据距离缩放 Scales the size of the visual marker based on the distance between the player observing and the player pointing. @@ -112,6 +115,7 @@ 관찰하는 플레이어와 가리키는 플레이어 사이의 거리에 따라 보이는 마커의 크기를 조정합니다. Skaluje rozmiar wirtualnego znacznika, na podstawie odległości między graczem obserwującym a graczem wskazującym. 見ているプレーヤーと指さししたプレーヤーの距離に基づいて、指さし表記の大きさを調整します。 + 根据观察的玩家和在指出方向的的玩家之间的距离调整视觉标记的大小。 Show pointing indicator to self diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index 9cdfa77dab..846a3d168a 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -90,12 +90,14 @@ 地図上にレーザーを表示する Rysuj Laser na Mapie 맵에 레이저 그리기 + 在地图上绘制激光 Active laser designator's position will be drawn on the map アクティブな指示レーザーの位置が地図上に描画されます Pozycja aktywnego wskaźnika laserowego będzie rysowana na mapie. 지도에 능동 레이저 표시기의 위치가 그려집니다. + 激活的激光指示器本身及其标记的点会在地图上显示 diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 3030f98b54..015f1f9fcf 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -192,6 +192,7 @@ Animacja przepakowywania 탄약 합치기 애니메이션 詰め替え時のアニメーション + 整理动画 diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index d8fd27bf45..e10510face 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -7,6 +7,7 @@ Chorągiewki 旗マーカー 마킹용 깃발 + 标记旗 Place Anywhere @@ -14,12 +15,14 @@ どこでも設置可能 Umieść w dowolnym miejscu 아무 곳에나 배치 + 随意放置 Place marker flag anywhere regardless of surface. どのような地表でも旗を設置できるようにします Umieść chorągiewkę w dowolnym miejscu, niezależnie od powierzchni. 지면에 상관없이 아무곳에서나 마킹용 깃발을 배치합니다. + 不管地形表面是什么都可以放标记旗 Place Flag @@ -27,6 +30,7 @@ Postaw chorągiewkę 旗を設置 깃발 배치 + 放置标记旗 Pick Up @@ -50,6 +54,7 @@ Chorągiewka (Biała) 旗マーカー (白) 마킹용 깃발(하양) + 标记旗(白) Marker Flag (Black) @@ -57,6 +62,7 @@ Chorągiewka (Czarna) 旗マーカー (黒) 마킹용 깃발(검정) + 标记旗(黑) Marker Flag (Red) @@ -64,6 +70,7 @@ Chorągiewka (Czerwona) 旗マーカー (赤) 마킹용 깃발(빨강) + 标记旗(红) Marker Flag (Green) @@ -71,6 +78,7 @@ Chorągiewka (Zielona) 旗マーカー (緑) 마킹용 깃발(초록) + 标记旗(绿) Marker Flag (Blue) @@ -78,6 +86,7 @@ Chorągiewka (Niebieska) 旗マーカー (青) 마킹용 깃발(파랑) + 标记旗(蓝) Marker Flag (Yellow) @@ -85,6 +94,7 @@ Chorągiewka (Żółta) 旗マーカー (黄) 마킹용 깃발(노랑) + 标记旗(黄) Marker Flag (Orange) @@ -92,6 +102,7 @@ Chorągiewka (Pomarańczowa) 旗マーカー (橙) 마킹용 깃발(주황) + 标记旗(橙) Marker Flag (Purple) @@ -99,6 +110,7 @@ Chorągiewka (Fioletowa) 旗マーカー (紫) 마킹용 깃발(보라) + 标记旗(紫) diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index ae7c076a4c..73afb1160e 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1230,6 +1230,7 @@ 혈액 손실 표시 Pokaż utratę krwi 失血量の表示 + 显示失血量 Show qualitative blood loss in the injury list. @@ -1237,6 +1238,7 @@ 부상 목록에 혈액 손실량을 표시합니다. Pokaż jakościową utratę krwi na liście ran. 負傷リストに段階的な失血量を表示します。 + 在负伤列表中显示失血阶段 diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index 462101738c..f480cf1ffc 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -2023,7 +2023,7 @@ Auto shut off engine on repair Motor automatisch ausschalten 修理時にエンジン自動停止 - 维修时自动关闭发动机。 + 维修时自动关闭发动机 維修時自動關閉引擎 Motore spento automaticamente durante la riparazione Automatycznie wyłącz silnik podczas napraw diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index add1dbae64..3392cc4ad3 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -229,6 +229,7 @@ Camouflage Trench Zakamufluj Okop + 伪装掩体 Removing Trench diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 42e40a669b..6270ab7c77 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -693,12 +693,14 @@ デフォルトのアクションアイコンを非表示 Ukryj domyślną ikonę akcji 기본 행동 아이콘 숨기기 + 隐藏默认动作标识 Hides the icon shown automatically when something is in front of the cursor. Requires a game restart.\nWarning: Does not remove the action itself! It is advisable to unbind 'Use default action' key to prevent unwanted interactions. カーソルの前に何かがあるときに自動的に表示されるアイコンを非表示にします。 ゲームを再起動する必要があります。\n警告:アクション自体は削除されません! 誤って実行することを防ぐために、'標準アクション'キーのバインドを解除することをお勧めします。 Ukrywa ikonę wyświetlaną automatycznie, gdy coś znajduje się przed kursorem. Wymaga ponownego uruchomienia gry.\nOstrzeżenie: Nie usuwa samej akcji! Zaleca się usunięcia przypisania klawisza „Użyj domyślnej akcji”, aby zapobiec niechcianym interakcjom. 커서 앞에 무언가가 있을 때 자동으로 표시되는 아이콘을 숨깁니다. 게임을 재시작해야 합니다\n경고: 작업 자체를 제거하지 않습니다! 원하지 않는 상호작용을 방지하려면 '기본 행동' 키를 삭제하는 것이 좋습니다. + 隐藏屏幕面前有物体时自动显示的动作标识。需要重新启动游戏。\n警告:不会删除动作本身!建议同时取消对“使用默认动作”键的绑定,以防止不必要的互动。 diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index b6212a35d6..142b4e4d6c 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -24,6 +24,7 @@ 자동운전 켜짐 Tempomat włączony クルーズコントロールを有効化 + 开启巡航模式 Speed Limiter off @@ -48,6 +49,7 @@ 자동운전 꺼짐 Tempomat wyłączony クルーズコントロールを無効化 + 关闭巡航模式 Speed Limit @@ -88,6 +90,7 @@ 자동운전 Tempomat クルーズコントロール + 巡航模式 Increase Speed Limit diff --git a/addons/viewports/stringtable.xml b/addons/viewports/stringtable.xml index 4e5432ae7a..4a1462062f 100644 --- a/addons/viewports/stringtable.xml +++ b/addons/viewports/stringtable.xml @@ -5,12 +5,14 @@ Viewports ビューポート 뷰포트 + 观察口 Allows crew to look through periscopes Pozwala załodze patrzeć przez peryskop 乗組員がペリスコープを通して外を見ることができます 승무원이 잠망경을 통해 볼 수 있도록 허용합니다 + 允许乘员通过观察口观察 diff --git a/optionals/compat_rhs_afrf3/stringtable.xml b/optionals/compat_rhs_afrf3/stringtable.xml index de15850d76..b0a9b33d6a 100644 --- a/optionals/compat_rhs_afrf3/stringtable.xml +++ b/optionals/compat_rhs_afrf3/stringtable.xml @@ -13,6 +13,7 @@ [CSW] VOG-17M [CSW] VOG-17M [CSW] VOG-17M + [班组] VOG-17M [CSW] VOG-30 @@ -26,6 +27,7 @@ [CSW] VOG-30 [CSW] VOG-30 [CSW] VOG-30 + [班组] VOG-30 [CSW] GPD-30 @@ -39,6 +41,7 @@ [CSW] GPD-30 [CSW] GPD-30 [CSW] GPD-30 + [班组] GPD-30 [CSW] ATGM 9M131M @@ -52,6 +55,7 @@ [CSW] ATGM 9M131M [CSW] 9M131M 대전차미사일 [CSW] ATGM 9M131M + [班组] 9M131M 反坦克导弹 [CSW] ATGM 9M131F @@ -65,6 +69,7 @@ [CSW] ATGM 9M131F [CSW] 9M131F 대전차미사일 [CSW] ATGM 9M131F + [班组] 9M131F 反坦克导弹 [CSW] ATGM 9M133F @@ -78,6 +83,7 @@ [CSW] ATGM 9M133F [CSW] 9M133F 대전차미사일 [CSW] ATGM 9M133F + [班组] 9M133F 反坦克导弹 [CSW] ATGM 9M133 @@ -91,6 +97,7 @@ [CSW] ATGM 9M133 [CSW] 9M133 대전차미사일 [CSW] ATGM 9M133 + [班组] 9M133 反坦克导弹 [CSW] ATGM 9M133-1 @@ -104,6 +111,7 @@ [CSW] ATGM 9M133-1 [CSW] 9M133-1 대전차미사일 [CSW] ATGM 9M133-1 + [班组] 9M133-1 反坦克导弹 [CSW] ATGM 9M133M2 @@ -117,6 +125,7 @@ [CSW] ATGM 9M133M2 [CSW] 9M133M2 대전차미사일 [CSW] ATGM 9M133M2 + [班组] 9M133M2 反坦克导弹 [CSW] HEAT PG-9V @@ -130,6 +139,7 @@ [CSW] HEAT PG-9V [CSW] PG-9V 대전차고폭탄 [CSW] HEAT PG-9V + [班组] PG-9V 破甲弹 [CSW] HEAT PG-9N @@ -143,6 +153,7 @@ [CSW] HEAT PG-9N [CSW] PG-9N 대전차고폭탄 [CSW] HEAT PG-9N + [班组] PG-9N 破甲弹 [CSW] HEAT PG-9VNT @@ -156,6 +167,7 @@ [CSW] HEAT PG-9VNT [CSW] PG-9VNT 대전차고폭탄 [CSW] HEAT PG-9VNT + [班组] PG-9VN 破甲弹 [CSW] HE-FRAG OG-9V @@ -169,6 +181,7 @@ [CSW] HE-FRAG OG-9V [CSW] OG-9V 고폭파편탄 [CSW] HE-FRAG OG-9V + [班组] OG-9V 高爆破片弹 [CSW] HE-FRAG OG-9VM @@ -182,6 +195,7 @@ [CSW] HE-FRAG OG-9VM [CSW] OG-9VM 고폭파편탄 [CSW] HE-FRAG OG-9VM + [班组] OG-9VM 高爆破片弹 diff --git a/optionals/compat_rhs_usf3/stringtable.xml b/optionals/compat_rhs_usf3/stringtable.xml index 41d539b16a..aa1ed6da81 100644 --- a/optionals/compat_rhs_usf3/stringtable.xml +++ b/optionals/compat_rhs_usf3/stringtable.xml @@ -5,61 +5,73 @@ [CSW] BGM-71A TOW [CSW] BGM-71A TOW [CSW] BGM-71A TOW + [班组] BGM-71A TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW + [班组] BGM-71B TOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW + [班组] BGM-71C ITOW [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 + [班组] BGM-71D TOW-2 [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A + [班组] BGM-71E TOW-2A [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B + [班组] BGM-71F TOW-2B [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO + [班组] BGM-71F-3 TOW-2B AERO [CSW] BGM-71H Bunker Buster [CSW] BGM-71H 벙커버스터 [CSW] BGM-71H Bunker Buster + [班组] BGM-71H “碉堡克星” [CSW] Mk. 19 40mm M384 HE [CSW] Mk.19 40mm M384 HE [CSW] Mk. 19 40mm M384 HE + [班组] Mk. 19 40mm M384 高爆 [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk.19 40mm M430I 이중목적고폭탄 [CSW] Mk. 19 40mm M430I HEDP + [班组] Mk. 19 40mm M430I 两用高爆 [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk.19 40mm M430A1 이중목적고폭탄 [CSW] Mk. 19 40mm M430A1 HEDP + [班组] Mk. 19 40mm M430A1 两用高爆 [CSW] Mk. 19 40mm M1001 Canister [CSW] Mk.19 40mm M1001 산탄 [CSW] Mk. 19 40mm M1001 キャニスター + [班组] Mk. 19 40mm M1001 霰弹 From cd9372a8e138165d801d2f5283aff60da0e12d6b Mon Sep 17 00:00:00 2001 From: Whigital Date: Sun, 31 Jul 2022 01:09:02 +0200 Subject: [PATCH 18/92] RHSSAF Compat - Disable vanilla use action on explosives (#8982) --- optionals/compat_rhs_saf3/CfgMagazines.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/optionals/compat_rhs_saf3/CfgMagazines.hpp b/optionals/compat_rhs_saf3/CfgMagazines.hpp index fdf2c05356..07319f313f 100644 --- a/optionals/compat_rhs_saf3/CfgMagazines.hpp +++ b/optionals/compat_rhs_saf3/CfgMagazines.hpp @@ -50,6 +50,7 @@ class CfgMagazines { class CA_Magazine; class rhssaf_tm100_mag: CA_Magazine { + useAction = 0; ace_explosives_DelayTime = 1; ace_explosives_Placeable = 1; ace_explosives_SetupObject = "ACE_Explosives_Place_rhssaf_tm100"; From fc17697ef7fe2ffd44d3d4b1601d6dfd85f16fb8 Mon Sep 17 00:00:00 2001 From: Whigital Date: Mon, 1 Aug 2022 19:32:02 +0200 Subject: [PATCH 19/92] Overpressure - Fix backblast originating at projectile (#8985) * Overpressure - Fix backblast originating at the projectile * RHSUSF - Improve backblast for shoulder launchers * RHSAFRF - Improve backblast for shoulder launchers * RHSGREF - Improve backblast for shoulder launchers * RHSSAF - Improve backblast for shoulder launchers * Overpressure - Simplify projectile offset and cache lookups * Overpressure - Remove parentheses and use array as hash key * Overpressure - Rename caching function and move lookup --- addons/overpressure/CfgWeapons.hpp | 20 +++++++++++ addons/overpressure/XEH_PREP.hpp | 3 +- addons/overpressure/XEH_postInit.sqf | 2 ++ .../overpressure/functions/fnc_firedEHBB.sqf | 16 ++++----- .../overpressure/functions/fnc_firedEHOP.sqf | 14 +++----- ...lues.sqf => fnc_getOverPressureValues.sqf} | 22 ++++++++---- .../functions/fnc_overpressureDamage.sqf | 12 +++---- docs/wiki/development/ace3-config-entries.md | 1 + docs/wiki/framework/overpressure-framework.md | 11 +++--- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 25 ++++++++++++- optionals/compat_rhs_gref3/CfgWeapons.hpp | 12 +++++++ optionals/compat_rhs_saf3/CfgWeapons.hpp | 9 +++++ optionals/compat_rhs_usf3/CfgWeapons.hpp | 35 ++++++++++++++----- 13 files changed, 131 insertions(+), 51 deletions(-) rename addons/overpressure/functions/{fnc_cacheOverPressureValues.sqf => fnc_getOverPressureValues.sqf} (72%) diff --git a/addons/overpressure/CfgWeapons.hpp b/addons/overpressure/CfgWeapons.hpp index 1f0814a487..7102e84d1b 100644 --- a/addons/overpressure/CfgWeapons.hpp +++ b/addons/overpressure/CfgWeapons.hpp @@ -7,6 +7,7 @@ class CfgWeapons { GVAR(angle) = 60; GVAR(range) = 10; GVAR(damage) = 0.7; + GVAR(offset) = 1; }; class Launcher_Base_F: Launcher {}; @@ -16,6 +17,7 @@ class CfgWeapons { GVAR(angle) = 40; GVAR(range) = 8; GVAR(damage) = 0.5; + GVAR(offset) = 1; }; class launch_Titan_short_base: launch_Titan_base { @@ -24,6 +26,7 @@ class CfgWeapons { GVAR(angle) = 30; GVAR(range) = 2; GVAR(damage) = 0.5; + GVAR(offset) = 0.85; }; class launch_NLAW_F: Launcher_Base_F { @@ -32,6 +35,7 @@ class CfgWeapons { GVAR(angle) = 30; GVAR(range) = 2; GVAR(damage) = 0.6; + GVAR(offset) = 1.05; }; class launch_RPG32_F: Launcher_Base_F { @@ -39,6 +43,22 @@ class CfgWeapons { GVAR(angle) = 60; GVAR(range) = 15; GVAR(damage) = 0.7; + GVAR(offset) = 1.2; + }; + + class launch_MRAWS_base_F: Launcher_Base_F { + GVAR(range) = 15; + GVAR(offset) = 1.05; + }; + + class launch_Vorona_base_F: Launcher_Base_F { + GVAR(angle) = 50; + GVAR(offset) = 0.88; + }; + + class launch_RPG7_F: Launcher_Base_F { + GVAR(angle) = 40; + GVAR(offset) = 0.9; }; class CannonCore; diff --git a/addons/overpressure/XEH_PREP.hpp b/addons/overpressure/XEH_PREP.hpp index 1efd39d6e5..9d1e8e9725 100644 --- a/addons/overpressure/XEH_PREP.hpp +++ b/addons/overpressure/XEH_PREP.hpp @@ -1,6 +1,5 @@ - PREP(getDistance); PREP(overpressureDamage); -PREP(cacheOverPressureValues); +PREP(getOverPressureValues); PREP(firedEHOP); PREP(firedEHBB); diff --git a/addons/overpressure/XEH_postInit.sqf b/addons/overpressure/XEH_postInit.sqf index bf3758ab3d..46fe460268 100644 --- a/addons/overpressure/XEH_postInit.sqf +++ b/addons/overpressure/XEH_postInit.sqf @@ -9,4 +9,6 @@ // Register fire event handler ["ace_firedPlayer", LINKFUNC(firedEHBB)] call CBA_fnc_addEventHandler; ["ace_firedPlayerVehicle", LINKFUNC(firedEHOP)] call CBA_fnc_addEventHandler; + + GVAR(cacheHash) = createHashMap; }] call CBA_fnc_addEventHandler; diff --git a/addons/overpressure/functions/fnc_firedEHBB.sqf b/addons/overpressure/functions/fnc_firedEHBB.sqf index 758f00784c..b43649607f 100644 --- a/addons/overpressure/functions/fnc_firedEHBB.sqf +++ b/addons/overpressure/functions/fnc_firedEHBB.sqf @@ -18,20 +18,16 @@ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); -// Bake variable name and check if the variable exists, call the caching function otherwise -private _varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; -private _var = if (isNil _varName) then { - [_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues); -} else { - missionNameSpace getVariable _varName; -}; -_var params ["_backblastAngle","_backblastRange","_backblastDamage"]; -TRACE_3("cache",_backblastAngle,_backblastRange,_backblastDamage); +// Retrieve backblast values +private _bbValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues); + +_bbValues params ["_backblastAngle", "_backblastRange", "_backblastDamage", "_offset"]; +TRACE_4("cache",_backblastAngle,_backblastRange,_backblastDamage,_offset); if (_backblastDamage <= 0) exitWith {}; -private _position = getPosASL _projectile; private _direction = [0, 0, 0] vectorDiff (vectorDir _projectile); +private _position = ((getPosASL _projectile) vectorAdd (_direction vectorMultiply _offset)); // Damage to others private _affected = (ASLtoAGL _position) nearEntities ["CAManBase", _backblastRange]; diff --git a/addons/overpressure/functions/fnc_firedEHOP.sqf b/addons/overpressure/functions/fnc_firedEHOP.sqf index 5871fae9b8..618cfae6f1 100644 --- a/addons/overpressure/functions/fnc_firedEHOP.sqf +++ b/addons/overpressure/functions/fnc_firedEHOP.sqf @@ -18,20 +18,14 @@ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); -// Bake variable name and check if the variable exists, call the caching function otherwise -private _varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; -private _var = if (isNil _varName) then { - [_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues); -} else { - missionNameSpace getVariable _varName; -}; -_var params ["_dangerZoneAngle","_dangerZoneRange","_dangerZoneDamage"]; +// Retrieve overpressure values +private _opValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues); + +_opValues params ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; TRACE_3("cache",_dangerZoneAngle,_dangerZoneRange,_dangerZoneDamage); if (_dangerZoneDamage <= 0) exitWith {}; - - // The weapon produces overpressure, calculate private _position = getPosASL _projectile; private _direction = vectorDir _projectile; diff --git a/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf b/addons/overpressure/functions/fnc_getOverPressureValues.sqf similarity index 72% rename from addons/overpressure/functions/fnc_cacheOverPressureValues.sqf rename to addons/overpressure/functions/fnc_getOverPressureValues.sqf index 2626004e87..2b30dc0008 100644 --- a/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf +++ b/addons/overpressure/functions/fnc_getOverPressureValues.sqf @@ -14,9 +14,10 @@ * 0: Angle * 1: Range * 2: Damage + * 3: Offset * * Example: - * ["cannon_125mm","Sh_125mm_APFSDS_T_Green","24Rnd_125mm_APFSDS_T_Green"] call ace_overpressure_fnc_cacheOverPressureValues + * ["cannon_125mm","Sh_125mm_APFSDS_T_Green","24Rnd_125mm_APFSDS_T_Green"] call ace_overpressure_fnc_getOverPressureValues * * Public: No */ @@ -24,6 +25,13 @@ params ["_weapon", "_ammo", "_magazine"]; TRACE_3("Parameter",_weapon,_magazine,_ammo); +// Check cache for weapon/ammo/mag combo +private _return = GVAR(cacheHash) get _this; +if (!isNil "_return") exitWith { + TRACE_3("CacheHit",_weapon,_magazine,_ammo); + _return +}; + // get Priority Array from Config private _array = [ getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(priority)), @@ -43,15 +51,15 @@ private _config = [ ] select _indexOfMaxPriority; TRACE_1("ConfigPath",_config); -// get the Variables out of the Configes and create a array with then -private _return = [ +// get the Variables out of the Configs and populate return array with them +_return = [ (getNumber (_config >> QGVAR(angle))), (getNumber (_config >> QGVAR(range))) * GVAR(distanceCoefficient), - (getNumber (_config >> QGVAR(damage))) + (getNumber (_config >> QGVAR(damage))), + (getNumber (_config >> QGVAR(offset))) ]; -private _varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; -missionNameSpace setVariable [_varName, _return]; -TRACE_2("Return",_varName,_return); +GVAR(cacheHash) set [_this, _return]; +TRACE_2("Return",_this,_return); _return diff --git a/addons/overpressure/functions/fnc_overpressureDamage.sqf b/addons/overpressure/functions/fnc_overpressureDamage.sqf index dd60fc25d3..c05c281075 100644 --- a/addons/overpressure/functions/fnc_overpressureDamage.sqf +++ b/addons/overpressure/functions/fnc_overpressureDamage.sqf @@ -23,14 +23,10 @@ params ["_firer", "_posASL", "_direction", "_weapon", "_magazine", "_ammo"]; -// Bake variable name and check if the variable exists, call the caching function otherwise -private _varName = format [QGVAR(values%1%2%3), _weapon, _ammo, _magazine]; -private _var = if (isNil _varName) then { - [_weapon, _ammo, _magazine] call FUNC(cacheOverPressureValues); -} else { - missionNameSpace getVariable _varName; -}; -_var params ["_overpressureAngle","_overpressureRange","_overpressureDamage"]; +// Retrieve overpressure values +private _opValues = [_weapon, _ammo, _magazine] call FUNC(getOverPressureValues); + +_opValues params ["_overpressureAngle", "_overpressureRange", "_overpressureDamage"]; TRACE_3("cache",_overpressureAngle,_overpressureRange,_overpressureDamage); { diff --git a/docs/wiki/development/ace3-config-entries.md b/docs/wiki/development/ace3-config-entries.md index f018246a99..b8f66a9f18 100644 --- a/docs/wiki/development/ace3-config-entries.md +++ b/docs/wiki/development/ace3-config-entries.md @@ -49,6 +49,7 @@ ace_recoil_shakemultiplier ace_overpressure_angle ace_overpressure_range ace_overpressure_damage +ace_overpressure_offset ace_overheating_closedbolt ace_overheating_dispersion ace_overheating_slowdownfactor diff --git a/docs/wiki/framework/overpressure-framework.md b/docs/wiki/framework/overpressure-framework.md index 23d2080514..7e7969f62a 100644 --- a/docs/wiki/framework/overpressure-framework.md +++ b/docs/wiki/framework/overpressure-framework.md @@ -19,9 +19,10 @@ version: ```cpp class CfgWeapons { class MyLauncher { - ace_overpressure_angle = 60; // Cone in which the damage is applied (in degrees from the back end of the launcher) - ace_overpressure_range = 15; // Range in meters in which the damage is applied + ace_overpressure_angle = 60; // Cone in which the damage is applied (in degrees from the back end of the launcher) + ace_overpressure_range = 15; // Range in meters in which the damage is applied ace_overpressure_damage = 0.7; // Damage multiplier + ace_overpressure_offset = 1; // Offset from the projectile, where the backblast originates }; }; ``` @@ -31,9 +32,9 @@ class CfgWeapons { ```cpp class CfgWeapons { class MyBananaCannon { - ace_overpressure_angle = 90; // Cone in which the damage is applied (in degrees from the muzzle of the cannon) - ace_overpressure_range = 50; // Range in meters in which the damage is applied - ace_overpressure_damage = 0.85; // Damage multiplier + ace_overpressure_angle = 90; // Cone in which the damage is applied (in degrees from the muzzle of the cannon) + ace_overpressure_range = 50; // Range in meters in which the damage is applied + ace_overpressure_damage = 0.85; // Damage multiplier }; }; ``` diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 4fa6ab09c2..66390bff45 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -117,12 +117,35 @@ class CfgWeapons { }; }; }; + class Launcher; class Launcher_Base_F: Launcher { class WeaponSlotsInfo; }; + + class rhs_weap_strela; + class rhs_weap_igla: rhs_weap_strela { + EGVAR(overpressure,range) = 6; + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,damage) = 0.6; + EGVAR(overpressure,offset) = 1.65; + }; + class rhs_weap_rpg7: Launcher_Base_F { - ace_reloadlaunchers_enabled = 1; + EGVAR(reloadlaunchers,enabled) = 1; + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,offset) = 0.9; + }; + + class rhs_weap_rpg26: Launcher_Base_F { + EGVAR(overpressure,range) = 10; + EGVAR(overpressure,angle) = 50; + EGVAR(overpressure,offset) = 0.65; + }; + + class rhs_weap_rpg18: rhs_weap_rpg26 { + EGVAR(overpressure,angle) = 45; + EGVAR(overpressure,offset) = 1; }; #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; diff --git a/optionals/compat_rhs_gref3/CfgWeapons.hpp b/optionals/compat_rhs_gref3/CfgWeapons.hpp index 536c7340e6..9ef0896409 100644 --- a/optionals/compat_rhs_gref3/CfgWeapons.hpp +++ b/optionals/compat_rhs_gref3/CfgWeapons.hpp @@ -122,6 +122,18 @@ class CfgWeapons { class Launcher_Base_F: Launcher { class WeaponSlotsInfo; }; + + class rhs_weap_panzerfaust60: Launcher_Base_F { + EGVAR(overpressure,range) = 6; + EGVAR(overpressure,angle) = 30; + EGVAR(overpressure,damage) = 0.4; + }; + + class rhs_weap_rpg75: Launcher_Base_F { + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,offset) = 0.9; + }; + class GVAR(dshkm_carry): Launcher_Base_F { class ACE_CSW { type = "weapon"; diff --git a/optionals/compat_rhs_saf3/CfgWeapons.hpp b/optionals/compat_rhs_saf3/CfgWeapons.hpp index b20dca276b..1aed727715 100644 --- a/optionals/compat_rhs_saf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_saf3/CfgWeapons.hpp @@ -71,4 +71,13 @@ class CfgWeapons { class rhssaf_uniform_heli_pilot: Uniform_Base { ACE_GForceCoef = 0.8; }; + + // Launchers + class Launcher_Base_F; + class rhs_weap_m80: Launcher_Base_F { + EGVAR(overpressure,range) = 8; + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,damage) = 0.7; + EGVAR(overpressure,offset) = 1.15; + }; }; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 96a6f81714..c626d19abb 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -14,7 +14,6 @@ class CfgWeapons { class Pistol_Base_F; class Rifle_Base_F; class rhs_weap_m14ebrri_base; - class launch_O_Titan_F; class GM6_base_F; class rhs_weap_M107_Base_F: GM6_base_F { ACE_barrelTwist = 381.0; @@ -309,9 +308,12 @@ class CfgWeapons { }; }; }; + // RHS lauchers + class launch_O_Titan_F; class rhs_weap_fgm148: launch_O_Titan_F { - ace_javelin_enabled = 1; + EGVAR(javelin,enabled) = 1; + EGVAR(overpressure,offset) = 1.1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = "\z\ace\addons\javelin\data\reticle_titan.p3d"; canLock = 0; @@ -326,19 +328,36 @@ class CfgWeapons { }; }; + class rhs_weap_fim92: launch_O_Titan_F { + EGVAR(overpressure,range) = 6; + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,damage) = 0.6; + EGVAR(overpressure,offset) = 1.45; + }; + class Launcher; class Launcher_Base_F: Launcher { class WeaponSlotsInfo; }; + class rhs_weap_smaw: Launcher_Base_F { - ace_reloadlaunchers_enabled = 1; - ace_overpressure_angle = 45; + EGVAR(reloadlaunchers,enabled) = 1; + EGVAR(overpressure,angle) = 45; + EGVAR(overpressure,offset) = 1.3; }; + class rhs_weap_maaws: Launcher_Base_F { - ace_reloadlaunchers_enabled = 1; - ace_overpressure_range = 15; - ace_overpressure_angle = 70; - ace_overpressure_damage = 0.75; + EGVAR(reloadlaunchers,enabled) = 1; + EGVAR(overpressure,range) = 15; + EGVAR(overpressure,angle) = 70; + EGVAR(overpressure,damage) = 0.75; + EGVAR(overpressure,offset) = 0.95; + }; + + class rhs_weap_M136: Launcher_Base_F { + EGVAR(overpressure,range) = 10; + EGVAR(overpressure,angle) = 50; + EGVAR(overpressure,offset) = 0.9; }; #define HEARING_PROTECTION_OPEN EGVAR(hearing,protection) = 0; EGVAR(hearing,lowerVolume) = 0; From 0c90f8a609dd24322da470b3e9d132b6bff9e730 Mon Sep 17 00:00:00 2001 From: ACCtomeek Date: Mon, 8 Aug 2022 18:24:01 +0200 Subject: [PATCH 20/92] Update AUTHORS.txt (#8996) --- AUTHORS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index e4720402ee..4035308b0f 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -35,7 +35,7 @@ Walter Pearce 11RDP-LoupVert 654wak654 [BIG]Bull -ACCtomeek +ACCtomeek adam3adam Adanteh aeroson From b47b8014e7f89022dbecf195c84349ac245ad8f5 Mon Sep 17 00:00:00 2001 From: Cyruz Date: Tue, 9 Aug 2022 15:38:06 +0100 Subject: [PATCH 21/92] Fix incorrect mempoint for sound src (#8989) --- addons/fire/functions/fnc_burn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/fire/functions/fnc_burn.sqf b/addons/fire/functions/fnc_burn.sqf index 31beeffdb8..5174125df8 100644 --- a/addons/fire/functions/fnc_burn.sqf +++ b/addons/fire/functions/fnc_burn.sqf @@ -289,7 +289,7 @@ if (_isBurning) exitWith {}; if (isServer) then { _fireSound = createSoundSource ["Sound_Fire", _unitPos, [], 0]; - _fireSound attachTo [_unit, [0, 0, 0], "destructionEffect1"]; + _fireSound attachTo [_unit, [0, 0, 0], "Head"]; }; _unit setVariable [QGVAR(burning), true]; From 4943b2119d6894df5cc3469c79cfa6999388f5e7 Mon Sep 17 00:00:00 2001 From: GhostIsSpooky <69561145+Salluci@users.noreply.github.com> Date: Sun, 14 Aug 2022 13:09:01 -0300 Subject: [PATCH 22/92] CSW - Fix loading with ammo from vehicle cargo (#8995) Co-authored-by: GhostIsSpooky --- addons/csw/functions/fnc_ai_reload.sqf | 2 +- addons/csw/functions/fnc_reload_loadMagazine.sqf | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/csw/functions/fnc_ai_reload.sqf b/addons/csw/functions/fnc_ai_reload.sqf index fea3f196d0..f4d69b03c4 100644 --- a/addons/csw/functions/fnc_ai_reload.sqf +++ b/addons/csw/functions/fnc_ai_reload.sqf @@ -72,7 +72,7 @@ private _bestAmmoToSend = -1; _bestAmmoToSend = _xAmmo; }; }; -} forEach (if (_reloadSource isKindOf "CaManBase") then {magazinesAmmo _reloadSource} else {magazinesAmmoCargo _reloadSource}); +} forEach (if (_reloadSource isKindOf "CAManBase") then {magazinesAmmo _reloadSource} else {magazinesAmmoCargo _reloadSource}); TRACE_4("",_reloadSource,_reloadMag,_reloadNeededAmmo,_bestAmmoToSend); if (_bestAmmoToSend == -1) exitWith {ERROR("No ammo");}; diff --git a/addons/csw/functions/fnc_reload_loadMagazine.sqf b/addons/csw/functions/fnc_reload_loadMagazine.sqf index 9d3f6fcb9e..5cceb55113 100644 --- a/addons/csw/functions/fnc_reload_loadMagazine.sqf +++ b/addons/csw/functions/fnc_reload_loadMagazine.sqf @@ -45,7 +45,7 @@ private _onFinish = { _bestAmmoToSend = _xAmmo; }; }; - } forEach (magazinesAmmo _magSource); + } forEach (if (_magSource isKindOf "CAManBase") then {magazinesAmmo _magSource} else {magazinesAmmoCargo _magSource}); if (_bestAmmoToSend == -1) exitWith {ERROR_2("No ammo [%1 - %2]?",_xMag,_bestAmmoToSend);}; [_magSource, _carryMag, _bestAmmoToSend] call EFUNC(common,removeSpecificMagazine); @@ -57,11 +57,11 @@ private _onFinish = { [ -TIME_PROGRESSBAR(_timeToLoad), -[_vehicle, _turret, _carryMag, _magSource], -_onFinish, -{TRACE_1("load progressBar fail",_this);}, -_displayName, -{((_this select 0) call FUNC(reload_canLoadMagazine)) select 0}, -["isNotInside"] + TIME_PROGRESSBAR(_timeToLoad), + [_vehicle, _turret, _carryMag, _magSource], + _onFinish, + {TRACE_1("load progressBar fail",_this);}, + _displayName, + {((_this select 0) call FUNC(reload_canLoadMagazine)) select 0}, + ["isNotInside"] ] call EFUNC(common,progressBar); From 131b0b9472931e6bc857f2f0b92e21f2656c8c9d Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 16 Aug 2022 16:33:15 +0200 Subject: [PATCH 23/92] Captives - Load into back seats first (#8973) Reverses the list of seats for loading captives --- addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf b/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf index 7c9daf1080..5ed3cb5871 100644 --- a/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf +++ b/addons/captives/functions/fnc_findEmptyNonFFVCargoSeat.sqf @@ -20,18 +20,21 @@ TRACE_1("params", _vehicle); scopeName "main"; +private _seats = fullCrew [_vehicle, "", true]; +reverse _seats; + { _x params ["_unit", "_role", "_cargoIndex", "_turretPath", "_isPersonTurret"]; if (isNull _unit && {_role == "cargo"} && {_cargoIndex > -1} && {!_isPersonTurret}) then { [_cargoIndex, false] breakOut "main"; }; -} forEach (fullCrew [_vehicle, "", true]); +} forEach _seats; { _x params ["_unit", "_role", "_cargoIndex", "_turretPath", "_isPersonTurret"]; if (isNull _unit && {_cargoIndex > -1}) then { [_cargoIndex, true] breakOut "main"; }; -} forEach (fullCrew [_vehicle, "", true]); +} forEach _seats; [-1, false] From 286537cd541b0d63933d36ff2c8dd03b925598a3 Mon Sep 17 00:00:00 2001 From: Whigital Date: Wed, 17 Aug 2022 12:59:07 +0200 Subject: [PATCH 24/92] Fortify - Fix funds being lost when canceling deploy (#8992) --- addons/fortify/XEH_postInit.sqf | 7 +++++-- addons/fortify/functions/fnc_deployConfirm.sqf | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/addons/fortify/XEH_postInit.sqf b/addons/fortify/XEH_postInit.sqf index 1e9670481d..ed13a116c7 100644 --- a/addons/fortify/XEH_postInit.sqf +++ b/addons/fortify/XEH_postInit.sqf @@ -76,7 +76,7 @@ GVAR(objectRotationZ) = 0; // Place object event handler [QGVAR(deployFinished), { params ["_args", "_elapsedTime", "_totalTime", "_errorCode"]; - _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp"]; + _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"]; private _newObject = _typeOf createVehicle _posASL; _newObject setPosASL _posASL; @@ -96,7 +96,10 @@ GVAR(objectRotationZ) = 0; [QGVAR(deployCanceled), { params ["_args", "_elapsedTime", "_totalTime", "_errorCode"]; - _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp"]; + _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"]; + + // Refund if deploy was canceled + [_side, _cost] call FUNC(updateBudget); // Reset animation [_unit, "", 1] call EFUNC(common,doAnimation); diff --git a/addons/fortify/functions/fnc_deployConfirm.sqf b/addons/fortify/functions/fnc_deployConfirm.sqf index 7ac43e2b1f..7e7570b705 100644 --- a/addons/fortify/functions/fnc_deployConfirm.sqf +++ b/addons/fortify/functions/fnc_deployConfirm.sqf @@ -20,10 +20,10 @@ params ["_unit", "_object"]; TRACE_2("deployConfirm",_unit,_object); private _side = side group _unit; -private _cost = [_side, typeOf _object] call FUNC(getCost); +private _typeOf = typeOf _object; +private _cost = [_side, _typeOf] call FUNC(getCost); [_side, -_cost] call FUNC(updateBudget); -private _typeOf = typeOf _object; private _posASL = getPosASL _object; private _vectorUp = vectorUp _object; private _vectorDir = vectorDir _object; @@ -35,7 +35,7 @@ private _totalTime = _cost * GVAR(timeCostCoefficient) + GVAR(timeMin); // time private _perframeCheck = { params ["_args", "_elapsedTime", "_totalTime", "_errorCode"]; - _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp"]; + _args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"]; // Animation loop (required for longer constructions) if (animationState _unit isNotEqualTo "AinvPknlMstpSnonWnonDnon_medic4") then { @@ -49,7 +49,7 @@ private _perframeCheck = { [ _totalTime, - [_unit, _side, _typeOf, _posASL, _vectorDir, _vectorUp], + [_unit, _side, _typeOf, _posASL, _vectorDir, _vectorUp, _cost], QGVAR(deployFinished), QGVAR(deployCanceled), LLSTRING(progressBarTitle), From 7a64ccb7a5defe4b83a50fe2eb443603d0d1d115 Mon Sep 17 00:00:00 2001 From: Samuel Deutsch Date: Wed, 17 Aug 2022 04:00:54 -0700 Subject: [PATCH 25/92] Refuel - Improved fuel hose texture (#8983) * Added custom fuel hose * Fixed indentation * Added model config for hose * Added model config for hose --- addons/refuel/CfgVehicles.hpp | 20 ++++++++++++++++++++ addons/refuel/data/hose.cfg | 7 +++++++ addons/refuel/data/hose.p3d | Bin 0 -> 13867 bytes addons/refuel/functions/fnc_takeNozzle.sqf | 2 +- 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 addons/refuel/data/hose.cfg create mode 100644 addons/refuel/data/hose.p3d diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index 41c4f12625..6745469a2a 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -42,6 +42,18 @@ class CBA_Extended_EventHandlers; +class CfgNonAIVehicles { + class GVAR(fuelHoseSegment) { + access = 0; + scope = 2; + displayName = "Fuel Hose"; + simulation = "ropesegment"; + autocenter = 0; + animated = 0; + model = QPATHTOF(data\hose.p3d); + }; +}; + class CfgVehicles { class ACE_Module; class ACE_moduleRefuelSettings: ACE_Module { @@ -82,6 +94,14 @@ class CfgVehicles { model = QPATHTOF(data\nozzle.p3d); destrType = "DestructNo"; }; + + class Rope; + class GVAR(fuelHose): Rope { + hiddenSelections[] = {"rope"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.009,0.009,0.009,1.0,co)"}; + segmentType = QGVAR(fuelHoseSegment); + model = QPATHTOF(data\hose.p3d); + }; class All; class Static: All {}; diff --git a/addons/refuel/data/hose.cfg b/addons/refuel/data/hose.cfg new file mode 100644 index 0000000000..a49123a444 --- /dev/null +++ b/addons/refuel/data/hose.cfg @@ -0,0 +1,7 @@ +class CfgModels { + class hose { + sectionsInherit = ""; + sections[] = {"rope"}; + skeletonName = ""; + }; +}; \ No newline at end of file diff --git a/addons/refuel/data/hose.p3d b/addons/refuel/data/hose.p3d new file mode 100644 index 0000000000000000000000000000000000000000..cc233eacf611c2a83d3dd80d42f1213458ee30c7 GIT binary patch literal 13867 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 T6YZ~q9E(yrH2v(s(fj`kG7!pD literal 0 HcmV?d00001 diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index 7ce0a9d808..efb0256654 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -69,7 +69,7 @@ params [ _attachPos = _attachPos select (_hookDistances find selectMin _hookDistances); }; private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; - private _rope = ropeCreate [_ropeTarget, _attachPos, _nozzle, [0, -0.20, 0.12], _hoseLength]; + private _rope = ropeCreate [_ropeTarget, _attachPos, _nozzle, [0, -0.20, 0.12], _hoseLength, [], [], QGVAR(fuelHose)]; _nozzle setVariable [QGVAR(rope), _rope, true]; _nozzle setVariable [QGVAR(attachPos), _attachPos, true]; _nozzle setVariable [QGVAR(source), _source, true]; From a76f8924d8db87be29f6741fabb44a96c7b1b582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dahlgren?= Date: Wed, 17 Aug 2022 13:01:08 +0200 Subject: [PATCH 26/92] CI - Use pull request branch pDummies during build (#9003) --- .github/workflows/pboproject.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pboproject.yml b/.github/workflows/pboproject.yml index dea1394521..7b03e65077 100644 --- a/.github/workflows/pboproject.yml +++ b/.github/workflows/pboproject.yml @@ -56,8 +56,10 @@ jobs: run: | rm -r z\ace\addons\ rm -r z\ace\optionals\ + rm -r z\ace\tools\pDummies\ xcopy /e /h /q pullrequest\addons z\ace\addons\ xcopy /e /h /q pullrequest\optionals z\ace\optionals\ + xcopy /e /h /q pullrequest\tools\pDummies z\ace\tools\pDummies\ - name: Setup build environment run: | subst P: . From f3c66e83b4bd76d61570b20faede1527f7c9a513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ozan=20E=C4=9Fitmen?= Date: Wed, 17 Aug 2022 14:25:37 +0300 Subject: [PATCH 27/92] Refuel - Add Progress Bar Duration Setting (#8971) * Refuel: Allow changing progress bars' duration * Clarify Turkish progressDuration_DisplayName * Update addons/refuel/functions/fnc_moduleRefuelSettings.sqf * Change progressDuration setting's type to TIME * Update progressDuration setting display name, add description too Co-authored-by: PabstMirror --- addons/refuel/CfgVehicles.hpp | 5 +++++ addons/refuel/defines.hpp | 1 - addons/refuel/functions/fnc_checkFuel.sqf | 2 +- addons/refuel/functions/fnc_connectNozzleAction.sqf | 2 +- addons/refuel/functions/fnc_moduleRefuelSettings.sqf | 3 ++- addons/refuel/functions/fnc_returnNozzle.sqf | 2 +- addons/refuel/functions/fnc_takeNozzle.sqf | 2 +- addons/refuel/initSettings.sqf | 9 +++++++++ addons/refuel/script_component.hpp | 7 ------- addons/refuel/stringtable.xml | 10 +++++++++- 10 files changed, 29 insertions(+), 14 deletions(-) diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index 6745469a2a..adce2a8af2 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -78,6 +78,11 @@ class CfgVehicles { typeName = "NUMBER"; defaultValue = 12; }; + class progressDuration { + displayName = CSTRING(RefuelSettings_progressDuration_DisplayName); + typeName = "NUMBER"; + defaultValue = 2; + }; }; }; diff --git a/addons/refuel/defines.hpp b/addons/refuel/defines.hpp index dc9055da9a..761eb08641 100644 --- a/addons/refuel/defines.hpp +++ b/addons/refuel/defines.hpp @@ -2,4 +2,3 @@ #define REFUEL_DISABLED_FUEL -1 #define REFUEL_ACTION_DISTANCE 7 #define REFUEL_NOZZLE_ACTION_DISTANCE 2 -#define REFUEL_PROGRESS_DURATION 2 diff --git a/addons/refuel/functions/fnc_checkFuel.sqf b/addons/refuel/functions/fnc_checkFuel.sqf index 275ad7999b..72c1c2b896 100644 --- a/addons/refuel/functions/fnc_checkFuel.sqf +++ b/addons/refuel/functions/fnc_checkFuel.sqf @@ -21,7 +21,7 @@ params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; private _fuel = [_source] call FUNC(getFuel); [ - TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION * 2), + GVAR(progressDuration) * 2, [_unit, _source, _fuel], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_connectNozzleAction.sqf b/addons/refuel/functions/fnc_connectNozzleAction.sqf index f2e38c34a0..97778d3e83 100644 --- a/addons/refuel/functions/fnc_connectNozzleAction.sqf +++ b/addons/refuel/functions/fnc_connectNozzleAction.sqf @@ -65,7 +65,7 @@ _bestPosASL = _bestPosASL vectorAdd ((_bestPosASL vectorFromTo _startingPosASL) private _attachPosModel = _sink worldToModel (ASLtoAGL _bestPosASL); [ - TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), + GVAR(progressDuration), [_unit, _nozzle, _sink, _attachPosModel], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_moduleRefuelSettings.sqf b/addons/refuel/functions/fnc_moduleRefuelSettings.sqf index fabdad1706..1972397986 100644 --- a/addons/refuel/functions/fnc_moduleRefuelSettings.sqf +++ b/addons/refuel/functions/fnc_moduleRefuelSettings.sqf @@ -23,5 +23,6 @@ if !(_activated) exitWith {}; [_logic, QGVAR(rate), "rate"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(hoseLength), "hoseLength"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(progressDuration), "progressDuration"] call EFUNC(common,readSettingFromModule); -INFO_2("Refuel Module Initialized with flow rate: %1 - hoseLength: %2",GVAR(rate), GVAR(hoseLength)) +INFO_3("Refuel Module Initialized with flow rate: %1 - hoseLength: %2 - progressDuration: %3",GVAR(rate),GVAR(hoseLength),GVAR(progressDuration)) diff --git a/addons/refuel/functions/fnc_returnNozzle.sqf b/addons/refuel/functions/fnc_returnNozzle.sqf index 3cc2f773f0..5f1eed2721 100644 --- a/addons/refuel/functions/fnc_returnNozzle.sqf +++ b/addons/refuel/functions/fnc_returnNozzle.sqf @@ -23,7 +23,7 @@ private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; if (isNull _nozzle || {_source != _nozzle getVariable QGVAR(source)}) exitWith {}; [ - TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), + GVAR(progressDuration), [_unit, _nozzle, _source], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index efb0256654..0292e9ec66 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -22,7 +22,7 @@ params [ ]; [ - TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), + GVAR(progressDuration), [_unit, _object], { params ["_args"]; diff --git a/addons/refuel/initSettings.sqf b/addons/refuel/initSettings.sqf index 160c3ef22d..52e3c7ee8c 100644 --- a/addons/refuel/initSettings.sqf +++ b/addons/refuel/initSettings.sqf @@ -15,3 +15,12 @@ true, // isGlobal {[QGVAR(hoseLength), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; + +[ + QGVAR(progressDuration), "TIME", + [LSTRING(RefuelSettings_progressDuration_DisplayName), LSTRING(RefuelSettings_progressDuration_Description)], + [localize ELSTRING(OptionsMenu,CategoryLogistics), localize "str_state_refuel"], + [0, 10, 2], // [min, max, default value] + true, // isGlobal + {[QGVAR(progressDuration), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_fnc_addSetting; diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index 09d0afc599..76d9b67819 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -2,7 +2,6 @@ #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 @@ -20,11 +19,5 @@ #include "\z\ace\addons\refuel\defines.hpp" -#ifdef FAST_PROGRESSBARS - #define TIME_PROGRESSBAR(X) ((X) * 0.075) -#else - #define TIME_PROGRESSBAR(X) (X) -#endif - #define INTERACT_EXCEPTIONS_REFUELING "isNotInside", "isNotOnLadder", "isNotSwimming" #define INTERACT_EXCEPTIONS INTERACT_EXCEPTIONS_REFUELING, "isNotRefueling" diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 0a10e938c4..90ace6c7c1 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -479,7 +479,15 @@ Comprimento da Mangueira de Combustível Longueur du tuyau Délka hadice na palivo - Yakıt poması uzunluğu + Yakıt hortumu uzunluğu + + + Pump/Hose Interaction Time + Pompa/Hortum Etkileşim Süresi + + + How long refuel interactions take in seconds. + Saniye biriminde yakıt ikmali etkileşimlerinin süresi. Fuel Cargo Volume From a421a63eea03bde943bdd0f636a5a3a7c52885f9 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Sat, 20 Aug 2022 22:43:50 +0200 Subject: [PATCH 28/92] Trenches - Add "placed" and "finished" events (#8998) * Add trench placed and finished global events * Docs --- addons/trenches/functions/fnc_continueDiggingTrench.sqf | 2 ++ addons/trenches/functions/fnc_placeConfirm.sqf | 2 ++ docs/wiki/framework/events-framework.md | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/addons/trenches/functions/fnc_continueDiggingTrench.sqf b/addons/trenches/functions/fnc_continueDiggingTrench.sqf index 4c6c6f9546..8380a83af9 100644 --- a/addons/trenches/functions/fnc_continueDiggingTrench.sqf +++ b/addons/trenches/functions/fnc_continueDiggingTrench.sqf @@ -48,6 +48,8 @@ private _fnc_onFinish = { private _progress = _trench getVariable [QGVAR(progress), 0]; _trench setVariable [QGVAR(progress), _progress, true]; + [QGVAR(finished), [_unit, _trench]] call CBA_fnc_globalEvent; + // Reset animation [_unit, "", 1] call EFUNC(common,doAnimation); }; diff --git a/addons/trenches/functions/fnc_placeConfirm.sqf b/addons/trenches/functions/fnc_placeConfirm.sqf index 867b034679..43fad843ee 100644 --- a/addons/trenches/functions/fnc_placeConfirm.sqf +++ b/addons/trenches/functions/fnc_placeConfirm.sqf @@ -44,6 +44,8 @@ GVAR(trenchPlacementData) params ["_dx", "_dy", "_offset"]; private _basePos = GVAR(trenchPos); private _angle = (GVAR(digDirection) + getDir _unit); +[QGVAR(placed), [_unit, _trench]] call CBA_fnc_globalEvent; + // _v1 forward from the player, _v2 to the right, _v3 points away from the ground private _v3 = surfaceNormal _basePos; private _v2 = [sin _angle, +cos _angle, 0] vectorCrossProduct _v3; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 7b41f19ae7..706ffeea72 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -118,6 +118,13 @@ MenuType: 0 = Interaction, 1 = Self Interaction |`ace_attach_attached` | [_attachedObject, _itemClassname, _temporary] | Local | Listen | After an item was attached to a unit/vehicle. _temporary flag means a item is being re-attached after the player exits a vehicle |`ace_attach_detaching` | [_attachedObject, _itemName, _temporary] | Local | Listen | Just before an item gets detached/removed from a unit/vehicle. _temporary flag means its detached because the player unit entered a vehicle. +### 2.12 Trenches (`ace_trenches`) + +| Event Key | Parameters | Locality | Type | Description | +|---------- |------------|----------|------|-------------| +| `ace_trenches_placed` | [_unit, _trench] | Global | Listen | After trench object is placed by unit. +| `ace_trenches_finished` | [_unit, _trench] | Global | Listen | After trench object is fully dug up by unit (100% progress). + ## 3. Usage Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} documentation. From b2b3149d1d2e0a095ead717310b35d442410ae14 Mon Sep 17 00:00:00 2001 From: Whigital Date: Sat, 20 Aug 2022 23:18:01 +0200 Subject: [PATCH 29/92] RHSUSF Compat - Fix A-10A 30mm 5:1 DU:HEI mag rearm (#8972) --- optionals/compat_rhs_usf3/CfgAmmo.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index 475df36fae..6d32fad46d 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -250,6 +250,11 @@ class CfgAmmo { EGVAR(vehicle_damage,incendiary) = 0.8; }; + class SubmunitionBase; + class rhs_ammo_30x173mm_GAU8_mixed: SubmunitionBase { + EGVAR(rearm,caliber) = 30; + }; + class M_Titan_AT; class rhs_ammo_TOW_AT: M_Titan_AT { EGVAR(vehicle_damage,incendiary) = 1.0; From 2a4355dfb9bd8d1b90a93a8a88250191ced038d0 Mon Sep 17 00:00:00 2001 From: Tim Beswick Date: Sat, 20 Aug 2022 22:28:16 +0100 Subject: [PATCH 30/92] Cargo - Add setting for carry after cargo unload (#8997) * Add setting for carry after cargo unload * Fix typos * Contributors * Don't make setting global * Update addons/cargo/stringtable.xml Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> --- AUTHORS.txt | 1 + addons/cargo/functions/fnc_unloadCarryItem.sqf | 1 + addons/cargo/initSettings.sqf | 9 +++++++++ addons/cargo/stringtable.xml | 6 ++++++ 4 files changed, 17 insertions(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index 4035308b0f..544a7d36b6 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -165,6 +165,7 @@ Sniperwolf572 System98 SzwedzikPL Tachi +tbeswick96 Tessa Elieff Timi007 Toaster diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf index d60904cdc0..36985b5425 100644 --- a/addons/cargo/functions/fnc_unloadCarryItem.sqf +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -19,6 +19,7 @@ params ["_unloader", "_object"]; TRACE_2("unloadCarryItem-start",_unloader,_object); if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {}; +if !(GVAR(carryAfterUnload)) exitWith {}; // When unloading attached objects, this code will run before server has finished moving object to the safe position [{ diff --git a/addons/cargo/initSettings.sqf b/addons/cargo/initSettings.sqf index cf40c55beb..e971d2d9c7 100644 --- a/addons/cargo/initSettings.sqf +++ b/addons/cargo/initSettings.sqf @@ -42,3 +42,12 @@ false, {[QGVAR(enableRename), _this, true] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_fnc_addSetting; + +[ + QGVAR(carryAfterUnload), "CHECKBOX", + [LSTRING(carryAfterUnload), LSTRING(carryAfterUnload_description)], + [LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(openMenu)], + true, + false, + {[QGVAR(carryAfterUnload), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_fnc_addSetting; diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 16a59779cf..34e582c86e 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -482,5 +482,11 @@ 成功卸货后,重新打开货物菜单。 화물을 성공적으로 내리고 난 다음 화물 메뉴를 열지 결정합니다. + + Carry After Unload + + + Controls whether cargo items are carried or dragged after unloading. + From f846b9ab821c31dd55d51578e0b42e614a66caa6 Mon Sep 17 00:00:00 2001 From: JonBons Date: Sat, 20 Aug 2022 14:36:37 -0700 Subject: [PATCH 31/92] Cookoff - Randomized the delay from start of cookoff and ammunition detonation (#9002) * Cookoff - Added a random delay between a vehicle being killed and when the ammo starts to cookoff * Cookoff - Tweaked min ammo start delay to 1 second * minor syntax and macro cleanup --- addons/cookoff/XEH_postInit.sqf | 4 +++- addons/cookoff/script_component.hpp | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index 36cebc1d17..750fb87c14 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -53,6 +53,8 @@ ) then { if (GVAR(ammoCookoffDuration) == 0) exitWith {}; ([_vehicle] call FUNC(getVehicleAmmo)) params ["_mags", "_total"]; - [_vehicle, _mags, _total] call FUNC(detonateAmmunition); + + private _delay = (random MAX_AMMO_DETONATION_START_DELAY) max MIN_AMMO_DETONATION_START_DELAY; + [FUNC(detonateAmmunition), [_vehicle, _mags, _total], _delay] call CBA_fnc_waitAndExecute; }; }, nil, ["Man","StaticWeapon"]] call CBA_fnc_addClassEventHandler; diff --git a/addons/cookoff/script_component.hpp b/addons/cookoff/script_component.hpp index ef4a6085dd..03b3e5c5f5 100644 --- a/addons/cookoff/script_component.hpp +++ b/addons/cookoff/script_component.hpp @@ -29,6 +29,9 @@ #define MAX_TIME_BETWEEN_AMMO_DET 25 #define MAX_COOKOFF_INTENSITY 10 +#define MIN_AMMO_DETONATION_START_DELAY 1 // Min time to wait before a vehicle's ammo starts to cookoff +#define MAX_AMMO_DETONATION_START_DELAY 6 // Max time to wait before a vehicle's ammo starts to cookoff + // Delay between flame effect for players in a cooking off vehicle #define FLAME_EFFECT_DELAY 0.4 From 8e06f2ec6b3f209d12a5db7b8fc63f582ff838e8 Mon Sep 17 00:00:00 2001 From: JonBons Date: Sat, 20 Aug 2022 14:38:06 -0700 Subject: [PATCH 32/92] Cookoff - Tweaked effects cleanup to add Deleted EH globally and trigger a local cleanup event (#9000) --- addons/cookoff/XEH_postInit.sqf | 2 +- addons/cookoff/functions/fnc_cookOff.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index 750fb87c14..b9c8101595 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -20,7 +20,7 @@ private _deletedEH = _vehicle addEventHandler ["Deleted", { params ["_vehicle"]; - [QGVAR(cleanupEffects), [_vehicle]] call CBA_fnc_globalEvent; + [QGVAR(cleanupEffects), [_vehicle]] call CBA_fnc_localEvent; }]; _vehicle setVariable [QGVAR(deletedEH), _deletedEH]; diff --git a/addons/cookoff/functions/fnc_cookOff.sqf b/addons/cookoff/functions/fnc_cookOff.sqf index 8176b8d085..5b57b872ad 100644 --- a/addons/cookoff/functions/fnc_cookOff.sqf +++ b/addons/cookoff/functions/fnc_cookOff.sqf @@ -30,7 +30,7 @@ TRACE_9("cooking off",_vehicle,_intensity,_instigator,_smokeDelayEnabled,_ammoDe if (_vehicle getVariable [QGVAR(isCookingOff), false]) exitWith {}; _vehicle setVariable [QGVAR(isCookingOff), true, true]; -[QGVAR(addCleanupHandlers), [_vehicle]] call CBA_fnc_serverEvent; +[QGVAR(addCleanupHandlers), [_vehicle]] call CBA_fnc_globalEvent; // limit maximum value of intensity to prevent very long cook-off times _intensity = _intensity min _maxIntensity; From 438a90b63df79cc0b6b49a791a07f224582b6ec6 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Thu, 25 Aug 2022 10:56:54 -0600 Subject: [PATCH 33/92] Common - Add CBA extended loadout (#8923) * extended loadouts - earplugs, gunbag, and arsenal identity * arsenal - maintain default loadout size check * restore comment Co-authored-by: jonpas * fix forgotten example Co-authored-by: jonpas --- addons/arsenal/XEH_PREP.hpp | 1 + addons/arsenal/XEH_postInit.sqf | 20 +++++++++- addons/arsenal/XEH_preInit.sqf | 10 +++-- .../functions/fnc_addDefaultLoadout.sqf | 20 +++++++--- addons/arsenal/functions/fnc_buttonExport.sqf | 2 +- addons/arsenal/functions/fnc_buttonImport.sqf | 20 ++++++++-- .../functions/fnc_buttonLoadoutsLoad.sqf | 20 ++++++++-- .../functions/fnc_buttonLoadoutsRename.sqf | 5 ++- .../functions/fnc_buttonLoadoutsSave.sqf | 20 +++++----- .../functions/fnc_fillLoadoutsList.sqf | 8 ++-- addons/arsenal/functions/fnc_getLoadout.sqf | 37 +++++++++++++++++++ .../arsenal/functions/fnc_onArsenalClose.sqf | 2 +- .../arsenal/functions/fnc_onArsenalOpen.sqf | 2 +- .../arsenal/functions/fnc_verifyLoadout.sqf | 12 +++++- .../missions/Arsenal.VR/XEH_postInit.sqf | 2 +- .../missions/Arsenal.VR/initPlayerLocal.sqf | 2 +- addons/arsenal/stringtable.xml | 25 +++++++++++++ addons/common/XEH_postInit.sqf | 13 +++++++ addons/gunbag/XEH_preInit.sqf | 16 ++++++++ addons/headless/XEH_postInit.sqf | 12 ++++-- .../headless/functions/fnc_transferGroups.sqf | 2 +- addons/hearing/XEH_postInit.sqf | 15 ++++++++ addons/respawn/functions/fnc_handleKilled.sqf | 2 +- addons/respawn/functions/fnc_restoreGear.sqf | 8 +--- docs/wiki/framework/arsenal-framework.md | 2 + 25 files changed, 226 insertions(+), 52 deletions(-) create mode 100644 addons/arsenal/functions/fnc_getLoadout.sqf diff --git a/addons/arsenal/XEH_PREP.hpp b/addons/arsenal/XEH_PREP.hpp index 18128f8cc9..9334900789 100644 --- a/addons/arsenal/XEH_PREP.hpp +++ b/addons/arsenal/XEH_PREP.hpp @@ -34,6 +34,7 @@ PREP(fillLeftPanel); PREP(fillLoadoutsList); PREP(fillRightPanel); PREP(fillSort); +PREP(getLoadout); PREP(handleLoadoutsSearchbar); PREP(handleMouse); PREP(handleScrollWheel); diff --git a/addons/arsenal/XEH_postInit.sqf b/addons/arsenal/XEH_postInit.sqf index 65b8045562..ea1b59c6ae 100644 --- a/addons/arsenal/XEH_postInit.sqf +++ b/addons/arsenal/XEH_postInit.sqf @@ -59,10 +59,11 @@ GVAR(lastSortRight) = ""; if (!isNil QGVAR(currentLoadoutsTab) && {GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts}) then { private _curSelData =_contentPanelCtrl lnbData [(lnbCurSelRow _contentPanelCtrl), 1]; - ([_loadoutData] call FUNC(verifyLoadout)) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount"]; + ([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"]; private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName]; + _extendedLoadout params ["_loadout"]; ADD_LOADOUTS_LIST_PICTURES _contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName]; @@ -85,3 +86,20 @@ GVAR(lastSortRight) = ""; }; }; }] call CBA_fnc_addEventHandler; + +["CBA_loadoutSet", { + params ["_unit", "_loadout", "_extendedInfo"]; + private _face = _extendedInfo getOrDefault [QGVAR(face), ""]; + if (_face != "") then { + _unit setFace _face; + }; + private _voice = _extendedInfo getOrDefault [QGVAR(voice), ""]; + if (_voice != "") then { + _unit setSpeaker _voice; + }; + private _insignia = _extendedInfo getOrDefault [QGVAR(insignia), ""]; + if (_insignia != "") then { + _unit setVariable ["BIS_fnc_setUnitInsignia_class", nil]; + [_unit, _insignia] call bis_fnc_setUnitInsignia; + }; +}] call CBA_fnc_addEventHandler; diff --git a/addons/arsenal/XEH_preInit.sqf b/addons/arsenal/XEH_preInit.sqf index 3fb6a7817c..36c8adb46f 100644 --- a/addons/arsenal/XEH_preInit.sqf +++ b/addons/arsenal/XEH_preInit.sqf @@ -14,9 +14,13 @@ PREP_RECOMPILE_END; [QGVAR(enableIdentityTabs), "CHECKBOX", localize LSTRING(enableIdentityTabsSettings), localize LSTRING(settingCategory), true, true] call CBA_fnc_addSetting; // Arsenal loadouts -[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], localize LSTRING(settingCategory), true, true] call CBA_fnc_addSetting; -[QGVAR(allowSharedLoadouts), "CHECKBOX", localize LSTRING(allowSharingSetting), localize LSTRING(settingCategory), true, true] call CBA_fnc_addSetting; -[QGVAR(EnableRPTLog), "CHECKBOX", [LSTRING(printToRPTSetting), LSTRING(printToRPTTooltip)], localize LSTRING(settingCategory), false, false] call CBA_fnc_addSetting; +[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], true, true] call CBA_fnc_addSetting; +[QGVAR(allowSharedLoadouts), "CHECKBOX", localize LSTRING(allowSharingSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], true, true] call CBA_fnc_addSetting; +[QGVAR(EnableRPTLog), "CHECKBOX", [LSTRING(printToRPTSetting), LSTRING(printToRPTTooltip)], [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], false, false] call CBA_fnc_addSetting; + +[QGVAR(loadoutsSaveFace), "CHECKBOX", localize LSTRING(loadoutsSaveFaceSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], false] call CBA_fnc_addSetting; +[QGVAR(loadoutsSaveVoice), "CHECKBOX", localize LSTRING(loadoutsSaveVoiceSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], false] call CBA_fnc_addSetting; +[QGVAR(loadoutsSaveInsignia), "CHECKBOX", localize LSTRING(loadoutsSaveInsigniaSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], true] call CBA_fnc_addSetting; [QGVAR(statsToggle), { params ["_display", "_showStats"]; diff --git a/addons/arsenal/functions/fnc_addDefaultLoadout.sqf b/addons/arsenal/functions/fnc_addDefaultLoadout.sqf index 2ec3b9c80d..648a131a43 100644 --- a/addons/arsenal/functions/fnc_addDefaultLoadout.sqf +++ b/addons/arsenal/functions/fnc_addDefaultLoadout.sqf @@ -6,7 +6,7 @@ * * Arguments: * 0: Name of loadout - * 1: getUnitLoadout array + * 1: CBA extended loadout or getUnitLoadout array * * Return Value: * None @@ -17,7 +17,15 @@ * Public: Yes */ -params [["_name", "", [""]], ["_loadout", [], [[]], 10]]; +params [["_name", "", [""]], ["_loadout", [], [[]]]]; + +private _extendedInfo = createHashMap; +if (count _loadout == 2) then { + _extendedInfo = _loadout select 1; + _loadout = _loadout select 0; +}; + +if (count _loadout != 10) exitWith {}; if (isNil QGVAR(defaultLoadoutsList)) then { GVAR(defaultLoadoutsList) = []; @@ -36,7 +44,7 @@ for "_dataIndex" from 0 to 10 do { if (_weapon != "") then { private _baseWeapon = _weapon call BIS_fnc_baseWeapon; - if (_weapon != _baseWeapon) then { + if (_weapon != _baseWeapon) then { (_loadout select _dataIndex) set [0, _baseWeapon]; }; }; @@ -71,7 +79,7 @@ for "_dataIndex" from 0 to 10 do { private _baseWeapon = _weapon call BIS_fnc_baseWeapon; if (_weapon != _baseWeapon) then { - (_x select 0)set [0, _baseWeapon]; + (_x select 0) set [0, _baseWeapon]; }; }; }; @@ -100,7 +108,7 @@ for "_dataIndex" from 0 to 10 do { private _loadoutIndex = (+(GVAR(defaultLoadoutsList))) findIf {(_x select 0) == _name}; if (_loadoutIndex == -1) then { - GVAR(defaultLoadoutsList) pushBack [_name, _loadout]; + GVAR(defaultLoadoutsList) pushBack [_name, [_loadout, _extendedInfo]]; } else { - GVAR(defaultLoadoutsList) set [_loadoutIndex, [_name, _loadout]]; + GVAR(defaultLoadoutsList) set [_loadoutIndex, [_name, [_loadout, _extendedInfo]]]; }; diff --git a/addons/arsenal/functions/fnc_buttonExport.sqf b/addons/arsenal/functions/fnc_buttonExport.sqf index 86caf418e3..3ff75be824 100644 --- a/addons/arsenal/functions/fnc_buttonExport.sqf +++ b/addons/arsenal/functions/fnc_buttonExport.sqf @@ -43,7 +43,7 @@ if (GVAR(shiftState)) then { [_display, localize LSTRING(exportDefault)] call FUNC(message); } else { - private _export = str getUnitLoadout GVAR(center); + private _export = str ([GVAR(center)] call FUNC(getLoadout)); "ace_clipboard" callExtension (_export + ";"); "ace_clipboard" callExtension "--COMPLETE--"; diff --git a/addons/arsenal/functions/fnc_buttonImport.sqf b/addons/arsenal/functions/fnc_buttonImport.sqf index 4a06f3edeb..4bc633874c 100644 --- a/addons/arsenal/functions/fnc_buttonImport.sqf +++ b/addons/arsenal/functions/fnc_buttonImport.sqf @@ -39,8 +39,9 @@ if (GVAR(shiftState) && {is3DEN}) then { set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]]; } else { - if (count _data == 10) then { - GVAR(center) setUnitLoadout _data; + private _count = count _data; + if (_count == 10 || { _count == 2 }) then { + [GVAR(center), _data] call CBA_fnc_setLoadout; GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []]; for "_index" from 0 to 15 do { @@ -92,8 +93,19 @@ if (GVAR(shiftState) && {is3DEN}) then { call FUNC(updateUniqueItemsList); // Reapply insignia - [GVAR(center), ""] call bis_fnc_setUnitInsignia; - [GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia; + if (QGVAR(insignia) in _loadout#1) then { + GVAR(currentInsignia) = _loadout#1 getOrDefault [QGVAR(insignia), ""]; + } else { + [GVAR(center), ""] call bis_fnc_setUnitInsignia; + [GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia; + }; + + if (QGVAR(face) in _loadout#1) then { + GVAR(currentFace) = _loadout#1 getOrDefault [QGVAR(face), GVAR(currentFace)]; + }; + if (QGVAR(voice) in _loadout#1) then { + GVAR(currentVoice) = _loadout#1 getOrDefault [QGVAR(voice), GVAR(currentVoice)]; + }; [_display, _display displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel); diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf index 0a2faccc54..40e84b01f0 100644 --- a/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf +++ b/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf @@ -34,7 +34,7 @@ private _loadout = switch GVAR(currentLoadoutsTab) do { }; }; -GVAR(center) setUnitLoadout [_loadout, true]; +[GVAR(center), _loadout, true] call CBA_fnc_setLoadout; GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []]; for "_index" from 0 to 15 do { @@ -91,9 +91,21 @@ for "_index" from 0 to 15 do { call FUNC(updateUniqueItemsList); // Reapply insignia -[GVAR(center), ""] call bis_fnc_setUnitInsignia; -[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia; +if (QGVAR(insignia) in _loadout#1) then { + GVAR(currentInsignia) = _loadout#1 getOrDefault [QGVAR(insignia), ""]; +} else { + [GVAR(center), ""] call bis_fnc_setUnitInsignia; + [GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia; +}; + +if (QGVAR(face) in _loadout#1) then { + GVAR(currentFace) = _loadout#1 getOrDefault [QGVAR(face), GVAR(currentFace)]; +}; +if (QGVAR(voice) in _loadout#1) then { + GVAR(currentVoice) = _loadout#1 getOrDefault [QGVAR(voice), GVAR(currentVoice)]; +}; [(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutLoaded), _loadoutName] joinString " "] call FUNC(message); -[QGVAR(onLoadoutLoad), [_loadout, _loadoutName]] call CBA_fnc_localEvent; +[QGVAR(onLoadoutLoad), [_loadout#0, _loadoutName]] call CBA_fnc_localEvent; +[QGVAR(onLoadoutLoadExtended), [_loadout, _loadoutName]] call CBA_fnc_localEvent; diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsRename.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsRename.sqf index a1f9294669..bcb230d3ae 100644 --- a/addons/arsenal/functions/fnc_buttonLoadoutsRename.sqf +++ b/addons/arsenal/functions/fnc_buttonLoadoutsRename.sqf @@ -35,16 +35,17 @@ if (count _similarLoadouts > 0) exitWith { // Update loadout info in profile / 3DEN and list namespaces private _loadoutToRename = (_data select {_x select 0 == _loadoutName}) select 0; -(_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"]; +(_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"]; _data set [_data find _loadoutToRename, [_editBoxContent, (_loadoutToRename select 1)]]; _contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), nil]; -_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]]; +_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_extendedLoadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]]; // Add new row _contentPanelCtrl lnbDeleteRow _curSelRow; private _newRow = _contentPanelCtrl lnbAddRow ["",_editBoxContent]; +_extendedLoadout params ["_loadout"]; ADD_LOADOUTS_LIST_PICTURES if (_nullItemsAmount > 0) then { diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf index 0827ec2c31..d4d5b00a4b 100644 --- a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf +++ b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf @@ -31,7 +31,8 @@ private _cursSelRow = lnbCurSelRow _contentPanelCtrl; private _loadoutName = _contentPanelCtrl lnbText [_cursSelRow, 1]; private _curSelLoadout = (_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) select 0; -private _loadout = getUnitLoadout GVAR(center); +private _extendedLoadout = GVAR(center) call FUNC(getLoadout); +private _loadout = _loadout select 0; private _loadoutIndex = _data findIf {(_x select 0) == _editBoxContent}; private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars); @@ -62,7 +63,7 @@ switch (GVAR(currentLoadoutsTab)) do { if (_weapon != "") then { private _baseWeapon = _weapon call BIS_fnc_baseWeapon; - if (_weapon != _baseWeapon) then { + if (_weapon != _baseWeapon) then { (_loadout select _dataIndex) set [0, _baseWeapon]; }; }; @@ -135,9 +136,9 @@ switch (GVAR(currentLoadoutsTab)) do { }; if (_loadoutIndex isEqualto -1) then { - _data pushBack [_editBoxContent, _loadout]; + _data pushBack [_editBoxContent, _extendedLoadout]; } else { - _data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; + _data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _extendedLoadout]]; }; // Delete "old" loadout row @@ -149,7 +150,7 @@ switch (GVAR(currentLoadoutsTab)) do { ADD_LOADOUTS_LIST_PICTURES - _contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout] call FUNC(verifyLoadout)]; + _contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_extendedLoadout] call FUNC(verifyLoadout)]; _contentPanelCtrl lnbSort [1, false]; @@ -243,9 +244,9 @@ switch (GVAR(currentLoadoutsTab)) do { }; if (_loadoutIndex == -1) then { - GVAR(defaultLoadoutsList) pushBack [_editBoxContent, _loadout]; + GVAR(defaultLoadoutsList) pushBack [_editBoxContent, _extendedLoadout]; } else { - GVAR(defaultLoadoutsList) set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; + GVAR(defaultLoadoutsList) set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _extendedLoadout]]; }; for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do { @@ -256,7 +257,7 @@ switch (GVAR(currentLoadoutsTab)) do { ADD_LOADOUTS_LIST_PICTURES - _contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout] call FUNC(verifyLoadout)]; + _contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_extendedLoadout] call FUNC(verifyLoadout)]; _contentPanelCtrl lnbSort [1, false]; @@ -295,4 +296,5 @@ switch (GVAR(currentLoadoutsTab)) do { }; [(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutSaved), _editBoxContent] joinString " "] call FUNC(message); private _savedLoadout = (_data select {_x select 0 == _editBoxContent}) select 0; -[QGVAR(onLoadoutSave), [_data find _savedLoadout, _savedLoadout]] call CBA_fnc_localEvent; +[QGVAR(onLoadoutSave), [_data find _savedLoadout, _savedLoadout#0]] call CBA_fnc_localEvent; +[QGVAR(onLoadoutSaveExtended), [_data find _savedLoadout, _savedLoadout]] call CBA_fnc_localEvent; diff --git a/addons/arsenal/functions/fnc_fillLoadoutsList.sqf b/addons/arsenal/functions/fnc_fillLoadoutsList.sqf index 7cdec585e7..ba47cc54fc 100644 --- a/addons/arsenal/functions/fnc_fillLoadoutsList.sqf +++ b/addons/arsenal/functions/fnc_fillLoadoutsList.sqf @@ -44,7 +44,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then { [_loadoutData] call FUNC(verifyLoadout) } else { _loadoutCachedInfo - } params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"]; + } params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"]; // Log missing / nil items to RPT if (GVAR(EnableRPTLog) && {isNil "_loadoutCachedInfo"} && {(_nullItemsAmount > 0) || {_unavailableItemsAmount > 0}}) then { @@ -64,6 +64,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then { private _newRow = _contentPanelCtrl lnbAddRow ["",_loadoutName]; + _extendedLoadout params ["_loadout"]; ADD_LOADOUTS_LIST_PICTURES if (_nullItemsAmount > 0) then { @@ -76,7 +77,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then { }; }; - _contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), [_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]]; + _contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), [_extendedLoadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]]; if ((profileName + _loadoutName) in _sharedLoadoutsVars && {GVAR(currentLoadoutsTab) == IDC_buttonMyLoadouts}) then { _contentPanelCtrl lnbSetPicture [[_newRow, 0], QPATHTOF(data\iconPublic.paa)]; @@ -99,11 +100,12 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then { [QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent; } else { - ([_loadoutData] call FUNC(verifyLoadout)) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount"]; + ([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"]; _contentPanelCtrl lnbSetColumnsPos [0, 0.15, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90]; private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName]; + _extendedLoadout params ["_loadout"]; ADD_LOADOUTS_LIST_PICTURES _contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName]; diff --git a/addons/arsenal/functions/fnc_getLoadout.sqf b/addons/arsenal/functions/fnc_getLoadout.sqf new file mode 100644 index 0000000000..017ef29618 --- /dev/null +++ b/addons/arsenal/functions/fnc_getLoadout.sqf @@ -0,0 +1,37 @@ +#include "script_component.hpp" +/* + * Author: Brett Mayson + * Get the extended loadout of a unit, including identity options if enabled + * + * Arguments: + * 0: Unit + * + * Return Value: + * CBA Extended Loadout + * + * Example: + * [_unit] call ace_arsenal_fnc_getLoadout + * + * Public: Yes +*/ + +params [["_unit", objNull, [objNull]]]; + +if (isNull _unit) exitWith {}; + +([_unit] call CBA_fnc_getLoadout) params ["_loadout", "_extendedInfo"]; + +if (GVAR(loadoutsSaveFace)) then { + _extendedInfo set [QGVAR(face), face _unit]; +}; +if (GVAR(loadoutsSaveVoice)) then { + _extendedInfo set [QGVAR(voice), speaker _unit]; +}; +if (GVAR(loadoutsSaveInsignia)) then { + private _insignia = _unit getVariable ["BIS_fnc_setUnitInsignia_class", ""]; + if (_insignia != "") then { + _extendedInfo set [QGVAR(insignia), _insignia]; + }; +}; + +[_loadout, _extendedInfo] diff --git a/addons/arsenal/functions/fnc_onArsenalClose.sqf b/addons/arsenal/functions/fnc_onArsenalClose.sqf index 328c1da1f2..754512f5d4 100644 --- a/addons/arsenal/functions/fnc_onArsenalClose.sqf +++ b/addons/arsenal/functions/fnc_onArsenalClose.sqf @@ -32,7 +32,7 @@ if (is3DEN) then { // Apply the loadout from the dummy to all selected units if (_exitCode == 1) then { { - _x setUnitLoadout (getUnitLoadout GVAR(center)); + [_x, GVAR(center) call FUNC(getLoadout)] call CBA_fnc_setLoadout; } foreach (get3DENSelected "object"); save3DENInventory (get3DENSelected "object"); diff --git a/addons/arsenal/functions/fnc_onArsenalOpen.sqf b/addons/arsenal/functions/fnc_onArsenalOpen.sqf index 34243a49f6..c69c7fbb17 100644 --- a/addons/arsenal/functions/fnc_onArsenalOpen.sqf +++ b/addons/arsenal/functions/fnc_onArsenalOpen.sqf @@ -79,7 +79,7 @@ for "_index" from 0 to 14 do { }; if ((_array select 2) isNotEqualTo "") then { - ((GVAR(virtualItems) select _index) select 2) pushBackUnique (_array select 2); + ((GVAR(virtualItems) select _index) select 2) pushBackUnique (_array select 2); }; }; diff --git a/addons/arsenal/functions/fnc_verifyLoadout.sqf b/addons/arsenal/functions/fnc_verifyLoadout.sqf index bacd6a11b3..e50a583a75 100644 --- a/addons/arsenal/functions/fnc_verifyLoadout.sqf +++ b/addons/arsenal/functions/fnc_verifyLoadout.sqf @@ -5,7 +5,7 @@ * Verify the provided loadout. * * Arguments: - * 0: Loadout (getUnitLoadout format) + * 0: Loadout (CBA Extended Loadout or getUnitLoadout format) * * Return Value: * Verified loadout and missing / unavailable items list and count @@ -15,6 +15,14 @@ params ["_loadout"]; +private _extendedInfo = createHashMap; + +// Check if the provided loadout is a CBA extended loadout +if (count _loadout == 2) then { + _extendedInfo = _loadout select 1; + _loadout = _loadout select 0; +}; + private _weaponCfg = configFile >> "CfgWeapons"; private _magCfg = configFile >> "CfgMagazines"; private _vehcCfg = configFile >> "CfgVehicles"; @@ -236,4 +244,4 @@ for "_dataIndex" from 0 to 9 do { }; }; -[_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList] +[[_loadout, _extendedInfo], _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList] diff --git a/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf b/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf index 5b24421c20..8b5f85fba6 100644 --- a/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf +++ b/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf @@ -54,7 +54,7 @@ cba_diagnostic_projectileMaxLines = 10; ] call BIS_fnc_GUImessage; if (_return) then { - profileNamespace setVariable [QGVAR(missionLastLoadout), getUnitLoadout player]; + profileNamespace setVariable [QGVAR(missionLastLoadout), [player] call CBA_fnc_getLoadout]; _display closeDisplay 2; findDisplay 46 closeDisplay 0; }; diff --git a/addons/arsenal/missions/Arsenal.VR/initPlayerLocal.sqf b/addons/arsenal/missions/Arsenal.VR/initPlayerLocal.sqf index 111202d04e..7e03a58b08 100644 --- a/addons/arsenal/missions/Arsenal.VR/initPlayerLocal.sqf +++ b/addons/arsenal/missions/Arsenal.VR/initPlayerLocal.sqf @@ -5,7 +5,7 @@ params ["_unit"]; private _loadout = profileNamespace getVariable QGVAR(missionLastLoadout); if (!isNil "_loadout") then { - _unit setUnitLoadout _loadout; + [_unit, _loadout] call CBA_fnc_setLoadout; }; _unit allowDamage false; diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 657dc6ce94..ddb2313c8e 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -881,6 +881,22 @@ ACE Arzenál ACE Arsenal + + Loadouts + Equipamiento + Sets d'équipement + Ausrüstungen + Zestawy wyposażenia + 装備 + Equipaggiamenti + 로드아웃 + 裝備 + 负载 + Комплекты + Loadouts + Sady vybavení + Kıyafetler + Allow the use of the default loadouts tab Permitir el uso de la pestaña de equipamientos por defecto @@ -1449,5 +1465,14 @@ 碰炸引信 충격 신관 + + Save Face + + + Save Voice + + + Save Insignia + diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index c21c9a0e4f..09e0cf309d 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -556,4 +556,17 @@ GVAR(deviceKeyCurrentIndex) = -1; true }, {false}, [19, [false, false, true]], false] call CBA_fnc_addKeybind; //ALT + R Key +["CBA_loadoutSet", { + params ["_unit", "_loadout"]; + // remove if with https://github.com/CBATeam/CBA_A3/pull/1548 + if (count _loadout == 2) then { + _loadout = _loadout select 0; + }; + _loadout params ["_primaryWeaponArray"]; + if ((_primaryWeaponArray param [0, ""]) == "ACE_FakePrimaryWeapon") then { + TRACE_1("Ignoring fake gun",_primaryWeaponArray); + _loadout set [0, []]; + }; +}] call CBA_fnc_addEventHandler; + GVAR(commonPostInited) = true; diff --git a/addons/gunbag/XEH_preInit.sqf b/addons/gunbag/XEH_preInit.sqf index 63968a30f8..78c6741dbb 100644 --- a/addons/gunbag/XEH_preInit.sqf +++ b/addons/gunbag/XEH_preInit.sqf @@ -44,4 +44,20 @@ PREP_RECOMPILE_END; GVAR(arsenalCache) = nil; }] call CBA_fnc_addEventHandler; +["CBA_loadoutSet", { + params ["_unit", "_loadout", "_extendedInfo"]; + private _gunbagWeapon = _extendedInfo getOrDefault [QGVAR(gunbagWeapon), []]; + if (_gunbagWeapon isNotEqualTo []) then { + (backpackContainer _unit) setVariable [QGVAR(gunbagWeapon), _gunbagWeapon, true]; + }; +}] call CBA_fnc_addEventHandler; + +["CBA_loadoutGet", { + params ["_unit", "_loadout", "_extendedInfo"]; + private _gunbagWeapon = (backpackContainer _unit) getVariable [QGVAR(gunbagWeapon), []]; + if (_gunbagWeapon isNotEqualTo []) then { + _extendedInfo set [QGVAR(gunbagWeapon), _gunbagWeapon]; + }; +}] call CBA_fnc_addEventHandler; + ADDON = true; diff --git a/addons/headless/XEH_postInit.sqf b/addons/headless/XEH_postInit.sqf index 2237c629e3..103d5c1834 100644 --- a/addons/headless/XEH_postInit.sqf +++ b/addons/headless/XEH_postInit.sqf @@ -22,14 +22,18 @@ // Check if naked unit bug happened if (_local && {uniform _unit == ""}) then { + scopeName QGVAR(applyLoadout); INFO_1("Unit [%1] became local with broken loadout - attempting to fix",_unit); if (XGVAR(transferLoadout) == 1) then { // Transferred loadout, if unavailable reset to config default (still better than naked) - _unit setUnitLoadout (_unit getVariable [QGVAR(loadout), typeOf _unit]); - } else { - // Config default loadout - _unit setUnitLoadout (typeOf _unit); + private _loadout = _unit getVariable [QGVAR(loadout), []]; + if (_loadout isNotEqualTo []) then { + [_unit, _loadout] call CBA_fnc_setLoadout; + breakOut QGVAR(applyLoadout); + }; }; + // Config default loadout + _unit setUnitLoadout (typeOf _unit); }; }] call CBA_fnc_addClassEventHandler; }; diff --git a/addons/headless/functions/fnc_transferGroups.sqf b/addons/headless/functions/fnc_transferGroups.sqf index 6918c8e23d..fa39af4d1b 100644 --- a/addons/headless/functions/fnc_transferGroups.sqf +++ b/addons/headless/functions/fnc_transferGroups.sqf @@ -96,7 +96,7 @@ private _numTransferredHC3 = 0; // Save gear if unit about to be transferred with current loadout (naked unit work-around) if (XGVAR(transferLoadout) == 1) then { - _x setVariable [QGVAR(loadout), getUnitLoadout _x, true]; + _x setVariable [QGVAR(loadout), [_x] call CBA_fnc_getLoadout, true]; }; } forEach (units _x); }; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index d8b21f214a..b80ae51818 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -79,3 +79,18 @@ GVAR(lastPlayerVehicle) = objNull; // Update protection on possible helmet change ["loadout", LINKFUNC(updateHearingProtection), false] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; + +["CBA_loadoutSet", { + params ["_unit", "_loadout", "_extendedInfo"]; + if (_extendedInfo getOrDefault ["ace_earplugs", false]) then { + _unit setVariable ["ACE_hasEarPlugsIn", true, true]; + [[true]] remoteExec [QFUNC(updateVolume), _unit]; + }; +}] call CBA_fnc_addEventHandler; + +["CBA_loadoutGet", { + params ["_unit", "_loadout", "_extendedInfo"]; + if (_unit getVariable ["ACE_hasEarPlugsin", false]) then { + _extendedInfo set ["ace_earplugs", true] + }; +}] call CBA_fnc_addEventHandler; diff --git a/addons/respawn/functions/fnc_handleKilled.sqf b/addons/respawn/functions/fnc_handleKilled.sqf index 905cd7987b..75d88855b5 100644 --- a/addons/respawn/functions/fnc_handleKilled.sqf +++ b/addons/respawn/functions/fnc_handleKilled.sqf @@ -20,7 +20,7 @@ params ["_unit"]; // Saves the gear when the player! (and only him) is killed if (ACE_player == _unit && {GVAR(SavePreDeathGear)}) then { - _unit setVariable [QGVAR(unitGear), getUnitLoadout _unit]; + _unit setVariable [QGVAR(unitGear), [_unit] call CBA_fnc_getLoadout]; _unit setVariable [QGVAR(activeWeaponAndMuzzle), [currentWeapon _unit, currentMuzzle _unit, currentWeaponMode _unit]]; [QGVAR(saveGear), _unit] call CBA_fnc_localEvent; }; diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index 990fa77ea8..0a78329f98 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -21,13 +21,7 @@ TRACE_3("restoreGear",_unit, count _allGear, _activeWeaponAndMuzzle); // restore all gear if (!isNil "_allGear") then { - _allGear params ["_primaryWeaponArray"]; - if ((_primaryWeaponArray param [0, ""]) == "ACE_FakePrimaryWeapon") then { - TRACE_1("Ignoring fake gun",_primaryWeaponArray); - _allGear set [0, []]; - _activeWeaponAndMuzzle = nil; - }; - _unit setUnitLoadout _allGear; + [_unit, _allGear] call CBA_fnc_setLoadout; }; // restore the last active weapon, muzzle and weaponMode diff --git a/docs/wiki/framework/arsenal-framework.md b/docs/wiki/framework/arsenal-framework.md index 2e269e3d6d..3d2134e057 100644 --- a/docs/wiki/framework/arsenal-framework.md +++ b/docs/wiki/framework/arsenal-framework.md @@ -289,7 +289,9 @@ All are local. | ace_arsenal_leftPanelFilled | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | | ace_arsenal_rightPanelFilled | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | | ace_arsenal_onLoadoutSave | Loadout index (SCALAR), [loadout name (STRING), loadout data (ARRAY)] | +| ace_arsenal_onLoadoutSaveExtended | Loadout index (SCALAR), [loadout name (STRING), CBA extended loadout data (ARRAY)] | | ace_arsenal_onLoadoutLoad | loadout data (ARRAY), loadout name (STRING) | +| ace_arsenal_onLoadoutLoadExtended | CBA extended loadout data (ARRAY), loadout name (STRING) | | ace_arsenal_onLoadoutDelete | loadout name (STRING) | | ace_arsenal_loadoutShared | Loadouts list listnBox control (CONTROL),, [loadout author (STRING), loadout name (STRING), loadout data (ARRAY)] | | ace_arsenal_loadoutUnshared | Loadouts list listnBox control (CONTROL), loadout name (STRING) | From ecb7721c772010a8826aba82cdd98e30ba1d6f7a Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Thu, 25 Aug 2022 19:05:50 +0200 Subject: [PATCH 34/92] Medical - Disable blood spurts for fire, burn and drown damage types (#9001) --- addons/medical_blood/XEH_preInit.sqf | 3 +++ addons/medical_blood/XEH_preStart.sqf | 7 +++++++ .../medical_blood/functions/fnc_handleWoundReceived.sqf | 7 +++++-- addons/medical_damage/ACE_Medical_Injuries.hpp | 8 ++++++-- docs/wiki/framework/medical-framework.md | 3 +++ 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/addons/medical_blood/XEH_preInit.sqf b/addons/medical_blood/XEH_preInit.sqf index ae4de9d026..3d10086703 100644 --- a/addons/medical_blood/XEH_preInit.sqf +++ b/addons/medical_blood/XEH_preInit.sqf @@ -8,6 +8,9 @@ PREP_RECOMPILE_END; #include "initSettings.sqf" +// Damage types which do not cause blood spurts +GVAR(noBloodDamageTypes) = createHashMapFromArray (call (uiNamespace getVariable QGVAR(noBloodDamageTypes))); + // blood object model namespace GVAR(models) = [] call CBA_fnc_createNamespace; diff --git a/addons/medical_blood/XEH_preStart.sqf b/addons/medical_blood/XEH_preStart.sqf index 022888575e..d051879f3c 100644 --- a/addons/medical_blood/XEH_preStart.sqf +++ b/addons/medical_blood/XEH_preStart.sqf @@ -1,3 +1,10 @@ #include "script_component.hpp" #include "XEH_PREP.hpp" + +// Damage types which do not cause blood spurts +private _noBloodDamageTypes = "getNumber (_x >> 'noBlood') == 1" configClasses (configFile >> "ACE_Medical_Injuries" >> "damageTypes"); +uiNamespace setVariable [ + QGVAR(noBloodDamageTypes), + compileFinal str (_noBloodDamageTypes apply {[configName _x, nil]}) +]; diff --git a/addons/medical_blood/functions/fnc_handleWoundReceived.sqf b/addons/medical_blood/functions/fnc_handleWoundReceived.sqf index 3b2b0d3e86..d6b73cb563 100644 --- a/addons/medical_blood/functions/fnc_handleWoundReceived.sqf +++ b/addons/medical_blood/functions/fnc_handleWoundReceived.sqf @@ -18,8 +18,11 @@ * Public: No */ -params ["_unit", "_allDamages", "_shooter"]; -(_allDamages select 0) params ["_damage", ""]; +params ["_unit", "_allDamages", "_shooter", "_damageType"]; +(_allDamages select 0) params ["_damage"]; + +// Don't bleed if damage type does not cause bleeding +if (_damageType in GVAR(noBloodDamageTypes)) exitWith {}; // Don't bleed when players only and a non-player unit is wounded if (GVAR(enabledFor) == BLOOD_ONLY_PLAYERS && {!isPlayer _unit && {_unit != ACE_player}}) exitWith {}; diff --git a/addons/medical_damage/ACE_Medical_Injuries.hpp b/addons/medical_damage/ACE_Medical_Injuries.hpp index 0b6edcb4f3..f09008880b 100644 --- a/addons/medical_damage/ACE_Medical_Injuries.hpp +++ b/addons/medical_damage/ACE_Medical_Injuries.hpp @@ -68,7 +68,7 @@ class ACE_Medical_Injuries { // if 1, wounds are only applied to the hitpoint that took the most damage. othewrise, wounds are applied to all damaged hitpoints selectionSpecific = 1; - + // list of damage handlers, which will be called in reverse order // each entry should be a SQF expression that returns a function // this can also be overridden for each damage type @@ -80,7 +80,7 @@ class ACE_Medical_Injuries { // bullets only create multiple wounds when the damage is very high thresholds[] = {{20, 10}, {4.5, 2}, {3, 1}, {0, 1}}; selectionSpecific = 1; - + class Avulsion { // at damage, weight. between points, weight is interpolated then wound is chosen by weighted random. // as with thresholds, but result is not rounded (decimal values used as-is) @@ -268,6 +268,7 @@ class ACE_Medical_Injuries { class ropeburn { thresholds[] = {{0.1, 1}, {0.1, 0}}; selectionSpecific = 1; + noBlood = 1; class Abrasion { weighting[] = {{0.30, 1}}; }; @@ -275,9 +276,11 @@ class ACE_Medical_Injuries { class drowning { //No related wounds as drowning should not cause wounds/bleeding. Can be extended for internal injuries if they are added. thresholds[] = {{0, 0}}; + noBlood = 1; class woundHandlers {}; }; class fire { + noBlood = 1; // custom handling for environmental fire sources // passes damage to "burn" so doesn't need its own wound stats class woundHandlers { @@ -287,6 +290,7 @@ class ACE_Medical_Injuries { class burn { thresholds[] = {{0, 1}}; selectionSpecific = 0; + noBlood = 1; class ThermalBurn { weighting[] = {{0, 1}}; }; diff --git a/docs/wiki/framework/medical-framework.md b/docs/wiki/framework/medical-framework.md index 91bb5a6c79..629b57cfd0 100644 --- a/docs/wiki/framework/medical-framework.md +++ b/docs/wiki/framework/medical-framework.md @@ -171,6 +171,9 @@ class ACE_Medical_Injuries { // if 1, wounds are only applied to the most-damaged body part. if 0, wounds are applied to all damaged parts selectionSpecific = 1; + // if 1, wounds do not produce blood spurts + noBlood = 0; + // custom handling for this damage type // inherits from the default handlers - the function(s) defined here will be called first, then the default one(s) class woundHandlers: woundHandlers { From e677021e5ab3e6e11aa869218b3ce827b0561390 Mon Sep 17 00:00:00 2001 From: RcINS Date: Mon, 29 Aug 2022 07:10:21 +0800 Subject: [PATCH 35/92] Translation - Improve ace_rangecard translation (#9012) * Complete Simplified Chinese translation * Slight tweak translation * Fix rangecard Chinese translation --- addons/rangecard/stringtable.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/rangecard/stringtable.xml b/addons/rangecard/stringtable.xml index 2bdb9bfaef..4e1db8954c 100644 --- a/addons/rangecard/stringtable.xml +++ b/addons/rangecard/stringtable.xml @@ -14,7 +14,7 @@ Tavola Balistica 射表 사거리표 - 弹道射表 + 射表 彈道射表 Menzil Kartı @@ -48,7 +48,7 @@ Apri Tavola Balistica 射表を開く 사거리표 열기 - 开启弹道射表 + 开启射表 開啟彈道射表 Menzil Kartını Aç @@ -65,7 +65,7 @@ Apri Copia Tavola Balistica 複製された射表を開く 복제 사거리표 열기 - 开启弹道射表副本 + 开启射表副本 開啟彈道射表副本 Menzil Kartının Kopyasını Aç @@ -82,7 +82,7 @@ Apri Tavola Balistica 射表を開く 사거리표 열기 - 开启 + 开启射表 開啟彈道射表 Menzil Kartını Aç @@ -99,7 +99,7 @@ Apri Copia Tavola Balistica 複製された射表を開く 복제 사거리표 열기 - 开启弹道射表副本 + 开启射表副本 開啟彈道射表副本 Menzil Kartının Kopyasını Aç @@ -116,7 +116,7 @@ Copia Tavola Balistica 射表を複製する 사거리표 복제 - 复制弹道射表 + 复制射表 複製彈道射表 Menzil Kartını Kopyala From 20fb895b318759e45ca4ad314238573c98224abe Mon Sep 17 00:00:00 2001 From: Dystopian Date: Mon, 29 Aug 2022 03:24:24 +0300 Subject: [PATCH 36/92] Towing - Add rope to vehicle inventory (#8963) * Add rope to vehicle inventory * Use LINKFUNC * Make setting not need restart Co-authored-by: PabstMirror Co-authored-by: PabstMirror --- addons/towing/XEH_PREP.hpp | 1 + addons/towing/XEH_preInit.sqf | 2 ++ .../towing/functions/fnc_addRopeToVehicle.sqf | 27 +++++++++++++++++++ addons/towing/initSettings.sqf | 13 +++++++++ addons/towing/stringtable.xml | 4 +++ 5 files changed, 47 insertions(+) create mode 100644 addons/towing/functions/fnc_addRopeToVehicle.sqf create mode 100644 addons/towing/initSettings.sqf diff --git a/addons/towing/XEH_PREP.hpp b/addons/towing/XEH_PREP.hpp index f3937e01c3..d26b29e5f0 100644 --- a/addons/towing/XEH_PREP.hpp +++ b/addons/towing/XEH_PREP.hpp @@ -1,3 +1,4 @@ +PREP(addRopeToVehicle); PREP(attachRopePFH); PREP(canStartTow); PREP(detach); diff --git a/addons/towing/XEH_preInit.sqf b/addons/towing/XEH_preInit.sqf index b47cf6628d..9361d05015 100644 --- a/addons/towing/XEH_preInit.sqf +++ b/addons/towing/XEH_preInit.sqf @@ -6,4 +6,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/towing/functions/fnc_addRopeToVehicle.sqf b/addons/towing/functions/fnc_addRopeToVehicle.sqf new file mode 100644 index 0000000000..09f9f03b6c --- /dev/null +++ b/addons/towing/functions/fnc_addRopeToVehicle.sqf @@ -0,0 +1,27 @@ +#include "script_component.hpp" +/* + * Author: Dystopian + * Adds rope to vehicle inventory. + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * None + * + * Example: + * cursorObject call ace_towing_fnc_addRopeToVehicle + * + * Public: No + */ + +if (!GVAR(addRopeToVehicleInventory)) exitWith {}; +params ["_vehicle"]; + +if (0 == getNumber (configOf _vehicle >> QEGVAR(cargo,hasCargo))) exitWith {}; + +private _ropeType = if ( + -1 < ["Tank", "Wheeled_APC_F", "Truck_F"] findIf {_vehicle isKindOf _x} +) then {"ACE_rope12"} else {"ACE_rope6"}; + +_vehicle addItemCargoGlobal [_ropeType, 1]; diff --git a/addons/towing/initSettings.sqf b/addons/towing/initSettings.sqf new file mode 100644 index 0000000000..8361dccccd --- /dev/null +++ b/addons/towing/initSettings.sqf @@ -0,0 +1,13 @@ +[ + QGVAR(addRopeToVehicleInventory), "CHECKBOX", + LSTRING(Setting_addRopeToVehicleInventory_DisplayName), + LELSTRING(OptionsMenu,CategoryLogistics), + true, + true, + { + if !(_this && {isServer} && {isNil QGVAR(addRopeToVehicleInventory_initialized)}) exitWith {}; + GVAR(addRopeToVehicleInventory_initialized) = true; + ["Tank", "initPost", LINKFUNC(addRopeToVehicle), true, [], true] call CBA_fnc_addClassEventHandler; + ["Car", "initPost", LINKFUNC(addRopeToVehicle), true, [], true] call CBA_fnc_addClassEventHandler; + } +] call CBA_fnc_addSetting; diff --git a/addons/towing/stringtable.xml b/addons/towing/stringtable.xml index 3f619f8ac5..2c0f37ed38 100644 --- a/addons/towing/stringtable.xml +++ b/addons/towing/stringtable.xml @@ -111,5 +111,9 @@ 解开牵引绳 견인줄 분리 + + Add Tow Rope to Vehicle Inventory + Добавить буксировочный трос в инвентарь машин + From 78f0262e10ad78923d7d899a6e5e34b00bd85747 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Mon, 29 Aug 2022 02:27:10 +0200 Subject: [PATCH 37/92] Fire - Increase effectiveness of rolling for putting out fire (#9016) * Increase effectiveness of rolling for putting out fire * Use same value for rolling and pat down --- addons/fire/functions/fnc_burn.sqf | 4 ++-- addons/fire/functions/fnc_medical_success.sqf | 2 +- addons/fire/script_component.hpp | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/fire/functions/fnc_burn.sqf b/addons/fire/functions/fnc_burn.sqf index 5174125df8..15f38435ab 100644 --- a/addons/fire/functions/fnc_burn.sqf +++ b/addons/fire/functions/fnc_burn.sqf @@ -223,8 +223,8 @@ if (_isBurning) exitWith {}; }; } else { if ((animationState _unit) in PRONE_ROLLING_ANIMS) then { - // decrease intensity of burn, but if its too high this wont do anything substantial - _intensity = _intensity - (1 / _intensity); + // decrease intensity of burn + _intensity = _intensity * INTENSITY_DECREASE_MULT_ROLLING; }; }; diff --git a/addons/fire/functions/fnc_medical_success.sqf b/addons/fire/functions/fnc_medical_success.sqf index 07337b2833..a47d4eb4f0 100644 --- a/addons/fire/functions/fnc_medical_success.sqf +++ b/addons/fire/functions/fnc_medical_success.sqf @@ -19,5 +19,5 @@ params ["_medic", "_patient"]; private _intensity = _patient getVariable [QGVAR(intensity), 0]; -_intensity = _intensity * (4/5); +_intensity = _intensity * INTENSITY_DECREASE_MULT_PAT_DOWN; _patient setVariable [QGVAR(intensity), _intensity, true]; diff --git a/addons/fire/script_component.hpp b/addons/fire/script_component.hpp index 289e3d13f1..1bf14ca083 100644 --- a/addons/fire/script_component.hpp +++ b/addons/fire/script_component.hpp @@ -30,3 +30,6 @@ "amovppnemstpsoptwbindnon_amovppnemevasoptwbindl",\ "amovppnemstpsoptwbindnon_amovppnemevasoptwbindr"\ ] + +#define INTENSITY_DECREASE_MULT_PAT_DOWN 0.8 +#define INTENSITY_DECREASE_MULT_ROLLING INTENSITY_DECREASE_MULT_PAT_DOWN From 4eef2da0fe398e52eaf94ddfa8689e29220e3d1d Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 29 Aug 2022 03:33:58 -0500 Subject: [PATCH 38/92] Missile Guidance - Use `weaponsInfo` to optimize fire-mode selection (#8879) --- .../functions/fnc_cycleAttackProfileKeyDown.sqf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf index adfd1b5e01..cffc0e28cd 100644 --- a/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf +++ b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf @@ -78,14 +78,13 @@ TRACE_4("",_currentFireMode,_nextFireMode,_index,_attackProfiles); private _currentFireMode = if (_useModeForAttackProfile) then { TRACE_2("setting fire mode",_weaponStateToken,_nextFireMode); - for "_weaponIndex" from 0 to 299 do { - ACE_player action ["SwitchWeapon", _currentShooter, ACE_player, _weaponIndex]; - (weaponState _weaponStateToken) params ["_xWeapon", "", "_xMode"]; + { + _x params ["_xIndex", "", "_xWeapon", "", "_xMode"]; if ((_xWeapon == _weapon) && {(getText (configFile >> "CfgWeapons" >> _weapon >> _xMode >> QGVAR(attackProfile))) == _nextFireMode}) exitWith { - TRACE_2("Restoring",_weaponIndex,weaponState _currentShooter); + ACE_player action ["SwitchWeapon", _currentShooter, ACE_player, _xIndex]; + TRACE_2("Restoring",weaponState _currentShooter,_x); }; - if ((weaponState _weaponStateToken) isEqualTo ["","","","",0]) exitWith {ERROR_2("weaponState not found",_weapon,_nextFireMode);}; - }; + } forEach (ACE_player weaponsInfo [_weapon, false]); } else { TRACE_2("setVariable attackProfile",_currentShooter,_nextFireMode); _currentShooter setVariable [QGVAR(attackProfile), _nextFireMode, false]; From 11984f6dcbc1c6ce4fe74aac90866306ad6cfaf8 Mon Sep 17 00:00:00 2001 From: Timi007 Date: Wed, 31 Aug 2022 06:17:31 +0200 Subject: [PATCH 39/92] Marker Flags - Add placing system & icons (#8951) --- addons/marker_flags/CfgEventHandlers.hpp | 6 ++ addons/marker_flags/CfgVehicles.hpp | 17 ++-- addons/marker_flags/CfgWeapons.hpp | 24 ++++-- addons/marker_flags/XEH_PREP.hpp | 1 + .../marker_flags/XEH_missionDisplayLoad.sqf | 17 ++++ addons/marker_flags/XEH_postInit.sqf | 20 +++-- addons/marker_flags/XEH_preStart.sqf | 2 +- addons/marker_flags/config.cpp | 4 +- .../marker_flags/functions/fnc_addActions.sqf | 9 ++- .../functions/fnc_handleScrollWheel.sqf | 30 +++++++ .../marker_flags/functions/fnc_pickUpFlag.sqf | 15 ++-- .../marker_flags/functions/fnc_placeFlag.sqf | 73 ++++++++++++++---- addons/marker_flags/script_component.hpp | 9 +++ addons/marker_flags/stringtable.xml | 29 +++++-- .../ui/icons/black_place_icon.paa | Bin 0 -> 5625 bytes .../marker_flags/ui/icons/blue_place_icon.paa | Bin 0 -> 5625 bytes .../ui/icons/green_place_icon.paa | Bin 0 -> 5625 bytes .../ui/icons/orange_place_icon.paa | Bin 0 -> 5625 bytes .../ui/icons/purple_place_icon.paa | Bin 0 -> 5625 bytes .../marker_flags/ui/icons/red_place_icon.paa | Bin 0 -> 5625 bytes .../ui/icons/white_pickup_icon.paa | Bin 0 -> 5625 bytes .../ui/icons/white_place_icon.paa | Bin 0 -> 5625 bytes .../ui/icons/yellow_place_icon.paa | Bin 0 -> 5625 bytes 23 files changed, 203 insertions(+), 53 deletions(-) create mode 100644 addons/marker_flags/XEH_missionDisplayLoad.sqf create mode 100644 addons/marker_flags/functions/fnc_handleScrollWheel.sqf create mode 100644 addons/marker_flags/ui/icons/black_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/blue_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/green_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/orange_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/purple_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/red_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/white_pickup_icon.paa create mode 100644 addons/marker_flags/ui/icons/white_place_icon.paa create mode 100644 addons/marker_flags/ui/icons/yellow_place_icon.paa diff --git a/addons/marker_flags/CfgEventHandlers.hpp b/addons/marker_flags/CfgEventHandlers.hpp index f6503c2479..b468b9e8b5 100644 --- a/addons/marker_flags/CfgEventHandlers.hpp +++ b/addons/marker_flags/CfgEventHandlers.hpp @@ -15,3 +15,9 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); }; }; + +class Extended_DisplayLoad_EventHandlers { + class RscDisplayMission { + ADDON = QUOTE(_this call COMPILE_SCRIPT(XEH_missionDisplayLoad)); + }; +}; diff --git a/addons/marker_flags/CfgVehicles.hpp b/addons/marker_flags/CfgVehicles.hpp index 0c8f63fe7c..6a615ca533 100644 --- a/addons/marker_flags/CfgVehicles.hpp +++ b/addons/marker_flags/CfgVehicles.hpp @@ -7,6 +7,7 @@ class CfgVehicles { displayName = CSTRING(ActionPlace); condition = QUOTE(_player call FUNC(canPlace)); insertChildren = QUOTE(_this call FUNC(addActions)); + icon = QPATHTOF(ui\icons\white_place_icon.paa); }; }; }; @@ -18,34 +19,34 @@ class CfgVehicles { scopeCurator = 2; author = ECSTRING(common,ACETeam); displayName = CSTRING(white); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,1,1,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.82,0.82,0.82,1,co)"}; }; class GVAR(black): GVAR(white) { displayName = CSTRING(black); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,0,0,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.18,0.18,0.18,1,co)"}; }; class GVAR(red): GVAR(white) { displayName = CSTRING(red); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,0,0,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.647,0.141,0.161,1,co)"}; }; class GVAR(green): GVAR(white) { displayName = CSTRING(green); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,1,0,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.063,0.588,0.063,1,co)"}; }; class GVAR(blue): GVAR(white) { displayName = CSTRING(blue); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,0,1,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.161,0.349,0.58,1,co)"}; }; class GVAR(yellow): GVAR(white) { displayName = CSTRING(yellow); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,1,0,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.776,0.729,0.129,1,co)"}; }; class GVAR(orange): GVAR(white) { displayName = CSTRING(orange); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,0.5,0,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.678,0.349,0.153,1,co)"}; }; class GVAR(purple): GVAR(white) { displayName = CSTRING(purple); - hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.5,0,0.5,1,co)"}; + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.373,0.141,0.647,1,co)"}; }; }; diff --git a/addons/marker_flags/CfgWeapons.hpp b/addons/marker_flags/CfgWeapons.hpp index 0f80e7c78b..b4c2f88125 100644 --- a/addons/marker_flags/CfgWeapons.hpp +++ b/addons/marker_flags/CfgWeapons.hpp @@ -3,7 +3,8 @@ class CfgWeapons { class CBA_MiscItem_ItemInfo; class GVAR(white): ACE_ItemCore { - GVAR(vehicle) = GVAR(white); + GVAR(vehicle) = QGVAR(white); + GVAR(icon) = QPATHTOF(ui\icons\white_place_icon.paa); author = ECSTRING(common,ACETeam); scope = 2; displayName = CSTRING(white); @@ -18,37 +19,44 @@ class CfgWeapons { }; class GVAR(black): GVAR(white) { - GVAR(vehicle) = GVAR(black); + GVAR(vehicle) = QGVAR(black); + GVAR(icon) = QPATHTOF(ui\icons\black_place_icon.paa); displayName = CSTRING(black); picture = QPATHTOF(ui\black_ca.paa); }; class GVAR(red): GVAR(white) { - GVAR(vehicle) = GVAR(red); + GVAR(vehicle) = QGVAR(red); + GVAR(icon) = QPATHTOF(ui\icons\red_place_icon.paa); displayName = CSTRING(red); picture = QPATHTOF(ui\red_ca.paa); }; class GVAR(green): GVAR(white) { - GVAR(vehicle) = GVAR(green); + GVAR(vehicle) = QGVAR(green); + GVAR(icon) = QPATHTOF(ui\icons\green_place_icon.paa); displayName = CSTRING(green); picture = QPATHTOF(ui\green_ca.paa); }; class GVAR(blue): GVAR(white) { - GVAR(vehicle) = GVAR(blue); + GVAR(vehicle) = QGVAR(blue); + GVAR(icon) = QPATHTOF(ui\icons\blue_place_icon.paa); displayName = CSTRING(blue); picture = QPATHTOF(ui\blue_ca.paa); }; class GVAR(yellow): GVAR(white) { - GVAR(vehicle) = GVAR(yellow); + GVAR(vehicle) = QGVAR(yellow); + GVAR(icon) = QPATHTOF(ui\icons\yellow_place_icon.paa); displayName = CSTRING(yellow); picture = QPATHTOF(ui\yellow_ca.paa); }; class GVAR(orange): GVAR(white) { - GVAR(vehicle) = GVAR(orange); + GVAR(vehicle) = QGVAR(orange); + GVAR(icon) = QPATHTOF(ui\icons\orange_place_icon.paa); displayName = CSTRING(orange); picture = QPATHTOF(ui\orange_ca.paa); }; class GVAR(purple): GVAR(white) { - GVAR(vehicle) = GVAR(purple); + GVAR(vehicle) = QGVAR(purple); + GVAR(icon) = QPATHTOF(ui\icons\purple_place_icon.paa); displayName = CSTRING(purple); picture = QPATHTOF(ui\purple_ca.paa); }; diff --git a/addons/marker_flags/XEH_PREP.hpp b/addons/marker_flags/XEH_PREP.hpp index fec1927b78..628433ff1c 100644 --- a/addons/marker_flags/XEH_PREP.hpp +++ b/addons/marker_flags/XEH_PREP.hpp @@ -1,5 +1,6 @@ PREP(addActions); PREP(canPlace); PREP(getFlags); +PREP(handleScrollWheel); PREP(pickUpFlag); PREP(placeFlag); diff --git a/addons/marker_flags/XEH_missionDisplayLoad.sqf b/addons/marker_flags/XEH_missionDisplayLoad.sqf new file mode 100644 index 0000000000..fc336ad799 --- /dev/null +++ b/addons/marker_flags/XEH_missionDisplayLoad.sqf @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +params ["_display"]; + +_display displayAddEventHandler ["MouseZChanged", { + params ["", "_scroll"]; + [_scroll] call FUNC(handleScrollWheel); +}]; + +_display displayAddEventHandler ["MouseButtonDown", { + params ["", "_button"]; + if (GVAR(isPlacing) isNotEqualTo PLACE_WAITING) exitWith {false}; + if (_button isNotEqualTo 1) exitWith {false}; // 1 = Left mouse button + GVAR(isPlacing) = PLACE_CANCEL; +}]; diff --git a/addons/marker_flags/XEH_postInit.sqf b/addons/marker_flags/XEH_postInit.sqf index 0bed83af7b..19011893cc 100644 --- a/addons/marker_flags/XEH_postInit.sqf +++ b/addons/marker_flags/XEH_postInit.sqf @@ -2,21 +2,29 @@ if (!hasInterface) exitWith {}; -private _weapons = (call (uiNamespace getVariable [QGVAR(flagItems), {[]}])) apply {configFile >> "CfgWeapons" >> _x}; +GVAR(isPlacing) = PLACE_CANCEL; +["ace_interactMenuOpened", {GVAR(isPlacing) = PLACE_CANCEL;}] call CBA_fnc_addEventHandler; + +private _cfgWeapons = configFile >> "CfgWeapons"; +private _weapons = (call (uiNamespace getVariable [QGVAR(flagItems), {[]}])) apply {_cfgWeapons >> _x}; { private _name = configName _x; - private _vehicle = getText (_x >> QGVAR(vehicle)); - GVAR(flagCache) set [_name, _vehicle]; + private _vehicleClass = getText (_x >> QGVAR(vehicle)); + private _displayName = getText (_x >> "displayName"); + private _icon = getText (_x >> QGVAR(icon)); + GVAR(flagCache) set [_name, [_vehicleClass, _displayName, _icon]]; private _action = [ QGVAR(pickup), LLSTRING(ActionPickUp), - "", + QPATHTOF(ui\icons\white_pickup_icon.paa), {call FUNC(pickUpFlag)}, {[_player, _target, []] call EFUNC(common,canInteractWith)}, {}, - [_name] + [_name], + [0, 0.072, 0.2], + 2 ] call EFUNC(interact_menu,createAction); - [_vehicle, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); + [_vehicleClass, 0, [], _action] call EFUNC(interact_menu,addActionToClass); } forEach _weapons; diff --git a/addons/marker_flags/XEH_preStart.sqf b/addons/marker_flags/XEH_preStart.sqf index ed4901a073..2a2bc52161 100644 --- a/addons/marker_flags/XEH_preStart.sqf +++ b/addons/marker_flags/XEH_preStart.sqf @@ -2,5 +2,5 @@ #include "XEH_PREP.hpp" -private _weapons = (configProperties [configfile >> "CfgWeapons", QUOTE(isClass _x && (isText (_x >> QQGVAR(vehicle)))), true]) apply {configName _x}; +private _weapons = (configProperties [configfile >> "CfgWeapons", QUOTE(isClass _x && {isText (_x >> QQGVAR(vehicle))}), true]) apply {configName _x}; uiNamespace setVariable [QGVAR(flagItems), compileFinal str _weapons]; diff --git a/addons/marker_flags/config.cpp b/addons/marker_flags/config.cpp index 02b054fa27..078a0d8e7e 100644 --- a/addons/marker_flags/config.cpp +++ b/addons/marker_flags/config.cpp @@ -24,9 +24,9 @@ class CfgPatches { QGVAR(purple) }; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interact_menu"}; + requiredAddons[] = {"ace_common", "ace_interaction", "ace_interact_menu"}; author = ECSTRING(common,ACETeam); - authors[] = {"Brett Mayson"}; + authors[] = {"Brett Mayson", "Timi007"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/addons/marker_flags/functions/fnc_addActions.sqf b/addons/marker_flags/functions/fnc_addActions.sqf index 57112f8de9..346cdbe7f8 100644 --- a/addons/marker_flags/functions/fnc_addActions.sqf +++ b/addons/marker_flags/functions/fnc_addActions.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: Brett Mayson + * Author: Brett Mayson, Timi007 * Adds the child actions for placing flags. * * Arguments: @@ -20,12 +20,13 @@ params ["_unit"]; private _actions = []; { - private _config = configFile >> "CfgWeapons" >> _x; + (GVAR(flagCache) get _x) params ["_vehicle", "_displayName", "_icon"]; + _actions pushBack [ [ _x, - getText (_config >> "displayName"), - getText (_config >> "picture"), + _displayName, + _icon, {[_this select 0, _this select 2] call FUNC(placeFlag)}, {true}, {}, diff --git a/addons/marker_flags/functions/fnc_handleScrollWheel.sqf b/addons/marker_flags/functions/fnc_handleScrollWheel.sqf new file mode 100644 index 0000000000..c6430be650 --- /dev/null +++ b/addons/marker_flags/functions/fnc_handleScrollWheel.sqf @@ -0,0 +1,30 @@ +#include "script_component.hpp" +/* + * Author: Timi007 + * Handles the marker flag object height. + * + * Arguments: + * 0: Scroll amount + * + * Return Value: + * Handled + * + * Example: + * [5] call ace_marker_flags_fnc_handleScrollWheel + * + * Public: No + */ + +params ["_scrollAmount"]; + +if (GVAR(isPlacing) isNotEqualTo PLACE_WAITING) exitWith { + false +}; + +// Move object height 5cm per scroll +GVAR(objectHeight) = GVAR(objectHeight) + (_scrollAmount * 0.05); + +// Clamp height between MIN_HEIGHT and MAX_HEIGHT +GVAR(objectHeight) = MIN_HEIGHT max (GVAR(objectHeight) min MAX_HEIGHT); + +true diff --git a/addons/marker_flags/functions/fnc_pickUpFlag.sqf b/addons/marker_flags/functions/fnc_pickUpFlag.sqf index 011380c020..f3ef5e118a 100644 --- a/addons/marker_flags/functions/fnc_pickUpFlag.sqf +++ b/addons/marker_flags/functions/fnc_pickUpFlag.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: Brett Mayson + * Author: Brett Mayson, Timi007 * Places a flag in front of the unit. * * Arguments: @@ -12,17 +12,22 @@ * Nothing * * Example: - * [_flag,player,"x"] call ace_marker_flags_fnc_pickupFlag + * [_flag, player, ["ace_marker_flags_white"]] call ace_marker_flags_fnc_pickupFlag * * Public: No */ params [["_flag", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_args", [""], [[]]]]; -private _itemName = _args # 0; +_args params ["_item"]; TRACE_3("pickupFlag",_unit,_flag,_itemName); if (isNull _flag) exitWith {}; [_unit, "PutDown"] call EFUNC(common,doGesture); -deleteVehicle _flag; -[_unit, _itemName] call EFUNC(common,addToInventory); + +[{ + params ["_flag", "_unit", "_item"]; + + [_unit, _item] call EFUNC(common,addToInventory); + deleteVehicle _flag; +}, [_flag, _unit, _item], 0.7] call CBA_fnc_waitAndExecute; diff --git a/addons/marker_flags/functions/fnc_placeFlag.sqf b/addons/marker_flags/functions/fnc_placeFlag.sqf index d89bb52614..d5c4bdcb13 100644 --- a/addons/marker_flags/functions/fnc_placeFlag.sqf +++ b/addons/marker_flags/functions/fnc_placeFlag.sqf @@ -1,14 +1,15 @@ #include "script_component.hpp" /* - * Author: Brett Mayson - * Places a flag in front of the unit. + * Author: Timi007 + * Starts the placing process of the marker flag for the player. + * Flags can be placed with the special marker flag items. * * Arguments: - * 0: Unit - * 1: Flag + * 0: Player + * 1: Flag item * * Return Value: - * Flag + * Nothing * * Example: * [player, "ace_marker_flags_white"] call ace_marker_flags_fnc_placeFlag @@ -16,12 +17,58 @@ * Public: No */ -params [["_unit", objNull, [objNull]], ["_flag", QGVAR(white), [""]]]; +params [["_player", objNull, [objNull]], ["_item", QGVAR(white), [""]]]; +TRACE_2("Placing flag", _player, _item); -_unit removeItem _flag; -_flag = GVAR(flagCache) get _flag; // convert to vehicle type -private _pos = _unit modelToWorld [0, 1, 0]; -private _flag = _flag createVehicle _pos; -_flag setPos _pos; -[QGVAR(placed), [_unit, _flag]] call CBA_fnc_localEvent; -[_unit, "PutDown"] call EFUNC(common,doGesture); +(GVAR(flagCache) get _item) params ["_vehicleClass"]; + +private _flag = _vehicleClass createVehicle [0, 0, 0]; + +TRACE_1("Created flag", _flag); + +// Set flag start height +GVAR(objectHeight) = MAX_HEIGHT; + +GVAR(isPlacing) = PLACE_WAITING; + +// Add info dialog for the player which show the controls +[LLSTRING(ActionPlace), LLSTRING(ActionCancel), LLSTRING(ActionAdjustHeight)] call EFUNC(interaction,showMouseHint); + +private _mouseClickID = [_player, "DefaultAction", { + GVAR(isPlacing) isEqualTo PLACE_WAITING +}, { + GVAR(isPlacing) = PLACE_APPROVE +}] call EFUNC(common,addActionEventHandler); + +[{ + params ["_args", "_handle"]; + _args params ["_player", "_item", "_flag", "_mouseClickID"]; + + if (isNull _flag || {!([_player, _flag] call EFUNC(common,canInteractWith))}) then { + GVAR(isPlacing) = PLACE_CANCEL; + }; + + if (GVAR(isPlacing) isNotEqualTo PLACE_WAITING) exitWith { + [_handle] call CBA_fnc_removePerFrameHandler; + call EFUNC(interaction,hideMouseHint); + [_player, "DefaultAction", _mouseClickID] call EFUNC(common,removeActionEventHandler); + + if (GVAR(isPlacing) isEqualTo PLACE_APPROVE) then { + // End position of the flag + GVAR(isPlacing) = PLACE_CANCEL; + [_player, "PutDown"] call EFUNC(common,doGesture); + _player removeItem _item; + [QGVAR(placed), [_player, _flag, _item]] call CBA_fnc_localEvent; + } else { + // Action is canceled + deleteVehicle _flag; + }; + }; + + private _pos = (eyePos _player) vectorAdd ((getCameraViewDirection _player) vectorMultiply FLAG_PLACING_DISTANCE); + // Adjust height of flag with the scroll wheel + _pos set [2, ((getPosWorld _player) select 2) + GVAR(objectHeight)]; + + _flag setPosWorld _pos; + _flag setDir (getDir _player - 90); +}, 0, [_player, _item, _flag, _mouseClickID]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/marker_flags/script_component.hpp b/addons/marker_flags/script_component.hpp index c85bdba3b1..bef8c1d423 100644 --- a/addons/marker_flags/script_component.hpp +++ b/addons/marker_flags/script_component.hpp @@ -15,3 +15,12 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define PLACE_WAITING -1 +#define PLACE_CANCEL 0 +#define PLACE_APPROVE 1 + +#define MIN_HEIGHT -0.3 +#define MAX_HEIGHT 0.4 + +#define FLAG_PLACING_DISTANCE 2 diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index e10510face..a567ed226e 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -25,12 +25,29 @@ 不管地形表面是什么都可以放标记旗 - Place Flag - Flagge platzieren - Postaw chorągiewkę - 旗を設置 - 깃발 배치 - 放置标记旗 + Place Marker Flag + Markierungsfahne platzieren + + + Adjust height + Höhe anpassen + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + 中止 + 취소 + 取消 + 取消 + Iptal Pick Up diff --git a/addons/marker_flags/ui/icons/black_place_icon.paa b/addons/marker_flags/ui/icons/black_place_icon.paa new file mode 100644 index 0000000000000000000000000000000000000000..5526fc2c921540bd5e162dc441ab9fb26516973f GIT binary patch literal 5625 zcmeHLL1+^}6#Y#TX)b9{7kUv_+>6$8uGyd@q(s|dHh2sbauCG=O<|1=2}6B~Ca?q`;rw=@60`7?ipogWjqT&8$4SIR^I zpxJC*cJaN;ZNdVDa4u8G5}w0{@ZD^7RmZx8&x<5L^&-Ga1>g%l(}@l`09x>b2)R!0 zzr|bow%NALDC_4tF23qnFAB)lwR{BayKKg^cwp~R%hQkXn3*qVd>|^{v^zVR98X72 z96F1KG~ObLH*Ov#&%?wRI*YyebZ?&Q#86mK@_8SE!UE=!RG42tyhdeK{tM6}8kW%i zv$6gw-5;CX)J9vbzZ;)5O~&n%c%}Qk-+E%Y_Rd25OFwD3$Tiyng*} zop!&gpaM{aVIU_B`-)|o&mKSOa(e->cC?2O^@^nuCM0U^otLm-7}(x$ME|SXt|&4) z!TKJZye9q;TY6#_3+wYS^ZD)QwOU0()CY$VQL#`3>1WPgu#Pr0cbNf7rEN^eh*xx{ zAwI)+4FyXy9IstbuCsfS`|D}2zcA)M8GmFk?^?Irel6xM4f7p!(KE%wtYcH=&zFrP^)RsHT}>(;Pg-N~0RJJ^2r zbNu#849CLu9LSv4urTHxlj2ne$*U&v|K9$%y#-jHwCF7-Rav&nA4y5qb;ON+>#0mS gKpEn7HD14QlG!Mps5qb3-c%lbcuwp9OET5^3-p1z-T(jq literal 0 HcmV?d00001 diff --git a/addons/marker_flags/ui/icons/blue_place_icon.paa b/addons/marker_flags/ui/icons/blue_place_icon.paa new file mode 100644 index 0000000000000000000000000000000000000000..8f899cae24326b7f215b483845e2a637f081a9e8 GIT binary patch literal 5625 zcmeHLL2DCH5T2%qbT4VD21F1e?nUZ3*X&|RNQt(^Z15N=}6 z+=C#lXTe?r5tLGrlVqVF1e!i)UNWnFC4`hnZQS84yWh^f`QE%Y@3Av6k;|FIJGqh> z1%UT&-&~jYfq9p(Kp~tn3t7T*coDvz&8`{v?BMk(0Z_dRu#*J%iq~XffB}FOhC+n= zO!w2`?E}|txptKM=i3tB6r#I?W{U#ybv++J`x0A|;(@(u&0+r-kD2+-8uvuyyMAv^ z5606r;)mYiA&s|)!n2&Xx~tJQlVWHu`tuoop6ta?&e~si(E@tnU9=_gD2V^#Azz zug=e`<8b}M_5bt#XV&9g^)HP7F#iAN_}}h*c^Ji%m-8QWfBb7W1t|ckFbrhWux~i7 z{o?794(khu^`kCAOyi5C5*8$CGUp|1Sr+OWp6Gv*`eZVwPH_Kmd?)md5#Ptg{rQ;b zeHf8e14L5Th#%>v&R=kjwsg77-6ixM3o_!hjyK}7EP#R|8s1R zJU>&{hy2IlZ|d_qX8p>--CRyT`fJBZf=Yo@WE=>GQOdip@5j47h4nhhC8y~ z_Qumw)4R^xE{(T>B4#;0|4pHPCdJU3bK`k8PWF;0Vf*XnXE2kYCOl)1YEU~a{~4$; z8C&H4=~(}T{*TpuZl&X`KM$CO?8X0tc%lDc(0*)kd#54(f9D70zX15A`OuGuz2xWi z#7;6aD)LWI1cm+iA2fg1e3AeA_y4fhBWV6;{iF5&^ZXNZ{DsXI#eWq4|8xAW?R>hI zz$i}`Y@)x|X6~$yxmE+jve<|p>5rYiZ0)Vee3`q7VZ6bD40|c# zp!u<0e+y-cwVaV&lCBANP(S4{-RHkBIJLczfq(8F@$ZYjpy$8J>=h+<|HQVH43z?@ z$T$=c7Fp-arkmb!DXf=J&RHEd&$jd8_U`}RkC&Zvw_X3vt947LTy{!TtPXb8fBJ8~ z2d9Mt+F2Q!7?0onVR+F&^16xq2iy1epM_Z}i{5Z@HN~!eB)3&nMcf*+pLj(Fs6wil cO*QAonN8r1it~B(UG2ffGh*LRE_kKZUzbTV%K!iX literal 0 HcmV?d00001 diff --git a/addons/marker_flags/ui/icons/orange_place_icon.paa b/addons/marker_flags/ui/icons/orange_place_icon.paa new file mode 100644 index 0000000000000000000000000000000000000000..7477a4a07f6db241ff2fad17729e02168da2c738 GIT binary patch literal 5625 zcmeHLL1@!Z82;C_vR=BP20SQ6%thz9*Cr?}9o22v1dnAx4`STSb5y3cQVQa!2=>;y zxf-cA!E>R4GDdq*7Fd`J);<3}?aN%GZ0%;kFh4IOA209!{{OxIf4ui6SU#_mZs#>6 z4gl{y{krPn2g+T-425uBDdq^z;6wO+F1IA(w}H>AG(hztz-s~ED?XEn3^D*}7zq*b zZ+cIQ*SAf*YwB@6zR+{=b;jBbsx2`n)TKfU^}AS|6c6=X>5RrFxXqj|Y`n`V-=%vS zl4nm(PVHIqdt`43h0k)^Y5r)TOp2j5Z_j4!S<;t43EN*kKZBVxHSRxyWR2Qs`OiR( zN!TL)&&K*M_IK9$nboeh{%*k3BrpCa#Ebn8gU&PE)pr)+{~$jw|2e=n&4+qI>?Oae zkMATyr9A&QMNrtE|3UMI%@_H9c>fQ3J%Z+s)<0VRKhHlw$6wfdQT#{o|3An7`tFy9 zalG;db>2E@zKb9NP=#SA8ubgpP3{i%PkBuD`Og(jt#72@*yAJqL-7~%{Fj-zx{!JF&$g8` zl>({AI20ZhqIGW5PHowgM$0G{jINz!+gW~l_y6z5D^_ZwQ~l{y>y{0G6{}Fj>Y#gj zR}ZpcY+6{LoR_e1d;I#3!b=vCS9Rn+UfRvU9F;}ySeeR#S^i9J%d(8PG3Y$^iVjeQ fWL-?wZ;ewM#~l^t^Tzwi-HYpz3JKY-fkBKo0zMyfRRldmA zHe`1^9VM}CC%0+5B@{8sm#W|HucJ(gp_6oGv(7Bpi=hPVua}>}Op2QDpFzA%?Xdi3 zphRSBq5nr?{TI65SG$>&w!8j3VCu3P{}bYc?%P4@fx+z^h4}xKADI6F;G5<{J0NzG zpW72V$K&=(QQJ3WMWjW6js79{HY&P!O+G}Je3 zHu%i->9kv&5dHV#`$KOkiA`*xzu0E_AI4m(0U{DM;z#;J=P#N&t1@5aWL4K+U_pjG zlX1}eSg)-^(PT|~q)(?W2zO9Fx?jQ2+ia)>Szs#(a`OK||>iwqUTUpFQJ?;+fJ5kWyS5?`@a`2+lh@h+ov1g literal 0 HcmV?d00001 diff --git a/addons/marker_flags/ui/icons/red_place_icon.paa b/addons/marker_flags/ui/icons/red_place_icon.paa new file mode 100644 index 0000000000000000000000000000000000000000..c0fcea90480e77afec22db7d8f1ec28865aa1726 GIT binary patch literal 5625 zcmeHLL1+^}6#Y#TX)b9{1HFhV?nUc4*X*Jsq(s|dcJUZ09sXTggH15uPxl9P0ypcI;p|IcQ&&Dzo=jT?&lnPvCw?Ei26&i}*AkFi`%E#A)Q zY7_uAHa=hF_1e-|6%<9 z&+)&u_vv92kGw(cx6YdH5=a14VQ}T7VP7*XDEA#0`|7=-FQYny%jIM|JbwG9;YAzCD+cl(Z{M#!12a?>yE literal 0 HcmV?d00001 diff --git a/addons/marker_flags/ui/icons/white_pickup_icon.paa b/addons/marker_flags/ui/icons/white_pickup_icon.paa new file mode 100644 index 0000000000000000000000000000000000000000..bc5d4ac7e4c6f413af9ad5a7d0e9edb0ce6e5ff8 GIT binary patch literal 5625 zcmeHLPe>F|82>UwJA{K71yQbLbTL|}Bv5cA*gs}=D568qYF3w3IxPw5jzx9JRjdvX zp$EZRn1{JK9ZDk*qeEK;yOvlTa;KzpX@=MLX7_um)1P5Ab%P#nbbkBZ`@Zk@dw=G= zm&ZJwniGdTCu?#6z%Y#cCO%bjlw*d8V^2+;o8xu(aD3eDKIX!A8J`;xK)4v-&Sro& z_+*w`-~vDksl*-9JOBS5FHMhY38hnQ)uW`JZ(3=d8jEvi>dU~Fvru0<4AY=ho2`@W z(cZ?1hiwyNkNPZIFp|u1V5WE&tdn>aI5o8h;Y5b=gQva>A|FyQiT>g@VlcmBh=7$4tviP!hy|?O}DSv-A@>R~hqwyh)k4E`B zPu#XN-eJ71HbR80{<00*@t68I--b%!_`uqKX8sjx* zOQ=5DU-bQim}xF;FC_rgUu`{X`CH<14L*q*V_iJlUycW9kbMua&m&a6+I%wgXUCt< z|H@!Ey&qKh(KbCEaK7{8Aik0|tiSHqEA~%jDgL4IY{S5Hu zA>sQXa8WCkZ_xkVu$9&IRhY>ilmC3I1UaPTW2X96J{e<+|4nkDmw6jSw}FhF@MKT^ zHpwAl}Cs55;iMvv5N5wZeMzTSo~j-D;gIb>&n@Yw`JZTv2B$Jhu5+ zu*nl_+Cu!Cx0Qx>Gx2`HRdHNaLZw1)DUNFpv~#PtA-~d z;mMuU-t|m>J~Dh-#IwWFEd@}(uSH|<^j@*=?g46csPC!~xtmr~@&^MKg8l(2pN00E b-Hk(g22oo;-&tNL1)jAe7fgfxA@|YN6mlSdb;r^^S{6U>z1Fm<4N+Lem>GHyx?3`c*swGvZowkrf&X nUj2+@7g>AI+5aDQ9kMMW+xkF$l_rBbDz4}J_r})gS5^HMzDF)n literal 0 HcmV?d00001 diff --git a/addons/marker_flags/ui/icons/yellow_place_icon.paa b/addons/marker_flags/ui/icons/yellow_place_icon.paa new file mode 100644 index 0000000000000000000000000000000000000000..965a36185fa79559dcbb4161a89cf29fb4f550ca GIT binary patch literal 5625 zcmeHLL1+^}6#Y#TX)b9{mwHfKaW7iWxn_eUAtl-tvx~=2AqR2o&GV{MZy^Lc20iy~ zuC8anb0AWsl+DQ|P!I}D$Nwk!Yq}Dev~@#qKeNofotgjU&-_2^{Fun)GR6BjGZO`X z53RkM5FZ%`P5e-Xd z|Hat<<@T?Qc51!l?Z0%Gs^jINqrZ=|Nq1X#yNDD02_p!uiG7utXP{GaxI1kE4rf4Kj{|35+d-?aHc{}28DfA;^)gRf7bc;yZ1 zf9tIAu7V0c8HT=$n)WTbVZDCwyv^+e#M)5@AztH6)5L^CRo;0C8-{`Hbw~8R%XUTa zvJ*W1B)-4eZ9TDzg~#(Tv(OoFtp_gLXx^%jRG^_85|}vCn>1G4}YufK&Gm`H%Tu(Cc3kjrGOU(|>lXBqu*LYJwyNi literal 0 HcmV?d00001 From 8c249a12e8aa250bc6f749be5c71118a2f74cf4e Mon Sep 17 00:00:00 2001 From: ace3mod Date: Wed, 31 Aug 2022 06:18:11 +0200 Subject: [PATCH 40/92] [Docs] Update component dependencies Automatically committed through CI. [ci skip] --- docs/_includes/dependencies_list.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 83af093ff9..3041033528 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -271,6 +271,8 @@ {% endif %} {% if include.component == "marker_flags" %} +- `ace_common` +- `ace_interaction` - `ace_interact_menu` {% endif %} From a6ced105ee217be9808315caadd29e4d2f6a60dd Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Thu, 1 Sep 2022 19:44:38 +0200 Subject: [PATCH 41/92] Add No vehicle clan logo component (#9018) * Add novehicleclanlogo component * Documentation * Update README.md * Use selection name from vehicle config --- addons/novehicleclanlogo/$PBOPREFIX$ | 1 + addons/novehicleclanlogo/CfgEventHandlers.hpp | 18 +++++++++++++ addons/novehicleclanlogo/README.md | 4 +++ addons/novehicleclanlogo/XEH_PREP.hpp | 1 + addons/novehicleclanlogo/XEH_postInit.sqf | 14 ++++++++++ addons/novehicleclanlogo/XEH_preInit.sqf | 11 ++++++++ addons/novehicleclanlogo/XEH_preStart.sqf | 3 +++ addons/novehicleclanlogo/config.cpp | 17 ++++++++++++ .../functions/fnc_removeClanLogo.sqf | 26 +++++++++++++++++++ .../functions/script_component.hpp | 1 + addons/novehicleclanlogo/initSettings.sqf | 11 ++++++++ addons/novehicleclanlogo/script_component.hpp | 16 ++++++++++++ addons/novehicleclanlogo/stringtable.xml | 13 ++++++++++ docs/wiki/feature/novehicleclanlogo.md | 18 +++++++++++++ 14 files changed, 154 insertions(+) create mode 100644 addons/novehicleclanlogo/$PBOPREFIX$ create mode 100644 addons/novehicleclanlogo/CfgEventHandlers.hpp create mode 100644 addons/novehicleclanlogo/README.md create mode 100644 addons/novehicleclanlogo/XEH_PREP.hpp create mode 100644 addons/novehicleclanlogo/XEH_postInit.sqf create mode 100644 addons/novehicleclanlogo/XEH_preInit.sqf create mode 100644 addons/novehicleclanlogo/XEH_preStart.sqf create mode 100644 addons/novehicleclanlogo/config.cpp create mode 100644 addons/novehicleclanlogo/functions/fnc_removeClanLogo.sqf create mode 100644 addons/novehicleclanlogo/functions/script_component.hpp create mode 100644 addons/novehicleclanlogo/initSettings.sqf create mode 100644 addons/novehicleclanlogo/script_component.hpp create mode 100644 addons/novehicleclanlogo/stringtable.xml create mode 100644 docs/wiki/feature/novehicleclanlogo.md diff --git a/addons/novehicleclanlogo/$PBOPREFIX$ b/addons/novehicleclanlogo/$PBOPREFIX$ new file mode 100644 index 0000000000..8232a79524 --- /dev/null +++ b/addons/novehicleclanlogo/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\novehicleclanlogo diff --git a/addons/novehicleclanlogo/CfgEventHandlers.hpp b/addons/novehicleclanlogo/CfgEventHandlers.hpp new file mode 100644 index 0000000000..6c29240403 --- /dev/null +++ b/addons/novehicleclanlogo/CfgEventHandlers.hpp @@ -0,0 +1,18 @@ + +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; diff --git a/addons/novehicleclanlogo/README.md b/addons/novehicleclanlogo/README.md new file mode 100644 index 0000000000..4a058d99ba --- /dev/null +++ b/addons/novehicleclanlogo/README.md @@ -0,0 +1,4 @@ +novehicleclanlogo +============= + +Prevents clan logo from being displayed on vehicles controlled by players. diff --git a/addons/novehicleclanlogo/XEH_PREP.hpp b/addons/novehicleclanlogo/XEH_PREP.hpp new file mode 100644 index 0000000000..a835a8884f --- /dev/null +++ b/addons/novehicleclanlogo/XEH_PREP.hpp @@ -0,0 +1 @@ +PREP(removeClanLogo); diff --git a/addons/novehicleclanlogo/XEH_postInit.sqf b/addons/novehicleclanlogo/XEH_postInit.sqf new file mode 100644 index 0000000000..ec2049c4a1 --- /dev/null +++ b/addons/novehicleclanlogo/XEH_postInit.sqf @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +// clan logos are not used in singleplayer +if (!isMultiplayer) exitWith {}; + +["CBA_settingsInitialized", { + TRACE_1("settingsInit eh",GVAR(enabled)); + + if (isServer && {GVAR(enabled)}) then { + ["LandVehicle", "initPost", LINKFUNC(removeClanLogo), true, [], true] call CBA_fnc_addClassEventHandler; + ["Air", "initPost", LINKFUNC(removeClanLogo), true, [], true] call CBA_fnc_addClassEventHandler; + ["Ship", "initPost", LINKFUNC(removeClanLogo), true, [], true] call CBA_fnc_addClassEventHandler; + }; +}] call CBA_fnc_addEventHandler; diff --git a/addons/novehicleclanlogo/XEH_preInit.sqf b/addons/novehicleclanlogo/XEH_preInit.sqf new file mode 100644 index 0000000000..9361d05015 --- /dev/null +++ b/addons/novehicleclanlogo/XEH_preInit.sqf @@ -0,0 +1,11 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP_RECOMPILE_START; +#include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +#include "initSettings.sqf" + +ADDON = true; diff --git a/addons/novehicleclanlogo/XEH_preStart.sqf b/addons/novehicleclanlogo/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/novehicleclanlogo/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/novehicleclanlogo/config.cpp b/addons/novehicleclanlogo/config.cpp new file mode 100644 index 0000000000..77c7dce638 --- /dev/null +++ b/addons/novehicleclanlogo/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author = ECSTRING(common,ACETeam); + authors[] = {"veteran29"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" diff --git a/addons/novehicleclanlogo/functions/fnc_removeClanLogo.sqf b/addons/novehicleclanlogo/functions/fnc_removeClanLogo.sqf new file mode 100644 index 0000000000..0b35e608fc --- /dev/null +++ b/addons/novehicleclanlogo/functions/fnc_removeClanLogo.sqf @@ -0,0 +1,26 @@ +#include "script_component.hpp" +/* + * Author: veteran29 + * Replaces the vehicle clan logo with an empty texture. + * + * Arguments: + * 0: Vehicle + * + * Return Value: + * None + * + * Example: + * [vehicle player] call ace_novehicleclanlogo_fnc_removeClanLogo + * + * Public: Yes + */ + +params ["_vehicle"]; + +private _selectionClan = getText (configOf _vehicle >> "selectionClan"); +if !(_selectionClan in selectionNames _vehicle) exitWith { + TRACE_2("vehicle does not have 'selectionClan' selection",_vehicle,_selectionLogo); +}; + +TRACE_1("replacing clan logo with empty texture",_vehicle); +_vehicle setObjectTextureGlobal [_selectionClan, "#(argb,1,1,1)color(0,0,0,0)"] // return diff --git a/addons/novehicleclanlogo/functions/script_component.hpp b/addons/novehicleclanlogo/functions/script_component.hpp new file mode 100644 index 0000000000..41e852be27 --- /dev/null +++ b/addons/novehicleclanlogo/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\novehicleclanlogo\script_component.hpp" diff --git a/addons/novehicleclanlogo/initSettings.sqf b/addons/novehicleclanlogo/initSettings.sqf new file mode 100644 index 0000000000..471877ca5c --- /dev/null +++ b/addons/novehicleclanlogo/initSettings.sqf @@ -0,0 +1,11 @@ +private _category = [ELSTRING(common,ACEKeybindCategoryVehicles), LSTRING(DisplayName)],; + +[ + QGVAR(enabled), "CHECKBOX", + [LELSTRING(common,Enabled), LSTRING(Enabled_Tooltip)], + _category, + false, + true, + {}, + true +] call CBA_fnc_addSetting; diff --git a/addons/novehicleclanlogo/script_component.hpp b/addons/novehicleclanlogo/script_component.hpp new file mode 100644 index 0000000000..eef91354bd --- /dev/null +++ b/addons/novehicleclanlogo/script_component.hpp @@ -0,0 +1,16 @@ +#define COMPONENT novehicleclanlogo +#define COMPONENT_BEAUTIFIED No Vehicle Clan Logo +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE + +#ifdef DEBUG_ENABLED_NOVEHICLECLANLOGO + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_NOVEHICLECLANLOGO + #define DEBUG_SETTINGS DEBUG_ENABLED_NOVEHICLECLANLOGO +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/novehicleclanlogo/stringtable.xml b/addons/novehicleclanlogo/stringtable.xml new file mode 100644 index 0000000000..70aaa50e17 --- /dev/null +++ b/addons/novehicleclanlogo/stringtable.xml @@ -0,0 +1,13 @@ + + + + + Remove clan logo from vehicles + Usuń logo klanu z pojazdów + + + Prevents clan logo from being displayed on vehicles controlled by players. + Zapobiega wyświetlaniu logo klanu na pojazdach kontrolowanych przez graczy. + + + diff --git a/docs/wiki/feature/novehicleclanlogo.md b/docs/wiki/feature/novehicleclanlogo.md new file mode 100644 index 0000000000..bae1125762 --- /dev/null +++ b/docs/wiki/feature/novehicleclanlogo.md @@ -0,0 +1,18 @@ +--- +layout: wiki +title: No vehicle clan logo +component: novehicleclanlogo +description: Removes clan logo from vehicles. +group: feature +category: realism +parent: wiki +mod: ace +version: + major: 3 + minor: 15 + patch: 1 +--- + +## 1. Overview + +Prevents clan logo from vehicles controlled by players. Can be toggled in ACE Vehicles settings category. From 6556a256a967307f526b56370f018dbc1312ef7e Mon Sep 17 00:00:00 2001 From: ace3mod Date: Thu, 1 Sep 2022 19:45:16 +0200 Subject: [PATCH 42/92] [Docs] Update component dependencies Automatically committed through CI. [ci skip] --- docs/_includes/dependencies_list.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 3041033528..893315034a 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -392,6 +392,10 @@ - `ace_common` {% endif %} +{% if include.component == "novehicleclanlogo" %} +- `ace_common` +{% endif %} + {% if include.component == "optics" %} - `ace_common` {% endif %} From 981a8ea3521f5b981f13265bc81e6764be0c8f72 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 1 Sep 2022 13:38:22 -0500 Subject: [PATCH 43/92] Hunter Killer (Commander Override) (#8496) * Hunter Killer (Commander Override) - Initial Demo * Just do a one-time slew * Update fnc_eachFrame.sqf * Update addons/hunterkiller/functions/script_component.hpp Co-authored-by: jonpas * Update for ArmA 2.08 * cleanup * Rework Observe / Control configs * Add to all 2035 tanks * Update script_component.hpp * Use eyeDirection on commander turrets * Update docs/wiki/framework/hunterkiller-framework.md Co-authored-by: Filip Maciejewski * Add to all 2035, support ture/false setVars * remove from apcs because mods don't know how to do inheritance Co-authored-by: jonpas Co-authored-by: Filip Maciejewski --- addons/hunterkiller/$PBOPREFIX$ | 1 + addons/hunterkiller/CfgEventHandlers.hpp | 15 ++++++ addons/hunterkiller/CfgVehicles.hpp | 24 +++++++++ addons/hunterkiller/README.md | 4 ++ addons/hunterkiller/XEH_PREP.hpp | 5 ++ addons/hunterkiller/XEH_postInit.sqf | 28 ++++++++++ addons/hunterkiller/XEH_preInit.sqf | 9 ++++ addons/hunterkiller/XEH_preStart.sqf | 3 ++ addons/hunterkiller/config.cpp | 17 ++++++ addons/hunterkiller/functions/fnc_keydown.sqf | 49 +++++++++++++++++ addons/hunterkiller/functions/fnc_slew.sqf | 32 ++++++++++++ .../functions/fnc_turretChangedEH.sqf | 52 +++++++++++++++++++ .../functions/script_component.hpp | 1 + addons/hunterkiller/script_component.hpp | 14 +++++ addons/hunterkiller/stringtable.xml | 20 +++++++ addons/main/script_mod.hpp | 2 +- docs/wiki/feature/hunterkiller.md | 26 ++++++++++ docs/wiki/framework/hunterkiller-framework.md | 50 ++++++++++++++++++ 18 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 addons/hunterkiller/$PBOPREFIX$ create mode 100644 addons/hunterkiller/CfgEventHandlers.hpp create mode 100644 addons/hunterkiller/CfgVehicles.hpp create mode 100644 addons/hunterkiller/README.md create mode 100644 addons/hunterkiller/XEH_PREP.hpp create mode 100644 addons/hunterkiller/XEH_postInit.sqf create mode 100644 addons/hunterkiller/XEH_preInit.sqf create mode 100644 addons/hunterkiller/XEH_preStart.sqf create mode 100644 addons/hunterkiller/config.cpp create mode 100644 addons/hunterkiller/functions/fnc_keydown.sqf create mode 100644 addons/hunterkiller/functions/fnc_slew.sqf create mode 100644 addons/hunterkiller/functions/fnc_turretChangedEH.sqf create mode 100644 addons/hunterkiller/functions/script_component.hpp create mode 100644 addons/hunterkiller/script_component.hpp create mode 100644 addons/hunterkiller/stringtable.xml create mode 100644 docs/wiki/feature/hunterkiller.md create mode 100644 docs/wiki/framework/hunterkiller-framework.md diff --git a/addons/hunterkiller/$PBOPREFIX$ b/addons/hunterkiller/$PBOPREFIX$ new file mode 100644 index 0000000000..3474867891 --- /dev/null +++ b/addons/hunterkiller/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\hunterkiller \ No newline at end of file diff --git a/addons/hunterkiller/CfgEventHandlers.hpp b/addons/hunterkiller/CfgEventHandlers.hpp new file mode 100644 index 0000000000..2a3f71f852 --- /dev/null +++ b/addons/hunterkiller/CfgEventHandlers.hpp @@ -0,0 +1,15 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preStart)); + }; +}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; diff --git a/addons/hunterkiller/CfgVehicles.hpp b/addons/hunterkiller/CfgVehicles.hpp new file mode 100644 index 0000000000..4ba64d8a95 --- /dev/null +++ b/addons/hunterkiller/CfgVehicles.hpp @@ -0,0 +1,24 @@ +class CfgVehicles { + class Tank_F; + class MBT_01_base_F: Tank_F { + ADDON = 1; // same as ADDON[] = {{{0}, 1}, {{0,0}, 3}}; + }; + class MBT_01_arty_base_F: MBT_01_base_F { + ADDON = 0; + }; + class MBT_01_mlrs_base_F: MBT_01_base_F { + ADDON = 0; + }; + class MBT_02_base_F: Tank_F { + ADDON = 1; + }; + class MBT_02_arty_base_F: MBT_02_base_F { + ADDON = 0; + }; + class MBT_03_base_F: Tank_F { + ADDON = 1; + }; + class MBT_04_base_F: Tank_F { + ADDON = 1; + }; +}; diff --git a/addons/hunterkiller/README.md b/addons/hunterkiller/README.md new file mode 100644 index 0000000000..293192db4e --- /dev/null +++ b/addons/hunterkiller/README.md @@ -0,0 +1,4 @@ +ace_hunterkiller +========== + +Allows a tank commander to re-aim the main turret or to aim their turret at the what the main turret is looking at diff --git a/addons/hunterkiller/XEH_PREP.hpp b/addons/hunterkiller/XEH_PREP.hpp new file mode 100644 index 0000000000..e0d7cd892e --- /dev/null +++ b/addons/hunterkiller/XEH_PREP.hpp @@ -0,0 +1,5 @@ +LOG("prep"); + +PREP(keydown); +PREP(slew); +PREP(turretChangedEH); diff --git a/addons/hunterkiller/XEH_postInit.sqf b/addons/hunterkiller/XEH_postInit.sqf new file mode 100644 index 0000000000..1560b6cc54 --- /dev/null +++ b/addons/hunterkiller/XEH_postInit.sqf @@ -0,0 +1,28 @@ +#include "script_component.hpp" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" + +[QGVAR(slew), LINKFUNC(slew)] call CBA_fnc_addEventHandler; + +if (!hasInterface) exitWith {}; + +GVAR(mode) = 0; +GVAR(targetTurret) = []; + +["CBA_settingsInitialized", { + ["turret", LINKFUNC(turretChangedEH), true] call CBA_fnc_addPlayerEventHandler; +}] call CBA_fnc_addEventHandler; + + +["ACE3 Vehicles", QGVAR(observe), [format ["%1 - %2", LLSTRING(displayName), LLSTRING(observe)], LLSTRING(observe_description)], +{ + [false] call FUNC(keyDown) +}, { + false +}, [DIK_Q, [false, false, false]]] call CBA_fnc_addKeybind; + +["ACE3 Vehicles", QGVAR(override), [format ["%1 - %2", LLSTRING(displayName), LLSTRING(override)], LLSTRING(override_description)], +{ + [true] call FUNC(keyDown) +}, { + false +}, [DIK_E, [false, false, false]]] call CBA_fnc_addKeybind; diff --git a/addons/hunterkiller/XEH_preInit.sqf b/addons/hunterkiller/XEH_preInit.sqf new file mode 100644 index 0000000000..b47cf6628d --- /dev/null +++ b/addons/hunterkiller/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/hunterkiller/XEH_preStart.sqf b/addons/hunterkiller/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/hunterkiller/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/hunterkiller/config.cpp b/addons/hunterkiller/config.cpp new file mode 100644 index 0000000000..ff31bbede3 --- /dev/null +++ b/addons/hunterkiller/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/hunterkiller/functions/fnc_keydown.sqf b/addons/hunterkiller/functions/fnc_keydown.sqf new file mode 100644 index 0000000000..ea6fa7933c --- /dev/null +++ b/addons/hunterkiller/functions/fnc_keydown.sqf @@ -0,0 +1,49 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Slew keybind pressed + * + * Arguments: + * 0: Override if true, Observe if false + * + * Return Value: + * None + * + * Example: + * [true] call ace_hunterkiller_fnc_keydown + * + * Public: No + */ + +if ((GVAR(mode) == MODE_NO_ACTIONS) || {!([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith))}) exitWith { + false +}; + +params ["_modeOverride"]; +TRACE_1("keydown",_modeOverride); +if ((_modeOverride) && {!(GVAR(mode) in [MODE_OVERRIDE, MODE_OBSERVE_AND_OVERRIDE])}) exitWith { false }; +if ((!_modeOverride) && {!(GVAR(mode) in [MODE_OBSERVE, MODE_OBSERVE_AND_OVERRIDE])}) exitWith { false }; + +private _vehicle = vehicle ACE_player; +private _playerTurret = _vehicle unitTurret ACE_player; + +private _sourceTurret = [GVAR(targetTurret), _playerTurret] select _modeOverride; +private _puppetTurret = [_playerTurret, GVAR(targetTurret)] select _modeOverride; +TRACE_3("",_modeOverride,_sourceTurret,_puppetTurret); + +private _eyePos = eyePos _vehicle; +private _lookDir = if ((getNumber (([_vehicle, _sourceTurret] call CBA_fnc_getTurret) >> "primaryObserver")) == 1) then { + TRACE_1("using commander",_sourceTurret); + // CBA_fnc_turretDir fails on "CUP_B_M1A2SEP_TUSK_II_NATO", but eyeDirection should be correct on commander turrets + eyeDirection _vehicle +} else { + ([1] + ([_vehicle, _sourceTurret] call CBA_fnc_turretDir)) call CBA_fnc_polar2vect +}; +private _lookPoint = _eyePos vectorAdd (_lookDir vectorMultiply 5000); + +TRACE_1("sending event",_lookDir); +[QGVAR(slew), [_vehicle, _puppetTurret, _lookPoint, _modeOverride], _vehicle, _puppetTurret] call CBA_fnc_turretEvent; + +playSound "ACE_Sound_Click"; + +true // return (key used) diff --git a/addons/hunterkiller/functions/fnc_slew.sqf b/addons/hunterkiller/functions/fnc_slew.sqf new file mode 100644 index 0000000000..97d66aa38f --- /dev/null +++ b/addons/hunterkiller/functions/fnc_slew.sqf @@ -0,0 +1,32 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Slews turret to target pos and shows visual feedback + * + * Arguments: + * 0: Vehicle + * 1: Turret (will be local) + * 2: Look PosASL + * 3: Override + * + * Return Value: + * None + * + * Example: + * [vehicle, [0], [0,0,0], true] call ace_hunterkiller_fnc_slew + * + * Public: No + */ + +params ["_vehicle", "_turret", "_posASL", "_isOverride"]; +TRACE_4("slew",_vehicle,_turret,_posASL,_isOverride); + +_vehicle lockCameraTo [_posASL, _turret, true]; + +if (hasInterface && {(_vehicle turretUnit _turret) isEqualTo ace_player}) then { + private _displayText = if (_isOverride) then { LLSTRING(override) } else { LLSTRING(observe) }; + QGVAR(text) cutText [format ["




[%1]", _displayText], "PLAIN", -1, false, true]; + [{ + QGVAR(text) cutText ["", "PLAIN"]; + }, [], 1] call CBA_fnc_waitAndExecute; +}; diff --git a/addons/hunterkiller/functions/fnc_turretChangedEH.sqf b/addons/hunterkiller/functions/fnc_turretChangedEH.sqf new file mode 100644 index 0000000000..88ca02fe98 --- /dev/null +++ b/addons/hunterkiller/functions/fnc_turretChangedEH.sqf @@ -0,0 +1,52 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Turret changed event handler. Determine if in a master turret + * + * Arguments: + * 0: Unit + * 1: Turret + * + * Return Value: + * None + * + * Example: + * [player, [0]] call ace_hunterkiller_fnc_turretChangedEH + * + * Public: No + */ + +params ["_player", "_playerTurret"]; +TRACE_2("turretChangedEH",_player,_playerTurret); + +GVAR(mode) = 0; +GVAR(targetTurret) = []; + +if (_playerTurret isEqualTo []) exitWith {}; +private _vehicle = vehicle _player; +private _config = configOf _vehicle; + +// setVar can be real array or true/false +private _hkArray = _vehicle getVariable [QUOTE(ADDON), nil]; +if (isNil "_hkArray") then { + _hkArray = if (isArray (_config >> QUOTE(ADDON))) then { + getArray (_config >> QUOTE(ADDON)) + } else { + ((getNumber (_config >> QUOTE(ADDON))) == 1) + }; +}; +if (_hkArray isEqualTo true) then { _hkArray = [[[0], 1], [[0,0], 3]]; }; +if (_hkArray isEqualTo false) then { _hkArray = []; }; + +TRACE_1("",_hkArray); +if ((count _hkArray) != 2) exitWith {}; + +{ + _x params ["_xTurret", "_xMode"]; + TRACE_2("x",_playerTurret,_xTurret); + if (_xTurret isEqualTo _playerTurret) exitWith { + TRACE_3("seat active",typeOf _vehicle,_xTurret,_xMode); + GVAR(mode) = _xMode; + GVAR(targetTurret) = _hkArray # ((_forEachIndex + 1) % 2) # 0; + }; +} forEach _hkArray; diff --git a/addons/hunterkiller/functions/script_component.hpp b/addons/hunterkiller/functions/script_component.hpp new file mode 100644 index 0000000000..5ad82702f2 --- /dev/null +++ b/addons/hunterkiller/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\hunterkiller\script_component.hpp" diff --git a/addons/hunterkiller/script_component.hpp b/addons/hunterkiller/script_component.hpp new file mode 100644 index 0000000000..75f4a0ead5 --- /dev/null +++ b/addons/hunterkiller/script_component.hpp @@ -0,0 +1,14 @@ +#define COMPONENT hunterkiller +#define COMPONENT_BEAUTIFIED Hunter Killer +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#include "\z\ace\addons\main\script_macros.hpp" + +#define MODE_NO_ACTIONS 0 +#define MODE_OBSERVE 1 +#define MODE_OVERRIDE 2 +#define MODE_OBSERVE_AND_OVERRIDE 3 diff --git a/addons/hunterkiller/stringtable.xml b/addons/hunterkiller/stringtable.xml new file mode 100644 index 0000000000..3152aaf8be --- /dev/null +++ b/addons/hunterkiller/stringtable.xml @@ -0,0 +1,20 @@ + + + + + Hunter Killer + + + Override + + + Force other turret to slew onto your viewpoint + + + Observe + + + Slew your turret onto other turret's viewpoint + + + diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 8f1fcd1993..bc75d35819 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -10,7 +10,7 @@ #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 2.06 +#define REQUIRED_VERSION 2.08 #define REQUIRED_CBA_VERSION {3,15,7} #ifdef COMPONENT_BEAUTIFIED diff --git a/docs/wiki/feature/hunterkiller.md b/docs/wiki/feature/hunterkiller.md new file mode 100644 index 0000000000..93f059d934 --- /dev/null +++ b/docs/wiki/feature/hunterkiller.md @@ -0,0 +1,26 @@ +--- +layout: wiki +title: Hunter Killer +component: hunterkiller +description: Allows commander turret to slew gunner to their target +group: feature +category: realism +parent: wiki +mod: ace +version: + major: 3 + minor: 15 + patch: 1 +--- + +## 1. Overview +Allows a gunner and commander to observe and remote control the other's weapon to their own target + +## 2. Usage + +### 2.1 Observe other turret +- Press Q + +### 2.2 Override other turret +- Place the crosshair on the enemy vehicle. +- Press E diff --git a/docs/wiki/framework/hunterkiller-framework.md b/docs/wiki/framework/hunterkiller-framework.md new file mode 100644 index 0000000000..09ec96e63a --- /dev/null +++ b/docs/wiki/framework/hunterkiller-framework.md @@ -0,0 +1,50 @@ +--- +layout: wiki +title: HunterKiller Framework +description: Explains configs of the hunter-killer addon +group: framework +order: 5 +parent: wiki +mod: ace +version: + major: 3 + minor: 15 + patch: 1 +--- + +## 1. Array Info + +HunterKiller needs a 2 element array to know what seats to run on. +Each element is a tuple of a turret path and operating mode. +```cpp +// NO_ACTIONS = 0 +// OBSERVE = 1 +// OVERRIDE = 2 +// OBSERVE_AND_OVERRIDE = 3 +``` + + +## 2. Configs + +```cpp +class CfgVehicles { + class MyTankA { + ace_hunterkiller = 1; // enable with default settings + }; + class MyTankB { + ace_hunterkiller[] = {{{0}, 1}, {{0,0}, 3}}; // Default settings: (gunner can observe, commander can observe and override gunner) + }; + class MRAP_03_hmg_base_F { + ace_hunterkiller[] = {{{0}, 1}, {{1}, 2}}; // e.g. vehicle where commander is [1] instead of [0,0] + }; +}; +``` + +## 2. Variables + +```cpp +this setVariable ["ace_hunterkiller", true]; // enable for vic using default settings +this setVariable ["ace_hunterkiller", [[[0], 1], [[0,0], 3]]]; // enable using custom array +this setVariable ["ace_hunterkiller", false]; // disabled +this setVariable ["ace_hunterkiller", []]; // disabled +``` From 77cf716e8be5a97ed122c100b937edc427d16f64 Mon Sep 17 00:00:00 2001 From: ace3mod Date: Thu, 1 Sep 2022 20:38:57 +0200 Subject: [PATCH 44/92] [Docs] Update component dependencies Automatically committed through CI. [ci skip] --- docs/_includes/dependencies_list.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 893315034a..a3705deeee 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -198,6 +198,10 @@ - `ace_missileguidance` {% endif %} +{% if include.component == "hunterkiller" %} +- `ace_common` +{% endif %} + {% if include.component == "huntir" %} - `ace_common` {% endif %} From cc3bad3c5685468870a7ea3fde3e321abcd2f990 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 1 Sep 2022 13:44:19 -0500 Subject: [PATCH 45/92] XM157 (NGSW-FC Smart Scope) Framework (#8897) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * XM157 (NGSW-FC Smart Scope) * Update addons/common/functions/fnc_rscObjectHelper.sqf Co-authored-by: Jouni Järvinen * Update addons/xm157/functions/fnc_weaponInfo_draw.sqf Co-authored-by: Jouni Järvinen * Headers * Handle prone-deploy weapon bank * Disable Reticle picker for now * some localizations * Change font looks like CUP modifies EtelkaMonospaceProBold for some reason?? * Create xm157-framework.md * Formating Co-authored-by: Jouni Järvinen --- addons/common/XEH_PREP.hpp | 1 + .../common/functions/fnc_rscObjectHelper.sqf | 64 +++++++ addons/xm157/$PBOPREFIX$ | 1 + addons/xm157/CfgEventHandlers.hpp | 15 ++ addons/xm157/CfgSounds.hpp | 6 + addons/xm157/CfgWeapons.hpp | 48 +++++ addons/xm157/README.md | 2 + addons/xm157/RscInGameUI.hpp | 79 ++++++++ addons/xm157/XEH_PREP.hpp | 8 + addons/xm157/XEH_postInit.sqf | 66 +++++++ addons/xm157/XEH_preInit.sqf | 9 + addons/xm157/XEH_preStart.sqf | 3 + addons/xm157/config.cpp | 27 +++ addons/xm157/data/ace_vector_body_co.paa | Bin 0 -> 140807 bytes addons/xm157/data/mrad_10_ca.paa | Bin 0 -> 148198 bytes addons/xm157/data/mrad_20_ca.paa | Bin 0 -> 151351 bytes addons/xm157/data/mrad_40_ca.paa | Bin 0 -> 157051 bytes addons/xm157/dev/generate_reticle.py | 178 ++++++++++++++++++ .../functions/fnc_ballistics_calculator.sqf | 101 ++++++++++ .../functions/fnc_ballistics_getData.sqf | 62 ++++++ addons/xm157/functions/fnc_keyPress.sqf | 67 +++++++ .../xm157/functions/fnc_weaponInfo_draw.sqf | 144 ++++++++++++++ .../functions/fnc_weaponInfo_drawMenu.sqf | 81 ++++++++ .../xm157/functions/fnc_weaponInfo_onLoad.sqf | 83 ++++++++ addons/xm157/functions/script_component.hpp | 1 + addons/xm157/script_component.hpp | 24 +++ addons/xm157/sounds/click.wav | Bin 0 -> 35864 bytes addons/xm157/stringtable.xml | 5 + docs/wiki/framework/xm157-framework.md | 56 ++++++ 29 files changed, 1131 insertions(+) create mode 100644 addons/common/functions/fnc_rscObjectHelper.sqf create mode 100644 addons/xm157/$PBOPREFIX$ create mode 100644 addons/xm157/CfgEventHandlers.hpp create mode 100644 addons/xm157/CfgSounds.hpp create mode 100644 addons/xm157/CfgWeapons.hpp create mode 100644 addons/xm157/README.md create mode 100644 addons/xm157/RscInGameUI.hpp create mode 100644 addons/xm157/XEH_PREP.hpp create mode 100644 addons/xm157/XEH_postInit.sqf create mode 100644 addons/xm157/XEH_preInit.sqf create mode 100644 addons/xm157/XEH_preStart.sqf create mode 100644 addons/xm157/config.cpp create mode 100644 addons/xm157/data/ace_vector_body_co.paa create mode 100644 addons/xm157/data/mrad_10_ca.paa create mode 100644 addons/xm157/data/mrad_20_ca.paa create mode 100644 addons/xm157/data/mrad_40_ca.paa create mode 100644 addons/xm157/dev/generate_reticle.py create mode 100644 addons/xm157/functions/fnc_ballistics_calculator.sqf create mode 100644 addons/xm157/functions/fnc_ballistics_getData.sqf create mode 100644 addons/xm157/functions/fnc_keyPress.sqf create mode 100644 addons/xm157/functions/fnc_weaponInfo_draw.sqf create mode 100644 addons/xm157/functions/fnc_weaponInfo_drawMenu.sqf create mode 100644 addons/xm157/functions/fnc_weaponInfo_onLoad.sqf create mode 100644 addons/xm157/functions/script_component.hpp create mode 100644 addons/xm157/script_component.hpp create mode 100644 addons/xm157/sounds/click.wav create mode 100644 addons/xm157/stringtable.xml create mode 100644 docs/wiki/framework/xm157-framework.md diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index ab9756c95e..02eca6d441 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -143,6 +143,7 @@ PREP(removeSpecificMagazine); PREP(requestCallback); PREP(resetAllDefaults); PREP(restoreVariablesJIP); +PREP(rscObjectHelper); PREP(runAfterSettingsInit); PREP(runTests); PREP(sanitizeString); diff --git a/addons/common/functions/fnc_rscObjectHelper.sqf b/addons/common/functions/fnc_rscObjectHelper.sqf new file mode 100644 index 0000000000..81eb707b3a --- /dev/null +++ b/addons/common/functions/fnc_rscObjectHelper.sqf @@ -0,0 +1,64 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Convert between screen and 3d object coordinates + * + * Arguments: + * 0: Function + * 1: Input array + * 2: Scale (optional: 1) + * + * Return Value: + * Value + * + * Example: + * ["2d", [0,0,0], 1] call ace_common_fnc_rscObjectHelper + * + * Public: Maybe + */ + +params ["_func", "_array", ["_scale", 1]]; + +private _adjustCam = 1; +private _topFOV = getResolution # 6; +private _leftFOV = getResolution # 7; + +private _topLeftX = (_leftFOV-1)*0.5/_leftFOV; +private _bottomRightX = 1-_topLeftX; +private _topLeftY = 0; +private _bottomRightY = 1; + +private _return = []; + +switch (toLower _func) do { + case ("2d"): { + _array params ["_pointX", "_z", "_pointY"]; + + private _scrX = _pointX * (_bottomRightX - _topLeftX) + _topLeftX; + private _vX = _leftFOV * (_scrX - 0.5) * _adjustCam * _z; + + private _scrY = _pointY * (_bottomRightY - _topLeftY) + _topLeftY; + private _vY = _topFOV * (0.5 - _scrY) * _adjustCam * _z; + + _vX = _vX / _scale; + _vY = _vY / _scale; + + _return = [_vX, _vY, _z]; + }; + case ("3d"): { + _array params ["_vX", "_vY", "_z"]; // z is distance from screen + + _vX = _vX * _scale; + _vY = _vY * _scale; + + private _scrX = _vX / (_leftFOV * _adjustCam * _z) + 0.5; + private _pointX = (_scrX - _topLeftX) / (_bottomRightX - _topLeftX); + + private _scrY = 0.5 - _vY / (_topFOV * _adjustCam * _z); + private _pointY = (_scrY - _topLeftY) / (_bottomRightY - _topLeftY); + + _return = [_pointX, _z, _pointY]; + }; +}; + +_return diff --git a/addons/xm157/$PBOPREFIX$ b/addons/xm157/$PBOPREFIX$ new file mode 100644 index 0000000000..2bddd0ac4e --- /dev/null +++ b/addons/xm157/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\xm157 \ No newline at end of file diff --git a/addons/xm157/CfgEventHandlers.hpp b/addons/xm157/CfgEventHandlers.hpp new file mode 100644 index 0000000000..2a3f71f852 --- /dev/null +++ b/addons/xm157/CfgEventHandlers.hpp @@ -0,0 +1,15 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preStart)); + }; +}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; diff --git a/addons/xm157/CfgSounds.hpp b/addons/xm157/CfgSounds.hpp new file mode 100644 index 0000000000..907e710bba --- /dev/null +++ b/addons/xm157/CfgSounds.hpp @@ -0,0 +1,6 @@ +class CfgSounds { + class GVAR(click) { + sound[] = {QPATHTOF(sounds\click.wav), db-30, 3}; + titles[] = {}; + }; +}; diff --git a/addons/xm157/CfgWeapons.hpp b/addons/xm157/CfgWeapons.hpp new file mode 100644 index 0000000000..69abc30bf0 --- /dev/null +++ b/addons/xm157/CfgWeapons.hpp @@ -0,0 +1,48 @@ +class CfgWeapons { + class ItemCore; + class InventoryOpticsItem_Base_F; + + class ace_xm157_prototype: ItemCore { + author = ECSTRING(common,ACETeam); + scope = 1; // hidden + displayName = "XM157 Prototype"; + descriptionShort = ""; + picture = "\a3\Weapons_F\acc\Data\UI\icon_optic_tws_ca.paa"; + model = "\A3\weapons_f\acc\acco_tws_F"; + inertia = 0.3; + + class CBA_ScriptedOptic { + bodyTexture = QPATHTOF(data\ace_vector_body_co.paa); + // bodyTextureNight = ".paa"; // optional + bodyTextureSize = 1; + hideMagnification = 1; // no point, and it flickers at 1x + disableTilt = 0; + }; + + weaponInfoType = QGVAR(info); + class ItemInfo: InventoryOpticsItem_Base_F { + mass = 14; + optics = 1; + modelOptics = "\x\cba\addons\optics\cba_optic_big_100.p3d"; + class OpticsModes { + class lpvo { + opticsID = 1; + useModelOptics = 1; + opticsPPEffects[] = { "OpticsCHAbera1", "OpticsBlur1" }; + opticsZoomMin = "8 call (uiNamespace getVariable 'cba_optics_fnc_setOpticMagnificationHelper')"; + opticsZoomMax = "1 call (uiNamespace getVariable 'cba_optics_fnc_setOpticMagnificationHelper')"; + opticsZoomInit = "1 call (uiNamespace getVariable 'cba_optics_fnc_setOpticMagnificationHelper')"; + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + distanceZoomMin = 100; + distanceZoomMax = 100; + memoryPointCamera = "opticView"; + visionMode[] = {"Normal"}; + opticsFlare = 1; + opticsDisablePeripherialVision = 1; + cameraDir = ""; + }; + }; + }; + }; +}; diff --git a/addons/xm157/README.md b/addons/xm157/README.md new file mode 100644 index 0000000000..55a0696216 --- /dev/null +++ b/addons/xm157/README.md @@ -0,0 +1,2 @@ +ace_xm157 +========== diff --git a/addons/xm157/RscInGameUI.hpp b/addons/xm157/RscInGameUI.hpp new file mode 100644 index 0000000000..4e43e1581a --- /dev/null +++ b/addons/xm157/RscInGameUI.hpp @@ -0,0 +1,79 @@ +class RscObject; +class RscControlsGroupNoScrollbars; + +class RscText; +class GVAR(text): RscText { + font = "EtelkaMonospacePro"; + SizeEx = 0.04; + colorText[]={1,0.1,0.05,0.95}; + shadow = 0; +}; +class GVAR(textMenu): GVAR(text) { + SizeEx = 0.09; + style = 2+16; +}; + +class RscInGameUI { + class CBA_ScriptedOptic_zooming; + class GVAR(info): CBA_ScriptedOptic_zooming { + onLoad = QUOTE(call FUNC(weaponInfo_onLoad)); + class objects { + class Optic: RscObject { // first focal plane + idc = IDC_SCOPE_OBJECT; + type = 82; + model = "\A3\Misc_F\Helpers\UserTexture1m.p3d"; + x = 0; + y = 0; + z = 0; + xBack = 0.9; + yBack = 0.9; + zBack = 0.3; + inBack = 0; + enableZoom = 1; + zoomDuration = 0.001; + class Areas { + class usertexture { + selection = "usertexture"; + class controls { + class test: RscControlsGroupNoScrollbars { + idc = IDC_SCOPE_GROUP; + x = 0; + y = 0; + w = 1; + h = 4/3; + }; + }; + }; + }; + }; + class Screen: RscObject { + idc = IDC_SCREEN_OBJECT; + type = 82; + model = "\A3\Misc_F\Helpers\UserTexture1m.p3d"; + x = 0; + y = 0; + z = 0; + xBack = 0.9; + yBack = 0.9; + zBack = 0.3; + inBack = 1; + enableZoom = 1; + zoomDuration = 0.001; + class Areas { + class usertexture { + selection = "usertexture"; + class controls { + class test: RscControlsGroupNoScrollbars { + idc = IDC_SCREEN_GROUP; + x = 0; + y = 0; + w = 1; + h = 4/3; + }; + }; + }; + }; + }; + }; + }; +}; diff --git a/addons/xm157/XEH_PREP.hpp b/addons/xm157/XEH_PREP.hpp new file mode 100644 index 0000000000..56613ffe34 --- /dev/null +++ b/addons/xm157/XEH_PREP.hpp @@ -0,0 +1,8 @@ +LOG("prep"); + +PREP(ballistics_calculator); +PREP(ballistics_getData); +PREP(keyPress); +PREP(weaponInfo_draw); +PREP(weaponInfo_drawMenu); +PREP(weaponInfo_onLoad); diff --git a/addons/xm157/XEH_postInit.sqf b/addons/xm157/XEH_postInit.sqf new file mode 100644 index 0000000000..5f00e3209f --- /dev/null +++ b/addons/xm157/XEH_postInit.sqf @@ -0,0 +1,66 @@ +#include "script_component.hpp" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" + +GVAR(shown) = false; +GVAR(data) = createHashMap; +([worldName] call EFUNC(common,getMapData)) params ["_latitude"]; +GVAR(data) set ["latitude", _latitude]; + + +// Add Keybinds +["ACE3 Equipment", QGVAR(range), [format ["XM157 - %1", localize "str_a3_rscdisplayarsenal_stat_range"]], { + ["range", true] call FUNC(keyPress); +}, { + ["range", false] call FUNC(keyPress); +}, [DIK_TAB, [false, false, false]], false, 0] call CBA_fnc_addKeybind; + +["ACE3 Equipment", QGVAR(left), [format ["XM157 - %1", localize "str_a3_left"]], { + ["right", true] call FUNC(keyPress); +}, { + ["right", false] call FUNC(keyPress); +}, [DIK_END, [false, false, false]], false, 0] call CBA_fnc_addKeybind; + +["ACE3 Equipment", QGVAR(right), [format ["XM157 - %1", localize "str_a3_right"]], { + ["left", true] call FUNC(keyPress); +}, { + ["left", false] call FUNC(keyPress); +}, [DIK_DELETE, [false, false, false]], false, 0] call CBA_fnc_addKeybind; + +["ACE3 Equipment", QGVAR(up), [format ["XM157 - %1", localize "str_a3_rscattributetargetstate_up"]], { + ["up", true] call FUNC(keyPress); +}, { + ["up", false] call FUNC(keyPress); +}, [DIK_PGUP, [false, false, false]], false, 0] call CBA_fnc_addKeybind; + +["ACE3 Equipment", QGVAR(down), [format ["XM157 - %1", localize "str_a3_rscattributetargetstate_down"]], { + ["down", true] call FUNC(keyPress); +}, { + ["down", false] call FUNC(keyPress); +}, [DIK_PGDN, [false, false, false]], false, 0] call CBA_fnc_addKeybind; + + + +#ifdef ENABLE_QUICK_TESTING +player addPrimaryWeaponItem "ace_xm157_prototype"; +[player] call CBA_fnc_addUnitTrackProjectiles; +player addItem "ACE_ATragMX"; +player addItem "ace_rangecard"; + +["recompile", "recompile", "recompile", { + private _start = diag_tickTime; + [] call ACE_PREP_RECOMPILE; + [] call ace_common_fnc_dumpPerformanceCounters; + private _end = diag_tickTime; + systemChat format ["recompile took [%1 ms]", (1000 * (_end - _start)) toFixed 1]; + + if (productVersion #4 == "Diag") then { + call compile "diag_mergeConfigFile ['P:\z\ace\addons\xm157\config.cpp']"; + }; + + private _windSpd = vectorMagnitude wind; + private _windDir = (wind select 0) atan2 (wind select 1); + systemChat format ["Wind %1 @ %2", _windSpd, _windDir + 180]; + + false +}, {false}, [0x21, [false, false, false]], false] call CBA_fnc_addKeybind; // F Key +#endif diff --git a/addons/xm157/XEH_preInit.sqf b/addons/xm157/XEH_preInit.sqf new file mode 100644 index 0000000000..b47cf6628d --- /dev/null +++ b/addons/xm157/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/xm157/XEH_preStart.sqf b/addons/xm157/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/xm157/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/xm157/config.cpp b/addons/xm157/config.cpp new file mode 100644 index 0000000000..2689764b19 --- /dev/null +++ b/addons/xm157/config.cpp @@ -0,0 +1,27 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {"ace_xm157_prototype"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_advanced_ballistics", "ace_scopes"}; + author = ECSTRING(common,ACETeam); + authors[] = {"PabstMirror"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgSounds.hpp" +#include "CfgWeapons.hpp" +#include "RscInGameUI.hpp" + +class asdg_OpticRail; +class asdg_OpticRail1913: asdg_OpticRail { + class compatibleItems { + ace_xm157_prototype = 1; + }; +}; diff --git a/addons/xm157/data/ace_vector_body_co.paa b/addons/xm157/data/ace_vector_body_co.paa new file mode 100644 index 0000000000000000000000000000000000000000..71e1984c6e5d4d2dadd226bf390b3c7b8ce739b3 GIT binary patch literal 140807 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 z�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

L(&;xb~>is}kw&G&`l>`jT+!Uh_(J5K-0V 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 literal 0 HcmV?d00001 diff --git a/addons/xm157/data/mrad_10_ca.paa b/addons/xm157/data/mrad_10_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..293a29debece61fad90b701591edda7bc3823393 GIT binary patch literal 148198 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 Bj~4&{ literal 0 HcmV?d00001 diff --git a/addons/xm157/data/mrad_40_ca.paa b/addons/xm157/data/mrad_40_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..9e097adff19726c818958c558baf3cbf3ac4481b GIT binary patch literal 157051 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 K@F&C6c>I4Erh_d2 literal 0 HcmV?d00001 diff --git a/addons/xm157/dev/generate_reticle.py b/addons/xm157/dev/generate_reticle.py new file mode 100644 index 0000000000..119b547ab4 --- /dev/null +++ b/addons/xm157/dev/generate_reticle.py @@ -0,0 +1,178 @@ +from PIL import Image, ImageDraw, ImageFont, ImageFilter +import math + +# based on vortex razor hd + +final_scale = 10 + +supersample = 4 +# supersampling helps make rounded circles, does slighly blur text and straight lines +pixels_per_mrad = supersample * final_scale +image_size = supersample * 4096 +image_center = image_size / 2 + +# create an image +out = Image.new("RGBA", (image_size, image_size), (255, 255, 255, 0)) +# get a drawing context +d = ImageDraw.Draw(out) + +line_thin = math.floor(0.07 * pixels_per_mrad) +line_thick = math.floor(0.15 * pixels_per_mrad) +font_size = math.floor(0.55 * pixels_per_mrad) +# source https://fonts.google.com/specimen/Electrolize (Open Font License) +fnt = ImageFont.truetype("Electrolize-Regular.ttf", font_size) + +# draw center dot +d.ellipse([ + (image_center - 0.1 * pixels_per_mrad, image_center - 0.1 * pixels_per_mrad), + (image_center + 0.1 * pixels_per_mrad, image_center + 0.1 * pixels_per_mrad) +], fill=(0, 0, 0)) + +# draw 3 main axis lines +d.line([ + (image_center - 8 * pixels_per_mrad, image_center), + (image_center - 0.5 * pixels_per_mrad, image_center) +], fill=(0, 0, 0), width=line_thin) +d.line([ + (0, image_center), + (image_center - 8.5 * pixels_per_mrad, image_center) +], fill=(0, 0, 0), width=line_thick) +d.line([ + (image_center + 0.5 * pixels_per_mrad, image_center), + (image_center + 8 * pixels_per_mrad, image_center) +], fill=(0, 0, 0), width=line_thin) +d.line([ + (image_center + 8.5 * pixels_per_mrad, image_center), + (image_size, image_center) +], fill=(0, 0, 0), width=line_thick) +d.line([ + (image_center, image_center + 0.5 * pixels_per_mrad), + (image_center, image_center + 11 * pixels_per_mrad) +], fill=(0, 0, 0), width=line_thin) +d.line([ + (image_center, image_center + 11.5 * pixels_per_mrad), + (image_center, image_size) +], fill=(0, 0, 0), width=line_thick) + +# draw big triangle bar things +if (image_center - 15 * pixels_per_mrad > 0): + d.polygon([ + (0, image_center + 2 * pixels_per_mrad), + (image_center - 20 * pixels_per_mrad, image_center + 2 * pixels_per_mrad), + (image_center - 15 * pixels_per_mrad, image_center), + (image_center - 20 * pixels_per_mrad, image_center - 2 * pixels_per_mrad), + (0, image_center - 2 * pixels_per_mrad), + ], fill=(0, 0, 0)) + d.polygon([ + (image_size, image_center + 2 * pixels_per_mrad), + (image_center + 20 * pixels_per_mrad, image_center + 2 * pixels_per_mrad), + (image_center + 15 * pixels_per_mrad, image_center), + (image_center + 20 * pixels_per_mrad, image_center - 2 * pixels_per_mrad), + (image_size, image_center - 2 * pixels_per_mrad), + ], fill=(0, 0, 0)) + d.polygon([ + (image_center - 2 * pixels_per_mrad, image_size), + (image_center - 2 * pixels_per_mrad, image_center + 20 * pixels_per_mrad), + (image_center, image_center + 15 * pixels_per_mrad), + (image_center + 2 * pixels_per_mrad, image_center + 20 * pixels_per_mrad), + (image_center + 2 * pixels_per_mrad, image_size), + ], fill=(0, 0, 0)) + + +# draw windage hash marks and text +for x in range(1, 9): + if (x % 2 == 0): + text = f"{abs(x)}" + # windage odd numbers + d.text((image_center + (x - 0.15) * pixels_per_mrad, image_center - 1.2 * pixels_per_mrad), text, font=fnt, fill=(0, 0, 0)) + d.text((image_center - (x + 0.15) * pixels_per_mrad, image_center - 1.2 * pixels_per_mrad), text, font=fnt, fill=(0, 0, 0)) + # windage mrad hashs + d.line([ + (image_center + x * pixels_per_mrad, image_center + line_thin / 2), + (image_center + x * pixels_per_mrad, image_center - 0.5 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thin) + d.line([ + (image_center - x * pixels_per_mrad, image_center + line_thin / 2), + (image_center - x * pixels_per_mrad, image_center - 0.5 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thin) + if (x % 2 == 0): + d.line([ + (image_center - x * pixels_per_mrad, image_center + 0.2 * pixels_per_mrad), + (image_center - x * pixels_per_mrad, image_center + 0.7 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thick) + d.line([ + (image_center + x * pixels_per_mrad, image_center + 0.2 * pixels_per_mrad), + (image_center + x * pixels_per_mrad, image_center + 0.7 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thick) + else: + d.line([ + (image_center - x * pixels_per_mrad, image_center + 0.2 * pixels_per_mrad), + (image_center - x * pixels_per_mrad, image_center + 0.55 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thick) + d.line([ + (image_center + x * pixels_per_mrad, image_center + 0.2 * pixels_per_mrad), + (image_center + x * pixels_per_mrad, image_center + 0.55 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thick) + + if (x < 8): + # windage half mrad marks + d.line([ + (image_center + (x + .5) * pixels_per_mrad, image_center), + (image_center + (x + .5) * pixels_per_mrad, image_center - 0.25 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thin) + d.line([ + (image_center - (x + .5) * pixels_per_mrad, image_center), + (image_center - (x + .5) * pixels_per_mrad, image_center - 0.25 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thin) + +# handle 10 mrad thick line +d.multiline_text((image_center + (10 - 0.4) * pixels_per_mrad, image_center - 1.2 * pixels_per_mrad), "10", font=fnt, fill=(0, 0, 0)) +d.line([ + (image_center + 10 * pixels_per_mrad, image_center - 0.5 * pixels_per_mrad), + (image_center + 10 * pixels_per_mrad, image_center + 0.5 * pixels_per_mrad) +], fill=(0, 0, 0), width=line_thick) +d.multiline_text((image_center + (-10 - 0.4) * pixels_per_mrad, image_center - 1.2 * pixels_per_mrad), "10", font=fnt, fill=(0, 0, 0)) +d.line([ + (image_center - 10 * pixels_per_mrad, image_center - 0.5 * pixels_per_mrad), + (image_center - 10 * pixels_per_mrad, image_center + 0.5 * pixels_per_mrad) +], fill=(0, 0, 0), width=line_thick) + +for y in range(1, 12): + line_y = image_center + y * pixels_per_mrad + # elev hash marks + d.line([ + (image_center - 0.5 * pixels_per_mrad, line_y), + (image_center + 0.5 * pixels_per_mrad, line_y) + ], fill=(0, 0, 0), width=line_thin) + if (y < 11): # half marks + d.line([ + (image_center - 0.1 * pixels_per_mrad, line_y + 0.5 * pixels_per_mrad), + (image_center + 0.1 * pixels_per_mrad, line_y + 0.5 * pixels_per_mrad) + ], fill=(0, 0, 0), width=line_thin) + + dot_count = 2 + if (y > 2): dot_count = 3 + if (y > 4): dot_count = 4 + if (y > 6): dot_count = 5 + for dot in range(1, dot_count + 1): + d.ellipse([ + (image_center + (dot - 0.1) * pixels_per_mrad, line_y - 0.1 * pixels_per_mrad), + (image_center + (dot + 0.1) * pixels_per_mrad, line_y + 0.1 * pixels_per_mrad) + ], fill=(0, 0, 0)) + d.ellipse([ + (image_center + (-dot - 0.1) * pixels_per_mrad, line_y - 0.1 * pixels_per_mrad), + (image_center + (-dot + 0.1) * pixels_per_mrad, line_y + 0.1 * pixels_per_mrad) + ], fill=(0, 0, 0)) + if (y % 2 == 0): + d.text((image_center + (dot_count + 0.85) * pixels_per_mrad, line_y - 0.3 * pixels_per_mrad), f"{y}", font=fnt, fill=(0, 0, 0)) + if (y >= 10): dot_count += 0.2 + d.text((image_center - (dot_count + 1.15) * pixels_per_mrad, line_y - 0.3 * pixels_per_mrad), f"{y}", font=fnt, fill=(0, 0, 0)) + +if (supersample > 1): + out = out.resize((4096, 4096)) + + +output_filename = f"mrad_{final_scale}_ca.png" +out.show() +out.save(output_filename) +print(f"written to {output_filename}") diff --git a/addons/xm157/functions/fnc_ballistics_calculator.sqf b/addons/xm157/functions/fnc_ballistics_calculator.sqf new file mode 100644 index 0000000000..41dfbcc530 --- /dev/null +++ b/addons/xm157/functions/fnc_ballistics_calculator.sqf @@ -0,0 +1,101 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror, Ruthberg (Based on ace_atragmx_fnc_calculate_solution) + * Calculates elevation and windage + * + * Arguments: + * 0: Range + * 1: Direction of Fire (deg) - Yaw + * 2: Inlination (deg) - Pitch + * 3: Bank (deg) - Roll + * + * Return Value: + * Elevation and Windage in MRAD + * + * Example: + * [500, 90, 0, 0] call ace_xm157_fnc_ballistics_calculator + * + * Public: No + */ + +params ["_targetRange", "_directionOfFire", "_inclinationAngle", "_bank"]; + +private _weaponInfo = [] call FUNC(ballistics_getData); +if (_weaponInfo isEqualTo []) exitWith { [0,0] }; +_weaponInfo params ["_scopeBaseAngle","_boreHeight","_airFriction","_muzzleVelocity","_bc", + "_dragModel","_atmosphereModel","_barrelTwist","_twistDirection","_caliber","_bulletLength","_bulletMass"]; + +private _latitude = GVAR(data) getOrDefault ["latitude", 0]; + +// Get Wind +private _windSpeed = GVAR(data) getOrDefault ["wind_speed", 0]; +private _windDirection = 22.5 * (GVAR(data) getOrDefault ["wind_dir", 0]); +private _wind = [sin (_directionOfFire-_windDirection) * _windSpeed, -cos (_directionOfFire-_windDirection) * _windSpeed, 0]; + +// Get atmosphere +private _altitude = (getPosASL ace_player) select 2; +private _relativeHumidity = EGVAR(weather,currentHumidity); +private _temperature = _altitude call EFUNC(weather,calculateTemperatureAtHeight); +private _barometricPressure = _altitude call EFUNC(weather,calculateBarometricPressure); + + +private _bulletPos = [0,0,-(_boreHeight / 100)]; +private _lastBulletPos = +_bulletPos; +private _bulletVelocity = [0,Cos(_scopeBaseAngle) * _muzzleVelocity,Sin(_scopeBaseAngle) * _muzzleVelocity]; +private _gravity = [-sin (_bank) * cos(_scopeBaseAngle + _inclinationAngle) * -GRAVITY, + sin(_scopeBaseAngle + _inclinationAngle) * -GRAVITY, + cos (_bank) * cos(_scopeBaseAngle + _inclinationAngle) * -GRAVITY]; + +private _useAB = missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]; +if (_useAB) then { + _bc = parseNumber(("ace_advanced_ballistics" callExtension format["atmosphericCorrection:%1:%2:%3:%4:%5", _bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel])); +}; + +private _deltaT = 1 / 60; +private _TOF = 0; // Limit TOF to 5 seconds! +while {(_TOF < 5) && {(_bulletPos # 1) < _targetRange}} do { + private _trueVelocity = _bulletVelocity vectorDiff _wind; + private _trueSpeed = vectorMagnitude _trueVelocity; + + private _bulletAccel = if (_useAB) then { + private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3:%4", _dragModel, _bc, _trueSpeed, _temperature])); + (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag); + } else { + _trueVelocity vectorMultiply (_trueSpeed * _airFriction); + }; + _bulletAccel = _bulletAccel vectorAdd _gravity; + _lastBulletPos = _bulletPos; + _bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply (_deltaT * 0.5)); + _bulletVelocity = _bulletVelocity vectorAdd (_bulletAccel vectorMultiply _deltaT); + _bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply (_deltaT * 0.5)); + + _TOF = _TOF + _deltaT; +}; + +private _tx = (_lastBulletPos select 0) + (_targetRange - (_lastBulletPos select 1)) * ((_bulletPos select 0) - (_lastBulletPos select 0)) / ((_bulletPos select 1) - (_lastBulletPos select 1)); +private _tz = (_lastBulletPos select 2) + (_targetRange - (_lastBulletPos select 1)) * ((_bulletPos select 2) - (_lastBulletPos select 2)) / ((_bulletPos select 1) - (_lastBulletPos select 1)); +private _elevation = - atan(_tz / _targetRange); +private _windage = - atan(_tx / _targetRange); + + +if (_useAB && {(_bulletPos select 1) > 0}) then { + // Coriolis + private _horizontalDeflection = 0.0000729 * (_bulletPos select 1) * _TOF * sin(_latitude); + private _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); + _windage = _windage + _horizontalCoriolis; + // Eoetvoes + private _eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -GRAVITY) * cos(_latitude) * sin(_directionOfFire); + private _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; + private _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); + _elevation = _elevation + _verticalCoriolis; + // Spin drift + private _stabilityFactor = 1.5; + if (_caliber * _bulletLength * _bulletMass * _barrelTwist > 0) then { + _stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor); + }; + private _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; + private _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); + private _windage = _windage + _spinDrift; +}; + +[17.453*_elevation, 17.453*_windage] // Convert to MRAD and return diff --git a/addons/xm157/functions/fnc_ballistics_getData.sqf b/addons/xm157/functions/fnc_ballistics_getData.sqf new file mode 100644 index 0000000000..c0d1eed3bf --- /dev/null +++ b/addons/xm157/functions/fnc_ballistics_getData.sqf @@ -0,0 +1,62 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror, Ruthberg (Based on ace_atragmx) + * Gets ballistic info for a weapon, mag and ammo + * + * Arguments: + * None + * + * Return Value: + * Weapon Info + * + * Example: + * [] call ace_xm157_fnc_ballistics_getData + * + * Public: No + */ + +private _unit = ace_player; +private _weaponClass = primaryWeapon _unit; +private _magazineClass = (primaryWeaponMagazine _unit) param [0, ""]; +private _ammoClass = getText (configFile >> "CfgMagazines" >> _magazineClass >> "ammo"); + +private _key = format ["weaponInfoCache-%1-%2-%3",_weaponClass,_magazineClass,_ammoClass]; +private _weaponInfo = GVAR(data) getOrDefault [_key, []]; +if ((_weaponInfo isEqualTo []) && {_magazineClass != ""}) then { + TRACE_3("new weapon/mag",_weaponClass,_magazineClass,_ammoClass); + private _useABConfig = (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]); + + private _zeroRange = 100; + private _boreHeight = [_unit, 0] call EFUNC(scopes,getBoreHeight); + + private _ammoConfig = _ammoClass call EFUNC(advanced_ballistics,readAmmoDataFromConfig); + _ammoConfig params ["_airFriction","_caliber","_bulletLength","_bulletMass","","_dragModel","_ballisticCoefficients","","_atmosphereModel","","_muzzleVelocityTable","_barrelLengthTable"]; + private _weaponConfig = _weaponClass call EFUNC(advanced_ballistics,readWeaponDataFromConfig); + _weaponConfig params ["_barrelTwist", "_twistDirection", "_barrelLength"]; + private _bc = if (_ballisticCoefficients isEqualTo []) then { 0 } else { _ballisticCoefficients # 0 }; + + // Get Muzzle Velocity + private _muzzleVelocity = if (_barrelLength > 0 && _useABConfig && {_bc != 0}) then { + [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift) + } else { + private _initSpeed = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "initSpeed"); + private _initSpeedCoef = getNumber (configFile >> "CfgWeapons" >> _weaponClass >> "initSpeed"); + if (_initSpeedCoef < 0) then { + _initSpeed = _initSpeed * -_initSpeedCoef; + }; + if (_initSpeedCoef > 0) then { + _initSpeed = _initSpeedCoef; + }; + _initSpeed + }; + + // Scope Base Angle + private _zeroAngle = "ace_advanced_ballistics" callExtension format ["calcZero:%1:%2:%3:%4", _zeroRange, _muzzleVelocity, _airFriction, _boreHeight]; + private _scopeBaseAngle = parseNumber _zeroAngle; + + _weaponInfo = [_scopeBaseAngle,_boreHeight,_airFriction,_muzzleVelocity,_bc,_dragModel,_atmosphereModel,_barrelTwist,_twistDirection,_caliber,_bulletLength,_bulletMass]; + GVAR(data) set [_key, _weaponInfo]; + TRACE_1("setting cache",_weaponInfo); +}; + +_weaponInfo diff --git a/addons/xm157/functions/fnc_keyPress.sqf b/addons/xm157/functions/fnc_keyPress.sqf new file mode 100644 index 0000000000..36220f493c --- /dev/null +++ b/addons/xm157/functions/fnc_keyPress.sqf @@ -0,0 +1,67 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Handles key presses + * + * Arguments: + * 0: Type + * 1: IsKeyDown + * + * Return Value: + * Handled + * + * Example: + * ["range", true] call ace_xm157_fnc_keyPress + * + * Public: No + */ + +params ["_func", "_keyDown"]; + +if (!GVAR(shown)) exitWith { false }; // fast exit if not shown +if (!([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith))) exitWith { false }; +if (!(ACE_player call CBA_fnc_canUseWeapon)) exitWith { false }; + +private _display = uinamespace getVariable [QGVAR(display), displayNull]; +if (isNull _display) exitWith { ERROR("keyPress-no display"); false }; + +if (_keyDown) then { playSound QGVAR(click); }; +GVAR(data) set ["lastInputTime", CBA_missionTime]; + +call { + if (_func == "range") exitWith { + if (_keyDown) then { + GVAR(data) set ["range_keyDownStart", CBA_missionTime]; + } else { + private _holdTime = CBA_missionTime - (GVAR(data) getOrDefault ["range_keyDownStart", 0]); + private _range = 0; + if (_holdTime < 0.5) then { + private _distance = round parseNumber ctrlText (_display displayCtrl 151); + if (_distance > 10 && {_distance < RANGEFINDER_MAX}) then { + _range = _distance; + } else { + _range = -1; // bad return + }; + }; + TRACE_1("Updating range",_range); + GVAR(data) set ["range", _range]; + }; + }; + if (!_keyDown) exitWith {}; + + GVAR(data) set ["menu_updated", true]; + private _index = GVAR(data) getOrDefault ["menu_index", 0]; + if (_func in ["left", "right"]) exitWith { + _index = (_index + ([-1, 1] select (_func == "right")) + count GVAR(menu)) % count GVAR(menu); + GVAR(data) set ["menu_index", _index]; + }; + (GVAR(menu) # _index) params ["", "_var", "_thing", ["_upAction", {}], ["_downAction", {}]]; + if (_func == "up") exitWith { + [_index, _var, _thing] call _upAction; + }; + if (_func == "down") exitWith { + [_index, _var, _thing] call _downAction; + }; +}; + +true diff --git a/addons/xm157/functions/fnc_weaponInfo_draw.sqf b/addons/xm157/functions/fnc_weaponInfo_draw.sqf new file mode 100644 index 0000000000..c6b89712d4 --- /dev/null +++ b/addons/xm157/functions/fnc_weaponInfo_draw.sqf @@ -0,0 +1,144 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Draw3D event handler when scope is active + * + * Arguments: + * None (implicit vars from missionEventHandler) + * + * Return Value: + * None + * + * Example: + * [] call ace_xm157_fnc_weaponInfo_draw + * + * Public: No + */ + +//IGNORE_PRIVATE_WARNING ["_thisArgs", "_thisEventHandler"]; // from missionEventHandler +_thisArgs params ["_display"]; +if (isNull _display) exitWith { + TRACE_1("cleaning up display",_thisEventHandler); + GVAR(shown) = false; + removeMissionEventHandler ["Draw3D", _thisEventHandler]; +}; +private _ctrlScopeObject = _display displayCtrl IDC_SCOPE_OBJECT; +private _ctrlScreenObject = _display displayCtrl IDC_SCREEN_OBJECT; + + +// Hide everything when not in scope +private _isUsingOptic = ctrlShown (_display displayCtrl 154); +if (!_isUsingOptic) exitWith { + _ctrlScopeObject ctrlShow false; + _ctrlScreenObject ctrlShow false; +}; +_ctrlScopeObject ctrlShow true; +_ctrlScreenObject ctrlShow true; +BEGIN_COUNTER(draw); + +// Get common info +private _weaponVec = ace_player weaponDirection currentWeapon ace_player; +(_weaponVec call CBA_fnc_vect2Polar) params ["", "_weaponDir", "_weaponPitch"]; +private _weaponBank = call cba_optics_fnc_gunBank; +private _viewBank = _weaponBank; +if (isWeaponDeployed [player, true]) then { // prone deploy tilting is special (screen doesn't tilt, but player does) + _weaponBank = (((vectorUp ace_player) vectorCrossProduct _weaponVec) call CBA_fnc_vect2Polar) # 2; // I think this is right? +}; + +(0.25 call CBA_fnc_getFov) params ["_fov", "_zoom"]; +private _fovMRAD = 1000 * _fov; // Real MRAD (not mils) +private _nonMagnified = _zoom < 1.1; +private _range = GVAR(data) getOrDefault ["range", 0]; +private _needsUpdate = GVAR(data) getOrDefault ["menu_updated", true]; // Updated when a menu item changed +private _timeSinceLastInput = CBA_missionTime - (GVAR(data) getOrDefault ["lastInputTime", 0]); + + +// Bank-tilt display objects +_ctrlScopeObject ctrlSetModelDirAndUp [[0,1,0],[sin _viewBank,0,cos _viewBank]]; +_ctrlScreenObject ctrlSetModelDirAndUp [[0,1,0],[sin _viewBank,0,cos _viewBank]]; + + +// Scope - Handle etched reticle +private _retTex = QPATHTOF(data\mrad_10_ca.paa); +private _retScale = 4096/10; // texureResolution / (px/MRAD) +switch (true) do { + case (_fovMRAD < 4096/40): { + _retTex = QPATHTOF(data\mrad_40_ca.paa); + _retScale = 4096/40; + }; + case (_fovMRAD < 4096/20): { + _retTex = QPATHTOF(data\mrad_20_ca.paa); + _retScale = 4096/20; + }; +}; +private _scale = 1 / (getResolution # 5); +_scale = 2 * _scale * _retScale / _fovMRAD; +_ctrlScopeObject ctrlSetModelScale _scale; +private _ctrlScopeReticle = _display displayCtrl IDC_SCOPE_RETICLE; +if (_retTex != ctrlText _ctrlScopeReticle) then { _ctrlScopeReticle ctrlSetText _retTex; }; + + +// Screen - Draw menu +[_display, _needsUpdate] call FUNC(weaponInfo_drawMenu); + + +// Screen - Show range info +private _rangeInfo = _range call { + if (_range == 0) exitWith { "" }; + if (_range < 0) exitWith { // range error - blink if recent + if ((_timeSinceLastInput < 3) && {(floor (4*_timeSinceLastInput)) % 2 == 1}) then { "----" } else { "" }; + }; + format ["%1 m", _range toFixed 0] +}; +private _ctrl = _display displayCtrl IDC_SCREEN_TEXT_UPPER_RIGHT; +_ctrl ctrlSetText _rangeInfo; + + +// Screen - Show bearing info +private _bearingInfo = call { + private _bearingSetting = GVAR(data) getOrDefault ["bearing_show", 0]; + if ((_bearingSetting == 2) && {_timeSinceLastInput > 2}) exitWith { "" }; + if ((_bearingSetting == 1)) exitWith { format ["%1", floor (17.777777 * _weaponDir)]; }; // (6400 Mils, not MRAD) + format ["%1°", floor _weaponDir]; +}; +private _ctrl = _display displayCtrl IDC_SCREEN_TEXT_UPPER_LEFT; +_ctrl ctrlSetText _bearingInfo; + + +// Screen - update reticle type based on settings and zoom level +private _ctrl = _display displayCtrl IDC_SCREEN_RETICLE; +private _lastMagnified = GVAR(data) getOrDefault ["reticle_cache_lastMag", true]; +private _size = GVAR(data) getOrDefault ["reticle_cache_size", 1]; +if (_needsUpdate || {_nonMagnified isNotEqualTo _lastMagnified}) then { + private _tex = ""; + if (_nonMagnified) then { + switch (GVAR(data) getOrDefault ["reticle_cqb", 0]) do { + case (0): { _tex = "\a3\weapons_f\acc\data\collimdot_dot_red_ca.paa"; _size = 1; }; + case (1): { _tex = "\a3\weapons_f\acc\data\collimdot_dot_red_ca.paa"; _size = 2; }; + case (2): { _tex = "\a3\weapons_f\acc\data\collimdot_circle_red_ca.paa"; _size = 1; }; + case (3): { _tex = "\a3\weapons_f\acc\data\collimdot_dot_green_ca.paa"; _size = 1; }; + case (4): { _size = 0; }; + }; + } else { + _tex = "\a3\weapons_f\acc\data\collimdot_dot_red_ca.paa"; _size = 1; + }; + _ctrl ctrlSetText _tex; + GVAR(data) set ["reticle_cache_lastMag", _nonMagnified]; + GVAR(data) set ["reticle_cache_size", _size]; +}; + + +// Screen - update reticle position based on ballistics computer +if (_range > 0 && {_size > 0}) then { + BEGIN_COUNTER(ballistics_calculator); + ([_range, _weaponDir, _weaponPitch, _weaponBank] call FUNC(ballistics_calculator)) params ["_elevMRAD", "_windMRAD"]; + END_COUNTER(ballistics_calculator); + _ctrl ctrlSetPosition [-_windMRAD / _fovMRAD + 0.5 - _size / 2, + 4/3 * (_elevMRAD / _fovMRAD + 0.5 - _size/2), _size, _size*4/3]; + _ctrl ctrlCommit 0; +} else { + _ctrl ctrlSetPosition [0.5 - _size / 2, + 4/3 * (0.5 - _size/2), _size, _size*4/3]; + _ctrl ctrlCommit 0; +}; + + +END_COUNTER(draw); diff --git a/addons/xm157/functions/fnc_weaponInfo_drawMenu.sqf b/addons/xm157/functions/fnc_weaponInfo_drawMenu.sqf new file mode 100644 index 0000000000..63ebe540ef --- /dev/null +++ b/addons/xm157/functions/fnc_weaponInfo_drawMenu.sqf @@ -0,0 +1,81 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Updates the menu display + * + * Arguments: + * 0: Display + * 1: Menu Item Needs Updating + * + * Return Value: + * None + * + * Example: + * [display, true] call ace_xm157_fnc_weaponInfo_drawMenu + * + * Public: No + */ + +params ["_display", "_needsUpdate"]; + +if (isNil QGVAR(menu)) then { + private _arrayUp = { + params ["", "_var", "_thing"]; + private _value = GVAR(data) getOrDefault [_var, 0]; + private _value = (_value + 1 + count _thing) % count _thing; + GVAR(data) set [_var, _value]; + }; + private _arrayDown = { + params ["", "_var", "_thing"]; + private _value = GVAR(data) getOrDefault [_var, 0]; + _value = (_value - 1 + count _thing) % count _thing; + GVAR(data) set [_var, _value]; + }; + private _rangeUp = { + private _range = GVAR(data) getOrDefault ["range", -1]; + if (_range < 0) then { _range = 0; }; + _range = RANGEFINDER_MAX min (100 + 100 * floor (_range/100)); + GVAR(data) set ["range", _range]; + }; + private _rangeDown = { + private _range = GVAR(data) getOrDefault ["range", -1]; + if (_range < 0) then { _range = 0; }; + _range = 0 max (-100 + 100 * ceil (_range/100)); + GVAR(data) set ["range", _range]; + }; + private _atmosphereInfo = { + private _altitude = (getPosASL ace_player) select 2; + private _relativeHumidity = EGVAR(weather,currentHumidity); + private _temperature = _altitude call EFUNC(weather,calculateTemperatureAtHeight); + private _barometricPressure = _altitude call EFUNC(weather,calculateBarometricPressure); // hPA + format ["%1%2 %3%4 %5hPA", _temperature toFixed 1, "°C", _relativeHumidity toFixed 1, "%", _barometricPressure toFixed 0] + }; + GVAR(menu) = [ + ["", "", [""], _rangeUp, _rangeDown], + ["Wind Speed (m/s)", "wind_speed", ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"], _arrayUp, _arrayDown], + ["Wind Direction", "wind_dir", ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"], _arrayUp, _arrayDown], + // ["CQB Reticle", "reticle_cqb", ["2 MOA Red Dot", "4 MOA Red Dot", "Off"], _arrayUp, _arrayDown], + ["Bearing Display", "bearing_show", ["Degrees", "Mils", "Off"], _arrayUp, _arrayDown], + ["Atmosphere", "", _atmosphereInfo, {}, {}] + ]; +}; + + +private _index = GVAR(data) getOrDefault ["menu_index", 0]; +(GVAR(menu) # _index) params ["_title", "_var", "_thing"]; +if ((!_needsUpdate) && {_thing isEqualType []}) exitWith {}; + +private _ctrlMenuText = _display displayCtrl IDC_SCREEN_MENU_TEXT; +private _text = ""; +if (_index != 0) then { + if (_thing isEqualType []) then { + GVAR(data) set ["menu_updated", false]; + private _value = GVAR(data) getOrDefault [_var, 0]; + _text = _title + "\n" + "<" + (_thing param [_value, "#BadIndex"]) + ">"; + } else { + _text = _title + "\n" + ([_var] call _thing); + }; +}; +_ctrlMenuText ctrlSetText _text; + +GVAR(data) set ["menu_updated", false]; diff --git a/addons/xm157/functions/fnc_weaponInfo_onLoad.sqf b/addons/xm157/functions/fnc_weaponInfo_onLoad.sqf new file mode 100644 index 0000000000..3fb82c756e --- /dev/null +++ b/addons/xm157/functions/fnc_weaponInfo_onLoad.sqf @@ -0,0 +1,83 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Creates UI + * + * Arguments: + * 0: Display + * + * Return Value: + * None + * + * Example: + * [display] call ace_xm157_fnc_weaponInfo_onLoad + * + * Public: No + */ + +params ["_display"]; +TRACE_1("weaponInfo_onLoad",_display); + +uinamespace setVariable [QGVAR(display), _display]; +[_display, true] call cba_optics_fnc_loadScriptedOptic; // pass thru to cba + + +// Setup the scope object +private _ctrlScopeObject = _display displayCtrl IDC_SCOPE_OBJECT; +private _scale = 1 / (getResolution # 5); // keep object the same size for any interface size +private _distance = 2.0 * 4/3; +if ((getResolution # 4) < (4/3)) then { _distance = _distance * (getResolution # 7); }; // eg 5x4 +private _base = ["3d", [0,0,_distance], _scale] call EFUNC(common,rscObjectHelper); +_ctrlScopeObject ctrlSetPosition _base; +_ctrlScopeObject ctrlSetModelScale _scale; +_ctrlScopeObject ctrlSetModelDirAndUp [[0,1,0],[0,0,1]]; +_ctrlScopeObject ctrlShow true; + +private _ctrlScopeGroup = _display displayCtrl IDC_SCOPE_GROUP; +// Add reticle +private _ctrlScopeReticle = _display ctrlCreate ["RscPicture", IDC_SCOPE_RETICLE, _ctrlScopeGroup]; +_ctrlScopeReticle ctrlSetPosition [0, 0, 1, 4/3]; +_ctrlScopeReticle ctrlCommit 0; + + +// Setup the screen object +private _ctrlScreenObject = _display displayCtrl IDC_SCREEN_OBJECT; +private _scale = 1 / (getResolution # 5); // keep object the same size for any interface size +private _distance = 4/3; +if ((getResolution # 4) < (4/3)) then { _distance = _distance * (getResolution # 7); }; // eg 5x4 +private _base = ["3d", [0,0,_distance], _scale] call EFUNC(common,rscObjectHelper); +_ctrlScreenObject ctrlSetPosition _base; +_ctrlScreenObject ctrlSetModelScale _scale; +_ctrlScreenObject ctrlSetModelDirAndUp [[0,1,0],[0,0,1]]; +_ctrlScreenObject ctrlShow true; + +private _ctrlScreenGroup = _display displayCtrl IDC_SCREEN_GROUP; +// Info display +private _ctrl = _display ctrlCreate [QGVAR(text), IDC_SCREEN_TEXT_UPPER_LEFT, _ctrlScreenGroup]; +_ctrl ctrlSetPosition [0.3, 0.2, 0.25, 0.25]; +_ctrl ctrlCommit 0; +private _ctrl = _display ctrlCreate [QGVAR(text), IDC_SCREEN_TEXT_UPPER_RIGHT, _ctrlScreenGroup]; +_ctrl ctrlSetPosition [0.7, 0.2, 0.25, 0.25]; +_ctrl ctrlCommit 0; +// Menu +private _ctrlMenuText = _display ctrlCreate [QGVAR(textMenu), IDC_SCREEN_MENU_TEXT, _ctrlScreenGroup]; +_ctrlMenuText ctrlSetPosition [0.1, 0.45, 0.8, 0.7]; +_ctrlMenuText ctrlCommit 0; + + +// Add screen reticle +private _ctrl = _display ctrlCreate ["RscPicture", IDC_SCREEN_RETICLE, _ctrlScreenGroup]; + + +// Add dummy idcs for dist/angle from engine +// 151=Dist, 156=Heading, 182=Pitch, +private _ctrl = _display ctrlCreate ["RscText", 151]; // IDC_IGUI_WEAPON_DISTANCE +_ctrl ctrlSetPosition [-1, -1, 0, 0]; +_ctrl ctrlCommit 0; +private _ctrl = _display displayCtrl 168; // hide ca_zeroing (from cba) +_ctrl ctrlShow false; + + +GVAR(shown) = true; +GVAR(data) set ["menu_updated", true]; +addMissionEventHandler ["Draw3D", LINKFUNC(weaponInfo_draw), [_display]]; diff --git a/addons/xm157/functions/script_component.hpp b/addons/xm157/functions/script_component.hpp new file mode 100644 index 0000000000..3c08948f71 --- /dev/null +++ b/addons/xm157/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\xm157\script_component.hpp" diff --git a/addons/xm157/script_component.hpp b/addons/xm157/script_component.hpp new file mode 100644 index 0000000000..432fb05830 --- /dev/null +++ b/addons/xm157/script_component.hpp @@ -0,0 +1,24 @@ +#define COMPONENT xm157 +#define COMPONENT_BEAUTIFIED XM157 Fire Control Scope +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS +// #define ENABLE_QUICK_TESTING + +#include "\z\ace\addons\main\script_macros.hpp" + +#define RANGEFINDER_MAX 5000 + +#define IDC_SCOPE_OBJECT 7000 +#define IDC_SCOPE_GROUP 7001 +#define IDC_SCOPE_RETICLE 7201 + +#define IDC_SCREEN_OBJECT 8000 +#define IDC_SCREEN_GROUP 8001 +#define IDC_SCREEN_MENU_TEXT 8201 +#define IDC_SCREEN_TEXT_UPPER_LEFT 8202 +#define IDC_SCREEN_TEXT_UPPER_RIGHT 8203 +#define IDC_SCREEN_RETICLE 8204 + diff --git a/addons/xm157/sounds/click.wav b/addons/xm157/sounds/click.wav new file mode 100644 index 0000000000000000000000000000000000000000..efc08e62d1187af84d6043662f8d3904a872315b GIT binary patch literal 35864 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 Kv@oKU{{H~Ay^}ov literal 0 HcmV?d00001 diff --git a/addons/xm157/stringtable.xml b/addons/xm157/stringtable.xml new file mode 100644 index 0000000000..761d11def9 --- /dev/null +++ b/addons/xm157/stringtable.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/wiki/framework/xm157-framework.md b/docs/wiki/framework/xm157-framework.md new file mode 100644 index 0000000000..350dc55ed7 --- /dev/null +++ b/docs/wiki/framework/xm157-framework.md @@ -0,0 +1,56 @@ +--- +layout: wiki +title: XM157 Framework +description: Explains how to add the XM157 scope framework +group: framework +order: 5 +parent: wiki +mod: ace +version: + major: 5 + minor: 1 + patch: 0 +--- + +## 1. Config Values + + +```cpp +class CfgWeapons { + class ItemCore; + class InventoryOpticsItem_Base_F; + + class your_XM157: ItemCore { + class CBA_ScriptedOptic { + bodyTexture = "\z\ace\addons\xm157\data\ace_vector_body_co.paa"; + bodyTextureSize = 1; + hideMagnification = 1; + disableTilt = 0; + }; + weaponInfoType = "ace_xm157_info"; + class ItemInfo: InventoryOpticsItem_Base_F { + modelOptics = "\x\cba\addons\optics\cba_optic_big_100.p3d"; + class OpticsModes { + class optic { + opticsID=1; + useModelOptics=1; + opticsPPEffects[]={ "OpticsCHAbera1", "OpticsBlur1" }; + opticsZoomMin = "8 call (uiNamespace getVariable 'cba_optics_fnc_setOpticMagnificationHelper')"; + opticsZoomMax = "1 call (uiNamespace getVariable 'cba_optics_fnc_setOpticMagnificationHelper')"; + opticsZoomInit = "1 call (uiNamespace getVariable 'cba_optics_fnc_setOpticMagnificationHelper')"; + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + distanceZoomMin=100; + distanceZoomMax=100; + memoryPointCamera="opticView"; + visionMode[] = {"Normal"}; + opticsFlare=1; + opticsDisablePeripherialVision=1; + cameraDir=""; + }; + }; + }; + }; +}; + +``` From c633a199b4020575ccfa815b96c2749a8253de6a Mon Sep 17 00:00:00 2001 From: ace3mod Date: Thu, 1 Sep 2022 20:45:00 +0200 Subject: [PATCH 46/92] [Docs] Update component dependencies Automatically committed through CI. [ci skip] --- docs/_includes/dependencies_list.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index a3705deeee..ad31f2bb31 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -583,6 +583,11 @@ - `ace_common` {% endif %} +{% if include.component == "xm157" %} +- `ace_advanced_ballistics` +- `ace_scopes` +{% endif %} + {% if include.component == "yardage450" %} - `ace_apl` - `ace_laser` From 3872eb0647df30a4e2a4490daa59db30221e7da2 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Thu, 1 Sep 2022 21:06:24 +0200 Subject: [PATCH 47/92] Add a way to block auto carry after unload on classes (#9013) --- addons/cargo/functions/fnc_unloadCarryItem.sqf | 4 ++-- docs/wiki/framework/cargo-framework.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/cargo/functions/fnc_unloadCarryItem.sqf b/addons/cargo/functions/fnc_unloadCarryItem.sqf index 36985b5425..c12f12cb52 100644 --- a/addons/cargo/functions/fnc_unloadCarryItem.sqf +++ b/addons/cargo/functions/fnc_unloadCarryItem.sqf @@ -19,7 +19,7 @@ params ["_unloader", "_object"]; TRACE_2("unloadCarryItem-start",_unloader,_object); if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {}; -if !(GVAR(carryAfterUnload)) exitWith {}; +if (!GVAR(carryAfterUnload) || {getNumber (configOf _object >> QGVAR(blockUnloadCarry)) > 0}) exitWith {}; // When unloading attached objects, this code will run before server has finished moving object to the safe position [{ @@ -36,5 +36,5 @@ if !(GVAR(carryAfterUnload)) exitWith {}; }; }, _this, 1.0, { // delay is based on how long it will take server event to trigger and take effect // not a hard error if this fails, could have just unloaded to other side of vehicle because of findSafePos - TRACE_1("unloadCarryItem-failed to unload nearby player",_this); + TRACE_1("unloadCarryItem-failed to unload nearby player",_this); }] call CBA_fnc_waitUntilAndExecute; diff --git a/docs/wiki/framework/cargo-framework.md b/docs/wiki/framework/cargo-framework.md index 1bdb7716fd..5b02f087be 100644 --- a/docs/wiki/framework/cargo-framework.md +++ b/docs/wiki/framework/cargo-framework.md @@ -33,6 +33,7 @@ class CfgVehicles { ace_cargo_size = 4; // Cargo space the object takes ace_cargo_canLoad = 1; // Enables the object to be loaded (1-yes, 0-no) ace_cargo_noRename = 1; // Blocks renaming object (1-blocked, 0-allowed) + ace_cargo_blockUnloadCarry = 1; // Blocks object from being automatically picked up by player on unload }; }; ``` From 44ac76f2cfe0eb18b47407bfa9dadbb9e51671eb Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 3 Sep 2022 05:49:07 -0500 Subject: [PATCH 48/92] xm157 - fix ab func (#9021) --- addons/xm157/functions/fnc_ballistics_calculator.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/xm157/functions/fnc_ballistics_calculator.sqf b/addons/xm157/functions/fnc_ballistics_calculator.sqf index 41dfbcc530..e017cd45b7 100644 --- a/addons/xm157/functions/fnc_ballistics_calculator.sqf +++ b/addons/xm157/functions/fnc_ballistics_calculator.sqf @@ -91,7 +91,7 @@ if (_useAB && {(_bulletPos select 1) > 0}) then { // Spin drift private _stabilityFactor = 1.5; if (_caliber * _bulletLength * _bulletMass * _barrelTwist > 0) then { - _stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call FUNC(calculateStabilityFactor); + _stabilityFactor = [_caliber, _bulletLength, _bulletMass, _barrelTwist, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); }; private _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; private _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); From dc3f6c66347b315de022859717c217561c9fd2a0 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 3 Sep 2022 05:49:39 -0500 Subject: [PATCH 49/92] RHS Compats - Minor cleanup (#9022) --- optionals/compat_rhs_afrf3/CfgVehicles.hpp | 4 ++-- optionals/compat_rhs_saf3/CfgVehicles.hpp | 18 +++++++++--------- optionals/compat_rhs_usf3/CfgVehicles.hpp | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 0b4190efb5..114c174c72 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -429,7 +429,7 @@ class CfgVehicles { "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", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", - "era_37_hitpoint", + "era_37_hitpoint" }; EGVAR(vehicle_damage,slatHitpoints)[] = { "SLAT_38_hitpoint", "SLAT_39_hitpoint", "SLAT_40_hitpoint", "SLAT_41_hitpoint" @@ -445,7 +445,7 @@ class CfgVehicles { "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", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", - "era_37_hitpoint", + "era_37_hitpoint" }; }; diff --git a/optionals/compat_rhs_saf3/CfgVehicles.hpp b/optionals/compat_rhs_saf3/CfgVehicles.hpp index 16fc0b23c3..722328d1e9 100644 --- a/optionals/compat_rhs_saf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_saf3/CfgVehicles.hpp @@ -9,7 +9,7 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_mine_mrud_a: ACE_Explosives_Place { - displayName = $STR_RHSSAF_MRUD_A_DISPLAYNAME; + displayName = "$STR_RHSSAF_MRUD_A_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\mines_ap\mrud\rhssaf_mrud_a_e"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -19,17 +19,17 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_mine_mrud_b: ACE_Explosives_Place_rhssaf_mine_mrud_a { - displayName = $STR_RHSSAF_MRUD_B_DISPLAYNAME; + displayName = "$STR_RHSSAF_MRUD_B_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\mines_ap\mrud\rhssaf_mrud_b_e"; }; class ACE_Explosives_Place_rhssaf_mine_mrud_c: ACE_Explosives_Place_rhssaf_mine_mrud_a { - displayName = $STR_RHSSAF_MRUD_C_DISPLAYNAME; + displayName = "$STR_RHSSAF_MRUD_C_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\mines_ap\mrud\rhssaf_mrud_c_e"; }; class ACE_Explosives_Place_rhssaf_mine_mrud_d: ACE_Explosives_Place_rhssaf_mine_mrud_a { - displayName = $STR_RHSSAF_MRUD_D_DISPLAYNAME; + displayName = "$STR_RHSSAF_MRUD_D_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\mines_ap\mrud\rhssaf_mrud_d_e"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -39,7 +39,7 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_mine_pma3: ACE_Explosives_Place { - displayName = $STR_RHSSAF_PMA3_DISPLAYNAME; + displayName = "$STR_RHSSAF_PMA3_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\mines_ap\pma\rhssaf_pma3_d"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -49,7 +49,7 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_mine_tma4: ACE_Explosives_Place { - displayName = $STR_RHSSAF_TMA4_DISPLAYNAME; + displayName = "$STR_RHSSAF_TMA4_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\mines_at\tma4\rhssaf_tma4_d"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -59,7 +59,7 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_tm100: ACE_Explosives_Place { - displayName = $STR_RHSSAF_TM100_DISPLAYNAME; + displayName = "$STR_RHSSAF_TM100_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\tm500\rhssaf_tm100_e"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -69,7 +69,7 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_tm200: ACE_Explosives_Place { - displayName = $STR_RHSSAF_TM200_DISPLAYNAME; + displayName = "$STR_RHSSAF_TM200_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\tm500\rhssaf_tm200_e"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -79,7 +79,7 @@ class CfgVehicles { }; class ACE_Explosives_Place_rhssaf_tm500: ACE_Explosives_Place { - displayName = $STR_RHSSAF_TM500_DISPLAYNAME; + displayName = "$STR_RHSSAF_TM500_DISPLAYNAME"; model = "\rhssaf\addons\rhssaf_m_explosives\tm500\rhssaf_tm500_e"; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { diff --git a/optionals/compat_rhs_usf3/CfgVehicles.hpp b/optionals/compat_rhs_usf3/CfgVehicles.hpp index 0575e47b6c..87d4c50dee 100644 --- a/optionals/compat_rhs_usf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_usf3/CfgVehicles.hpp @@ -326,7 +326,7 @@ class CfgVehicles { "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", "era_37_hitpoint", "era_38_hitpoint", "era_39_hitpoint", "era_40_hitpoint", - "era_41_hitpoint", "era_42_hitpoint", "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", + "era_41_hitpoint", "era_42_hitpoint", "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint" }; EGVAR(vehicle_damage,canHaveFireRing) = 1; }; @@ -341,7 +341,7 @@ class CfgVehicles { "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint", "era_37_hitpoint", "era_38_hitpoint", "era_39_hitpoint", "era_40_hitpoint", - "era_41_hitpoint", "era_42_hitpoint", "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", + "era_41_hitpoint", "era_42_hitpoint", "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint" }; EGVAR(vehicle_damage,canHaveFireRing) = 1; }; From 66801bb0ed192c82b8336ed5d180f076beff1615 Mon Sep 17 00:00:00 2001 From: Whigital Date: Sun, 4 Sep 2022 23:37:48 +0200 Subject: [PATCH 50/92] Goggles - Fix APR and Regulator overlays being flipped (#9009) --- addons/goggles/config.cpp | 3 +++ addons/goggles/functions/fnc_applyGlassesEffect.sqf | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index 4718662e62..5d33d5ea19 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -235,12 +235,15 @@ class CfgGlasses { ACE_OverlayCracked = ""; ACE_Resistance = 2; ACE_Protection = 1; + ACE_Overlay_Angle = 180; }; class G_AirPurifyingRespirator_02_base_F: G_AirPurifyingRespirator_01_base_F { ACE_Overlay = "a3\ui_f_enoch\data\objects\data\optics_APR_02_CA.paa"; }; class G_RegulatorMask_base_F: None { ACE_Overlay = "a3\ui_f_enoch\data\objects\data\optics_regulator_ca.paa"; + ACE_OverlayCracked = ""; + ACE_Overlay_Angle = 180; }; }; diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 4c0b8dd1df..cc9c69681d 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -44,10 +44,16 @@ if (_postProcessTintAmount != 0 && {GVAR(UsePP)} && GVAR(effects) in [1, 2]) the }; private _imagePath = getText (_config >> ["ACE_Overlay", "ACE_OverlayCracked"] select GETBROKEN); +private _angle = getNumber (_config >> "ACE_Overlay_Angle"); if (_imagePath != "") then { GVAR(GogglesLayer) cutRsc ["RscACE_Goggles", "PLAIN", 1, false]; - (GLASSDISPLAY displayCtrl 10650) ctrlSetText _imagePath; + private _overlay = (GLASSDISPLAY displayCtrl 10650); + _overlay ctrlSetText _imagePath; + + if ((_angle != 0) && {((ctrlAngle _overlay) # 0) != _angle}) then { + _overlay ctrlSetAngle [_angle, 0.5, 0.5, true]; + }; }; if (GVAR(effects) in [2, 3]) then { From a33907465947a167a0223ab86897c0461cade3e3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 4 Sep 2022 16:38:09 -0500 Subject: [PATCH 51/92] Tagging - Allow tagging vehicles (overwrite "clan" tag) (#8852) * Tagging - Allow tagging vehicles (overwrite "clan" tag, req 2.10) * Update addons/tagging/functions/fnc_createTag.sqf Co-authored-by: Neil Evers * fix var * set REQUIRED_VERSION to 2.10 * don't tag if veh has no valid selectionClan Co-authored-by: Neil Evers --- addons/main/script_mod.hpp | 2 +- addons/tagging/CfgVehicles.hpp | 11 +++++++++++ addons/tagging/functions/fnc_checkTaggable.sqf | 6 ++++++ addons/tagging/functions/fnc_createTag.sqf | 9 ++++++++- addons/tagging/functions/fnc_tag.sqf | 15 ++++++++++++--- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index bc75d35819..a7bcd0973b 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -10,7 +10,7 @@ #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 2.08 +#define REQUIRED_VERSION 2.10 #define REQUIRED_CBA_VERSION {3,15,7} #ifdef COMPONENT_BEAUTIFIED diff --git a/addons/tagging/CfgVehicles.hpp b/addons/tagging/CfgVehicles.hpp index 204e902641..8eef5c004c 100644 --- a/addons/tagging/CfgVehicles.hpp +++ b/addons/tagging/CfgVehicles.hpp @@ -53,6 +53,17 @@ class CfgVehicles { }; }; + class LandVehicle; + class Car: LandVehicle { + GVAR(canTag) = 1; + }; + class Tank: LandVehicle { + GVAR(canTag) = 1; + }; + class Air; + class Helicopter: Air { + GVAR(canTag) = 1; + }; class Item_Base_F; class ACE_Item_SpraypaintBlack: Item_Base_F { diff --git a/addons/tagging/functions/fnc_checkTaggable.sqf b/addons/tagging/functions/fnc_checkTaggable.sqf index f1364e3570..e6d8a7c90f 100644 --- a/addons/tagging/functions/fnc_checkTaggable.sqf +++ b/addons/tagging/functions/fnc_checkTaggable.sqf @@ -42,6 +42,12 @@ // If the class is alright, do not exit if (_object isKindOf "Static") exitWith {false}; + // Taggable vehicle, do not exit + if (((_object getVariable [QGVAR(canTag), getNumber (configOf _object >> QGVAR(canTag))]) in [1, true]) + && {getText (configOf _object >> "selectionClan") in selectionNames _object}) exitWith { + false + }; + // If the class is not categorized correctly search the cache private _modelName = (getModelInfo _object) select 0; private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false]; diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf index a993e6675f..feec84d312 100644 --- a/addons/tagging/functions/fnc_createTag.sqf +++ b/addons/tagging/functions/fnc_createTag.sqf @@ -10,6 +10,7 @@ * 3: Object it should be tied to * 4: Unit that created the tag * 5: Material of the tag (Optional) + * 6: Vehicle Tag (Optional) * * Return Value: * Tag created @@ -20,7 +21,7 @@ * Public: No */ -params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_object", "_unit", ["_material","",[""]], ["_tagModel", "UserTexture1m_F", [""]]]; +params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_object", "_unit", ["_material","",[""]], ["_tagModel", "UserTexture1m_F", [""]], ["_isVehicleTag", false, [false]]]; TRACE_5("createTag:",_tagPosASL,_vectorDirAndUp,_texture,_object,_unit); if (_texture == "") exitWith { @@ -28,6 +29,12 @@ if (_texture == "") exitWith { false }; +if (_isVehicleTag) exitWith { + TRACE_3("tagging vehicle",_object,typeOf _object,_texture); + _object setObjectTextureGlobal [getText (configOf _object >> "selectionClan"), _texture]; + // if (_material != "") then { _object setObjectMaterialGlobal ["clan", _material] }; // ?? +}; + private _tag = createSimpleObject [_tagModel, _tagPosASL]; _tag setObjectTextureGlobal [0, _texture]; if (_material != "") then { _tag setObjectMaterialGlobal [0, _material] }; diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index b476145c57..ce31e2360e 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -29,6 +29,7 @@ if (isNull _unit || {_texture == ""}) exitWith { ERROR_2("Tag parameters invalid. Unit: %1, Texture: %2",_unit,_texture); }; +private _isVehicleTag = false; private _startPosASL = eyePos _unit; private _cameraPosASL = AGLToASL positionCameraToWorld [0, 0, 0]; private _cameraDir = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _cameraPosASL; @@ -51,6 +52,13 @@ if ((!isNull _object) && { // If the class is alright, do not exit if (_object isKindOf "Static") exitWith {false}; + // Taggable vehicle, do not exit and tell server to change "clan" tag + if (((_object getVariable [QGVAR(canTag), getNumber (configOf _object >> QGVAR(canTag))]) in [1, true]) + && {getText (configOf _object >> "selectionClan") in selectionNames _object}) exitWith { + _isVehicleTag = true; + false + }; + // If the class is not categorized correctly search the cache private _modelName = (getModelInfo _object) select 0; private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false]; @@ -100,10 +108,11 @@ private _fnc_isOk = { true }; -if ( !([ 0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || +if ( (!_isVehicleTag) && { + !([ 0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || {!([ 0.5 * TAG_SIZE,-0.5 * TAG_SIZE] call _fnc_isOk) || {!([-0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || - {!([-0.5 * TAG_SIZE,-0.5 * TAG_SIZE] call _fnc_isOk)}}}) exitWith { + {!([-0.5 * TAG_SIZE,-0.5 * TAG_SIZE] call _fnc_isOk)}}}}) exitWith { TRACE_1("Unsuitable location:",_touchingPoint); false }; @@ -120,6 +129,6 @@ if ( !([ 0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || // Tell the server to create the tag and handle its destruction [QGVAR(createTag), _this] call CBA_fnc_serverEvent; -}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _texture, _object, _unit, _material, _tagModel], 0.6] call CBA_fnc_waitAndExecute; +}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _texture, _object, _unit, _material, _tagModel, _isVehicleTag], 0.6] call CBA_fnc_waitAndExecute; true From b97056f5273af21811735a51f9a7e96438c62d4c Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Sun, 4 Sep 2022 22:38:53 +0100 Subject: [PATCH 52/92] Add Budget update to wiki (#9024) --- docs/wiki/framework/fortify-framework.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/wiki/framework/fortify-framework.md b/docs/wiki/framework/fortify-framework.md index b76e806667..f4b272f872 100644 --- a/docs/wiki/framework/fortify-framework.md +++ b/docs/wiki/framework/fortify-framework.md @@ -67,7 +67,7 @@ class ACEX_Fortify_Presets { ``` Then you will have to set the mission preset to `myMissionObjects` by either using the Fortify editor module or the chat command: `#ace-fortify blufor myMissionObjects`. - + ## 1.3 Adding custom deploy handlers A custom deploy handler allows missions makers to decide if an object can be placed or not. @@ -82,6 +82,25 @@ To verify that an object isn't above a certain terrain height we can check the h }] call ace_fortify_fnc_addDeployHandler; ``` +## 1.4 Updating budget + +The Fortify budget can be updated for any side using the function. + +```sqf +* Updates the given sides budget. +* +* Arguments: +* 0: Side +* 1: Change (default: 0) +* 2: Display hint (default: true) +* +* Return Value: +* None +* +* Example: +* [west, -250, false] call ace_fortify_fnc_updateBudget +``` + ## 2. Events From 508e669e05a28099916a75cefcc39840f98c0510 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Mon, 5 Sep 2022 00:21:29 +0200 Subject: [PATCH 53/92] Trenches - Add modded Entrenching Tools support (#8999) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add support for other entrenching tools * Docs * Remove unused variable * Check unit weapons for entrenching tool `weapons` returns weapons in weapon slots and from all containers. * Update addons/trenches/README.md Co-authored-by: Jouni Järvinen * Support for shovel Backpacks * Update XEH_preStart.sqf * Add Arsenal "Entrenching Tool" stat Co-authored-by: Jouni Järvinen Co-authored-by: PabstMirror --- addons/trenches/ACE_Arsenal_Stats.hpp | 13 +++++ addons/trenches/CfgWeapons.hpp | 2 + addons/trenches/README.md | 16 +----- addons/trenches/XEH_PREP.hpp | 1 + addons/trenches/XEH_preInit.sqf | 2 + addons/trenches/XEH_preStart.sqf | 6 ++ addons/trenches/config.cpp | 1 + .../functions/fnc_canCamouflageTrench.sqf | 2 +- .../fnc_canContinueDiggingTrench.sqf | 2 +- .../trenches/functions/fnc_canDigTrench.sqf | 2 +- .../functions/fnc_canRemoveTrench.sqf | 2 +- .../functions/fnc_continueDiggingTrench.sqf | 2 +- .../fnc_handlePlayerInventoryChanged.sqf | 2 +- .../functions/fnc_hasEntrenchingTool.sqf | 26 +++++++++ .../trenches/functions/fnc_removeTrench.sqf | 2 +- docs/wiki/framework/trenches-framework.md | 57 +++++++++++++++++++ 16 files changed, 118 insertions(+), 20 deletions(-) create mode 100644 addons/trenches/ACE_Arsenal_Stats.hpp create mode 100644 addons/trenches/functions/fnc_hasEntrenchingTool.sqf create mode 100644 docs/wiki/framework/trenches-framework.md diff --git a/addons/trenches/ACE_Arsenal_Stats.hpp b/addons/trenches/ACE_Arsenal_Stats.hpp new file mode 100644 index 0000000000..ab467ea588 --- /dev/null +++ b/addons/trenches/ACE_Arsenal_Stats.hpp @@ -0,0 +1,13 @@ +class EGVAR(arsenal,stats) { + class statBase; + class GVAR(entrenchingTool): statBase { + scope = 2; + priority = -1; + stats[] = {QGVAR(entrenchingTool)}; + displayName = CSTRING(EntrenchingToolName); + showText = 1; + textStatement = QUOTE(localize 'STR_ACE_Common_Yes'); // using localization macros in QUOTE is a PITA + condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) > 0); + tabs[] = {{0,1,5}, {7}}; + }; +}; diff --git a/addons/trenches/CfgWeapons.hpp b/addons/trenches/CfgWeapons.hpp index de79bc277f..4e14153a1b 100644 --- a/addons/trenches/CfgWeapons.hpp +++ b/addons/trenches/CfgWeapons.hpp @@ -12,5 +12,7 @@ class CfgWeapons { class ItemInfo: CBA_MiscItem_ItemInfo { mass = 10; }; + + GVAR(entrenchingTool) = 1; }; }; diff --git a/addons/trenches/README.md b/addons/trenches/README.md index 0d33527da4..cd19758221 100644 --- a/addons/trenches/README.md +++ b/addons/trenches/README.md @@ -1,17 +1,7 @@ ace_trenches ================= -Adds item 'ACE_entrenchingtool' +Provides players with the capability of digging trenches. + +Adds item 'ACE_EntrenchingTool' Adds 2 trenches; Envelope - Small & Envelop - Big - -### Whitelist surfaces for digging -Single surfaces can be whitelisted by adding `ACE_canDig = 1` into `CfgSurfaces`. -Example: -```cpp -class CfgSurfaces { - class myAwesomeSurface { - ACE_canDig = 1; - }; -}; -``` - diff --git a/addons/trenches/XEH_PREP.hpp b/addons/trenches/XEH_PREP.hpp index bace06f625..05eb403fd8 100644 --- a/addons/trenches/XEH_PREP.hpp +++ b/addons/trenches/XEH_PREP.hpp @@ -11,6 +11,7 @@ PREP(handlePlayerChanged); PREP(handlePlayerInventoryChanged); PREP(handleScrollWheel); PREP(handleUnconscious); +PREP(hasEntrenchingTool); PREP(placeCancel); PREP(placeConfirm); PREP(placeTrench); diff --git a/addons/trenches/XEH_preInit.sqf b/addons/trenches/XEH_preInit.sqf index 9361d05015..47d20d7c2b 100644 --- a/addons/trenches/XEH_preInit.sqf +++ b/addons/trenches/XEH_preInit.sqf @@ -8,4 +8,6 @@ PREP_RECOMPILE_END; #include "initSettings.sqf" +GVAR(entrenchingTools) = call (uiNamespace getVariable QGVAR(entrenchingTools)); + ADDON = true; diff --git a/addons/trenches/XEH_preStart.sqf b/addons/trenches/XEH_preStart.sqf index 022888575e..c966b2c9b6 100644 --- a/addons/trenches/XEH_preStart.sqf +++ b/addons/trenches/XEH_preStart.sqf @@ -1,3 +1,9 @@ #include "script_component.hpp" #include "XEH_PREP.hpp" + +private _entrenchingTools = (QUOTE(getNumber (_x >> QQGVAR(entrenchingTool)) > 0) configClasses (configFile >> "CfgWeapons") apply {configName _x}); +_entrenchingTools append (QUOTE(getNumber (_x >> QQGVAR(entrenchingTool)) > 0) configClasses (configFile >> "CfgVehicles") apply {configName _x}); +TRACE_1("",_entrenchingTools); + +uiNamespace setVariable [QGVAR(entrenchingTools), compileFinal str _entrenchingTools]; diff --git a/addons/trenches/config.cpp b/addons/trenches/config.cpp index 3f76f012ed..18d5e4a3d6 100644 --- a/addons/trenches/config.cpp +++ b/addons/trenches/config.cpp @@ -14,6 +14,7 @@ class CfgPatches { }; }; +#include "ACE_Arsenal_Stats.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/trenches/functions/fnc_canCamouflageTrench.sqf b/addons/trenches/functions/fnc_canCamouflageTrench.sqf index 266f145e37..2630d61698 100644 --- a/addons/trenches/functions/fnc_canCamouflageTrench.sqf +++ b/addons/trenches/functions/fnc_canCamouflageTrench.sqf @@ -18,7 +18,7 @@ params ["_trench", "_unit"]; -if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false}; +if !(_unit call FUNC(hasEntrenchingTool)) exitWith {false}; // Prevent camouflage if not fully dug if ((_trench getVariable [QGVAR(progress), 0]) != 1) exitWith {false}; diff --git a/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf b/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf index 740b34df7c..f63332e753 100644 --- a/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf +++ b/addons/trenches/functions/fnc_canContinueDiggingTrench.sqf @@ -18,7 +18,7 @@ params ["_trench", "_unit"]; -if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false}; +if !(_unit call FUNC(hasEntrenchingTool)) exitWith {false}; if ((_trench getVariable [QGVAR(progress), 1]) >= 1) exitWith {false}; // Prevent removing/digging trench by more than one person diff --git a/addons/trenches/functions/fnc_canDigTrench.sqf b/addons/trenches/functions/fnc_canDigTrench.sqf index d6bf05993d..1b6dd28fea 100644 --- a/addons/trenches/functions/fnc_canDigTrench.sqf +++ b/addons/trenches/functions/fnc_canDigTrench.sqf @@ -17,6 +17,6 @@ params ["_unit"]; -if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false}; +if !(_unit call FUNC(hasEntrenchingTool)) exitWith {false}; _unit call EFUNC(common,canDig) diff --git a/addons/trenches/functions/fnc_canRemoveTrench.sqf b/addons/trenches/functions/fnc_canRemoveTrench.sqf index 23347fc310..ebebbd29a9 100644 --- a/addons/trenches/functions/fnc_canRemoveTrench.sqf +++ b/addons/trenches/functions/fnc_canRemoveTrench.sqf @@ -18,7 +18,7 @@ params ["_trench", "_unit"]; -if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false}; +if !(_unit call FUNC(hasEntrenchingTool)) exitWith {false}; // Prevent removing/digging trench by more than one person if (_trench getVariable [QGVAR(digging), false]) exitWith {false}; diff --git a/addons/trenches/functions/fnc_continueDiggingTrench.sqf b/addons/trenches/functions/fnc_continueDiggingTrench.sqf index 8380a83af9..e6eab0c548 100644 --- a/addons/trenches/functions/fnc_continueDiggingTrench.sqf +++ b/addons/trenches/functions/fnc_continueDiggingTrench.sqf @@ -67,7 +67,7 @@ private _fnc_onFailure = { }; private _fnc_condition = { (_this select 0) params ["_unit"]; - "ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems)) + _unit call FUNC(hasEntrenchingTool) }; [(_digTimeLeft + 0.5), [_unit, _trench], _fnc_onFinish, _fnc_onFailure, localize LSTRING(DiggingTrench), _fnc_condition] call EFUNC(common,progressBar); diff --git a/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf b/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf index 3873e40b4a..dcf6493491 100644 --- a/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf +++ b/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf @@ -19,7 +19,7 @@ params ["_unit"]; if (_unit getVariable [QGVAR(isPlacing), false]) then { - if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) then { + if !(_unit call FUNC(hasEntrenchingTool)) then { [_unit] call FUNC(placeCancel); }; }; diff --git a/addons/trenches/functions/fnc_hasEntrenchingTool.sqf b/addons/trenches/functions/fnc_hasEntrenchingTool.sqf new file mode 100644 index 0000000000..30fb34f441 --- /dev/null +++ b/addons/trenches/functions/fnc_hasEntrenchingTool.sqf @@ -0,0 +1,26 @@ +#include "script_component.hpp" +/* + * Author: veteran29 + * Checks if unit has entrenching tool. + * + * Arguments: + * 0: Unit + * + * Return Value: + * Has entrenching tool + * + * Example: + * [bob] call ace_trenches_fnc_hasEntrenchingTool + * + * Public: Yes +*/ + +params [ + ["_unit", objNull, [objNull]] +]; + +private _uniqueItems = _unit call EFUNC(common,uniqueItems); +_uniqueItems append weapons _unit; +_uniqueItems pushBack backpack _unit; + +GVAR(entrenchingTools) findIf {_x in _uniqueItems} != -1 // return diff --git a/addons/trenches/functions/fnc_removeTrench.sqf b/addons/trenches/functions/fnc_removeTrench.sqf index 2cdb874846..c4ddb8a7c7 100644 --- a/addons/trenches/functions/fnc_removeTrench.sqf +++ b/addons/trenches/functions/fnc_removeTrench.sqf @@ -66,7 +66,7 @@ private _fnc_onFailure = { }; private _fnc_condition = { (_this select 0) params ["_unit"]; - "ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems)) + _unit call FUNC(hasEntrenchingTool) }; [(_removeTimeLeft + 0.5), [_unit, _trench], _fnc_onFinish, _fnc_onFailure, localize LSTRING(RemovingTrench), _fnc_condition] call EFUNC(common,progressBar); diff --git a/docs/wiki/framework/trenches-framework.md b/docs/wiki/framework/trenches-framework.md new file mode 100644 index 0000000000..5fc2dc636e --- /dev/null +++ b/docs/wiki/framework/trenches-framework.md @@ -0,0 +1,57 @@ +--- +layout: wiki +title: Trenches Framework +description: Explains how to set-up surface whitelisting and entrenching tools. +group: framework +order: 5 +parent: wiki +mod: ace +version: + major: 3 + minor: 5 + patch: 0 +--- + +## 1. Config Values + +### 1.1 Whitelisting surfaces for digging + +Single surfaces can be whitelisted by adding `ACE_canDig = 1` into `CfgSurfaces`. +```cpp +class CfgSurfaces { + class myAwesomeSurface { + ACE_canDig = 1; + }; +}; +``` + +### 1.2 Enabling entrenching tool features on an item or backpack + +```cpp +class CfgWeapons { // same config also works on backpacks (CfgVehicles) + class yourBaseClass; + class yourEntrenchingToolClass: yourBaseClass + ace_trenches_entrenchingTool = 1; + }; +}; +``` + +## 2. Scripting + +### 2.1 Checking if unit has entrenching tool + +`ace_trenches_fnc_hasEntrenchingTool` +Used to check if unit has any entrenching capable tool. + +```sqf + * Checks if unit has entrenching tool. + * + * Arguments: + * 0: Unit + * + * Return Value: + * Has entrenching tool + * + * Example: + * [bob] call ace_trenches_fnc_hasEntrenchingTool +``` From f734fa9e8649bf1026f2347b470c5320f067f0ad Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Tue, 6 Sep 2022 13:21:45 +0200 Subject: [PATCH 54/92] Field Rations - Basic CfgMagazines support (#9008) * Add basic CfgMagazines support for field_rations * Update headers * Fix CBA context menu * Add backward compatiblity to fnc_consumeItem * Fix item refill not finishing Whoopsie. * Revert "Add backward compatiblity to fnc_consumeItem" In hindsight it's not necessary, this is not public function. --- addons/field_rations/XEH_postInit.sqf | 3 +- .../functions/fnc_canRefillItem.sqf | 17 +++++++--- .../functions/fnc_consumeItem.sqf | 34 ++++++++++++------- .../functions/fnc_getConsumableChildren.sqf | 26 +++++++++----- .../functions/fnc_getRefillChildren.sqf | 24 ++++++++----- .../functions/fnc_refillItem.sqf | 25 +++++++++----- .../wiki/framework/field-rations-framework.md | 4 +-- 7 files changed, 87 insertions(+), 46 deletions(-) diff --git a/addons/field_rations/XEH_postInit.sqf b/addons/field_rations/XEH_postInit.sqf index be81985bc4..1ee235ca4f 100644 --- a/addons/field_rations/XEH_postInit.sqf +++ b/addons/field_rations/XEH_postInit.sqf @@ -89,7 +89,8 @@ if !(hasInterface) exitWith {}; ], { params ["_unit", "", "_item"]; - [objNull, _unit, _item] call FUNC(consumeItem); + private _itemConfig = configFile >> "CfgWeapons" >> _item; + [objNull, _unit, [_item, _itemConfig, false]] call FUNC(consumeItem); false } ] call CBA_fnc_addItemContextMenuOption; diff --git a/addons/field_rations/functions/fnc_canRefillItem.sqf b/addons/field_rations/functions/fnc_canRefillItem.sqf index 13a859337f..8d8bf8f7db 100644 --- a/addons/field_rations/functions/fnc_canRefillItem.sqf +++ b/addons/field_rations/functions/fnc_canRefillItem.sqf @@ -6,23 +6,30 @@ * Arguments: * 0: Water source * 1: Player - * 2: Item classname + * 2: Item data + * 0: Item classname + * 1: Item config + * 2: Is item magazine * * Return Value: * Can refill item * * Example: - * [_source, _player, "ACE_WaterBottle_Empty"] call ace_field_rations_fnc_canRefillItem + * [_source, _player, ["ACE_WaterBottle_Empty", configFile >> "CfgWeapons" >> "ACE_WaterBottle_Empty", false]] call ace_field_rations_fnc_canRefillItem * * Public: No */ -params ["_source", "_player", "_item"]; +params ["_source", "_player", "_itemData"]; +_itemData params ["_item", "_itemConfig", "_isMagazine"]; alive _source && {XGVAR(waterSourceActions) != 0} -&& {_item in (_player call EFUNC(common,uniqueItems))} +&& { + (_isMagazine && {_item in magazines _player}) + || {_item in (_player call EFUNC(common,uniqueItems))} +} && { private _water = _source call FUNC(getRemainingWater); - _water == REFILL_WATER_INFINITE || {_water >= getNumber (configFile >> "CfgWeapons" >> _item >> QXGVAR(refillAmount))} + _water == REFILL_WATER_INFINITE || {_water >= getNumber (_itemConfig >> QXGVAR(refillAmount))} } diff --git a/addons/field_rations/functions/fnc_consumeItem.sqf b/addons/field_rations/functions/fnc_consumeItem.sqf index 8e727e75a2..e7e26c9ce1 100644 --- a/addons/field_rations/functions/fnc_consumeItem.sqf +++ b/addons/field_rations/functions/fnc_consumeItem.sqf @@ -6,21 +6,23 @@ * Arguments: * 0: Target (not used) * 1: Player - * 2: Item classname + * 2: Item data + * 0: Item classname + * 1: Item config + * 2: Is item magazine * * Return Value: * None * * Example: - * [objNull, ACE_player, "ACE_WaterBottle"] call ace_field_rations_fnc_consumeItem + * [objNull, ACE_player, "["ACE_WaterBottle_Empty", configFile >> "CfgWeapons" >> "ACE_WaterBottle_Empty", false]] call ace_field_rations_fnc_consumeItem * * Public: No */ -params ["", "_player", "_consumeItem"]; -TRACE_2("Consume item started",_player,_consumeItem); - -private _config = configFile >> "CfgWeapons" >> _consumeItem; +params ["", "_player", "_consumeData"]; +_consumeData params ["_consumeItem", "_config", "_isMagazine"]; +TRACE_3("Consume item started",_player,_consumeItem,_config); // Get consume time for item private _consumeTime = getNumber (_config >> QXGVAR(consumeTime)); @@ -70,11 +72,15 @@ private _soundPlayed = if (_consumeAnim != "" && {vehicle _player == _player && private _fnc_onSuccess = { params ["_args"]; - _args params ["_player", "_consumeItem", "_replacementItem", "_thirstQuenched", "_hungerSatiated"]; + _args params ["_player", "_consumeItem", "_replacementItem", "_thirstQuenched", "_hungerSatiated", "", "", "", "_isMagazine"]; TRACE_1("Consume item successful",_args); // Remove consumed item - _player removeItem _consumeItem; + if (_isMagazine) then { + _player removeMagazineGlobal _consumeItem; + } else { + _player removeItem _consumeItem; + }; // Add replacement item if needed if (_replacementItem != "") then { @@ -92,7 +98,7 @@ private _fnc_onSuccess = { _player setVariable [QXGVAR(hunger), (_hunger - _hungerSatiated) max 0]; }; - ["acex_rationConsumed", [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated]] call CBA_fnc_localEvent; + ["acex_rationConsumed", [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated, _isMagazine]] call CBA_fnc_localEvent; _player setVariable [QGVAR(previousAnim), nil]; }; @@ -115,7 +121,7 @@ private _fnc_onFailure = { private _fnc_condition = { params ["_args"]; - _args params ["_player", "_consumeItem", "", "", "", "_consumeAnim", "_consumeSound", "_soundPlayed"]; + _args params ["_player", "_consumeItem", "", "", "", "_consumeAnim", "_consumeSound", "_soundPlayed", "_isMagazine"]; // Attempt to sync sound with animation start if (!_soundPlayed && {_consumeSound != "" && {_consumeAnim == "" || {animationState _player == _consumeAnim}}}) then { @@ -123,7 +129,10 @@ private _fnc_condition = { _args set [7, true]; }; - _consumeItem in (_player call EFUNC(common,uniqueItems)) + if (_isMagazine) exitWith { + _consumeItem in magazines _player // return + }; + _consumeItem in (_player call EFUNC(common,uniqueItems)) // return }; [ @@ -136,7 +145,8 @@ private _fnc_condition = { _hungerSatiated, _consumeAnim, _consumeSound, - _soundPlayed + _soundPlayed, + _isMagazine ], _fnc_onSuccess, _fnc_onFailure, diff --git a/addons/field_rations/functions/fnc_getConsumableChildren.sqf b/addons/field_rations/functions/fnc_getConsumableChildren.sqf index 9d9dc8d62a..00f73caf1e 100644 --- a/addons/field_rations/functions/fnc_getConsumableChildren.sqf +++ b/addons/field_rations/functions/fnc_getConsumableChildren.sqf @@ -22,18 +22,26 @@ private _fnc_getActions = { private _actions = []; private _cfgWeapons = configFile >> "CfgWeapons"; + private _cfgMagazines = configFile >> "CfgMagazines"; { - private _config = _cfgWeapons >> _x; - if (getNumber (_config >> QXGVAR(thirstQuenched)) > 0 || {getNumber (_config >> QXGVAR(hungerSatiated)) > 0}) then { - private _displayName = getText (_config >> "displayName"); - private _picture = getText (_config >> "picture"); + _x params ["_config", "_items"]; + private _isMagazine = _config == _cfgMagazines; + { + private _itemConfig = _config >> _x; + if (getNumber (_itemConfig >> QXGVAR(thirstQuenched)) > 0 || {getNumber (_itemConfig >> QXGVAR(hungerSatiated)) > 0}) then { + private _displayName = getText (_itemConfig >> "displayName"); + private _picture = getText (_itemConfig >> "picture"); - // Exec next frame so closing interaction menu doesn't block progressBar - private _action = [_x, _displayName, _picture, {[FUNC(consumeItem), _this] call CBA_fnc_execNextFrame}, {true}, {}, _x] call EFUNC(interact_menu,createAction); - _actions pushBack [_action, [], _player]; - }; - } forEach (_player call EFUNC(common,uniqueItems)); + // Exec next frame so closing interaction menu doesn't block progressBar + private _action = [_x, _displayName, _picture, {[FUNC(consumeItem), _this] call CBA_fnc_execNextFrame}, {true}, {}, [_x, _itemConfig, _isMagazine]] call EFUNC(interact_menu,createAction); + _actions pushBack [_action, [], _player]; + }; + } forEach _items; + } forEach [ + [_cfgWeapons, _player call EFUNC(common,uniqueItems)], + [_cfgMagazines, [magazines _player] call EFUNC(common,uniqueElements)] + ]; _actions }; diff --git a/addons/field_rations/functions/fnc_getRefillChildren.sqf b/addons/field_rations/functions/fnc_getRefillChildren.sqf index 58d94637ac..8d393905b0 100644 --- a/addons/field_rations/functions/fnc_getRefillChildren.sqf +++ b/addons/field_rations/functions/fnc_getRefillChildren.sqf @@ -24,15 +24,23 @@ if (_water == 0 || {_water == REFILL_WATER_DISABLED}) exitWith {[]}; private _actions = []; private _cfgWeapons = configFile >> "CfgWeapons"; +private _cfgMagazines = configFile >> "CfgMagazines"; { - private _config = _cfgWeapons >> _x; - if (getText (_config >> QXGVAR(refillItem)) != "" && {_water == REFILL_WATER_INFINITE || {getNumber (_config >> QXGVAR(refillAmount)) <= _water}}) then { - private _displayName = format ["%1: %2", LLSTRING(Refill), getText (_config >> "displayName")]; - private _picture = getText (_config >> "picture"); - private _action = [_x, _displayName, _picture, FUNC(refillItem), FUNC(canRefillItem), {}, _x] call EFUNC(interact_menu,createAction); - _actions pushBack [_action, [], _source]; - }; -} forEach (_player call EFUNC(common,uniqueItems)); + _x params ["_config", "_items"]; + private _isMagazine = _config == _cfgMagazines; + { + private _itemConfig = _config >> _x; + if (getText (_itemConfig >> QXGVAR(refillItem)) != "" && {_water == REFILL_WATER_INFINITE || {getNumber (_itemConfig >> QXGVAR(refillAmount)) <= _water}}) then { + private _displayName = format ["%1: %2", LLSTRING(Refill), getText (_itemConfig >> "displayName")]; + private _picture = getText (_itemConfig >> "picture"); + private _action = [_x, _displayName, _picture, FUNC(refillItem), FUNC(canRefillItem), {}, [_x, _itemConfig, _isMagazine]] call EFUNC(interact_menu,createAction); + _actions pushBack [_action, [], _source]; + }; + } forEach _items; +} forEach [ + [_cfgWeapons, _player call EFUNC(common,uniqueItems)], + [_cfgMagazines, [magazines _player] call EFUNC(common,uniqueElements)] +]; _actions diff --git a/addons/field_rations/functions/fnc_refillItem.sqf b/addons/field_rations/functions/fnc_refillItem.sqf index cea91f4e96..22bd0270fe 100644 --- a/addons/field_rations/functions/fnc_refillItem.sqf +++ b/addons/field_rations/functions/fnc_refillItem.sqf @@ -6,22 +6,24 @@ * Arguments: * 0: Water source * 1: Player - * 2: Item classname + * 2: Item data + * 0: Item classname + * 1: Item config + * 2: Is item magazine * * Return Value: * None * * Example: - * [_source, _player, "ACE_WaterBottle_Empty"] call ace_field_rations_fnc_refillItem + * [_source, _player, ["ACE_WaterBottle_Empty", configFile >> "CfgWeapons" >> "ACE_WaterBottle_Empty", false]] call ace_field_rations_fnc_refillItem * * Public: No */ -params ["_source", "_player", "_item"]; +params ["_source", "_player", "_itemData"]; +_itemData params ["_item", "_config", "_isMagazine"]; TRACE_3("Item refill started",_source,_player,_item); -private _config = configFile >> "CfgWeapons" >> _item; - // Get config values for refill private _refillItem = getText (_config >> QXGVAR(refillItem)); private _refillAmount = getNumber (_config >> QXGVAR(refillAmount)); @@ -29,11 +31,16 @@ private _refillTime = getNumber (_config >> QXGVAR(refillTime)); private _fnc_onSuccess = { params ["_args"]; - _args params ["_source", "_player", "_item", "_refillItem", "_refillAmount"]; + _args params ["_source", "_player", "_itemData", "_refillItem", "_refillAmount", "_itemData"]; + _itemData params ["_item", "", "_isMagazine"]; TRACE_1("Refill item successful",_args); // Replace item with refilled one - _player removeItem _item; + if (_isMagazine) then { + _player removeMagazineGlobal _item; + } else { + _player removeItem _item; + }; [_player, _refillItem] call EFUNC(common,addToInventory); // Update remaining water in source @@ -43,7 +50,7 @@ private _fnc_onSuccess = { [_source, _waterInSource] call FUNC(setRemainingWater); }; - ["acex_rationRefilled", [_source, _player, _item, _refillItem, _refillAmount]] call CBA_fnc_localEvent; + ["acex_rationRefilled", [_source, _player, _item, _refillItem, _refillAmount, _isMagazine]] call CBA_fnc_localEvent; // Show refilled item hint private _picture = getText (configFile >> "CfgWeapons" >> _refillItem >> "picture"); @@ -64,7 +71,7 @@ private _fnc_condition = { [ _source, _player, - _item, + _itemData, _refillItem, _refillAmount ], diff --git a/docs/wiki/framework/field-rations-framework.md b/docs/wiki/framework/field-rations-framework.md index 4a2450c19c..54d2b22e90 100644 --- a/docs/wiki/framework/field-rations-framework.md +++ b/docs/wiki/framework/field-rations-framework.md @@ -45,8 +45,8 @@ Config Name | Type | Description Event Name | Passed Parameter(s) | Locality | Description ---------- | ------------------- | -------- | ----------- -`acex_rationConsumed` | [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated] | Local | Item consumed -`acex_rationRefilled` | [_source, _player, _item, _refillItem, _refillAmount] | Local | Item refilled +`acex_rationConsumed` | [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated, _isMagazine] | Local | Item consumed +`acex_rationRefilled` | [_source, _player, _item, _refillItem, _refillAmount, _isMagazine] | Local | Item refilled ## 3. Scripting From 8a949d4f2442e031b6eba07a6b55b5bff05be5a1 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 6 Sep 2022 21:37:24 +0200 Subject: [PATCH 55/92] ace_tagCreated EH not fire x (#9025) --- addons/tagging/functions/fnc_createTag.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf index feec84d312..4c29ad0f09 100644 --- a/addons/tagging/functions/fnc_createTag.sqf +++ b/addons/tagging/functions/fnc_createTag.sqf @@ -33,6 +33,7 @@ if (_isVehicleTag) exitWith { TRACE_3("tagging vehicle",_object,typeOf _object,_texture); _object setObjectTextureGlobal [getText (configOf _object >> "selectionClan"), _texture]; // if (_material != "") then { _object setObjectMaterialGlobal ["clan", _material] }; // ?? + ["ace_tagCreated", [objNull, _texture, _object, _unit]] call CBA_fnc_globalEvent; }; private _tag = createSimpleObject [_tagModel, _tagPosASL]; From 5b06a1f88280d45624da86debe0ff5b2b3818952 Mon Sep 17 00:00:00 2001 From: Zman6258 Date: Tue, 6 Sep 2022 16:20:44 -0400 Subject: [PATCH 56/92] Docs/Cargo - Include missing "unload type" param (#9010) * Docs/Cargo - Include missing "unload type" param There's a LOT of pages that are still missing documentation on listenable events entirely, maybe I'll get around to fixing that at some point. * Update events-framework.md Co-authored-by: PabstMirror --- docs/wiki/framework/cargo-framework.md | 2 +- docs/wiki/framework/events-framework.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/wiki/framework/cargo-framework.md b/docs/wiki/framework/cargo-framework.md index 5b02f087be..5f8a5e8c8c 100644 --- a/docs/wiki/framework/cargo-framework.md +++ b/docs/wiki/framework/cargo-framework.md @@ -51,7 +51,7 @@ class CfgVehicles { Event Name | Passed Parameter(s) | Locality | Description ---------- | ----------- | ------------------- | -------- `ace_cargoLoaded` | [_item, _vehicle] | Global | Cargo has been Loaded into vehicle -`ace_cargoUnloaded` | [_item, _vehicle] | Global | Cargo has been Unloaded from vehicle +`ace_cargoUnloaded` | [_item, _vehicle, _unloadType] | Global | Cargo has been Unloaded from vehicle `ace_cargoRemoved` | [_itemClass, _vehicle, _amountRequested, _amountRemoved] | Global | Cargo has been removed (deleted) from vehicle ## 3. Editor Attributes diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 706ffeea72..f7f495fb4c 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -57,7 +57,7 @@ MenuType: 0 = Interaction, 1 = Self Interaction |----------|---------|---------|---------|---------|---------| |`ace_addCargo` | [_item (CLASSNAME or OBJECT), _vehicle, _cargoCount] | Target | Callable | Scripted way to add cargo to vehicle |`ace_cargoLoaded` | [_item, _vehicle] | Global | Listen | Cargo has been Loaded into vehicle -|`ace_cargoUnloaded` | [_item, _vehicle] | Global | Listen | Cargo has been Unloaded from vehicle +|`ace_cargoUnloaded` | [_item, _vehicle, _unloadType] | Global | Listen | Cargo has been Unloaded from vehicle ### 2.5 Captives (`ace_captives`) From 10881fc5bd539092e0bc21e50d5b8bea603fbe47 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Thu, 8 Sep 2022 14:41:52 +0200 Subject: [PATCH 57/92] SOG Compat - Add 1.2 update support (#8974) * Update vn_mine_tripwire_m16_02_ammo base class * Fix fnc_handlePunjiTrapDamage Hopefully once and for all * Remove placement actions from punji traps * Add Explosives compat for 1.2 content TODO testing * Add quoting to stringtable config usage * Prevent bike mine placement object from swinging all over the place * Add non attachable ACE_Triggers for big mines Bike mine looks kinda stupid when it's attached to a car... * Bike mine triggers * Cartridge mine triggers * Lighter mine triggers * Pot mine triggers * Jerrycan mine triggers * Mortar shell mine triggers * Grenade board mine triggers * Inheritance fixes * Update damage handler for new punji traps * Improve interaction points and dig distances * Dh10 mine triggers * Bump damage of vn_mine_cartridge_ammo * Add incendiary features to lighter and jerry can explosives WIP * SOG Compat - Added fuel tank volumes for SOG update 1.2 vehicles (#8978) * Added fuel tank volumes for SOG update 1.2 vehicles * Type 55A is similar in fuel capacity to the PTF Nasty, not the PBR * Add missing EOLs Co-authored-by: Filip Maciejewski * Improve placement feedback of Whip punji * Add inheritance to custom wound handlers * Fix doorway punji position * Add spikes offset for affected units of doorway trap * Prevent spiderholes from being loaded into cargo * Add missing continue digging action to spiderholes * Fix spiderholes physics while being dug up via trenches system Depends on #8998 * Add missing params * Fix parenthesis * Add pDrive dummy files This is stupid. * Enable Melee weapons in the arsenal * Add Entrenching tool capabilities to Shovel and ETool Depends on #8999 * Add incendiary features to Molotov and M14 * Tweak chance of being set ablaze Now sums all hitpoints damage. * Add ACE_damageType to napalm and he bombs * Do not change cartridge mine damage and range if no ACE Medical * Simplify variable config values * Swap cartridge mine hit values Whoopsie. * Add overpressure configs to launchers * Fixed an issue preventing the M1919A6 CSW from being disassembled (#8970) * Remove disassembleTo from CSW weapons This config property is meant for tripods. * Add CSW config for MG42 * Simplify requiredAddons * Remove proxy weapons from most of the CSW, adjust loading times The animations are pretty important in case of SOGPF turrets, the ammo load times were adjusted accordingly so the total loading times is similar. * Add vn_pavn_30_can.p3d pDrive dummy * Fix missing MG42 mag icon * Add field_rations values to food props/mags Needs #9008 to be usable. * Add more field_rations values to food props/mags Send help. * More food configs * Even more food configs Fooooood. * More fooood Even more foooooood. * Fix food inheritance * Add SGM CSW compatibility * Various fixes for CSW Wrong tripods for opfor guns, missing translation * Improve TOW interaction position * Add dragging and interaction configs to recoilles rifles * Cleanup SGM CSW config * Add MK18 CSW config * Add H-12 MLRS CSW config * Add missing Mk18 stringtable * Add function header and logging to fnc_woundsHandlerIncendiary * Add missing weapons in CfgPatches array * Add entrenching tool config to backpacks * Fix Hammer and Fire axe melee weapons * Add missing CSW images Thanks @BaerMitUmlaut Co-authored-by: Samuel Deutsch --- optionals/compat_sog/ACE_CSW_Groups.hpp | 21 + optionals/compat_sog/ACE_Medical_Injuries.hpp | 15 + optionals/compat_sog/ACE_Triggers.hpp | 11 + optionals/compat_sog/CfgAmmo.hpp | 1 + optionals/compat_sog/CfgAmmo/bombs.hpp | 15 + optionals/compat_sog/CfgAmmo/explosives.hpp | 108 ++- optionals/compat_sog/CfgAmmo/grenades.hpp | 8 +- optionals/compat_sog/CfgMagazines.hpp | 1 + optionals/compat_sog/CfgMagazines/csw.hpp | 42 ++ .../compat_sog/CfgMagazines/explosives.hpp | 189 +++++ optionals/compat_sog/CfgMagazines/food.hpp | 675 ++++++++++++++++++ optionals/compat_sog/CfgVehicles.hpp | 2 + .../compat_sog/CfgVehicles/backpacks.hpp | 33 + optionals/compat_sog/CfgVehicles/boats.hpp | 20 + .../compat_sog/CfgVehicles/explosives.hpp | 117 ++- optionals/compat_sog/CfgVehicles/planes.hpp | 10 + optionals/compat_sog/CfgVehicles/tracked.hpp | 18 +- optionals/compat_sog/CfgVehicles/turrets.hpp | 222 +++++- optionals/compat_sog/CfgWeapons.hpp | 1 + optionals/compat_sog/CfgWeapons/csw.hpp | 121 +++- optionals/compat_sog/CfgWeapons/launchers.hpp | 19 +- .../compat_sog/CfgWeapons/weapons_melee.hpp | 63 ++ optionals/compat_sog/UI/csw_mg42_ca.paa | Bin 0 -> 54363 bytes optionals/compat_sog/UI/csw_mk18_ca.paa | Bin 0 -> 83405 bytes optionals/compat_sog/UI/csw_sgm_ca.paa | Bin 0 -> 50787 bytes optionals/compat_sog/UI/csw_sgm_shield_ca.paa | Bin 0 -> 61568 bytes optionals/compat_sog/XEH_PREP.hpp | 3 + optionals/compat_sog/XEH_postInit.sqf | 16 + optionals/compat_sog/config.cpp | 11 +- .../functions/fnc_handleBikeMinePlace.sqf | 28 + .../functions/fnc_handlePunjiTrapDamage.sqf | 12 +- .../functions/fnc_handlePunjiTrapPlace.sqf | 33 + .../functions/fnc_handlePunjiTrapTrigger.sqf | 19 +- .../functions/fnc_woundsHandlerIncendiary.sqf | 40 ++ optionals/compat_sog/script_component.hpp | 3 + optionals/compat_sog/stringtable.xml | 32 + .../headgear/items/vn_b_item_lighter_01 | 0 .../supply/a2_ammo/pavn/vn_pavn_30_can.p3d | 0 .../mortar_type53/vn_shell_82mm_o832d_he_mag | 0 .../mines/punji/vn_mine_punji_03 | 0 .../ui/icon_vn_pk_100_mag_ca.paa | 0 .../mines/bangalore/vn_mine_bangalore_mag | 0 .../mines/bike/vn_mine_bike_mag | 0 .../mines/cartridge/vn_mine_cartridge_mag | 0 .../mines/dh10/vn_mine_dh10_mag | 0 .../mines/gboard/vn_mine_gboard_range_mag | 0 .../mines/jerrycan/vn_mine_jerrycan_mag | 0 .../mines/limpet_01/vn_mine_limpet_01_mag | 0 .../mines/limpet_02/vn_mine_limpet_02_mag | 0 .../mines/no8/vn_mine_chicom_no8_mag | 0 .../mines/pot/vn_mine_pot_mag | 0 .../mines/punji_02/vn_mine_punji_04_mag | 0 .../mines/punji_02/vn_mine_punji_05_mag | 0 .../vn_mine_satchelcharge_02_mag | 0 54 files changed, 1856 insertions(+), 53 deletions(-) create mode 100644 optionals/compat_sog/ACE_Medical_Injuries.hpp create mode 100644 optionals/compat_sog/ACE_Triggers.hpp create mode 100644 optionals/compat_sog/CfgAmmo/bombs.hpp create mode 100644 optionals/compat_sog/CfgMagazines/food.hpp create mode 100644 optionals/compat_sog/CfgVehicles/backpacks.hpp create mode 100644 optionals/compat_sog/CfgVehicles/boats.hpp create mode 100644 optionals/compat_sog/CfgWeapons/weapons_melee.hpp create mode 100644 optionals/compat_sog/UI/csw_mg42_ca.paa create mode 100644 optionals/compat_sog/UI/csw_mk18_ca.paa create mode 100644 optionals/compat_sog/UI/csw_sgm_ca.paa create mode 100644 optionals/compat_sog/UI/csw_sgm_shield_ca.paa create mode 100644 optionals/compat_sog/functions/fnc_handleBikeMinePlace.sqf create mode 100644 optionals/compat_sog/functions/fnc_handlePunjiTrapPlace.sqf create mode 100644 optionals/compat_sog/functions/fnc_woundsHandlerIncendiary.sqf create mode 100644 tools/pDummies/vn/characters_f_vietnam/BLUFOR/headgear/items/vn_b_item_lighter_01 create mode 100644 tools/pDummies/vn/objects_f_vietnam/supply/a2_ammo/pavn/vn_pavn_30_can.p3d create mode 100644 tools/pDummies/vn/static_f_vietnam/mortar_type53/vn_shell_82mm_o832d_he_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam/mines/punji/vn_mine_punji_03 create mode 100644 tools/pDummies/vn/weapons_f_vietnam/ui/icon_vn_pk_100_mag_ca.paa create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/bangalore/vn_mine_bangalore_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/bike/vn_mine_bike_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/cartridge/vn_mine_cartridge_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/dh10/vn_mine_dh10_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/gboard/vn_mine_gboard_range_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/jerrycan/vn_mine_jerrycan_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/limpet_01/vn_mine_limpet_01_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/limpet_02/vn_mine_limpet_02_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/no8/vn_mine_chicom_no8_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/pot/vn_mine_pot_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/punji_02/vn_mine_punji_04_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/punji_02/vn_mine_punji_05_mag create mode 100644 tools/pDummies/vn/weapons_f_vietnam_03/mines/satchelcharge_02/vn_mine_satchelcharge_02_mag diff --git a/optionals/compat_sog/ACE_CSW_Groups.hpp b/optionals/compat_sog/ACE_CSW_Groups.hpp index b02c42a52f..2bc81dbb65 100644 --- a/optionals/compat_sog/ACE_CSW_Groups.hpp +++ b/optionals/compat_sog/ACE_CSW_Groups.hpp @@ -1,4 +1,7 @@ class ACE_CSW_Groups { + + // --- Gun Turrets ------------------------------------------------------------- + class ace_csw_100Rnd_127x99_mag { vn_m2_v_100_mag = 1; }; @@ -31,6 +34,24 @@ class ACE_CSW_Groups { vn_pk_v_100_mag = 1; }; + class GVAR(mg42_250) { + vn_mg42_v_250_mag = 1; + }; + + class GVAR(sgm_250) { + vn_sgm_v_250_mag = 1; + }; + + class GVAR(mk18_24) { + vn_mk18_v_24_mag = 1; + }; + + class GVAR(mk18_48) { + vn_mk18_v_48_mag = 1; + }; + + // --- Mortars ----------------------------------------------------------------- + class GVAR(81mm_he) { vn_mortar_m29_mag_he_x8 = 1; }; diff --git a/optionals/compat_sog/ACE_Medical_Injuries.hpp b/optionals/compat_sog/ACE_Medical_Injuries.hpp new file mode 100644 index 0000000000..62acb1401f --- /dev/null +++ b/optionals/compat_sog/ACE_Medical_Injuries.hpp @@ -0,0 +1,15 @@ +class ACE_Medical_Injuries { + class damageTypes { + class woundHandlers; + + class explosive { + class woundHandlers: woundHandlers {}; + }; + class GVAR(explosive_incendiary): explosive { + class woundHandlers: woundHandlers { + // TODO use function name after bug with the woundHandlers config caching is fixed + ADDON = QUOTE({call FUNC(woundsHandlerIncendiary)}); + }; + }; + }; +}; diff --git a/optionals/compat_sog/ACE_Triggers.hpp b/optionals/compat_sog/ACE_Triggers.hpp new file mode 100644 index 0000000000..f7a804da13 --- /dev/null +++ b/optionals/compat_sog/ACE_Triggers.hpp @@ -0,0 +1,11 @@ +class ACE_Triggers { + class Command; + class GVAR(Command): Command { + isAttachable = 0; + }; + + class MK16_Transmitter: Command {}; // define parent class to make this a soft depency on ACE Explosives + class GVAR(MK16_Transmitter): MK16_Transmitter { + isAttachable = 0; + }; +}; diff --git a/optionals/compat_sog/CfgAmmo.hpp b/optionals/compat_sog/CfgAmmo.hpp index 8e78e19189..0917727974 100644 --- a/optionals/compat_sog/CfgAmmo.hpp +++ b/optionals/compat_sog/CfgAmmo.hpp @@ -1,4 +1,5 @@ class CfgAmmo { + #include "CfgAmmo\bombs.hpp" #include "CfgAmmo\explosives.hpp" #include "CfgAmmo\grenades.hpp" #include "CfgAmmo\melee.hpp" diff --git a/optionals/compat_sog/CfgAmmo/bombs.hpp b/optionals/compat_sog/CfgAmmo/bombs.hpp new file mode 100644 index 0000000000..0e35c7b6ec --- /dev/null +++ b/optionals/compat_sog/CfgAmmo/bombs.hpp @@ -0,0 +1,15 @@ + +class BombCore; +class vn_bomb_base_he: BombCore { + ACE_damageType = "explosive"; +}; + +class Mo_cluster_AP; +class vn_napalm_cluster_bomb_01: Mo_cluster_AP { + ACE_damageType = QGVAR(explosive_incendiary); +}; + +class ShellBase; +class sticky_napalm_red_small: ShellBase { + ACE_damageType = QGVAR(explosive_incendiary); +}; diff --git a/optionals/compat_sog/CfgAmmo/explosives.hpp b/optionals/compat_sog/CfgAmmo/explosives.hpp index 44cb68fc13..1c4e5ff65b 100644 --- a/optionals/compat_sog/CfgAmmo/explosives.hpp +++ b/optionals/compat_sog/CfgAmmo/explosives.hpp @@ -10,8 +10,8 @@ class vn_mine_m18_x3_ammo: vn_mine_m18_ammo { EGVAR(explosives,explosive) = "vn_mine_m18_x3_ammo_scripted"; }; -class APERSBoundingMine_Range_Ammo; -class vn_mine_tripwire_m16_02_ammo: APERSBoundingMine_Range_Ammo { +class vn_mine_m16_base; +class vn_mine_tripwire_m16_02_ammo: vn_mine_m16_base { EGVAR(explosives,defuseObjectPosition)[] = {0, -0.01, 0.088}; }; @@ -31,13 +31,14 @@ class vn_mine_m112_remote_ammo: DemoCharge_Remote_Ammo { // Disable engine damage of punji traps, script damage manually // This allows a tighter control of caused wounds and removes ear ringing +class APERSBoundingMine_Range_Ammo; class vn_mine_punji_01_ammo: APERSBoundingMine_Range_Ammo { EGVAR(minedetector,detectable) = 0; - hit = QUOTE(call compile getText (configFile >> 'CfgAmmo' >> 'vn_mine_punji_01_ammo' >> 'GVAR(hit)')); + hit = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_punji_01_ammo' >> 'GVAR(hit)')); GVAR(hit) = QUOTE([ARR_2(0,1)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); - indirectHit = QUOTE(call compile getText (configFile >> 'CfgAmmo' >> 'vn_mine_punji_01_ammo' >> 'GVAR(indirectHit)')); + indirectHit = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_punji_01_ammo' >> 'GVAR(indirectHit)')); GVAR(indirectHit) = QUOTE([ARR_2(0,10)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); class EventHandlers { @@ -48,7 +49,7 @@ class vn_mine_punji_01_ammo: APERSBoundingMine_Range_Ammo { }; class vn_mine_punji_02_ammo: vn_mine_punji_01_ammo { - indirectHit = QUOTE(call compile getText (configFile >> 'CfgAmmo' >> 'vn_mine_punji_02_ammo' >> 'GVAR(indirectHit)')); + indirectHit = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_punji_02_ammo' >> 'GVAR(indirectHit)')); GVAR(indirectHit) = QUOTE([ARR_2(0,5)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); }; @@ -61,3 +62,100 @@ class vn_mine_punji_03_ammo: vn_mine_punji_01_ammo { }; }; }; + +class vn_mine_punji_04_ammo: APERSBoundingMine_Range_Ammo { + EGVAR(minedetector,detectable) = 0; + + hit = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_punji_01_ammo' >> 'GVAR(hit)')); + GVAR(hit) = QUOTE([ARR_2(0,1)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); + + indirectHit = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_punji_01_ammo' >> 'GVAR(indirectHit)')); + GVAR(indirectHit) = QUOTE([ARR_2(0,10)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); + + GVAR(spikesOffset)[] = {0, 0, 1.8}; + GVAR(spikesCheckSelection) = "head"; + GVAR(spikesCheckRadius) = 1; + + class EventHandlers { + class ADDON { + AmmoHit = QUOTE(call FUNC(handlePunjiTrapTrigger)); + }; + }; +}; + +class vn_mine_punji_05_ammo: vn_mine_punji_04_ammo { + GVAR(spikesOffset)[] = {0, 0, 0}; + GVAR(spikesCheckSelection) = ""; + + class EventHandlers { + class ADDON { + AmmoHit = QUOTE(call FUNC(handlePunjiTrapTrigger)); + }; + }; +}; + +class APERSMine_Range_Ammo; +class vn_mine_bike_ammo: APERSMine_Range_Ammo { + EGVAR(explosives,explosive) = "vn_mine_bike_ammo_scripted"; +}; + +class vn_mine_cartridge_ammo: APERSMine_Range_Ammo { + EGVAR(explosives,explosive) = "vn_mine_cartridge_ammo_scripted"; + + // bump range and damage slightly, default values do not work well with ACE Medical + indirectHit = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_cartridge_ammo' >> 'GVAR(indirectHit)')); + GVAR(indirectHit) = QUOTE([ARR_2(2,1)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); + + indirectHitRange = QUOTE(getNumber (configFile >> 'CfgAmmo' >> 'vn_mine_cartridge_ammo' >> 'GVAR(indirectHitRange)')); + GVAR(indirectHitRange) = QUOTE([ARR_2(0.7,0.3)] select isNull (configFile >> 'CfgPatches' >> 'ace_medical')); +}; + +class vn_mine_lighter_ammo: APERSMine_Range_Ammo { + ACE_damageType = QGVAR(explosive_incendiary); + + EGVAR(explosives,explosive) = "vn_mine_lighter_ammo_scripted"; +}; + +class vn_mine_jerrycan_ammo: APERSMine_Range_Ammo { + ACE_damageType = QGVAR(explosive_incendiary); + + EGVAR(explosives,explosive) = "vn_mine_jerrycan_ammo_scripted"; +}; + +class vn_mine_pot_ammo: APERSMine_Range_Ammo { + EGVAR(explosives,explosive) = "vn_mine_pot_ammo_scripted"; +}; + +class vn_mine_mortar_range_ammo: APERSMine_Range_Ammo { + EGVAR(explosives,explosive) = "vn_mine_mortar_range_ammo_scripted"; +}; + +class vn_mine_limpet_01_ammo: DemoCharge_Remote_Ammo { + EGVAR(explosives,explosive) = "vn_mine_limpet_01_ammo_scripted"; +}; + +class vn_mine_limpet_02_ammo: vn_mine_limpet_01_ammo { + EGVAR(explosives,explosive) = "vn_mine_limpet_02_ammo_scripted"; +}; + +class vn_mine_chicom_no8_ammo: APERSMine_Range_Ammo { + EGVAR(explosives,explosive) = "vn_mine_chicom_no8_ammo_scripted"; +}; + +class vn_mine_dh10_ammo: DirectionalBombBase { + EGVAR(explosives,explosive) = "vn_mine_dh10_ammo_scripted"; +}; + +class PipeBombBase; +class vn_mine_gboard_range_ammo: PipeBombBase { + EGVAR(explosives,explosive) = "vn_mine_gboard_range_ammo_scripted"; +}; + +class SatchelCharge_Remote_Ammo; +class vn_mine_satchelcharge_02_ammo: SatchelCharge_Remote_Ammo { + EGVAR(explosives,explosive) = "vn_mine_satchelcharge_02_ammo_scripted"; +}; + +class vn_mine_bangalore_ammo: SatchelCharge_Remote_Ammo { + EGVAR(explosives,explosive) = "vn_mine_bangalore_ammo_scripted"; +}; diff --git a/optionals/compat_sog/CfgAmmo/grenades.hpp b/optionals/compat_sog/CfgAmmo/grenades.hpp index 48d13a4286..d280443b6e 100644 --- a/optionals/compat_sog/CfgAmmo/grenades.hpp +++ b/optionals/compat_sog/CfgAmmo/grenades.hpp @@ -1,4 +1,10 @@ class vn_grenadehand; class vn_molotov_grenade_ammo: vn_grenadehand { - ACE_frag_enabled = 0; + ACE_damageType = QGVAR(explosive_incendiary); + EGVAR(frag,enabled) = 0; +}; + +class SmokeShell; +class vn_m14_grenade_ammo: SmokeShell { + EGVAR(grenades,incendiary) = 1; }; diff --git a/optionals/compat_sog/CfgMagazines.hpp b/optionals/compat_sog/CfgMagazines.hpp index 3550cc35a9..c67e12edbc 100644 --- a/optionals/compat_sog/CfgMagazines.hpp +++ b/optionals/compat_sog/CfgMagazines.hpp @@ -2,4 +2,5 @@ class CfgMagazines { #include "CfgMagazines\belts.hpp" #include "CfgMagazines\csw.hpp" #include "CfgMagazines\explosives.hpp" + #include "CfgMagazines\food.hpp" }; diff --git a/optionals/compat_sog/CfgMagazines/csw.hpp b/optionals/compat_sog/CfgMagazines/csw.hpp index 0692d0a0d3..f1532c6513 100644 --- a/optionals/compat_sog/CfgMagazines/csw.hpp +++ b/optionals/compat_sog/CfgMagazines/csw.hpp @@ -8,6 +8,8 @@ class GVAR(tow_missile): vn_missile_tow_mag_x1 { mass = 220; // to Arma, weight and volume are all the same which makes real life values unusable }; +// --- Gun Turrets ------------------------------------------------------------- + class vn_m1919_v_250_mag; class GVAR(m1919_250): vn_m1919_v_250_mag { scope = 2; @@ -42,6 +44,46 @@ class GVAR(dshkm_50): vn_dshkm_v_50_mag { mass = 170; }; +class vn_mg42_v_250_mag; +class GVAR(mg42_250): vn_mg42_v_250_mag { + scope = 2; + type = 256; + model = "\vn\objects_f_vietnam\supply\a2_ammo\pavn\vn_pavn_30_can.p3d"; + picture = "\vn\weapons_f_vietnam\ui\icon_vn_pk_100_mag_ca.paa"; + ACE_isBelt = 1; + mass = 160; +}; + +class vn_sgm_v_250_mag; +class GVAR(sgm_250): vn_sgm_v_250_mag { + scope = 2; + type = 256; + model = "\vn\objects_f_vietnam\supply\a2_ammo\pavn\vn_pavn_30_can.p3d"; + picture = "\vn\weapons_f_vietnam\ui\icon_vn_pk_100_mag_ca.paa"; + ACE_isBelt = 1; + mass = 160; +}; + +class vn_mk18_v_24_mag; +class GVAR(mk18_24): vn_mk18_v_24_mag { + scope = 2; + type = 256; + model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // ammo can instead of any special model so no one gets especially confused over what it is + picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa); + mass = 160; +}; + +class vn_mk18_v_48_mag; +class GVAR(mk18_48): vn_mk18_v_48_mag { + scope = 2; + type = 256; + model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d"; // ammo can instead of any special model so no one gets especially confused over what it is + picture = QPATHTOEF(csw,UI\ammoBox_50bmg_ca.paa); + mass = 220; +}; + +// --- Mortars ----------------------------------------------------------------- + class vn_mortar_m29_mag_he_x8; class GVAR(81mm_he): vn_mortar_m29_mag_he_x8 { scope = 2; diff --git a/optionals/compat_sog/CfgMagazines/explosives.hpp b/optionals/compat_sog/CfgMagazines/explosives.hpp index feab681d7b..8da412d6e2 100644 --- a/optionals/compat_sog/CfgMagazines/explosives.hpp +++ b/optionals/compat_sog/CfgMagazines/explosives.hpp @@ -185,6 +185,7 @@ class vn_mine_ammobox_range_mag: vn_mine_m18_mag { // Punji large class vn_mine_punji_01_mag: vn_mine_m18_mag { + useAction = 0; EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(punji_01); class ACE_Triggers { @@ -204,3 +205,191 @@ class vn_mine_punji_02_mag: vn_mine_punji_01_mag { class vn_mine_punji_03_mag: vn_mine_punji_01_mag { EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(punji_03); }; + +// Punji door-way +class vn_mine_punji_04_mag: vn_mine_m18_mag { + useAction = 0; + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(punji_04); + + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + displayName = CSTRING(Action_DigIn); + digDistance = -2.14; + }; + }; +}; + +// Punji side whip +class vn_mine_punji_05_mag: vn_mine_punji_04_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(punji_05); + + class ACE_Triggers: ACE_Triggers { + class PressurePlate: PressurePlate { + digDistance = 0; + }; + }; +}; + +// Bike mine (Remote) +class vn_mine_bike_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(bike); + + class ACE_Triggers { + SupportedTriggers[] = {QGVAR(Command), QGVAR(MK16_Transmitter)}; + class GVAR(Command) { + digDistance = 0; + fuseTime = 1; + }; + class GVAR(MK16_Transmitter): GVAR(Command) {}; + }; +}; +// Bike mine (Proximity) +class vn_mine_bike_range_mag: vn_mine_bike_mag { + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0; + }; + }; +}; + +// Cartridge mine +class vn_mine_cartridge_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(cartridge); + + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0; + }; + }; +}; + +// Lighter mine (Proximity) +class vn_mine_lighter_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(lighter); + + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0; + }; + }; +}; + +// Pot mine (Remote) +class vn_mine_pot_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(pot); + + class ACE_Triggers { + SupportedTriggers[] = {"Command", "MK16_Transmitter"}; + class Command { + digDistance = 0; + fuseTime = 1; + }; + class MK16_Transmitter: Command {}; + }; +}; +// Pot mine (Proximity) +class vn_mine_pot_range_mag: vn_mine_pot_mag { + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0; + }; + }; +}; + +// Jerrycan mine (Remote) +class vn_mine_jerrycan_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(jerrycan); + + class ACE_Triggers { + SupportedTriggers[] = {"Command", "MK16_Transmitter"}; + class Command { + digDistance = 0.02; + fuseTime = 1; + }; + class MK16_Transmitter: Command {}; + }; +}; +// Jerrycan mine (Proximity) +class vn_mine_jerrycan_range_mag: vn_mine_jerrycan_mag { + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.02; + }; + }; +}; + +// Mortar shell on a stick (Proximity) +class vn_mine_mortar_range_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(mortar_range); + + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.5; + }; + }; +}; + +// Limpet mine USA (Remote) +class vn_mine_limpet_01_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(limpet_01); +}; + +// Limpet mine RUS (Remote) +class vn_mine_limpet_02_mag: vn_mine_limpet_01_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(limpet_02); +}; + +// Chicom NO8 mine +class vn_mine_chicom_no8_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(chicom_no8); + + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0; + }; + }; +}; + +// DH10 mine (Remote) +class vn_mine_dh10_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(dh10); +}; +// DH10 mine (Proximity) +class vn_mine_dh10_range_mag: vn_mine_dh10_mag { + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0; + }; + }; +}; + +// Grenade board mine (Tripwire 4m) +class vn_mine_gboard_range_mag: vn_mine_m18_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(gboard); + + class ACE_Triggers { + SupportedTriggers[] = {"Tripwire"}; + class Tripwire { + digDistance = 0; + }; + }; +}; + +// Satchel charge +class vn_mine_satchelcharge_02_mag: vn_mine_satchel_remote_02_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(satchelcharge_02); +}; + +// Bangalore mine +class vn_mine_bangalore_mag: vn_mine_satchel_remote_02_mag { + EGVAR(explosives,SetupObject) = QEXPLOSIVES_PLACE(bangalore); +}; diff --git a/optionals/compat_sog/CfgMagazines/food.hpp b/optionals/compat_sog/CfgMagazines/food.hpp new file mode 100644 index 0000000000..b8f2c956e2 --- /dev/null +++ b/optionals/compat_sog/CfgMagazines/food.hpp @@ -0,0 +1,675 @@ +#define DRINKING_ANIMS \ + EXGVAR(field_rations,consumeAnims)[] = { \ + QEGVAR(field_rations,drinkStand), \ + QEGVAR(field_rations,drinkCrouch), \ + QEGVAR(field_rations,drinkProne) \ + } +#define DRINKING_SOUNDS \ + EXGVAR(field_rations,consumeSounds)[] = { \ + QEGVAR(field_rations,drink1), \ + QEGVAR(field_rations,drink1), \ + QEGVAR(field_rations,drink2) \ + } + +class vn_prop_base; + +// US Canteen 0.75l +class vn_prop_drink_01: vn_prop_base { + // assuming 250ml = 5% of thirst + EXGVAR(field_rations,thirstQuenched) = 15; + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// US Canteen 1.0l +class vn_prop_drink_02: vn_prop_drink_01 { + EXGVAR(field_rations,thirstQuenched) = 20; + EXGVAR(field_rations,replacementItem) = "ACE_Canteen_Empty"; +}; + +// NVA Canteen 0.76l +class vn_prop_drink_03: vn_prop_drink_01 { + EXGVAR(field_rations,thirstQuenched) = 16; +}; + +// NVA Canteen 1.1l +class vn_prop_drink_04: vn_prop_drink_01 { + EXGVAR(field_rations,thirstQuenched) = 22; + EXGVAR(field_rations,replacementItem) = "ACE_Canteen_Empty"; +}; + +// Bottle 0.5l +class vn_prop_drink_05: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = 10; + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Bottle 2.0l +class vn_prop_drink_06: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = 40; + + EXGVAR(field_rations,consumeTime) = 15; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Tilts Hot Sauce +class vn_prop_drink_07_01: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = -10; + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Hoangs Muoc Mam +class vn_prop_drink_07_02: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = -10; + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Napalm Sauce +class vn_prop_drink_07_03: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = -10; + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Savage Bia (Beer) +class vn_prop_drink_08_01: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = 10; + EXGVAR(field_rations,hungerSatiated) = 2; // beer is food too ;) + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Whiskey +class vn_prop_drink_09_01: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = 5; + + EXGVAR(field_rations,consumeTime) = 10; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Water pack 2.0l +class vn_prop_drink_10: vn_prop_base { + EXGVAR(field_rations,thirstQuenched) = 40; + + EXGVAR(field_rations,consumeTime) = 15; + DRINKING_ANIMS; + DRINKING_SOUNDS; +}; + +// Ration 0.75Kg +class vn_prop_food_meal_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 15; + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Fox Hole Dinner for Two. Chicken and Noodles + Turkey Loaf + Cheese Spread + Hot sauce +class vn_prop_food_meal_01_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Soup Du Jour. Ham and Lima Beans + Crackers + Hot sauce +class vn_prop_food_meal_01_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Breast of Chicken Under Bullets. Boned Chicken + Cheese Spread + White Bread + Hot sauce +class vn_prop_food_meal_01_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Battlefield Fufu. Boned Chicken + Peanut Butter + Milk + Hot sauce +class vn_prop_food_meal_01_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Ham with Spiced Apricots. Fried Ham + Apricots + Jam + Hot sauce +class vn_prop_food_meal_01_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Pork Mandarin. Pork-steak + Hot sauce +class vn_prop_food_meal_01_06: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Tin Can Casserole. Frank and Beans + Beefsteak + Crackers + Cheese Spread + Hot sauce +class vn_prop_food_meal_01_07: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Creamed Turkey on Toast. Turkey loaf + White Bread + Hot sauce +class vn_prop_food_meal_01_08: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Fish with Front line Stuffing. Crackers + Ham and Egg Chopped + Hot sauce +class vn_prop_food_meal_01_09: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Combat Zone Burgoo. Spiced Beef + Ham and Lima Beans + Crackers + Hot sauce +class vn_prop_food_meal_01_10: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Patrol Chicken Soup. Fresh Chicken + Crackers + Hot sauce +class vn_prop_food_meal_01_11: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Guard Relief Eggs Benedict. White Bread + Ham and Eggs Chopped + Cheese Spread + Hot sauce +class vn_prop_food_meal_01_12: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Beefsteak En Croute. White Bread + Beefsteak + Hot sauce +class vn_prop_food_meal_01_13: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Curried Meat Balls Over Rice. Meat Balls and Beans + Hot sauce +class vn_prop_food_meal_01_14: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Cease Fire Casserole. Beefsteak + Spiced Beef + Hot sauce +class vn_prop_food_meal_01_15: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Rice Paddy Shrimp. Fresh Shrimp + Cheese Spread + Hot sauce +class vn_prop_food_meal_01_16: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Battlefield Birthday Cake. Pound Cake + Chocolate Candy + Hot sauce +class vn_prop_food_meal_01_17: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Pecan Cake Roll with Peanut Butter Sauce. Pecan Cake Roll + Peanut Butter + Hot sauce +class vn_prop_food_meal_01_18: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,thirstQuenched) = -1; // hot! + + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Con ho. Rice + Tiger + Vegetables + Fish Sauce +class vn_prop_food_meal_02_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Con voi. Rice + Elephant + Vegetables + Fish Sauce +class vn_prop_food_meal_02_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Con ran. Rice + Snake + Vegetables + Fish Sauce +class vn_prop_food_meal_02_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Cha ca la vong. Rice + Fish + Vegetables + Fish Sauce +class vn_prop_food_meal_02_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Con tom. Rice + Shrimp + Vegetables + Fish sauce +class vn_prop_food_meal_02_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Pho ga. Rice + Chicken + Vegetables + Fish sauce +class vn_prop_food_meal_02_06: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// PIR Rations. Contains 1Kg of high energy food: PIR ration (Beef) +class vn_prop_food_pir_01_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// PIR Rations. Contains 1Kg of high energy food: PIR ration (Fish and Squid) +class vn_prop_food_pir_01_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// PIR Rations. Contains 1Kg of high energy food: PIR ration (Shrimp and Mushroom) +class vn_prop_food_pir_01_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// PIR Rations. Contains 1Kg of high energy food: PIR ration (Mutton) +class vn_prop_food_pir_01_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// PIR Rations. Contains 1Kg of high energy food: PIR ration (Sausage) +class vn_prop_food_pir_01_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 10Kg of food: Ration box (LRP Ration Box) +class vn_prop_food_box_01_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 100; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 10Kg of food: Ration box (PIR Ration Box) +class vn_prop_food_box_01_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 100; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 10Kg of food: Ration box (MCI Ration Box) +class vn_prop_food_box_01_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 100; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Ham and Eggs Chopped) +class vn_prop_food_box_02_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Ham Fried) +class vn_prop_food_box_02_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Beans w/ Frankfurter Chunks) +class vn_prop_food_box_02_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Spaghetti w/ Ground Meat) +class vn_prop_food_box_02_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Turkey Loaf) +class vn_prop_food_box_02_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Pork Steak) +class vn_prop_food_box_02_06: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Beef w/ Spiced Sauce) +class vn_prop_food_box_02_07: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Boxed Rations. Contains 2Kg of food: Ration box (Chicken Boned) +class vn_prop_food_box_02_08: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 50; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Beefsteak) +class vn_prop_food_can_01_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Spiced Sauce) +class vn_prop_food_can_01_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Turkey Loaf) +class vn_prop_food_can_01_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Ham, Fried) +class vn_prop_food_can_01_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Ham and Eggs Chopped) +class vn_prop_food_can_01_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Tuna) +class vn_prop_food_can_01_06: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Chicken and Noodles) +class vn_prop_food_can_01_07: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Chicken Boned) +class vn_prop_food_can_01_08: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Pork Slices with Juices) +class vn_prop_food_can_01_09: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (B-1A Unit Crackers and Candy) +class vn_prop_food_can_01_10: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (B-2 Unit Crackers and Cheese Spread) +class vn_prop_food_can_01_11: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Pound Cake) +class vn_prop_food_can_01_12: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Pecan Cake Roll) +class vn_prop_food_can_01_13: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Chocolate Nut Roll) +class vn_prop_food_can_01_14: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (Fruitcake) +class vn_prop_food_can_01_15: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.5Kg of food: Ration can (White Bread) +class vn_prop_food_can_01_16: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 25; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Beans w/ Meat Balls in Tomato Sauce) +class vn_prop_food_can_02_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Ham and Lima Beans) +class vn_prop_food_can_02_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Beans w/ Frankfurter Chunks in Tomato Sauce) +class vn_prop_food_can_02_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Spaghetti w/ Ground Meat) +class vn_prop_food_can_02_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (B-3 Unit Cookies, Jam and Cocoa Beverage Powder) +class vn_prop_food_can_02_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Apricots) +class vn_prop_food_can_02_06: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Peaches) +class vn_prop_food_can_02_07: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.75Kg of food: Ration can (Pears) +class vn_prop_food_can_02_08: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.3Kg of food: Ration can (Peanut Butter) +class vn_prop_food_can_03_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 15; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.3Kg of food: Ration can (Jam, Seedless Blackberry) +class vn_prop_food_can_03_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 15; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.3Kg of food: Ration can (Pineapple Jam) +class vn_prop_food_can_03_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 15; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Canned Rations. Contains 0.3Kg of food: Ration can (Cheese Spread) +class vn_prop_food_can_03_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 15; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Orange +class vn_prop_food_fresh_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 10; + EXGVAR(field_rations,thirstQuenched) = 10; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Pumpik 3Kg +class vn_prop_food_fresh_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,thirstQuenched) = 5; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Chicken 3Kg +class vn_prop_food_fresh_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 35; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Shrimp 3Kg +class vn_prop_food_fresh_04: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Fish 3Kg +class vn_prop_food_fresh_05: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Pork 3Kg +class vn_prop_food_fresh_06: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 35; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Snake 3Kg +class vn_prop_food_fresh_07: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Tiger 3Kg +class vn_prop_food_fresh_08: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Elephant 3Kg +class vn_prop_food_fresh_09: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 20; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// Rau Ma 3Kg +class vn_prop_food_fresh_10: vn_prop_food_fresh_03 { + EXGVAR(field_rations,hungerSatiated) = 30; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Beef Hash) +class vn_prop_food_lrrp_01_01: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Chili Con Carne) +class vn_prop_food_lrrp_01_02: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Spaghetti w/ Meat Sauce) +class vn_prop_food_lrrp_01_03: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Beef and Rice) +class vn_prop_food_lrrp_01_04: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Chicken Stew) +class vn_prop_food_lrrp_01_05: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Pork w/ Escalloped Potatoes) +class vn_prop_food_lrrp_01_06: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Beef Stew) +class vn_prop_food_lrrp_01_07: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; + +// LRRP Rations. Contains 1Kg of high energy food: LRRP ration (Chicken and Rice) +class vn_prop_food_lrrp_01_08: vn_prop_base { + EXGVAR(field_rations,hungerSatiated) = 90; + EXGVAR(field_rations,consumeTime) = 10; +}; diff --git a/optionals/compat_sog/CfgVehicles.hpp b/optionals/compat_sog/CfgVehicles.hpp index 768f3b1d30..d96ae7b75c 100644 --- a/optionals/compat_sog/CfgVehicles.hpp +++ b/optionals/compat_sog/CfgVehicles.hpp @@ -1,4 +1,5 @@ class CfgVehicles { + #include "CfgVehicles\backpacks.hpp" #include "CfgVehicles\boxes.hpp" #include "CfgVehicles\explosives.hpp" #include "CfgVehicles\helicopters.hpp" @@ -9,4 +10,5 @@ class CfgVehicles { #include "CfgVehicles\wheeled.hpp" #include "CfgVehicles\land.hpp" #include "CfgVehicles\vn_boxes.hpp" + #include "CfgVehicles\boats.hpp" }; diff --git a/optionals/compat_sog/CfgVehicles/backpacks.hpp b/optionals/compat_sog/CfgVehicles/backpacks.hpp new file mode 100644 index 0000000000..8feb83332c --- /dev/null +++ b/optionals/compat_sog/CfgVehicles/backpacks.hpp @@ -0,0 +1,33 @@ + +class vn_b_pack_pfield_01; +class vn_b_pack_pfield_02: vn_b_pack_pfield_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; + +class vn_b_pack_p08_01; +class vn_b_pack_p08_02: vn_b_pack_p08_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; + +class vn_b_pack_p08_03: vn_b_pack_p08_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; + +class vn_b_pack_p44_01; +class vn_b_pack_p44_02: vn_b_pack_p44_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; + +class vn_b_pack_p44_03: vn_b_pack_p44_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; + +class vn_b_pack_01; +class vn_b_pack_prc77_01: vn_b_pack_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; + +class vn_b_pack_lw_01; +class vn_b_pack_lw_03: vn_b_pack_lw_01 { + EGVAR(trenches,entrenchingTool) = 1; +}; diff --git a/optionals/compat_sog/CfgVehicles/boats.hpp b/optionals/compat_sog/CfgVehicles/boats.hpp new file mode 100644 index 0000000000..cd790b106f --- /dev/null +++ b/optionals/compat_sog/CfgVehicles/boats.hpp @@ -0,0 +1,20 @@ +// PTF Nasty https://www.ptfnasty.com/ptf17chap2.html (610 Gallons) +class vn_boat_armed_base; +class vn_boat_05_base : vn_boat_armed_base { + EGVAR(refuel,fuelCapacity) = 2773; +}; + +// PBR https://www.warboats.org/pbr.htm +class vn_boat_12_base : vn_boat_armed_base { + EGVAR(refuel,fuelCapacity) = 727; +}; + +// STAB https://www.powercatboat.com/STAB/STAB.html +class vn_boat_09_base : vn_boat_armed_base { + EGVAR(refuel,fuelCapacity) = 464; +}; + +// Type 55A Shantou Gunboat (Could find no info on this, so same as the similarly sized PTF for now) +class vn_boat_03_base : vn_boat_armed_base { + EGVAR(refuel,fuelCapacity) = 2773; +}; diff --git a/optionals/compat_sog/CfgVehicles/explosives.hpp b/optionals/compat_sog/CfgVehicles/explosives.hpp index eeffe380a7..0ff596451b 100644 --- a/optionals/compat_sog/CfgVehicles/explosives.hpp +++ b/optionals/compat_sog/CfgVehicles/explosives.hpp @@ -3,6 +3,7 @@ class EGVAR(explosives,Place): Items_base_F { class ACE_Actions { class ACE_MainActions; }; + class EventHandlers; }; // Claymore @@ -138,5 +139,119 @@ class EXPLOSIVES_PLACE(punji_02): EGVAR(explosives,Place) { // Punji whip class EXPLOSIVES_PLACE(punji_03): EGVAR(explosives,Place) { displayName = "$STR_VN_MINE_PUNJI_01_MAG_DN"; - model = "\vn\weapons_f_vietnam\mines\punji\vn_mine_punji_03_mag"; + model = "\vn\weapons_f_vietnam\mines\punji\vn_mine_punji_03"; + + class EventHandlers: EventHandlers { + class ADDON { + init = QUOTE(_this call FUNC(handlePunjiTrapPlace)); + }; + }; +}; + +// Punji door-way +class EXPLOSIVES_PLACE(punji_04): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_PUNJI_04_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\punji_02\vn_mine_punji_04_mag"; +}; + +// Punji side whip +class EXPLOSIVES_PLACE(punji_05): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_PUNJI_05_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\punji_02\vn_mine_punji_05_mag"; +}; + +// Bike mine +class EXPLOSIVES_PLACE(bike): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_BIKE_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\bike\vn_mine_bike_mag"; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[0.085, 0.185, 0.54]"; + }; + }; + + class EventHandlers: EventHandlers { + class ADDON { + init = QUOTE(_this call FUNC(handleBikeMinePlace)); + }; + }; +}; + +// Cartridge mine +class EXPLOSIVES_PLACE(cartridge): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_CARTRIDGE_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\cartridge\vn_mine_cartridge_mag"; +}; + +// Lighter mine +class EXPLOSIVES_PLACE(lighter): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_LIGHTER_MAG_DN"; + model = "\vn\characters_f_vietnam\BLUFOR\headgear\items\vn_b_item_lighter_01"; +}; + +// Pot mine +class EXPLOSIVES_PLACE(pot): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_POT_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\pot\vn_mine_pot_mag"; +}; + +// Jerrycan mine +class EXPLOSIVES_PLACE(jerrycan): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_JERRYCAN_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\jerrycan\vn_mine_jerrycan_mag"; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[0, 0, 0.15]"; + }; + }; +}; + +// Mortar shell on a stick +class EXPLOSIVES_PLACE(mortar_range): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_MORTAR_RANGE_MAG_DN"; + model = "vn\static_f_vietnam\mortar_type53\vn_shell_82mm_o832d_he_mag"; +}; + +// Limpet mine USA +class EXPLOSIVES_PLACE(limpet_01): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_LIMPET_01_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\limpet_01\vn_mine_limpet_01_mag"; +}; + +// Limpet mine RUS +class EXPLOSIVES_PLACE(limpet_02): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_LIMPET_02_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\limpet_02\vn_mine_limpet_02_mag"; +}; + +// Chicom NO8 mine +class EXPLOSIVES_PLACE(chicom_no8): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_CHICOM_NO8_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\no8\vn_mine_chicom_no8_mag"; +}; + +// Dh10 mine +class EXPLOSIVES_PLACE(dh10): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_DH10_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\dh10\vn_mine_dh10_mag"; +}; + +// Grenade board mine +class EXPLOSIVES_PLACE(gboard): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_TRIPWIRE_RGD5_04_DN"; + model = "vn\weapons_f_vietnam_03\mines\gboard\vn_mine_gboard_range_mag"; +}; + +// Satchel charge +class EXPLOSIVES_PLACE(satchelcharge_02): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_SATCHELCHARGE_02_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\satchelcharge_02\vn_mine_satchelcharge_02_mag"; +}; + +// Bangalore mine +class EXPLOSIVES_PLACE(bangalore): EGVAR(explosives,Place) { + displayName = "$STR_VN_MINE_BANGALORE_MAG_DN"; + model = "vn\weapons_f_vietnam_03\mines\bangalore\vn_mine_bangalore_mag"; }; diff --git a/optionals/compat_sog/CfgVehicles/planes.hpp b/optionals/compat_sog/CfgVehicles/planes.hpp index 662f95d116..6d7f7de78d 100644 --- a/optionals/compat_sog/CfgVehicles/planes.hpp +++ b/optionals/compat_sog/CfgVehicles/planes.hpp @@ -3,3 +3,13 @@ class Plane_Base_F; class vn_air_f4_base: Plane_Base_F { EGVAR(refuel,fuelCapacity) = 7548; }; + +// F-100D https://www.supersabre.com/f-100specs.htm +class vn_air_f100d_base : Plane_Base_F { + EGVAR(refuel,fuelCapacity) = 4500; +}; + +// MIG-19S https://en.wikipedia.org/wiki/Mikoyan-Gurevich_MiG-19#cite_ref-60 +class vn_air_mig19_base : Plane_Base_F { + EGVAR(refuel,fuelCapacity) = 1800; +}; diff --git a/optionals/compat_sog/CfgVehicles/tracked.hpp b/optionals/compat_sog/CfgVehicles/tracked.hpp index 02b52949c6..94331cef36 100644 --- a/optionals/compat_sog/CfgVehicles/tracked.hpp +++ b/optionals/compat_sog/CfgVehicles/tracked.hpp @@ -6,5 +6,21 @@ class vn_armor_m41_base: vn_armor_tank_base { // Type 63 class vn_armor_type63_base: vn_armor_tank_base { - EGVAR(refuel,fuelCapacity) = 545 ; + EGVAR(refuel,fuelCapacity) = 545; +}; + +// M113A1 https://man.fas.org/dod-101/sys/land/m113.htm +class APC_Tracked_01_base_F; +class vn_armor_m113_base : APC_Tracked_01_base_F { + EGVAR(refuel,fuelCapacity) = 360; +}; + +// PT-76A https://en.wikipedia.org/wiki/PT-76 +class vn_armor_pt76_base : vn_armor_tank_base { + EGVAR(refuel,fuelCapacity) = 250; +}; + +// PT-76B (This variant increased the fuel size from 250 to 400 liters) +class vn_armor_pt76b_base : vn_armor_pt76_base { + EGVAR(refuel,fuelCapacity) = 400; }; diff --git a/optionals/compat_sog/CfgVehicles/turrets.hpp b/optionals/compat_sog/CfgVehicles/turrets.hpp index 05cb4da769..cb9a5efef4 100644 --- a/optionals/compat_sog/CfgVehicles/turrets.hpp +++ b/optionals/compat_sog/CfgVehicles/turrets.hpp @@ -4,11 +4,12 @@ class StaticWeapon: LandVehicle { class ACE_MainActions; }; }; +class StaticCannon: StaticWeapon {}; +class StaticMGWeapon: StaticWeapon {}; // --- Gun Turrets ------------------------------------------------------------- // M2 Browning - High -class StaticMGWeapon: StaticWeapon {}; class vn_static_m2_high_base: StaticMGWeapon { class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -18,11 +19,11 @@ class vn_static_m2_high_base: StaticMGWeapon { class ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_m2_v_01); + proxyWeapon = "vn_m2_v_01"; magazineLocation = "_target selectionPosition 'mg1_magazine'"; disassembleWeapon = QGVAR(m2_carry); disassembleTurret = QEGVAR(csw,m3Tripod); - ammoLoadTime = 10; + ammoLoadTime = 4; ammoUnloadTime = 8; desiredAmmo = 100; }; @@ -46,12 +47,11 @@ class vn_static_m1919a6_base: vn_static_m2_low_base { class ACE_CSW: ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_m1919_v_01); - magazineLocation = "_target selectionPosition 'mg1_magazine'"; - disassembleTo = QGVAR(m1919A6_carry); - disassembleWeapon = ""; + proxyWeapon = "vn_m1919_v_01"; + magazineLocation = "_target selectionPosition 'mg1_magazine' vectorAdd [-0.3, 0, 0]"; + disassembleWeapon = QGVAR(m1919A6_carry); disassembleTurret = ""; - ammoLoadTime = 10; + ammoLoadTime = 2; ammoUnloadTime = 8; desiredAmmo = 250; }; @@ -68,12 +68,11 @@ class vn_static_m1919a4_high_base: vn_static_m1919a6_base { class ACE_CSW: ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_m1919_v_01); + proxyWeapon = "vn_m1919_v_01"; magazineLocation = "_target selectionPosition 'mg1_magazine'"; - disassembleTo = ""; disassembleWeapon = QGVAR(m1919A4_carry); disassembleTurret = QEGVAR(csw,m3Tripod); - ammoLoadTime = 10; + ammoLoadTime = 2; ammoUnloadTime = 8; desiredAmmo = 250; }; @@ -96,12 +95,11 @@ class vn_static_m60_high_base: vn_static_m2_low_base { class ACE_CSW: ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_m60_v_01); + proxyWeapon = "vn_m60_v_01"; magazineLocation = "_target selectionPosition 'mg1_trigger'"; - disassembleTo = ""; disassembleWeapon = QGVAR(m60_carry); disassembleTurret = QEGVAR(csw,m3Tripod); - ammoLoadTime = 10; + ammoLoadTime = 3; ammoUnloadTime = 8; desiredAmmo = 250; }; @@ -125,27 +123,32 @@ class vn_static_m60_low_base: vn_static_m60_high_base { class vn_static_at3_base: StaticMGWeapon {}; class vn_static_tow_base: vn_static_at3_base { EGVAR(dragging,canCarry) = 0; + EGVAR(dragging,dragPosition)[] = {0.8, 1.3, 0}; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { - position = "[-0.22, 0.28, -0.85]"; + position = "[-1.04, 0.3, -0.5]"; }; }; class ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_missile_tow_launcher); - magazineLocation = "[-0.22, 0.28, -0.5]"; + proxyWeapon = "vn_missile_tow_launcher"; + magazineLocation = "_target selectionPosition 'magazine'"; disassembleWeapon = QGVAR(tow_carry); disassembleTurret = QEGVAR(csw,m220Tripod); - ammoLoadTime = 8; + ammoLoadTime = 2; ammoUnloadTime = 5; desiredAmmo = 1; }; }; // DShKM - High -class vn_static_dp28_high_base: vn_static_m2_high_base {}; +class vn_static_dp28_high_base: vn_static_m2_high_base { + class ACE_CSW: ACE_CSW { + enabled = 0; + }; +}; class vn_static_dshkm_high_01_base: vn_static_dp28_high_base { class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { @@ -155,11 +158,11 @@ class vn_static_dshkm_high_01_base: vn_static_dp28_high_base { class ACE_CSW: ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_dshkm_v_01); + proxyWeapon = "vn_dshkm_v_01"; magazineLocation = "_target selectionPosition 'mg1_boxmag'"; disassembleWeapon = QGVAR(dshkm_carry); - disassembleTurret = QEGVAR(csw,m3Tripod); - ammoLoadTime = 10; + disassembleTurret = QEGVAR(csw,kordTripod); + ammoLoadTime = 1; ammoUnloadTime = 8; desiredAmmo = 50; }; @@ -184,7 +187,7 @@ class vn_static_dshkm_low_01_base: vn_static_dshkm_high_01_base { class ACE_CSW: ACE_CSW { disassembleWeapon = QGVAR(dshkm_shield_carry); - disassembleTurret = QEGVAR(csw,m3TripodLow); + disassembleTurret = QEGVAR(csw,kordTripodLow); }; }; @@ -205,10 +208,10 @@ class vn_static_rpd_high_base: vn_static_dp28_high_base { class ACE_CSW: ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_rpd_v_01); + proxyWeapon = "vn_rpd_v_01"; magazineLocation = "_target selectionPosition 'mg1_otochlaven_recoil'"; disassembleWeapon = QGVAR(rpd_carry); - disassembleTurret = QEGVAR(csw,m3Tripod); + disassembleTurret = QEGVAR(csw,kordTripod); ammoLoadTime = 10; ammoUnloadTime = 8; desiredAmmo = 100; @@ -225,11 +228,11 @@ class vn_static_pk_high_base: vn_static_rpd_high_base { class ACE_CSW: ACE_CSW { enabled = 1; - proxyWeapon = QGVAR(vn_pk_v_01); + proxyWeapon = "vn_pk_v_01"; magazineLocation = "_target selectionPosition 'mg1_otochlaven_recoil'"; disassembleWeapon = QGVAR(pk_carry); - disassembleTurret = QEGVAR(csw,m3Tripod); - ammoLoadTime = 10; + disassembleTurret = QEGVAR(csw,kordTripod); + ammoLoadTime = 2; ammoUnloadTime = 8; desiredAmmo = 100; }; @@ -244,7 +247,119 @@ class vn_static_pk_low_base: vn_static_pk_high_base { }; class ACE_CSW: ACE_CSW { + disassembleTurret = QEGVAR(csw,kordTripodLow); + }; +}; + +// MG42 - High +class vn_static_mg42_high_base: vn_static_rpd_high_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[-0.18, 0.5, -0.3]"; + }; + }; + + class ACE_CSW { + enabled = 1; + proxyWeapon = "vn_mg42_v_01"; + magazineLocation = "_target selectionPosition 'mg1_otochlaven_recoil'"; + disassembleWeapon = QGVAR(mg42_carry); + disassembleTurret = QEGVAR(csw,kordTripod); + ammoLoadTime = 2; + ammoUnloadTime = 8; + desiredAmmo = 250; + }; +}; + +class vn_static_mg42_low_base: vn_static_mg42_high_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[-0.1, 0.3, -0.9]"; + }; + }; + + class ACE_CSW: ACE_CSW { + disassembleTurret = ""; + }; +}; + +// SGM - High +class vn_static_sgm_base: StaticMGWeapon { + class ACE_Actions: ACE_Actions {}; +}; +class vn_static_sgm_high_base: vn_static_sgm_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "mg1_otocvez"; + }; + }; + + class ACE_CSW { + enabled = 1; + proxyWeapon = "vn_sgm_v_01"; + magazineLocation = "_target selectionPosition 'mg1_otochlaven_recoil'"; + disassembleWeapon = QGVAR(sgm_carry); + disassembleTurret = QEGVAR(csw,kordTripod); + ammoLoadTime = 2; + ammoUnloadTime = 8; + desiredAmmo = 250; + }; +}; + +// SGM - Low +class vn_static_sgm_low_base: vn_static_sgm_high_base { + class ACE_CSW: ACE_CSW { + disassembleWeapon = QGVAR(sgm_carry); + disassembleTurret = QEGVAR(csw,kordTripodLow); + }; +}; + +// SGM - Shield +class vn_o_pl_static_sgm_low_01: vn_static_sgm_low_base { + class ACE_CSW: ACE_CSW { + disassembleWeapon = QGVAR(sgm_shield_carry); + disassembleTurret = QEGVAR(csw,kordTripodLow); + }; +}; +class vn_o_nva_65_static_sgm_low_01: vn_static_sgm_low_base { + class ACE_CSW: ACE_CSW { + disassembleWeapon = QGVAR(sgm_shield_carry); + disassembleTurret = QEGVAR(csw,kordTripodLow); + }; +}; +class vn_o_nva_static_sgm_low_01: vn_static_sgm_low_base { + class ACE_CSW: ACE_CSW { + disassembleWeapon = QGVAR(sgm_shield_carry); + disassembleTurret = QEGVAR(csw,kordTripodLow); + }; +}; +class vn_o_nva_navy_static_sgm_low_01: vn_static_sgm_low_base { + class ACE_CSW: ACE_CSW { + disassembleWeapon = QGVAR(sgm_shield_carry); + disassembleTurret = QEGVAR(csw,kordTripodLow); + }; +}; + +// Mk18 Grenade laucher +class vn_static_mk18_base: StaticCannon { + EGVAR(dragging,canCarry) = 1; + EGVAR(dragging,canDrag) = 1; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "mg1_otochlaven"; + }; + }; + + class ACE_CSW { + enabled = 1; + proxyWeapon = "vn_mk18_v_01"; + magazineLocation = "_target selectionPosition 'mg1_magazine'"; + disassembleWeapon = QGVAR(mk18_carry); disassembleTurret = QEGVAR(csw,m3TripodLow); + ammoLoadTime = 1; + ammoUnloadTime = 8; + desiredAmmo = 24; }; }; @@ -303,6 +418,23 @@ class vn_static_mortar_type53_base: vn_static_mortar_m29_base { }; }; +// H-12 MLRS +class vn_static_h12_base: Mortar_01_base_F { + EGVAR(dragging,canCarry) = 0; + EGVAR(dragging,canDrag) = 1; + EGVAR(dragging,dragPosition)[] = {0.4, 2.1, 0}; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "damagegun"; + }; + }; + + class ACE_CSW { + enabled = 0; + }; +}; + // --- Non-CSW Static Weapons -------------------------------------------------- class vn_static_m45_base: vn_static_m2_high_base { @@ -344,17 +476,51 @@ class vn_sa2: StaticMGWeapon { EGVAR(dragging,canDrag) = 0; }; +class vn_static_m40a1rr_base: StaticCannon { + EGVAR(dragging,canDrag) = 1; + EGVAR(dragging,dragPosition)[] = {-0.3, 1.9, 0}; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "mg1_otochlaven"; + }; + }; +}; + +class vn_static_type56rr_base: StaticCannon { + EGVAR(dragging,canDrag) = 1; + EGVAR(dragging,dragPosition)[] = {-0.1, 0.5, 0}; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "mg1_otocvez"; + }; + }; +}; + // --- Spiderholes ------------------------------------------------------------- class vn_o_vc_spiderhole_01: StaticWeapon { EGVAR(dragging,canCarry) = 0; EGVAR(dragging,canDrag) = 0; + EGVAR(cargo,canLoad) = 0; + EGVAR(trenches,diggingDuration) = QEGVAR(trenches,smallEnvelopeDigDuration); EGVAR(trenches,removalDuration) = QEGVAR(trenches,smallEnvelopeRemoveDuration); EGVAR(trenches,noGeoClass) = QGVAR(spiderhole_01_nogeo); EGVAR(trenches,placementData)[] = {1.5, 1.5, 0.1}; EGVAR(trenches,grassCuttingPoints)[] = {}; + + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + class ACE_ContinueDiggingTrench { + displayName = ECSTRING(trenches,ContinueDiggingTrench); + condition = QUOTE([ARR_2(_target,_player)] call EFUNC(trenches,canContinueDiggingTrench)); + statement = QUOTE([ARR_2(_target,_player)] call EFUNC(trenches,continueDiggingTrench);); + }; + }; + }; }; class vn_o_vc_spiderhole_02: vn_o_vc_spiderhole_01 { EGVAR(trenches,noGeoClass) = QGVAR(spiderhole_02_nogeo); diff --git a/optionals/compat_sog/CfgWeapons.hpp b/optionals/compat_sog/CfgWeapons.hpp index 55fe9edc92..c0c0ee807b 100644 --- a/optionals/compat_sog/CfgWeapons.hpp +++ b/optionals/compat_sog/CfgWeapons.hpp @@ -5,4 +5,5 @@ class CfgWeapons { #include "CfgWeapons\pistols.hpp" #include "CfgWeapons\uniforms.hpp" #include "CfgWeapons\weapons.hpp" + #include "CfgWeapons\weapons_melee.hpp" }; diff --git a/optionals/compat_sog/CfgWeapons/csw.hpp b/optionals/compat_sog/CfgWeapons/csw.hpp index cda84c3bb4..422c847e1c 100644 --- a/optionals/compat_sog/CfgWeapons/csw.hpp +++ b/optionals/compat_sog/CfgWeapons/csw.hpp @@ -1,12 +1,5 @@ #include "\z\ace\addons\csw\script_config_macros_csw.hpp" -CREATE_CSW_PROXY(vn_m2_v_01); -CREATE_CSW_PROXY(vn_m1919_v_01); -CREATE_CSW_PROXY(vn_m60_v_01); -CREATE_CSW_PROXY(vn_missile_tow_launcher); -CREATE_CSW_PROXY(vn_dshkm_v_01); -CREATE_CSW_PROXY(vn_rpd_v_01); -CREATE_CSW_PROXY(vn_pk_v_01); CREATE_CSW_PROXY(vn_mortar_m29); CREATE_CSW_PROXY(vn_mortar_m2); CREATE_CSW_PROXY(vn_mortar_type53); @@ -16,6 +9,8 @@ class Launcher_Base_F: Launcher { class WeaponSlotsInfo; }; +// --- Gun Turrets ------------------------------------------------------------- + class GVAR(m2_carry): Launcher_Base_F { displayName = ECSTRING(csw,m2_gun); author = ECSTRING(common,ACETeam); @@ -187,7 +182,7 @@ class GVAR(dshkm_shield_carry): Launcher_Base_F { pickupTime = 4; class assembleTo { - EGVAR(csw,kordTripodLow) = "vn_o_nva_navy_static_dshkm_low_01"; + EGVAR(csw,kordTripodLow) = "vn_o_nva_static_dshkm_low_01"; }; }; @@ -265,7 +260,8 @@ class GVAR(pk_carry): Launcher_Base_F { pickupTime = 4; class assembleTo { - EGVAR(csw,kordTripod) = "vn_o_nva_static_dshkm_high_02"; + EGVAR(csw,kordTripod) = "vn_o_nva_static_pk_high"; + EGVAR(csw,kordTripodLow) = "vn_o_nva_static_pk_low"; }; }; @@ -303,6 +299,113 @@ class GVAR(mortar_m29_carry): Launcher_Base_F { }; }; +class GVAR(mg42_carry): Launcher_Base_F { + displayName = CSTRING(csw_mg42); + author = ECSTRING(common,ACETeam); + scope = 2; + model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); + modes[] = {}; + picture = QPATHTOF(UI\csw_mg42_ca.paa); + + class ACE_CSW { + type = "mount"; + deployTime = 4; + pickupTime = 4; + deploy = "vn_o_vc_static_mg42_low"; + + class assembleTo { + EGVAR(csw,kordTripod) = "vn_o_vc_static_mg42_high"; + }; + }; + + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot { + iconScale = 0.1; + }; + mass = 310; + }; +}; + +class GVAR(sgm_carry): Launcher_Base_F { + displayName = CSTRING(csw_sgm); + author = ECSTRING(common,ACETeam); + scope = 2; + model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); + modes[] = {}; + picture = QPATHTOF(UI\csw_sgm_ca.paa); + + class ACE_CSW { + type = "weapon"; + deployTime = 4; + pickupTime = 4; + + class assembleTo { + EGVAR(csw,kordTripod) = "vn_o_vc_static_sgm_high_01"; + EGVAR(csw,kordTripodLow) = "vn_o_vc_static_sgm_low_02"; + }; + }; + + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot { + iconScale = 0.1; + }; + mass = 310; + }; +}; +class GVAR(sgm_shield_carry): Launcher_Base_F { + displayName = CSTRING(csw_sgm_shield); + author = ECSTRING(common,ACETeam); + scope = 2; + model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); + modes[] = {}; + picture = QPATHTOF(UI\csw_sgm_shield_ca.paa); + + class ACE_CSW { + type = "weapon"; + deployTime = 4; + pickupTime = 4; + + class assembleTo { + EGVAR(csw,kordTripodLow) = "vn_o_vc_static_sgm_low_01"; + }; + }; + + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot { + iconScale = 0.1; + }; + mass = 310; + }; +}; + +class GVAR(mk18_carry): Launcher_Base_F { + displayName = CSTRING(csw_mk18); + author = ECSTRING(common,ACETeam); + scope = 2; + model = QPATHTOEF(apl,ACE_CSW_Bag.p3d); + modes[] = {}; + picture = QPATHTOF(UI\csw_mk18_ca.paa); + + class ACE_CSW { + type = "weapon"; + deployTime = 4; + pickupTime = 4; + + class assembleTo { + EGVAR(csw,m3TripodLow) = "vn_b_army_static_mk18"; + }; + }; + + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot { + iconScale = 0.1; + }; + mass = 310; + }; +}; + +// --- Mortars ----------------------------------------------------------------- + class GVAR(mortar_m2_carry): Launcher_Base_F { displayName = CSTRING(csw_m2); author = ECSTRING(common,ACETeam); diff --git a/optionals/compat_sog/CfgWeapons/launchers.hpp b/optionals/compat_sog/CfgWeapons/launchers.hpp index 024322d884..3dfd4984e3 100644 --- a/optionals/compat_sog/CfgWeapons/launchers.hpp +++ b/optionals/compat_sog/CfgWeapons/launchers.hpp @@ -1,13 +1,24 @@ class vn_Launcher_Base_F; class vn_m127: vn_Launcher_Base_F { - ace_overpressure_damage = 0; + EGVAR(overpressure,damage) = 0; }; class vn_rpg2: vn_Launcher_Base_F { - ace_reloadlaunchers_enabled = 1; + EGVAR(reloadlaunchers,enabled) = 1; + + EGVAR(overpressure,angle) = 45; + EGVAR(overpressure,offset) = 0.9; }; class vn_rpg7: vn_Launcher_Base_F { - ace_reloadlaunchers_enabled = 1; + EGVAR(reloadlaunchers,enabled) = 1; + + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,offset) = 0.9; }; class vn_sa7: vn_Launcher_Base_F { - ace_reloadlaunchers_enabled = 1; + EGVAR(reloadlaunchers,enabled) = 1; + + EGVAR(overpressure,range) = 6; + EGVAR(overpressure,angle) = 40; + EGVAR(overpressure,damage) = 0.6; + EGVAR(overpressure,offset) = 1.65; }; diff --git a/optionals/compat_sog/CfgWeapons/weapons_melee.hpp b/optionals/compat_sog/CfgWeapons/weapons_melee.hpp new file mode 100644 index 0000000000..077e57d38b --- /dev/null +++ b/optionals/compat_sog/CfgWeapons/weapons_melee.hpp @@ -0,0 +1,63 @@ + +// always show melee weapons in the Arsenal, +// they were considered "janky" by BI and are hidden by default until "vn_arsenalShowMelee = 1;" is set in the mission config +class vn_hand_melee_base_dynamic_scope; +class vn_m_wrench_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_hammer: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_shovel_01: vn_hand_melee_base_dynamic_scope { + scope = 2; + EGVAR(trenches,entrenchingTool) = 1; +}; +class vn_m_axe_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_axe_fire: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_bayo_carbine: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_bayo_m14: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_bayo_m16: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_bayo_m1897: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_mk2_knife_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_bolo_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_machete_02: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_typeivaxe_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_m51_etool_01: vn_hand_melee_base_dynamic_scope { + scope = 2; + EGVAR(trenches,entrenchingTool) = 1; +}; +class vn_m_bayo_m4956: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_fighting_knife_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_vc_knife_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_machete_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; +class vn_m_fishing_rod_01: vn_hand_melee_base_dynamic_scope { + scope = 2; +}; diff --git a/optionals/compat_sog/UI/csw_mg42_ca.paa b/optionals/compat_sog/UI/csw_mg42_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..a921dd5f1e7ce634d1d003a7f2e5daa4fabfb6e8 GIT binary patch literal 54363 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 OBvDXB#d~(b3ne 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 Nq$IPW;>Pd&{{uUH4k7>m literal 0 HcmV?d00001 diff --git a/optionals/compat_sog/UI/csw_mk18_ca.paa b/optionals/compat_sog/UI/csw_mk18_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..bd03dea3d133a61031b5661b3f961794b268f62c GIT binary patch literal 83405 zcma&Odt4KDx<5XjnS@(F0%#3hNG5=pnGh&#)uKrz;H_%UuP!w}DI^G5U1_(TwLN8F zG6?}~tM;_rqwCpSL_}#Z6lwP?+S*CNrCM!wx2N5u+NwbDQjBY{wp4_<{GRlj^Z(b^ z3n4&~ndka`-p~7kT3NHEaN~+KC50*s!}1H3Z~FOhS>eA#A1m-L`gl#@AK6At*=2OmG4!mxk2gJByVMA*{~gjKIZ*e_Qh>|OZyfB5Ie@aIlpshHt^fAEtHr@mdUXI+5Xz*xKJ_dGU9@YvK@UYs1JFROk(4TE`>jhW~qm zw*)(TDaqfDA{@g$Deov4t#g%rIrG^ar3ibaIElFHkP}iy z7mA7ApV+en80K)rraVsy2K4U2i#OcJ>D>5#ul%yr5KDh{^11m-wweEZXXT_C!(x|@ zYzv9^6-86SOC_Z$Jfu2PkVv2tr$Z+gD~6^|OiYLf?wQ;m?( z`Yc-O&w9HR{qJr4hp1Oy#@4<$`~2^(aX*kV?3~yBN$zyte_iAh6bOCkWUK~M^3r54 zBj{0Nd;PeG)VuPx$6xq=9*ajvRzUXrsm~xd8%&M@WH#4{oWth&ho=g zVZ^e~Q|GFGw$Sf|^)U-?RsHJ0CEFT05(xrB>N!{MX4(u2Tw*wIt3sOj$UQSHdrh9I zV-*UTnwnM^QIC3q-CdN`K@cR?Hd-g5xXt+kI`F+yJCdF$`Zxu5;0ergM(bky3BM_} zh=04J7~b#~l4dyZu&VXg`GaYi8bLzJ%SQ}Gm06uo(^>8+Ej=uk?%SD2#0>T3;mS0I z_f??eSCQ)Gd`@$>C8iFzyv zhJ!j5=lDlG$crGl)6m=9-RFqPJURAIqe?$p|qIP$OI@`=ay^jj& zn=eZuQVr<*+RngflT>xJ0wu6s?-g=5T^vY%-0{nbWPE$=bIGf+yiU`%1@Mkb`Tm44 z>_dFT?zsGf%Mx08z3gvBaWCA?`Ra>PQ>^%;`n#r^)kD1&4fytr{m<@{y7u_tO>Q@Q zQjWEan*>cl?anpprg(Sh)~}PrSh)9X>&_ImO?%x5*)~Im_ot?0C{j18&*b-ywsk&tElcvPF+xlR+I$Jwp{iZ^@Xm92 zXVTa1rklW+XxuyVW@oLJ&?QkFdw#Y@J2Cm9Kgine&!jSQM)II2vXcR$w~)(w z*vqZb&|+}J&FXe-5+ZEAnAn6j_M6qm#wm^^YHLmFehyajN--G2UVEc3`Ll7^O$YzE zndJ6S0;b-apG9^~)zwo_(ggF?1DAH#}Vh_ExE^`&J$ z+bB)Y$Hshq^0}I`)jvL0n`w2c8fW)x7#5W*uToJ_Vir=7%QYQP%?Y7nv__E5)KdvHNEkB zH5B(EZmumI^P8+FaeeKYV!m$Fmvtxk`qmH&|wz(uo zAS-6H@0;c+F~i8SZBtBGzmjf?Pjj0?`nqzHfT_j|*K~odfGM1G)i9Pw6k&>#C9H=~ z&cJkWO2X{}hx&U&ZJ;=rDC+6?*>&zjZ=M>G$Ax%%H_=ozMU9R+(`Oi;fv zwLc@ABlA^NP(h#~Eeq+tt7ojUbA$RqFqYBkM&ncRJ%(lPNdZ%Elp)!Ypv__m>T4mu zCc}AoV7_-6*4M(fB5?V{zMU^!d~`7-l)zU`rOOQ6JGptyI#&{rk!>}^M5=ETI!oPk z(FaDZpR^gkWN+}Aq_2X~%fnLQMYz&)hq!7W(z^oDelTXZstYSK zChl2;lY_b!G!;q}mTcHUx9b$et4|#9-dXe68~u+}I`fkL?noIx{w#9sJHPZaY*by2 z8geY8kNX#|v^Db;BlkJ!+Zpr7y%^%gUq+NQZfSH!1?_pL*(k`2sK@D^o?F|&c(nMC zN<}tmeS3OLoI$;c-lSEOU+GrXdf|MvibA;u4=$wyJINogB+*uu zU~0WrlNM9f2jHvTo&ZB}y~MLSU2ZlHf3nt#~>onO9ZrDc( zOVD`L4n5d6_D11mx-&H5HU2K^e=7aI@s6aggVOn7Dd}q}tnXFFoA}tjHmTwuE{%4# z24{FS&`I&3AM_(I0r&sa!8R&hro)qmbZ9_@E&(y$h1dx{A;kzHUR!H28S4ymEG{!ew@}QrQ<@KQ6LRv2q*Vg{$g2!uHB+V{m*7^Izst2*h zYdZ>d7(@9Js6~|}^A}`B)(=fkRyUxttAxOI!+SmbhFSj;GFZ@1aRWvKV>MIi>#l< zuth?Z(V9gl@^mEYw^??>O4@*x*bRwa2BqT`FMGcHmDPCPUW%hgQ8I^G*Vi)E1ea2a z(Qsw6nzt1*oEc2Yp-v}wa=hM4^MI@v?l9yU!&QN$2MtCu$3mYo+T0QDmzO0DK{c3l zF(^@)P+c|Kw_tU5;U!*;hULwme)eIhRkdD_Vupwt|J}Lhlg|`RQdRA6IhAjbDVW+# z2lG2z%IN?T(huqwF%=MY8(r^}^2}xmY{k@0_TU<5#>jh59;K{viS@Nocb=J1^p;?N7MBpSn!7ZX z>}aTVzizU&p&k2TilC;HnZ*I}Wr(GFQFQ-)xaSspCL)2Jp3DgV!A9$5g0CC*878uV zRhiJ3+YH!)yhihnpcEOFs{fHC@)Z(ZTq?Zcq=cYRdOK(aqX}!&JNEyz!PhqBie??3 zajrbq?(Qf6=xy}g>YSG8P~u7&GLw@S8+4nHt201xpMrH29~MNamKlgP0U__mtV=;@ zOT}7(Nx&Vmwn8b|{WDY<59uHJFNn=&YlR~*5B(GqvjkAeb1f1oD^YF=5*jSrozDm< z+y&Iu8QI3z+&)JO7<)>lgbboxR~<(MC@-5ulKJ-Id zFBgv{&6UmJ;b6A~3{1*=u!pwmpWT^6beXKb1BCg`&Zh&K1ZWtO;b=8`uO+!z3bUqA z)fX+XalL^~6QB8BOQwgdqHKmU7GaFol|RZ44QYuc<4|w+Tt^eyRd6Ps@h)jDIBT|I zX}%@^?}3boMZ5z5q^)rw9UWB4w|5#aEwucLSETCD(}`bZdD)xgTS?wtQ3nyTwb;zM z_c66ORyWbTGZ2}sqpa~2u{1w?y!;`Vm-!r?RZ0OAFf63S)o9aqS%P|b3BtMXJf>SWbz?@r|H9KFz=Uw+m)F-i&psjZ#d_gJmaVqxd93jh&rL za9)?0n};{&2bcgY>#yn<&)v*cY2+nFkw)vLP2PtGb%hTKddM8&T)C)762*n^&T?;k zJ#@CA$!-&`uiY7|?G5&rZ2G?%!>txYrnmby5uN3FlhZAa`<#lOZdyxvq zb(WW!t;3N1#9te5pKlu_#~m+cf*I#4rE!|K1D5)@t#iucv7dEG)6+S&VV~ofWl&qD zrl;jRPM>SVvRU_l;TrVkKw#ELPDr0royD*rRVOP6$N*m*^oOWqZpG)o67RJG-@h7kt z@@o$))*{D~1YLW){Qfj0$>XHJqKK>H0%MiYP`8F)Shv&dG6^K{PQ$udh;DxJc2jJe z8&I{?pq|xiu01s}?W4p8i0%e6os9ltc1;S6~mZ4j<||sN~lUY zqIFHR`6kfXyICA=A2S$+Bwu2d&7B9HNW8E}XeC}Lb`77pM+M_v&hxU_7Be7zb!x|k zeYeKO8X*0kWApBWng@fe=k z0MF~rJ4MS&Za0yVtf8O~vF^#*F^2V?3J@k4dvCvScazUS*#i%q(U1P^@lO z!AIs`6-5e*aOe3~Uo=`gj*M)NV};>lu&N;2Zr)nl@^s9cWz#=ZKUnoQ(P)u9zH5rvxo0~SI(xI4k&P5*k@mb?W@zhwBw_f-vpYjaQg2pBl}BEy zKq>G4D;m8bZP@?s^9pSnEn%n;A2J?R2mUzpa7gcUn|T&9P`o3)CS}leAUi(V8P=>j zVu;(r$gW6)68=jaU;9e25{Ay|9q!Eo|Frfd#hZc;dcHcs{rX_dU=M~!-xwJn>$Ox*!BK43Lbn^@K%9Y ze87deZUN-+swcdqbV%KiU#6HttXV@z17}hikBYQMx22L$a#>87=wYlz)O}mJnd@m> z2skt8Y#~m%>LY=)$&*PJJ6bjxMKfMngeTy0@cV&c?IHX={zw*=CrGh#vX}nXlIm;c z4lAjRyVY(&nL^nd1><|A0+$(2+FyaYl()uXl-)h6nLJb5Msa5Jc4ay((o6mT_1b(;X$n5Q+qnzM-Hh1_FM^B2Ne=d~96M z=VBO+(w9`vf2`Rkv+6mCA19~Z{!8+WlIP!fuLZ;Q;0d%MzMx9hVh?v;H8@Kv>axEl zMXh&=HF94OMWc7_E;{&&*mviw*jKtM!zLT{7ZN&I&t4N}LmRvQ+VIree^t;6z3-5oNtnTBtM~W5vERAz%OM)t z^1=5h1%1)dO{%jn6VJZ6|BzJ5K=mGdp9thFnTfxyY`dGgPh5qc4eP) zZAyJ3i!%aDkSr~a%K-~An#boAT)G~V;hbq;`Fe^l= z9tuf|)*Y7A5B*7yJPpTJgo z0d?>7`xxs&R8`iR%UJC>!qIuYO*x{cf&^I8*5)${ZZrwDu}Fsl7V9pE%o`PI^vhqa zeGbZ5Gg6cYOx7`(AvUZ~;vyGu&#T2(=(gm`G{5M%oymlA=)hb|rGB;eszI5qc!3dj zBMjHjl<)_1RafoTqN2=i3zJ`(yjL-|?+ma*Dw636PE$Vh+3Xb8QiiiJBbov0fofZT8kFC(JPN9e+@Mk z`8v068KIbX7#A*$@5N()5_5l>^a1 zNc@^e%I>|r`Xd-HRiyjihIQKwPe?eC;_#pqXZKvs6u%%HZq?!&<2|CJr1jhCXz{CD zZ(T>hAfUD?la#t8C`EAzkfhbx(W&8=Xi>6+^aPm;Lwp?|IaVECbG$sD(LgV7cWVI7 zr4HIk!@0B&B5HSbTWBLC9>8ZcSGwoS?bEBj9)4n8Gt&@&U$i{GFTf-e zQBvy}c;#IM_~O&kP*TW8GtJ&ZOoGoGgjvwqN`_X_fjp~WnH75wfJvY|N6|;7XQ0yg z_e4yR`x$qCcDyU#+~qku3B-njPG}CR^qo z{S$30A1Er^fLnCLMAH|pj9c32yv?Sz~ba#K{5*eijPlC)o-Um`tp)!ylnJ@ ztiYBx=R*iAe;-D9P?_f0#G&KPe{48fgzejzD}Dt?xdFB?x@2rYF2|<&E5|gHSfL)!6~#rS zL>P$lymTNt8aL}}-!AW~swkl({mbb^4`nCi2zrY9Q2p%Ab+y6nS80HKi!HCt#cZnN z=64zZq|n~q&1$yMLYsPH_l|v~&dDTmkX5K)=sgl(a}^bGn%2dPj1|4xH$El*2M5I|gr^%WcUO4HfZb8+L4d;R*#P9kU19QkmkVSr}_;a-bzB z5wmUU%2})o)7eqfRIrL>_<1Yy4{0E4qdSt`q$ZP?iOv?bYZ>8f)UF%UGWM0HF!6Pa`02-co{UeEzhC41eruq3K$mA( z+`D90+FE=_3M`WN^(p-y_F|YxDY_Sor1U?dG4X}Ev$I~F-jVp>l92vpb*|7#DlQ;) z7(R1q8ZJJC*b@Lw*ZK@jklr2}C45X;_mROJZkX20ygS?jI0cBU&hKRJtTAAT3THn9 zK~P*84T2Z!!^;Km{jNneLkJ3k*UMM9OuRNy9rNS)j>L&Y9>-ZyaNrhA_fSzbFjJzB z*jTYWkaceU;J-iO>?WbnX4A*lT!u-5`03i*v+()Olx#el8EQO#Hm&bAa$vddWC=Sn zxfhFM%TK8*JckuE$rtl32I4&QRA(C{Eh!+^iCL5=5sg|! zmSK_DSzfJGIYgt}8c#swi<0XTUe`twHzx&up>&9{_5wg6tpz5}lD$TL_=3g6;p%sG z*6uuzM|Uw043oWi$-q`r2Ez%oFp1~w3tEy*)^cL*+4ovtE*8=O+rYTP%`+-1HaeYV zQ9`4U`VmIf_jKiW^qpo~#z%RQK49@+T^2=;wRc)V*z`2a=87`Gc(5?SCba5)b{eiO zm-E8tN4*MJPItx=KT74O4+(Oe^v6_&d4%~%Yq_vpyTEpic_Wd zR?}9~6{(An;sQ`(I>x(@+8>#qA<(mZG?~QPsqK??U|B z0bSxjQu=5*1hJHCy5Ooa3FlP5|MJ^{$zF>|FsUCs`?rP}rD7u`#68HdQEUrCG^|%f z>v))SR3s^`igJhpx=vUGN*mLG0tAxQJ)mWH^;I1#zzab#j`G@P8k0~l^&wJDv*tE+dK!VoNySr$Jx`di;GbLfSQ<{V!OCHVr8~#p% zb2y+?^>3V{t)-k)85>7&t!Tr($S0JSe{+8aY)-ZnKN!>p!0p^E)YH`!SR&d1@dQqU z6ho{Sm3CHl~NhJe5U8CJ-|L(XF?xVYZ>td7mtp#1?m}IKUKzX2GZLIJ)H@o zy1Fux{pz;j#E+jM7E|_3F-0hi*ZW>3F7%!)NSdVh*x&9~U+z>t?4+zsDTOTo7|c=! z7W&31tA1Y7^0slF7Blfo($^U=*)^GDq6u}5*OkFrw@||FY-=l2zHD1)n)0ZQCO(11 zw?`sbca$FvdwaM~DQJDHVg^li+`dYQsrZ=!SBZgE&{e14hw5E99IGR+1zNT5GHf)?RS#5Cl5{SmU-%Nj z!IS3j(81Qfl6)wb2ayu`t4pdMW5feMA9<881GH+;0#nI*DT50qCt)K>d=42R9fth~ zM#L2P`l`w(;di;h7#aTX{!rNLwFO4&7;kAHFm09>!YY zW14CvdV0(@Ho{n47MuPpUb>|$_p*v|&+Ns$Za2++039Wvv(wD$11^g5wxWncd*-hs z&#vuzH%f5zCe0oELq`D+Fle_(i+Ji_2Q0qn;AX!^if34LQ(GO)ovV0)7OoiuE9&a% z4l*_yYnDNYkkS}mO7W^Fq3J(PvW_XYleVJt!PT;Bnqf7RYs_S&jA4r=dx#SDl57zc z=%E!TF_aGPn;()Q4Q4OPmzL(h#RV7})}zB$&_{LO80`jzB<~fm-l-Oe%T#CXPhN2G z-RCaxQqj*FnLooc1JiKY&E4A;yOcNflaE)$M5d$(Sv;&L^ZHIh&8zbHyC|-o$fSGo zV1FW35u53;UzfWX(TSM6Q>Pg50hq6Ed4Y-2;e`*5!4M(?&k?CFr)(c=S`MVI(28ay zPhK!9t@Wi&Kzu{JL6c}tEfTvWC}H5!+SV56$iu*H6kY}ZJq_qC));2H+6{AyE;Z-R+KZ1-5}TP) z_?C~h*#}avttcTuV`10|v$@OUi5W=gyPq;SFGAUEs&vSU(-j0|yOy7df9)Bdg-To} zpT5<=1d)#hp6%rI6J;TxTfEchWP zeM^c)BX=tn{qFSz{r;p&vCCYNV}lNodZte@+8md%#Wu438z<~s9Y$*#&M?P2{`sqY z_g|k+e7K|DONj;UL*sRAH1`5Npv#WOY0pbn^TY@80q+IB$j^Z>rn8*H;4`QTO17-M z4LrCFDYyFies<_$lU=uO=RDjRHb;3#s0MreOqgA4`w(Ca2@9K8lSiLM%Ap~J65PPM zYw#w0-$I~vVJ8#PcQ*hf(g7@>hkwh$xr}!2A6%4e_p7A!DYU^=>Sm;-YzM;#3y`L# z>vhVbKV}ZPb_ahLp=^d{ES}aahFPNCJyWW987|0htG)OAKHqZKOu6c(qw5IYyNtpw zPHLRnufJgtS^@NOUy(we$rDQec$-uoWhrUFCfC}kaS3fAgWvuG#r+6b1mkOeOnb!y z%FB!Hs4|#v_L$)#v%uww`gx9dOsIVey;7#F4t&5cs0AcYv~5rqV{nDE2vZxmL+E}a z09Q?rQ-eAc+7>hmM#8UcH+T2al1s~2-9}s1c;O@Z5$WTC_Eu@Z?|`8P^<7{y)5zvf^@ZhBkSyyQGJ;z`gSC?FZ9#H)vz~H+`g4 zHMRf-Ws$nOv~(%QyRO#%JO+klN@X)E+-|4^Aa8M`GF-+luHIWB1ObBPPfp$g=w=_e zpjG#+O!2gPm~aLbx5q4Jw6*21dVhPn*@{C)+eL=hTMaa4NcXRd+|sG~mXdWQE$%P^ zq{n@a0%0RfyQ1JtT|WjxS{&hsYsYaP1ZiA~ zbfyP_ck#h`5Guju`r|+1kgOh0m=?F>S`BF!XXXq>-Z2f^Zj5Nxo(i1~?9^`B}jl;}z*+PKr8m$m%xa0dIu#Cu@v?&!fyC ziwuU>$cG)Pf0eoM8}iYmsO`4$J+#)8rb=yvD<||&xJQcyE)yh}MIgE16#r#d%6s{; z%lAyS*$FO`48y{Fukweyc#|h%pL@nR)U8z&i56IHI9g{GFNPa+l6LlB9?i13%?d4K z;6EIDW4}amLG)hB8lX}2#?V+<3B_jaD!6U|p+QH%@#7=q3_o~!oUvuRW%gw3&g4aa z%puQ&LRm#)$bKS11&=jn%Jv@E!RcYD+hXz9x1=~)DP?R|ep6ofu-6NK-1QXMYnFMu z4Jtq4OWZFqQ2sFx4@PI8el^r~c4bi%GrL#mN}M^NxWF_ZzWHhBnIu47Gdmb|#IOB{ z76=$8x*FW4z(WcCYLil!SkrFyti3hAahG#$;hIVtSHO4s+_3zu1rrqDqXo|2^Ag%fj}XbNtBk9RT;kzNh|5YnU<^rAqgNaxap$E z8=k;1oXnEij*_1L&L%;q60`SykN7|h0Rq7kue~wzZ|mFd6aQ+o{)fA3ZtE1Od^7&K zINKpoTt@1O%Vir6!hKcZ=gWU1=bF7<;Oez1pN;f94BK25e|Bdu49$ggPD*q8XEwMM zOT0#_THy)yFraB5?zX(wGTE&qko~w;H7LBXf0tI(Curlbg=AO^DbtUNL8C_sSwsQK z-wo1c4b!sjOn$OPFMzf>$K<}v> zyFo6^vBN$CMt3{`GjYpPeHYo~(HHHfCLzBb(-Dqk{H+RS zPS|(KwcQl{<$%s$hLHm;4ANE>N+^KtOs|8lpQaS(IWVMU4(MingYLeFVp3L!?ON|+ zO42xXv1w8LK-PoJ80KBS{^_WzuoX}naSY9y-S^~t0D%KfrblM?x1LXL{MzCoBJym< zu+hu!xV!`?B4|lX?G$HA9bBj=w@s36FBxu?qN7&nJl}HEotK9*f`oc4K?%ZdX)Yxg zQj0D-gOpH#r*^!#|2XYs@3uUqQ(+5?V(ZU|bI1%*qKw1$6ZRT)sQ_W)91Bt~D-`%m zT?Ilgmuoe0UWP5(QZQ%{pkZDydhMNouAH#FJupox8MLociySLab3r!Aa2LJObY$8j zw*hUD(q*;{w^O0t#1^UIpvb-ks~*hPM~m$bhJY+%ctGAj%W@LZ4D2XltSzMHTBU^i ziOE{EZw+AZY46BEaI0q~WRi?AmC_K*BgC5OEP6);%o81jvxwdyNR=$FRJLP^QP6=& z$rMZ&tUzc&35+v}ueENJ4po7s=7XwUCdl^CVhs2R$H|X$5sMdAA*Ci;)=^TBUx>xj zAKg`cV3i;Aad25fLkAWYzS6t!Qg2dbFtove{p_b2Q6IB<=;W4$CEGJ!PQ@M})aq>I z21?To0CD|HF~j7UsWAI?c_$RCUN~ye}<*J)sU(1W(I0vC|-ksQt4O(qBE@nh6+U=1_K>s6$!;Cj$ufNS? zTi8r;kD(+@t(ytiHaZy*0}SAP$vqNH$;sciF91&JxP8mS<7d{wntoAv((+$}-_$E< z6R&h3zmmyg%wQ3GpP` z9>;(siH`>jIFR-W{0&S3^!*fmFff$)clHPU7E=7CjEq@Y)bG91*O+uE)sdU-ZP<_; zN-fIWoRfEc%E=3Z2#O z&c9yBDT�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 literal 0 HcmV?d00001 diff --git a/optionals/compat_sog/UI/csw_sgm_ca.paa b/optionals/compat_sog/UI/csw_sgm_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..8ab2d8e98f7cdd46f6decc319055786cdbf840f4 GIT binary patch literal 50787 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 z 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 + * + * Return Value: + * None + * + * Example: + * [bikeMine] call ace_compat_sog_fnc_handleBikeMinePlace + * + * Public: No + */ + +params ["_mine"]; + +if (!local _mine) exitWith {}; + +// change COM to have the bike upright like the placed mine +_mine setCenterOfMass [0,0, -0.5]; + +// prevent the object from swinging left and right +[{isTouchingGround _this}, { + _this setVelocity [0,0,0] +}, _mine, 3] call CBA_fnc_waitUntilAndExecute; diff --git a/optionals/compat_sog/functions/fnc_handlePunjiTrapDamage.sqf b/optionals/compat_sog/functions/fnc_handlePunjiTrapDamage.sqf index 3ccc1bf47f..af935904c0 100644 --- a/optionals/compat_sog/functions/fnc_handlePunjiTrapDamage.sqf +++ b/optionals/compat_sog/functions/fnc_handlePunjiTrapDamage.sqf @@ -38,10 +38,20 @@ switch (typeOf _trap select [0, 16]) do { _bodyParts = ["LeftLeg", "RightLeg", "Body"]; _stabCount = random [3, 5, 7]; }; + // Door way trap + case "vn_mine_punji_04": { + _bodyParts = ["Head", "Body"]; + _stabCount = random [3, 5, 7]; + }; + // Side whip trap + case "vn_mine_punji_05": { + _bodyParts = ["LeftLeg", "RightLeg"]; + _stabCount = random [3, 5, 7]; + }; }; { for "_i" from 0 to _stabCount do { [_x, random [1, 2, 3], selectRandom _bodyParts, "stab", _instigator] call EFUNC(medical,addDamageToUnit); }; -} forEach _affectedUnits select {isDamageAllowed _x}; // isDamageAllowed already does local check +} forEach (_affectedUnits select {isDamageAllowed _x}); // isDamageAllowed already does local check diff --git a/optionals/compat_sog/functions/fnc_handlePunjiTrapPlace.sqf b/optionals/compat_sog/functions/fnc_handlePunjiTrapPlace.sqf new file mode 100644 index 0000000000..3a60177809 --- /dev/null +++ b/optionals/compat_sog/functions/fnc_handlePunjiTrapPlace.sqf @@ -0,0 +1,33 @@ +#include "script_component.hpp" +/* + * Author: veteran29 + * Handle placement of punji trap object. + * + * Arguments: + * 0: Punji trap + * + * Return Value: + * None + * + * Example: + * [trap] call ace_compat_sog_fnc_handlePunjiTrapPlace + * + * Public: No + */ + +params ["_trap"]; + +if (isServer && {_trap isKindOf QEXPLOSIVES_PLACE(punji_03)}) exitWith { + + private _spikes = createSimpleObject ["vn\weapons_f_vietnam\mines\punji\vn_mine_punji_03_ammo", [0,0,0]]; + _spikes animateSource ["mine_trigger_source", 0.1]; + + private _offset = [0.0655, -0.0357, 0.0906]; + _spikes attachTo [_trap, _offset]; + _trap setVariable [QGVAR(spikes), _spikes]; + + _trap addEventHandler ["Deleted", { + params ["_trap"]; + deleteVehicle (_trap getVariable [QGVAR(spikes), objNull]); + }]; +}; diff --git a/optionals/compat_sog/functions/fnc_handlePunjiTrapTrigger.sqf b/optionals/compat_sog/functions/fnc_handlePunjiTrapTrigger.sqf index 1e891ee5b8..5c191ff114 100644 --- a/optionals/compat_sog/functions/fnc_handlePunjiTrapTrigger.sqf +++ b/optionals/compat_sog/functions/fnc_handlePunjiTrapTrigger.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: GhostIsSpooky + * Author: GhostIsSpooky, veteran29 * Handler for 'detonation' of a local punji trap. Workaround for local-only ammo hit event. * * Arguments: @@ -18,7 +18,22 @@ params ["_trap"]; if (!(["ACE_Medical"] call EFUNC(common,isModLoaded))) exitWith {}; private _radius = getNumber (configOf _trap >> "indirectHitRange"); -private _affectedUnits = (_trap nearEntities ["CAManBase", _radius]); +private _affectedUnits = _trap nearEntities ["CAManBase", _radius]; + +private _spikesOffset = [configOf _trap >> QGVAR(spikesOffset), "ARRAY", [0,0,0]] call CBA_fnc_getConfigEntry; +if (_spikesOffset isNotEqualTo [0,0,0]) then { + private _spikesPos = _trap modelToWorld _spikesOffset; + private _spikesCheckSelection = getText (configOf _trap >> QGVAR(spikesCheckSelection)); + private _spikesCheckRadius = getNumber (configOf _trap >> QGVAR(spikesCheckRadius)); + + TRACE_3("Using spikes offset for affected units",_spikesOffset,_spikesCheckSelection,_spikesCheckRadius); + + _affectedUnits = _affectedUnits select { + private _distance = _spikesPos distance (_x modelToWorld (_x selectionPosition _spikesCheckSelection)); + + _distance <= _spikesCheckRadius // return + }; +}; if (_affectedUnits isEqualTo []) exitWith {}; diff --git a/optionals/compat_sog/functions/fnc_woundsHandlerIncendiary.sqf b/optionals/compat_sog/functions/fnc_woundsHandlerIncendiary.sqf new file mode 100644 index 0000000000..8abdc7fbd2 --- /dev/null +++ b/optionals/compat_sog/functions/fnc_woundsHandlerIncendiary.sqf @@ -0,0 +1,40 @@ +#include "script_component.hpp" +/* + * Author: veteran29 + * Custom wound handler for SOG: PF explosive incendiary ammunition. + * Determines if the unit should be ignited and passes the damage to other wound handlers. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Damage done to each body part + * 2: Type of the damage done + * + * Return Value: + * Input + * + * Example: + * [player, [[0.5, "Body", 5]]] call ace_compat_sog_fnc_woundsHandlerIncendiary + * + * Public: No + */ + +#define BURN_THRESHOLD 1 + +params ["_unit", "_damages"]; +TRACE_2("woundsHandlerIncendiary",_unit,_damages); + +private _fireDamage = 0; +{ + _x params ["", "", "_damage"]; + _fireDamage = _fireDamage + _damage; +} forEach _damages; + +private _intensity = linearConversion [0, 20, _fireDamage, 0, 10, true]; +TRACE_2("",_intensity,_fireDamage); + +if (_intensity > BURN_THRESHOLD) then { + TRACE_2("Setting unit ablaze",_intensity,BURN_THRESHOLD); + ["ace_fire_burn", [_unit, _intensity]] call CBA_fnc_globalEvent; +}; + +_this // return diff --git a/optionals/compat_sog/script_component.hpp b/optionals/compat_sog/script_component.hpp index 2b5d04fff9..616cc49dc7 100644 --- a/optionals/compat_sog/script_component.hpp +++ b/optionals/compat_sog/script_component.hpp @@ -3,6 +3,9 @@ #include "\z\ace\addons\main\script_mod.hpp" +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE + #include "\z\ace\addons\main\script_macros.hpp" #include "\z\ace\addons\refuel\defines.hpp" diff --git a/optionals/compat_sog/stringtable.xml b/optionals/compat_sog/stringtable.xml index 6ed9e50638..67194ae6af 100644 --- a/optionals/compat_sog/stringtable.xml +++ b/optionals/compat_sog/stringtable.xml @@ -249,6 +249,38 @@ [CSW] PK 총가방 [班组] PK 枪袋 + + [CSW] MG42 Gun Bag + [CSW] MG42 Waffentasche + [CSW] MG42 ガン バッグ + [CSW] Torba na MG42 + [CSW] MG42 총가방 + [班组] MG42 枪袋 + + + [CSW] SGM Gun Bag + [CSW] SGM Waffentasche + [CSW] SGM ガン バッグ + [CSW] Torba na SGM + [CSW] SGM 총가방 + [班组] SGM 枪袋 + + + [CSW] SGM (Shield) Gun Bag + [CSW] SGM (Schutzschild) Waffentasche + [CSW] SGM (防盾) ガン バッグ + [CSW] Torba na SGM (z tarczą) + [CSW] SGM (방패) 총가방 + [班组] SGM(防盾)枪袋 + + + [CSW] Mk18 Gun Bag + [CSW] Mk18 Waffentasche + [CSW] Mk18 ガン バッグ + [CSW] Torba na Mk18 + [CSW] Mk18 총가방 + [班组] Mk18 枪袋 + [CSW] M29 Mortar Tube [CSW] M29 Mörserrohr diff --git a/tools/pDummies/vn/characters_f_vietnam/BLUFOR/headgear/items/vn_b_item_lighter_01 b/tools/pDummies/vn/characters_f_vietnam/BLUFOR/headgear/items/vn_b_item_lighter_01 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/objects_f_vietnam/supply/a2_ammo/pavn/vn_pavn_30_can.p3d b/tools/pDummies/vn/objects_f_vietnam/supply/a2_ammo/pavn/vn_pavn_30_can.p3d new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/static_f_vietnam/mortar_type53/vn_shell_82mm_o832d_he_mag b/tools/pDummies/vn/static_f_vietnam/mortar_type53/vn_shell_82mm_o832d_he_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam/mines/punji/vn_mine_punji_03 b/tools/pDummies/vn/weapons_f_vietnam/mines/punji/vn_mine_punji_03 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam/ui/icon_vn_pk_100_mag_ca.paa b/tools/pDummies/vn/weapons_f_vietnam/ui/icon_vn_pk_100_mag_ca.paa new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/bangalore/vn_mine_bangalore_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/bangalore/vn_mine_bangalore_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/bike/vn_mine_bike_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/bike/vn_mine_bike_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/cartridge/vn_mine_cartridge_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/cartridge/vn_mine_cartridge_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/dh10/vn_mine_dh10_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/dh10/vn_mine_dh10_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/gboard/vn_mine_gboard_range_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/gboard/vn_mine_gboard_range_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/jerrycan/vn_mine_jerrycan_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/jerrycan/vn_mine_jerrycan_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/limpet_01/vn_mine_limpet_01_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/limpet_01/vn_mine_limpet_01_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/limpet_02/vn_mine_limpet_02_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/limpet_02/vn_mine_limpet_02_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/no8/vn_mine_chicom_no8_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/no8/vn_mine_chicom_no8_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/pot/vn_mine_pot_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/pot/vn_mine_pot_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/punji_02/vn_mine_punji_04_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/punji_02/vn_mine_punji_04_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/punji_02/vn_mine_punji_05_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/punji_02/vn_mine_punji_05_mag new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/pDummies/vn/weapons_f_vietnam_03/mines/satchelcharge_02/vn_mine_satchelcharge_02_mag b/tools/pDummies/vn/weapons_f_vietnam_03/mines/satchelcharge_02/vn_mine_satchelcharge_02_mag new file mode 100644 index 0000000000..e69de29bb2 From abd3e383fb9e1d6032da9c067b1fc233392cb516 Mon Sep 17 00:00:00 2001 From: ace3mod Date: Thu, 8 Sep 2022 14:42:25 +0200 Subject: [PATCH 58/92] [Docs] Update component dependencies Automatically committed through CI. [ci skip] --- docs/_includes/dependencies_list.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index ad31f2bb31..e66fe20f31 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -674,10 +674,8 @@ {% endif %} {% if include.component == "compat_sog" %} -- `vn_weapons` -- `vn_emm_main_menu` -- `weapons_f_vietnam_c` - `ace_trenches` +- `loadorder_f_vietnam` {% endif %} {% if include.component == "noactionmenu" %} From accba4dd340913f2b0aa52f21042de463beefd63 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 8 Sep 2022 14:20:11 -0500 Subject: [PATCH 59/92] Update hunterkiller-framework.md (#9026) --- docs/wiki/framework/hunterkiller-framework.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/wiki/framework/hunterkiller-framework.md b/docs/wiki/framework/hunterkiller-framework.md index 09ec96e63a..b58bb984e6 100644 --- a/docs/wiki/framework/hunterkiller-framework.md +++ b/docs/wiki/framework/hunterkiller-framework.md @@ -26,6 +26,7 @@ Each element is a tuple of a turret path and operating mode. ## 2. Configs +{% raw %} ```cpp class CfgVehicles { class MyTankA { @@ -39,6 +40,7 @@ class CfgVehicles { }; }; ``` +{% endraw %} ## 2. Variables From b9ce02acf937edb2fc7307503b8be11b6a5699de Mon Sep 17 00:00:00 2001 From: Whigital Date: Sat, 10 Sep 2022 20:02:53 +0200 Subject: [PATCH 60/92] Explosives - Fix cellphone ringing if RF blocking present (#8991) --- addons/explosives/XEH_PREP.hpp | 1 + .../functions/fnc_checkDetonateHandlers.sqf | 38 +++++++++++++++++++ .../functions/fnc_detonateExplosive.sqf | 8 +--- addons/explosives/functions/fnc_dialPhone.sqf | 12 ++++-- .../explosives/functions/fnc_dialingPhone.sqf | 9 ++++- 5 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 addons/explosives/functions/fnc_checkDetonateHandlers.sqf diff --git a/addons/explosives/XEH_PREP.hpp b/addons/explosives/XEH_PREP.hpp index d549118623..319bd2fec2 100644 --- a/addons/explosives/XEH_PREP.hpp +++ b/addons/explosives/XEH_PREP.hpp @@ -39,3 +39,4 @@ PREP(startTimer); PREP(triggerType); PREP(allowDefuse); PREP(isAllowedDefuse); +PREP(checkDetonateHandlers); diff --git a/addons/explosives/functions/fnc_checkDetonateHandlers.sqf b/addons/explosives/functions/fnc_checkDetonateHandlers.sqf new file mode 100644 index 0000000000..bd3eff7586 --- /dev/null +++ b/addons/explosives/functions/fnc_checkDetonateHandlers.sqf @@ -0,0 +1,38 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror, Whigital + * Check if there is a handler blocking detonation + * + * Arguments: + * 0: Unit + * 1: Max range (-1 to ignore) + * 2: Explosive + * 3: Fuse time + * 4: Trigger Item Classname + * + * Return Value: + * Detonation Allowed + * + * Example: + * [player, -1, Explosive, 1, "ACE_Cellphone"] call ACE_Explosives_fnc_checkDetonateHandlers; + * + * Public: No + */ + +params ["_unit", "_range", "_explosive", "_fuseTime", ["_triggerClassname", "#unknown", [""]]]; +TRACE_5("checkDetonateHandlers",_unit,_range,_explosive,_fuseTime,_triggerClassname); + +private _detonationAllowed = true; + +{ + // Pass [Unit, MaxRange , Explosive , FuzeTime , TriggerItem ] + private _handlerResult = [_unit, _range, _explosive, _fuseTime, _triggerClassname] call _x; + + if (_handlerResult isEqualTo false) then { + TRACE_1("Handler Blocking",_forEachIndex); + _detonationAllowed = false; + break; + }; +} forEach GVAR(detonationHandlers); + +_detonationAllowed diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 8edc83f0ff..de7772d4de 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -28,12 +28,8 @@ private _ignoreRange = (_range == -1); if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {TRACE_1("out of range",_range); false}; private _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 !([_unit, _range, _item select 0, _item select 1, _triggerClassname] call FUNC(checkDetonateHandlers)) exitWith {false}; if (getNumber (ConfigFile >> "CfgAmmo" >> typeOf (_item select 0) >> "TriggerWhenDestroyed") == 0) then { private _previousExp = _item select 0; diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index e4292f60b3..a081abb1f1 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -35,9 +35,15 @@ if (_unit == ace_player) then { private _explosive = [_code] call FUNC(getSpeedDialExplosive); if ((count _explosive) > 0) 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; + params ["_unit", "_item"]; + + if ([_unit, -1, (_item # 0), (_item # 2), "ACE_Cellphone"] call FUNC(checkDetonateHandlers)) then { + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)), objNull, false, (getPosASL (_item # 0)), 3.16228, 1, 75]; + }; + + _unit setVariable [QGVAR(Dialing), false, true]; + }, [_unit, _explosive], 0.25 * (count _arr - 4)] call CBA_fnc_waitAndExecute; + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2), "ACE_Cellphone", _unit] call FUNC(startTimer); }; }; diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf index 0a30a298bb..a4c2f59f48 100644 --- a/addons/explosives/functions/fnc_dialingPhone.sqf +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -39,9 +39,14 @@ if (_i >= (count _arr + 2)) then { ctrlSetText [1400,"Call Ended!"]; }; }; + if (_i == (count _arr)) then { - if ((count _explosive) > 0) then { - playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_explosive select 0),3.16228,1,75]; + if ( + ((count _explosive) > 0) && + {[_unit, -1, (_explosive # 0), (_explosive # 2), "ACE_Cellphone"] call FUNC(checkDetonateHandlers)} + ) then { + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)), objNull, false, (getPosASL (_explosive # 0)), 3.16228, 1, 75]; }; }; + _args set [1, _i + 1]; From 081e9f15a3eceb52db48073221ce4bcdb964b636 Mon Sep 17 00:00:00 2001 From: Whigital Date: Sat, 10 Sep 2022 20:03:02 +0200 Subject: [PATCH 61/92] RHSAFRF Compat - Fix subsonic ammo ballistic attributes (#8990) --- optionals/compat_rhs_afrf3/CfgAmmo.hpp | 45 ++++++++++++++--------- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 4 ++ 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp index a8bdae618a..90a3e64b0a 100644 --- a/optionals/compat_rhs_afrf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -113,27 +113,38 @@ class CfgAmmo { ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class rhs_B_545x39_7U1_Ball: rhs_B_545x39_Ball { - // @todo: Provide accurate coefficients for this subsonic ammo - // In the meantime, prevent it inheriting from its supersonic parent - // ammoTempMuzzleVelocityShifts scaled down from normal - ACE_ammoTempMuzzleVelocityShifts[]={-8.85,-8.49,-7.61667,-6.70667,-5.66,-4.26667,-2.54667,-0.51,1.98667,5.05667,8.73}; - ACE_muzzleVelocities[] = {}; - ACE_barrelLengths[] = {}; + ACE_caliber = 5.67; + ACE_bulletLength = 24.3; + ACE_bulletMass = 5.2; + ACE_ammoTempMuzzleVelocityShifts[] = {-8.85,-8.49,-7.61667,-6.70667,-5.66,-4.26667,-2.54667,-0.51,1.98667,5.05667,8.73}; + ACE_muzzleVelocities[] = {300, 320, 335}; + ACE_barrelLengths[] = {200, 300, 400}; }; class rhs_B_762x39_U_Ball: rhs_B_762x39_Ball { - // @todo: Provide accurate coefficients for this subsonic ammo - // In the meantime, prevent it inheriting from its supersonic parent - // ammoTempMuzzleVelocityShifts scaled down from normal - ACE_ammoTempMuzzleVelocityShifts[]={-8.85,-8.49,-7.61667,-6.70667,-5.66,-4.26667,-2.54667,-0.51,1.98667,5.05667,8.73}; //Just Scaled Down Normal? - ACE_muzzleVelocities[] = {}; - ACE_barrelLengths[] = {}; + ACE_caliber = 7.94; + ACE_bulletLength = 33.62; + ACE_bulletMass = 12.5; + ACE_ammoTempMuzzleVelocityShifts[] = {-8.85,-8.49,-7.61667,-6.70667,-5.66,-4.26667,-2.54667,-0.51,1.98667,5.05667,8.73}; //Just Scaled Down Normal? + ACE_muzzleVelocities[]= {270, 290, 320}; + ACE_barrelLengths[]= {254.0, 414.02, 508.0}; }; class rhs_B_9x39_SP5: rhs_B_762x39_Ball { - // @todo: Provide accurate coefficients for this subsonic ammo - // In the meantime, prevent it inheriting from its supersonic parent - ACE_ammoTempMuzzleVelocityShifts[]={}; - ACE_muzzleVelocities[]={}; - ACE_barrelLengths[]={}; + ACE_caliber = 9.246; + ACE_bulletLength = 31.496; + ACE_bulletMass = 16.1; + ACE_ammoTempMuzzleVelocityShifts[] = {-2.655,-2.547,-2.285,-2.012,-1.698,-1.28,-0.764,-0.153,0.596,1.517,2.619}; + ACE_ballisticCoefficients[] = {0.275}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ICAO"; + ACE_muzzleVelocities[] = {280, 300, 320}; + ACE_barrelLengths[] = {254.0, 414.02, 508.0}; + }; + class rhs_B_9x39_SP6: rhs_B_9x39_SP5 { + ACE_caliber = 9.26; + ACE_bulletMass = 16.2; + ACE_ballisticCoefficients[] = {0.225}; + ACE_muzzleVelocities[] = {290, 310, 335}; + ACE_barrelLengths[] = {254.0, 414.02, 508.0}; }; class SubmunitionBase; diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 66390bff45..02947e4878 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -41,6 +41,10 @@ class CfgWeapons { ACE_barrelTwist = 160.02; ACE_barrelLength = 210.82; }; + class rhs_weap_asval: rhs_weap_ak74m { + ACE_barrelTwist = 210.82; + ACE_barrelLength = 200.66; + }; class rhs_weap_svd: rhs_weap_ak74m { ACE_RailHeightAboveBore = -0.617396; ACE_barrelTwist = 238.76; From 22586fc137aa434286f948f9226336e9587d6c6f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 12 Sep 2022 16:43:22 -0500 Subject: [PATCH 62/92] Prep 3.15.1 --- README.md | 2 +- addons/main/script_version.hpp | 4 ++-- docs/_config.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 27255aa7b8..bcea117cb8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index b225155921..549f651ca3 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 15 -#define PATCHLVL 0 -#define BUILD 67 +#define PATCHLVL 1 +#define BUILD 68 diff --git a/docs/_config.yml b/docs/_config.yml index f6a6bda551..6c39e29d07 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -9,8 +9,8 @@ ace: version: major: 3 minor: 15 - patch: 0 - build: 67 + patch: 1 + build: 68 markdown: kramdown From 5587d9dc69550df579a9e86896c611b5f76c89f1 Mon Sep 17 00:00:00 2001 From: zharf Date: Thu, 22 Sep 2022 21:06:00 +0300 Subject: [PATCH 63/92] Arsenal - Fixed fetching loadout from extended loadout (#9045) --- addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf index d4d5b00a4b..c26375bb36 100644 --- a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf +++ b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf @@ -32,7 +32,7 @@ private _cursSelRow = lnbCurSelRow _contentPanelCtrl; private _loadoutName = _contentPanelCtrl lnbText [_cursSelRow, 1]; private _curSelLoadout = (_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) select 0; private _extendedLoadout = GVAR(center) call FUNC(getLoadout); -private _loadout = _loadout select 0; +private _loadout = _extendedLoadout select 0; private _loadoutIndex = _data findIf {(_x select 0) == _editBoxContent}; private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars); From 9dd0472b57f5adc82199cd28c83375d5d042e350 Mon Sep 17 00:00:00 2001 From: Nikita S Date: Thu, 22 Sep 2022 20:09:32 +0200 Subject: [PATCH 64/92] Added ACE Hearing Protection to 6M2 and helmets with 6M2 (#9039) --- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 02947e4878..4300e484d0 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -184,6 +184,18 @@ class CfgWeapons { HEARING_PROTECTION_EARMUFF }; + class rhs_6b47; + class rhs_6b47_6m2: rhs_6b47 { + HEARING_PROTECTION_PELTOR + }; + class rhs_6b47_6m2_1: rhs_6b47 { + HEARING_PROTECTION_PELTOR + }; + + class rhs_6m2: H_HelmetB { + HEARING_PROTECTION_PELTOR + }; + class rhs_weap_d81; class rhs_weap_2a70: rhs_weap_d81 { // "Low pressure" 100mm cannon ace_overpressure_range = 15; From 3882367060b22d5057ea2d25aade85d1f4681337 Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Thu, 22 Sep 2022 12:10:28 -0600 Subject: [PATCH 65/92] Arsenal - Show attached objects in arsenal mission (#9036) --- addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf b/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf index 8b5f85fba6..fb0c54e72f 100644 --- a/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf +++ b/addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf @@ -27,7 +27,7 @@ cba_diagnostic_projectileMaxLines = 10; { _x enableSimulation false; _x hideObject true; - } forEach (allMissionObjects "" - [_player]); + } forEach (allMissionObjects "" - [_player] - attachedObjects _player); if ((_player getVariable ["cba_projectile_firedEhId", -1]) != -1) then { _player call CBA_fnc_removeUnitTrackProjectiles; From 1096bd3308f80a20636519004124e2b3fc44a3cc Mon Sep 17 00:00:00 2001 From: Dystopian Date: Thu, 22 Sep 2022 21:13:47 +0300 Subject: [PATCH 66/92] Fix working if turned out (#9030) --- addons/hunterkiller/functions/fnc_keydown.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/hunterkiller/functions/fnc_keydown.sqf b/addons/hunterkiller/functions/fnc_keydown.sqf index ea6fa7933c..2492f8fb82 100644 --- a/addons/hunterkiller/functions/fnc_keydown.sqf +++ b/addons/hunterkiller/functions/fnc_keydown.sqf @@ -15,7 +15,11 @@ * Public: No */ -if ((GVAR(mode) == MODE_NO_ACTIONS) || {!([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith))}) exitWith { +if ( + (GVAR(mode) == MODE_NO_ACTIONS) + || {!([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith))} + || {isTurnedOut ACE_player} +) exitWith { false }; From 39cb42d581b724d6ad16b11bba30d564925aded1 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 23 Sep 2022 19:40:57 +0200 Subject: [PATCH 67/92] Hearing - Fix: CBA Extended Loadouts do not catch earplugs server side (#9041) * Fix: Catch earplugs server side CBA Extended Loadouts * Remove events client side * Add event to server and client --- addons/hearing/XEH_postInit.sqf | 15 --------------- addons/hearing/XEH_preInit.sqf | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index b80ae51818..d8b21f214a 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -79,18 +79,3 @@ GVAR(lastPlayerVehicle) = objNull; // Update protection on possible helmet change ["loadout", LINKFUNC(updateHearingProtection), false] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; - -["CBA_loadoutSet", { - params ["_unit", "_loadout", "_extendedInfo"]; - if (_extendedInfo getOrDefault ["ace_earplugs", false]) then { - _unit setVariable ["ACE_hasEarPlugsIn", true, true]; - [[true]] remoteExec [QFUNC(updateVolume), _unit]; - }; -}] call CBA_fnc_addEventHandler; - -["CBA_loadoutGet", { - params ["_unit", "_loadout", "_extendedInfo"]; - if (_unit getVariable ["ACE_hasEarPlugsin", false]) then { - _extendedInfo set ["ace_earplugs", true] - }; -}] call CBA_fnc_addEventHandler; diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index 9361d05015..5d6b275adc 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -8,4 +8,19 @@ PREP_RECOMPILE_END; #include "initSettings.sqf" +["CBA_loadoutSet", { + params ["_unit", "_loadout", "_extendedInfo"]; + if (_extendedInfo getOrDefault ["ace_earplugs", false]) then { + _unit setVariable ["ACE_hasEarPlugsIn", true, true]; + [[true]] remoteExec [QFUNC(updateVolume), _unit]; + }; +}] call CBA_fnc_addEventHandler; + +["CBA_loadoutGet", { + params ["_unit", "_loadout", "_extendedInfo"]; + if (_unit getVariable ["ACE_hasEarPlugsin", false]) then { + _extendedInfo set ["ace_earplugs", true] + }; +}] call CBA_fnc_addEventHandler; + ADDON = true; From d1a631b1810e6678016b41a28339b9f093ec6de5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 27 Sep 2022 10:47:03 -0500 Subject: [PATCH 68/92] Prep 3.15.2 --- README.md | 2 +- addons/main/script_version.hpp | 4 ++-- docs/_config.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bcea117cb8..0b9cb156c1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 549f651ca3..098eec73cb 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 15 -#define PATCHLVL 1 -#define BUILD 68 +#define PATCHLVL 2 +#define BUILD 69 diff --git a/docs/_config.yml b/docs/_config.yml index 6c39e29d07..aacff879c9 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -9,8 +9,8 @@ ace: version: major: 3 minor: 15 - patch: 1 - build: 68 + patch: 2 + build: 69 markdown: kramdown From 4837243b9a0512f35aaf5aaca54f0ce622fb69f5 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Sun, 2 Oct 2022 23:41:40 +0200 Subject: [PATCH 69/92] Viewports - Polish translation update (#9047) --- addons/viewports/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/viewports/stringtable.xml b/addons/viewports/stringtable.xml index 4a1462062f..9098c3fea6 100644 --- a/addons/viewports/stringtable.xml +++ b/addons/viewports/stringtable.xml @@ -6,6 +6,7 @@ ビューポート 뷰포트 观察口 + Wizjery Allows crew to look through periscopes From 928b1c56157d4445d3a7c96f876d34a5ba57b195 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Sun, 2 Oct 2022 23:45:17 +0200 Subject: [PATCH 70/92] Towing - Polish translation update (#9050) --- addons/towing/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/towing/stringtable.xml b/addons/towing/stringtable.xml index 2c0f37ed38..a92c82f68d 100644 --- a/addons/towing/stringtable.xml +++ b/addons/towing/stringtable.xml @@ -114,6 +114,7 @@ Add Tow Rope to Vehicle Inventory Добавить буксировочный трос в инвентарь машин + Dodaj linkę holowniczą do ekwipunku pojazdów From e632467fe2a0884f5b0ae8ba0d6782589a4aee41 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Sun, 2 Oct 2022 23:45:23 +0200 Subject: [PATCH 71/92] Marker flags - Polish translation update (#9048) --- addons/marker_flags/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index a567ed226e..cab3203109 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -27,10 +27,12 @@ Place Marker Flag Markierungsfahne platzieren + Postaw chorągiewkę Adjust height Höhe anpassen + Dostosuj wysokość Cancel From 97f211ecc589197e774938fa1f3f20df263e2d49 Mon Sep 17 00:00:00 2001 From: Filip Maciejewski Date: Sun, 2 Oct 2022 23:45:30 +0200 Subject: [PATCH 72/92] Trenches - Polish translation update (#9049) --- addons/trenches/stringtable.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 3392cc4ad3..9395a34c5d 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -19,7 +19,7 @@ Entrenching Tool - Saperka, używana do budowy wnęk + Saperka, używana do budowy okopów Mit dem Klappspaten können Erdwälle oder Gräben ausgehoben werden. Pala da Trincea Pala para trincheras @@ -36,7 +36,7 @@ Envelope - Small Rund - Klein - Wnęka - mała + Okop - mały Fascia - Piccola Trinchera pequeña Tranchée individuelle @@ -52,7 +52,7 @@ Small Personal Trench Kleiner Schützengraben - Mała jednoosobowa wnęka + Mały jednoosobowy okop Piccola Trincea Personale Trinchera personal pequeña Petite tranchée personnelle @@ -68,7 +68,7 @@ Dig Small Trench Grabe kleinen Schützengraben - Kop małą wnękę + Kop mały okop Scava Trincea Piccola Cavar trinchera pequeña Creuser une petite tranchée @@ -84,7 +84,7 @@ Envelope - Big Rund - Groß - Wnęka - duża + Okop - duży Fascia - Grande Trinchera grande Grande tranchée @@ -100,7 +100,7 @@ Large Personal Trench Großer Schützengraben - Duża jednoosobowa wnęka + Duży jednoosobowy okop Grande Trincea Personale Trinchera personal grande Grande tranchée personnelle @@ -116,7 +116,7 @@ Dig Big Trench Grabe großen Schützengraben - Kop dużą wnękę + Kop duży okop Scava Trincea Grande Cavar trinchera grande Creuser une grande tranchée @@ -181,7 +181,7 @@ Digging Trench Grabe Schützengraben - Kopanie wnęki + Kopanie okopu Scavando la Trincea Cavando trinchera Excavation de la tranchée @@ -196,7 +196,7 @@ Continue Digging Trench - Wzów kopanie wnęki + Wzów kopanie okopu Continuar cavando trincheira Poursuivre l'excavation de la tranchée Продолжить копание окопа @@ -228,12 +228,12 @@ Camouflage Trench - Zakamufluj Okop + Zakamufluj okop 伪装掩体 Removing Trench - Usuwanie wnęki + Usuwanie okopu Removendo tricnheira Retrait de la tranchée Убирание окопа From 28cdee68851f4c8754442d852ac5dd84afcc1997 Mon Sep 17 00:00:00 2001 From: Psycool <104776717+Psycool3695@users.noreply.github.com> Date: Mon, 10 Oct 2022 05:04:47 +0900 Subject: [PATCH 73/92] Korean Translation Update (#9067) * KoreanTranslation Someone has returned all the translations in Korean to English. there is no need to return them. * koreantranslation * Korean Typo Fix * Korean Translation --- addons/arsenal/stringtable.xml | 3 +++ addons/cargo/stringtable.xml | 2 ++ addons/hunterkiller/stringtable.xml | 5 +++++ addons/marker_flags/stringtable.xml | 2 ++ addons/novehicleclanlogo/stringtable.xml | 2 ++ addons/refuel/stringtable.xml | 2 ++ addons/towing/stringtable.xml | 1 + addons/trenches/stringtable.xml | 1 + 8 files changed, 18 insertions(+) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index ddb2313c8e..faefec455f 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1467,12 +1467,15 @@ Save Face + 얼굴 저장 Save Voice + 목소리 저장 Save Insignia + 계급장 저장 diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 34e582c86e..208579f6b4 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -484,9 +484,11 @@ Carry After Unload + 화물 내린 후 운반 Controls whether cargo items are carried or dragged after unloading. + 화물 아이템을 내린 후 들거나 끌지 여부를 결정합니다. diff --git a/addons/hunterkiller/stringtable.xml b/addons/hunterkiller/stringtable.xml index 3152aaf8be..913ad32852 100644 --- a/addons/hunterkiller/stringtable.xml +++ b/addons/hunterkiller/stringtable.xml @@ -3,18 +3,23 @@ Hunter Killer + 헌터 킬러 Override + 오버라이드 Force other turret to slew onto your viewpoint + 다른 포탑이 시야에 오도록 강제합니다. Observe + 관측 Slew your turret onto other turret's viewpoint + 포탑을 다른 포탑의 시야에 놓습니다. diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index cab3203109..d56bb8ea5e 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -28,11 +28,13 @@ Place Marker Flag Markierungsfahne platzieren Postaw chorągiewkę + 마킹용 깃발 꽂기 Adjust height Höhe anpassen Dostosuj wysokość + 높이 조정 Cancel diff --git a/addons/novehicleclanlogo/stringtable.xml b/addons/novehicleclanlogo/stringtable.xml index 70aaa50e17..bfd7fd347e 100644 --- a/addons/novehicleclanlogo/stringtable.xml +++ b/addons/novehicleclanlogo/stringtable.xml @@ -4,10 +4,12 @@ Remove clan logo from vehicles Usuń logo klanu z pojazdów + 차량에서 클랜 로고 제거 Prevents clan logo from being displayed on vehicles controlled by players. Zapobiega wyświetlaniu logo klanu na pojazdach kontrolowanych przez graczy. + 플레이어가 조종하는 차량에 클랜 로고가 표시되지 않도록 합니다. diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 90ace6c7c1..d61759cacb 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -484,10 +484,12 @@ Pump/Hose Interaction Time Pompa/Hortum Etkileşim Süresi + 펌프/호스 상호작용 시간 How long refuel interactions take in seconds. Saniye biriminde yakıt ikmali etkileşimlerinin süresi. + 연료 재보급 상호작용에 걸리는 시간(초)입니다. Fuel Cargo Volume diff --git a/addons/towing/stringtable.xml b/addons/towing/stringtable.xml index a92c82f68d..3c559210f5 100644 --- a/addons/towing/stringtable.xml +++ b/addons/towing/stringtable.xml @@ -115,6 +115,7 @@ Add Tow Rope to Vehicle Inventory Добавить буксировочный трос в инвентарь машин Dodaj linkę holowniczą do ekwipunku pojazdów + 차량 소지품에 견인줄 추가 diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 9395a34c5d..b9de697001 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -230,6 +230,7 @@ Camouflage Trench Zakamufluj okop 伪装掩体 + 참호 위장시키기 Removing Trench From 8d61488e0e431f63f0cfb4da1a1db262b365535f Mon Sep 17 00:00:00 2001 From: Krzyciu <63709320+Krzyciu@users.noreply.github.com> Date: Sun, 9 Oct 2022 22:05:27 +0200 Subject: [PATCH 74/92] Fortify - Polish translation update (#9056) **When merged this pull request will:** - Add missing Polish fortify translations --- addons/fortify/stringtable.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/addons/fortify/stringtable.xml b/addons/fortify/stringtable.xml index 8e59c5dd76..8a05970f89 100644 --- a/addons/fortify/stringtable.xml +++ b/addons/fortify/stringtable.xml @@ -172,6 +172,7 @@ 시간-가격 계수 Zeit-Kosten-Koeffizient 時間コスト係数 + Współczynnik Czas-Koszt Coefficient used to determine time to build structure.<br/>A in Ax + b where x is cost of object @@ -179,6 +180,7 @@ 건축물을 지을 때 걸리는 시간을 계수를 적용하여 계산합니다. Koeffizient zur Bestimmung der Bauzeit <br/>A in Ax + b, wobei x die Kosten des Objekts sind. 建造する時間を決定するために使用される係数。<br/>計算式はAx + bです。この係数はAであり、xは建造物のコストです。 + Współczynnik używany do określenia czasu budowy konstrukcji. &lt;br/&gt;A w Ax + b gdzie x jest kosztem obiektu Minimum Build Time @@ -186,6 +188,7 @@ 최소 건축 시간 Minimale Bauzeit 建造に掛かる最小の時間 + Minimalny czas budowy Minimum time to build any structure.<br/>b in Ax + b where x is cost of object @@ -193,6 +196,7 @@ 건축물을 지을 때 걸리는 최소 시간을 계수를 적용하여 계산합니다. Mindestzeit für den Bau eines beliebigen Bauwerks.<br/>b in Ax + b, wobei x die Kosten des Objekts sind. 建造に掛かる最小の時間。<br/>計算式はAx + bです。この時間はbであり、xは建造物のコストです。 + Minimalny czas do zbudowania dowolenj konstrukcji.&lt;br/&gt;b w Ax + b gdzie x jest kosztem obiektu Building @@ -200,6 +204,7 @@ 건설 중 Bauwerk 建造 + Budowanie Create map markers @@ -207,6 +212,7 @@ 지도에 마커 생성 Kartenmarkierungen erstellen マップマーカーを生成する + Twórz znaczniki na mapie Create map markers that look like terrain buildings when static fortifications are placed @@ -214,6 +220,7 @@ 건축물을 건설하고 나서 지도에 마커를 생성합니다 Erstellen von Kartenmarkierungen, die wie Gebäude im Gelände aussehen, wenn statische Befestigungen platziert werden 静的な建築物が配置されたときに地形の建物のように見えるマップマーカーを生成します + Utwórz znaczniki mapy, które wyglądają jak obiekty terenu, gdy umieszczane są statyczne fortyfikacje Never @@ -237,6 +244,7 @@ 아군 유닛이 지은 건물만 Für, zum Erbauer, verbündete Einheiten. 設置者の友軍に + Dla jednostek sojuszniczych wobec stawiającego For everyone From c2bbe482b509369effe73ab6e2c82fac1c0194ff Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Thu, 13 Oct 2022 18:13:20 +0100 Subject: [PATCH 75/92] Add images and icon to concertina wire. (#9071) --- addons/concertina_wire/CfgVehicles.hpp | 3 +++ .../data/preview_concertina_wire.jpg | Bin 0 -> 25764 bytes .../data/preview_concertina_wire_coil.jpg | Bin 0 -> 26410 bytes 3 files changed, 3 insertions(+) create mode 100644 addons/concertina_wire/data/preview_concertina_wire.jpg create mode 100644 addons/concertina_wire/data/preview_concertina_wire_coil.jpg diff --git a/addons/concertina_wire/CfgVehicles.hpp b/addons/concertina_wire/CfgVehicles.hpp index d8c80f68a9..8f22f42b4a 100644 --- a/addons/concertina_wire/CfgVehicles.hpp +++ b/addons/concertina_wire/CfgVehicles.hpp @@ -75,6 +75,7 @@ class CfgVehicles { class ACE_ConcertinaWire: ACE_ConcertinaWireNoGeo { scope = 2; displayName = CSTRING(DisplayName); + editorPreview = QPATHTOF(data\preview_concertina_wire.jpg); model = QPATHTOF(data\ACE_ConcertinaWire.p3d); EGVAR(logistics_wirecutter,isFence) = 1; class ACE_Actions { @@ -104,7 +105,9 @@ class CfgVehicles { scope = 2; displayName = CSTRING(Coil_DisplayName); + editorPreview = QPATHTOF(data\preview_concertina_wire_coil.jpg); model = QPATHTOF(data\ACE_ConcertinaWireCoil.p3d); + icon = "iconObject_circle"; mapsize = 0.5; animated = 0; nameSound = "fence"; diff --git a/addons/concertina_wire/data/preview_concertina_wire.jpg b/addons/concertina_wire/data/preview_concertina_wire.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82780eabf048aefa00f1abe6c02a637e79fbe26f GIT binary patch literal 25764 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

DsSO+xXZM@47nl@yVo7O)~=eyNz4CrKtpE2d2Z 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 literal 0 HcmV?d00001 diff --git a/addons/concertina_wire/data/preview_concertina_wire_coil.jpg b/addons/concertina_wire/data/preview_concertina_wire_coil.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30b2b66ef710937b67c7bce67b64c73c3d6d6834 GIT binary patch literal 26410 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

n4l}Pnedz9P$SaZBiuYm{FLg5>8vcPcYE52 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 iolG Date: Sat, 15 Oct 2022 23:44:31 +0100 Subject: [PATCH 76/92] Cargo - Update VTOL Cargo sizes (#9066) --- addons/cargo/CfgVehicles.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index 20685e411b..7a47a8a943 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -265,11 +265,11 @@ class CfgVehicles { }; class VTOL_Base_F; class VTOL_01_base_F: VTOL_Base_F { - GVAR(space) = 4; + GVAR(space) = 20; GVAR(hasCargo) = 1; }; class VTOL_02_base_F: VTOL_Base_F { - GVAR(space) = 4; + GVAR(space) = 10; GVAR(hasCargo) = 1; }; From 1208f7a2ceaf9b4747a48ee955971f8b6fe50357 Mon Sep 17 00:00:00 2001 From: mharis001 <34453221+mharis001@users.noreply.github.com> Date: Wed, 19 Oct 2022 22:38:16 -0400 Subject: [PATCH 77/92] Fastroping - Disable destruction for helper object (#9051) --- addons/fastroping/CfgVehicles.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/fastroping/CfgVehicles.hpp b/addons/fastroping/CfgVehicles.hpp index 95e6ab1696..d6d40f13be 100644 --- a/addons/fastroping/CfgVehicles.hpp +++ b/addons/fastroping/CfgVehicles.hpp @@ -177,6 +177,7 @@ class CfgVehicles { author = "KoffeinFlummi"; scope = 1; model = QPATHTOF(data\helper.p3d); + destrType = "DestructNo"; class ACE_Actions {}; class Turrets {}; class TransportItems {}; From 95a5fb040ac7c09e4a371f60d24d0cb32daf9f44 Mon Sep 17 00:00:00 2001 From: TACHarsis <101965352+TACHarsis@users.noreply.github.com> Date: Sat, 22 Oct 2022 02:28:10 +0200 Subject: [PATCH 78/92] Arsenal - Add init/remove local events to Arsenal creation/destruction (#9064) * Added two local events to arsenal * onInitArsenal fired when Arsenal got initiated * onRemoveArsenal fired when Arsenal got removed * added them to the arsenal event listing in the docs * Update addons/arsenal/functions/fnc_removeBox.sqf Co-authored-by: BrettMayson * Update addons/arsenal/functions/fnc_removeBox.sqf Co-authored-by: BrettMayson * Renamed events in accordance with event naming patterns sans "on" * Apply suggestions from code review Co-authored-by: BrettMayson * Improved Docs Co-authored-by: BrettMayson --- addons/arsenal/functions/fnc_initBox.sqf | 2 ++ addons/arsenal/functions/fnc_removeBox.sqf | 3 ++- docs/wiki/framework/arsenal-framework.md | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/arsenal/functions/fnc_initBox.sqf b/addons/arsenal/functions/fnc_initBox.sqf index 1343a20f63..2bd4cb1854 100644 --- a/addons/arsenal/functions/fnc_initBox.sqf +++ b/addons/arsenal/functions/fnc_initBox.sqf @@ -57,5 +57,7 @@ if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0}) [_object, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject); [_object, _items, false] call FUNC(addVirtualItems); + + [QGVAR(boxInitialized), [_object, _items]] call CBA_fnc_localEvent; }; }; diff --git a/addons/arsenal/functions/fnc_removeBox.sqf b/addons/arsenal/functions/fnc_removeBox.sqf index 7620529ef3..8b24bf52e5 100644 --- a/addons/arsenal/functions/fnc_removeBox.sqf +++ b/addons/arsenal/functions/fnc_removeBox.sqf @@ -30,6 +30,7 @@ if (_global && {isMultiplayer}) then { [QGVAR(removeBox), [_object, false]] call CBA_fnc_globalEvent; }; } else { - _object setVariable [QGVAR(virtualItems), nil, false]; + _object setVariable [QGVAR(virtualItems), nil, false]; [_object, 0, ["ACE_MainActions", QGVAR(interaction)]] call EFUNC(interact_menu,removeActionFromObject); + [QGVAR(boxRemoved), _object] call CBA_fnc_localEvent; }; diff --git a/docs/wiki/framework/arsenal-framework.md b/docs/wiki/framework/arsenal-framework.md index 3d2134e057..ea089ed8a3 100644 --- a/docs/wiki/framework/arsenal-framework.md +++ b/docs/wiki/framework/arsenal-framework.md @@ -284,6 +284,8 @@ All are local. | Name | Arguments | Added in | | ------------- | ------------- | ------------- | +| ace_arsenal_boxInitialized | Arsenal box (OBJECT), items (BOOL or ARRAY) | +| ace_arsenal_boxRemoved | Arsenal box (OBJECT) | | ace_arsenal_displayOpened | Arsenal display (DISPLAY) | | ace_arsenal_displayClosed | None | | ace_arsenal_leftPanelFilled | Arsenal display (DISPLAY), current left panel IDC (SCALAR), current right panel IDC (SCALAR) | From 0e868dc26fdac219bca120b4d3129b08dec35b3b Mon Sep 17 00:00:00 2001 From: mharis001 <34453221+mharis001@users.noreply.github.com> Date: Fri, 21 Oct 2022 20:28:51 -0400 Subject: [PATCH 79/92] Interact Menu - Add doNotCheckLOS option for config actions (#9054) --- addons/interact_menu/functions/fnc_compileMenu.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 1e1924d8fd..aeb5d43d5b 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -91,6 +91,7 @@ private _recurseFnc = { } else { _runOnHover = (getNumber (_entryCfg >> "runOnHover")) > 0; }; + private _doNotCheckLOS = getNumber (_entryCfg >> "doNotCheckLOS") > 0; _condition = compile _condition; private _children = [_entryCfg, _distance] call _recurseFnc; @@ -106,7 +107,7 @@ private _recurseFnc = { [], _position, _distance, - [_showDisabled,_enableInside,_canCollapse,_runOnHover, false], + [_showDisabled, _enableInside, _canCollapse, _runOnHover, _doNotCheckLOS], _modifierFunction ], _children From b0df20c3e997c189580a068447bc9813cf9818c3 Mon Sep 17 00:00:00 2001 From: diwako Date: Sat, 22 Oct 2022 02:30:40 +0200 Subject: [PATCH 80/92] Viewports - Add viewports for RHS BMP3 (#9062) --- optionals/compat_rhs_afrf3/CfgVehicles.hpp | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 114c174c72..db66255a49 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -356,6 +356,36 @@ class CfgVehicles { EGVAR(vehicle_damage,turretFireProb) = 0.2; EGVAR(vehicle_damage,engineFireProb) = 0.8; EGVAR(vehicle_damage,detonationDuringFireProb) = 0.5; + class ace_viewports { + class view_0 { + camLocation[] = {1.02881, -0.923828, -0.647231}; + screenLocation[] = {1.12881, -0.653828, -1.08223}; + camAttach = 50; + maxDistance = 0.5; + roles[]={"cargo"}; + }; + class view_1 { + camLocation[] = {1.01709, -1.55664, -0.647231}; + screenLocation[] = {1.10709, -1.42664, -1.14223}; + camAttach = 82; + maxDistance = 0.5; + roles[]={"cargo"}; + }; + class view_2 { + camLocation[] = {-0.871094, -1.55762, -0.647231}; + screenLocation[] = {-0.981094, -1.42762, -1.13223}; + camAttach = 285; + maxDistance = 0.5; + roles[]={"cargo"}; + }; + class view_3 { + camLocation[] = {-1.00879, -0.939941, -0.650259}; + screenLocation[] = {-0.97879, -0.689941, -1.09526}; + camAttach = 310; + maxDistance = 0.5; + roles[]={"cargo"}; + }; + }; }; class rhs_a3spruttank_base: Tank_F { EGVAR(refuel,fuelCapacity) = 400; From 09dce6f937341c61e787006baf30bac02f91d27e Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Mon, 7 Nov 2022 08:00:42 -0600 Subject: [PATCH 81/92] Explosives - Fix invalid m57 specularPower (#9094) --- addons/explosives/Data/ace_m57.rvmat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/explosives/Data/ace_m57.rvmat b/addons/explosives/Data/ace_m57.rvmat index 628e9bfe55..565bd53e79 100644 --- a/addons/explosives/Data/ace_m57.rvmat +++ b/addons/explosives/Data/ace_m57.rvmat @@ -6,7 +6,7 @@ diffuse[] = {1,1,1,1}; forcedDiffuse[] = {0,0,0,0}; emmisive[] = {0,0,0,1}; specular[] = {0.3,0.3,0.3,1}; -specularPower = 3b0; +specularPower = 3; PixelShaderID = "Super"; VertexShaderID = "Super"; class Stage1 { From e202765f91384de029ca2f2f82c18de48f22a8ab Mon Sep 17 00:00:00 2001 From: BrettMayson Date: Sun, 20 Nov 2022 10:14:49 -0600 Subject: [PATCH 82/92] Grenades - Change names of IR flares for consistency (#9098) Didn't update Chinese, but all the others should be fine based on the other colors --- addons/grenades/stringtable.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 1b5d2a2871..fb0b144f5d 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -520,20 +520,20 @@ 종류: 낙하식 적외선 조명탄 - M992 Illumination IR Flare - M992 IR Leuchtfackel - M992 Oświetlająca flara IR - M992 Granata con infrarosso - M992 赤外線照明弾 - M992 ИК-осветительная ракета - M992 Sinalizador de Iluminação Infravermelho + M992 Illumination Flare (IR) + M992 Leuchtfackel (IR) + M992 Flara oświetlająca (IR) + M992 Granata con bengala (Infrarosso) + M992 照明弾 (赤外線) + M992 Осветит. ракета (ИК) + M992 Sinalizador de Iluminação (Infravermelho) M992 紅外線照明彈 M992 红外照明弹 - M992 Fusée IR - M992 Infračervená světlice - M992 Illumination IR Flare - M992 Bengala de iluminación infrarroja - M992 적외선 조명탄 + M992 Fusée éclairante (IR) + M992 Světlice (Infračervená) + M992 Aydınlatma Fişeği (IR) + M992 Bengala de iluminación (Infrarroja) + M992 조명탄 (적외선) Explosive Satchel (Throwable) From 553dabe60e3d079e0c971ab72eda9da7b5051be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dahlgren?= Date: Fri, 2 Dec 2022 23:25:09 +0100 Subject: [PATCH 83/92] Refuel - Fix warnings when building with latest pboProject (#9099) * Fix inconsistent trailing semicolon for macro MACRO_NOZZLE_ACTIONS * Remove usage of access from refuel hose class --- addons/refuel/CfgVehicles.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index adce2a8af2..53a21e7318 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -38,13 +38,12 @@ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ }; \ }; \ - }; + } class CBA_Extended_EventHandlers; class CfgNonAIVehicles { class GVAR(fuelHoseSegment) { - access = 0; scope = 2; displayName = "Fuel Hose"; simulation = "ropesegment"; @@ -92,7 +91,7 @@ class CfgVehicles { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; - MACRO_NOZZLE_ACTIONS + MACRO_NOZZLE_ACTIONS; displayName = QGVAR(fuelNozzle); scope = 1; scopeCurator = 1; From 0169373b7b08b1982f7993b22dd352e2c827b8c2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 2 Dec 2022 18:53:13 -0600 Subject: [PATCH 84/92] Sog Compat - Cleanup class inheritance formatting (#9107) --- optionals/compat_sog/CfgVehicles/boats.hpp | 8 ++++---- optionals/compat_sog/CfgVehicles/planes.hpp | 4 ++-- optionals/compat_sog/CfgVehicles/tracked.hpp | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/optionals/compat_sog/CfgVehicles/boats.hpp b/optionals/compat_sog/CfgVehicles/boats.hpp index cd790b106f..52aaef6b85 100644 --- a/optionals/compat_sog/CfgVehicles/boats.hpp +++ b/optionals/compat_sog/CfgVehicles/boats.hpp @@ -1,20 +1,20 @@ // PTF Nasty https://www.ptfnasty.com/ptf17chap2.html (610 Gallons) class vn_boat_armed_base; -class vn_boat_05_base : vn_boat_armed_base { +class vn_boat_05_base: vn_boat_armed_base { EGVAR(refuel,fuelCapacity) = 2773; }; // PBR https://www.warboats.org/pbr.htm -class vn_boat_12_base : vn_boat_armed_base { +class vn_boat_12_base: vn_boat_armed_base { EGVAR(refuel,fuelCapacity) = 727; }; // STAB https://www.powercatboat.com/STAB/STAB.html -class vn_boat_09_base : vn_boat_armed_base { +class vn_boat_09_base: vn_boat_armed_base { EGVAR(refuel,fuelCapacity) = 464; }; // Type 55A Shantou Gunboat (Could find no info on this, so same as the similarly sized PTF for now) -class vn_boat_03_base : vn_boat_armed_base { +class vn_boat_03_base: vn_boat_armed_base { EGVAR(refuel,fuelCapacity) = 2773; }; diff --git a/optionals/compat_sog/CfgVehicles/planes.hpp b/optionals/compat_sog/CfgVehicles/planes.hpp index 6d7f7de78d..496065953a 100644 --- a/optionals/compat_sog/CfgVehicles/planes.hpp +++ b/optionals/compat_sog/CfgVehicles/planes.hpp @@ -5,11 +5,11 @@ class vn_air_f4_base: Plane_Base_F { }; // F-100D https://www.supersabre.com/f-100specs.htm -class vn_air_f100d_base : Plane_Base_F { +class vn_air_f100d_base: Plane_Base_F { EGVAR(refuel,fuelCapacity) = 4500; }; // MIG-19S https://en.wikipedia.org/wiki/Mikoyan-Gurevich_MiG-19#cite_ref-60 -class vn_air_mig19_base : Plane_Base_F { +class vn_air_mig19_base: Plane_Base_F { EGVAR(refuel,fuelCapacity) = 1800; }; diff --git a/optionals/compat_sog/CfgVehicles/tracked.hpp b/optionals/compat_sog/CfgVehicles/tracked.hpp index 94331cef36..e2832796a9 100644 --- a/optionals/compat_sog/CfgVehicles/tracked.hpp +++ b/optionals/compat_sog/CfgVehicles/tracked.hpp @@ -11,16 +11,16 @@ class vn_armor_type63_base: vn_armor_tank_base { // M113A1 https://man.fas.org/dod-101/sys/land/m113.htm class APC_Tracked_01_base_F; -class vn_armor_m113_base : APC_Tracked_01_base_F { +class vn_armor_m113_base: APC_Tracked_01_base_F { EGVAR(refuel,fuelCapacity) = 360; }; // PT-76A https://en.wikipedia.org/wiki/PT-76 -class vn_armor_pt76_base : vn_armor_tank_base { +class vn_armor_pt76_base: vn_armor_tank_base { EGVAR(refuel,fuelCapacity) = 250; }; // PT-76B (This variant increased the fuel size from 250 to 400 liters) -class vn_armor_pt76b_base : vn_armor_pt76_base { +class vn_armor_pt76b_base: vn_armor_pt76_base { EGVAR(refuel,fuelCapacity) = 400; }; From 5693edc96daf7ab9d72cb2eb9f0a96de31435415 Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Sat, 3 Dec 2022 01:08:00 +0000 Subject: [PATCH 85/92] Update fortify wiki (#9092) --- docs/wiki/framework/fortify-framework.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/wiki/framework/fortify-framework.md b/docs/wiki/framework/fortify-framework.md index f4b272f872..2e2e3261f8 100644 --- a/docs/wiki/framework/fortify-framework.md +++ b/docs/wiki/framework/fortify-framework.md @@ -30,7 +30,7 @@ If the Fortify module is present in the mission, server admins can use chat comm ## 1.2 Adding custom presets -There are two ways of adding custom presets to your mission, either via code or through desciption.ext. +There are three ways of adding custom presets to your mission, either via code, through desciption.ext or through config. To add a preset via code you use the function `call ace_fortify_fnc_registerObjects`. Also enables Fortify. @@ -52,11 +52,11 @@ To add a preset via code you use the function `call ace_fortify_fnc_registerObje * [west, 5000, [["Land_BagFence_Long_F", 5], ["Land_BagBunker_Small_F", 50]]] call ace_fortify_fnc_registerObjects ``` -Adding it through `description.ext` you use: +Adding it through `description.ext` or config you use: ```cpp class ACEX_Fortify_Presets { - class myMissionObjects { + class TAG_MyPreset { displayName = "My Preset"; objects[] = { {"Sandbag", 5}, @@ -66,7 +66,7 @@ class ACEX_Fortify_Presets { }; ``` -Then you will have to set the mission preset to `myMissionObjects` by either using the Fortify editor module or the chat command: `#ace-fortify blufor myMissionObjects`. +Then you will have to set the mission preset to `TAG_MyPreset` by either using the Fortify editor module or the chat command: `#ace-fortify blufor TAG_MyPreset`. ## 1.3 Adding custom deploy handlers From 7f5a8e40996d362d244be8c335940e7e51e377e8 Mon Sep 17 00:00:00 2001 From: Cyruz Date: Sat, 3 Dec 2022 19:57:16 +0000 Subject: [PATCH 86/92] Safety - Add optional flag to hide hint (#9086) * Add optional flag to hide hint * Update addons/safemode/functions/fnc_setWeaponSafety.sqf * Update addons/safemode/functions/fnc_unlockSafety.sqf Co-authored-by: PabstMirror * Update addons/safemode/functions/fnc_lockSafety.sqf Co-authored-by: PabstMirror Co-authored-by: jonpas Co-authored-by: PabstMirror --- addons/safemode/functions/fnc_lockSafety.sqf | 12 ++++++++---- addons/safemode/functions/fnc_setWeaponSafety.sqf | 6 ++++-- addons/safemode/functions/fnc_unlockSafety.sqf | 11 +++++++---- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/addons/safemode/functions/fnc_lockSafety.sqf b/addons/safemode/functions/fnc_lockSafety.sqf index 44c7208b43..dcc40a497a 100644 --- a/addons/safemode/functions/fnc_lockSafety.sqf +++ b/addons/safemode/functions/fnc_lockSafety.sqf @@ -7,6 +7,7 @@ * 0: Unit * 1: Weapon * 2: Muzzle + * 3: Show hint * * Return Value: * None @@ -17,7 +18,7 @@ * Public: No */ -params ["_unit", "_weapon", "_muzzle"]; +params ["_unit", "_weapon", "_muzzle", ["_hint", true, [true]]]; private _safedWeapons = _unit getVariable [QGVAR(safedWeapons), []]; @@ -75,6 +76,9 @@ if (_muzzle isEqualType "") then { // play fire mode selector sound [_unit, _weapon, _muzzle] call FUNC(playChangeFiremodeSound); -// show info box -private _picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture"); -[localize LSTRING(PutOnSafety), _picture] call EFUNC(common,displayTextPicture); +// show info box unless disabled +if (_hint) then { + private _picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture"); + [localize LSTRING(PutOnSafety), _picture] call EFUNC(common,displayTextPicture); +}; + diff --git a/addons/safemode/functions/fnc_setWeaponSafety.sqf b/addons/safemode/functions/fnc_setWeaponSafety.sqf index 54732857af..0dd2dbf55d 100644 --- a/addons/safemode/functions/fnc_setWeaponSafety.sqf +++ b/addons/safemode/functions/fnc_setWeaponSafety.sqf @@ -7,6 +7,7 @@ * 0: Unit * 1: Weapon * 2: State + * 3: Show hint (default: true) * * Return Value: * None @@ -20,7 +21,8 @@ params [ ["_unit", objNull, [objNull]], ["_weapon", "", [""]], - ["_state", true, [true]] + ["_state", true, [true]], + ["_hint", true, [true]] ]; if (_weapon == "") exitWith {}; @@ -32,5 +34,5 @@ _weapon = configName (configFile >> "CfgWeapons" >> _weapon); private _muzzle = currentMuzzle _unit; if (_state isNotEqualTo (_weapon in _safedWeapons)) then { - [_unit, _weapon, _muzzle] call FUNC(lockSafety); + [_unit, _weapon, _muzzle, _hint] call FUNC(lockSafety); }; diff --git a/addons/safemode/functions/fnc_unlockSafety.sqf b/addons/safemode/functions/fnc_unlockSafety.sqf index 3194de6f14..e6b50ab6f5 100644 --- a/addons/safemode/functions/fnc_unlockSafety.sqf +++ b/addons/safemode/functions/fnc_unlockSafety.sqf @@ -7,6 +7,7 @@ * 0: Unit * 1: Weapon * 2: Muzzle + * 3: Show hint * * Return Value: * None @@ -17,7 +18,7 @@ * Public: No */ -params ["_unit", "_weapon", "_muzzle"]; +params ["_unit", "_weapon", "_muzzle", ["_hint", true, [true]]]; private _safedWeapons = _unit getVariable [QGVAR(safedWeapons), []]; _safedWeapons deleteAt (_safedWeapons find _weapon); @@ -77,6 +78,8 @@ if (inputAction "nextWeapon" > 0) then { // player hud [true] call FUNC(setSafeModeVisual); -// show info box -private _picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture"); -[localize LSTRING(TookOffSafety), _picture] call EFUNC(common,displayTextPicture); +// show info box unless disabled +if (_hint) then { + private _picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture"); + [localize LSTRING(TookOffSafety), _picture] call EFUNC(common,displayTextPicture); +}; From dc9a3eb064e91250b71cf42bc2ac895442fc9e6d Mon Sep 17 00:00:00 2001 From: Smith Date: Sat, 3 Dec 2022 21:57:43 +0200 Subject: [PATCH 87/92] Translations - Russian (#9095) * Add missed & fix existed * Fix russian translation when renaming --- addons/advanced_throwing/stringtable.xml | 6 +- addons/arsenal/stringtable.xml | 7 +- addons/artillerytables/stringtable.xml | 4 +- addons/ballistics/stringtable.xml | 8 + addons/cargo/stringtable.xml | 13 +- addons/casings/stringtable.xml | 5 + addons/chemlights/stringtable.xml | 76 ++--- addons/common/stringtable.xml | 17 +- addons/cookoff/stringtable.xml | 22 +- addons/csw/stringtable.xml | 20 +- addons/dagr/stringtable.xml | 2 +- addons/dragging/stringtable.xml | 6 +- addons/dragon/stringtable.xml | 2 +- addons/explosives/stringtable.xml | 12 +- addons/fcs/stringtable.xml | 4 +- addons/field_rations/stringtable.xml | 2 + addons/finger/stringtable.xml | 6 +- addons/fire/initSettings.sqf | 2 +- addons/fire/stringtable.xml | 4 + addons/fortify/stringtable.xml | 38 ++- addons/gforces/stringtable.xml | 4 +- addons/goggles/stringtable.xml | 4 +- addons/grenades/stringtable.xml | 36 +- addons/gunbag/stringtable.xml | 2 +- addons/hearing/stringtable.xml | 2 +- addons/hitreactions/stringtable.xml | 2 +- addons/hunterkiller/stringtable.xml | 5 + addons/huntir/stringtable.xml | 2 +- addons/interact_menu/stringtable.xml | 4 +- addons/interaction/stringtable.xml | 10 +- addons/killtracker/stringtable.xml | 1 + addons/laser/stringtable.xml | 2 + addons/logistics_rope/stringtable.xml | 4 +- addons/magazinerepack/stringtable.xml | 3 +- addons/map/stringtable.xml | 2 +- addons/map_gestures/stringtable.xml | 4 +- addons/marker_flags/stringtable.xml | 13 + addons/markers/stringtable.xml | 2 +- addons/medical_engine/stringtable.xml | 2 +- addons/medical_feedback/stringtable.xml | 4 +- addons/medical_gui/stringtable.xml | 2 + addons/medical_status/stringtable.xml | 4 +- addons/medical_treatment/stringtable.xml | 10 +- addons/missionmodules/stringtable.xml | 10 +- addons/mk6mortar/stringtable.xml | 4 +- addons/nametags/stringtable.xml | 14 +- addons/nlaw/stringtable.xml | 2 +- addons/noradio/stringtable.xml | 1 + addons/novehicleclanlogo/stringtable.xml | 2 + addons/optionsmenu/stringtable.xml | 2 +- addons/overheating/stringtable.xml | 14 +- addons/overpressure/stringtable.xml | 3 +- addons/realisticnames/stringtable.xml | 379 +++++++++++----------- addons/refuel/stringtable.xml | 2 + addons/reload/stringtable.xml | 2 +- addons/scopes/stringtable.xml | 4 +- addons/slideshow/stringtable.xml | 4 +- addons/spectator/stringtable.xml | 2 +- addons/switchunits/stringtable.xml | 2 +- addons/tagging/stringtable.xml | 16 +- addons/trenches/stringtable.xml | 9 +- addons/ui/stringtable.xml | 16 +- addons/vehicle_damage/stringtable.xml | 6 + addons/vehiclelock/stringtable.xml | 4 +- addons/vehicles/stringtable.xml | 3 + addons/viewdistance/stringtable.xml | 1 + addons/viewports/stringtable.xml | 2 + addons/weaponselect/stringtable.xml | 2 +- addons/zeus/stringtable.xml | 7 +- optionals/compat_rhs_usf3/stringtable.xml | 12 + optionals/compat_sog/stringtable.xml | 38 +++ optionals/tracers/stringtable.xml | 126 +++---- 72 files changed, 620 insertions(+), 449 deletions(-) diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 735051da99..a469256161 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -35,7 +35,7 @@ Enable Advanced Throwing Activar Lanzamiento Avanzado - Включить улучшенный бросок + Вкл. улучшенный бросок アドバンスド スローイングを有効化 Aktywuj zaawansowane rzucanie Aktiviere erweitertes Wurfsystem @@ -128,7 +128,7 @@ Enable Throwables Pick Up Habilitar recoger objetos lanzados - Включить подбор гранат + Вкл. подбор гранат 投てき物の拾い上げを有効化 Zezwól na podnoszenie obiektów miotanych Aktiviere Aufheben von Wurfobjekten @@ -158,7 +158,7 @@ Enable Attached Throwables Pick Up Activar coger objetos lanzables que se enganchan - Включить подбор прикрепленных гранат + Вкл. подбор прикрепленных гранат 取り付けられた投てき物の拾い上げを有効化 Zezwól na podnoszenie przyczepionych obiektów miotanych Aktiviere erneute Aufnahme befestigter Wurfobjekte diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index faefec455f..b2abb5e7a5 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -764,7 +764,7 @@ 모드 아이콘 허가 啟用模組圖示 启用模组图示 - Включить иконки модов + Вкл. иконки модов Ativar ícones de mods Zapnout ikony modů Mod simgelerini etkinleştir @@ -1266,7 +1266,7 @@ 啟用臉譜/聲音/徽章選項 Abilita volti, voci e insegne Aktywuj zakładki twarz / głos / insygnia - Включить вкладки Лиц / Голосов / Знаков различия + Вкл. вкладки: лица, голоса, эмблемы Ativar as abas de rostos / vozes / insígnias Povolit záložky s tvářemi, hlasy a insigniemi Yüzler/sesler/peçler bölmelerini etkinleştir @@ -1468,14 +1468,17 @@ Save Face 얼굴 저장 + Сохранить лицо Save Voice 목소리 저장 + Сохранить голос Save Insignia 계급장 저장 + Сохранить эмблему diff --git a/addons/artillerytables/stringtable.xml b/addons/artillerytables/stringtable.xml index 8b26e420ce..5aef75b4ed 100644 --- a/addons/artillerytables/stringtable.xml +++ b/addons/artillerytables/stringtable.xml @@ -80,7 +80,7 @@ Computador de Artilharia Desabilitado Computadora de artillería deshabilitada Topçu Bilgisayarı Devre Dışı - Артиллерийский Компьютер Отключён + Орудийный компьютер отключён 탄도계산컴퓨터 비활성화 @@ -96,7 +96,7 @@ Desabilitar o computador de artilharia padrão Deshabilita la computadora de artillería por defecto de Arma 3 Topçu bilgisayarını devre dışı bırak - Отключить ванильный артиллерийский компьютер + Отключить ванильный орудийный компьютер 바닐라 탄도계산컴퓨터를 비활성화 합니다. diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index a859ae7735..a58e7a0749 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -2825,6 +2825,7 @@ Magazynek 6.5x47 mm 30rd Piaskowy (HPBT Scenar) 6.5x47 mm 30发 沙色弹匣(HPBT Scenar) 6.5x47 mm 30발 사막 탄창 (HPBT Scenar) + Магазин из 30-ти 6.5x47 мм Песочный (HPBT Scenar) 6.5x47 mm 30Rnd Promet Mag (HPBT Scenar) @@ -2834,6 +2835,7 @@ Magazynek 6.5x47 mm 30rd Promet (HPBT Scenar) 6.5x47 mm 30发 Promet 弹匣(HPBT Scenar) 6.5x47 mm 30발 프로멧 탄창 (HPBT Scenar) + Магазин из 30-ти 6.5x47 мм Promet (HPBT Scenar) 6.5x47 mm 30Rnd Black Mag (HPBT Scenar) @@ -2843,6 +2845,7 @@ Magazynek 6.5x47 mm 30rd Czarny (HPBT Scenar) 6.5x47 mm 30发 黑色弹匣(HPBT Scenar) 6.5x47 mm 30발 검정 탄창 (HPBT Scenar) + Магазин из 30-ти 6.5x47 мм Чёрный (HPBT Scenar) 6.5x47 mm 30Rnd Khaki Mag (HPBT Scenar) @@ -2852,6 +2855,7 @@ Magazynek 6.5x47 mm 30rd Khaki (HPBT Scenar) 6.5x47 mm 30发 卡其色弹匣(HPBT Scenar) 6.5x47 mm 30발 카키 탄창 (HPBT Scenar) + Магазин из 30-ти 6.5x47 мм Хаки (HPBT Scenar) 6.5 mm Lapua @@ -2912,6 +2916,7 @@ Magazynek 6.5 mm Creedmor 30Rnd Piaskowy 6.5 mm 30发 沙色弹匣(Creedmor) 6.5 mm 크리드무어 30발 사막 탄창 + Магазин из 30-ти 6.5 мм Creedmor Песочный 6.5 mm Creedmor 30Rnd Promet Mag @@ -2921,6 +2926,7 @@ Magazynek 6.5 mm Creedmor 30Rnd Promet 6.5 mm 30发 Promet 弹匣(Creedmor) 6.5 mm 크리드무어 30발 프로멧 탄창 + Магазин из 30-ти 6.5 мм Creedmor Promet 6.5 mm Creedmor 30Rnd Black Mag @@ -2930,6 +2936,7 @@ Magazynek 6.5 mm Creedmor 30Rnd Czarny 6.5 mm 30发 黑色弹匣(Creedmor) 6.5 mm 크리드무어 30발 검정 탄창 + Магазин из 30-ти 6.5 мм Creedmor Чёрный 6.5 mm Creedmor 30Rnd Khaki Mag @@ -2939,6 +2946,7 @@ Magazynek 6.5 mm Creedmor 30Rnd Khaki 6.5 mm 30发 卡其色弹匣(Creedmor) 6.5 mm 크리드무어 30발 카키 탄창 + Магазин из 30-ти 6.5 мм Creedmor Хаки 6.5 mm CM diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 208579f6b4..205d4f4dce 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -37,7 +37,7 @@ Renamed to:<br/>%1 名前を次に変更:<br/>%1 Renommé en :<br/>%1 - Переименовано в: + Переименовано в:<br/>%1 Neu Bewaffnet: <br/>%1 Nazwa zmieniona na:<br/>%1 重命名为:<br/>%1 @@ -67,7 +67,7 @@ Enable Rename Action 名前変更を有効化 Possibilité de renommage - Включить возможность переименования + Вкл. возможность переименования Aktiviere Umbenennungs-Aktion Włącz możliwość zmiany nazwy 启用重命名动作 @@ -136,7 +136,7 @@ Aktiviere Fracht Aktywuj cargo Ativar carga - Включить модуль перевозки грузов + Вкл. модуль перевозки грузов Povolit náklad Habilitar carga Abilita Cargo @@ -297,6 +297,7 @@ Własna nazwa 自定义名称 임의 명칭 + Собственное название Set a custom cargo name used in the cargo interface. @@ -410,7 +411,7 @@ 空投时间系数 Współczynnik czasu zrzutu 공중 투하 시간 계수 - Коэффициент времени десантирования + Коэф. времени десантирования Fator de Tempo para soltar a carga Koeficient času nákladního výsadku Coeficiente de tiempo para lanzamiento @@ -436,7 +437,7 @@ 積載時間の係数 Współczynnik czasu załadowania Coefficente Tempo Caricamento - Коэффициент времени погрузки + Коэф. времени погрузки Fator de tempo para carregar Coefficient du temps de chargement 裝載時間係數 @@ -485,10 +486,12 @@ Carry After Unload 화물 내린 후 운반 + Нести после выгрузки Controls whether cargo items are carried or dragged after unloading. 화물 아이템을 내린 후 들거나 끌지 여부를 결정합니다. + Нужно ли переносить или тащить предметы после их выгрузки. diff --git a/addons/casings/stringtable.xml b/addons/casings/stringtable.xml index 8f6213f8b5..8277948703 100644 --- a/addons/casings/stringtable.xml +++ b/addons/casings/stringtable.xml @@ -7,6 +7,7 @@ ACE Łuski ACE 탄피 ACE 弹壳 + ACE Гильзы Casings Enabled @@ -14,6 +15,7 @@ Łuski włączone 탄피 활성화 开启弹壳生成 + Гильзы включены Enable persistent casings (POTENTIAL performance impact on old/weak systems) @@ -21,6 +23,7 @@ Włącz pozostawanie łusek (MOŻLIWY wpływ na wydajność na starych/słabych komputerach) 영구적으로 남는 탄피를 활성화합니다(오래되고 취약한 시스템에 잠재적인 성능에 영향을 미칩니다.) 开启生成持续存在的弹壳(可能对较老和性能不行的系统有影响) + Включить постоянные гильзы (ПОТЕНЦИАЛЬНО может повлиять на производительность на старых/слабых системах) Maximum casings @@ -28,6 +31,7 @@ Maksymalna liczba łusek 탄피 최대 갯수 最大弹壳量 + Макс. кол-во гильз Maximum amount of casings to display @@ -35,6 +39,7 @@ Maksymalna liczba wyświetlanych łusek 표시할 최대 탄피 갯수 显示的最大弹壳数量 + Максимальное количество гильз для отображения diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index eb937fe68e..1c4f2dd20b 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -75,7 +75,7 @@ Luce chimica (Arancione) 螢光棒 (橘色) 荧光棒(橘色) - Химсвет (Оранжевый) + Химсвет (оранжевый) Bastão de Luz (Laranja) Chemické světlo (Oranžové) Luz química (naranja) @@ -107,7 +107,7 @@ Tipo: Luce - Arancione<br/>Rimanenti: 1<br/>Usata in: Mano 類型: 光 - 橘色<br />發數: 1<br />使用於: 手 类型:光—橘色<br />发数:1<br />使用于:手 - Тип: Свет - Оранжевый<br />1 штука<br />В руках + Тип: Свет - оранжевый<br />1 штука<br />В руках Tipo: Luz - Laranja<br/>Usos: 1<br/>Usado em: Mão Typ: Světlo - Oranžové<br/>Počet použití: 1<br/>Použít v ruce Tipo: Luz - Naranja<br />Cantidad: 1<br />Usado en: Mano @@ -123,7 +123,7 @@ Luce chimica (Bianca) 螢光棒 (白色) 荧光棒(白色) - Химсвет (Белый) + Химсвет (белый) Bastão de Luz (Branco) Chemické světlo (Bílé) Luz química (Blanca) @@ -155,7 +155,7 @@ Tipo: Luce - Bianca<br/>Rimanenti: 1<br/>Usata in: Mano 類型: 光 - 白色<br />發數: 1<br />使用於: 手 类型:光—白色<br />发数:1<br />使用于:手 - Тип: Свет - Белый<br />1 штука<br />В руках + Тип: Свет - белый<br />1 штука<br />В руках Tipo: Luz - Branco<br/>Usos: 1<br/>Usado em: Mão Typ: Světlo - Bílé<br/>Počet použití: 1<br/>Použít v ruce Tipo: Luz - Blanca<br />Cantidad: 1<br />Usado en: Mano @@ -171,7 +171,7 @@ Luce chimica (Hi Rossa) 螢光棒 (超亮紅色) 荧光棒(高亮红色) - Химсвет (Ярко-Красный) + Химсвет (ярко-красный) Bastão de Luz (Vermelho Forte) Chemické světlo (Červené jasné) Luz química (Roja Hi) @@ -187,7 +187,7 @@ Luce Hi Rossa 超亮紅色光 高亮红色光 - Яркий Красный свет + Яркий красный свет Luz forte vermelha Červené jasné světlo Luz roja Hi @@ -203,7 +203,7 @@ Tipo: Luce - Rossa Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano 類型: 光 - 超亮紅色 (30分鐘)<br />發數: 1<br />使用於: 手 类型:光—高亮红色(30分钟)<br />发数:1<br />使用于:手 - Тип: Свет - Ярко-Красный (30 минут)<br />1 штука<br />В руках + Тип: Свет - ярко-красный (30 минут)<br />1 штука<br />В руках Tipo: Luz - Vermelho Forte (30 minutos)<br/>Usos: 1<br/>Usado em: Mão Typ: Světlo - Červené jasné<br/>Počet použití: 1<br/>Použít v ruce Tipo: Luz - Roja Hi (30 minutos)<br />Cantidad: 1<br />Usado en: Mano @@ -219,7 +219,7 @@ Luce chimica (Hi Gialla) 螢光棒 (超亮黃色) 荧光棒(高亮黄色) - Химсвет (Ярко-Желтый) + Химсвет (ярко-жёлтый) Bastão de Luz (Amarelo Forte) Chemické světlo (Žluté jasné) Luz química (Amarilla Hi) @@ -235,7 +235,7 @@ Luce Hi Gialla 超亮黃色光 高亮黄色光 - Яркий Желтый свет + Яркий жёлтый свет Luz forte amarela Žluté jasné světlo Luz amarilla Hi @@ -251,7 +251,7 @@ Tipo: Luce - Gialla Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano 類型: 光 - 超亮黃色 (30分鐘)<br />發數: 1<br />使用於: 手 类型:光—高亮黄色(30分钟)<br />发数:1<br />使用于:手 - Тип: Свет - Ярко-Желтый (30 минут)<br />1 штука<br />В руках + Тип: Свет - ярко-жёлтый (30 минут)<br />1 штука<br />В руках Tipo: Luz - Amarelo Forte (30 minutos)<br/>Usos: 1<br/>Usado em: Mão Typ: Světlo - Žluté jasné<br/>Počet použití: 1<br/>Použít v ruce Tipo: Luz - Amarilla Hi (30 minutos)<br />Cantidad: 1<br />Usado en: Mano @@ -267,7 +267,7 @@ Luce chimica (Hi Bianca) 螢光棒 (超亮白色) 荧光棒(高亮白色) - Химсвет (Ярко-Белый) + Химсвет (ярко-белый) Bastão de Luz (Branco Forte) Chemické světlo (Bílé jasné) Luz química (Blanca Hi) @@ -283,7 +283,7 @@ Luce Hi Bianca 超亮白色光 高亮白色光 - Яркий Белый свет + Яркий белый свет Luz forte branca Bílé jasné světlo Luz blanca Hi @@ -299,7 +299,7 @@ Tipo: Luce - Bianca Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano 類型: 光 - 超亮白色 (30分鐘)<br />發數: 1<br />使用於: 手 类型:光—高亮白色(30分钟)<br />发数:1<br />使用于:手 - Тип: Свет - Ярко-Белый (30 минут)<br />1 штука<br />В руках + Тип: Свет - ярко-белый (30 минут)<br />1 штука<br />В руках Tipo: Luz - Branco Forte (30 minutos)<br/>Usos: 1<br/>Usado em: Mão Typ: Světlo - Bílé jasné<br/>Počet použití: 1<br/>Použít v ruce Tipo: Luz - Blanca Hi (30 minutos)<br />Cantidad: 1<br />Usado en: Mano @@ -312,7 +312,7 @@ Świetlik (jaskrawy niebieski) Knicklicht (Blau, Hell) Luce chimica (Hi Blu) - Химсвет (Ярко-Синий) + Химсвет (ярко-синий) Bastão de Luz (Azul Forte) 螢光棒(超亮藍色) 荧光棒(高亮蓝色) @@ -328,7 +328,7 @@ 高輝度の青色 Jaskrawe niebieskie światło Luce Hi Blu - Яркий Синий свет + Яркий синий свет Luz forte azul 超亮藍色光 高亮蓝色光 @@ -344,7 +344,7 @@ 種類: 照明 - 高輝度 青 (30分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe niebieskie (30 minut)<br/>Pociski: 1<br/>Używany w: ręce Tipo: Luce - Hi blu (30 minuti)<br/>Rimanenti:1 <br/>Usata in: Mano - Тип: Свет - Ярко-Синий (30 минут)<br />1 штука<br />В руках + Тип: Свет - ярко-синий (30 минут)<br />1 штука<br />В руках Tipo: Luz - Azul Forte (30 minutos)<br/>Usos: 1<br/>Usado em: Mão 類型: 光 - 超亮藍色 (30分鐘)<br />發數: 1<br />使用於: 手 类型:光—高亮蓝色(30分钟)<br />发数:1<br />使用于:手 @@ -360,7 +360,7 @@ ケミライト (高輝度 緑) Świetlik (jaskrawy zielony) Luce chimica (Hi Verde) - Химсвет (Ярко-Зеленый) + Химсвет (ярко-зелёный) Bastão de Luz (Verde Forte) 螢光棒(超亮綠色) 荧光棒(高亮绿色) @@ -376,7 +376,7 @@ 高輝度の青色 Jaskrawe zielone światło Luce Hi Verde - Яркий Зеленый свет + Яркий зелёный свет Luz forte verde 超亮綠色光 高亮绿色光 @@ -392,7 +392,7 @@ 種類: 照明 - 高輝度 緑 (30分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe zielone (30 minut)<br/>Pociski: 1<br/>Używany w: ręce Tipo: Luce - Hi verde (30 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano - Тип: Свет - Ярко-Зеленый (30 минут)<br />1 штука<br />В руках + Тип: Свет - ярко-зелёный (30 минут)<br />1 штука<br />В руках Tipo: Luz - Verde Forte (30 minutos)<br/>Usos: 1<br/>Usado em: Mão 類型: 光 - 超亮綠色 (30分鐘)<br />發數: 1<br />使用於: 手 类型:光—高亮绿色(30分钟)<br />发数:1<br />使用于:手 @@ -408,7 +408,7 @@ ケミライト (高輝度 オレンジ) Świetlik (ultra-jaskrawy pomarańczowy) Luce chimica (Ultra-Hi Arancione) - Химсвет (Ультраяркий Оранжевый) + Химсвет (ультраяркий оранжевый) Bastão de Luz (Laranja Ultra Forte) 螢光棒(極亮橘色) 荧光棒(高亮橘色) @@ -424,7 +424,7 @@ ウルトラ高輝度のオレンジ色 Ultra-jaskrawe pomarańczowe światło Luce Ultra-Hi Arancione - Ультраяркий Оранжевый свет + Ультраяркий оранжевый свет Luz ultra forte laranja 極亮橘色光 高亮橘色光 @@ -440,7 +440,7 @@ 種類: 照明 - ウルトラ高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - ultra-jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Tipo: Luce - Ultra-Hi (5 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano - Тип: Свет - Ультраяркий Оранжевый (5 минут)<br />1 штука<br />В руках + Тип: Свет - ультраяркий оранжевый (5 минут)<br />1 штука<br />В руках Tipo: Luz - Laranja Ultra Forte (5 minutos)<br/>Usos: 1<br/>Usado em: Mão 類型: 光 - 極亮橘色 (5分鐘)<br />發數: 1<br />使用於: 手 类型:光—高亮橘色(5分钟)<br />发数:1<br />使用于:手 @@ -459,7 +459,7 @@ Luce chimica (IR) 螢光棒 (紅外線) 荧光棒(红外线) - Химсвет (Инфракрасный) + Химсвет (инфракрасный) Bastão de Luz (IV) Chemické světlo (Infračervené) Luz química (IR) @@ -491,7 +491,7 @@ Tipo: Luce - Infrarossi<br />Usata in: Mano 類型: 光 - 紅外線<br />發數: 1<br />使用於: 手 类型:光—红外线<br />发数:1<br />使用于:手 - Тип: Свет - Инфракрасный<br />1 штука<br />В руках + Тип: Свет - инфракрасный<br />1 штука<br />В руках Tipo: Luz - Infravermelho<br/>Usos: 1<br/>Usado em: Mão Typ: Světlo - Infračervené<br/>Počet použití: 1<br/>Použít v ruce Tipo: Luz infra-roja<br />Cantidad: 1<br />Usado en: Mano @@ -507,7 +507,7 @@ Scudo Luce chimica (Vuoto) 螢光棒保護殼 (空) 荧光棒保护壳(空) - Контейнер для Химсвета (Пуст) + Контейнер для химсвета (пустой) Estojo de Luz (Vazio) Clona na chemické světlo Protector de luz química (Vacía) @@ -523,7 +523,7 @@ Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura. 螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈 荧光棒的保护壳。与萤光棒结合后可充当阅读灯。 - Защитный контейнер для Химсвета. Объедините с Химсветом, чтобы подготовить Свет для чтения + Защитный контейнер для химсвета. Объедините с химсветом, чтобы подготовить ночник. Estojo para os bastões de luz. Combine com o bastão de luz para preparar luz de leitura. Clona na chemické světlo. Při vložení chemického světla vznikne praktické světlo na čtení. Protector para luz química. Combina con luz química para preparar una luz de lectura @@ -539,7 +539,7 @@ Scudo Luce Chimica (Verde) 螢光棒保護殼 (綠色) 荧光棒保护壳(绿色) - Контейнер для Химсвета (Зел) + Контейнер для химсвета (зелёный) Estojo de Luz (Verde) Clona s vloženým chemickým světlem (Zelené) Protector de luz química (Verde) @@ -555,7 +555,7 @@ Luce da lettura Verde. 綠色閱讀燈 绿色阅读灯。 - Ночник из Химсвета (Зеленый) + Ночник из зелёного химсвета. Luz de leitura verde. Zelené světlo na čtení. Luz de lectura verde @@ -571,7 +571,7 @@ Scudo Luce Chimica (Rossa) 螢光棒保護殼 (紅色) 荧光棒保护壳(红色) - Контейнер для Химсвета (Красн) + Контейнер для химсвета (красный) Estojo de Luz (Vermelho) Clona s vloženým chemickým světlem (Červené) Protector de luz química (Roja) @@ -587,7 +587,7 @@ Luce da lettura Rossa. 紅色閱讀燈 红色阅读灯。 - Ночник из Химсвета (Красный) + Ночник из красного химсвета. Luz de leitura vermelha. Červené světlo na čtení. Luz de lectura roja @@ -603,7 +603,7 @@ Scudo Luce Chimica (Blu) 螢光棒保護殼 (藍色) 荧光棒保护壳(蓝色) - Контейнер для Химсвета (Син) + Контейнер для химсвета (синий) Estojo de Luz (Azul) Clona s vloženým chemickým světlem (Modré) Protector de luz química (Azul) @@ -619,7 +619,7 @@ Luce da lettura Blu. 藍色閱讀燈 蓝色阅读灯。 - Ночник из Химсвета (Синий) + Ночник из синего химсвета. Luz de leitura azul. Modré světlo na čtení. Luz de lectura azul @@ -635,7 +635,7 @@ Scudo Luce Chimica (Gialla) 螢光棒保護殼 (黃色) 荧光棒保护壳(黄色) - Контейнер для Химсвета (Желт) + Контейнер для химсвета (жёлтый) Estojo de Luz (Amarelo) Clona s vloženým chemickým světlem (Žluté) Protector de luz química (Amarilla) @@ -651,7 +651,7 @@ Luce da lettura Gialla. 黃色閱讀燈 黄色阅读灯。 - Ночник из Химсвета (Желтый) + Ночник из жёлтого химсвета. Luz de leitura amarela. Žluté světlo na čtení. Luz de lectura amarilla @@ -667,7 +667,7 @@ Scudo Luce Chimica (Arancione) 螢光棒保護殼 (橘色) 荧光棒保护壳(橘色) - Контейнер для Химсвета (Оранж) + Контейнер для химсвета (оранжевый) Estojo de Luz (Laranja) Clona s vloženým chemickým světlem (Oranžové) Protector de luz química (Naranja) @@ -683,7 +683,7 @@ Luce da lettura Arancione. 橘色閱讀燈 橘色阅读灯。 - Ночник из Химсвета (Оранжевый) + Ночник из оранжевого химсвета. Luz de leitura laranja. Oranžové světlo na čtení. Luz de lectura naranja @@ -699,7 +699,7 @@ Scudo Luce Chimica (Bianca) 螢光棒保護殼 (白色) 荧光棒保护壳(白色) - Контейнер для Химсвета (Белый) + Контейнер для химсвета (белый) Estojo de Luz (Branco) Clona s vloženým chemickým světlem (Bílé) Protector de luz química (Blanca) @@ -715,7 +715,7 @@ Luce da lettura Bianca. 白色閱讀燈 白色阅读灯。 - Ночник из Химсвета (Белый) + Ночник из белого химсвета. Luz de leitura branca. Bílé světlo na čtení. Luz de lectura blanca diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index dde0787a0a..1797fb304e 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -415,7 +415,7 @@ Wyłącz menu dowodzenia Vypnout velící menu Désactiver menu commande - Выключить командное меню + Выкл. командное меню Parancsnoki menü kikapcsolása Disabilita menù di comando Desabilitar menu de comando @@ -597,7 +597,7 @@ Position der Fortschrittsanzeige Ubicación de la barra de progreso Posizione della barra di avanzamento - Положение прогресс-бара + Положение индикатора процесса Lokalizacja paska postępu Position de la barre de progression Pozice ukazetele průběhu činnosti @@ -1031,7 +1031,7 @@ Disattivato Wyłączone Desativado - Откл. + Отключено Desactivado 無効化 비활성화 @@ -1047,7 +1047,7 @@ Attivato Włączone Ativado - Вкл. + Включено Activado 有効化 활성화 @@ -1322,6 +1322,7 @@ ACE Unkategorisiert ACE Nieskategoryzowane ACE 無区分 + ACE Без категории No Room to unload @@ -1429,6 +1430,7 @@ Mode adapté à l'épilepsie 癫痫病友好模式 광과민 친화적 모드 + Режим для эпилептиков Disables some flashing light effects to reduce seizure risk. @@ -1438,6 +1440,7 @@ Désactive certains effets de lumière clignotante afin de réduire les risques de crise d'épilepsie. 禁用一些闪烁的灯光效果,以降低癫痫发作的风险。 반짝거리는 빛으로 인해 일어날 발작 상황을 줄여줍니다. + Отключает некоторые вспышки во избежание риска приступа. Flag (ACE - Black) @@ -1495,6 +1498,7 @@ Nur KI 仅 AI AIのみ + Только ИИ Players and AI @@ -1544,7 +1548,7 @@ Additional progress bar information プログレス バー詳細情報 Infos supplémentaires de la barre de progression - Дополнительная информация прогресс-бара + Доп. информация индикатора процесса Zusätzliche Informationen beim Fortschrittsbalken Dodatkowe informacje na pasku postępu 额外的进度条信息 @@ -1554,7 +1558,7 @@ Controls extra information shown in progress bar. プログレス バーへ表示される情報量を決定します。 Définit quelles informations supplémentaires sont affichées dans la barre de progression. - Устанавливает дополнительную информацию в прогресс-баре. + Устанавливает дополнительную информацию в индикаторе процесса. Kontrolliert zusätzliche Informationen beim Fortschrittsbalkens Kontroluje dodatkowe informacje na pasku postępu. 控制进度条中显示的额外信息。 @@ -1644,6 +1648,7 @@ 武器からマガジンを抜く 탄창 빼기 卸掉武器弹匣 + Разрядить оружие diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index d6d71a0f50..0eb2cb0340 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -12,7 +12,7 @@ ACE Durchzündung ACE Auto-inflammation ACE Samozapłon - ACE Возгорание + ACE Детонация ACE Cook off ACE Vznícení munice @@ -57,7 +57,7 @@ Abilita esplosione cassa munizioni 開啟彈藥箱殉爆效果 开启弹药箱殉爆效果 - Разрешить возгорание ящиков с боеприпасами + Разрешить детонацию ящиков с боеприпасами Permitir cozinhar caixas de munição Povolit vynícení munice v krabicích @@ -72,7 +72,7 @@ Abilita l'esplosione della cassa di munizioni. 開啟彈藥箱殉爆效果 开启弹药箱殉爆效果 - Активирует возгорание ящиков с боеприпасами + Активирует детонацию ящиков с боеприпасами Permitir que caixas de munição cozinhem. Zapíná vznícení munice v krabicích. @@ -102,7 +102,7 @@ 開啟彈藥殉爆效果。當一台載有彈藥的載具起火時, 將會有殉爆的效果 开启弹药殉爆效果。当一台载有弹药的载具起火时,将会有殉爆的效果。 쿡오프 현상을 활성화 합니다. 이것은 탄약에 불이 붙어 있는 동안 주변에 발사체를 발사합니다. - Активирует возгорание и детонацию боекомплекта в горящей технике + Активирует детонацию боекомплекта в горящей технике. Permite que a munição cozinhe. Dispara projéteis de munição enquanto o veículo está em chamas e tem munição. Zapíná vznícení munice. Vystřeluje projektily po dobu kdy vozidlo hoří a má munici. @@ -117,7 +117,7 @@ 彈藥殉爆效果持續時間 弹药殉爆效果持续时间 쿡오프 지속 시간 - Длительность возгорания боеприпасов + Длительность детонации боеприпасов Duração do cozinhamento de munição Doba trvání vznícení munice @@ -132,7 +132,7 @@ 設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果] 设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果] 쿡오프 지속 시간의 배수 [0 이면 비활성] - Множитель длительности возгорания [0 - отключает возгорание боеприпасов] + Множитель длительности детонации [0 - отключает детонацию боеприпасов] Multiplicação da duração do cozinhamento [0 faz com que o cozinhamento seja desativado] Multiplikátor doby trvání vznícení munice [Nastavte 0 pro vypnutí vznícení munice] @@ -146,7 +146,7 @@ 殉爆发生机率系数 Coefficient de probabilité d'auto-inflammation Współczynnik prawdopodobieństwa samozapłonu - Коэффициент вероятности возгорания + Коэф. вероятности детонации Probabilidade de Cozinhar Koeficient pravděpodobnosti vznícení munice 쿡오프 발생 확률 계수 @@ -161,7 +161,7 @@ 调整殉爆发生机率系数。值越高代表越容易发生殉爆。 Multiplicateur de probabilité de l'auto-inflammation. Plus la valeur est élevée, plus la probabilité de combustion est grande. Mnożnik prawdopodobieństwa samozapłonu. Większa wartość oznacza większe prawdopodobieństwo samozapłonu - Множитель коэффициента вероятности возгорания. Чем выше значение, тем выше вероятность. + Множитель коэффициента вероятности детонации. Чем выше значение, тем выше вероятность Multiplicador para a chance de cozinhamento. Valores mais altos aumentam as chances de ocorrer. Multiplikátor pro pravděpodobnost vznícení munice. Vyšší hodnota znamená vyšší šanci vznícení munice. 쿡오프가 일어날 확률에 계수를 곱합니다. 더 큰 숫자는 더 높은 확률의 쿡오프를 일으킵니다. @@ -170,17 +170,19 @@ Destroy Vehicles After Cook-off 쿡오프 후 차량 파괴 殉爆发生后摧毁载具 + Уничтожать технику после детонации Controls whether vehicles will always be destroyed after cooking off. Depending on the cookoff, the vehicle may explode or may simply be killed without effects. 차량이 쿡오프된 후 파괴할 지에 대한 여부를 제어합니다. 쿡오프에 따라 차량이 폭발하거나 아무런 효과 없이 파괴될 수 있습니다. 控制载具是否总是会在殉爆结束后被摧毁。根据殉爆的剧烈程度,载具可能会爆炸,也可能只是被没有效果地摧毁。 + Всегда ли техника будет уничтожена после детонации. В зависимости от детонации, она может быть взорвана или просто уничтожена без эффектов. Enable Cook-Off Vehicle Fire 誘爆火災を有効化 Véhicules - Feu durant l'auto-inflammation - Включить возгорание поеприпасов + Вкл. горение техники от детонации Aktiviert das in Brand setzen des Fahrzeugs während des Durchzündens der Munition Włącz pożar pojazdu podczas samozapłonu 启用殉爆载具火灾 @@ -190,7 +192,7 @@ Whether or not vehicles will catch on fire during cook-off 誘爆により車両が炎上するかどうかを設定します。 Définit si les véhicules prennent feu durant l'auto-inflammation de leurs munitions. - Будет ли техника возгораться при подрыве боеприпасов + Будет ли техника гореть при детонации боеприпасов Ob Fahrzeuge in Brand gesetzt werden, während deren Munition durchzündet. Określa, czy pojazdy zapalą się podczas samozapłonu ich amunicji. 车辆在殉爆过程中是否会起火 diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml index 27cdb43b9f..8372368b44 100644 --- a/addons/csw/stringtable.xml +++ b/addons/csw/stringtable.xml @@ -180,6 +180,7 @@ Magazyn amunicji 弾薬の格納 弹药存储 + Хранилище боеприпасов Determines whether extra magazines are stored on the ground or inside an ammo box @@ -188,6 +189,7 @@ Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją. 追加のマガジンを地面に設置するか、弾薬箱の中に保管するかを決定します 设置多余的弹夹是存放在地面上还是弹药箱内 + Определяет будут ли дополнительные магазины лежать на земле или внутри хранилища Ground @@ -196,6 +198,7 @@ Ziemia 地面 地面 + Земля Ammo Box @@ -204,6 +207,7 @@ Skrzynka amunicyjna 弾薬箱 弹药箱 + Коробка с боеприпасами Ammo handling @@ -247,7 +251,7 @@ Koeficient času interakce Współczynnik czasu interakcji Coeficiente de tiempo de interacción - Коэффициент времени взаимодействия + Коэф. времени взаимодействия 상호작용 시간 계수 @@ -459,7 +463,7 @@ [CSW] Statický raketomet Mini-Spike (protitankový) [CSW] Static Mini-Spike Launcher (AT) [CSW] Mini-Spike Przeciwpancerny pocisk rakietowy - [CSW] Станковый Mini-Spike ПТРК + [CSW] Станковый Mini-Spike (ПТРК) [CSW] 거치형 Mini-Spike 발사기 (대전차) @@ -475,7 +479,7 @@ [CSW] Statický raketomet Mini-Spike (protiletadlový) [CSW] Static Mini-Spike Launcher (AA) [CSW] Mini-Spike Przeciwlotniczy pocisk rakietowy - [CSW] Станковый Mini-Spike ЗРК + [CSW] Станковый Mini-Spike (ЗРК) [CSW] 거치형 Mini-Spike 발사기 (대공) @@ -599,7 +603,7 @@ [CSW] Pás 12.7×99mm pro těžký kulomet (červená stopovka) [CSW] 12.7x99mm Tracer HMG Belt (Red) [CSW] Taśma 12.7x99mm CKM Smugowa (Czerwona) - [CSW] 12.7x99 мм трасс. пулемётная лента (Красный) + [CSW] 12.7x99 мм трасс. пулемётная лента (красные) [CSW] 12.7x99mm 예광탄 중기관총 탄띠 (빨강) @@ -615,7 +619,7 @@ [CSW] Pás 12.7×99mm pro těžký kulomet (zelená stopovka) [CSW] 12.7x99mm Tracer HMG Belt (Green) [CSW] Taśma 12.7x99mm CKM Smugowa (Zielona) - [CSW] 12.7x99 мм трасс. пулемётная лента (Зелёный) + [CSW] 12.7x99 мм трасс. пулемётная лента (зелёные) [CSW] 12.7x99mm 예광탄 중기관총 탄띠 (초록) @@ -631,7 +635,7 @@ [CSW] Pás 12.7×99mm pro těžký kulomet (žlutá stopovka) [CSW] 12.7x99mm Tracer HMG Belt (Yellow) [CSW] Taśma 12.7x99mm CKM Smugowa (Żółta) - [CSW] 12.7x99 мм трасс. пулемётная лента (Жёлтый) + [CSW] 12.7x99 мм трасс. пулемётная лента (жёлтые) [CSW] 12.7x99mm 예광탄 중기관총 탄띠 (노랑) @@ -695,7 +699,7 @@ [CSW] 6P57 trojnožka (nízká) [CSW] 6P57 Deployable Tripod (Low) [CSW] Trójnóg Rozkładany 6P57 (Niski) - [CSW] 6P67 Развертываемая тренога (Низкая) + [CSW] 6P67 Развертываемая тренога (низкая) [CSW] 6P57 배치형 삼각대 (낮음) @@ -807,7 +811,7 @@ [CSW] M3 trojnožka (nízká) [CSW] M3 Deployable Tripod (Low) [CSW] Trójnóg Rozkładany M3 (Niski) - [CSW] M3 Развертываемая тренога (Низкая) + [CSW] M3 Развертываемая тренога (низкая) [CSW] M3 배치형 삼각대 (낮음) diff --git a/addons/dagr/stringtable.xml b/addons/dagr/stringtable.xml index 19af8d3f54..38dfd89254 100644 --- a/addons/dagr/stringtable.xml +++ b/addons/dagr/stringtable.xml @@ -38,7 +38,7 @@ DAGR umschalten Przełącz DAGR Mostrar DAGR - Вкл./выкл. DAGR + Переключить DAGR Mostrar DAGR Přepnout DAGR Apri DAGR diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index bfa4ccffe6..b8b86f2464 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -37,7 +37,7 @@ Drag/Release Object - Тащить/Отпустить Объект + Тащить/отпустить объект Arrastrar/Soltar Objeto Ciągnij/Puść Obiekt Táhnout/Položit Objekt @@ -55,7 +55,7 @@ Carry/Release Object Porter/Lâcher un objet - Нести/Отпустить Объект + Нести/отпустить объект Nieś/Puść objekt オブジェクトを運ぶ/離す Objeyi Taşı/Bırak @@ -104,7 +104,7 @@ Lever/Baisser | (Ctrl + Scroll) Rotation 上げる/下げる | (Ctrl + スクロール) 回転 Zvednout/Snížit | (Ctrl + Kolečko myši) Otáčet - Поднять/Опустить | (Ctrl + Скролл) Крутить + Поднять/опустить | (Ctrl + Скролл) Крутить Wyżej/niżej | (Ctrl + Kółko myszy) obracanie Yükselt/Alçalt | (Ctrl + Tekerlek) Döndür Subir/Bajar | (Ctrl + Scroll) Rotar diff --git a/addons/dragon/stringtable.xml b/addons/dragon/stringtable.xml index 64692c8dc9..4170974dc5 100644 --- a/addons/dragon/stringtable.xml +++ b/addons/dragon/stringtable.xml @@ -90,7 +90,7 @@ Una luce,un mirino usato per le operazioni diurne.Contiene il computer di guida per l'intero sistema Lehký a levný puškohled pro použití za denního světla. Obsahuje navigační počítač pro celý systém. Lekki, tani celownik używany do działania w trakcie dnia. Zawiera komputer naprowadząjący dla całego systemu - Легкий дешёвый прицел, используемый для дневных операций. Содержит компьютер для всей системы + Лёгкий дешёвый прицел, используемый для дневных операций. Содержит компьютер для всей системы Un visor ligero y barato utilizado en operaciones diurnas. Contiene el ordenador de guiado para todo el sistema. 싸고 가벼운 주간조준기입니다. 사격을 하기 위한 통제컴퓨터가 포함되있습니다. diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index f04be845d6..c38c226d17 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -804,7 +804,7 @@ Requer especialista em explosivos para desativar explosivos? Padrão: Não Seul un spécialiste peut désamorcer des explosifs. Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem - Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет + Требуется ли специалист по минному делу для обезвреживания взрывчатки? По умолчанию: Нет Richiedi specialisti esplosivi per disabilitare esplosivi? Default: No 爆発物を無効化するには特技兵である必要かどうかを設定できます。標準: 無効化 폭발물을 해제하기 위해서는 전문가가 필요합니까? 기본설정: 아니요 @@ -837,7 +837,7 @@ Aumentar o tempo necessário para completar ações por não especialistas? Padrão: Sim Augmente le temps nécessaire au désamorçage pour les unités non spécialisées. Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen - Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет + Увеличивать время завершения действий для не-специалистов? По умолчанию: Нет Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si 非特技兵は動作完了までの時間を増加させますか? 標準: 有効化 비전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예 @@ -853,7 +853,7 @@ Explotar al desactivar? Explosion au désamorçage Robbanás hatástalanításkor? - Взрыв при разминир.? + Взрыв при разминировании? Fai esplodere quando disarmato? 解除中に爆発 해제 시 폭발합니까? @@ -869,7 +869,7 @@ ¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí Certains explosifs exploseront durant le désamorçage. Valeur par défaut : activé. Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen - Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да + Разрешить определенным взрывным устройствам взрываться при разминировании? По умолчанию: Да Abilita alcuni esplosivi per esplosione al disarmo? Default: Si 特定の爆発物を解除中に爆発させるかどうかを設定できます。? 標準: 有効化 특정 폭발물이 해제 시 폭발하게 합니까? 기본설정: 예 @@ -1091,7 +1091,7 @@ Minimum Time - Минимальное время + Мин. время Durée minimale 最短時間 Tiempo mínimo @@ -1102,7 +1102,7 @@ Maximum Time - Максимальное время + Макс. время Durée maximale 最長時間 Tiempo máximo diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index f8fe5f00e9..91c180545a 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -43,7 +43,7 @@ FCS tartomány állítása (Fel) Ajustar distância do FCS (Acima) Aumentare la distanza dell'FCS - Диапазон СУО (Выше) + Диапазон СУО (выше) FCS による距離を調節 (上げ) 사통장치 거리 조정 (위로) 调整火控系统距离(上调) @@ -59,7 +59,7 @@ FCS tartomány állítása (Le) Ajustar distância do FCS (Abaixo) Ridurre la distanza dell'FCS - Диапазон СУО (Ниже) + Диапазон СУО (ниже) FCS による距離を調節 (下げ) 사통장치 거리 조정 (아래로) 调整火控系统距离(下调) diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index ad5fea0e5c..b369c9a6a6 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1111,6 +1111,7 @@ Nasiona Słonecznika ヒマワリの種 葵花籽 + Семечки подсолнуха Roasted And Salted @@ -1119,6 +1120,7 @@ Pieczone i Solone 炒って塩で味付け済 焙烤盐焗 + Поджаренные и солёные diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index 780e1dfefa..962e9a5dd3 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -75,7 +75,7 @@ Określ dystans na jakim można wskazywać coś palcem innym graczom. [domyślnie: 4m] A maximális távolság, amelyben a közeli játékosoknak megjelenik az indikátor. [alapértelmezett: 4 méter] Distância máxima entre jogadores para mostrar o apontamento [padrão: 4 metros] - Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра] + Максимальная дальность между игроками для отображения индикатора указания пальцем [по умолчанию: 4 метра] Distancia máxima entre los jugadores para mostrar el indicador que señala [por defecto: 4 metros] Maximální vzdálenost mezi hráči pro ukázání směru [výchozí: 4 metry] Distanza massima tra giocatori per mostrare l'indicatore di puntamento [default: 4 metri] @@ -92,6 +92,7 @@ Współczynnik wielkości wirtualnego znacznika 指さし表記大きさ係数 屏幕标记大小系数 + Коэф. размера маркера Adjusts the size of the visual marker. @@ -100,6 +101,7 @@ Dostosowuje rozmiar wirtualnego znacznika. 指さし表記の大きさを調整します。 调整屏幕上显示的标记大小 + Настраивает размер визуального маркера Proximity Scaling @@ -108,6 +110,7 @@ Skalowanie odległościowe 近接性スケーリング 根据距离缩放 + Масштабирование от дальности Scales the size of the visual marker based on the distance between the player observing and the player pointing. @@ -116,6 +119,7 @@ Skaluje rozmiar wirtualnego znacznika, na podstawie odległości między graczem obserwującym a graczem wskazującym. 見ているプレーヤーと指さししたプレーヤーの距離に基づいて、指さし表記の大きさを調整します。 根据观察的玩家和在指出方向的的玩家之间的距离调整视觉标记的大小。 + Масштабирует размер визуального маркера в зависимости от дальности от игрока до точки указания. Show pointing indicator to self diff --git a/addons/fire/initSettings.sqf b/addons/fire/initSettings.sqf index ff21b75ae4..97963f3e32 100644 --- a/addons/fire/initSettings.sqf +++ b/addons/fire/initSettings.sqf @@ -1,6 +1,6 @@ [ QGVAR(enabled), "CHECKBOX", - ["STR_A3_OPTIONS_ENABLED", LSTRING(Setting_Description)], + [ELSTRING(common,Enabled), LSTRING(Setting_Description)], LSTRING(Category_DisplayName), true, // default value true, // isGlobal diff --git a/addons/fire/stringtable.xml b/addons/fire/stringtable.xml index 0f59b88693..5dbd372e9b 100644 --- a/addons/fire/stringtable.xml +++ b/addons/fire/stringtable.xml @@ -75,6 +75,7 @@ Schreie von brennenden Einheiten aktivieren Włącz krzyki podpalonych jednostek 炎上中の悲鳴を有効 + Вкл. крики от горения Enables if units on fire will play the screaming sound @@ -84,6 +85,7 @@ Aktiviert, ob brennende Einheiten den Schrei-Ton abspielen Włącza, czy płonące jednostki będą odtwarzać dźwięk krzyku 有効化すると炎上しているユニットが悲鳴を上げます + Включает воспроизведение криков когда юнит загорается Drop Weapons When on Fire @@ -93,6 +95,7 @@ 불 붙을 경우 무기 내려놓음 Waffen fallen lassen, wenn in Brand geraten. 炎上時に武器を落とす + Бросать оружие из-за горения Controls whether units drop their weapons when on fire. @@ -102,6 +105,7 @@ 유닛이 불에 붙이면 무기를 떨굴지를 결정합니다. Steuert, ob Einheiten ihre Waffen fallen lassen, wenn sie brennen. ユニットが炎上時に武器を落とすかどうかを定義します。 + Должны ли юниты выбрасывать оружие когда загораются. diff --git a/addons/fortify/stringtable.xml b/addons/fortify/stringtable.xml index 8a05970f89..4b82a2e3c9 100644 --- a/addons/fortify/stringtable.xml +++ b/addons/fortify/stringtable.xml @@ -96,7 +96,7 @@ 要塞: 限制建造區 设防:限制建造区 Fortyfikowanie: Limituj strefe budowania - Фортификация: ограничить зону постройки + Фортификация: Ограничить зону постройки Inşa Etme : Bölgede Inşa Etmeyi Limitle 요새화: 건설 영역 제한 @@ -151,7 +151,7 @@ 有设防工具 要塞ツール所持の時 Posiada narzędzie do fortyfikowania - Если имеется Инструмент + Если имеется инструмент Insa Etme Aleti Olanlara Göster 요새화 도구를 들고 있을 때 @@ -173,14 +173,16 @@ Zeit-Kosten-Koeffizient 時間コスト係数 Współczynnik Czas-Koszt + Коэф. время-цена - Coefficient used to determine time to build structure.<br/>A in Ax + b where x is cost of object - 用于确定建造建筑所需时间的系数。<br/>A是 Ax+b中的一个参数,其中x是物体的成本 + Coefficient used to determine time to build structure.\nA in Ax + b where x is cost of object + 用于确定建造建筑所需时间的系数。\nA是 Ax+b中的一个参数,其中x是物体的成本 건축물을 지을 때 걸리는 시간을 계수를 적용하여 계산합니다. - Koeffizient zur Bestimmung der Bauzeit <br/>A in Ax + b, wobei x die Kosten des Objekts sind. - 建造する時間を決定するために使用される係数。<br/>計算式はAx + bです。この係数はAであり、xは建造物のコストです。 - Współczynnik używany do określenia czasu budowy konstrukcji. &lt;br/&gt;A w Ax + b gdzie x jest kosztem obiektu + Koeffizient zur Bestimmung der Bauzeit \nA in Ax + b, wobei x die Kosten des Objekts sind. + 建造する時間を決定するために使用される係数。\n計算式はAx + bです。この係数はAであり、xは建造物のコストです。 + Współczynnik używany do określenia czasu budowy konstrukcji.\nA w Ax + b gdzie x jest kosztem obiektu + Коэффициент используемый для указания времени необходимого для возведения постройки.\nA в формуле Ax + b, где x - это цена объекта Minimum Build Time @@ -189,14 +191,16 @@ Minimale Bauzeit 建造に掛かる最小の時間 Minimalny czas budowy + Мин. время возведения - Minimum time to build any structure.<br/>b in Ax + b where x is cost of object - 建造任何建筑的最短时间。<br/>b是 Ax+b中的一个参数,其中x是物体的成本 + Minimum time to build any structure.\nb in Ax + b where x is cost of object + 建造任何建筑的最短时间。\nb是 Ax+b中的一个参数,其中x是物体的成本 건축물을 지을 때 걸리는 최소 시간을 계수를 적용하여 계산합니다. - Mindestzeit für den Bau eines beliebigen Bauwerks.<br/>b in Ax + b, wobei x die Kosten des Objekts sind. - 建造に掛かる最小の時間。<br/>計算式はAx + bです。この時間はbであり、xは建造物のコストです。 - Minimalny czas do zbudowania dowolenj konstrukcji.&lt;br/&gt;b w Ax + b gdzie x jest kosztem obiektu + Mindestzeit für den Bau eines beliebigen Bauwerks.\nb in Ax + b, wobei x die Kosten des Objekts sind. + 建造に掛かる最小の時間。\n計算式はAx + bです。この時間はbであり、xは建造物のコストです。 + Minimalny czas do zbudowania dowolenj konstrukcji.\nb w Ax + b gdzie x jest kosztem obiektu + Минимальное время для возведения любой постройки.\nb в формуле Ax + b, где x - это цена объекта Building @@ -205,6 +209,7 @@ Bauwerk 建造 Budowanie + Возведение Create map markers @@ -213,6 +218,7 @@ Kartenmarkierungen erstellen マップマーカーを生成する Twórz znaczniki na mapie + Создавать маркера на карте Create map markers that look like terrain buildings when static fortifications are placed @@ -221,6 +227,7 @@ Erstellen von Kartenmarkierungen, die wie Gebäude im Gelände aussehen, wenn statische Befestigungen platziert werden 静的な建築物が配置されたときに地形の建物のように見えるマップマーカーを生成します Utwórz znaczniki mapy, które wyglądają jak obiekty terenu, gdy umieszczane są statyczne fortyfikacje + Создавать маркера от статических фортификаций как от зданий на карте Never @@ -245,6 +252,7 @@ Für, zum Erbauer, verbündete Einheiten. 設置者の友軍に Dla jednostek sojuszniczych wobec stawiającego + Для союзников For everyone @@ -274,7 +282,7 @@ Small (Green) - Малый (Зеленый) + Малый (зелёный) Małe (Zielone) Küçük (Yeşil) 小型 (グリーン) @@ -294,7 +302,7 @@ Medium (Green) - Средний (Зеленый) + Средний (зелёный) Średnie (Zielone) Orta (Yeşil) 中型 (グリーン) @@ -315,7 +323,7 @@ Big (Green) Duże (Zielone) - Большой (Зеленый) + Большой (зелёный) Büyük (Yeşil) 大型 (グリーン) Groß (Grün) diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index 5628d3d197..524e456899 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -36,7 +36,7 @@ Pouze letadla Somente Aeronave Avions seulement - Только для летательных аппаратов + Только авиация 航空機のみ Tylko samoloty 비행기에만 적용 @@ -65,7 +65,7 @@ G-Force Coefficient Współczynnk przeciążenia Coefficient de force gravitationnelle - Коэффициент перегрузки + Коэф. перегрузки G 効果係数 G-Kuvvet Katsayısı Coeficiente de Fuerza G diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 062238106b..2fb6c6e54b 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -39,7 +39,7 @@ Mostrar efectos de las gafas en tercera persona Zobrazit efekt brýlí v třetí osobě Effets des lunettes à la 3ème personne - Отображать эффект очков от третьего лица + Вкл. эффект очков от 3-го лица Szemüveg-effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa @@ -144,7 +144,7 @@ Mostra a auto-interação de limpar os óculos Mostrar limpiar gafas en menú de auto-interacción Kendi etkileşim menüsün de gözlük camlarını silmeyi göster - Показывать Протереть очки в меню взаимодействия с собой + Показывать действие Протереть очки 자기상호작용에 고글 닦기 선택 보이기 diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index fb0b144f5d..3e78b0eab1 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -195,7 +195,7 @@ M127A1 Bengala (Bianco) Flara ręczna sygnałowa M127A1 (biała) M127A1 Sinalizador (Branco) - M127A1 Фальшфейер (Белый) + M127A1 Фальшфейер (белый) Bengala M127A1 (Blanca) M127A1 Feu à main (Blanc) M127A1 信号弾 (白) @@ -212,7 +212,7 @@ M127A1 Bengala (Rosso) Flara ręczna sygnałowa M127A1 (czerwona) M127A1 Sinalizador (Vermelho) - M127A1 Фальшфейер (Красный) + M127A1 Фальшфейер (красный) Bengala M127A1 (Roja) M127A1 Feu à main (Rouge) M127A1 信号弾 (赤) @@ -229,7 +229,7 @@ M127A1 Bengala (Verde) Flara ręczna sygnałowa M127A1 (zielona) M127A1 Sinalizador (Verde) - M127A1 Фальшфейер (Зелёный) + M127A1 Фальшфейер (зелёный) Bengala M127A1 (Verde) M127A1 Feu à main (Vert) M127A1 信号弾 (緑) @@ -246,7 +246,7 @@ M127A1 Bengala (Giallo) Flara ręczna sygnałowa M127A1 (żółta) M127A1 Sinalizador (Amarelo) - M127A1 Фальшфейер (Жёлтый) + M127A1 Фальшфейер (жёлтый) Bengala M127A1 (Amarilla) M127A1 Feu à main (Jaune) M127A1 信号弾 (黄) @@ -263,7 +263,7 @@ Bengala (Bianco) Flara ręczna (biała) Sinalizador de Mão (Branco) - Фальшфейер (Белый) + Фальшфейер (белый) Bengala (Blanca) Feu à main (Blanc) 白の手持ち式信号弾 @@ -280,7 +280,7 @@ Bengala (Rosso) Flara ręczna (czerwona) Sinalizador de Mão (Vermelho) - Фальшфейер (Красный) + Фальшфейер (красный) Bengala (Roja) Feu à main (Rouge) 赤の手持ち式信号弾 @@ -297,7 +297,7 @@ Bengala (Verde) Flara ręczna (zielona) Sinalizador de Mão (Verde) - Фальшфейер (Зелёный) + Фальшфейер (зелёный) Bengala (Verde) Feu à main (Vert) 緑の手持ち式信号弾 @@ -314,7 +314,7 @@ Bengala (Giallo) Flara ręczna (żółta) Sinalizador de Mão (Amarelo) - Фальшфейер (Жёлтый) + Фальшфейер (жёлтый) Bengala (Amarilla) Feu à main (Jaune) 黄の手持ち式信号弾 @@ -332,7 +332,7 @@ M127A1 (Bianco) M127A1 (biała) M127A1 (Branco) - M127A1 (Белый) + M127A1 (белый) M127A1 (Blanca) M127A1 (白) M127A1 (하양) @@ -349,7 +349,7 @@ M127A1 (Rosso) M127A1 (czerwona) M127A1 (Vermelho) - M127A1 (Красный) + M127A1 (красный) M127A1 (Roja) M127A1 (赤) M127A1 (빨강) @@ -366,7 +366,7 @@ M127A1 (Verde) M127A1 (zielona) M127A1 (Verde) - M127A1 (Зелёный) + M127A1 (зелёный) M127A1 (Verde) M127A1 (緑) M127A1 (초록) @@ -383,7 +383,7 @@ M127A1 (Giallo) M127A1 (żółta) M127A1 (Amarelo) - M127A1 (Жёлтый) + M127A1 (жёлтый) M127A1 (Amarilla) M127A1 (黄) M127A1 (노랑) @@ -394,7 +394,7 @@ AN-M14 Incendiary Grenade AN-M14 Brandsatz - AN-M14 Зажигательная граната + AN-M14 зажигательная граната AN-M14 焼夷手榴弾 Granat zapalający AN-M14 AN-M14 소이 수류탄 @@ -461,7 +461,7 @@ M583 Flara oświetlająca (Biała) M583 Granata con bengala (Bianca) M583 照明弾 (白) - M583 Осветит. ракета (Белая) + M583 Осветит. ракета (белая) M583 Sinalizador de Iluminação (Branco) M583 照明彈(白色) M583 照明弹(白色) @@ -477,7 +477,7 @@ M662 Flara oświetlająca (Czerwona) M662 Granata con bengala (Rossa) M662 照明弾 (赤) - M662 Осветит. ракета (Красная) + M662 Осветит. ракета (красная) M662 Sinalizador de Iluminação (Vermelho) M662 照明彈(紅色) M662 照明弹(红色) @@ -493,7 +493,7 @@ M661 Flara oświetlająca (Zielona) M661 Granata con bengala (Verde) M661 照明弾 (緑) - M661 Осветит. ракета (Зеленая) + M661 Осветит. ракета (зелёная) M661 Sinalizador de Iluminação (Verde) M661 照明彈(綠色) M661 照明弹(绿色) @@ -537,7 +537,7 @@ Explosive Satchel (Throwable) - Ранец со взрывчаткой (Метательный) + Ранец со взрывчаткой (метательный) Charge en sacoche (lançable) 梱包爆薬 (投てき仕様) Carga de mochila explosiva (Lanzable) @@ -570,7 +570,7 @@ Explosive Charge (Throwable) - Заряд со взрывчаткой (Метательный) + Заряд со взрывчаткой (метательный) Charge explosive (lançable) 爆薬ブロック (投てき仕様) Carga explosiva (Lanzable) diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index ae87dda329..324229d6e3 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -80,7 +80,7 @@ Enable Weapon Swap Aktywuj wymianę broni - Включить обмен оружием + Вкл. обмен оружием Activer l'échange d'arme 武器交換を有効化 Silah Değiştirmeyi Etkinleştir diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 80e487f0dd..1aeac049ba 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -123,7 +123,7 @@ Disable ear ringing Désactiver les bourdonnements Desactivar zumbido de oídos - Отключить звон в ушах + Откл. звон в ушах Knalltrauma deaktivieren Vypnout pískání v uších Wyłącz dzwonienie w uszach diff --git a/addons/hitreactions/stringtable.xml b/addons/hitreactions/stringtable.xml index 85cba14c8b..3b8018a936 100644 --- a/addons/hitreactions/stringtable.xml +++ b/addons/hitreactions/stringtable.xml @@ -10,7 +10,7 @@ 넘어질 때 발생하는 최소 피해량 Mindestschaden, um Sturz auszulösen Minimalne obrażenie, żeby aktywować spadanie - Минимальный урон для активации падения + Мин. урон для активации падения Dano Mínimo para ativar queda Dommages minimaux pour faire tomber le joueur Minimum škody pro aktivaci spadnutí diff --git a/addons/hunterkiller/stringtable.xml b/addons/hunterkiller/stringtable.xml index 913ad32852..5426ee07ae 100644 --- a/addons/hunterkiller/stringtable.xml +++ b/addons/hunterkiller/stringtable.xml @@ -4,22 +4,27 @@ Hunter Killer 헌터 킬러 + Hunter Killer Override 오버라이드 + Указать Force other turret to slew onto your viewpoint 다른 포탑이 시야에 오도록 강제합니다. + Повернуть другую турель туда, куда смотрит твоя Observe 관측 + Наблюдать Slew your turret onto other turret's viewpoint 포탑을 다른 포탑의 시야에 놓습니다. + Повернуть свою турель туда, куда смотрит другая diff --git a/addons/huntir/stringtable.xml b/addons/huntir/stringtable.xml index c24f36842f..e68f53f264 100644 --- a/addons/huntir/stringtable.xml +++ b/addons/huntir/stringtable.xml @@ -210,7 +210,7 @@ Hoch/Runter - Neige Kamera Up/Down - Subir/bajar camara Nahoru/Dolu - Zvýšít/snížit úhel pohledu kamery - Вверх/Вниз - Поднять/Опустить камеру + Вверх/Вниз - Поднять/опустить камеру Up/Down - Alza/abbassa telecamera Góra/Dół - obrót kamery w pionie Haut/Bas - Monter/descendre la caméra diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index b0395c89c0..a253b1c350 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -245,7 +245,7 @@ Wykonuj akcje po puszczeniu klawisza menu Provést akci při pustění klávesy menu Action au relâchement des touches - Выполнять действие при отпускании кнопки взаимодействия + Выполнять при отпускании кнопки меню Realizar la acción al soltar la tecla menu Execute a ação quando soltar a tecla de menu Cselekvés végrehajtása a menügomb elengedésekor @@ -492,7 +492,7 @@ Consolidate single child actions - Объединять с единственным дочерним действием + Объединять ед. дочерные действия サブ動作を統合 Consolidar acciones hijo únicas Combiner les sous-actions uniques diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 91e059b8b4..94968e7b5d 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -194,7 +194,7 @@ Otwórz / Zamknij drzwi Otevřít / Zavřít dveře Ouvrir/Fermer la porte - Открыть / Закрыть двери + Открыть/закрыть двери Ajtó nyitása / zárása Abrir / Fechar Porta Apri / Chiudi la porta @@ -597,7 +597,7 @@ Vert Zielonych Zelený - Зеленый + Зелёный Verde Verde Zöld @@ -1037,7 +1037,7 @@ ¿Deben tener permitido los jugadores el uso del menu de gestión de equipos? Por defecto: Si Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja Mohou hráči použít menu správy týmu? Výchozí: Ano - Разрешить ли игрокам использовать меню управления группами? По-умолчани: Да + Разрешить ли игрокам использовать меню управления группами? По умолчанию: Да Permet aux joueurs d'utiliser la gestion d'équipe. Valeur par défaut : activé. A játékosoknak engedélyezve legyen a csapatkezelő menü? Alapértelmezett: Igen Devem os jogadores ter permissão de usar o menu de gestão de equipes? Padrão: Sim @@ -1057,7 +1057,7 @@ 关闭负面评价 부정행위 가중치 사용 안함 Wyłącz negatywną ocenę - Отключить отрицательный рейтинг + Откл. отрицательный рейтинг Desativar avaliação negativa Désactiver la notation négative Vypnout negativní hodnocení @@ -1072,7 +1072,7 @@ 玩家是否会收到负面评价? 当本功能开启时玩家只会接收到正面评价,所以当玩家做出击杀友军 AI、毁坏友军装备或杀害小队伙伴都不会收到负面评价。 플레이어의 부정행위 가중치를 계산합니까? 활성화된 플레이어는 낮은 부정행위 가중치를 가질 때, 아군의 장비나 병력을 사격해도 아군 AI의 사격을 받지 않습니다. Czy powinni gracze otrzymywać negatywną ocenę? Kiedy aktywowani gracze otrzymuję wyłącznie pozytywną ocenę, która zapobiega ognia przyjaznego SI podczas niszczenia przyjaznego wyposażenia lub zabijaniu członków drużyny. - Должны ли игроки получать отрицательный рейтинг? Когда включено, игроки получают только положительный рейтинг, что предотвращает дружественный огонь от ИИ при уничтожении дружественного оборудования или убийстве членов команды. + Должны ли игроки получать отрицательный рейтинг?\nКогда включено, игроки получают только положительный рейтинг, что предотвращает дружественный огонь от ИИ при уничтожении дружественного оборудования или убийстве членов команды. Jogadores devem receber uma avaliação negativa? Quando ativado, os jogadores estão recebendo avaliações positivas, prevenindo que IA amigável atire quando destruir algum equipamento aliado ou matar membros de equipe. Définit si les joueurs peuvent recevoir une note négative. Si l'option est activée, les joueurs obtiennent des notes positives exclusivement.\nCela permet d'éviter que les unités IA ne fassent du tir ami lorsque des joueurs détruisent de l'équipement allié, ou tuent des membres de l'équipe. Měli by hráči obdržet negativní hodnocení? Pokud ne, hráči obdrží pouze pozitivní hodnocení, což zabrání přátelské AI střílet na hráče pokud hráči ničí přátelské vybavení nebo zabíjejí vlastní tým. diff --git a/addons/killtracker/stringtable.xml b/addons/killtracker/stringtable.xml index 3edf073469..0c89957719 100644 --- a/addons/killtracker/stringtable.xml +++ b/addons/killtracker/stringtable.xml @@ -8,6 +8,7 @@ ACE Licznik Zabójstw ACE 击杀事件 ACE 사살 이벤트 + ACE Счётчик убийств Total Kills: diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index 846a3d168a..0f681a4f54 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -91,6 +91,7 @@ Rysuj Laser na Mapie 맵에 레이저 그리기 在地图上绘制激光 + Отображать лазер на карте Active laser designator's position will be drawn on the map @@ -98,6 +99,7 @@ Pozycja aktywnego wskaźnika laserowego będzie rysowana na mapie. 지도에 능동 레이저 표시기의 위치가 그려집니다. 激活的激光指示器本身及其标记的点会在地图上显示 + Точка, куда светит активный лазер, будет указана на карте diff --git a/addons/logistics_rope/stringtable.xml b/addons/logistics_rope/stringtable.xml index bacea70fde..8805db7315 100644 --- a/addons/logistics_rope/stringtable.xml +++ b/addons/logistics_rope/stringtable.xml @@ -5,7 +5,7 @@ A twisted braid of fibers. Usually used for rappelling or towing. 組み紐されたロープ。ラペリングやけん引に使用されます。 Une corde en fibres torsadées. Généralement utilisée pour la descente en rappel ou le remorquage. - Витой канат. ООбычно используется для спуска или буксирования. + Витой канат. Обычно используется для спуска или буксирования. Ein verdrehtes Geflecht aus Fasern. Wird normalerweise zum Abseilen oder Abschleppen verwendet. Lina skręcona z włókien. Zwykle używana do zjazdów lub holowania. 编织绳。通常用于索降和牵引拖曳。 @@ -16,7 +16,7 @@ 3.2 Meter Seil Corde de 3,2 mètres Lina, długość 3,2 m. - Канат 3.2 метров + Канат 3.2 метра Corda (3.2m) Corda da 3.2 metri Lano 3.2 metrů diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 015f1f9fcf..a6c5fb9342 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -10,7 +10,7 @@ 弾倉詰め替え 탄약 채우기 Przepakowywanie magazynków - Перепаковка Магазинов + Перепаковка магазинов Preenchimento de Carregador Remplissage des chargeurs Přepáskování zásobníků @@ -193,6 +193,7 @@ 탄약 합치기 애니메이션 詰め替え時のアニメーション 整理动画 + Анимация перепаковки diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 43fdb3eeb8..9e168aba89 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -234,7 +234,7 @@ Activar Blue Force Tracking. Por defecto: No Active le SFA. Valeur par défaut : désactivé. Blue Force követés engedélyezése. Alapértelmezett: Nem - Включает систему служения BFT. По-умолчанию: Нет + Включает систему служения BFT. По умолчанию: Нет Abilita Blue Force Tracking. Default: No ブルー フォース トラッキングを有効化します。標準: 無効 GPS 피아식별기 켭니다. 기본설정: 아니요 diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index 03ffdbda8a..d701baf3c1 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -147,7 +147,7 @@ Lead Default Color Cor padrão para o líder Domyślny kolor lidera - Лид. цвет по-умолчанию + Лид. цвет по умолчанию Výchozí barva velitele Colore Default Caposquadra Gruppenführer-Standardfarbe @@ -177,7 +177,7 @@ Default Color Cor padrão Kolor domyślny - Цвет по-умолчанию + Цвет по умолчанию Výchozí barva Colore Default Standardfarbe diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml index d56bb8ea5e..afd85b5eca 100644 --- a/addons/marker_flags/stringtable.xml +++ b/addons/marker_flags/stringtable.xml @@ -8,6 +8,7 @@ 旗マーカー 마킹용 깃발 标记旗 + Флажки Place Anywhere @@ -16,6 +17,7 @@ Umieść w dowolnym miejscu 아무 곳에나 배치 随意放置 + Размещать где угодно Place marker flag anywhere regardless of surface. @@ -23,18 +25,21 @@ Umieść chorągiewkę w dowolnym miejscu, niezależnie od powierzchni. 지면에 상관없이 아무곳에서나 마킹용 깃발을 배치합니다. 不管地形表面是什么都可以放标记旗 + Размещать флажки где угодно вне зависимости от поверхности. Place Marker Flag Markierungsfahne platzieren Postaw chorągiewkę 마킹용 깃발 꽂기 + Поставить флажок Adjust height Höhe anpassen Dostosuj wysokość 높이 조정 + Регулировать высоту Cancel @@ -76,6 +81,7 @@ 旗マーカー (白) 마킹용 깃발(하양) 标记旗(白) + Флажок (белый) Marker Flag (Black) @@ -84,6 +90,7 @@ 旗マーカー (黒) 마킹용 깃발(검정) 标记旗(黑) + Флажок (чёрный) Marker Flag (Red) @@ -92,6 +99,7 @@ 旗マーカー (赤) 마킹용 깃발(빨강) 标记旗(红) + Флажок (красный) Marker Flag (Green) @@ -100,6 +108,7 @@ 旗マーカー (緑) 마킹용 깃발(초록) 标记旗(绿) + Флажок (зелёный) Marker Flag (Blue) @@ -108,6 +117,7 @@ 旗マーカー (青) 마킹용 깃발(파랑) 标记旗(蓝) + Флажок (синий) Marker Flag (Yellow) @@ -116,6 +126,7 @@ 旗マーカー (黄) 마킹용 깃발(노랑) 标记旗(黄) + Флажок (жёлтый) Marker Flag (Orange) @@ -124,6 +135,7 @@ 旗マーカー (橙) 마킹용 깃발(주황) 标记旗(橙) + Флажок (оранжевый) Marker Flag (Purple) @@ -132,6 +144,7 @@ 旗マーカー (紫) 마킹용 깃발(보라) 标记旗(紫) + Флажок (фиолетовый) diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 9effc9cf30..228b64a0be 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -184,7 +184,7 @@ Allow Timestamps - Включить отображение времени на метках + Вкл. отображение времени на метках Permettre l'horodatage タイムスタンプ許可 Permitir marcas de tiempo diff --git a/addons/medical_engine/stringtable.xml b/addons/medical_engine/stringtable.xml index 5bec5e5a70..81e2ae8450 100644 --- a/addons/medical_engine/stringtable.xml +++ b/addons/medical_engine/stringtable.xml @@ -3,7 +3,7 @@ Enable Vehicle Crash Damage - Включить урон при аварии в транспортном средстве. + Вкл. урон при аварии в транспорте Activar daño por accidente de vehículo Blessures de collision (véhicules) Włącz obrażenia od kolizji pojazdu diff --git a/addons/medical_feedback/stringtable.xml b/addons/medical_feedback/stringtable.xml index d681f67b3a..beafef90f3 100644 --- a/addons/medical_feedback/stringtable.xml +++ b/addons/medical_feedback/stringtable.xml @@ -183,7 +183,7 @@ Enable Screams - Включить крики + Вкл. крики Aktywuj wrzaski Activar gritos Schreie aktivieren @@ -217,7 +217,7 @@ Enable Fracture/Tourniquet/Splint Indicators - Включить индикаторы переломов/жгутов/шин + Вкл. индикаторы переломов/жгутов/шин 骨折/止血帯の表記を有効化 Indicateurs de fractures/garrots/attelles Fraktur-/Tourniquet-/Schienen-Indikatoren aktivieren diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index 73afb1160e..06e053aa79 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -1231,6 +1231,7 @@ Pokaż utratę krwi 失血量の表示 显示失血量 + Показывать кровопотерю Show qualitative blood loss in the injury list. @@ -1239,6 +1240,7 @@ Pokaż jakościową utratę krwi na liście ran. 負傷リストに段階的な失血量を表示します。 在负伤列表中显示失血阶段 + Показывать тяжесть кровопотери в списке ранений. diff --git a/addons/medical_status/stringtable.xml b/addons/medical_status/stringtable.xml index ed6374c146..401f66b31d 100644 --- a/addons/medical_status/stringtable.xml +++ b/addons/medical_status/stringtable.xml @@ -19,7 +19,7 @@ Bleeding Coefficient - Коэффициент кровопотери + Коэф. кровопотери Mnożnik krwawienia Coeficiente de sangrado Verblutungsmultiplikator @@ -53,7 +53,7 @@ Pain Coefficient - Коэффициент боли + Коэф. боли Mnożnik bólu Coeficiente de dolor Schmerzmultiplikator diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 5d1dbf53c1..16856e3db2 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -156,7 +156,7 @@ Coefficient de réouverture des plaies Wundwiederöffnungskoeffizient Koeficient opětovného otevření rány - Коэффициент повторного открытия раны + Коэф. повторного открытия раны Współczynnik ponownego otwierania ran 再開放係数 Yara Yeniden Açılma Katsayısı @@ -924,7 +924,7 @@ Enable Litter - Включить мусор + Вкл. мусор Aktywuj odpadki Activar restos médicos Abfälle aktivieren @@ -1100,7 +1100,7 @@ CPR Success Chance Minimum RCP - Chance minimale de réussite - Минимальные шансы успеха СЛР + Мин. шансы успеха СЛР Szansa na powodzenie CPR - Minimum 心肺蘇生の最低成功確率 HLW Minimale Erfolgschance @@ -1110,7 +1110,7 @@ CPR Success Chance Maximum RCP - Chance maximale de réussite - Максимальные шансы успеха СЛР + Макс. шансы успеха СЛР Szansa na powodzenie CPR - Maksimum 心肺蘇生の最高成功確率 HLW Maximale Erfolgschance @@ -3960,6 +3960,7 @@ %1 reagiert nicht, schnappt nach Luft und verkrampft %1没有反应,微软的喘着气和抽搐 %1 은 반응이 없고, 얕은 헐떡임과 경련증세를 보입니다 + %1 не реагирует на раздражители, поверхностно дышит, в конвульсиях %1 is not responsive, motionless and cold @@ -3969,6 +3970,7 @@ %1 reagiert nicht, ist regungslos und kalt %1没有反应,一动不动,身体冰凉 %1 은 반응이 없고, 움직임이 없으며 차갑습니다 + %1 не реагирует на раздражители, не шевелится и холодный You checked %1 diff --git a/addons/missionmodules/stringtable.xml b/addons/missionmodules/stringtable.xml index ffbac0902f..0a33a92182 100644 --- a/addons/missionmodules/stringtable.xml +++ b/addons/missionmodules/stringtable.xml @@ -10,7 +10,7 @@ ACE Módulo de missões ACE modules de mission ACE küldetési modulok - Модули миссий ACE + ACE Модули миссий Moduli Missione ACE ACE ミッション モジュール ACE 미션 모듈 @@ -27,7 +27,7 @@ Sons ambientes Sons d'ambiance Ambiens hangok - Звук окружения + Звуки окружения Souni Ambientali 環境音 환경 효과음 @@ -77,7 +77,7 @@ Distância mínima Distance minimale Minimális távolság - Минимальная дистанция + Мин. дистанция Distanza Minimale 最低距離 최소 거리 @@ -110,7 +110,7 @@ Distância máxima Distance maximale Maximális távolság - Максимальная дистанция + Макс. дистанция Distanza Massima 最大距離 최대 거리 @@ -143,7 +143,7 @@ Atraso mínimo Délai minimal Minimum késleltetés - Минимальная задержка + Мин. задержка Pausa Minima 最低遅延 최소 지연 diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index 6d3754f629..464d654346 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -225,7 +225,7 @@ Utiliser la gestion des munitions Utilizza la gestione delle munizioni Usar manejo de munição - Использовать манипуляции с боеприпасами + Манипуляции с боеприпасами 弾薬の取り扱い 탄약 관리 활성화 使用手动弹药装卸 @@ -240,7 +240,7 @@ Enlève les chargeurs de mortier, ce qui oblige le tireur ou le servant à charger les obus manuellement. N'affecte pas les mortiers IA. Toglie i proiettili dal mortaio. I colpi singoli devono essere caricati dall'operatore. Non cambia quado l'IA spara. Elimina os carregadores do morteiro, requerendo que o atirador ou carregador utilize de forma individual a munição. Não afeta os morteiros controlados pela IA. - Удаляет артиллерийские магазины, требует загрузку отдельных снарядов стрелком или заряжащим. Не влияет на артиллерию ИИ. + Удаляет артиллерийские магазины, требует загрузку отдельных снарядов стрелком или заряжающим. Не влияет на артиллерию ИИ. 迫撃砲から弾薬を除去します。射手か装填手により予め装填されている必要があります。AI 迫撃砲へ影響を与えません。 박격포 탄창을 제거합니다, 사수나 장전수가 개별적으로 탄환을 넣어줘야 합니다. 인공지능은 영향을 받지 않습니다. 开启此功能时。迫击炮的弹药需由炮手与装填手共同合作来进行装填。此功能并不影响由 AI 射击的迫击炮 diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 5c6f7e1e5f..1686496fab 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -78,7 +78,7 @@ Mostrar os nomes dos jogadores e definir sua ativação. Padrão: Ativado Affiche le nom des joueurs et définit leur activation. Valeur par défaut : activé. Mutassa a játékosok nevét és kezelje az aktivációjukat. Alapértelmezett: Engedélyezve - Показывать имена игроков и установить их активацию. По-умолчанию: Включено + Показывать имена игроков и установить их активацию. По умолчанию: Включено Mostra nomi giocatori ed imposta la loro attivazione. Default: Abilitato プレイヤ名の表示と設定を有効化します。標準: 有効 플레이어 이름의 표시와 설정을 활성화합니다. 기본설정: 활성화 @@ -196,7 +196,7 @@ Mostrar informações de tripulação ou por padrão permitir a escolha dos jogadores. Padrão: Não forçar. Affiche les informations sur l'équipage des véhicules. A legénységi adatok mutatása, alapértelmezett esetben a játékos által kiválasztható. Alapértelmezett: Nincs felülbírálás - Показывать информацию об экипаже техники, или по-умолчанию, позволяет игрокам выбрать свою настройку. По-умолчанию: Не обязывать + Показывать информацию об экипаже техники, или по умолчанию, позволяет игрокам выбрать свою настройку. По умолчанию: Не обязывать Mostra informazioni sull'equipaggio del veicolo, oppure consenti di default di lasciare che siano i giocatori a scegliere. Default: Non Forzare 車両の乗員を表示します。標準ではプレイヤ各々が選べられます。標準: 強制しない 승무원 정보를 표시하거나 플레이어가 직접 고르게 놔둡니다. 기본설정: 강제하지 않음 @@ -230,7 +230,7 @@ Mostra o nome e patente para unidades IA aliadas? Padrão: Não forçar Affiche le nom et le grade des IA alliées. Mutassa-e a szövetséges AI egységek nevét és rangját? Alapértelmezett: Nincs felülbírálás - Показывать имена и звания дружественных ботов? По-умолчанию: Не обязывать + Показывать имена и звания дружественных ботов? По умолчанию: Не обязывать Mostra etichette nomi ed etichette gradi per unità IA alleate? Default: Non forzare 友軍の AI にも名前と階級を表示しますか? 標準: 強制しない 아군 인공지능의 계급을 표시합니까? 기본설정: 강제하지 않음 @@ -262,7 +262,7 @@ Zeige Maus-Spielernamen für Fahrzeugkommandanten (nur wenn der Client Namensanzeigen aktiviert hat). Standard: Nein Zobrazit jmenovky pro velitele vozidla (pouze pokud má klient jmenovky povolené). Výchozí: Ne Mostrar o nome no cursor para o comandante do veículo (somente se o cliente tiver etiquetas de nomes ativada). Padrão: Não - Показывать имя командира техники (только, если клиент включил отображение имен). По-умолчанию: Нет + Показывать имя командира техники (только если клиент включил отображение имен). По умолчанию: Нет Affiche les noms pour les commandants de véhicule (uniquement si le client a activé l'affichage des noms). Mostra il nome sul cursore per il comandante del veicolo (solo se il client ha le Etichette Nomi attive) Default: No 車長の名札をカーソルを当てて表示します (クライアント側で名札を有効化する必要があります) 標準: 無効 @@ -297,7 +297,7 @@ Efeito de ondas sonoras acima das cabeças dos jogadores que falam depois mantendo pressionada a tecla PTT. Esta opção funciona com TFAR e ACRE2. Effet d'onde sonore, qui s'anime au-dessus de la tête des joueurs lorsqu'ils parlent en maintenant la touche PTT enfoncée. Cette option fonctionne avec TFAR et ACRE2. Hanghullám-effekt a beszélő játékosok feje felett a PTT-gomb lenyomásakor. Ez a beállítás TFAR és ACRE2 alatt működik. - Эффект звуковой волны над головами говорящих игроков при удерживании кнопки push-to-talk. Эта опация работает также с рациями TFAR и ACRE2. + Эффект звуковой волны над головами говорящих игроков при удерживании кнопки push-to-talk. Эта опция работает также с рациями TFAR и ACRE2. 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 で動作します。 플레이어가 눌러서 말할 시 머리위에 음파효과를 적용합니다. 이 옵션은 TFAR과 ACRE2가 있을 때만 적용됩니다. @@ -365,7 +365,7 @@ Distância em metros que os nomes dos jogadores são mostrados. Padrão: 5 Distance au delà de laquelle les noms des joueurs ne sont plus affichés. Valeur par défaut : 5 mètres. Méterben megadott érték a játékosok nevének mutatására. Alapértelmezett: 5 - Дистанция в метрах, на которой отображаются имена игроков. По-умолчанию: 5 + Дистанция в метрах, на которой отображаются имена игроков. По умолчанию: 5 Distanza in metri a cui sono visibili i nomi giocatori. Default: 5 プレイヤの周り何メートルまで名札を表示できます。標準: 5 플레이어 이름이 표시되는 미터. 기본설정: 5 @@ -527,7 +527,7 @@ Nametag Ambient Brightness Coefficient - Коэффициент окружающего освещения для меток игроков + Коэф. освещения для меток игроков 環境名札明るさ係数 Coefficient de luminosité ambiante Spielernamen Umgebungshelligkeitskoeffizient diff --git a/addons/nlaw/stringtable.xml b/addons/nlaw/stringtable.xml index 8181b4e0fe..93bd236237 100644 --- a/addons/nlaw/stringtable.xml +++ b/addons/nlaw/stringtable.xml @@ -10,7 +10,7 @@ 次世代輕型反坦克導彈發射器追蹤目標 (按住) Śledzenie Celu NLAW (Przytrzymaj) NLAW 목표 추적 (누름유지) - NLAW наведение на цель (Удерживать) + NLAW наведение на цель (удерживать) NLAW Rastrear Alvo (Segurar) NLAW suivre la cible (maintenir) NLAW sledování cíle (držet) diff --git a/addons/noradio/stringtable.xml b/addons/noradio/stringtable.xml index 6da884d07a..d81a211365 100644 --- a/addons/noradio/stringtable.xml +++ b/addons/noradio/stringtable.xml @@ -8,6 +8,7 @@ 음소거 Brak Radia 無線無し + Нет рации Mute Player diff --git a/addons/novehicleclanlogo/stringtable.xml b/addons/novehicleclanlogo/stringtable.xml index bfd7fd347e..2e7eb1721e 100644 --- a/addons/novehicleclanlogo/stringtable.xml +++ b/addons/novehicleclanlogo/stringtable.xml @@ -5,11 +5,13 @@ Remove clan logo from vehicles Usuń logo klanu z pojazdów 차량에서 클랜 로고 제거 + Убрать логотип кланов с техники Prevents clan logo from being displayed on vehicles controlled by players. Zapobiega wyświetlaniu logo klanu na pojazdach kontrolowanych przez graczy. 플레이어가 조종하는 차량에 클랜 로고가 표시되지 않도록 합니다. + Не отображать логотипы кланов на технике контроллируемой игроками. diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index e804411504..cdda474cdc 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -94,7 +94,7 @@ Pokazuj wiadomości ACE w menu głównym Afficher les nouveautés dans le menu principal Hírek mutatása a főmenüben - Показывать новости в Главном Меню + Показывать новости в главном меню Zobrazit zprávy v hlavním menu Mostra News nel Menù Princinpale メイン画面にニュースを表示します diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index fe0df759d7..e763f56442 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -51,7 +51,7 @@ Heating Coefficient 過熱係数 Coefficient de surchauffe - Коэффициент нагрева + Коэф. нагрева Erhitzungs-Koeffizient Współczynnik nagrzewania 过热系数 @@ -74,6 +74,7 @@ Abkühlungskoeffizienten Współczynnik chłodzenia 冷却係数 + Коэф. остывания Coefficient for how quickly a weapon cools down.\nHigher value increases cooling speed. @@ -82,6 +83,7 @@ Koeffizient, der angibt, wie schnell eine Waffe abkühlt.\nEin höherer Wert erhöht die Abkühlgeschwindigkeit. Współczynnik szybkości chłodzenia broni.\nWiększa wartość zwiększa szybkość chłodzenia. 武器の冷却速度の係数。\n値を大きくすると冷却速度が速くなります。 + Коэффициент скорости остывания орудия.\nЧем больше значение, тем быстрее остывает. Suppressor Coefficient @@ -90,6 +92,7 @@ Schalldämpfer-Koeffizient Współczynnik tłumika サプレッサー係数 + Коэф. глушителя Coefficient for how much additional heat is added from having a suppressor attached.\nHigher value increases heat, 0 means no additional heat from the suppressor. @@ -98,6 +101,7 @@ Koeffizient, der angibt, wie viel zusätzliche Wärme durch das Anbringen eines Schalldämpfers hinzugefügt wird. Ein höherer Wert erhöht die Menge an Wärme, 0 bedeutet, dass keine zusätzliche Wärme durch den Schalldämpfer hinzukommt. Współczynnik określający, ile dodatkowego ciepła jest dodawane z założonego tłumika.\nWyższa wartość zwiększa ciepło, 0 oznacza brak dodatkowego ciepła z tłumika. サプレッサーを取り付けることで追加される熱量の係数。\n値が大きいほど熱が増加し、0はサプレッサーからの追加の熱がないことを意味します。 + Коэффициент указывающий как много дополнительного тепла будет выделяться прикреплённым глушителем.\nБольшее значение увеличивает выделение тепла, 0 - отсутствие дополнительного тепла. Display Text on Jam @@ -231,7 +235,7 @@ Distance for Effects and Dispersion エフェクトと分散用距離 Distance des effets et de la dispersion - Дистанция для Еффектов и Разброса + Дистанция для эффектов и разброса Abstand für Effekte und Dispersion Odległość efektów i rozproszenia 效果和扩散距离 @@ -323,7 +327,7 @@ Unjam on Barrel Swap 銃身交換で弾詰まり解消 Désenrayer l'arme au changement de canon - Замена ствола устраняет заклинивание оружия. + Замена ствола устраняет клин оружия Usuń zacięcie przy wymianie lufy 更换枪管清除卡弹 총열 교환 시 기능고장 해결 @@ -375,7 +379,7 @@ Overheating Cookoff Coefficient 過熱誘爆係数 Coefficient de l'auto-inflammation - Коеффициент возгорания при перегреве + Коэф. возгорания при перегреве Selbstzündungskoeffizient bei Überhitzung Współczynnik samozapłonu 过热诱发系数 @@ -385,7 +389,7 @@ Coefficient for the heat required for cookoffs to occur.\nHigher values require more heat to cookoff.\nSet to 0 to disable cookoff. 過熱によって誘爆が起きる確立係数を設定します。\n高い値では誘爆までに必要な過熱量が増加し、0 で誘爆が無効化されます。 Coefficient modifiant la quantité de chaleur requise pour que les munitions s'auto-inflamment dans la chambre de l'arme.\nPlus la valeur est élevée, plus l'arme doit être chaude pour que les munitions s'auto-inflamment.\nDéfinir sur 0 pour désactiver l'auto-inflammation. - Коеффициент нагрева, при котором возникает возгорание. + Коэффициент нагрева, при котором возникает возгорание. Koeffizient für die zum Selbstzünden erforderliche Hitze.\nHöhere Werte erfordern mehr Hitze zum Selbstzünden.\nAuf 0 setzen, um das Selbstzünden zu deaktivieren. Współczynnik modyfikujący ilość ciepła wymaganego do samozapłonu amunicji w komorze broni.\nIm wyższa wartość, tym gorętsza musi być broń, aby amunicja uległa samozapłonowi\nUstaw 0, aby wyłączyć samozapłon. 发生热诱发的过热系数。\n数值越高,热诱发所需要的过热值越高。\n设置为0禁用热诱发。 diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index 27777fdf42..fec59f8ea3 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -8,6 +8,7 @@ 과중압력 Nadciśnienie 過圧 + Перегрузка Overpressure Distance Coefficient @@ -19,7 +20,7 @@ Coefficente Distanza Sovrapressione 超压影响距离系数 高壓影響距離係數 - Коэффициент избыточного давления + Коэф. избыточного давления Coeficiente de Distância de Sobrepressão Túlnyomás-távolság együtthatója Koeficient vzdálenosti přetlaku diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index df3987b6fc..e60926f26f 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -110,7 +110,7 @@ Poste de tir Mini-Spike (AC) Mini-Spike Odpalovač (AT) Wyrzutnia Mini-Spike (AT) - Mini-Spike Пусковое устройство (ПТРК) + Mini-Spike ПУ (ПТРК) Lança-mísseis Mini-Spike (AC) Mini-Spike rakétarendszer (Tankelhárító) Lanciatore Mini-Spike (AC) @@ -127,7 +127,7 @@ Poste de tir Mini-Spike (AA) Mini-Spike Odpalovač (AA) Wyrzutnia Mini-Spike (AA) - Mini-Spike Пусковое устройство (ПВО) + Mini-Spike ПУ (ЗРК) Lança-mísseis Mini-Spike (AA) Mini-Spike rakétarendszer (Repülő-elhárító) Lanciatore Mini-Spike (AA) @@ -195,7 +195,7 @@ M-ATV (CKM) M-ATV (HMG) M-ATV (HMG) - M-ATV (Пулемёт) + M-ATV (с пулемётом) M-ATV (HMG) M-ATV (nehézgéppuska) M-ATV (HMG) @@ -212,7 +212,7 @@ M-ATV (GMG) M-ATV (GMG) M-ATV (GMG) - M-ATV (Гранатомёт) + M-ATV (с гранатомётом) M-ATV (GMG) M-ATV (gránátgéppuska) M-ATV (GMG) @@ -365,7 +365,7 @@ HEMTT Transportowy HEMTT (valník) HEMTT Transport - HEMTT Транспортный + HEMTT (транспортный) HEMTT Transporte HEMTT szállítójármű HEMTT da trasporto @@ -382,7 +382,7 @@ HEMTT Transportowy (zakryty) HEMTT (valník-krytý) HEMTT Transport (bâché) - HEMTT Транспортный (крытый) + HEMTT (транспортный, крытый) HEMTT Transporte (coberto) HEMTT szállítójármű (ponyvás) HEMTT da trasporto (coperto) @@ -416,7 +416,7 @@ HEMTT Kontener HEMTT (skříňový) HEMTT Conteneur - HEMTT Контейнер + HEMTT (контейнер) HEMTT Contêiner HEMTT (konténer) HEMTT portacontainer @@ -433,7 +433,7 @@ HEMTT Medyczny HEMTT (zdravotnický) HEMTT Médical - HEMTT Медицинский + HEMTT (медицинский) HEMTT Médico HEMTT (egészségügyi) HEMTT Medico @@ -450,7 +450,7 @@ HEMTT Amunicyjny HEMTT (muniční) HEMTT Munitions - HEMTT Боеприпасы + HEMTT (боеприпасы) HEMTT Munições HEMTT (lőszerszállító) HEMTT di rifornimento munizioni @@ -467,7 +467,7 @@ HEMTT Cysterna HEMTT (cisterna) HEMTT Citerne - HEMTT Заправщик + HEMTT (топливозаправщик) HEMTT Combustível HEMTT (üzemanyag-szállító) HEMTT di rifornimento carburante @@ -484,7 +484,7 @@ HEMTT Naprawczy HEMTT (opravárenský) HEMTT Réparation - HEMTT Ремонтный + HEMTT (ремонтный) HEMTT Reparador HEMTT (szerelő-jármű) HEMTT Riparatore @@ -501,7 +501,7 @@ Fennek Fennek Fennek - Феннек + Fennek Fennek Fennek Fennek @@ -518,7 +518,7 @@ Fennek (CKM) Fennek (HMG) Fennek (HMG) - Феннек (Пулемёт) + Fennek (с пулемётом) Fennek (HMG) Fennek (nehézgéppuska) Fennek (HMG) @@ -535,7 +535,7 @@ Fennek (GMG) Fennek (GMG) Fennek (GMG) - Феннек (Гранатомёт) + Fennek (с гранатомётом) Fennek (GMG) Fennek (gránátgéppuska) Fennek (GMG) @@ -552,7 +552,7 @@ Leopard 2SG Leopard 2SG Leopard 2SG - Леопард 2SG + Leopard 2SG Leopard 2SG Leopard 2SG Leopard 2SG @@ -569,7 +569,7 @@ FV510 Warrior FV510 Warrior FV510 Warrior - FV510 Уорриор + FV510 Warrior FV510 Warrior FV510 Warrior FV510 Warrior @@ -603,7 +603,7 @@ KamAZ transportowy KamAZ (valník) KamAZ Transport - КамАЗ Транспортный + КамАЗ (транспортный) KamAZ Transporte KamAZ szállítójármű KamAZ da trasporto @@ -620,7 +620,7 @@ KamAZ Transportowy (zakryty) KamAZ (valník-krytý) KamAZ Transport (bâché) - КамАЗ Транспортный (крытый) + КамАЗ (транспортный, крытый) KamAZ Transporte (coberto) KamAZ szállítójármű (ponyvás) KamAZ da trasporto (coperto) @@ -637,7 +637,7 @@ KamAZ Amunicyjny KamAZ (muniční) KamAZ Munitions - КамАЗ Боеприпасы + КамАЗ (боеприпасы) KamAZ Munições KamAZ (lőszerszállító) KamAZ di rifornimento munizioni @@ -654,7 +654,7 @@ KamAZ cysterna KamAZ (cisterna) KamAZ Citerne - КамАЗ Заправщик + КамАЗ (топливозаправщик) KamAZ Combustível KamAZ (üzemanyag-szállító) KamAZ di rifornimento carburante @@ -671,7 +671,7 @@ KamAZ Naprawczy KamAZ (opravárenský) KamAZ Réparation - КамАЗ Ремонтный + КамАЗ (ремонтный) KamAZ Reparador KamAZ (szerelő-jármű) KamAZ riparatore @@ -688,7 +688,7 @@ KamAZ Medyczny KamAZ (zdravotnický) KamAZ Médical - КамАЗ Медицинский + КамАЗ (медицинский) KamAZ Médico KamAZ (egészségügyi) KamAZ Medico @@ -721,7 +721,7 @@ Karatel Karatel Karatel - Kаратель + Каратель Karatel Karatel Karatel @@ -738,7 +738,7 @@ Karatel (CKM) Karatel (HMG) Karatel (HMG) - Kаратель (Пулемёт) + Каратель (с пулемётом) Karatel (HMG) Karatel (nehézgéppuska) Karatel (HMG) @@ -755,7 +755,7 @@ Karatel (GMG) Karatel (GMG) Karatel (GMG) - Kаратель (Гранатомёт) + Каратель (с гранатомётом) Karatel (GMG) Karatel (gránátgéppuska) Karatel (GMG) @@ -857,7 +857,7 @@ Typhoon Transportowy KamAZ Typhoon (valník) Typhoon Transport - Тайфун Транспортный + Тайфун (транспортный) Typhoon Transporte Typhoon szállítójármű Typhoon da trasporto @@ -874,7 +874,7 @@ Typhoon Transportowy (przykryty) KamAZ Typhoon (valník-krytý) Typhoon Transport (bâché) - Тайфун Транспортный (крытый) + Тайфун (крытый) Typhoon Transporte (coberto) Typhoon szállítójármű (ponyvás) Typhoon da trasporto (coperto) @@ -891,7 +891,7 @@ Typhoon Urządzenie KamAZ Typhoon (zařízení) Typhoon Dispositif - Тайфун Устройство + Тайфун (устройство) Typhoon Dispositivo Typhoon (eszköz) Typhoon per dispositivo @@ -908,7 +908,7 @@ Typhoon Amunicyjny KamAZ Typhoon (muniční) Typhoon Munitions - Тайфун Боеприпасы + Тайфун (боеприпасы) Typhoon Munições Typhoon (lőszerszállító) Typhoon di rifornimento munizioni @@ -925,7 +925,7 @@ Typhoon Cysterna KamAZ Typhoon (cisterna) Typhoon Citerne - Тайфун Заправщик + Тайфун (топливозаправщик) Typhoon Combustível Typhoon (üzemanyag-szállító) Typhoon di rifornimento carburante @@ -942,7 +942,7 @@ Typhoon Naprawczy KamAZ Typhoon (opravárenský) Typhoon Réparation - Тайфун Ремонтный + Тайфун (ремонтный) Typhoon Reparador Typhoon (szerelő-jármű) Typhoon riparatore @@ -959,7 +959,7 @@ Typhoon Medyczny KamAZ Typhoon (zdravotnický) Typhoon Médical - Тайфун Медицинский + Тайфун (медицинский) Typhoon Médico Typhoon (egészségügyi) Typhoon medico @@ -976,7 +976,7 @@ RAH-66 Comanche RAH-66 Comanche RAH-66 Comanche - RAH-66 Команч + RAH-66 Comanche RAH-66 Comanche RAH-66 Comanche RAH-66 Comanche @@ -1061,7 +1061,7 @@ A-10D Thunderbolt II A-10D Thunderbolt II A-10D Thunderbolt II - A-10D Тандерболт II + A-10D Thunderbolt II A-10D Thunderbolt II A-10D Thunderbolt II A-10D Thunderbolt II @@ -1112,7 +1112,7 @@ AW101 Merlin AW101 Merlin AW101 Merlin - AW101 Мерлин + AW101 Merlin AW101 Merlin AW101 Merlin AW101 Merlin @@ -1129,7 +1129,7 @@ L-159 ALCA L-159 ALCA L-159 ALCA - L-159 Альбатрос + L-159 ALCA L-159 ALCA L-159 ALCA L-159 ALCA @@ -1146,7 +1146,7 @@ L-159 ALCA (CAS) L-159 ALCA (CAS) L-159 ALCA (CAS) - L-159 Альбатрос (CAS) + L-159 ALCA (поддержка) L-159 ALCA (CAS) L-159 ALCA (Légitámogató) L-159 ALCA (CAS) @@ -1163,8 +1163,8 @@ L-159 ALCA (AA) L-159 ALCA (AA) L-159 ALCA (AA) - L-159 Альбатрос (AA) - L-159 ALCA (ВВ) + L-159 ALCA (ВВ) + L-159 ALCA (AA) L-159 ALCA (Repülő-elhárító) L-159 ALCA (AA) L-159 ALCA (対空) @@ -1180,7 +1180,7 @@ JAS 39 Gripen JAS 39 Gripen JAS 39 Gripen - JAS 39 Грипен + JAS 39 Gripen JAS 39 Gripen JAS 39 Gripen JAS 39 グリペン @@ -1214,7 +1214,7 @@ Ka-60 Kasatka (bianco e nero) Ka-60 Kasatka (czarno-biały) Ka-60 Kasatka (preto e branco) - Ka-60 Касатка (белый и черный) + Ka-60 Касатка (чёрно-белый) Ka-60 Kasatka (blanco y negro) Ka-60 カサートカ (黒 & 白) Ka-60 카사트카 (검정 및 하양) @@ -1314,7 +1314,7 @@ Ładunek burzący M183 Demoliční nálož M183 M183 Charge de démolition - M183 Комплектный подрывной заряд + M183 комплектный подрывной заряд M183 Sacola de Demolição M183 romboló töltet M183 Demolition Charge Assembly @@ -1330,7 +1330,7 @@ M183 梱包爆薬 (投てき仕様) M183 Demolition Charge (Throwable) Carga de demolición M183 (Lanzable) - M183 Комплектный подрывной заряд (Бросаемый) + M183 комплектный подрывной заряд (бросаемый) Ładunek burzący M183 (Rzucany) M183 Geballte Sprengladung (Werfbar) M183 炸药包(可投掷) @@ -1359,7 +1359,7 @@ M112 爆薬ブロック (投てき仕様) M112 Demolition Charge (Throwable) Bloque de demolición M112 (Lanzable) - M112 подрывной заряд (Бросаемый) + M112 подрывной заряд (бросаемый) Ładunek burzący M112 (Rzucany) M112 Sprengladung (Werfbar) M112 塑性炸药(可投掷) @@ -1388,7 +1388,7 @@ Mini Granata V40 V40 小型手榴弾 Mini-granat V40 - V40 Мини-граната + V40 мини-граната Mini Granada V40 V40 Mini-Grenade V40迷你手榴彈 @@ -1405,7 +1405,7 @@ Granat dymny M83 (Biały) M83 Kouřový Granát (Bílý) M83 Grenade fumigène (Blanche) - M83 дымовая граната (Белый) + M83 дымовая граната (белый) M83 Granada de fumaça (Branca) M83 füstgránát (Fehér) M83 Granata fumogena (Bianco) @@ -1422,7 +1422,7 @@ Granat dymny M18 (Niebieski) M18 Kouřový Granát (Modrý) M18 Grenade fumigène (Bleue) - M18 дымовая граната (Синий) + M18 дымовая граната (синий) M18 Granada de fumaça (Azul) M18 füstgránát (Kék) M18 Granata fumogena (Blu) @@ -1439,7 +1439,7 @@ Granat dymny M18 (Zielony) M18 Kouřový Granát (Zelený) M18 Grenade fumigène (Verte) - M18 дымовая граната (Зелёный) + M18 дымовая граната (зелёный) M18 Granada de fumaça (Verde) M18 füstgránát (Zöld) M18 Granata fumogena (Verde) @@ -1456,7 +1456,7 @@ Granat dymny M18 (Pomarańczowy) M18 Kouřový Granát (Oranžový) M18 Grenade fumigène (Orange) - M18 дымовая граната (Оранжевый) + M18 дымовая граната (оранжевый) M18 Granada de fumaça (Laranja) M18 füstgránát (Narancssárga) M18 Granata fumogena (Arancione) @@ -1473,7 +1473,7 @@ Granat dymny M18 (Fioletowy) M18 Kouřový Granát (Fialový) M18 Grenade fumigène (Pourpre) - M18 дымовая граната (Пурпурный) + M18 дымовая граната (пурпурный) M18 Granada de fumaça (Roxa) M18 füstgránát (Lila) M18 Granata fumogena (Viola) @@ -1490,7 +1490,7 @@ Granat dymny M18 (Czerwony) M18 Kouřový Granát (Červený) M18 Grenade fumigène (Rouge) - M18 дымовая граната (Красный) + M18 дымовая граната (красный) M18 Granada de fumaça (Vermelha) M18 füstgránát (Piros) M18 Granata fumogena (Rosso) @@ -1507,7 +1507,7 @@ Granat dymny M18 (Żółty) M18 Kouřový Granát (Žlutý) M18 Grenade fumigène (Jaune) - M183 дымовая граната (Жёлтый) + M18 дымовая граната (жёлтый) M18 Granada de fumaça (Amarela) M18 füstgránát (Sárga) M18 Granata fumogena (Giallo) @@ -1541,7 +1541,7 @@ Mina przeciwpiechotna VS-50 VS-50 Protipěchotní mina VS-50 Mine AP - VS-50 Противопехотная мина + VS-50 противопехотная мина VS-50 Mina antipessoal VS-50 gyalogsági taposóakna VS-50 Mine antiuomo @@ -1558,7 +1558,7 @@ Mina przeciwpiechotna M26 M26 Protipěchotní mina M26 Mine AP bondissante - M26 Противопехотная мина + M26 противопехотная мина M26 Mina saltadora antipessoal M26 gyalogsági ugróakna M26 Mine saltanti antiuomo @@ -1575,7 +1575,7 @@ Mina przeciwpiechotna PMR-3 PMR-3 Protipěchotní mina (drát) PMR-3 Mine AP à traction - PMR-3 Противопехотная мина + PMR-3 противопехотная мина PMR-3 Mina antipessoal (armadilha) PMR-3 botlódrótos gyalogsági akna PMR-3 Mine antiuomo @@ -1610,7 +1610,7 @@ MP-443 Grach MP-443 Grach MP-443 Grach - МР-443 "Грач" + МР-443 Грач MP-443 Grach MP-443 Grach MP-433 グラッチ @@ -1661,7 +1661,7 @@ FNX-45 Tactical (Vert) FNX-45 Tactical (Zöld) FNX-45 Tactical (Verde) - FNX-45 Tactical (Зелёный) + FNX-45 Tactical (зелёный) FNX-45 Tactical (Verde) FNX-45 Tactical (Verde) FNX-45 Tactical (Yeşil) @@ -1746,7 +1746,7 @@ RPG-32 (Vert) RPG-32 (Zöld) RPG-32 (Verde) - РПГ-32 (Зелёный) + РПГ-32 (зелёный) RPG-32 (Verde) RPG-32 (Verde) RPG-32 (Yeşil) @@ -1763,7 +1763,7 @@ Mini-Spike (AA) Mini-Spike (Repülő-elhárító) Mini-Spike (AA) - Mini-Spike (ПВО) + Mini-Spike (ЗРК) Mini-Spike (AA) Mini-Spike (AA) ミニスパイク (対空) @@ -1780,7 +1780,7 @@ Mini-Spike (AC) Mini-Spike (Tankelhárító) Mini-Spike (AT) - Mini-Spike (ПТ) + Mini-Spike (ПТРК) Mini-Spike (AT) Mini-Spike (AT) ミニスパイク (対地) @@ -1809,7 +1809,7 @@ Metis-M (Brown) Metis-M (Braun) Metis-M (Brun) - Метис-М (Коричневый) + Метис-М (коричневый) "麥士蒂索人"-M型反坦克導彈(棕色) "麦士蒂索"-M(棕色) Metis-M (Marrone) @@ -1825,7 +1825,7 @@ Metis-M (Green) Metis-M (Grün) Metis-M (Vert) - Метис-М (Зелёный) + Метис-М (зелёный) "麥士蒂索人"-M型反坦克導彈(綠色) "麦士蒂索"-M(绿色) Metis-M (Verde) @@ -1862,7 +1862,7 @@ MX (Noir) MX (Fekete) MX (Negro) - MX (Чёрный) + MX (чёрный) MX (Preto) MX (Nero) MX (ブラック) @@ -1912,7 +1912,7 @@ MXC (Noir) MXC (Fekete) MXC (Negro) - MXC (Чёрный) + MXC (чёрный) MXC (Preto) MXC (Nero) MXC (ブラック) @@ -1962,7 +1962,7 @@ MX 3GL (Noir) MX 3GL (Fekete) MX 3GL (Negro) - MX 3GL (Чёрный) + MX 3GL (чёрный) MX 3GL (Preto) MX 3GL (Nero) MX 3GL (ブラック) @@ -2012,7 +2012,7 @@ MX LSW (Noir) MX LSW (Fekete) MX LSW (Negro) - MX LSW (Чёрный) + MX LSW (чёрный) MX LSW (Preto) MX LSW (Nero) MX LSW (ブラック) @@ -2062,7 +2062,7 @@ MXM (Noir) MXM (Fekete) MXM (Negro) - MXM (Чёрный) + MXM (чёрный) MXM (Preto) MXM (Nero) MXM (ブラック) @@ -2146,7 +2146,7 @@ F2000 (Camo) F2000 (Terepmintás) F2000 (Camuflaje) - F2000 (Камо) + F2000 (камуфляжный) F2000 (Camo) F2000 (Camo) F2000 (カモフラージュ) @@ -2180,7 +2180,7 @@ F2000 Tactical (Camo) F2000 Tactical (Terepmintás) F2000 Tactical (Camuflaje) - F2000 Tactical (Камо) + F2000 Tactical (камуфляжный) F2000 Tactical (Camo) F2000 Tactical (Camo) F2000 タクティカル (カモフラージュ) @@ -2214,7 +2214,7 @@ F2000 EGLM (Camo) F2000 EGLM (Terepmintás) F2000 EGLM (Camuflaje) - F2000 EGLM (Камо) + F2000 EGLM (камуфляжный) F2000 EGLM (Camo) F2000 EGLM (Camo) F2000 EGLM (カモフラージュ) @@ -2435,7 +2435,7 @@ GM6 Lynx (Camo) GM6 Gepárd (Terepmintás) GM6 Lynx (Camuflaje) - GM6 Lynx (Камо) + GM6 Lynx (камуфляжный) GM6 Lynx (Camo) GM6 Lynx (Camo) GM6 リンクス (カモフラージュ) @@ -2469,7 +2469,7 @@ M200 Intervention (Camo) M200 Intervention (Terepmintás) M200 Intervention (Camuflaje) - M200 Intervention (Камо) + M200 Intervention (камуфляжный) M200 Intervention (Camo) M200 Intervention (Camo) M200 インターベンション (カモフラージュ) @@ -2517,7 +2517,7 @@ Noreen "Bad News" ULR (Černá) Noreen "Bad News" ULR (Noir) Noreen "Bad News" ULR (Negro) - Noreen "Bad News" ULR (Чёрный) + Noreen "Bad News" ULR (чёрный) Noreen "Bad News" ULR (Schwarz) Noreen "Bad News" ULR (czarny) Noreen "Bad News" ULR (Nero) @@ -2534,7 +2534,7 @@ Noreen "Bad News" ULR (Kamufláž) Noreen "Bad News" ULR (Camo) Noreen "Bad News" ULR (Camuflaje) - Noreen "Bad News" ULR (Камо) + Noreen "Bad News" ULR (камуфляжный) Noreen "Bad News" ULR (Tarnmuster) Noreen "Bad News" ULR (kamuflaż) Noreen "Bad News" ULR (Camo) @@ -2551,7 +2551,7 @@ Noreen "Bad News" ULR (Písková) Noreen "Bad News" ULR (Beige) Noreen "Bad News" ULR (Arena) - Noreen "Bad News" ULR (Песочный) + Noreen "Bad News" ULR (песочный) Noreen "Bad News" ULR (sandfarben) Noreen "Bad News" ULR (piaskowy) Noreen "Bad News" ULR (Sabbia) @@ -2585,7 +2585,7 @@ SIG 556 (Černá) SIG 556 (Noir) SIG 556 (Negro) - SIG 556 (Чёрный) + SIG 556 (чёрный) SIG 556 (czarny) SIG 556 (Schwarz) SIG 556 (Nero) @@ -2602,7 +2602,7 @@ SIG 556 (Khaki) SIG 556 (Kaki) SIG 556 (Caqui) - SIG 556 (Хаки) + SIG 556 (хаки) SIG 556 (Khaki) SIG 556 (Khaki) SIG 556 (Khaki) @@ -2619,7 +2619,7 @@ SIG 556 (Písková) SIG 556 (Beige) SIG 556 (Arena) - SIG 556 (Песочный) + SIG 556 (песочный) SIG 556 (piaskowy) SIG 556 (sandfarben) SIG 556 (Sabbia) @@ -2636,7 +2636,7 @@ SIG 556 (Kamufláž) SIG 556 (Camo) SIG 556 (Camuflaje) - SIG 556 (Камо) + SIG 556 (камуфляжный) SIG 556 (kamuflaż) SIG 556 (Tarnmuster) SIG 556 (Camo) @@ -2653,7 +2653,7 @@ SIG 556 (Lesní) SIG 556 (Woodland) SIG 556 (Bosque) - SIG 556 (Лесной) + SIG 556 (Woodland) SIG 556 (leśny) SIG 556 (Grünes Tarnmuster) SIG 556 (Woodland) @@ -2687,7 +2687,7 @@ ASP-1 Kir (Černá) ASP-1 Kir (Noir) ASP-1 Kir (Negro) - ASP-1 Kir (Чёрный) + ASP-1 Kir (чёрный) ASP-1 Kir (Schwarz) ASP-1 Kir (czarny) ASP-1 Kir (Nero) @@ -2704,7 +2704,7 @@ ASP-1 Kir (Žlutohnědá) ASP-1 Kir (Tan) ASP-1 Kir (Tan) - ASP-1 Kir (Бронзовый) + ASP-1 Kir (пустынный) ASP-1 Kir (Hellbraun) ASP-1 Kir (Tan) ASP-1 Kir (Tan) @@ -2738,7 +2738,7 @@ Cyrus (Černá) Cyrus (Noir) Cyrus (Negro) - Cyrus (Чёрный) + Cyrus (чёрный) Cyrus (Schwarz) Cyrus (czarny) Cyrus (Nero) @@ -2755,7 +2755,7 @@ Cyrus (Hex) Cyrus (Hex) Cyrus (Hex) - Cyrus (Гекс) + Cyrus (гекс) Cyrus (Hex) Cyrus (hex) Cyrus (Hex) @@ -2772,7 +2772,7 @@ Cyrus (Žlutohnědá) Cyrus (Tan) Cyrus (Tan) - Cyrus (Бронза) + Cyrus (пустынный) Cyrus (Hellbraun) Cyrus (podpalany) Cyrus (Tan) @@ -2806,7 +2806,7 @@ M14 (Kamufláž) M14 (Camo) M14 (Camuflaje) - M14 (Камо) + M14 (камуфляжный) M14 (kamuflaż) M14 (Tarnmuster) M14 (Camo) @@ -2823,7 +2823,7 @@ M14 (Olivová) M14 (Olive) M14 (Oliva) - M14 (Олива) + M14 (олива) M14 (oliwkowy) M14 (Olivgrün) M14 (Olive) @@ -2857,7 +2857,7 @@ HK121 (Hex) HK121 (Hex) HK121 (Hex) - HK121 (Гекс) + HK121 (гекс) HK121 (Hex) HK121 (hex) HK121 (Hex) @@ -2874,7 +2874,7 @@ HK121 (Žlutohnědá) HK121 (Tan) HK121 (Tan) - HK121 (Бронза) + HK121 (пустынный) HK121 (Hellbraun) HK121 (podpalany) HK121 (Tan) @@ -2925,7 +2925,7 @@ LWMMG (Černá) LWMMG (Noir) LWMMG (Negro) - LWMMG (Чёрный) + LWMMG (чёрный) LWMMG (czarny) LWMMG (Schwarz) LWMMG (Nero) @@ -2942,7 +2942,7 @@ LWMMG (Písková) SPMG (Beige) LWMMG (Arena) - LWMMG (Песочный) + LWMMG (песочный) LWMMG (piaskowy) LWMMG (sandfarben) LWMMG (Sabbia) @@ -2995,7 +2995,7 @@ ジープ ラングラー (LMG) Jeep Wrangler (LMG) Jeep Wrangler (LMG) - Jeep Wrangler (Пулемет) + Jeep Wrangler (с пулемётом) Jeep Wrangler (LMG) Jeep Wrangler (LMG) Jeep Wrangler (LMG) @@ -3059,7 +3059,7 @@ QBZ-95-1 (Černá) QBZ-95-1 (Noir) QBZ-95-1 (Negro) - QBZ-95-1 (Чёрный) + QBZ-95-1 (чёрный) QBZ-95-1 (czarny) QBZ-95-1 (Schwarz) QBZ-95-1 (Nero) @@ -3078,7 +3078,7 @@ QBZ-95-1 (zielony hex) QBZ-95-1 (Zelený Hex) QBZ-95-1 (Hex Vert) - QBZ-95-1 (Зелёный Гекс) + QBZ-95-1 (зелёный гекс) QBZ-95-1 (Verde Hex) QBZ-95-1 (Zöld Hex) QBZ-95-1 (Hex Verde) @@ -3095,7 +3095,7 @@ QBZ-95-1 (hex) QBZ-95-1 (Hex) QBZ-95-1 (Hex) - QBZ-95-1 (Гекс) + QBZ-95-1 (гекс) QBZ-95-1 (Hex) QBZ-95-1 (Hex) QBZ-95-1 (Hex) @@ -3110,7 +3110,7 @@ QBZ-95-1 GL (Černá) QBZ-95-1 GL (Noir) QBZ-95-1 GL (Negro) - QBZ-95-1 GL (Чёрный) + QBZ-95-1 GL (чёрный) QBZ-95-1 GL (czarny) QBZ-95-1 GL (Schwarz) QBZ-95-1 GL (Nero) @@ -3129,7 +3129,7 @@ QBZ-95-1 GL (zielony hex) QBZ-95-1 GL (Zelený Hex) QBZ-95-1 GL (Hex Vert) - QBZ-95-1 GL (Зелёный Гекс) + QBZ-95-1 GL (зелёный гекс) QBZ-95-1 GL (Verde Hex) QBZ-95-1 GL (Zöld Hex) QBZ-95-1 GL (Hex Verde) @@ -3146,7 +3146,7 @@ QBZ-95-1 GL (hex) QBZ-95-1 GL (Hex) QBZ-95-1 GL (Hex) - QBZ-95-1 GL (Гекс) + QBZ-95-1 GL (гекс) QBZ-95-1 GL (Hex) QBZ-95-1 GL (Hex) QBZ-95-1 GL (Hex) @@ -3161,7 +3161,7 @@ QBZ-95-1 LSW (Černá) QBZ-95-1 LSW (Noir) QBZ-95-1 LSW (Negro) - QBZ-95-1 LSW (Чёрный) + QBZ-95-1 LSW (чёрный) QBZ-95-1 LSW (czarny) QBZ-95-1 LSW (Schwarz) QBZ-95-1 LSW (Nero) @@ -3180,7 +3180,7 @@ QBZ-95-1 LSW (zielony hex) QBZ-95-1 LSW (Zelený Hex) QBZ-95-1 LSW (Hex Vert) - QBZ-95-1 LSW (Зелёный Гекс) + QBZ-95-1 LSW (зелёный гекс) QBZ-95-1 LSW (Verde Hex) QBZ-95-1 LSW (Zöld Hex) QBZ-95-1 LSW (Hex Verde) @@ -3197,7 +3197,7 @@ QBZ-95-1 LSW (hex) QBZ-95-1 LSW (Hex) QBZ-95-1 LSW (Hex) - QBZ-95-1 LSW (Гекс) + QBZ-95-1 LSW (гекс) QBZ-95-1 LSW (Hex) QBZ-95-1 LSW (Hex) QBZ-95-1 LSW (Hex) @@ -3212,7 +3212,7 @@ QBU-88 (Černá) QBU-88 (Noir) QBU-88 (Negro) - QBU-88 (Чёрный) + QBU-88 (чёрный) QBU-88 (czarny) QBU-88 (Schwarz) QBU-88 (Nero) @@ -3231,7 +3231,7 @@ QBU-88 (zielony hex) QBU-88 (Zelený Hex) QBU-88 (Hex Vert) - QBU-88 (Зелёный Гекс) + QBU-88 (зелёный гекс) QBU-88 (Verde Hex) QBU-88 (Zöld Hex) QBU-88 (Hex Verde) @@ -3248,7 +3248,7 @@ QBU-88 (hex) QBU-88 (Hex) QBU-88 (Hex) - QBU-88 (Гекс) + QBU-88 (гекс) QBU-88 (Hex) QBU-88 (Hex) QBU-88 (Hex) @@ -3265,7 +3265,7 @@ GM6 Lynx (Zielony hex) GM6 Lynx (Zelený Hex) GM6 Lynx (Hex Vert) - GM6 Lynx (Зелёный Гекс) + GM6 Lynx (зелёный гекс) GM6 Lynx (Verde Hex) GM6 Lynx (Zöld Hex) GM6 Lynx (Hex Verde) @@ -3331,7 +3331,7 @@ HK416A5 11 " (Černá) HK416A5 11 " (Noir) HK416A5 11 " (Negro) - HK416A5 11 " (Чёрный) + HK416A5 11 " (чёрный) HK416A5 11 " (czarny) HK416A5 11 " (Schwarz) HK416A5 11 " (Nero) @@ -3348,7 +3348,7 @@ HK416A5 11 " (Khaki) HK416A5 11 " (Kaki) HK416A5 11 " (Caqui) - HK416A5 11 " (Хаки) + HK416A5 11 " (хаки) HK416A5 11 " (Khaki) HK416A5 11 " (Khaki) HK416A5 11 " (Khaki) @@ -3365,7 +3365,7 @@ HK416A5 11 " (Písková) HK416A5 11 " (Beige) HK416A5 11 " (Arena) - HK416A5 11 " (Песочный) + HK416A5 11 " (песочный) HK416A5 11 " (sandfarben) HK416A5 11 " (piaskowy) HK416A5 11 " (Sabbia) @@ -3382,7 +3382,7 @@ HK416A5 11 " GL (Černá) HK416A5 11 " GL (Noir) HK416A5 11 " GL (Negro) - HK416A5 11 " GL (Чёрный) + HK416A5 11 " GL (чёрный) HK416A5 11 " GL (czarny) HK416A5 11 " GL (Schwarz) HK416A5 11 " GL (Nero) @@ -3399,7 +3399,7 @@ HK416A5 11 " GL (Khaki) HK416A5 11 " GL (Kaki) HK416A5 11 " GL (Caqui) - HK416A5 11 " GL (Хаки) + HK416A5 11 " GL (хаки) HK416A5 11 " GL (Khaki) HK416A5 11 " GL (Khaki) HK416A5 11 " GL (Khaki) @@ -3416,7 +3416,7 @@ HK416A5 11 " GL (Písková) HK416A5 11 " GL (Beige) HK416A5 11 " GL (Arena) - HK416A5 11 " GL (Песочный) + HK416A5 11 " GL (песочный) HK416A5 11 " GL (sandfarben) HK416A5 11 " GL (piaskowy) HK416A5 11 " GL (Sabbia) @@ -3433,7 +3433,7 @@ HK416A5 14.5 " (Černá) HK416A5 14.5 " (Noir) HK416A5 14.5 " (Negro) - HK416A5 14.5 " (Чёрный) + HK416A5 14.5 " (чёрный) HK416A5 14.5 " (czarny) HK416A5 14.5 " (Schwarz) HK416A5 14.5 " (Nero) @@ -3450,7 +3450,7 @@ HK416A5 14.5 " (Khaki) HK416A5 14.5 " (Kaki) HK416A5 14.5 " (Caqui) - HK416A5 14.5 " (Хаки) + HK416A5 14.5 " (хаки) HK416A5 14.5 " (Khaki) HK416A5 14.5 " (Khaki) HK416A5 14.5 " (Khaki) @@ -3467,7 +3467,7 @@ HK416A5 14.5 " (Písková) HK416A5 14.5 " (Beige) HK416A5 14.5 " (Arena) - HK416A5 14.5 " (Песочный) + HK416A5 14.5 " (песочный) HK416A5 14.5 " (sandfarben) HK416A5 14.5 " (piaskowy) HK416A5 14.5 " (Sabbia) @@ -3484,7 +3484,7 @@ HK417A2 20 " (Černá) HK417A2 20 " (Noir) HK417A2 20 " (Negro) - HK417A2 20 " (Чёрный) + HK417A2 20 " (чёрный) HK417A2 20 " (czarny) HK417A2 20 " (Schwarz) HK417A2 20 " (Nero) @@ -3501,7 +3501,7 @@ HK417A2 20 " (Khaki) HK417A2 20 " (Kaki) HK417A2 20 " (Caqui) - HK417A2 20 " (Хаки) + HK417A2 20 " (хаки) HK417A2 20 " (Khaki) HK417A2 20 " (Khaki) HK417A2 20 " (Khaki) @@ -3518,7 +3518,7 @@ HK417A2 20 " (Písková) HK417A2 20 " (Beige) HK417A2 20 " (Arena) - HK417A2 20 " (Песочный) + HK417A2 20 " (песочный) HK417A2 20 " (sandfarben) HK417A2 20 " (piaskowy) HK417A2 20 " (Sabbia) @@ -3537,7 +3537,7 @@ RPG-32 (zielony hex) RPG-32 (Zelený Hex) RPG-32 (Hex Vert) - RPG-32 (Зелёный Гекс) + RPG-32 (зелёный гекс) RPG-32 (Verde Hex) RPG-32 (Zöld Hex) RPG-32 (Hex Verde) @@ -3552,7 +3552,7 @@ P99 (Khaki) P99 (Kaki) P99 (Caqui) - P99 (Хаки) + P99 (хаки) P99 (Khaki) P99 (Khaki) P99 (Khaki) @@ -3569,7 +3569,7 @@ P99 (Černá) P99 (Noir) P99 (Negro) - P99 (Чёрный) + P99 (чёрный) P99 (czarny) P99 (Schwarz) P99 (Nero) @@ -3588,7 +3588,7 @@ Makarowa PM Makarov PM Makarov PM - Макарова ПМ + ПМ Makarov PM Makarov PM Makarov PM @@ -3654,7 +3654,7 @@ "北极星"(轻型) Polaris DAGOR (leggero) Polaris DAGOR (light) - Polaris DAGOR (легкий) + Polaris DAGOR (лёгкий) Polaris DAGOR (leve) Polaris DAGOR (léger) Polaris DAGOR (lehký) @@ -3782,7 +3782,7 @@ ウィーゼル 2 オゼロット (対空) Wiesel 2 Ozelot (AA) Wiesel 2 Ozelot (AA) - Wiesel 2 Ozelot (ПВО) + Wiesel 2 Ozelot (ЗРК) Wiesel 2 Ozelot (AA) Wiesel 2 Ozelot (AA) Wiesel 2 Ozelot (AA) @@ -3798,7 +3798,7 @@ ウィーゼル 2 (ATGM) Wiesel 2 (ATGM) Wiesel 2 (ATGM) - Wiesel 2 (ПТ) + Wiesel 2 (ПТРК) Wiesel 2 (ATGM) Wiesel 2 (ATGM) Wiesel 2 (ATGM) @@ -3830,7 +3830,7 @@ ウィーゼル 2 RFCV (レーダー) Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Radar) - Wiesel 2 RFCV (Радар) + Wiesel 2 RFCV (радар) Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Radar) Wiesel 2 RFCV (Radar) @@ -3862,7 +3862,7 @@ Leupold Mark 4 HAMR (カーキ) Leupold Mark 4 HAMR (Khaki) Leupold Mark 4 HAMR (Khaki) - Leupold Mark 4 HAMR (Хаки) + Leupold Mark 4 HAMR (хаки) Leupold Mark 4 HAMR (Khaki) Leupold Mark 4 HAMR (Kaki) Leupold Mark 4 HAMR (Khaki) @@ -3910,7 +3910,7 @@ ELCAN SpecterOS (タン) ELCAN SpecterOS (Tan) ELCAN SpecterOS (Tan) - ELCAN SpecterOS (Бронза) + ELCAN SpecterOS (пустынный) ELCAN SpecterOS (Bege) ELCAN SpecterOS (Tan) ELCAN SpecterOS (Žlutohnědá) @@ -3926,7 +3926,7 @@ ELCAN SpecterOS (ブラック) ELCAN SpecterOS (Nero) ELCAN SpecterOS (Czarny) - ELCAN SpecterOS (Черный) + ELCAN SpecterOS (чёрный) ELCAN SpecterOS (Preto) ELCAN SpecterOS (Noire) ELCAN SpecterOS (Černá) @@ -3941,7 +3941,7 @@ ELCAN SpecterOS (緑ヘックス) ELCAN SpecterOS (Verde Hex) ELCAN SpecterOS (Zielony Hex) - ELCAN SpecterOS (Зеленый Гекс) + ELCAN SpecterOS (зелёный гекс) ELCAN SpecterOS (Verde Hex) ELCAN SpecterOS (Hex Verte) ELCAN SpecterOS (Zelený Hex) @@ -3990,6 +3990,7 @@ ELCAN SpecterOS (Grün) ELCAN SpecterOS(繁茂) 엘칸 스펙터OS (초목) + ELCAN SpecterOS (обильная растительность) ELCAN SpecterOS (Arid) @@ -3999,6 +4000,7 @@ ELCAN SpecterOS (Trocken) ELCAN SpecterOS(干旱) 엘칸 스펙터OS (건조) + ELCAN SpecterOS (сухая местность) ELCAN SpecterOS 7.62 (Black) @@ -4008,6 +4010,7 @@ ELCAN SpecterOS 7.62 (Schwarz) ELCAN SpecterOS 7.62(黑色) 엘칸 스펙터OS 7.62 (검정) + ELCAN SpecterOS 7.62 (чёрный) ELCAN SpecterOS 7.62 (Lush) @@ -4017,6 +4020,7 @@ ELCAN SpecterOS 7.62 (Grün) ELCAN SpecterOS 7.62(繁茂) 엘칸 스펙터OS 7.62 (초목) + ELCAN SpecterOS 7.62 (обильная растительность) ELCAN SpecterOS 7.62 (Arid) @@ -4026,6 +4030,7 @@ ELCAN SpecterOS 7.62 (Trocken) ELCAN SpecterOS 7.62(干旱) 엘칸 스펙터OS 7.62 (건조) + ELCAN SpecterOS 7.62 (сухая местность) SIG BRAVO4 / ROMEO3 (Black) @@ -4035,7 +4040,7 @@ SIG BRAVO4 / ROMEO3 (ブラック) SIG BRAVO4 / ROMEO3 (Nero) SIG BRAVO4 / ROMEO3 (Czarny) - SIG BRAVO4 / ROMEO3 (Черный) + SIG BRAVO4 / ROMEO3 (чёрный) SIG BRAVO4 / ROMEO3 (Preto) SIG BRAVO4 / ROMEO3 (Noire) SIG BRAVO4 / ROMEO3 (Černá) @@ -4051,7 +4056,7 @@ SIG BRAVO4 / ROMEO3 (カーキ) SIG BRAVO4 / ROMEO3 (Khaki) SIG BRAVO4 / ROMEO3 (Khaki) - SIG BRAVO4 / ROMEO3 (Хаки) + SIG BRAVO4 / ROMEO3 (хаки) SIG BRAVO4 / ROMEO3 (Khaki) SIG BRAVO4 / ROMEO3 (Kaki) SIG BRAVO4 / ROMEO3 (Khaki) @@ -4067,7 +4072,7 @@ SIG BRAVO4 / ROMEO3 (サンド) SIG BRAVO4 / ROMEO3 (Sabbia) SIG BRAVO4 / ROMEO3 (Piasek) - SIG BRAVO4 / ROMEO3 (Песочный) + SIG BRAVO4 / ROMEO3 (песочный) SIG BRAVO4 / ROMEO3 (Areia) SIG BRAVO4 / ROMEO3 (Beige) SIG BRAVO4 / ROMEO3 (Písková) @@ -4098,7 +4103,7 @@ Nightforce NXS (緑ヘックス) Nightforce NXS (Verde Hex) Nightforce NXS (Zielony Hex) - Nightforce NXS (Зеленый Гекс) + Nightforce NXS (зелёный гекс) Nightforce NXS (Verde Hex) Nightforce NXS (Hex Verte) Nightforce NXS (Zelený Hex) @@ -4115,7 +4120,7 @@ Nightforce NXS (ジャングル) Nightforce NXS (Giungla) Nightforce NXS (Dżungla) - Nightforce NXS (Джунгли) + Nightforce NXS (джунгли) Nightforce NXS (Selva) Nightforce NXS (Jungle) Nightforce NXS (Džungle) @@ -4162,7 +4167,7 @@ US Optics MR-10 (ブラック) US Optics MR-10 (Czarny) Ottica US MR-10 (nera) - US Optics MR-10 (Черный) + US Optics MR-10 (чёрный) US Optics MR-10 (Preto) US Optics MR-10 (Noire) US Optics MR-10 (Černá) @@ -4178,7 +4183,7 @@ US Optics MR-10 (カーキ) US Optics MR-10 (Khaki) Ottica US MR-10 (cachi) - US Optics MR-10 (Хаки) + US Optics MR-10 (хаки) US Optics MR-10 (Khaki) US Optics MR-10 (Kaki) US Optics MR-10 (Khaki) @@ -4194,7 +4199,7 @@ US Optics MR-10 (サンド) US Optics MR-10 (Piasek) Ottica US MR-10 (sabbia) - US Optics MR-10 (Песочный) + US Optics MR-10 (песочный) US Optics MR-10 (Areia) US Optics MR-10 (Beige) US Optics MR-10 (Písková) @@ -4210,7 +4215,7 @@ KAHLES ヘリア (ブラック) KAHLES Helia (Czarny) KAHLES Helia (nero) - KAHLES Helia (Черный) + KAHLES Helia (чёрный) KAHLES Helia (Preto) KAHLES Helia (Noire) KAHLES Helia (Černá) @@ -4226,7 +4231,7 @@ KAHLES ヘリア (ヘックス) KAHLES Helia (Hex) KAHLES Helia (esagonale) - KAHLES Helia (Гекс) + KAHLES Helia (гекс) KAHLES Helia (Hex) KAHLES Helia (Hex) KAHLES Helia (Hex) @@ -4242,7 +4247,7 @@ KAHLES ヘリア (使い古し) KAHLES Helia (Stary) KAHLES Helia (vecchio) - KAHLES Helia (Старый) + KAHLES Helia (старый) KAHLES Helia (Velho) KAHLES Helia (Usée) KAHLES Helia (Stará) @@ -4258,7 +4263,7 @@ KAHLES Helia (タン) KAHLES Helia (Tan) KAHLES Helia (marroncino) - KAHLES Helia (Бронза) + KAHLES Helia (пустынный) KAHLES Helia (Bege) KAHLES Helia (Tan) KAHLES Helia (Žlutohnědá) @@ -4290,7 +4295,7 @@ Burris XTR II (緑ヘックス) Burris XTR II (Green Hex) Burris XTR II (Zielony Hex) - Burris XTR II (Зеленый Гекс) + Burris XTR II (зелёный гекс) Burris XTR II (Verde Hex) Burris XTR II (Hex Verte) Burris XTR II (Zelený Hex) @@ -4307,6 +4312,7 @@ Burris XTR II (Alt) Burris XTR II(陈旧) 버리스 XTR II (낡음) + Burris XTR II (старый) Burris XTR II (ASP-1 Kir) @@ -4316,6 +4322,7 @@ Burris XTR II (ASP-1 Kir) Burris XTR II(ASP-1 Kir) 버리스 XTR II (ASP-1 키르) + Burris XTR II (ASP-1 Kir) EOTech XPS3 (Tan) @@ -4325,7 +4332,7 @@ EOTech XPS3 (タン) EOTech XPS3 (Tan) EOTech XPS3 (Tan) - EOTech XPS3 (Бронза) + EOTech XPS3 (пустынный) EOTech XPS3 (Bege) EOTech XPS3 (Tan) EOTech XPS3 (Žlutohnědá) @@ -4341,7 +4348,7 @@ EOTech XPS3 (ブラック) EOTech XPS3 (Black) EOTech XPS3 (Czarny) - EOTech XPS3 (Черный) + EOTech XPS3 (чёрный) EOTech XPS3 (Preto) EOTech XPS3 (Noire) EOTech XPS3 (Černá) @@ -4357,7 +4364,7 @@ EOTech XPS3 (カーキ) EOTech XPS3 (Khaki) EOTech XPS3 (Khaki) - EOTech XPS3 (Хаки) + EOTech XPS3 (хаки) EOTech XPS3 (Khaki) EOTech XPS3 (Kaki) EOTech XPS3 (Khaki) @@ -4373,6 +4380,7 @@ EOTech XPS3 (Grün) EOTech XPS3(繁茂) 이오텍 XPS3 (초목) + EOTech XPS3 (обильная растительность) EOTech XPS3 (Arid) @@ -4382,6 +4390,7 @@ EOTech XPS3 (Trocken) EOTech XPS3(干旱) 이오텍 XPS3 (건조) + EOTech XPS3 (сухая местность) EOTech XPS3 SMG (Tan) @@ -4391,7 +4400,7 @@ EOTech XPS3 SMG (タン) EOTech XPS3 SMG (Tan) EOTech XPS3 SMG (Tan) - EOTech XPS3 SMG (Бронза) + EOTech XPS3 SMG (пустынный) EOTech XPS3 SMG (Bege) EOTech XPS3 SMG (Tan) EOTech XPS3 SMG (Žlutohnědá) @@ -4407,7 +4416,7 @@ EOTech XPS3 SMG (ブラック) EOTech XPS3 SMG (Nero) EOTech XPS3 SMG (Czarny) - EOTech XPS3 SMG (Черный) + EOTech XPS3 SMG (чёрный) EOTech XPS3 SMG (Preto) EOTech XPS3 SMG (Noire) EOTech XPS3 SMG (Černá) @@ -4423,7 +4432,7 @@ EOTech XPS3 SMG (カーキ) EOTech XPS3 SMG (Khaki) EOTech XPS3 SMG (Khaki) - EOTech XPS3 SMG (Хаки) + EOTech XPS3 SMG (хаки) EOTech XPS3 SMG (Khaki) EOTech XPS3 SMG (Kaki) EOTech XPS3 SMG (Khaki) @@ -4503,7 +4512,7 @@ C-More レイルウェイ (レッド) C-More Railway (Rosso) C-More Railway (Czerwony) - C-More Railway (Красный) + C-More Railway (красный) C-More Railway (Vermelho) C-More Railway (Rouge) C-More Railway (Červený) @@ -4519,7 +4528,7 @@ C-More レイルウェイ (グリーン) C-More Railway (Verde) C-More Railway (Zielony) - C-More Railway (Зеленый) + C-More Railway (зелёный) C-More Railway (Verde) C-More Railway (Verte) C-More Railway (Zelený) @@ -4535,7 +4544,7 @@ C-More レイルウェイ SMG (レッド) C-More Railway SMG (Rosso) C-More Railway SMG (Czerwony) - C-More Railway SMG (Красный) + C-More Railway SMG (красный) C-More Railway SMG (Vermelho) C-More Railway SMG (Rouge) C-More Railway SMG (Červený) @@ -4551,7 +4560,7 @@ C-More レイルウェイ SMG (グリーン) C-More Railway SMG (Verde) C-More Railway SMG (Zielony) - C-More Railway SMG (Зеленый) + C-More Railway SMG (зелёный) C-More Railway SMG (Verde) C-More Railway SMG (Verte) C-More Railway SMG (Zelený) @@ -4564,7 +4573,7 @@ P90 TR (Černá) P90 TR (Noir) P90 TR (Negro) - P90 TR (Чёрный) + P90 TR (чёрный) P90 TR (czarny) P90 TR (Schwarz) P90 TR (Nero) @@ -4581,7 +4590,7 @@ P90 TR (Khaki) P90 TR (Kaki) P90 TR (Caqui) - P90 TR (Хаки) + P90 TR (хаки) P90 TR (Khaki) P90 TR (Khaki) P90 TR (Khaki) @@ -4598,7 +4607,7 @@ P90 TR (Kamufláž) P90 TR (Camo) P90 TR (Camuflaje) - P90 TR (Камо) + P90 TR (камуфляжный) P90 TR (kamuflaż) P90 TR (Camo) P90 TR (Camo) @@ -4615,7 +4624,7 @@ P90 TR (Hex) P90 TR (Hex) P90 TR (Hex) - P90 TR (Гекс) + P90 TR (гекс) P90 TR (Hex) P90 TR (hex) P90 TR (Hex) @@ -4632,7 +4641,7 @@ P90 (Černá) P90 (Noir) P90 (Negro) - P90 (Чёрный) + P90 (чёрный) P90 (czarny) P90 (Schwarz) P90 (Nero) @@ -4649,7 +4658,7 @@ P90 (Khaki) P90 (Kaki) P90 (Caqui) - P90 (Хаки) + P90 (хаки) P90 (Khaki) P90 (Khaki) P90 (Khaki) @@ -4666,7 +4675,7 @@ P90 (Kamufláž) P90 (Camo) P90 (Camuflaje) - P90 (Камо) + P90 (камуфляжный) P90 (kamuflaż) P90 (Camo) P90 (Camo) @@ -4683,7 +4692,7 @@ P90 (Hex) P90 (Hex) P90 (Hex) - P90 (Гекс) + P90 (гекс) P90 (Hex) P90 (hex) P90 (Hex) @@ -4700,7 +4709,7 @@ PS90 TR (Černá) PS90 TR (Noir) PS90 TR (Negro) - PS90 TR (Чёрный) + PS90 TR (чёрный) PS90 TR (czarny) PS90 TR (Schwarz) PS90 TR (Nero) @@ -4717,7 +4726,7 @@ PS90 TR (Khaki) PS90 TR (Kaki) PS90 TR (Caqui) - PS90 TR (Хаки) + PS90 TR (хаки) PS90 TR (Khaki) PS90 TR (Khaki) PS90 TR (Khaki) @@ -4734,7 +4743,7 @@ PS90 TR (Kamufláž) PS90 TR (Camo) PS90 TR (Camuflaje) - PS90 TR (Камо) + PS90 TR (камуфляжный) PS90 TR (kamuflaż) PS90 TR (Camo) PS90 TR (Camo) @@ -4751,7 +4760,7 @@ PS90 TR (Hex) PS90 TR (Hex) PS90 TR (Hex) - PS90 TR (Гекс) + PS90 TR (гекс) PS90 TR (Hex) PS90 TR (hex) PS90 TR (Hex) @@ -4768,7 +4777,7 @@ PS90 (Černá) PS90 (Noir) PS90 (Negro) - PS90 (Чёрный) + PS90 (чёрный) PS90 (czarny) PS90 (Schwarz) PS90 (Nero) @@ -4785,7 +4794,7 @@ PS90 (Khaki) PS90 (Kaki) PS90 (Caqui) - PS90 (Хаки) + PS90 (хаки) PS90 (Khaki) PS90 (Khaki) PS90 (Khaki) @@ -4802,7 +4811,7 @@ PS90 (Kamufláž) PS90 (Camo) PS90 (Camuflaje) - PS90 (Камо) + PS90 (камуфляжный) PS90 (kamuflaż) PS90 (Camo) PS90 (Camo) @@ -4819,7 +4828,7 @@ PS90 (Hex) PS90 (Hex) PS90 (Hex) - PS90 (Гекс) + PS90 (гекс) PS90 (Hex) PS90 (hex) PS90 (Hex) @@ -4940,7 +4949,7 @@ AK-15 (árido) AK-15 (arido) AK-15 (region suchy) - AK-15 (засушливая местность) + AK-15 (сухая местность) AK-15 (Trocken) AK-15 (suchý porost) AK-15 (Árido) @@ -4991,7 +5000,7 @@ AK-15 GL (árido) AK-15 GL (arido) AK-15 GL (region suchy) - AK-15 GL (засушливая местность) + AK-15 GL (сухая местность) AK-15 GL (Trocken) AK-15 GL (suchý porost) AK-15 GL (Árido) @@ -5042,7 +5051,7 @@ AK-15K (árido) AK-15K (arido) AK-15K (region suchy) - AK-15K (засушливая местность) + AK-15K (сухая местность) AK-15K (Trocken) AK-15K (suchý porost) AK-15K (Árido) @@ -5093,7 +5102,7 @@ RPK (árido) RPK (arido) RPK (region suchy) - RPK (засушливая местность) + RPK (сухая местность) RPK (Trocken) RPK (suchý porost) RPK (Árido) @@ -5127,7 +5136,7 @@ Stoner 99 LMG (Negro) Stoner 99 LMG (Nero) Stoner 99 LMG (Czarny) - Stoner 99 LMG (Чёрный) + Stoner 99 LMG (чёрный) Stoner 99 LMG (Schwarz) Stoner 99 LMG (Černá) Stoner 99 LMG (Preto) @@ -5161,7 +5170,7 @@ MSBS Grot (Negro) MSBS Grot (Nero) MSBS Grot (Czarny) - MSBS Grot (Чёрный) + MSBS Grot (чёрный) MSBS Grot (Schwarz) MSBS Grot (Černá) MSBS Grot (Preto) @@ -5178,7 +5187,7 @@ MSBS Grot (Camuflaje) MSBS Grot (Camo) MSBS Grot (Kamuflaż) - MSBS Grot (Камо) + MSBS Grot (камуфляжный) MSBS Grot (Tarnmuster) MSBS Grot (Kamufláž) MSBS Grot (Camo) @@ -5195,7 +5204,7 @@ MSBS Grot (Arena) MSBS Grot (Sabbia) MSBS Grot (Piaskowy) - MSBS Grot (Песочный) + MSBS Grot (песочный) MSBS Grot (Sandfarben) MSBS Grot (Písková) MSBS Grot (Deserto) @@ -5229,7 +5238,7 @@ MSBS Grot GL (Negro) MSBS Grot GL (Nero) MSBS Grot GL (Czarny) - MSBS Grot GL (Чёрный) + MSBS Grot GL (чёрный) MSBS Grot GL (Schwarz) MSBS Grot GL (Černá) MSBS Grot GL (Preto) @@ -5246,7 +5255,7 @@ MSBS Grot GL (Camuflaje) MSBS Grot GL (Camo) MSBS Grot GL (Kamuflaż) - MSBS Grot GL (Камо) + MSBS Grot GL (камуфляжный) MSBS Grot GL (Tarnmuster) MSBS Grot GL (Kamufláž) MSBS Grot GL (Camo) @@ -5263,7 +5272,7 @@ MSBS Grot GL (Arena) MSBS Grot GL (Sabbia) MSBS Grot GL (Piaskowy) - MSBS Grot GL (Песочный) + MSBS Grot GL (песочный) MSBS Grot GL (Sandfarben) MSBS Grot GL (Písková) MSBS Grot GL (Deserto) @@ -5297,7 +5306,7 @@ MSBS Grot MR (Negro) MSBS Grot MR (Nero) MSBS Grot MR (Czarny) - MSBS Grot MR (Чёрный) + MSBS Grot MR (чёрный) MSBS Grot MR (Schwarz) MSBS Grot MR (Černá) MSBS Grot MR (Preto) @@ -5314,7 +5323,7 @@ MSBS Grot MR (Camuflaje) MSBS Grot MR (Camo) MSBS Grot MR (Kamuflaż) - MSBS Grot MR (Камо) + MSBS Grot MR (камуфляжный) MSBS Grot MR (Tarnmuster) MSBS Grot MR (Kamufláž) MSBS Grot MR (Camo) @@ -5331,7 +5340,7 @@ MSBS Grot MR (Arena) MSBS Grot MR (Sabbia) MSBS Grot MR (Piaskowy) - MSBS Grot MR (Песочный) + MSBS Grot MR (песочный) MSBS Grot MR (Sandfarben) MSBS Grot MR (Písková) MSBS Grot MR (Deserto) @@ -5365,7 +5374,7 @@ MSBS Grot SG (Negro) MSBS Grot SG (Nero) MSBS Grot SG (Czarny) - MSBS Grot SG (Чёрный) + MSBS Grot SG (чёрный) MSBS Grot SG (Schwarz) MSBS Grot SG (Černá) MSBS Grot SG (Preto) @@ -5382,7 +5391,7 @@ MSBS Grot SG (Camuflaje) MSBS Grot SG (Camo) MSBS Grot SG (Kamuflaż) - MSBS Grot SG (Камо) + MSBS Grot SG (камуфляжный) MSBS Grot SG (Tarnmuster) MSBS Grot SG (Kamufláž) MSBS Grot SG (Camo) @@ -5399,7 +5408,7 @@ MSBS Grot SG (Arena) MSBS Grot SG (Sabbia) MSBS Grot SG (Piaskowy) - MSBS Grot SG (Песочный) + MSBS Grot SG (песочный) MSBS Grot SG (Sandfarben) MSBS Grot SG (Písková) MSBS Grot SG (Deserto) diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index d61759cacb..65bbc41934 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -485,11 +485,13 @@ Pump/Hose Interaction Time Pompa/Hortum Etkileşim Süresi 펌프/호스 상호작용 시간 + Время взаимодействия со шлангом How long refuel interactions take in seconds. Saniye biriminde yakıt ikmali etkileşimlerinin süresi. 연료 재보급 상호작용에 걸리는 시간(초)입니다. + Время в секундах, которое занимает взаимодействие со шлангом. Fuel Cargo Volume diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 2d2865d3cd..d02599705d 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -43,7 +43,7 @@ 总是在自我互动中显示检查弹药动作 Toujours afficher l'action de vérification des munitions Sempre mostrar a opção de checar a própria munição - Всегда показывать проверку боеприпасов в меню взаимодействия с собой + Всегда показывать проверку боеприпасов Mostrar siempre la autointeracción de comprobar munición Zeige immer die Selbstinteraktion zur Prüfung der Munition an. 상호작용에 탄약 확인을 항상 띄우기 diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index af79a5fe3c..28130bc037 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -27,7 +27,7 @@ Abilita Regolazione mirino ACE 开启 ACE 瞄准镜归零调节 開啟ACE瞄準鏡歸零調節 - Включить настройку прицелов ACE + Вкл. настройку прицелов ACE Permitir ajustes de Mira do ACE Povolit ACE náměr puškohledů Activar ACE Ajuste de visores @@ -57,7 +57,7 @@ Forza la regolazione delle torrette 强制使用归零调节 強制使用歸零調節 - Включить регулировку ненастроенных прицелов + Регулировка ненастроенных прицелов Força ajustes ACE para Miras Vynutit použití komínků Forzar torretas de ajuste diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 7affe102b1..b6f5ee2bde 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -217,7 +217,7 @@ 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) - Длительность каждого слайда. По-умолчанию: 0 (автоматический переход отключен) + Длительность каждого слайда. По умолчанию: 0 (автоматический переход отключен) Duración de cada diapositiva. Por defecto: 0 (Transiciones automáticas desactivadas) Doba trvání každého snímku. Výchozí: 0 (Automatické posouvání je zakázáno) Durata di ogni diapositiva. Default: 0 (Transizioni Automatiche Disabilitate) @@ -235,6 +235,7 @@ Auswahl der Textur Wybór Tekstury テクスチャの選択 + Выбор текстуры Object texture selection. Default: 0 @@ -244,6 +245,7 @@ Auswahl der Objekttextur. Standard: 0 Wybór tekstury obiektu. Domyślnie: 0 オブジェクトテクスチャの選択。デフォルト: 0 + Выбор текстуры объекта. По умолчанию: 0 Slides diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index 3ac20c24e7..cd26231ce3 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -38,7 +38,7 @@ Konfiguriert den Zuschauermodus Skonfiguruj domyślne ustawienia obserwatora. Configura como o sistema de espectador operará por padrão. - Определяют, как система спектатора будет функционировать по-умолчанию. + Определяют, как система спектатора будет функционировать по умолчанию. Configurar cómo el sistema de espectador funcionará por defecto. Konfigurovat výchozí nastavení pozorovatele Configura come il sistema spettatore si comporterà di default. diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index f449a7510c..a9172cfbed 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -269,7 +269,7 @@ A zona segura ao redor dos jogadores de diferentes equipes. Padrão: 100 Rayon de la zone de sécurité autour des joueurs d'équipes différentes. Valeur par défaut : 100 mètres. A biztonságos zóna más csapatból lévő játékosok körül. Alapértelmezett: 100 - Радиус безопасной зоны вокруг ироков из противоположной команды. По-умолчанию: 100 + Радиус безопасной зоны вокруг ироков из противоположной команды. По умолчанию: 100 La zona sicura attorno ai giocatori di un team diverso. Default: 100 別のチームへのプレイヤーの周囲にある安全地帯の範囲。標準: 100 다른 진영으로 부터의 플레이어 안전 지대. 기본설정: 100 diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 17cc2543a0..7e45523992 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -19,7 +19,7 @@ Configure how the tagging system will operate by default. - Настройка работы системы спрей-маркеров по-умолчанию. + Настройка работы системы спрей-маркеров по умолчанию. 標準で開くタグ付けシステムの設定を行います。 Skonfiguruj zachowanie systemu tagowania. Konfiguriert, wie das Markieren standardmäßig funktioniert. @@ -168,7 +168,7 @@ X verde X zeleně X em verde - Зеленый Х + Зелёный Х X印 초록 X 绿色X标记 @@ -196,60 +196,70 @@ 上矢印 Strzałka w górę 화살표(위) + Стрелка вверх Down Arrow 下矢印 Strzałka w dół 화살표(아래) + Стрелка вниз Left Arrow 左矢印 Strzałka w lewo 화살표(왼쪽) + Стрелка влево Right Arrow 右矢印 Strzałka w prawo 화살표(오른쪽) + Стрелка вправо Circle Okrąg + Круг Cross 十字 Krzyż 십자 + Перекрестие Diamond ひし形 Diament 마름모 + Алмаз Square 四角 Kwadrat 사각형 + Квадрат Triangle 三角形 Trójkąt 삼각형 + Треугольник Triangle Inverted 三角形 (反転) Odwrócony trójkąt 역삼각형 + Обратный треугольник Spray Paint (Black) @@ -292,7 +302,7 @@ Bomboletta spray verde Zelený sprej Spray de tinta verde - Зеленый спрей + Зелёный спрей スプレー缶 (緑) 초록 스프레이 绿色喷漆 diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index b9de697001..3f72eb7895 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -231,6 +231,7 @@ Zakamufluj okop 伪装掩体 참호 위장시키기 + Камуфлировать окоп Removing Trench @@ -261,7 +262,7 @@ Small Trench Dig Duration - Продолжительность копания малого окопа + Время копания малого окопа Petites tranchées - durée d'excavation 小型塹壕の完成時間 Tiempo de cavar trinchera pequeña @@ -283,7 +284,7 @@ Small Trench Remove Duration - Продолжительность удаления малого окопа + Время удаления малого окопа Petites tranchées - durée de retrait 小型塹壕の削除時間 Tiempo de eliminar trinchera pequeña @@ -305,7 +306,7 @@ Big Trench Dig Duration - Продолжительность рытья большого окопа + Время рытья большого окопа Grandes tranchées - durée d'excavation 大型塹壕の完成時間 Tiempo de cavar trinchera grande @@ -327,7 +328,7 @@ Big Trench Remove Duration - Продолжительность удаления большого окопа + Время удаления большого окопа Grandes tranchées - durée de retrait 大型塹壕の削除時間 Tiempo de eliminar trinchera grande diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 6270ab7c77..309c4ef863 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -53,7 +53,7 @@ Povolit selektivní UI Permitir IU Selecionável Autoriser la personnalisation de l'IU - Включить настраиваемый интерфейс + Вкл. настраиваемый интерфейс UI 選択性を許可 Zezwól na selektywne UI Erlaube selektives UI @@ -83,7 +83,7 @@ Informace o Vojákovi/Vozidlu/Zbrani Informação de Soldado/Veículo/Armamento Information soldat/véhicule/arme - Информация о Солдате/Технике/Оружии + Информация о солдате/технике/оружии 兵士/車両/武器の情報 Informacje o żołnierzu/pojeździe/broni Soldat/Fahrzeug/Waffe Information @@ -315,7 +315,7 @@ Weapon Lower Info Background Informações na parte de baixo do fundo do Armamento Fond pour la barre d'informations inférieure de l'arme - Фон ниформации об оружии снизу + Фон информации об оружии снизу 武器名の背景表示 (下側) Tło dolnej części informacji o broni Hintergrund der unteren Waffen-Info-Leiste @@ -472,7 +472,7 @@ Gunner Launchable Count Quantidade de Arremessável do fuzileiro Nombre d'objets lançables (tireur) - Количество снарядов пусковой установки наводчика + Кол-во снарядов ПУ наводчика 射手用のランチャー弾薬数 Ilość rakiet strzelca Richtschütze Raketenanzahl @@ -502,7 +502,7 @@ Gunner Weapon Lower Info Background Informações na parte de baixo do fundo do Armamento do fuzileiro Fond pour la barre d'informations inférieure (tireur) - Фон ниформации об орудии наводчика снизу + Фон информации об орудии наводчика снизу 射手用の武器名の背景表示 (下側) Tło dolnej części informacji o broni strzelca Hintergrund der unteren Waffen-Info-Leiste (Richtschütze) @@ -628,7 +628,7 @@ Vyžaduje informace o Vojákovi/Vozidlu/Zbrani Requer informações de Soldado/Veículo/Armamento Requiert l'option "Information soldat/véhicule/arme". - Требуется Информация о Солдате/Технике/Оружии. + Требуется информация о солдате/технике/оружии. 兵士/車両/武器の情報を必要とします。 Wymaga informacji o żołnierzu/pojeździe/broni. Benötigt Soldat/Fahrzeug/Waffe Information. @@ -673,7 +673,7 @@ Włącz wskaźnik prędkości poruszania 移動速度インジケータを有効化 Indicateur de vitesse de déplacement - Включить индикатор скорости передвижения + Вкл. индикатор скорости передвижения Aktiviere Bewegungsgeschwindigkeits-Indikator 启用移动速度指示器 이동 속도 표시기 활성화 @@ -694,6 +694,7 @@ Ukryj domyślną ikonę akcji 기본 행동 아이콘 숨기기 隐藏默认动作标识 + Спрятать иконку действия по умолчанию Hides the icon shown automatically when something is in front of the cursor. Requires a game restart.\nWarning: Does not remove the action itself! It is advisable to unbind 'Use default action' key to prevent unwanted interactions. @@ -701,6 +702,7 @@ Ukrywa ikonę wyświetlaną automatycznie, gdy coś znajduje się przed kursorem. Wymaga ponownego uruchomienia gry.\nOstrzeżenie: Nie usuwa samej akcji! Zaleca się usunięcia przypisania klawisza „Użyj domyślnej akcji”, aby zapobiec niechcianym interakcjom. 커서 앞에 무언가가 있을 때 자동으로 표시되는 아이콘을 숨깁니다. 게임을 재시작해야 합니다\n경고: 작업 자체를 제거하지 않습니다! 원하지 않는 상호작용을 방지하려면 '기본 행동' 키를 삭제하는 것이 좋습니다. 隐藏屏幕面前有物体时自动显示的动作标识。需要重新启动游戏。\n警告:不会删除动作本身!建议同时取消对“使用默认动作”键的绑定,以防止不必要的互动。 + Прячет иконку, которая показывается автоматически когда что-то находиться перед курсором. Требует рестарта игры.\nВнимание: не убирает само действие! Рекомендуется убрать комбинацию клавиш с настройки "Выполнить действие по умолчанию" чтобы предостеречься от нежеланных действий. diff --git a/addons/vehicle_damage/stringtable.xml b/addons/vehicle_damage/stringtable.xml index 8bae2d8ef9..2458a3bcdd 100644 --- a/addons/vehicle_damage/stringtable.xml +++ b/addons/vehicle_damage/stringtable.xml @@ -9,6 +9,7 @@ ACE Zaawansowany system uszkodzeń pojazdów ACE 高级载具损坏 ACE 고급 차량 피해 + ACE Продвинутое повреждение техники Enable/Disable advanced vehicle damage @@ -18,6 +19,7 @@ Włącz/Wyłącz zaawansowane uszkodzenia pojazdów 启用/禁用高级载具损坏 고급 차량 피해 활성화/비활성화 + Включить/выключить продвинутое повреждение техники Enable/Disable advanced car damage (Experimental) @@ -27,6 +29,7 @@ Włącz/Wyłącz zaawansowane uszkodzenia w samochodach (eksperymentalne) 启用/禁用高级车辆损坏(实验性) 고급 차량 피해(실험용) 활성화/비활성화 + Включить/выключить продвинутое повреждение машин (экспериментальное) Enable/Disable advanced Car Damage @@ -36,6 +39,7 @@ Włącz/Wyłącz zaawansowane uszkodzenia w samochodach 启用/禁用高级车辆损坏 고급 차량 피해 활성화/비활성화 + Продвинутое повреждение машин Removes all vehicle ammo after cook-off @@ -45,6 +49,7 @@ Usuwa całą amunicję z pojazdu po samozapłonie 殉爆后移除所有车辆弹药 쿡오프 현상 후 차량에서 모든 탄약을 제거합니다. + Удалять все боеприпасы из техники после их детонации Enable/Disable Ammo Removal During Cook-Off @@ -54,6 +59,7 @@ Włącz/Wyłącz usuwanie amunicji podczas samozapłonu 启用/禁用殉爆过程中的弹药移除功能 쿡오프시 탄약 제거 활성화/비활성화 + Удалять боеприпасы из-за детонации Wreck (Turret) diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index f94844eb3d..6097b9b3b9 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -345,7 +345,7 @@ Durabilidade padrão da chave micha Difficulté par défaut du crochetage Alapértelmezett zártörő-erősség - Сила отмычки по-умолчанию + Сила отмычки по умолчанию Durabilità Default del Grimaldello ピッキング ツールの能力設定 기본 해정도구 설정 @@ -362,7 +362,7 @@ Tempo padrão para forçar a fechadura (em segundos). Padrão: 10 Temps par défaut requis pour crocheter une serrure. Valeur par défaut : 10 secondes. Alapértelmezett idő a zárfeltöréshez (másodpercben). Alapértelmezett: 10 - Время для взлома замка отмычкой (в секундах). По-умолчанию: 10 + Время для взлома замка отмычкой (в секундах). По умолчанию: 10 Tempo Default richiesto per forzare serrature (in secondi). Default: 10 ピッキング ツールを使った作業時間の標準設定。(秒) 標準: 10 해정을 위해 들이는 기본시간입니다(초 단위). 기본설정: 10 diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 142b4e4d6c..71439ea939 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -25,6 +25,7 @@ Tempomat włączony クルーズコントロールを有効化 开启巡航模式 + Круиз-контроль включён Speed Limiter off @@ -50,6 +51,7 @@ Tempomat wyłączony クルーズコントロールを無効化 关闭巡航模式 + Круиз-контроль выключен Speed Limit @@ -91,6 +93,7 @@ Tempomat クルーズコントロール 巡航模式 + Круиз-контроль Increase Speed Limit diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 124726731a..f67ed123e1 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -125,6 +125,7 @@ Bei Einstellung auf 0 werden die Standard-Videoeinstellungen verwendet. Ustawienie na 0, spowoduje użycie domyślnych ustawień wideo. 0に設定すると、デフォルトのビデオ設定が使用されます + Значение 0 будет использовать настройки видео по умолчанию Client View Distance (On Foot) diff --git a/addons/viewports/stringtable.xml b/addons/viewports/stringtable.xml index 9098c3fea6..33f1307439 100644 --- a/addons/viewports/stringtable.xml +++ b/addons/viewports/stringtable.xml @@ -7,6 +7,7 @@ 뷰포트 观察口 Wizjery + Триплексы Allows crew to look through periscopes @@ -14,6 +15,7 @@ 乗組員がペリスコープを通して外を見ることができます 승무원이 잠망경을 통해 볼 수 있도록 허용합니다 允许乘员通过观察口观察 + Разрешить экипажу смотреть сквозь перископ diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 29a12ec4dc..37410f70a2 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -397,7 +397,7 @@ 切换碰撞灯 衝突防止灯を切り替え Przełącz światła kolizyjne - Вкл/Выкл Бортовые огни + Переключить бортовые огни Alternar Luzes de Colisão Alternar luces de colisión Přepnout kolizní světla diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 1e84c3fc6c..48456ae4d9 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -887,7 +887,7 @@ Attivatore Simulazione 切换模拟 切換模擬 - Вкл/Выкл симуляцию + Переключить симуляцию Alternar Simulação Activar simulación Přepnout simulaci objektu @@ -1324,7 +1324,7 @@ 切换夜视仪 야시경 토글 Przełącz NVG - Вкл/Выкл ПНВ + Переключить ПНВ Alternar Visão Noturna Přepnout noktovizory Alternar visión nocturna @@ -1417,7 +1417,7 @@ 切换手电筒 손전등 토글 Przełącz latarki - Вкл/Выкл Фонари + Переключить фонари Alternar Lanternas Alternar linternas Přepnout svítilny @@ -1930,6 +1930,7 @@ 유닛 불로 태우기 Podpal Jednostkę ユニットを燃やす + Поджечь юнита diff --git a/optionals/compat_rhs_usf3/stringtable.xml b/optionals/compat_rhs_usf3/stringtable.xml index aa1ed6da81..5c25509fa7 100644 --- a/optionals/compat_rhs_usf3/stringtable.xml +++ b/optionals/compat_rhs_usf3/stringtable.xml @@ -6,72 +6,84 @@ [CSW] BGM-71A TOW [CSW] BGM-71A TOW [班组] BGM-71A TOW + [CSW] BGM-71A TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW [CSW] BGM-71B TOW [班组] BGM-71B TOW + [CSW] BGM-71B TOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW [CSW] BGM-71C ITOW [班组] BGM-71C ITOW + [CSW] BGM-71C ITOW [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 [CSW] BGM-71D TOW-2 [班组] BGM-71D TOW-2 + [CSW] BGM-71D TOW-2 [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A [CSW] BGM-71E TOW-2A [班组] BGM-71E TOW-2A + [CSW] BGM-71E TOW-2A [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B [CSW] BGM-71F TOW-2B [班组] BGM-71F TOW-2B + [CSW] BGM-71F TOW-2B [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71F-3 TOW-2B AERO [班组] BGM-71F-3 TOW-2B AERO + [CSW] BGM-71F-3 TOW-2B AERO [CSW] BGM-71H Bunker Buster [CSW] BGM-71H 벙커버스터 [CSW] BGM-71H Bunker Buster [班组] BGM-71H “碉堡克星” + [CSW] BGM-71H Bunker Buster [CSW] Mk. 19 40mm M384 HE [CSW] Mk.19 40mm M384 HE [CSW] Mk. 19 40mm M384 HE [班组] Mk. 19 40mm M384 高爆 + [CSW] Mk. 19 40 мм M384 HE [CSW] Mk. 19 40mm M430I HEDP [CSW] Mk.19 40mm M430I 이중목적고폭탄 [CSW] Mk. 19 40mm M430I HEDP [班组] Mk. 19 40mm M430I 两用高爆 + [CSW] Mk. 19 40 мм M430I HEDP [CSW] Mk. 19 40mm M430A1 HEDP [CSW] Mk.19 40mm M430A1 이중목적고폭탄 [CSW] Mk. 19 40mm M430A1 HEDP [班组] Mk. 19 40mm M430A1 两用高爆 + [CSW] Mk. 19 40 мм M430A1 HEDP [CSW] Mk. 19 40mm M1001 Canister [CSW] Mk.19 40mm M1001 산탄 [CSW] Mk. 19 40mm M1001 キャニスター [班组] Mk. 19 40mm M1001 霰弹 + [CSW] Mk. 19 40 мм M1001 Канистровый diff --git a/optionals/compat_sog/stringtable.xml b/optionals/compat_sog/stringtable.xml index 67194ae6af..ab54c95387 100644 --- a/optionals/compat_sog/stringtable.xml +++ b/optionals/compat_sog/stringtable.xml @@ -8,6 +8,7 @@ 掘る 땅파기 挖掘 + Закопать M49A2 60mm HE @@ -16,6 +17,7 @@ M49A2 60mm HE M49A2 60mm 고폭 M49A2 60 mm 高爆弹 + M49A2 60 мм ОФ M302 60mm WP @@ -24,6 +26,7 @@ M302 60mm WP M302 60mm 백린 M302 60 mm 白磷弹 + M302 60 мм Фосфорная M83 60mm Lume @@ -32,6 +35,7 @@ M83 60mm ILUM M83 60mm 조명 M83 60 mm 照明弹 + M83 60 мм Осветительная M374 81mm HE @@ -40,6 +44,7 @@ M374 81mm HE M374 81mm 고폭 M374 81 mm 高爆弹 + M374 81 мм ОФ M375 81mm WP @@ -48,6 +53,7 @@ M375 81mm WP M375 81mm 백린 M375 81 mm 白磷弹 + M375 81 мм Фосфорная M301A3 81mm Lume @@ -56,6 +62,7 @@ M301A3 81mm ILUM M301A3 81mm 조명 M301A3 81 mm 照明弹 + M301A3 81 мм Осветительная M57 81mm Smoke @@ -64,6 +71,7 @@ M57 81mm Dymny M57 81mm 연막 M57 81 mm 烟雾弹 + M57 81 мм Дымовая O-832D 82mm HE @@ -72,6 +80,7 @@ O-832D 82mm HE O-832D 82mm 고폭 O-832D 82 mm 高爆弹 + О-832Д 82 мм ОФ D-832 82mm WP @@ -80,6 +89,7 @@ D-832 82mm WP D-832 82mm 백린 D-832 82 mm 白磷弹 + Д-832 82 мм Фосфорная S-832S 82mm Lume @@ -88,6 +98,7 @@ S-832S 82mm ILUM S-832S 82mm 조명 S-832S 82 mm 照明弹 + С-832С 82 мм Осветительная [ACE] M49A2 60mm HE Box @@ -96,6 +107,7 @@ [ACE] Skrzynia M49A2 60mm HE [ACE] M49A2 60mm 고폭 상자 [ACE] M49A2 60 mm 高爆弹弹药箱 + [ACE] Коробка M49A2 60 мм ОФ [ACE] M302 60mm WP Box @@ -104,6 +116,7 @@ [ACE] Skrzynia M302 60mm WP [ACE] M302 60mm 백린 상자 [ACE] M302 60 mm 白磷弹弹药箱 + [ACE] Коробка M302 60 мм Фосфорных [ACE] M83 60mm Lume Box @@ -112,6 +125,7 @@ [ACE] Skrzynia ILUM M83 60mm [ACE] M83 60mm 조명 상자 [ACE] M83 60 mm 照明弹弹药箱 + [ACE] Коробка M83 60 мм Осветительных [ACE] M374 81mm HE Box @@ -120,6 +134,7 @@ [ACE] Skrzynia M374 81mm HE [ACE] M374 81mm 고폭 상자 [ACE] M374 81 mm 高爆弹弹药箱 + [ACE] Коробка M374 81 мм ОФ [ACE] M375 81mm WP Box @@ -128,6 +143,7 @@ [ACE] Skrzynia M375 81mm WP [ACE] M375 81mm 백린 상자 [ACE] M375 81 mm 白磷弹弹药箱 + [ACE] Коробка M375 81 мм Фосфорных [ACE] M301A3 81mm Lume Box @@ -136,6 +152,7 @@ [ACE] Skrzynia M301A3 81mm ILUM [ACE] M301A3 81mm 조명 상자 [ACE] M301A3 81 mm 照明弹弹药箱 + [ACE] Коробка M301A3 81 мм Осветительных [ACE] M57 81mm Smoke Box @@ -144,6 +161,7 @@ [ACE] Skrzynia M57 81mm Dymny [ACE] M57 81mm 연막 상자 [ACE] M57 81 mm 烟雾弹弹药箱 + [ACE] Коробка M57 81 мм Дымовых [ACE] O-832D 82mm HE Box @@ -152,6 +170,7 @@ [ACE] Skrzynia O-832D 82mm HE [ACE] O-832D 82mm 고폭 상자 [ACE] O-832D 82 mm 高爆弹弹药箱 + [ACE] Коробка О-832Д 82 мм ОФ [ACE] D-832 82mm WP Box @@ -160,6 +179,7 @@ [ACE] Skrzynia D-832 82mm WP [ACE] D-832 82mm 백린 상자 [ACE] D-832 82 mm 白磷弹弹药箱 + [ACE] Коробка Д-832 82 мм Фосфорных [ACE] S-832S 82mm Lume Box @@ -168,6 +188,7 @@ [ACE] Skrzynia S-832S 82mm ILUM [ACE] S-832S 82mm 조명 상자 [ACE] S-832S 82 mm 照明弹弹药箱 + [ACE] Коробка С-832С 82 мм Осветительных Dig Spiderhole @@ -176,6 +197,7 @@ Wykop Lisią Norę 개인호 파기 挖掘散兵坑 + Выкопать паучью дыру Dig Spiderhole (Angled Cover) @@ -184,6 +206,7 @@ Wykop Lisią Norę (z dachem) 개인호 파기 (각진 엄폐) 挖掘带斜盖散兵坑 + Выкопать крытую паучью дыру Dig Spiderhole (Dual) @@ -192,6 +215,7 @@ Wykop Lisią Norę (podwójną) 개인호 파기 (2인용) 挖掘双人散兵坑 + Выкопать двойную паучью дыру [CSW] M1919A4 Gun Bag @@ -200,6 +224,7 @@ [CSW] Torba na M1919A4 [CSW] M1919A4 총가방 [班组] M1919A4 枪袋 + [CSW] Сумка с M1919A4 [CSW] M1919A6 Gun Bag @@ -208,6 +233,7 @@ [CSW] Torba na M1919A6 [CSW] M1919A6 총가방 [班组] M1919A6 枪袋 + [CSW] Сумка с M1919A6 [CSW] M60 Gun Bag @@ -216,6 +242,7 @@ [CSW] Torba na M60 [CSW] M60 총가방 [班组] M60 枪袋 + [CSW] Сумка с M60 [CSW] DShK (Shield) Gun Bag @@ -224,6 +251,7 @@ [CSW] Torba na DShK (z tarczą) [CSW] DShK (방패) 총가방 [班组] DShK(防盾)枪袋 + [CSW] Сумка с ДШК (со щитом) [CSW] DShK (AA) Gun Bag @@ -232,6 +260,7 @@ [CSW] Torba na DShK (AA) [CSW] DShK (대공) 총가방 [班组] DShK(高)枪袋 + [CSW] Сумка с ДШК (зенитный) [CSW] RPD Gun Bag @@ -240,6 +269,7 @@ [CSW] Torba na RPD [CSW] RPD 총가방 [班组] RPD 枪袋 + [CSW] Сумка с РПД [CSW] PK Gun Bag @@ -248,6 +278,7 @@ [CSW] Torba na PK [CSW] PK 총가방 [班组] PK 枪袋 + [CSW] Сумка с ПК [CSW] MG42 Gun Bag @@ -256,6 +287,7 @@ [CSW] Torba na MG42 [CSW] MG42 총가방 [班组] MG42 枪袋 + [CSW] Сумка с MG42 [CSW] SGM Gun Bag @@ -264,6 +296,7 @@ [CSW] Torba na SGM [CSW] SGM 총가방 [班组] SGM 枪袋 + [CSW] Сумка с СГМ [CSW] SGM (Shield) Gun Bag @@ -272,6 +305,7 @@ [CSW] Torba na SGM (z tarczą) [CSW] SGM (방패) 총가방 [班组] SGM(防盾)枪袋 + [CSW] Сумка с СГМ (со щитом) [CSW] Mk18 Gun Bag @@ -280,6 +314,7 @@ [CSW] Torba na Mk18 [CSW] Mk18 총가방 [班组] Mk18 枪袋 + [CSW] Сумка с Mk18 [CSW] M29 Mortar Tube @@ -288,6 +323,7 @@ [CSW] M29 Rura od moździerza [CSW] M29 박격포 포신 [班组] M29 迫击炮炮管 + [CSW] Сумка с миномётом M29 [CSW] M2 Mortar Tube @@ -296,6 +332,7 @@ [CSW] M2 Rura od moździerza [CSW] M2 박격포 포신 [班组] M2 迫击炮炮管 + [CSW] Сумка с миномётом M2 [CSW] Type 53 Mortar Tube @@ -304,6 +341,7 @@ [CSW] Type 53 Rura od moździerza [CSW] 53식 박격포 포신 [班组] 53式迫击炮炮管 + [CSW] Сумка с миномётом Type 53 diff --git a/optionals/tracers/stringtable.xml b/optionals/tracers/stringtable.xml index 943d0e942c..30b6b04d88 100644 --- a/optionals/tracers/stringtable.xml +++ b/optionals/tracers/stringtable.xml @@ -5,7 +5,7 @@ 5.56 mm 150Rnd Reload Tracer (Green) Mag 150 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Magazin - Магазин 150 патр. 5.56 мм с послед. трас. (Зеленый) + Магазин 150 патр. 5.56 мм с послед. трас. (зелёные) 5.56 mm 150 colpi ricarica traccianti (verdi) caricatore 5.56 mm 150 ranný zásobník, stopovka pro přebití (Zelená) Recarregar magazine de 150 balas tracejantes (verde) @@ -17,7 +17,7 @@ 5.56 mm 150Rnd Reload Tracer (Yellow) Mag 150 Schuss 5,56 mm Nachlade-Leuchtspur (Gelb) Magazin - Магазин 150 патр. 5.56 мм с послед. трас. (Желтый) + Магазин 150 патр. 5.56 мм с послед. трас. (жёлтые) 5.56 mm 150 colpi Ricarica traccianti (gialli) caricatore 5.56 mm 150 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 150 balas tracejantes (Amarelo) @@ -29,7 +29,7 @@ 5.56 mm 150Rnd Tracer (Green) Mag 150 Schuss 5,56 mm Leuchtspur (Grün) Magazin - Магазин 150 патр. 5.56 мм трассирующих (Зеленый) + Магазин 150 патр. 5.56 мм трассирующих (зелёные) 5.56 mm 150 colpi traccianti (verdi) caricatore 5.56 mm 150 ranný zásobník, stopovka (Zelená) Magazine 5.56mm Tracejante (verde) @@ -41,7 +41,7 @@ Caliber: 5.56x45 mm Tracer - Green<br />Rounds: 150<br />Used in: SPAR-16S Kaliber: 5,56x45 mm Leuchtspur - grün<br />Schuss: 150<br />Verwendet in: SPAR-16S - Калибр: 5.56x45 мм, трассер Зеленый<br />Патронов: 150<br />Используется в: SPAR-16S + Калибр: 5.56x45 мм, зелёный трассер<br /><br />Патронов: 150<br />Используется в: SPAR-16S calibro: 5.56x46 mm traccianti - verdi<br/> Colpi: 150<br/> Usati in: SPAR-16S Kalibr: 5.56×45 mm Stopovka - Zelená<br />Nábojů: 150<br />Použito v: SPAR-16S Calibre 5.56x45mm Tracejante - Verde<br/>Balas:150<br/>Usado em: Spar-16S @@ -53,7 +53,7 @@ 5.56 mm 150Rnd Tracer (Yellow) Mag 150 Schuss 5,56 mm Leuchtspur (Gelb) Magazin - Магазин 150 патр. 5.56 мм трассирующих (Желтый) + Магазин 150 патр. 5.56 мм трассирующих (жёлтые) 5.56 mm 150Colpi Traccianti (gialli) caricatore 5.56 mm 150 ranný zásobník, stopovka (Žlutá) Magazine 5.56mm 150 balas tracejante (amarelo) @@ -65,7 +65,7 @@ Caliber: 5.56x45 mm Tracer - Yellow<br />Rounds: 150<br />Used in: SPAR-16S Kaliber: 5,56x45 mm Leuchtspur - gelb<br />Schuss: 150<br />Verwendet in: SPAR-16S - Калибр: 5.56x45 мм, трассер Желтый<br />Патронов: 150<br />Используется в: SPAR-16S + Калибр: 5.56x45 мм, жёлтый трассер<br /><br />Патронов: 150<br />Используется в: SPAR-16S calibro:5.56x45 traccianti - gialli <br/>Colpi:150<br/>Usati in: SPAR-16S Kalibr: 5.56×45 mm Stopovka - Žlutá<br />Nábojů: 150<br />Použito v: SPAR-16S Calibre: 5.56x45mm Tracejante - Amarelo <br/>Balas:150<br/>Usado em:Spar-16S @@ -77,7 +77,7 @@ 5.56 mm 200Rnd Reload Tracer (Green) Box 200 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Kasten - Короб 200 патр. 5.56 мм с послед. трас. (Зеленый) + Короб 200 патр. 5.56 мм с послед. трас. (зелёные) 5.56 mm 200colpi Ricarica traccianti (verdi) scatola 5.56 mm 200 ranný box, stopovka pro přebití (Zelená) Recarregar Caixa 5.56mm 200 Balas tracejantes (verdes) @@ -89,7 +89,7 @@ 5.56 mm 200Rnd Tracer (Green) Box 200 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Kasten - Короб 200 патр. 5.56 мм трассирующих (Зеленый) + Короб 200 патр. 5.56 мм трассирующих (зелёные) 5.56 mm 200colpi Traccianti (verdi) Scatola 5.56 mm 200 ranný box, stopovka (Zelená) Caixa 5.56mm 200 balas tracejantes (verdes) @@ -101,7 +101,7 @@ Caliber: 5.56x45 mm Tracer - Green<br />Rounds: 200<br />Used in: LIM-85 Kaliber: 5,56x45 mm Leuchtspur - grün<br />Schuss: 200<br />Verwendet in: LIM-85 - Калибр: 5.56x45 мм, трассер Зеленый<br />Патронов: 200<br />Используется в: LIM-85 + Калибр: 5.56x45 мм, зелёный трассер<br />Патронов: 200<br />Используется в: LIM-85 Calibro: 5.56x45 mm Traccianti - Verdi<br />Colpi: 200<br />Usati in: LIM-85 Kalibr: 5.56×45 mm Stopovka - Zelená<br />Nábojů: 200<br />Použito v: LIM-85 Calibre:5.56x45 mm Tracejante - Verde <br/>Balas: 200<br/>Usado em:LIM-85 @@ -113,7 +113,7 @@ 5.8 mm 30Rnd Reload Tracer (Red) Mag 30 Schuss 5,8 mm Nachlade-Leuchtspur (Rot) Magazin - Магазин 30 патр. 5.8 мм с послед. трас. (Красный) + Магазин 30 патр. 5.8 мм с послед. трас. (красные) 5.8 mm 30Colpi Ricarica Tracciante (Rosso) Caricatore 5.8 mm 30 ranný zásobník, stopovka pro přebití (Červená) Recarregar magazine 5.8mm 30 Balas tracejantes (vermelho) @@ -125,7 +125,7 @@ 5.8 mm 30Rnd Reload Tracer (Yellow) Mag 30 Schuss 5,8 mm Nachlade-Leuchtspur (Gelb) Magazin - Магазин 30 патр. 5.8 мм с послед. трас. (Желтый) + Магазин 30 патр. 5.8 мм с послед. трас. (жёлтые) 5.8 mm 30Colpi ricarica Traccianti (Giallo) Caricatore 5.8 mm 30 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 5.8mm 30 Balas tracejantes (amarelo) @@ -137,7 +137,7 @@ 5.8 mm 30Rnd Tracer (Red) Mag 30 Schuss 5,8 mm Leuchtspur (Rot) Magazin - Магазин 30 патр. 5.8 мм трассирующих (Красный) + Магазин 30 патр. 5.8 мм трассирующих (красные) 5.8 mm 30Colpi Traccianti (rossi) Caricatore 5.8 mm 30 ranný zásobník, stopovka (Červená) Magazine 5.8 mm 30 balas tracejantes (vermelho) @@ -149,7 +149,7 @@ Caliber: 5.8x42 mm Tracer - Red<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL Kaliber: 5,8x42 mm Leuchtspur - rot<br />Schuss: 30<br />Verwendet in: CAR-95, CAR-95 GL - Калибр: 5.8x42 мм, трассер Красный<br />Патронов: 150<br />Используется в: CAR-95, CAR-95 GL + Калибр: 5.8x42 мм, красный трассер<br /><br />Патронов: 150<br />Используется в: CAR-95, CAR-95 GL Calibro: 5.8x42 mm Traccianti - Rossi<br />Colpi: 30<br />Usati in: CAR-95, CAR-95 GL Kalibr: 5.8×42 mm Stopovka - Červená<br />Nábojů: 30<br />Použito v: CAR-95, CAR-95 GL Calibre: 5.8x42 mm Tracejante - Vermelho<br/>Balas:30<br/>Usado em CAR-95, CAR-95 GL @@ -161,7 +161,7 @@ 5.8 mm 30Rnd Tracer (Yellow) Mag 30 Schuss 5,8 mm Leuchtspur (Gelb) Magazin - Магазин 30 патр. 5.8 мм трассирующих (Желтый) + Магазин 30 патр. 5.8 мм трассирующих (жёлтые) 5.8 mm 30Colpi Traccianti (Giallo) Caricatore 5.8 mm 30 ranný zásobník, stopovka (Žlutá) Magazine 5.8 mm 30 balas tracejante (amarelo) @@ -173,7 +173,7 @@ Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL Kaliber: 5,8x42 mm Leuchtspur - gelb<br />Schuss: 30<br />Verwendet in: CAR-95, CAR-95 GL - Калибр: 5.8x42 мм, трассер Желтый<br />Патронов: 30<br />Используется в: CAR-95, CAR-95 GL + Калибр: 5.8x42 мм, жёлтый трассер<br /><br />Патронов: 30<br />Используется в: CAR-95, CAR-95 GL Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL Kalibr: 5.8×42 mm Stopovka - Žlutá<br />Nábojů: 30<br />Použito v: CAR-95, CAR-95 GL Calibre: 5.8x42 mm Tracejante - Amarelo <br/>Balas: 30<br/>Usado em: CAR-95, CAR-95 GL @@ -185,7 +185,7 @@ 5.8 mm 100Rnd Reload Tracer (Red) Mag 100 Schuss 5,8 mm Nachlade-Leuchtspur (Rot) Magazin - Магазин 100 патр. 5.8 мм с послед. трас. (Красный) + Магазин 100 патр. 5.8 мм с послед. трас. (красные) 5,8 mm 100Colpi Ricarica Tracciante (rosso) Caricatore 5.8 mm 100 ranný zásobník, stopovka pro přebití (Červená) Recarregar magazine 5.8 mm 100 balas tracejante (vermelho) @@ -197,7 +197,7 @@ 5.8 mm 100Rnd Reload Tracer (Yellow) Mag 100 Schuss 5,8 mm Nachlade-Leuchtspur (Gelb) Magazin - Магазин 100 патр. 5.8 мм с послед. трас. (Желтый) + Магазин 100 патр. 5.8 мм с послед. трас. (жёлтые) 5.8 mm 100Colpi Ricarica Traccianti (gialli) Caricatore 5.8 mm 100 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 5.8 mm 100 balas tracejantes (amarelo) @@ -209,7 +209,7 @@ 5.8 mm 100Rnd Tracer (Red) Mag 100 Schuss 5,8 mm Leuchtspur (Rot) Magazin - Магазин 100 патр. 5.8 мм трассирующих (Красный) + Магазин 100 патр. 5.8 мм трассирующих (красные) 5.8 mm 100Colpi Ricarica Traccianti (rossi) Caricatore 5.8 mm 100 ranný zásobník, stopovka (Červená) Magazine 5.8 mm 100 balas tracejantes (vermelho) @@ -221,7 +221,7 @@ Caliber: 5.8x42 mm Tracer - Red<br />Rounds: 100<br />Used in: CAR-95-1 Kaliber: 5,8x42 mm Leuchtspur - rot<br />Schuss: 100<br />Verwendet in: CAR-95-1 - Калибр: 5.8x42 мм, трассер Красный<br />Патронов: 100<br />Используется в: CAR-95, CAR-95 GL + Калибр: 5.8x42 мм, красный трассер<br /><br />Патронов: 100<br />Используется в: CAR-95, CAR-95 GL Calibro: 5.8x42 mm Tracciante - Rosso<br />Colpi: 100<br />Usati in: CAR-95-1 Kalibr: 5.8×42 mm Stopovka - Červená<br />Nábojů: 100<br />Použito v: CAR-95-1 Calibre: 5.8x42 mm Tracejante - Vermelho<br/>Balas:100<br/>Usado em CAR-95-1 @@ -233,7 +233,7 @@ 5.8 mm 100Rnd Tracer (Yellow) Mag 100 Schuss 5,8 mm Leuchtspur (Gelb) Magazin - Магазин 100 патр. 5.8 мм трассирующих (Желтый) + Магазин 100 патр. 5.8 мм трассирующих (жёлтые) 5.8mm 100Colpi Traccianti (gialli) Caricatore 5.8 mm 100 ranný zásobník, stopovka (Žlutá) Magazine 5.8 mm 100 balas tracejantes (amarelo) @@ -245,7 +245,7 @@ Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 100<br />Used in: CAR-95-1 Kaliber: 5,8x42 mm Leuchtspur - gelb<br />Schuss: 100<br />Verwendet in: CAR-95-1 - Калибр: 5.8x42 мм, трассер Желтый<br />Патронов: 100<br />Используется в: CAR-95, CAR-95 GL + Калибр: 5.8x42 мм, жёлтый трассер<br /><br />Патронов: 100<br />Используется в: CAR-95, CAR-95 GL Calibro: 5.8x42 mm Traccianti - Gialli<br />Colpi: 100<br />Usati in: CAR-95-1 Kalibr: 5.8×42 mm Stopovka - Žlutá<br />Nábojů: 100<br />Použito v: CAR-95-1 Calibre: 5.8x42 mm Tracejante - Amarelo<br/>Balas:100<br/>Usado em CAR-95-1 @@ -257,7 +257,7 @@ 6.5mm 30Rnd Reload Tracer (Green) Mag 30 Schuss 6.5mm Nachlade-Leuchtspur (Grün) Magazin - Магазин 30 патр. 6.5 мм с послед. трас. (Зеленый) + Магазин 30 патр. 6.5 мм с послед. трас. (зелёные) 6.5mm 30Colpi Ricarica Traccianti(verdi) Caricatore 6.5 mm 30 ranný zásobník, stopovka pro přebití (Zelená) Recarregar magazine 6.5mm 30 balas tracejantes (verde) @@ -269,7 +269,7 @@ Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL Kaliber: 6.5x39 mm Nachlade-Leuchtspur - Grün<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL - Калибр: 6.5x39 мм, трассер Зеленый<br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL + Калибр: 6.5x39 мм, зелёный трассер<br /><br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL Calibro: 6.5x39 mm Traccianti - Verdi<br />Colpi: 30<br />Usati in: MX/C/M/SW/3GL Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Verde<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL @@ -281,7 +281,7 @@ 6.5mm 30Rnd Reload Tracer (Yellow) Mag 30 Schuss 6.5mm Nachlade-Leuchtspur (Gelb) Magazin - Магазин 30 патр. 6.5 мм с послед. трас. (Желтый) + Магазин 30 патр. 6.5 мм с послед. трас. (жёлтые) 6.5mm 30Colpi Ricarica Traccianti (Gialli) Caricatore 6.5 mm 30 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 6.5mm 30 balas tracejantes (amarelo) @@ -293,7 +293,7 @@ Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL Kaliber: 6.5x39 mm Nachlade-Leuchtspur - Gelb<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL - Калибр: 6.5x39 мм, трассер Желтый<br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL + Калибр: 6.5x39 мм, жёлтый трассер<br /><br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL Calibro: 6.5x39 mm Tracciante - Giallo<br />Colpi: 30<br />Usati in: MX/C/M/SW/3GL Kalibr: 6.5×39 mm Stopovka - Žlutá<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Amarelo<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL @@ -305,7 +305,7 @@ 6.5mm 30Rnd Tracer (Green) Mag 30 Schuss 6.5mm Leuchtspur (Grün) Magazin - Магазин 30 патр. 6.5 мм трассирующих (Зеленый) + Магазин 30 патр. 6.5 мм трассирующих (зелёные) 6.5mm 30Colpi Traccianti (Verdi) Caricatore 6.5 mm 30 ranný zásobník, stopovka (Zelená) Magazine 6.5mm 30 balas tracejantes (verde) @@ -317,7 +317,7 @@ Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL Kaliber: 6.5x39 mm Leuchtspur - Grün<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL - Калибр: 6.5x39 мм, трассер Зеленый<br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL + Калибр: 6.5x39 мм, зелёный трассер<br /><br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL Calibro: 6.5x39 mm traccianti - Verdi<br />Colpi: 30<br />Usati in: MX/C/M/SW/3GL Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Verde<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL @@ -329,7 +329,7 @@ 6.5mm 30Rnd Tracer (Yellow) Mag 30 Schuss 6.5mm Leuchtspur (Gelb) Magazin - Магазин 30 патр. 6.5 мм трассирующих (Желтый) + Магазин 30 патр. 6.5 мм трассирующих (жёлтые) 6.5mm 30 Colpi Traccianti (Gialli) Caricatore 6.5 mm 30 ranný zásobník, stopovka (Žlutá) Magazine 6.5mm 30 balas tracejantes (amarelo) @@ -341,7 +341,7 @@ Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL Kaliber: 6.5x39 mm Leuchtspur - Gelb<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL - Калибр: 6.5x39 мм, трассер Желтый<br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL + Калибр: 6.5x39 мм, жёлтый трассер<br /><br />Патронов: 30<br />Используется в: MX/C/M/SW/3GL Caliber: 6.5x39 mm Tracciante - Giallo<br />Colpi: 30<br />Usati in: MX/C/M/SW/3GL Kalibr: 6.5×39 mm Stopovka - Žlutá<br />Nábojů: 30<br />Použito v: MX/C/M/SW/3GL Calibre: 6.5x39 mm Tracejante - Amarelo<br/>Balas:30<br/>Usado em: MX/C/M/SW/3GL @@ -353,7 +353,7 @@ 6.5mm 100Rnd Mixed Mag (Green) 100 Schuss 6.5mm Magazin gemischt (grün) - Магазин 100 патр. 6.5 мм TE4 (Зеленый) + Магазин 100 патр. 6.5 мм TE4 (зелёные) 6.5mm 100Colpi Misti Caricatore (verdi) 6.5 mm 100 ranný zásobník, částečná stopovka (Zelená) Magazine 6.5mm 100 balas misturadas (verde) @@ -365,7 +365,7 @@ 6.5mm 100Rnd Mixed Mag (Yellow) 100 Schuss 6.5mm Magazin gemischt (gelb) - Магазин 100 патр. 6.5 мм TE4 (Желтый) + Магазин 100 патр. 6.5 мм TE4 (жёлтые) 6.5mm 100Colpi Misti Caricatore (gialli) 6.5 mm 100 ranný zásobník, částečná stopovka (Žlutá) Magazine 6.5mm 100 balas misturadas (amarelo) @@ -377,7 +377,7 @@ 6.5mm 100Rnd Mag Tracer (Green) 100 Schuss 6.5mm Magazin Leuchtspur (Grün) - Магазин 100 патр. 6.5 мм трассирующих (Зеленый) + Магазин 100 патр. 6.5 мм трассирующих (зелёные) 6.5mm 100Colpi Caricatore Tracciante (verde) 6.5 mm 100 ranný zásobník, stopovka (Zelená) Magazine 6.5mm 100 balas tracejantes @@ -389,7 +389,7 @@ Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 100<br />Used in: MX SW Kaliber: 6.5x39 mm Leuchtspur - Grün<br />Patronen: 100<br />Verwendet in: MX SW - Калибр: 6.5x39 мм, трассер Зеленый<br />Патронов: 100<br />Используется в: MX SW + Калибр: 6.5x39 мм, зелёный трассер<br /><br />Патронов: 100<br />Используется в: MX SW Calibro: 6.5x39 mm Traccianti - Verdi<br />Colpi: 100<br />Usati in: MX SW Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 100<br />Použito v: MX SW Calibre: 6.5x39 mm Tracejante - Verde<br/>Balas: 100<br/>Usado em: MX SW @@ -401,7 +401,7 @@ 6.5mm 100Rnd Mag Tracer (Yellow) 100 Schuss 6.5mm Magazin Leuchtspur (Gelb) - Магазин 100 патр. 6.5 мм трассирующих (Желтый) + Магазин 100 патр. 6.5 мм трассирующих (жёлтые) 6.5mm 100Colpi Caricatore Traccianti (giallo) 6.5 mm 100 ranný zásobník, stopovka (Žlutá) Magazine 6.5mm 100 balas tracejantes (amarelo) @@ -413,7 +413,7 @@ Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 100<br />Used in: MX SW Kaliber: 6.5x39 mm Leuchtspur - Gelb<br />Patronen: 100<br />Verwendet in: MX SW - Калибр: 6.5x39 мм, трассер Желтый<br />Патронов: 100<br />Используется в: MX SW + Калибр: 6.5x39 мм, жёлтый трассер<br /><br />Патронов: 100<br />Используется в: MX SW Calibro: 6.5x39 mm Traccianti - Gialli<br />Colpi: 100<br />Usati in: MX SW Kalibr: 6.5×39 mm Stopovka - Žlutá<br />Nábojů: 100<br />Použito v: MX SW Calibre: 6.5x39 mm Tracejante - Amarelo<br/>Balas: 100<br/>Usado em: MX SW @@ -425,7 +425,7 @@ 6.5mm 30Rnd Reload Tracer (Red) Mag 30 Schuss 6.5mm Nachlade-Leuchtspur (Rot) Magazin - Магазин 30 патр. 6.5 мм с послед. трас. (Красный) + Магазин 30 патр. 6.5 мм с послед. трас. (красные) 6.5mm 30Colpi Ricarica Traccianti (Rossi) Caricatore 6.5 mm 30 ranný zásobník, stopovka pro přebití (Červená) Recarregar magazine 6.5mm 30 balas tracejantes (vermelho) @@ -437,7 +437,7 @@ 6.5mm 30Rnd Reload Tracer (Yellow) Mag 30 Schuss 6.5mm Nachlade-Leuchtspur (Gelb) Magazin - Магазин 30 патр. 6.5 мм с послед. трас. (Желтый) + Магазин 30 патр. 6.5 мм с послед. трас. (жёлтые) 6.5mm 30Colpi Ricarica Traccianti (gialli) Caricatore 6.5 mm 30 ranný zásobník, stopovka pro přebití (Žlutá) Recarregar magazine 6.5mm 30 balas tracejantes (amarelo) @@ -449,7 +449,7 @@ 6.5mm 30Rnd Tracer (Red) Mag 30 Schuss 6.5mm Leuchtspur (Rot) Magazin - Магазин 30 патр. 6.5 мм трассирующих (Красный) + Магазин 30 патр. 6.5 мм трассирующих (красные) 6.5mm 30Colpi Traccianti (rossi) Caricatori 6.5 mm 30 ranný zásobník, stopovka (Červená) Magazine 6.5mm 30 balas tracejantes (vermelho) @@ -461,7 +461,7 @@ Caliber: 6.5x39 mm Tracer (Red) - Caseless<br />Rounds: 30<br />Used in: Katiba, Type 115 Kaliber: 6,5x39mm Leuchtspur (Rot) ‒ hülsenlos<br />Patronen: 30<br />Eingesetzt von: Katiba, Typ 115 - Калибр: 6.5x39 мм, трассер Красный безгильзовый<br />Патронов: 30<br />Используется в: Katiba, Type 115 + Калибр: 6.5x39 мм, красный безгильзовый трассер<br /><br />Патронов: 30<br />Используется в: Katiba, Type 115 Calibro: 6.5x39 mm Traccianti (Rossi) - Senza Bossolo<br />Colpi: 30<br />Usati in: Katiba, Type 115 Kalibr: 6.5×39 mm Stopovka - Červená - Beznábojnicová<br />Nábojů: 30<br />Použito v: Katiba, Type 115 Calibre: 6.5x39 mm Tracejante (Vermelho) - Sem Cartucho<br/>Balas: 30<br/>Usado em: Katiba, Type 115 @@ -473,7 +473,7 @@ 6.5mm 30Rnd Tracer (Yellow) Mag 30 Schuss 6.5mm Leuchtspur (Gelb) Magazin - Магазин 30 патр. 6.5 мм трассирующих (Желтый) + Магазин 30 патр. 6.5 мм трассирующих (жёлтые) 6.5mm 30 Colpi Traccianti (gialli) Caricatore 6.5 mm 30 ranný zásobník, stopovka (Žlutá) Magazine 6.5mm 30 balas tracejantes (amarelo) @@ -485,7 +485,7 @@ Caliber: 6.5x39 mm Tracer (Yellow) - Caseless<br />Rounds: 30<br />Used in: Katiba, Type 115 Kaliber: 6,5x39mm Leuchtspur (Rot) ‒ hülsenlos<br />Patronen: 30<br />Eingesetzt von: Katiba, Typ 115 - Калибр: 6.5x39 мм, трассер Желтый безгильзовый<br />Патронов: 30<br />Используется в: Katiba, Type 115 + Калибр: 6.5x39 мм, жёлтый безгильзовый трассер<br /><br />Патронов: 30<br />Используется в: Katiba, Type 115 Calibro: 6.5x39 mm Traccianti (Gialli) - Senza Bossolo<br />Colpi: 30<br />Usati in: Katiba, Type 115 Kalibr: 6.5×39 mm Stopovka - Žlutá - Beznábojnicová<br />Nábojů: 30<br />Použito v: Katiba, Type 115 Caliber: 6.5x39 mm Tracejante (Vermelho) - Sem Cartucho<br/>Balas: 30<br/>Usado em: Katiba, Type 115 @@ -497,7 +497,7 @@ 6.5 mm 200Rnd Belt Case Mixed (Green) 6,5 mm 200-Schuss-Gurtkiste Gemischt (grün) - Короб 200 патр. 6.5 мм TE4 (Зеленый) + Короб 200 патр. 6.5 мм TE4 (зелёные) 6.5mm 200Colpi Caricatore esteso Misti (Verdi) 6.5 mm 200 ranný pás, částečná stopovka (Zelená) Caixa de Cinto 6.5 mm 200 Balas Misturados (Verde) @@ -509,7 +509,7 @@ Caliber: 6.5x39 mm Mixed - Green<br />Rounds: 200<br />Used in: Mk200 Kaliber: 6.5x39 mm Gemischt - Grün<br />Patronen: 200<br />Verwendet in: Mk200 - Калибр: 6.5x39 мм, трассер каждый 4 Зеленый<br />Патронов: 200<br />Используется в: Mk200 + Калибр: 6.5x39 мм, каждый 4-ый зелёный трассер<br /><br />Патронов: 200<br />Используется в: Mk200 Calibro: 6.5x39 mm Misti - Verdi<br />Colpi: 200<br />Usati in: Mk200 Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 200<br />Použito v: Mk200 Calibre: 6.5x39 mm Misturado - Verde<br/>Balas: 200<br/>Usado em: Mk200 @@ -521,7 +521,7 @@ 6.5 mm 200Rnd Belt Case Mixed (Red) 6,5 mm 200-Schuss-Gurtkiste Gemischt (grün) - Короб 200 патр. 6.5 мм TE4 (Красный) + Короб 200 патр. 6.5 мм TE4 (красные) 6.5 mm 200Colpi Caritore maggiorato Misti (rossi) 6.5 mm 200 ranný pás, částečná stopovka (Červená) Caixa de Cinto 6.5 mm 200 balas misturadas (Vermelho) @@ -533,7 +533,7 @@ Caliber: 6.5x39 mm Mixed - Red<br />Rounds: 200<br />Used in: Mk200 Kaliber: 6.5x39 mm Mixed - Rot<br />Patronen: 200<br />Verwendet in: Mk200 - Калибр: 6.5x39 мм, трассер каждый 4 Красный<br />Патронов: 200<br />Используется в: Mk200 + Калибр: 6.5x39 мм, каждый 4-ый красный трассер<br /><br />Патронов: 200<br />Используется в: Mk200 Calibro: 6.5x39 mm Misti - Rossi<br />Colpi: 200<br />Usati in: Mk200 Kalibr: 6.5×39 mm Stopovka - Červená<br />Nábojů: 200<br />Použito v: Mk200 Caliber: 6.5x39 mm Misturado - Vermelho<br/>Balas: 200<br/>Usado em: Mk200 @@ -545,7 +545,7 @@ 6.5 mm 200Rnd Belt Case Tracer (Green) 6,5 mm 200-Schuss-Gurtkiste Leuchtspur (grün) - Короб 200 патр. 6.5 мм трассирующих (Зеленый) + Короб 200 патр. 6.5 мм трассирующих (зелёные) 6.5 mm 200Colpi Caricatore maggiorato Traccianti (verdi) 6.5 mm 200 ranný pás, částečná stopovka (Zelená) Caixa de Cinto 6;5 mm 200 balas tracejantes (Verde) @@ -557,7 +557,7 @@ Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 200<br />Used in: Mk200 Kaliber: 6.5x39 mm Leuchtspur - Grün<br />Patronen: 200<br />Verwendet in: Mk200 - Калибр: 6.5x39 мм, трассер Зеленый<br />Патронов: 200<br />Используется в: Mk200 + Калибр: 6.5x39 мм, зелёный трассер<br /><br />Патронов: 200<br />Используется в: Mk200 Calibri: 6.5x39 mm Traccianti - Verdi<br />Colpi: 200<br />Usati In: Mk200 Kalibr: 6.5×39 mm Stopovka - Zelená<br />Nábojů: 200<br />Použito v: Mk200 Kaliber: 6.5x39 mm Smugowa - Zielona<br />Sztuk: 200<br />Używana w: Mk200 @@ -570,7 +570,7 @@ 6.5 mm 200Rnd Belt Case Tracer (Red) 6,5 mm 200-Schuss-Gurtkiste Leuchtspur (rot) - Короб 200 патр. 6.5 мм трассирующих (Красный) + Короб 200 патр. 6.5 мм трассирующих (красные) 6.5 mm 200Colpi Caricatore Maggiorato Tracciante (rossi) 6.5 mm 200 ranný pás, stopovka (Červená) 6.5 mm Magazynek pudełkowy 200szt. Smugowa (Czerwona) @@ -583,7 +583,7 @@ Caliber: 6.5x39 mm Tracer - Red<br />Rounds: 200<br />Used in: Mk200 Kaliber: 6.5x39 mm Leuchtspur - Rot<br />Patronen: 200<br />Verwendet in: Mk200 - Калибр: 6.5x39 мм, трассер Красный<br />Патронов: 200<br />Используется в: Mk200 + Калибр: 6.5x39 мм, красный трассер<br /><br />Патронов: 200<br />Используется в: Mk200 Calibro: 6.5x39 mm Traccianti - Rossi<br />Colpi: 200<br />Usati in: Mk200 Kalibr: 6.5×39 mm Stopovka - Červená<br />Nábojů: 200<br />Použito v: Mk200 Kaliber: 6.5x39 mm Smugowa - Czerwona<br />Sztuk: 200<br />Używana w: Mk200 @@ -596,7 +596,7 @@ 7.62 mm 20Rnd Tracer (Green) Mag 7,62 mm 20-Schuss-Magazin Leuchtspur (Grün) - Магазин 20 патр. 7.62 мм трассирующих (Зеленый) + Магазин 20 патр. 7.62 мм трассирующих (зелёные) 7.62 mm 20Colpi Traccianti (verdi) Caricatore 7.62 mm 20 ranný zásobník, stopovka (Zelená) 7.62 mm Magazynek 20szt. Smugowa (Zielona) @@ -609,7 +609,7 @@ Caliber: 7.62x51 mm NATO Tracer - Green<br />Rounds: 20<br />Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Kaliber: 7,62x51 mm NATO Leuchtspur - grün<br />Patronen: 20<br />Eingesetzt von: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 - Калибр: 7.62x51 mm NATO, трассер Зеленый<br />Патронов: 20<br />Используется в: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + Калибр: 7.62x51 mm NATO, зелёный трассер<br /><br />Патронов: 20<br />Используется в: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Calibro: 7.62x51 mm NATO Traccianti - Verdi<br />Colpi: 20<br />Usati in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Kalibr: 7.62×51 mm NATO Stopovka - Zelená<br />Nábojů: 20<br />Použito v: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Kaliber: 7.62x51 mm NATO Smugowa - Zielona<br />Sztuk: 20<br />Używana w: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 @@ -622,7 +622,7 @@ 7.62 mm 20Rnd Tracer (Yellow) Mag 7,62 mm 20-Schuss-Magazin Leuchtspur (Gelb) - Магазин 20 патр. 7.62 мм трассирующих (Желтый) + Магазин 20 патр. 7.62 мм трассирующих (жёлтые) 7.62 mm 20Colpi Traccianti (Gialli) Caricatori 7.62 mm 20 ranný zásobník, stopovka (Žlutá) 7.62 mm Magazynek 20szt. Smugowa (Żółta) @@ -635,7 +635,7 @@ Caliber: 7.62x51 mm NATO Tracer - Yellow<br />Rounds: 20<br />Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Kaliber: 7,62x51 mm NATO Leuchtspur - gelb<br />Patronen: 20<br />Eingesetzt von: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 - Калибр: 7.62x51 mm NATO, трассер Желтый<br />Патронов: 20<br />Используется в: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + Калибр: 7.62x51 mm NATO, жёлтый трассер<br /><br />Патронов: 20<br />Используется в: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Calibro: 7.62x51 mm NATO Traccianti - Gialli<br />Colpi: 20<br />Usati in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Kalibr: 7.62×51 mm NATO Stopovka - Žlutá<br />Nábojů: 20<br />Použito v: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 Kaliber: 7.62x51 mm NATO Smugowa - Żółta<br />Sztuk: 20<br />Używana w: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 @@ -648,7 +648,7 @@ 7.62mm 150Rnd Box Mixed (Red) 7.62mm 150 Schuss Kiste Gemischt (rot) - Короб 150 патр. 7.62 мм TE4 (Красный) + Короб 150 патр. 7.62 мм TE4 (красные) 7.62mm 150Colpi Caricatore Maggiorato Misti (rossi) 7.62 mm 150 ranný pás, částečná stopovka (Červená) 7.62 mm Magazynek pudełkowy 150szt. Mieszana (Czerwona) @@ -661,7 +661,7 @@ 7.62mm 150Rnd Box Mixed (Yellow) 7.62mm 150 Schuss Kiste Gemischt (gelb) - Короб 150 патр. 7.62 мм TE4 (Желтый) + Короб 150 патр. 7.62 мм TE4 (жёлтые) 7.62mm 150Colpi Caricatore Maggiorato Misti (Gialli) 7.62 mm 150 ranný pás, částečná stopovka (Žlutá) 7.62 mm Magazynek pudełkowy 150szt. Mieszana (Żółta) @@ -674,7 +674,7 @@ 7.62mm 150Rnd Box Tracer (Red) 7.62mm 150 Schuss Kiste Leuchtspur (rot) - Короб 150 патр. 7.62 мм трассирующих (Красный) + Короб 150 патр. 7.62 мм трассирующих (красные) 7.62mm 150Colpi Caricatore Maggiorato (Rossi) 7.62 mm 150 ranný pás, stopovka (Červená) 7.62mm Magazynek pudełkowy 150szt. Smugowa (Czerwona) @@ -687,7 +687,7 @@ Caliber: 7.62x54 mm Tracer - Red<br />Rounds: 150<br />Used in: Zafir Kaliber: 7.62x54 mm Leuchtspur - Rot<br />Patronen: 150<br />Verwendet in: Zafir - Калибр: 7.62x51 mm NATO, трассер Красный<br />Патронов: 150<br />Используется в: Zafir + Калибр: 7.62x51 mm NATO, красный трассер<br /><br />Патронов: 150<br />Используется в: Zafir Calibro: 7.62x54 mm Traccianti - Rossi<br />Colpi: 150<br />Usati in: Zafir Kalibr: 7.62×54 mm Stopovka - Červená<br />Nábojů: 150<br />Použito v: Zafir Kaliber: 7.62x54 mm Smugowa - Czerwona<br />Sztuk: 150<br />Używana w: Zafir @@ -700,7 +700,7 @@ 7.62mm 150Rnd Box Tracer (Yellow) 7.62mm 150 Schuss Kiste Leuchtspur (Rot) - Короб 150 патр. 7.62 мм трассирующих (Желтый) + Короб 150 патр. 7.62 мм трассирующих (жёлтые) 7.62mm 150Colpi Caricatore Maggiorato Traccianti (gialli) 7.62 mm 150 ranný pás, stopovka (Žlutá) 7.62 mm Magazynek pudełkowy 150szt. Smugowa (Żółta) @@ -713,7 +713,7 @@ Caliber: 7.62x54 mm Tracer - Yellow<br />Rounds: 150<br />Used in: Zafir Kaliber: 7.62x54 mm Leuchtspur - Gelb<br />Patronen: 150<br />Verwendet in: Zafir - Калибр: 7.62x51 mm NATO, трассер Желтый<br />Патронов: 150<br />Используется в: Zafir + Калибр: 7.62x51 mm NATO, трассер Жёлтый<br />Патронов: 150<br />Используется в: Zafir Calibro: 7.62x54 mm Traccianti - Gialli<br />Colpi: 150<br />Usati in: Zafir Kalibr: 7.62×54 mm Stopovka - Žlutá<br />Nábojů: 150<br />Použito v: Zafir Kaliber: 7.62x54 mm Smugowa - Żółta<br />Sztuk: 150<br />Używana w: Zafir @@ -726,7 +726,7 @@ 9.3mm 150Rnd Belt Mixed (Yellow) 9.3mm 150 Schuss Gurt gemischt (Gelb) - Лента 150 патр. 9.3 мм TE4 (Желтый) + Лента 150 патр. 9.3 мм TE4 (жёлтые) 9.3mm 150Colpi Caricatore Maggiorato (Giallo) 9.3 mm 150 ranný pás, částečná stopovka (Žlutá) 9.3 mm Taśma 150szt. Mieszana (Żółta) @@ -739,7 +739,7 @@ 9.3mm 150Rnd Belt Mixed (Red) 9.3mm 150 Schuss Gurt gemischt (Rot) - Лента 150 патр. 9.3 мм TE4 (Красный) + Лента 150 патр. 9.3 мм TE4 (красные) 9.3mm 150Colpi Caricatore Maggiorato (Rosso) 9.3 mm 150 ranný pás, částečná stopovka (Červená) 9.3 mm Taśma 150szt. Mieszana (Czerwona) @@ -752,7 +752,7 @@ .338 NM 130Rnd Belt Mixed (Yellow) .338 NM 130 Schuss Gurt gemischt (gelb) - Лента 130 патр. .338 NM TE4 (Желтый) + Лента 130 патр. .338 NM TE4 (жёлтые) .338 NM 130Colpi Caricatore a nastro Misto (giallo) .338 NM 130 ranný pás, částečná stopovka (Žlutá) .338 NM Taśma 130szt. Mieszana (Żółta) @@ -765,7 +765,7 @@ .338 NM 130Rnd Belt Mixed (Green) .338 NM 130 Schuss Gurt gemischt (grün) - Лента 130 патр. .338 NM TE4 (Зеленый) + Лента 130 патр. .338 NM TE4 (зелёные) .338 NM 130Colpi Caricatore a nastro Misto (Verde) .338 NM 130 ranný pás, částečná stopovka (Zelená) .338 NM Taśma 130szt. Mieszana (Zielona) From 1315cb77e6c7af24ca541ac40f6613a081e399bc Mon Sep 17 00:00:00 2001 From: KJW <100206101+SpicyBagpipes@users.noreply.github.com> Date: Thu, 8 Dec 2022 21:37:33 +0000 Subject: [PATCH 88/92] Update fnc_showAltimeter.sqf (#9108) Bug fix CBA_fnc_removePerFrameEventHandler was used to remove the calculations for the altimeter, but does not exist. Replaced with CBA_fnc_removePerFrameHandler to rectify this issue. --- addons/parachute/functions/fnc_showAltimeter.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index e31d2863eb..63930891fe 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -32,12 +32,12 @@ private _TimeText = _display displayCtrl 1001; _args params ["_unit", "_oldHeight", "_prevTime", "_HeightText", "_DecendRate", "_TimeText"]; if !(GVAR(AltimeterActive)) exitWith { - _pfhID call CBA_fnc_removePerFrameEventHandler; + _pfhID call CBA_fnc_removePerFrameHandler; }; if !("ACE_Altimeter" in assignedItems _unit) exitWith { call FUNC(hideAltimeter); - _pfhID call CBA_fnc_removePerFrameEventHandler; + _pfhID call CBA_fnc_removePerFrameHandler; }; private _hour = floor daytime; From c241f2e2a20e4a3c4ca22dd0d81a7b5fa4457c8e Mon Sep 17 00:00:00 2001 From: GhostIsSpooky <69561145+Salluci@users.noreply.github.com> Date: Sat, 10 Dec 2022 17:15:28 -0300 Subject: [PATCH 89/92] fix config lookup (#9106) --- addons/csw/functions/fnc_reload_canLoadMagazine.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/csw/functions/fnc_reload_canLoadMagazine.sqf b/addons/csw/functions/fnc_reload_canLoadMagazine.sqf index d026586eb0..1fbd2e4708 100644 --- a/addons/csw/functions/fnc_reload_canLoadMagazine.sqf +++ b/addons/csw/functions/fnc_reload_canLoadMagazine.sqf @@ -38,6 +38,7 @@ if ( // solve config lookups private _cfgMagazines = configFile >> "CfgMagazines"; private _cfgMagazinesCarryMag = _cfgMagazines >> _carryMag; +private _cfgGroupsCarryMag = configFile >> QGVAR(groups) >> _carryMag; private _desiredAmmo = getNumber (configOf _vehicle >> QUOTE(ADDON) >> "desiredAmmo"); if (_desiredAmmo == 0) then { _desiredAmmo = 100; }; @@ -53,7 +54,7 @@ scopeName "main"; _loadedMag = _xMag; if (_xAmmo > 0) then { // There is a magazine with ammo loaded in the turret (are there any multi-muzzle static weapons??), see if we can add to this mag - if (getNumber (_cfgMagazinesCarryMag >> _xMag) != 1) exitWith { + if (getNumber (_cfgGroupsCarryMag >> _xMag) != 1) exitWith { [false, _loadedMag, -4, false] breakOut "main"; // Carry mag cannot be added to existing vehicle mag (e.g. red to green tracers) }; if (getNumber (_cfgMagazinesCarryMag >> "ACE_isBelt") == 0) exitWith { From e21ffc4c328840a68338a2c98b02b042d32cbdc9 Mon Sep 17 00:00:00 2001 From: TACHarsis <101965352+TACHarsis@users.noreply.github.com> Date: Fri, 6 Jan 2023 03:45:13 +0100 Subject: [PATCH 90/92] Arsenal - Fix non-local loop variable use in fnc_fillRightPanel.sqf (#9115) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed use of loop variable from outside of function and using local variable instead * Update addons/arsenal/functions/fnc_fillRightPanel.sqf Co-authored-by: Jouni Järvinen Co-authored-by: Jouni Järvinen --- addons/arsenal/functions/fnc_fillRightPanel.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/arsenal/functions/fnc_fillRightPanel.sqf b/addons/arsenal/functions/fnc_fillRightPanel.sqf index 281662ec0c..9ad7bb3c5a 100644 --- a/addons/arsenal/functions/fnc_fillRightPanel.sqf +++ b/addons/arsenal/functions/fnc_fillRightPanel.sqf @@ -65,12 +65,12 @@ private _fnc_fill_right_Container = { private _lbAdd = _ctrlPanel lnbAddRow ["", _displayName, "0"]; private _columns = count lnbGetColumnsPosition _ctrlPanel; - _ctrlPanel lnbSetData [[_lbAdd, 0], _x]; + _ctrlPanel lnbSetData [[_lbAdd, 0], _className]; _ctrlPanel lnbSetPicture [[_lbAdd, 0], _picture]; _ctrlPanel lnbSetValue [[_lbAdd, 0], _mass]; - _ctrlPanel setVariable [_x, _mass]; + _ctrlPanel setVariable [_className, _mass]; _ctrlPanel lnbSetValue [[_lbAdd, 2], [0, 1] select (_isUnique)]; - _ctrlPanel lbSetTooltip [_lbAdd * _columns,format ["%1\n%2", _displayName, _x]]; + _ctrlPanel lbSetTooltip [_lbAdd * _columns, format ["%1\n%2", _displayName, _className]]; }; // Retrieve compatible mags From 6860b557fbcda80a83101e4e12b41859e3c2b3dd Mon Sep 17 00:00:00 2001 From: Mike-MF Date: Fri, 6 Jan 2023 21:31:36 +0000 Subject: [PATCH 91/92] Western Sahara Compatibility (#9082) --- optionals/compat_ws/$PBOPREFIX$ | 1 + optionals/compat_ws/CfgWeapons.hpp | 79 ++++++++++++++++++++++++ optionals/compat_ws/config.cpp | 17 +++++ optionals/compat_ws/script_component.hpp | 6 ++ 4 files changed, 103 insertions(+) create mode 100644 optionals/compat_ws/$PBOPREFIX$ create mode 100644 optionals/compat_ws/CfgWeapons.hpp create mode 100644 optionals/compat_ws/config.cpp create mode 100644 optionals/compat_ws/script_component.hpp diff --git a/optionals/compat_ws/$PBOPREFIX$ b/optionals/compat_ws/$PBOPREFIX$ new file mode 100644 index 0000000000..a025a8275e --- /dev/null +++ b/optionals/compat_ws/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_ws diff --git a/optionals/compat_ws/CfgWeapons.hpp b/optionals/compat_ws/CfgWeapons.hpp new file mode 100644 index 0000000000..10e4b68eb2 --- /dev/null +++ b/optionals/compat_ws/CfgWeapons.hpp @@ -0,0 +1,79 @@ +class CfgWeapons { + // AA40 + class Rifle_Base_F; + class sgun_aa40_base_lxWS: Rifle_Base_F { + ACE_barrelLength = 457; + ACE_barrelTwist = 0.0; + ACE_twistDirection = 0; + }; + + // Galat Arm + class arifle_Galat_base_lxWS: Rifle_Base_F { + ACE_barrelLength = 535; + ACE_barrelTwist = 304.8; + ACE_twistDirection = 1; + }; + + // SA-77 + class Rifle_Long_Base_F; + class LMG_S77_base_lxWS: Rifle_Long_Base_F { + ACE_barrelLength = 550; + ACE_barrelTwist = 304.8; + ACE_twistDirection = 1; + }; + class LMG_S77_Compact_base_lxWS: LMG_S77_base_lxWS { + ACE_barrelLength = 500; + ACE_barrelTwist = 304.8; + ACE_twistDirection = 1; + }; + + // SLR + class DMR_06_base_F; + class arifle_SLR_lxWS: DMR_06_base_F { + ACE_barrelLength = 533; + ACE_barrelTwist = 279.4; + ACE_twistDirection = 1; + }; + + // Velko R4/R5 + class arifle_Velko_base_lxWS: arifle_Galat_base_lxWS { + ACE_barrelLength = 460; + ACE_barrelTwist = 304.8; + ACE_twistDirection = 1; + }; + class arifle_VelkoR5_lxWS: arifle_Velko_base_lxWS { + ACE_barrelLength = 332; + ACE_barrelTwist = 304.8; + ACE_twistDirection = 1; + }; + + // XMS - Weird off-shoot from the XM8 rifles so there is no data for barrel lengths or twists. Used the vanilla CTAR as a baseline for the values. + class arifle_SPAR_01_base_F; + class arifle_XMS_Base_lxWS: arifle_SPAR_01_base_F { + ACE_barrelLength = 406.4; + ACE_barrelTwist = 178.0; + ACE_twistDirection = 1; + }; + + // Headgear + // ION Cap (Headphones) + class lxWS_H_CapB_rvs_blk; + class lxWS_H_CapB_rvs_blk_ION: lxWS_H_CapB_rvs_blk { + ace_hearing_protection = 0.75; + ace_hearing_lowerVolume = 0.2; + }; + + // Tank helmet + class HelmetBase; + class lxWS_H_Tank_tan_F: HelmetBase { + ace_hearing_protection = 0.85; + ace_hearing_lowerVolume = 0.6; + }; + + // Headphones, inherited hearing protection + class H_Cap_headphones; + class lxWS_H_Headset: H_Cap_headphones { + ace_hearing_protection = 0; + ace_hearing_lowerVolume = 0; + }; +}; diff --git a/optionals/compat_ws/config.cpp b/optionals/compat_ws/config.cpp new file mode 100644 index 0000000000..a4533a1119 --- /dev/null +++ b/optionals/compat_ws/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"data_f_lxWS_Loadorder"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Mike"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/compat_ws/script_component.hpp b/optionals/compat_ws/script_component.hpp new file mode 100644 index 0000000000..7607cd056b --- /dev/null +++ b/optionals/compat_ws/script_component.hpp @@ -0,0 +1,6 @@ +#define COMPONENT compat_ws +#define COMPONENT_BEAUTIFIED Western Sahara Compatibility + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From a997ae60bff7984d09542e7db203b0f276cb41c3 Mon Sep 17 00:00:00 2001 From: ace3mod Date: Fri, 6 Jan 2023 22:32:11 +0100 Subject: [PATCH 92/92] [Docs] Update component dependencies Automatically committed through CI. [ci skip] --- docs/_includes/dependencies_list.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index e66fe20f31..3404042be0 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -678,6 +678,10 @@ - `loadorder_f_vietnam` {% endif %} +{% if include.component == "compat_ws" %} +- `data_f_lxWS_Loadorder` +{% endif %} + {% if include.component == "noactionmenu" %} - `ace_common` {% endif %}