From dff62c33beeeb23bb24530982abbe5e0dbf53b13 Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 21 Mar 2017 11:57:04 +0100 Subject: [PATCH 01/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 100 ++++++++++++++++++++--------------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 1656b591f7..2dcaf20605 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -18,67 +18,83 @@ version: Horus ATragMX software considers atmospheric conditions, gun data, ammunition, range, speed and muzzle velocity to calculate precise aiming solutions with "come-up" results – and even accounts for Coriolis and spin drift effects. ATragMX, loaded on a handheld computer made by TDS Recon, is easy to use and lightning-fast. The Recon meets the rigorous MIL-STD-810F military standard for drops, vibration, humidity, altitude and extreme temperatures. -## 2. Usage +## 2. Requirements -### 2.1 Example with M14 and default 7.62mm 20Rnd Mag +- [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) +- [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) +- [Kestrel 4500](https://ace3mod.com/wiki/feature/kestrel4500.html) +- [Scopes](https://ace3mod.com/wiki/feature/scopes.html) +- [Weather](https://ace3mod.com/wiki/feature/weather.html) + +## 3. Usage + +### 3.1 Open AtragMx + +#### 3.1.1 User interface + +#### 3.1.2 Custom key + +#### 3.1.3 Inventory + +### 3.2 Example with M14 and default 7.62mm 20Rnd Mag **Start of the mission:** - - Open the Range Card and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. - +- Open the Range Card and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. RangeCard - - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. (cf manual, p 15) - - `Open Gun` the 7.62x51mm M80 in the `GunList`. (cf manual, p 25) - - Select `E` (English unit) at the top right. (cf manual, p 10) - - Open the `Gun` column, check and update the `Bore`, the `Rifle Twist` and `Done`. - - Select `M` (Metric unit) at the top right. - - Open the `Gun` column, check and update the `Muzzle Velocity`, the `Zero Range` and `Done`. - - *The Muzzle Velocity Table will be automatically updated.* (cf manual, p 22) - - Optionally, `Save Gun` and `Done` in the `GunList`. +- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) +- `Open Gun` the 7.62x51mm M80 in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25) +- Select `E` (English unit) at the top right. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=10) +- Open the `Gun` column, check and update the `Bore`, the `Rifle Twist` and `Done`. +- Select `M` (Metric unit) at the top right. +- Open the `Gun` column, check and update the `Muzzle Velocity`, the `Zero Range` and `Done`. +- *The Muzzle Velocity Table will be automatically updated.* [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) +- *(Must be edited manually for specific cartridges according with the range card)* +- Optionally, `Save Gun` and `Done` in the `GunList`. **In position:** - - Update the `Atmsphr` column with the Kestrel and `Done`. (cf manual, p 15) - - *Check the new `Muzzle Velocity` in the `Gun` column.* - - Update the `Target` column. (cf manual, p 16, 30, 32, 33) - - Apply the vertical and horizontal elevations on the scope. - - Control the breath and press. +- Update the `Atmsphr` column with the Kestrel and `Done`. +- *Check the new `Muzzle Velocity` in the `Gun` column.* +- Update the `Target` column. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) +- Apply the vertical and horizontal elevations on the scope. +- Control the breath and press. -### 2.2 Example with Truing tool +### 3.3 Example with Truing tool **Start of the mission:** - - Select `Drag Coef Table` in the `Options` menu. (cf manual, p 22) - - Add the `ZR` and the `C1` (`Gun` column) in the table and `Done`. +- Select `Drag Coef Table` in the `Options` menu. +- Add the `ZR` and the `C1` (`Gun` column) in the table and `Done`. **In position:** - - Open the `Truing Drop` in the `Options` menu. (cf manual, p 23) - - Add the actual `Target Range` in the `SUPER` column and `Calc`. - - Add the same `Target Range` in the `SUB` column and `Calc`. - - Apply the actual scope elevation in the `Drop` field and `Calc`. - - `Accept` the new `C1`, `Gun` column and `Elev` are updated. - - *The Drag Coefficient Table will be automatically updated.* - - Optionally, `Save Gun` and `Done` in the `GunList`. +- Open the `Truing Drop` in the `Options` menu. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=23) +- Add the actual `Target Range` in the `SUPER` column and `Calc`. +- Add the same `Target Range` in the `SUB` column and `Calc`. +- Apply the actual scope elevation in the `Drop` field and `Calc`. +- `Accept` the new `C1`, `Gun` column and `Elev` are updated. +- *The Drag Coefficient Table will be automatically updated.* +- Optionally, `Save Gun` and `Done` in the `GunList`. - Calculation +Calculation - - If a new `Target Range` is applied in the `Target` column, select `Drag Coef Table` in the `Options` menu and `Done`. - - The ballistic coefficient `C1` and the elevation `Elev` will be recalculated. +- If a new `Target Range` is applied in the `Target` column, select `Drag Coef Table` in the `Options` menu and `Done`. +- The ballistic coefficient `C1` and the elevation `Elev` will be recalculated. - Interpolation +Interpolation -### 2.3 Example with overwritten zero distance +### 3.4 Example with overwritten zero distance - - The `Default zero distance` can be overwritten with the `Scopes module` or the `serverconfig.hpp`. - - In this case, the Range Card will be automatically updated, NOT the AtragMx. - - Open the `Gun` column, check and update the `Zero Range` and `Done`. +- The `Default zero distance` can be overwritten with the `Scopes module` or the `serverconfig.hpp`. +- In this case, the Range Card will be automatically updated, NOT the AtragMx. +- Open the `Gun` column, check and update the `Zero Range` and `Done`. - Default zero distance +Default zero distance -## 3. Official Manual and Horus Videos +## 4. Official Manual and Horus Videos + +- [Official Manual](https://github.com/acemod/ACE3/blob/master/extras/manual_Horus_ATrag-v385.pdf) +- [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) +- [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) - - [Official Manual](https://github.com/acemod/ACE3/blob/master/extras/manual_Horus_ATrag-v385.pdf) - - [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) - - [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) - -## 4. Dependencies +## 5. Dependencies {% include dependencies_list.md component="atragmx" %} From c1360d41498272f471b3b3262150e1211b279559 Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 21 Mar 2017 14:26:07 +0100 Subject: [PATCH 02/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 2dcaf20605..c802e7e009 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -18,6 +18,7 @@ version: Horus ATragMX software considers atmospheric conditions, gun data, ammunition, range, speed and muzzle velocity to calculate precise aiming solutions with "come-up" results – and even accounts for Coriolis and spin drift effects. ATragMX, loaded on a handheld computer made by TDS Recon, is easy to use and lightning-fast. The Recon meets the rigorous MIL-STD-810F military standard for drops, vibration, humidity, altitude and extreme temperatures. + ## 2. Requirements - [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) @@ -26,6 +27,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - [Scopes](https://ace3mod.com/wiki/feature/scopes.html) - [Weather](https://ace3mod.com/wiki/feature/weather.html) + ## 3. Usage ### 3.1 Open AtragMx @@ -55,7 +57,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r **In position:** - Update the `Atmsphr` column with the Kestrel and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* -- Update the `Target` column. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) +- Update the `Target` column. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) - Apply the vertical and horizontal elevations on the scope. - Control the breath and press. @@ -88,12 +90,14 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Open the `Gun` column, check and update the `Zero Range` and `Done`. Default zero distance + ## 4. Official Manual and Horus Videos - [Official Manual](https://github.com/acemod/ACE3/blob/master/extras/manual_Horus_ATrag-v385.pdf) - [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) - [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) + ## 5. Dependencies From 66fe97c03c2e5bbf6f728cfb1ffad57c9fc6334a Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 21 Mar 2017 14:30:09 +0100 Subject: [PATCH 03/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index c802e7e009..e9162882b4 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -73,7 +73,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Add the same `Target Range` in the `SUB` column and `Calc`. - Apply the actual scope elevation in the `Drop` field and `Calc`. - `Accept` the new `C1`, `Gun` column and `Elev` are updated. -- *The Drag Coefficient Table will be automatically updated.* +- *The Drag Coefficient Table will be automatically updated.* [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) - Optionally, `Save Gun` and `Done` in the `GunList`. Calculation From 5e439055c008005e851b04210a65ae0c1f66742d Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 21 Mar 2017 14:39:23 +0100 Subject: [PATCH 04/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index e9162882b4..f511464cc6 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -57,7 +57,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r **In position:** - Update the `Atmsphr` column with the Kestrel and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* -- Update the `Target` column. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) +- Update the `Target` column. [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) - Apply the vertical and horizontal elevations on the scope. - Control the breath and press. From e2cbb817770bf58acfdbe8a04cd4cf3e4cb89e5b Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 21 Mar 2017 14:49:21 +0100 Subject: [PATCH 05/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index f511464cc6..ad555fa1ec 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -24,7 +24,6 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) - [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) - [Kestrel 4500](https://ace3mod.com/wiki/feature/kestrel4500.html) -- [Scopes](https://ace3mod.com/wiki/feature/scopes.html) - [Weather](https://ace3mod.com/wiki/feature/weather.html) @@ -58,7 +57,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Update the `Atmsphr` column with the Kestrel and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* - Update the `Target` column. [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) -- Apply the vertical and horizontal elevations on the scope. +- Apply the vertical and horizontal elevations on the [scope](https://ace3mod.com/wiki/feature/scopes.html). - Control the breath and press. ### 3.3 Example with Truing tool From 86e806a04f2553525cd03b7308232fa4e2e6d2f7 Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Tue, 21 Mar 2017 18:09:49 +0100 Subject: [PATCH 06/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index ad555fa1ec..34cd439c50 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -22,8 +22,6 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ## 2. Requirements - [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) -- [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) -- [Kestrel 4500](https://ace3mod.com/wiki/feature/kestrel4500.html) - [Weather](https://ace3mod.com/wiki/feature/weather.html) @@ -40,7 +38,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ### 3.2 Example with M14 and default 7.62mm 20Rnd Mag **Start of the mission:** -- Open the Range Card and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. +- Open the [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. RangeCard - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) @@ -54,7 +52,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Optionally, `Save Gun` and `Done` in the `GunList`. **In position:** -- Update the `Atmsphr` column with the Kestrel and `Done`. +- Update the `Atmsphr` column with the [Kestrel 4500](https://ace3mod.com/wiki/feature/kestrel4500.html) and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* - Update the `Target` column. [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) - Apply the vertical and horizontal elevations on the [scope](https://ace3mod.com/wiki/feature/scopes.html). @@ -97,7 +95,6 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) - [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) - ## 5. Dependencies {% include dependencies_list.md component="atragmx" %} From c625dcda26dcc54c2a40e9c78f6683221bc6ded2 Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Wed, 22 Mar 2017 11:23:43 +0100 Subject: [PATCH 07/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 34cd439c50..3655cf8825 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -27,9 +27,12 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ## 3. Usage -### 3.1 Open AtragMx +### 3.1 Opening the AtragMx #### 3.1.1 User interface +- Open the self interaction menu Ctrl + ⊞ Win +- Select `Equipment` +- Select `Open AtragMx` #### 3.1.2 Custom key From 203a2796961410996553c914ee2369e148b4391c Mon Sep 17 00:00:00 2001 From: J3aLeiNe Date: Thu, 23 Mar 2017 14:42:45 +0100 Subject: [PATCH 08/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 3655cf8825..2b67e59159 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -29,7 +29,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ### 3.1 Opening the AtragMx -#### 3.1.1 User interface +#### 3.1.1 Interaction Menu - Open the self interaction menu Ctrl + ⊞ Win - Select `Equipment` - Select `Open AtragMx` From 462a11d92aa2f49c68696aabef8ddba9e0656ce7 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Fri, 24 Mar 2017 14:09:43 +0100 Subject: [PATCH 09/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 2b67e59159..7dcb9c5a8c 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -19,11 +19,8 @@ version: Horus ATragMX software considers atmospheric conditions, gun data, ammunition, range, speed and muzzle velocity to calculate precise aiming solutions with "come-up" results – and even accounts for Coriolis and spin drift effects. ATragMX, loaded on a handheld computer made by TDS Recon, is easy to use and lightning-fast. The Recon meets the rigorous MIL-STD-810F military standard for drops, vibration, humidity, altitude and extreme temperatures. -## 2. Requirements - +## 2. Requirement - [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) -- [Weather](https://ace3mod.com/wiki/feature/weather.html) - ## 3. Usage @@ -35,8 +32,10 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Select `Open AtragMx` #### 3.1.2 Custom key +- `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment` #### 3.1.3 Inventory +Inventory ### 3.2 Example with M14 and default 7.62mm 20Rnd Mag @@ -57,7 +56,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r **In position:** - Update the `Atmsphr` column with the [Kestrel 4500](https://ace3mod.com/wiki/feature/kestrel4500.html) and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* -- Update the `Target` column. [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) +- Update the `Target` column (the [wind arrow](https://ace3mod.com/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) - Apply the vertical and horizontal elevations on the [scope](https://ace3mod.com/wiki/feature/scopes.html). - Control the breath and press. @@ -85,8 +84,8 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ### 3.4 Example with overwritten zero distance -- The `Default zero distance` can be overwritten with the `Scopes module` or the `serverconfig.hpp`. -- In this case, the Range Card will be automatically updated, NOT the AtragMx. +- The `Default zero distance` can be overwritten with the [Scopes module](https://ace3mod.com/wiki/feature/scopes.html) or the [Settings Framework](https://ace3mod.com/wiki/framework/settings-framework.html). +- In this case, the [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx. - Open the `Gun` column, check and update the `Zero Range` and `Done`. Default zero distance From 70502e609b11584edbc5307051a9852f99c15c4c Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Fri, 24 Mar 2017 14:23:13 +0100 Subject: [PATCH 10/94] Add files via upload --- docs/img/wiki/feature/abtools_inventory.png | Bin 0 -> 188418 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/img/wiki/feature/abtools_inventory.png diff --git a/docs/img/wiki/feature/abtools_inventory.png b/docs/img/wiki/feature/abtools_inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..72e1607689744f6466bbce52f5d9c20a905e480c GIT binary patch literal 188418 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 P-6Vm7tqY2U^h^E+$6sU6 literal 0 HcmV?d00001 From 04926173db02076f13a09409dd2ba958210f2f95 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Sat, 25 Mar 2017 09:09:35 +0100 Subject: [PATCH 11/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 7dcb9c5a8c..ca391f03e7 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -22,6 +22,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ## 2. Requirement - [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) + ## 3. Usage ### 3.1 Opening the AtragMx @@ -88,7 +89,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - In this case, the [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx. - Open the `Gun` column, check and update the `Zero Range` and `Done`. -Default zero distance +Zero distance 300m ## 4. Official Manual and Horus Videos @@ -97,6 +98,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) - [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) + ## 5. Dependencies {% include dependencies_list.md component="atragmx" %} From a58a39f35af4b2d296a6baa2730343c724129e58 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Sat, 25 Mar 2017 12:44:38 +0100 Subject: [PATCH 12/94] fix links and `alt` texts --- docs/wiki/feature/atragmx.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index ca391f03e7..cff6aa9966 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -20,7 +20,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ## 2. Requirement -- [Advanced Ballistics module enabled](https://ace3mod.com/wiki/feature/advanced-ballistics.html) +- [Advanced Ballistics module enabled]({{ site.baseurl }}/wiki/feature/advanced-ballistics.html) ## 3. Usage @@ -36,12 +36,12 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment` #### 3.1.3 Inventory -Inventory +Inventory management ### 3.2 Example with M14 and default 7.62mm 20Rnd Mag **Start of the mission:** -- Open the [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. +- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. RangeCard - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) @@ -55,10 +55,10 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Optionally, `Save Gun` and `Done` in the `GunList`. **In position:** -- Update the `Atmsphr` column with the [Kestrel 4500](https://ace3mod.com/wiki/feature/kestrel4500.html) and `Done`. +- Update the `Atmsphr` column with the [Kestrel 4500]({{ site.baseurl }}/wiki/feature/kestrel4500.html) and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* -- Update the `Target` column (the [wind arrow](https://ace3mod.com/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) -- Apply the vertical and horizontal elevations on the [scope](https://ace3mod.com/wiki/feature/scopes.html). +- Update the `Target` column (the [wind arrow]({{ site.baseurl }}/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) +- Apply the vertical and horizontal elevations on the [scope]({{ site.baseurl }}/wiki/feature/scopes.html). - Control the breath and press. ### 3.3 Example with Truing tool @@ -85,8 +85,8 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ### 3.4 Example with overwritten zero distance -- The `Default zero distance` can be overwritten with the [Scopes module](https://ace3mod.com/wiki/feature/scopes.html) or the [Settings Framework](https://ace3mod.com/wiki/framework/settings-framework.html). -- In this case, the [Range Card](https://ace3mod.com/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx. +- The `Default zero distance` can be overwritten with the [Scopes module]({{ site.baseurl }}/wiki/feature/scopes.html) or the [Settings Framework]({{ site.baseurl }}/wiki/framework/settings-framework.html). +- In this case, the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx. - Open the `Gun` column, check and update the `Zero Range` and `Done`. Zero distance 300m @@ -94,7 +94,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ## 4. Official Manual and Horus Videos -- [Official Manual](https://github.com/acemod/ACE3/blob/master/extras/manual_Horus_ATrag-v385.pdf) +- [Official Manual]({{ site.ace.githubUrl }}/blob/master/extras/manual_Horus_ATrag-v385.pdf) - [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) - [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) From 0da039758e47aeec4706fa1ac454caeb034cec57 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Sun, 26 Mar 2017 17:30:52 +0200 Subject: [PATCH 13/94] Wiki scope updated_1 (#5037) * Update scopes.md * Update scopes.md * Update scopes.md * Add files via upload * Update scopes.md * fix links and `alt` texts * Delete scope_module.jpg * Add files via upload * Update scopes.md --- docs/img/wiki/feature/scope_module.jpg | Bin 0 -> 203517 bytes docs/wiki/feature/scopes.md | 1 + 2 files changed, 1 insertion(+) create mode 100644 docs/img/wiki/feature/scope_module.jpg diff --git a/docs/img/wiki/feature/scope_module.jpg b/docs/img/wiki/feature/scope_module.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19629bddd7dd41f72941940d9b7086e12e74cf3e GIT binary patch literal 203517 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�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

bvu!}Yht6U8~e|-!rE!`_>T* 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 Q6jW5E-zPV!Z literal 0 HcmV?d00001 diff --git a/docs/wiki/feature/scopes.md b/docs/wiki/feature/scopes.md index b51545b569..8f496a90d9 100644 --- a/docs/wiki/feature/scopes.md +++ b/docs/wiki/feature/scopes.md @@ -34,6 +34,7 @@ Please not that the following key combinations are ACE3 default key binds. - Major adjustment left Ctrl + ⇧ Shift + page Down. ### 2.3 Scopes Module + Editor's scopes module From 33dd0b570778d52d85e8ffe971c123ae61a3aaf5 Mon Sep 17 00:00:00 2001 From: 11RDP-LoupVert Date: Mon, 27 Mar 2017 02:38:18 +0200 Subject: [PATCH 14/94] French additions (Cargo) (#5040) Minor French text additions --- addons/cargo/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 191e8929f1..c85d99b7f8 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -243,6 +243,7 @@ 空中投下 Zrzut zaopatrzenia 공중 투하 + Largage aérien Unlevel Flight @@ -250,6 +251,7 @@ 機体が水平ではありません Nierówny lot 기체가 수평이 아닙니다 + Rétablir l'assiette From 94826cc8d64cb63b1af0055d8a07e8fce551b9ff Mon Sep 17 00:00:00 2001 From: 11RDP-LoupVert Date: Mon, 27 Mar 2017 02:39:05 +0200 Subject: [PATCH 15/94] French loc fixes (ballistics) (#5041) Minor French loc fixes --- addons/ballistics/stringtable.xml | 172 +++++++++++++++--------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index b86b2eb576..f5bcbb758a 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -4,7 +4,7 @@ 6.5x47mm 20Rnd Mag (HPBT Scenar) - Ch. 6.5x47mm 20Cps (HPBT Scenar) + Ch. 6,5x47mm 20Cps (HPBT Scenar) Cargador de 20 balas de 6.5x47mm (HPBT Scenar) Magazynek 6,5x47mm 20rd (HPBT Scenar) Магазин из 20-ти 6,5x47 мм (экспансивные Scenar) @@ -18,7 +18,7 @@ 6.5mm Lapua - 6.5mm Lapua + 6,5mm Lapua 6.5mm Lapua 6,5mm Lapua 6,5 мм Lapua @@ -32,7 +32,7 @@ Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 20<br />Used in: QBU-88 - Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 20 + Calibre: 6,5x47mm (HPBT Scenar)<br />Cartouches: 20 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 20<br />Se usa en: QBU-88 Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 20 Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 20<br />Используются с: QBU-88 @@ -51,7 +51,7 @@ Магазин из 20-ти 6,5 мм Creedmor 6,5mm Creedmor 20-Patronen-Magazin Cargador de 20 balas Creedmor de 6.5mm - Ch. 6.5mm Creedmor 20Cps + Ch. 6,5mm Creedmor 20Cps 6.5mm Creedmor 20náb. Zásobník Carregador 6.5mm com 20 cartuchos Creedmor 6,5mm Creedmor 20-lövedékes tár @@ -60,7 +60,7 @@ 6.5mm CM - 6.5mm CM + 6,5mm CM 6.5mm CM 6,5mm CM 6,5 мм CM @@ -76,7 +76,7 @@ Caliber: 6.5x47mm Creedmor<br />Rounds: 20<br />Used in: QBU-88 Kaliber: 6,5x47mm Creedmor<br />Pociski: 20<br />Używany w: QBU-88 Kaliber: 6,5x47mm Creedmor<br />Patronen: 20<br />Eingesetzt von: QBU-88 - Calibre: 6.5x47mm Creedmor <br />Cartouches: 20<br />Utilisé avec: QBU-88 + Calibre: 6,5x47mm Creedmor <br />Cartouches: 20<br />Utilisé avec: QBU-88 Calibro: 6.5mm Creedmor<br />Munizioni: 20<br />In uso su: QBU-88 Calibre: 6.5mm Creedmor<br />Balas: 20<br />Se usa en: QBU-88 Калибр: 6,5x47мм Creedmor<br />Патронов: 20<br />Используются c: QBU-88 @@ -642,7 +642,7 @@ 9.3mm 10Rnd Tracer Mag 9,3mm 10-Patronen-Magazin Leuchtspur Magazynek 9.3mm 10rd Smugacz - Ch. 9.3mm 10Cps Traçante + Ch. 9,3mm 10Cps Traçante Cargador de 10 balas trazadoras de 9.3mm Магазин из 10-ти 9,3 мм трассирующих 9.3mm 10Rnd Tracer Mag @@ -657,7 +657,7 @@ 9,3mm Leuchtspur 9,3mm Smugacz 9.3mm Svítící - 9.3mm Traçante + 9,3mm Traçante 9.3mm Trazadora 9,3 мм трассирующие 9.3mm Tracer @@ -670,7 +670,7 @@ Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 10<br />Eingesetzt von: Cyrus Kaliber: 9,3x64mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé avec: Cyrus + Calibre: 9,3x64mm Traçante<br />Cartouches: 10<br />Utilisé avec: Cyrus Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм трассирующие<br />Патронов: 10<br />Используются с: Cyrus Calibro: 9.3x64mm Tracer<br />Munizioni: 10<br />In uso su: Cyrus @@ -684,7 +684,7 @@ 9.3mm 10Rnd Tracer IR-DIM Mag 9,3mm 10-Patronen-Magazin Leuchtspur IR-DIM Magazynek 9,3mm 10rd Smugacz IR-DIM - Ch. 9.3mm 10Cps Traçante IR-DIM + Ch. 9,3mm 10Cps Traçante IR-DIM Cargador de 10 balas trazadoras IR-DIM de 9.3mm Магазин из 10-ти 9,3 мм ИК-трассирующих 9.3mm 10Rnd Tracciante IR-DIM Mag @@ -699,7 +699,7 @@ 9,3mm IR-DIM 9,3mm IR-DIM 9.3mm IR-DIM - 9.3mm IR-DIM + 9,3mm IR-DIM 9.3mm IR-DIM 9,3 мм ИК-трассирующие 9.3mm IR-DIM @@ -712,7 +712,7 @@ Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 10<br />Eingesetzt von: Cyrus Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé avec: Cyrus + Calibre: 9,3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé avec: Cyrus Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 10<br />In uso su: Cyrus @@ -727,7 +727,7 @@ 9.3mm 150Rnd Tracer Belt 9,3mm 150-Patronen-Gurt Leuchtspur Taśma 9,3mm 150rd Smugacz - Bande 9.3mm 150Cps Traçante + Bande 9,3mm 150Cps Traçante Cinta de 150 balas trazadoras de 9.3mm Лента из 150-ти 9,3 мм трассирующих 9.3mm 150Rnd Tracer Belt @@ -742,7 +742,7 @@ 9,3mm Leuchtspur 9,3mm Smugacz 9.3mm Svítící - 9.3mm Traçante + 9,3mm Traçante 9.3mm Trazadora 9,3 мм трассирующие 9.3mm Tracciante @@ -755,7 +755,7 @@ Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 150<br />Eingesetzt von: Navid Kaliber: 9,3x64mm Smugacz<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé avec: Navid + Calibre: 9,3x64mm Traçante<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм трассирующие<br />Патронов: 150<br />Используются с: Навид Calibro: 9.3x64mm Tracciante<br />Munizioni: 150<br />In uso su: Navid @@ -769,7 +769,7 @@ 9.3mm 150Rnd Tracer IR-DIM Belt 9,3mm 150-Patronen-Gurt Leuchtspur IR-DIM Taśma 9,3mm 150rd Smugacz IR-DIM - Bande 9.3mm 150Cps Traçante IR-DIM + Bande 9,3mm 150Cps Traçante IR-DIM Cinta de 150 balas trazadoras IR-DIM de 9.3mm Лента из 150-ти 9,3 мм ИК-трассирующих 9.3mm 150Rnd Tracciante IR-DIM Belt @@ -784,7 +784,7 @@ 9,3mm IR-DIM 9,3mm IR-DIM 9.3mm IR-DIM - 9.3mm IR-DIM + 9,3mm IR-DIM 9.3mm IR-DIM 9,3 мм ИК-трассирующие 9.3mm IR-DIM @@ -797,7 +797,7 @@ Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 150<br />Eingesetzt von: Navid Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé avec: Navid + Calibre: 9,3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 150<br />Используются с: Навид Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 150<br />In uso su: Navid @@ -811,7 +811,7 @@ 9.3mm 150Rnd AP Belt 9,3mm 150-Patronen-Gurt Hartkern Taśma 9,3mm 150rd AP - Bande 9.3mm 150Cps AP + Bande 9,3mm 150Cps AP Cinta de 150 balas AP de 9.3mm Лента из 150-ти 9,3 мм бронебойных 9.3mm 150Rnd AP Belt @@ -826,7 +826,7 @@ 9,3mm AP 9,3mm AP 9.3mm AP - 9.3mm AP + 9,3mm AP 9.3mm AP 9,3 мм бронебойные 9.3mm AP @@ -839,7 +839,7 @@ Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid Kaliber: 9,3x64mm Hartkern<br />Patronen: 150<br />Eingesetzt von: Navid Kaliber: 9,3x64mm AP<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé avec: Navid + Calibre: 9,3x64mm AP<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм бронебойные<br />Патронов: 150<br />Используются с: Навид Calibro: 9.3x64mm AP<br />Munizioni: 150<br />In uso su: Navid @@ -936,7 +936,7 @@ 7.62x54mm 10Rnd Tracer Mag Magazynek 7,62x54mm 10rd Smugacz - Ch. 7.62x54mm 10Rnd Traçante + Ch. 7,62x54mm 10Cps Traçante Cargador de 10 balas trazadoras de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих 7,62x54mm 10-Patronen-Magazin Leuchtspur @@ -950,7 +950,7 @@ 7.62mm 7,62mm - 7.62mm + 7,62mm 7.62mm 7,62 мм 7,62mm @@ -964,7 +964,7 @@ 7.62x54mm 10Rnd Tracer Mag Magazynek 7,62x54mm 10rd Smugacz - Ch. 7.62x54mm 10Cps Traçante + Ch. 7,62x54mm 10Cps Traçante Cargador de 10 balas trazadoras de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих 7,62x54mm 10-Patronen-Magazin Leuchtspur @@ -978,7 +978,7 @@ 6.5mm 100Rnd Tracer IR-DIM Mag Magazynek 6,5mm 100rd Smugacz IR-DIM - Ch. 6.5mm 100Rnd Traçante IR-DIM + Ch. 6,5mm 100Cps Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur @@ -992,7 +992,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM - 6.5mm IR-DIM + 6,5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие 6,5mm IR-DIM @@ -1006,7 +1006,7 @@ 6.5mm 100Rnd Tracer IR-DIM Mag<br />Rounds: 100<br />Used in: MX LSW Magazynek 6,5mm 100rd Smugacz IR-DIM - Ch. 6.5mm 100Rnd Traçante IR-DIM<br />Cartouches: 100<br />Utilisé avec: MX LSW + Ch. 6,5mm 100Cps Traçante IR-DIM<br />Cartouches: 100<br />Utilisé avec: MX LSW Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur<br />Patronen: 100<br />Eingesetzt von: MXLSW @@ -1020,7 +1020,7 @@ 6.5mm 200Rnd Tracer IR-DIM Belt Magazynek 6,5mm 200rd Smugacz IR-DIM - Bande 6.5mm 200Rnd Traçante IR-DIM + Bande 6,5mm 200Cps Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm Магазин из 200-т 6,5 мм ИК-трассирующих 6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur @@ -1034,7 +1034,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM - 6.5mm IR-DIM + 6,5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие 6,5mm IR-DIM @@ -1062,7 +1062,7 @@ 5.56mm 30Rnd Mag (Mk262) Magazynek 5,56mm 30rd Mk262 - 5.56mm 30Cps (Mk262) + 5,56mm 30Cps (Mk262) Cargador de 30 balas de 5.56mm (Mk262) Магазин из 30-ти 5.56 мм Mk262 5,56mm 30-Patronen-Magazin (Mk262) @@ -1076,7 +1076,7 @@ 5.56mm Mk262 5,56mm Mk262 - 5.56mm Mk262 + 5,56mm Mk262 5.56mm Mk262 5,56 мм Mk262 5,56mm Mk262 @@ -1090,7 +1090,7 @@ Caliber: 5.56x45mm NATO (Mk262)<br />Rounds: 30 Kaliber: 5,56x45mm NATO (Mk262)<br />Pociski: 30 - Calibre: 5.56x45mm NATO (Mk262)<br />Cartouches: 30 + Calibre: 5,56x45mm NATO (Mk262)<br />Cartouches: 30 Calibre: 5.56x45mm NATO (Mk262)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk262)<br />Патронов: 30 Kaliber: 5,56x45mm NATO (Mk262)<br />Patronen: 30 @@ -1104,7 +1104,7 @@ 5.56mm 30Rnd Mag (Mk318) Magazynek 5,56mm 30rd (Mk318) - Ch. 5.56mm 30Cps (Mk318) + Ch. 5,56mm 30Cps (Mk318) Cargador de 30 balas de 5.56mm (Mk318) Магазин из 30-ти 5.56 мм (Mk318) 5,56mm 30-Patronen-Magazin (Mk318) @@ -1118,7 +1118,7 @@ 5.56mm Mk318 5,56mm Mk318 - 5.56mm Mk318 + 5,56mm Mk318 5.56mm Mk318 5.56 мм Mk318 5,56mm Mk318 @@ -1132,7 +1132,7 @@ Caliber: 5.56x45mm NATO (Mk318)<br />Rounds: 30 Kaliber: 5,56x45mm NATO (Mk318)<br />Pociski: 30 - Calibre: 5.56x45mm NATO (Mk318)<br />Cartouches: 30 + Calibre: 5,56x45mm NATO (Mk318)<br />Cartouches: 30 Calibre: 5.56x45mm NATO (Mk318)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30 Kaliber: 5,56x45mm NATO (Mk318)<br />Patronen: 30 @@ -1146,7 +1146,7 @@ 5.56mm 30Rnd Mag (M995 AP) Magazynek 5,56mm 30rd (M995 AP) - Ch. 5.56mm 30Cps (M995 AP) + Ch. 5,56mm 30Cps (M995 AP) Cargador de 30 balas de 5.56mm (M995 AP) Магазин из 30-ти 5.56 мм (M995 бронебойные) 5,56mm 30-Patronen-Magazin (M995AP) @@ -1160,7 +1160,7 @@ 5.56mm AP 5,56mm AP - 5.56mm AP + 5,56mm AP 5.56mm AP 5.56 мм бронебойные 5,56mm AP @@ -1174,7 +1174,7 @@ Caliber: 5.56x45mm NATO (M995 AP)<br />Rounds: 30 Kaliber: 5,56x45mm NATO (M995 AP)<br />Pociski: 30 - Calibre: 5.56x45mm NATO (M995 AP)<br />Cartouches: 30 + Calibre: 5,56x45mm NATO (M995 AP)<br />Cartouches: 30 Calibre: 5.56x45mm NATO (M995 AP)<br />Balas: 30 Калибр: 5,56x45 мм NATO (M995 бронебойные)<br />Патронов: 30 Kaliber: 5,56x45mm NATO (M995 AP)<br />Patronen: 30 @@ -1188,7 +1188,7 @@ 7.62mm 10Rnd Mag (M118LR) Magazynek 7,62mm 10rd (M118LR) - Ch. 7.62mm 10Cps (M118LR) + Ch. 7,62mm 10Cps (M118LR) Cargador de 10 balas de 7.62mm (M118LR) Магазин из 10-ти 7,62 мм (M118LR) 7,62mm 10-Patronen-Magazin (M118LR) @@ -1202,7 +1202,7 @@ 7.62mm M118LR 7,62mm M118LR - 7.62mm M118LR + 7,62mm M118LR 7.62mm M118LR 7,62 мм M118LR 7,62mm M118LR @@ -1216,7 +1216,7 @@ Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (M118LR)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (M118LR)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (M118LR)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (M118LR)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 10 @@ -1230,7 +1230,7 @@ 7.62mm 20Rnd Mag (M118LR) Magazynek 7,62mm 20rd (M118LR) - Ch. 7.62mm 20Cps (M118LR) + Ch. 7,62mm 20Cps (M118LR) Cargador de 20 balas de 7.62mm (M118LR) Магазин из 20-ти 7,62 мм (M118LR) 7,62mm 20-Patronen-Magazin (M118LR) @@ -1244,7 +1244,7 @@ 7.62mm M118LR 7,62mm M118LR - 7.62mm M118LR + 7,62mm M118LR 7.62mm M118LR 7,62 мм M118LR 7,62mm M118LR @@ -1272,7 +1272,7 @@ 7.62mm 10Rnd Mag (Mk316 Mod 0) Magazynek 7,62mm 10rd (Mk316 Mod 0) - Ch. 7.62mm 10Cps (Mk316 Mod 0) + Ch. 7,62mm 10Cps (Mk316 Mod 0) Cargador de 10 balas de 7.62mm (Mk316 Mod 0) Магазин из 10-ти 7,62 мм (Mk316 Mod 0) 7,62mm 10-Patronen-Magazin (Mk316 Mod 0) @@ -1286,7 +1286,7 @@ 7.62mm Mk316 7,62mm Mk316 - 7.62mm Mk316 + 7,62mm Mk316 7.62mm Mk316 7,62 мм Mk316 7,62mm Mk316 @@ -1300,7 +1300,7 @@ Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 10 @@ -1314,7 +1314,7 @@ 7.62mm 20Rnd Mag (Mk316 Mod 0) Magazynek 7,62mm 20rd (Mk316 Mod 0) - Ch. 7.62mm 20Cps (Mk316 Mod 0) + Ch. 7,62mm 20Cps (Mk316 Mod 0) Cargador de 20 balas de 7.62mm (Mk316 Mod 0) Магазин из 20-ти 7,62 мм (Mk316 Mod 0) 7,62mm 20-Patronen-Magazin (Mk316 Mod 0) @@ -1328,7 +1328,7 @@ 7.62mm Mk316 7,62mm Mk316 - 7.62mm Mk316 + 7,62mm Mk316 7.62mm Mk316 7,62 мм Mk316 7,62mm Mk316 @@ -1342,7 +1342,7 @@ Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 20 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 20 + Calibre: 7,62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 20 Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 20 @@ -1356,7 +1356,7 @@ 7.62mm 10Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 10rd (Mk319 Mod 0) - Ch. 7.62mm 10Cps (Mk319 Mod 0) + Ch. 7,62mm 10Cps (Mk319 Mod 0) Cargador de 10 balas de 7.62mm (Mk319 Mod 0) Магазин из 10-ти 7,62 мм (Mk319 Mod 0) 7,62mm 10-Patronen-Magazin (Mk319 Mod 0) @@ -1370,7 +1370,7 @@ 7.62mm Mk319 7,62mm Mk319 - 7.62mm Mk319 + 7,62mm Mk319 7.62mm Mk319 7,62 мм Mk319 7,62mm Mk319 @@ -1384,7 +1384,7 @@ Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 10 @@ -1398,7 +1398,7 @@ 7.62mm 20Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 20rd (Mk319 Mod 0) - Ch. 7.62mm 20Cps (Mk319 Mod 0) + Ch. 7,62mm 20Cps (Mk319 Mod 0) Cargador de 20 balas de 7.62mm (Mk319 Mod 0) Магазин из 20-ти 7,62 мм (Mk319 Mod 0) 7,62mm 20-Patronen-Magazin (Mk319 Mod 0) @@ -1412,7 +1412,7 @@ 7.62mm Mk319 7,62mm Mk319 - 7.62mm Mk319 + 7,62mm Mk319 7.62mm Mk319 7,62 мм Mk319 7,62mm Mk319 @@ -1426,7 +1426,7 @@ Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 20 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 20 + Calibre: 7,62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 20 Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 20 @@ -1440,7 +1440,7 @@ 7.62mm 10Rnd Mag (M993 AP) Magazynek 7,62mm 10rd (M993 AP) - Ch. 7.62mm 10Cps (M993 AP) + Ch. 7,62mm 10Cps (M993 AP) Cargador de 10 balas de 7.62mm (M993 AP) Магазин из 10-ти 7,62 мм (M993 бронебойные) 7,62mm 10-Patronen-Magazin (M993 AP) @@ -1454,7 +1454,7 @@ 7.62mm AP 7,62mm AP - 7.62mm AP + 7,62mm AP 7.62mm AP 7,62mm бронебойные 7,62mm AP @@ -1468,7 +1468,7 @@ Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (M993 AP)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (M993 AP)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 10 @@ -1482,7 +1482,7 @@ 7.62mm 20Rnd Mag (M993 AP) Magazynek 7,62mm 20rd (M993 AP) - Ch. 7.62mm 20Cps (M993 AP) + Ch. 7,62mm 20Cps (M993 AP) Cargador de 20 balas de 7.62mm (M993 AP) Магазин из 20-ти 7,62 мм (M993 бронебойные) 7,62mm 20-Patronen-Magazin (M993 AP) @@ -1496,7 +1496,7 @@ 7.62mm AP 7,62mm AP - 7.62mm AP + 7,62mm AP 7.62mm AP 7,62 мм бронебойные 7,62mm AP @@ -1510,7 +1510,7 @@ Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 20 Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 20 - Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 20 + Calibre: 7,62x51mm NATO (M993 AP)<br />Cartouches: 20 Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 20 Calibro: 7.62x51 mm NATO (M993 AP)<br />Munizioni: 20 @@ -1524,7 +1524,7 @@ 7.62mm 20Rnd Mag (Mk248 Mod 0) Magazynek 7,62mm 20rd (Mk248 Mod 0) - Ch. 7.62mm 20Cps (Mk248 Mod 0) + Ch. 7,62mm 20Cps (Mk248 Mod 0) Cargador de 20 balas de 7.62mm (Mk248 Mod 0) Магазин из 20-ти 7,62 мм (Mk248 Mod 0) 7,62mm 20-Patronen-Magazin (Mk248 Mod 0) @@ -1538,7 +1538,7 @@ 7.62mm Mk248 7,62mm Mk248 - 7.62mm Mk248 + 7,62mm Mk248 7.62mm Mk248 7,62 мм Mk248 7,62mm Mk248 @@ -1552,7 +1552,7 @@ Caliber: 7.62x67mm NATO (Mk248 Mod 0)<br />Rounds: 20 Kaliber: 7,62x67mm NATO (Mk248 Mod 0)<br />Pociski: 20 - Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20 + Calibre: 7,62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 0)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Patronen: 20 @@ -1566,7 +1566,7 @@ 7.62mm 20Rnd Mag (Mk248 Mod 1) Magazynek 7,62mm 20rd (Mk248 Mod 1) - Ch. 7.62mm 20Cps (Mk248 Mod 1) + Ch. 7,62mm 20Cps (Mk248 Mod 1) Cargador de 20 balas de 7.62mm (Mk248 Mod 1) Магазин из 20-ти 7,62 мм (Mk248 Mod 1) 7,62mm 20-Patronen-Magazin (Mk248 Mod 1) @@ -1580,7 +1580,7 @@ 7.62mm Mk248 7,62mm Mk248 - 7.62mm Mk248 + 7,62mm Mk248 7.62mm Mk248 7,62 мм Mk248 7,62mm Mk248 @@ -1594,7 +1594,7 @@ Caliber: 7.62x67mm NATO (Mk248 Mod 1)<br />Rounds: 20 Kaliber: 7,62x67mm NATO (Mk248 Mod 1)<br />Pociski: 20 - Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20 + Calibre: 7,62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 1)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Patronen: 20 @@ -1608,7 +1608,7 @@ 7.62mm 20Rnd Mag (Berger Hybrid OTM) Magazynek 7,62mm 20rd (Berger Hybrid OTM) - Ch. 7.62 20Cps (Berger Hybrid OTM) + Ch. 7,62 20Cps (Berger Hybrid OTM) Cargador de 20 balas de 7.62mm (Berger Hybrid OTM) Магазин из 20-ти 7,62 мм (Berger Hybrid OTM) 7,62mm 20-Patronen-Magazin (Berger Hybrid OTM) @@ -1622,7 +1622,7 @@ 7.62mm OTM 7,62mm OTM - 7.62mm OTM + 7,62mm OTM 7.62mm OTM 7,62 мм OTM 7,62mm OTM @@ -1636,7 +1636,7 @@ Caliber: 7.62x67mm NATO (Berger Hybrid OTM)<br />Rounds: 20 Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Pociski: 20 - Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20 + Calibre: 7,62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20 Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)<br />Патронов: 20 Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Patronen: 20 @@ -1649,7 +1649,7 @@ 6.5x47mm 30Rnd Mag (HPBT Scenar) - Ch. 6.5x47mm 30Cps (HPBT Scenar) + Ch. 6,5x47mm 30Cps (HPBT Scenar) Cargador de 30 balas de 6.5x47mm (HPBT Scenar) Magazynek 6,5x47mm 30rd (HPBT Scenar) Магазин из 30-ти 6,5x47 мм (экспансивные Scenar) @@ -1663,7 +1663,7 @@ 6.5mm Lapua - 6.5mm Lapua + 6,5mm Lapua 6.5mm Lapua 6,5mm Lapua 6,5 мм Lapua @@ -1677,7 +1677,7 @@ Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM - Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30 + Calibre: 6,5x47mm (HPBT Scenar)<br />Cartouches: 30 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30<br />Se usa en: MXM Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 30 Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 30<br />Используются с: MXM @@ -1696,7 +1696,7 @@ Магазин из 30-ти 6,5 мм Creedmor 6,5mm Creedmor 30-Patronen-Magazin Cargador de 30 balas Creedmor de 6.5mm - Ch. 6.5mm Creedmor 30Cps + Ch. 6,5mm Creedmor 30Cps 6.5mm Creedmor 30náb. Zásobník Carregador 6.5mm com 30 cartuchos Creedmor 6,5mm Creedmor 30-lövedékes tár @@ -1705,7 +1705,7 @@ 6.5mm CM - 6.5mm CM + 6,5mm CM 6.5mm CM 6,5mm CM 6,5 мм CM @@ -1721,7 +1721,7 @@ Caliber: 6.5x47mm Creedmor<br />Rounds: 30<br />Used in: MXM Kaliber: 6,5x47mm Creedmor<br />Pociski: 30<br />Używany w: MXM Kaliber: 6,5x47mm Creedmor<br />Patronen: 30<br />Eingesetzt von: MXM - Calibre: 6.5x47mm Creedmor <br />Cartouches: 30<br />Utilisé avec: MXM + Calibre: 6,5x47mm Creedmor <br />Cartouches: 30<br />Utilisé avec: MXM Calibro: 6.5mm Creedmor<br />Munizioni: 30<br />In uso su: MXM Calibre: 6.5mm Creedmor<br />Balas: 30<br />Se usa en: MXM Калибр: 6,5x47мм Creedmor<br />Патронов: 30<br />Используются c: MXM @@ -1761,7 +1761,7 @@ Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10 - Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10 + Calibre: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10 Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10 Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10 Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)<br />Патронов: 10 @@ -1803,7 +1803,7 @@ Caliber: 8.6x70mm (API526)<br />Rounds: 10 - Calibre: 8.6x70mm (API526)<br />Cartouches: 10 + Calibre: 8,6x70mm (API526)<br />Cartouches: 10 Calibre: 8.6x70mm (API526)<br />Balas: 10 Kaliber: 8,6x70mm (API526)<br />Pociski: 10 Калибр: 8,6x70 мм (API526)<br />Патронов: 10 @@ -1859,7 +1859,7 @@ 12.7x99mm 5Rnd Mag - Ch. 12.7x99mm 5Cps + Ch. 12,7x99mm 5Cps Cargador de 5 balas de 12.7x99mm Magazynek 12,7x99mm 5rd Магазин из 5-ти 12,7x99 мм @@ -1873,7 +1873,7 @@ 12.7mm - 12.7mm + 12,7mm 12.7mm 12,7mm 12,7 мм @@ -1901,7 +1901,7 @@ 12.7x99mm API 5Rnd Mag - Ch. 12.7x99mm API 5Cps + Ch. 12,7x99mm API 5Cps Cargador de 5 balas de 12.7x99mm API Magazynek 12,7x99mm API 5rd 12.7x99mm API 5Rnd Mag @@ -1915,7 +1915,7 @@ 12.7mm API - 12.7mm API + 12,7mm API 12.7mm API 12,7mm API 12.7mm API @@ -1929,7 +1929,7 @@ Caliber: 12.7x99mm API<br />Rounds: 5 - Calibre: 12.7x99mm API<br />Cartouches: 5 + Calibre: 12,7x99mm API<br />Cartouches: 5 Calibre: 12.7x99mm API<br />Balas: 5 Kaliber: 12,7x99mm API<br />Pociski: 5 Калибр: 12,7x99 мм бронебойно-зажигательные<br />Патронов: 5 @@ -1943,7 +1943,7 @@ 12.7x99mm 5Rnd Mag (AMAX) - Ch. 12.7x99mm 5Cps (AMAX) + Ch. 12,7x99mm 5Cps (AMAX) Cargador de 5 balas de 12.7x99mm (AMAX) Magazynek 12,7x99mm 5rd (AMAX) Магазин из 5-ти 12,7x99 мм (A-MAX) @@ -1957,7 +1957,7 @@ 12.7mm - 12.7mm + 12,7mm 12.7mm 12,7mm 12,7 мм @@ -1971,7 +1971,7 @@ Caliber: 12.7x99mm (AMAX)<br />Rounds: 5 - Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5 + Calibre: 12,7x99mm (AMAX)<br />Cartouches: 5 Calibre: 12.7x99mm (AMAX)<br />Balas: 5 Kaliber: 12,7x99mm (AMAX)<br />Pociski: 5 Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5 From 105ac01b569b1ad05777283fdad01f367932ba2c Mon Sep 17 00:00:00 2001 From: Marco Kaulea Date: Wed, 29 Mar 2017 00:30:18 +0200 Subject: [PATCH 16/94] Update documentation for Vector21 Add explanation on how to switch range and azimuth units --- docs/wiki/feature/vector.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/wiki/feature/vector.md b/docs/wiki/feature/vector.md index ce3a3ebbf9..28f88fce11 100644 --- a/docs/wiki/feature/vector.md +++ b/docs/wiki/feature/vector.md @@ -85,6 +85,11 @@ The Vector is controlled with 2 keys: the azimuth key and the range key; Ta - Sight the circle on the object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). - Sight the Fall of shot and release Tab ↹. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If R is tapped the height correction values will be displayed (`UP` and `dn`). +### 2.10 Changing settings (degrees/mils) (meters/feet) +- Tap Tab ↹ five times fast. "Unit SEtt" appears briefly. +- Press R until the desired units are displayed. +- Tap Tab ↹ five times fast to save the selection. + ## 3. Dependencies {% include dependencies_list.md component="vector" %} From 6c4d6c88d98d0b09a65f5bbded62d0ed9641183f Mon Sep 17 00:00:00 2001 From: Marco Kaulea Date: Wed, 29 Mar 2017 13:43:22 +0200 Subject: [PATCH 17/94] Add blank line after heading --- docs/wiki/feature/vector.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/wiki/feature/vector.md b/docs/wiki/feature/vector.md index 28f88fce11..558568ae6f 100644 --- a/docs/wiki/feature/vector.md +++ b/docs/wiki/feature/vector.md @@ -86,6 +86,7 @@ The Vector is controlled with 2 keys: the azimuth key and the range key; Ta - Sight the Fall of shot and release Tab ↹. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If R is tapped the height correction values will be displayed (`UP` and `dn`). ### 2.10 Changing settings (degrees/mils) (meters/feet) + - Tap Tab ↹ five times fast. "Unit SEtt" appears briefly. - Press R until the desired units are displayed. - Tap Tab ↹ five times fast to save the selection. From a13a68525821931b4ed5908c5ac7ec2f43e8c87f Mon Sep 17 00:00:00 2001 From: Jo David Date: Wed, 29 Mar 2017 13:57:53 +0200 Subject: [PATCH 18/94] Update vector.md --- docs/wiki/feature/vector.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/wiki/feature/vector.md b/docs/wiki/feature/vector.md index 558568ae6f..415d77643a 100644 --- a/docs/wiki/feature/vector.md +++ b/docs/wiki/feature/vector.md @@ -78,14 +78,14 @@ The Vector is controlled with 2 keys: the azimuth key and the range key; Ta - Sight the circle on the first object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). - Sight the second object and release Tab ↹. -### 2.9 Fall of shot +#### 2.9 Fall of shot Measuring Fall of shot - Tap Tab ↹ once then press and hold it until the azimuth appears. - Sight the circle on the object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). - Sight the Fall of shot and release Tab ↹. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If R is tapped the height correction values will be displayed (`UP` and `dn`). -### 2.10 Changing settings (degrees/mils) (meters/feet) +#### 2.10 Setting the measurement units (degrees/mils & meters/feet) - Tap Tab ↹ five times fast. "Unit SEtt" appears briefly. - Press R until the desired units are displayed. From 9b4377a547928ec4c59aea3a8d368dade60ed476 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Wed, 29 Mar 2017 21:34:34 +0200 Subject: [PATCH 19/94] Update atragmx.md --- docs/wiki/feature/atragmx.md | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index cff6aa9966..e601721607 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -20,6 +20,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ## 2. Requirement + - [Advanced Ballistics module enabled]({{ site.baseurl }}/wiki/feature/advanced-ballistics.html) @@ -28,21 +29,26 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ### 3.1 Opening the AtragMx #### 3.1.1 Interaction Menu + - Open the self interaction menu Ctrl + ⊞ Win - Select `Equipment` - Select `Open AtragMx` #### 3.1.2 Custom key + - `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment` #### 3.1.3 Inventory + Inventory management ### 3.2 Example with M14 and default 7.62mm 20Rnd Mag **Start of the mission:** + - Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. -RangeCard + +Range card - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) - `Open Gun` the 7.62x51mm M80 in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25) @@ -55,19 +61,23 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Optionally, `Save Gun` and `Done` in the `GunList`. **In position:** + - Update the `Atmsphr` column with the [Kestrel 4500]({{ site.baseurl }}/wiki/feature/kestrel4500.html) and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* - Update the `Target` column (the [wind arrow]({{ site.baseurl }}/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) +- *The latitude for all common maps can be found in the [ACE3 Github](https://github.com/acemod/ACE3/blob/master/addons/common/functions/fnc_getMapData.sqf).* - Apply the vertical and horizontal elevations on the [scope]({{ site.baseurl }}/wiki/feature/scopes.html). - Control the breath and press. ### 3.3 Example with Truing tool **Start of the mission:** + - Select `Drag Coef Table` in the `Options` menu. - Add the `ZR` and the `C1` (`Gun` column) in the table and `Done`. **In position:** + - Open the `Truing Drop` in the `Options` menu. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=23) - Add the actual `Target Range` in the `SUPER` column and `Calc`. - Add the same `Target Range` in the `SUB` column and `Calc`. @@ -87,10 +97,30 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - The `Default zero distance` can be overwritten with the [Scopes module]({{ site.baseurl }}/wiki/feature/scopes.html) or the [Settings Framework]({{ site.baseurl }}/wiki/framework/settings-framework.html). - In this case, the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx. +- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) - Open the `Gun` column, check and update the `Zero Range` and `Done`. Zero distance 300m +### 3.5 Example with `Add New Gun` in `GunList` + +- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the caliber, the bullet weight and the muzzle velocities. +- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) +- Select `Add New Gun` in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25) +- Add a `New Gun Name` and `Open Gun`. +- Select `E` (English unit) at the top right. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=10) +- Open the `Gun` column, check and update the `Bullet Weight (grains)`, the `Bullet Diam (inches)` and `Done`. +- Select `M` (Metric unit) at the top right. +- Open the `Muz Vel Table` in the `Options` menu or click on `MV` in the `Gun` column. +- Edit manually the `Muzzle Velocity Table` according with the `Range card` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) +- The `C1 coefficient` of the bullet can be found, for example, in the Eden Editor `Config Viewer`: +> configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_ballisticCoefficients" + +> configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_dragModel" +- *The AtragMx accepts only **G1 ballistic coefficient**.* +- *G7 ballistic coefficient can be converted, for example, with the online [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmgf-5.1.cgi)*. +- Optionally, `Save Gun` and `Done` in the `GunList`. + ## 4. Official Manual and Horus Videos From ee53c9e69d717b425c690b245c5a7168fc260ab8 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Thu, 30 Mar 2017 13:58:17 +0200 Subject: [PATCH 20/94] fix link atragmx.md --- docs/wiki/feature/atragmx.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index e601721607..2060edd6d6 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -65,7 +65,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Update the `Atmsphr` column with the [Kestrel 4500]({{ site.baseurl }}/wiki/feature/kestrel4500.html) and `Done`. - *Check the new `Muzzle Velocity` in the `Gun` column.* - Update the `Target` column (the [wind arrow]({{ site.baseurl }}/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) -- *The latitude for all common maps can be found in the [ACE3 Github](https://github.com/acemod/ACE3/blob/master/addons/common/functions/fnc_getMapData.sqf).* +- *The latitude for all common maps can be found in the [ACE3 Github]({{ site.ace.githubUrl }}/blob/master/addons/common/functions/fnc_getMapData.sqf).* - Apply the vertical and horizontal elevations on the [scope]({{ site.baseurl }}/wiki/feature/scopes.html). - Control the breath and press. @@ -112,7 +112,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Open the `Gun` column, check and update the `Bullet Weight (grains)`, the `Bullet Diam (inches)` and `Done`. - Select `M` (Metric unit) at the top right. - Open the `Muz Vel Table` in the `Options` menu or click on `MV` in the `Gun` column. -- Edit manually the `Muzzle Velocity Table` according with the `Range card` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) +- Edit manually the `Muzzle Velocity Table` according with the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) - The `C1 coefficient` of the bullet can be found, for example, in the Eden Editor `Config Viewer`: > configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_ballisticCoefficients" @@ -121,6 +121,9 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - *G7 ballistic coefficient can be converted, for example, with the online [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmgf-5.1.cgi)*. - Optionally, `Save Gun` and `Done` in the `GunList`. + +For advanced users, the ballistic coefficient can be calculated by using the [360 Degree Training Course mission](https://forums.bistudio.com/forums/topic/171228-sp-360-degree-training-course/) as a chronograph at different distances and [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi) for example, or an another ballistic software at your own convenience. + ## 4. Official Manual and Horus Videos From 4a2475965080c0a83c300ee12539fdcb6bd88783 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 30 Mar 2017 10:02:13 -0500 Subject: [PATCH 21/94] Fix dagr not showing bearing in mils (#5047) --- addons/dagr/functions/fnc_outputWP.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/dagr/functions/fnc_outputWP.sqf b/addons/dagr/functions/fnc_outputWP.sqf index d36f222a51..2a877ba593 100644 --- a/addons/dagr/functions/fnc_outputWP.sqf +++ b/addons/dagr/functions/fnc_outputWP.sqf @@ -79,7 +79,11 @@ GVAR(outputPFH) = [{ }); // WP Heading - _bearing = floor ((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir); + _bearing = floor (if (GVAR(useDegrees)) then { + ((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir) + } else { + DEG_TO_MIL(((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir)) + }); // Output __gridControl ctrlSetText format ["%1", _dagrGrid]; From 83d2183f61f082f589f1d77eca0724776ec98342 Mon Sep 17 00:00:00 2001 From: Dystopian Date: Sat, 1 Apr 2017 08:33:36 +0300 Subject: [PATCH 22/94] Fix cargo loading to locked vehicle (#5049) --- addons/cargo/functions/fnc_canLoadItemIn.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/cargo/functions/fnc_canLoadItemIn.sqf b/addons/cargo/functions/fnc_canLoadItemIn.sqf index 77a230108c..092272f94f 100644 --- a/addons/cargo/functions/fnc_canLoadItemIn.sqf +++ b/addons/cargo/functions/fnc_canLoadItemIn.sqf @@ -40,4 +40,5 @@ if (_item isEqualType "") then { _validItem && {_itemSize > 0} && {alive _vehicle} && -{_itemSize <= ([_vehicle] call FUNC(getCargoSpaceLeft))} +{_itemSize <= ([_vehicle] call FUNC(getCargoSpaceLeft))} && +{locked _vehicle < 2} From edf4e388e23586cb05b7d1401033ded405a1bce2 Mon Sep 17 00:00:00 2001 From: Pawel W Date: Fri, 7 Apr 2017 19:50:55 +0200 Subject: [PATCH 23/94] Update ACEX to 3.2.0.4 (#5062) --- docs/_config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 0e5fab26bc..22352d1375 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -16,9 +16,9 @@ acex: githubUrl: https://github.com/acemod/ACEX version: major: 3 - minor: 1 - patch: 1 - build: 3 + minor: 2 + patch: 0 + build: 4 markdown: kramdown From 8a25cd9c0cbd5bfde518e98f939f998a5ab14497 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 11 Apr 2017 02:37:53 +0200 Subject: [PATCH 24/94] tweak ACE main menu info box --- addons/optionsmenu/config.cpp | 2 - addons/optionsmenu/gui/pauseMenu.hpp | 99 +++++++++------------ addons/optionsmenu/init_loadMainMenuBox.sqf | 40 +++++++-- addons/optionsmenu/script_component.hpp | 4 + 4 files changed, 82 insertions(+), 63 deletions(-) diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index a239e55498..9dc0d90617 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -22,7 +22,6 @@ class CfgAddons { }; }; - #include "CfgEventHandlers.hpp" #include "gui\define.hpp" #include "gui\settingsMenu.hpp" @@ -35,7 +34,6 @@ class ACE_Extensions { extensions[] += {"ace_clipboard"}; }; - class CfgCommands { allowedHTMLLoadURIs[] += { "http://ace3mod.com/version.html" diff --git a/addons/optionsmenu/gui/pauseMenu.hpp b/addons/optionsmenu/gui/pauseMenu.hpp index 79aed168de..304cd7e8d1 100644 --- a/addons/optionsmenu/gui/pauseMenu.hpp +++ b/addons/optionsmenu/gui/pauseMenu.hpp @@ -45,7 +45,7 @@ class ACE_Open_SettingsMenu_BtnBase : ACE_gui_buttonBase { colorDisabled[] = {1,1,1,0.25}; colorFocused[] = {0,0,0,1}; colorText[] = {1,1,1,1}; - default = 0; + //default = 0; font = "RobotoCondensed"; idc = -1; period = 1.2; @@ -77,69 +77,63 @@ class ACE_Open_SettingsMenu_BtnBase : ACE_gui_buttonBase { class RscStandardDisplay; class RscDisplayMPInterrupt: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayInterruptEditorPreview: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayInterrupt: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayInterruptEditor3D: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayMovieInterrupt: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayMain: RscStandardDisplay { class controls { - class ACE_news_apex: RscControlsGroupNoHScrollbars { - idc = 80090; - x = "safezoneX + safezoneW - 10 * (pixelW * pixelGrid * 2) - (4 * pixelH)"; - y = "safezoneY + safezoneH - (3 * 2 + 1) * (pixelH * pixelGrid * 2) - 3 * (4 * pixelH)"; - w = "10 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - class Controls { - class Background: RscPicture { - idc = 80091; - text = "\a3\Ui_f\data\GUI\Rsc\RscDisplayMain\gradientMods_ca.paa"; - colorText[] = {0,0,0,0.75}; - x = "(10 - 4 * 2) * (pixelW * pixelGrid * 2)"; - y = 0; - w = "4 * 2 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - angle = 180; - }; - class BackgroundIcon: RscPicture { - idc = 80092; - text = "\a3\Ui_f\data\GUI\Rsc\RscDisplayMain\backgroundModsIcon_ca.paa"; - colorText[] = {0,0,0,0.75}; - x = "(10 - 2 * 2) * (pixelW * pixelGrid * 2)"; - y = 0; - w = "2 * 2 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - angle = 180; - }; - class Icon: RscPicture { - idc = 80093; + class InfoMods: RscControlsGroupNoHScrollbars { + class Controls; + }; + + class InfoNews: InfoMods { + class Controls: Controls { + class Background; + class BackgroundIcon; + class Icon; + class News; + class Notification; + class Button; + }; + }; + + class ACE_news_apex: InfoNews { + idc = IDC_MAIN_INFO; + y = "safezoneY + safezoneH - (3 * 2 + 1) * (pixelH * pixelGrid * 2) - 4 * (4 * pixelH)"; + + class Controls: Controls { + class Background: Background {}; + class BackgroundIcon: BackgroundIcon {}; + class Icon: Icon { text = QPATHTOF(gui\aceMenuIcon_ca.paa); - colorText[] = {1,1,1,0.5}; - x = "(10 - 2) * (pixelW * pixelGrid * 2)"; - y = 0; - w = "2 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; }; class CurrentVersionInfo: RscText { - idc = 80094; + idc = IDC_MAIN_INFO_CURRENT_VERSION_INFO; style = 1; text = ""; sizeEx = "(pixelH * pixelGrid * 1.5)"; @@ -149,12 +143,13 @@ class RscDisplayMain: RscStandardDisplay { x = 0; y = 0; w = "(10 - 1.25 * 2) * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 1)"; + h = "1 * (pixelH * pixelGrid * 2)"; onLoad = "(_this select 0) ctrlenable false;"; }; class HTTPVersionInfo: RscHTML { - idc = 80095; + idc = IDC_MAIN_INFO_NEWEST_VERSION_INFO; shadow = 0; + class H1 { sizeEx = "(pixelH * pixelGrid * 1.5)"; font = "RobotoCondensedLight"; @@ -167,24 +162,16 @@ class RscDisplayMain: RscStandardDisplay { class P: H1 { sizeEx = "(pixelH * pixelGrid * 1.5)"; }; + x = 0; - y = "2 * (pixelH * pixelGrid * 1)"; + y = "1 * (pixelH * pixelGrid * 2)"; w = "(10 - 1.25 * 2) * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 1)"; + h = "1 * (pixelH * pixelGrid * 2)"; onLoad = "(_this select 0) ctrlenable false;"; }; - class Button: RscButtonMenu { - idc = 80096; - colorBackground[] = {0,0,0,0}; - colorBackgroundFocused[] = {0,0,0,0}; - colorBackground2[] = {0,0,0,0}; - x = 0; - y = 0; - w = "10 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - + class Button: Button { tooltip = "Download latest and report issues:"; - url = "https://github.com/acemod/ACE3"; + url = "https://github.com/acemod/ACE3/releases"; }; }; }; diff --git a/addons/optionsmenu/init_loadMainMenuBox.sqf b/addons/optionsmenu/init_loadMainMenuBox.sqf index a9b8f5a02a..8d84999fd2 100644 --- a/addons/optionsmenu/init_loadMainMenuBox.sqf +++ b/addons/optionsmenu/init_loadMainMenuBox.sqf @@ -13,17 +13,47 @@ * * Public: No */ +#include "\a3\ui_f\hpp\defineResinclDesign.inc" #include "script_component.hpp" +params ["_display"]; +private _controlsGroup = _display displayCtrl IDC_MAIN_INFO; + //Need to load from profileNamespace because ace_settings might not be init if world = empty if (profileNamespace getVariable [QGVAR(showNewsOnMainMenu), true]) then { - ((_this select 0) displayCtrl 80090) ctrlShow true; + _controlsGroup ctrlShow true; - private _ace3VersionStr = (getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr")) select [0,5]; - ((_this select 0) displayCtrl 80094) ctrlSetText format ["Version: %1", _ace3VersionStr]; - ((_this select 0) displayCtrl 80095) htmlLoad "http://ace3mod.com/version.html"; + private _fnc_onSetFocus = { + params ["_control"]; + private _controlsGroup = ctrlParentControlsGroup _control; + + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND) ctrlSetTextColor [1,1,1,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND_ICON) ctrlSetTextColor [1,1,1,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_ICON) ctrlSetTextColor [0,0,0,1]; + }; + + private _fnc_onKillFocus = { + params ["_control"]; + private _controlsGroup = ctrlParentControlsGroup _control; + + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND) ctrlSetTextColor [0,0,0,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND_ICON) ctrlSetTextColor [0,0,0,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_ICON) ctrlSetTextColor [1,1,1,0.5]; + }; + + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["MouseEnter", _fnc_onSetFocus]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["SetFocus", _fnc_onSetFocus]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["MouseExit", _fnc_onKillFocus]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["KillFocus", _fnc_onKillFocus]; + + private _versionStr = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr") splitString "."; + _versionStr resize 3; // MAJOR, MINOR, PATCH + _versionStr = _versionStr joinString "."; + + (_display displayCtrl IDC_MAIN_INFO_CURRENT_VERSION_INFO) ctrlSetText format ["Version: %1", _versionStr]; + (_display displayCtrl IDC_MAIN_INFO_NEWEST_VERSION_INFO) htmlLoad "http://ace3mod.com/version.html"; } else { - ((_this select 0) displayCtrl 80090) ctrlShow false; + _controlsGroup ctrlShow false; }; /* diff --git a/addons/optionsmenu/script_component.hpp b/addons/optionsmenu/script_component.hpp index 8fac89ba9a..c13e915702 100644 --- a/addons/optionsmenu/script_component.hpp +++ b/addons/optionsmenu/script_component.hpp @@ -17,6 +17,10 @@ #include "\z\ace\addons\main\script_macros.hpp" +#define IDC_MAIN_INFO 80090 +#define IDC_MAIN_INFO_CURRENT_VERSION_INFO 80091 +#define IDC_MAIN_INFO_NEWEST_VERSION_INFO 80092 + #define MENU_TAB_OPTIONS 0 #define MENU_TAB_COLORS 1 From 0a0929cdc5d6336e4461ab8dca00184de5e4c737 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 11 Apr 2017 12:00:34 +0200 Subject: [PATCH 25/94] use https for main menu --- addons/optionsmenu/init_loadMainMenuBox.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/optionsmenu/init_loadMainMenuBox.sqf b/addons/optionsmenu/init_loadMainMenuBox.sqf index 8d84999fd2..b8b451be8d 100644 --- a/addons/optionsmenu/init_loadMainMenuBox.sqf +++ b/addons/optionsmenu/init_loadMainMenuBox.sqf @@ -51,7 +51,7 @@ if (profileNamespace getVariable [QGVAR(showNewsOnMainMenu), true]) then { _versionStr = _versionStr joinString "."; (_display displayCtrl IDC_MAIN_INFO_CURRENT_VERSION_INFO) ctrlSetText format ["Version: %1", _versionStr]; - (_display displayCtrl IDC_MAIN_INFO_NEWEST_VERSION_INFO) htmlLoad "http://ace3mod.com/version.html"; + (_display displayCtrl IDC_MAIN_INFO_NEWEST_VERSION_INFO) htmlLoad "https://ace3mod.com/version.html"; } else { _controlsGroup ctrlShow false; }; From a9d562e5f7e6e1ed20b09c3379ebc119b83cf0e5 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 11 Apr 2017 12:03:47 +0200 Subject: [PATCH 26/94] use https for main men --- addons/optionsmenu/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 9dc0d90617..650f9eb74a 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -36,6 +36,6 @@ class ACE_Extensions { class CfgCommands { allowedHTMLLoadURIs[] += { - "http://ace3mod.com/version.html" + "https://ace3mod.com/version.html" }; }; From a16fafd6978a8ddb30d18a74a4ae13d9445afaec Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 11 Apr 2017 16:41:32 +0200 Subject: [PATCH 27/94] fix highlighted info box color (#5075) --- addons/optionsmenu/init_loadMainMenuBox.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/optionsmenu/init_loadMainMenuBox.sqf b/addons/optionsmenu/init_loadMainMenuBox.sqf index b8b451be8d..894bd45124 100644 --- a/addons/optionsmenu/init_loadMainMenuBox.sqf +++ b/addons/optionsmenu/init_loadMainMenuBox.sqf @@ -27,8 +27,8 @@ if (profileNamespace getVariable [QGVAR(showNewsOnMainMenu), true]) then { params ["_control"]; private _controlsGroup = ctrlParentControlsGroup _control; - (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND) ctrlSetTextColor [1,1,1,0.75]; - (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND_ICON) ctrlSetTextColor [1,1,1,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND) ctrlSetTextColor [1,1,1,1]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND_ICON) ctrlSetTextColor [1,1,1,1]; (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_ICON) ctrlSetTextColor [0,0,0,1]; }; From 53943c7503471ea104601fd43d9b7428aa005818 Mon Sep 17 00:00:00 2001 From: Cuel Date: Tue, 11 Apr 2017 16:59:06 +0200 Subject: [PATCH 28/94] Filter headless clients from zeus teleportation (#5070) --- addons/zeus/functions/fnc_ui_teleportPlayers.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zeus/functions/fnc_ui_teleportPlayers.sqf b/addons/zeus/functions/fnc_ui_teleportPlayers.sqf index cd5fd82d8d..94a734ab4e 100644 --- a/addons/zeus/functions/fnc_ui_teleportPlayers.sqf +++ b/addons/zeus/functions/fnc_ui_teleportPlayers.sqf @@ -29,7 +29,7 @@ private _listbox = _display displayCtrl 16189; if (alive _x) then { _listbox lbSetData [_listbox lbAdd (name _x), getPlayerUID _x]; }; -} forEach allPlayers; +} forEach ([] call CBA_fnc_players); _listbox lbSetCurSel 0; (_display displayCtrl 16188) cbSetChecked (_logic getVariable ["tpGroup",false]); From fd139abb424522ef1feff37c48b38799d5c89d48 Mon Sep 17 00:00:00 2001 From: jonpas Date: Tue, 11 Apr 2017 16:59:32 +0200 Subject: [PATCH 29/94] Use setShotParents in Advanced Throwing (#5052) * Use setShotParents in Advanced Throwing - close #5034 * Execute setShotParents on server (server-only command) --- addons/advanced_throwing/functions/fnc_exitThrowMode.sqf | 3 +++ addons/advanced_throwing/functions/fnc_prime.sqf | 3 +++ addons/common/XEH_postInit.sqf | 1 + 3 files changed, 7 insertions(+) diff --git a/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf b/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf index c508d0a803..359bd946a5 100644 --- a/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf +++ b/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf @@ -32,6 +32,9 @@ if !(_unit getVariable [QGVAR(primed), false]) then { _unit setVariable [QGVAR(lastThrownTime), CBA_missionTime]; // Fix floating for throwables without proper physics (eg. IR Grenade) _activeThrowable setVelocity [0, 0, -0.1]; + + // Set thrower + [QEGVAR(common,setShotParents), [_activeThrowable, _unit, (getShotParents _activeThrowable) select 1]] call CBA_fnc_serverEvent; }; // Restore muzzle ammo (setAmmo 1 has no impact if no appliccable throwable in inventory) diff --git a/addons/advanced_throwing/functions/fnc_prime.sqf b/addons/advanced_throwing/functions/fnc_prime.sqf index 727ace4e23..d52bee67f2 100644 --- a/addons/advanced_throwing/functions/fnc_prime.sqf +++ b/addons/advanced_throwing/functions/fnc_prime.sqf @@ -54,6 +54,9 @@ deleteVehicle _activeThrowableOld; _activeThrowable // projectile ]] call CBA_fnc_globalEvent; +// Set prime instigator +[QEGVAR(common,setShotParents), [_activeThrowable, _unit, _unit]] call CBA_fnc_serverEvent; + if (_showHint) then { // Show primed hint private _displayNameShort = getText (configFile >> "CfgMagazines" >> _throwableMag >> "displayNameShort"); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 8200493810..21c070c618 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -133,6 +133,7 @@ if (isServer) then { if (isServer) then { [QGVAR(hideObjectGlobal), {(_this select 0) hideObjectGlobal (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(enableSimulationGlobal), {(_this select 0) enableSimulationGlobal (_this select 1)}] call CBA_fnc_addEventHandler; + [QGVAR(setShotParents), {(_this select 0) setShotParents [_this select 1, _this select 2]}] call CBA_fnc_addEventHandler; ["ace_setOwner", {(_this select 0) setOwner (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(serverLog), FUNC(serverLog)] call CBA_fnc_addEventHandler; }; From f0c8d5ad95778be6dc047873f305698efc5533a0 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 11 Apr 2017 10:02:59 -0500 Subject: [PATCH 30/94] Fix FCS Vehicle Init (#5063) --- addons/fcs/CfgEventHandlers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/fcs/CfgEventHandlers.hpp b/addons/fcs/CfgEventHandlers.hpp index b477f93d6a..9c5c368307 100644 --- a/addons/fcs/CfgEventHandlers.hpp +++ b/addons/fcs/CfgEventHandlers.hpp @@ -17,7 +17,7 @@ class Extended_PostInit_EventHandlers { }; }; -class Extended_Init_EventHandlers { +class Extended_InitPost_EventHandlers { class Tank { class ADDON { serverInit = QUOTE(_this call FUNC(vehicleInit)); From fb73286242ab0b0e556ecd163453dc8b1f1a2b3c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 11 Apr 2017 10:04:57 -0500 Subject: [PATCH 31/94] Tweak overheating (#4969) * Tweak overheating * Add define for constant magic num --- addons/common/functions/fnc_interpolateFromArray.sqf | 2 +- addons/overheating/functions/fnc_firedEH.sqf | 2 +- addons/overheating/functions/fnc_swapBarrelCallback.sqf | 2 +- addons/overheating/functions/fnc_updateTemperature.sqf | 2 +- addons/overheating/script_component.hpp | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_interpolateFromArray.sqf b/addons/common/functions/fnc_interpolateFromArray.sqf index 07207071e7..aac21aab7a 100644 --- a/addons/common/functions/fnc_interpolateFromArray.sqf +++ b/addons/common/functions/fnc_interpolateFromArray.sqf @@ -18,4 +18,4 @@ params ["_array", "_value"]; private _min = _array select floor _value; private _max = _array select ceil _value; -_min + (_max - _min) * (_value % 1) // return +linearConversion [0, 1, _value % 1, _min, _max] // return diff --git a/addons/overheating/functions/fnc_firedEH.sqf b/addons/overheating/functions/fnc_firedEH.sqf index d641e82d07..f46af66358 100644 --- a/addons/overheating/functions/fnc_firedEH.sqf +++ b/addons/overheating/functions/fnc_firedEH.sqf @@ -94,7 +94,7 @@ if (GVAR(showParticleEffects) && {(CBA_missionTime > ((_unit getVariable [QGVAR( // Only compute jamming for the local player if (_unit != ACE_player) exitWith {END_COUNTER(firedEH);}; -_jamChance = _jamChance * ([[0.5, 1.5, 15, 150], 3 * _scaledTemperature] call EFUNC(common,interpolateFromArray)); +_jamChance = _jamChance * ([[0.5, 1, 2, 8, 20, 150], 5 * _scaledTemperature] call EFUNC(common,interpolateFromArray)); // increase jam chance on dusty grounds if prone (and at ground level) if ((stance _unit == "PRONE") && {((getPosATL _unit) select 2) < 1}) then { diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 0e4326cfea..99cf8298f5 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -31,7 +31,7 @@ if (_assistant isEqualTo _gunner) then { [localize LSTRING(SwappedBarrel), QPATHTOF(UI\spare_barrel_ca.paa)] call EFUNC(common,displayTextPicture); private _temp = _gunner getVariable [format [QGVAR(%1_temp), _weapon], 0]; -private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; +private _barrelMass = METAL_MASS_RATIO * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Instruct the server to load the coolest spare barrel into the weapon and // store the removed barrel with the former weapon temperature. The server diff --git a/addons/overheating/functions/fnc_updateTemperature.sqf b/addons/overheating/functions/fnc_updateTemperature.sqf index 51b4b13ae3..f56fc05e92 100644 --- a/addons/overheating/functions/fnc_updateTemperature.sqf +++ b/addons/overheating/functions/fnc_updateTemperature.sqf @@ -27,7 +27,7 @@ private _timeVarName = format [QGVAR(%1_time), _weapon]; private _temperature = _unit getVariable [_tempVarName, 0]; private _lastTime = _unit getVariable [_timeVarName, 0]; -private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; +private _barrelMass = METAL_MASS_RATIO * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Calculate cooling _temperature = [_temperature, _barrelMass, CBA_missionTime - _lastTime] call FUNC(calculateCooling); diff --git a/addons/overheating/script_component.hpp b/addons/overheating/script_component.hpp index 2eef9e2309..d7dde59da2 100644 --- a/addons/overheating/script_component.hpp +++ b/addons/overheating/script_component.hpp @@ -17,6 +17,7 @@ #include "\z\ace\addons\main\script_macros.hpp" #define TEMP_TOLERANCE 50 +#define METAL_MASS_RATIO 0.55 #ifdef DEBUG_MODE_FULL #define TRACE_PROJECTILE_INFO(BULLET) _vdir = vectorNormalized velocity BULLET; _dir = (_vdir select 0) atan2 (_vdir select 1); _up = asin (_vdir select 2); _mv = vectorMagnitude velocity BULLET; TRACE_3("adjusted projectile",_dir,_up,_mv); From 6c592e5a1059303b8a262b0170cc7cdddaf85353 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 11 Apr 2017 10:06:29 -0500 Subject: [PATCH 32/94] Virtual units - skip goggles/hearing effects (#4988) * Disable goggles and hearing fx for virtual units * Cleanup some other CBA_fnc_addPlayerEventHandler --- addons/common/XEH_postInit.sqf | 12 +---- addons/goggles/XEH_postInit.sqf | 46 ++++++++++--------- .../functions/fnc_applyGlassesEffect.sqf | 12 +++-- addons/hearing/XEH_postInit.sqf | 6 ++- addons/map/XEH_postInitClient.sqf | 7 +-- 5 files changed, 43 insertions(+), 40 deletions(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 21c070c618..adea925980 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -296,18 +296,10 @@ enableCamShake true; // Set up numerous eventhanders for player controlled units ////////////////////////////////////////////////// -// It is possible that CBA_fnc_addPlayerEventHandler has allready been called and run -// We will NOT get any events for the initial state, so manually set ACE_player -if (!isNull (missionNamespace getVariable ["cba_events_oldUnit", objNull])) then { - // INFO("CBA_fnc_addPlayerEventHandler has already run - manually setting ace_player"); //ToDo CBA 3.1 - diag_log text "[ACE-Common - CBA_fnc_addPlayerEventHandler has already run - manually setting ace_player"; - ACE_player = cba_events_oldUnit; -}; - -// "playerChanged" event +TRACE_1("adding unit playerEH to set ace_player",isNull cba_events_oldUnit); ["unit", { ACE_player = (_this select 0); -}] call CBA_fnc_addPlayerEventHandler; +}, true] call CBA_fnc_addPlayerEventHandler; GVAR(OldIsCamera) = false; diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index b7b5de9e1b..5b93a7a459 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -20,7 +20,7 @@ if (!hasInterface) exitWith {}; if (GVAR(effects) == 0) exitWith {}; // ---Add the TINT Effect--- - + // make sure to stack effect layers in correct order GVAR(GogglesEffectsLayer) = QGVAR(GogglesEffectsLayer) call BIS_fnc_RSCLayer; GVAR(GogglesLayer) = QGVAR(GogglesLayer) call BIS_fnc_RSCLayer; @@ -29,6 +29,26 @@ if (!hasInterface) exitWith {}; GVAR(UsePP) = true; }; + // init pp effects + GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; + GVAR(EffectsActive) = false; + + // add glasses eventhandlers + ["ace_glassesChanged", { + params ["_unit", "_glasses"]; + TRACE_2("ace_glassesChanged eh",_unit,_glasses); + + SETGLASSES(_unit,GLASSESDEFAULT); + + if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; + + if ([_unit] call FUNC(isGogglesVisible)) then { + [_unit, _glasses] call FUNC(applyGlassesEffect); + } else { + call FUNC(removeGlassesEffect); + }; + }] call CBA_fnc_addEventHandler; + // init GlassesChanged eventhandler GVAR(OldGlasses) = ""; ["loadout", { @@ -40,12 +60,9 @@ if (!hasInterface) exitWith {}; ["ace_glassesChanged", [_unit, _currentGlasses]] call CBA_fnc_localEvent; GVAR(OldGlasses) = _currentGlasses; }; - }] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; - // init pp effects - GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; - GVAR(EffectsActive) = false; // check goggles private _fnc_checkGoggles = { @@ -57,7 +74,7 @@ if (!hasInterface) exitWith {}; }; } else { if (!(call FUNC(externalCamera)) && {[_unit] call FUNC(isGogglesVisible)}) then { - [goggles _unit] call FUNC(applyGlassesEffect); + [_unit, goggles _unit] call FUNC(applyGlassesEffect); }; }; }; @@ -66,21 +83,6 @@ if (!hasInterface) exitWith {}; ["ace_activeCameraChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; - // add glasses eventhandlers - ["ace_glassesChanged", { - params ["_unit", "_glasses"]; - - SETGLASSES(_unit,GLASSESDEFAULT); - - if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; - - if ([_unit] call FUNC(isGogglesVisible)) then { - _glasses call FUNC(applyGlassesEffect); - } else { - call FUNC(removeGlassesEffect); - }; - }] call CBA_fnc_addEventHandler; - // // ---Add the Dust/Dirt/Rain Effects--- if (GVAR(effects) == 2) then { @@ -96,7 +98,7 @@ if (!hasInterface) exitWith {}; GVAR(PostProcessEyes) ppEffectCommit 0; GVAR(PostProcessEyes) ppEffectEnable false; GVAR(PostProcessEyes_Enabled) = false; - + GVAR(FrameEvent) = [false, [false, 20]]; GVAR(DustHandler) = -1; GVAR(RainDrops) = objNull; diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 71a5b3b84c..71425ce6ca 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -5,23 +5,29 @@ * Sets dirt/rain overlay for glasses. * * Arguments: - * 0: Glasses classname to be applied + * 0: Player + * 1: Glasses classname to be applied * * Return Value: * None * * Example: - * [goggles ace_player] call ace_goggles_fnc_applyGlassesEffect + * [ace_player, goggles ace_player] call ace_goggles_fnc_applyGlassesEffect * * Public: No */ #include "script_component.hpp" -params ["_glasses"]; +params ["_player", "_glasses"]; +TRACE_2("applyGlassesEffect",_player,_glasses); // remove old effect call FUNC(removeGlassesEffect); +if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _player) >> "isPlayableLogic")) == 1) exitWith { + TRACE_1("skipping playable logic",typeOf _player); // VirtualMan_F (placeable logic zeus / spectator) +}; + private ["_config", "_postProcessColour", "_postProcessTintAmount", "_imagePath"]; _config = configFile >> "CfgGlasses" >> _glasses; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index cd2a5aec16..17548a973b 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -48,7 +48,7 @@ GVAR(lastPlayerVehicle) = objNull; ["unit", { params ["_player", "_oldPlayer"]; TRACE_2("unit change",_player,_oldPlayer); - + if (!isNull _oldPlayer) then { private _firedEH = _oldPlayer getVariable [QGVAR(firedEH), -1]; _oldPlayer removeEventHandler ["FiredNear", _firedEH]; @@ -60,6 +60,9 @@ GVAR(lastPlayerVehicle) = objNull; }; // Don't add a new EH if the unit respawned if ((_player getVariable [QGVAR(firedEH), -1]) == -1) then { + if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _player) >> "isPlayableLogic")) == 1) exitWith { + TRACE_1("skipping playable logic",typeOf _player); // VirtualMan_F (placeable logic zeus / spectator) + }; private _firedEH = _player addEventHandler ["FiredNear", {call FUNC(firedNear)}]; _player setVariable [QGVAR(firedEH), _firedEH]; private _explosionEH = _player addEventHandler ["Explosion", {call FUNC(explosionNear)}]; @@ -69,7 +72,6 @@ GVAR(lastPlayerVehicle) = objNull; GVAR(deafnessDV) = 0; GVAR(deafnessPrior) = 0; - ACE_player setVariable [QGVAR(deaf), false]; GVAR(time3) = 0; [] call FUNC(updateHearingProtection); }, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 110d07ee0c..f022e2c81e 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -116,12 +116,13 @@ call FUNC(determineZoom); GVAR(hasWatch) = true; ["loadout", { - if (isNull (_this select 0)) exitWith { + params ["_unit"]; + if (isNull _unit) exitWith { GVAR(hasWatch) = true; }; GVAR(hasWatch) = false; { if (_x isKindOf ["ItemWatch", configFile >> "CfgWeapons"]) exitWith {GVAR(hasWatch) = true;}; false - } count (assignedItems ACE_player); -}] call CBA_fnc_addPlayerEventHandler; + } count (assignedItems _unit); +}, true] call CBA_fnc_addPlayerEventHandler; From f44da354d5bab851dbd415a860da2bb37c24b1b7 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 11 Apr 2017 10:12:03 -0500 Subject: [PATCH 33/94] Fix tagging model cache (#5055) --- addons/tagging/XEH_postInit.sqf | 4 ++-- addons/tagging/functions/fnc_checkTaggable.sqf | 18 ++++++------------ addons/tagging/functions/fnc_tag.sqf | 12 ++++-------- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/addons/tagging/XEH_postInit.sqf b/addons/tagging/XEH_postInit.sqf index 6693bda2f6..1e7003281a 100644 --- a/addons/tagging/XEH_postInit.sqf +++ b/addons/tagging/XEH_postInit.sqf @@ -16,7 +16,7 @@ for "_index" from 0 to (_countOptions - 1) do { private _model = getText (_cfgClass >> "model"); if (_model != "") then { private _array = _model splitString "\"; - GVAR(cacheStaticModels) setVariable [toLower (_array select ((count _array) - 2)), _cfgClass]; + GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true]; }; }; }; @@ -32,7 +32,7 @@ for "_index" from 0 to (_countOptions - 1) do { private _model = getText (_cfgClass >> "model"); if (_model != "") then { private _array = _model splitString "\"; - GVAR(cacheStaticModels) setVariable [toLower (_array select ((count _array) - 2)), _cfgClass]; + GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true]; }; }; }; diff --git a/addons/tagging/functions/fnc_checkTaggable.sqf b/addons/tagging/functions/fnc_checkTaggable.sqf index d739bbfec5..e4328687a9 100644 --- a/addons/tagging/functions/fnc_checkTaggable.sqf +++ b/addons/tagging/functions/fnc_checkTaggable.sqf @@ -9,16 +9,14 @@ * Is surface taggable * * Example: - * [unit] call ace_tagging_fnc_checkTaggable + * [player] call ace_tagging_fnc_checkTaggable * * Public: No */ #include "script_component.hpp" -params ["_unit"]; - -[[_unit], { +[_this, { params ["_unit"]; // Exit if no required item in inventory @@ -45,15 +43,11 @@ params ["_unit"]; if (_object isKindOf "Static") exitWith {false}; // If the class is not categorized correctly search the cache - private _array = str(_object) splitString " "; - private _str = toLower (_array select 1); - TRACE_1("Object:",_str); - private _objClass = GVAR(cacheStaticModels) getVariable _str; + private _modelName = (getModelInfo _object) select 0; + private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false]; + TRACE_2("Object:",_modelName,_isStatic); // If the class in not on the cache, exit - if (isNil "_objClass") exitWith { - false - }; - true + (!_isStatic) }) exitWith { TRACE_1("Pointed object is non static",_object); false diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index 3aec5ec139..f90e09cd0a 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -49,15 +49,11 @@ if ((!isNull _object) && { if (_object isKindOf "Static") exitWith {false}; // If the class is not categorized correctly search the cache - private _array = str(_object) splitString " "; - private _str = toLower (_array select 1); - TRACE_1("Object:",_str); - private _objClass = GVAR(cacheStaticModels) getVariable _str; + private _modelName = (getModelInfo _object) select 0; + private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false]; + TRACE_2("Object:",_modelName,_isStatic); // If the class in not on the cache, exit - if (isNil "_objClass") exitWith { - false - }; - true + (!_isStatic) }) exitWith { TRACE_1("Pointed object is non static",_object); false From 8d43b899e6d3b9762d46f44b70400b31200a0bf9 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 11 Apr 2017 10:33:56 -0500 Subject: [PATCH 34/94] Frag - Cleanup and Performance (#5010) * Frag - Cleanup and Performance * Add dots --- .../functions/fnc_detonateAmmunition.sqf | 1 - addons/frag/ACE_Settings.hpp | 11 +- addons/frag/XEH_PREP.hpp | 12 +- addons/frag/XEH_postInit.sqf | 15 +- addons/frag/XEH_preInit.sqf | 5 - addons/frag/functions/fnc_addBlackList.sqf | 16 ++ addons/frag/functions/fnc_addPfhRound.sqf | 50 +++-- ...{fnc_addTrack.sqf => fnc_dev_addTrack.sqf} | 7 +- ..._drawTraces.sqf => fnc_dev_drawTraces.sqf} | 7 +- .../frag/functions/fnc_dev_startTracing.sqf | 8 + ...topTracing.sqf => fnc_dev_stopTracing.sqf} | 3 + ..._trackTrace.sqf => fnc_dev_trackTrace.sqf} | 0 addons/frag/functions/fnc_doSpall.sqf | 12 +- addons/frag/functions/fnc_fired.sqf | 10 +- addons/frag/functions/fnc_frago.sqf | 182 +++++++++--------- addons/frag/functions/fnc_masterPFH.sqf | 13 +- addons/frag/functions/fnc_pfhRound.sqf | 16 +- addons/frag/functions/fnc_removePfhRound.sqf | 11 -- addons/frag/functions/fnc_removeTrack.sqf | 13 -- addons/frag/functions/fnc_startTracing.sqf | 5 - addons/frag/script_component.hpp | 2 +- 21 files changed, 201 insertions(+), 198 deletions(-) rename addons/frag/functions/{fnc_addTrack.sqf => fnc_dev_addTrack.sqf} (66%) rename addons/frag/functions/{fnc_drawTraces.sqf => fnc_dev_drawTraces.sqf} (82%) create mode 100644 addons/frag/functions/fnc_dev_startTracing.sqf rename addons/frag/functions/{fnc_stopTracing.sqf => fnc_dev_stopTracing.sqf} (82%) rename addons/frag/functions/{fnc_trackTrace.sqf => fnc_dev_trackTrace.sqf} (100%) delete mode 100644 addons/frag/functions/fnc_removePfhRound.sqf delete mode 100644 addons/frag/functions/fnc_removeTrack.sqf delete mode 100644 addons/frag/functions/fnc_startTracing.sqf diff --git a/addons/cookoff/functions/fnc_detonateAmmunition.sqf b/addons/cookoff/functions/fnc_detonateAmmunition.sqf index 20ec84cbbd..c5c0a64549 100644 --- a/addons/cookoff/functions/fnc_detonateAmmunition.sqf +++ b/addons/cookoff/functions/fnc_detonateAmmunition.sqf @@ -65,7 +65,6 @@ if (_amountOfMagazines > 0) exitWith { private _velVec = _vectorAmmo vectorMultiply _speed; _projectile setVectorDir _velVec; _projectile setVelocity _velVec; - // [ACE_player, _projectile, [1,0,0,1]] call EFUNC(frag,addTrack); // visual debuging from ace_frag } else { _projectile setDamage 1; }; diff --git a/addons/frag/ACE_Settings.hpp b/addons/frag/ACE_Settings.hpp index eb0beea661..63a3d564d2 100644 --- a/addons/frag/ACE_Settings.hpp +++ b/addons/frag/ACE_Settings.hpp @@ -25,20 +25,13 @@ class ACE_Settings { displayName = CSTRING(MaxTrack); description = CSTRING(MaxTrack_Desc); typeName = "SCALAR"; - value = 500; + value = 10; }; class GVAR(maxTrackPerFrame) { category = CSTRING(Module_DisplayName); displayName = CSTRING(MaxTrackPerFrame); description = CSTRING(MaxTrackPerFrame_Desc); typeName = "SCALAR"; - value = 50; - }; - class GVAR(enableDebugTrace) { - category = CSTRING(Module_DisplayName); - displayName = CSTRING(EnableDebugTrace); - description = CSTRING(EnableDebugTrace_Desc); - typeName = "BOOL"; - value = 0; + value = 10; }; }; diff --git a/addons/frag/XEH_PREP.hpp b/addons/frag/XEH_PREP.hpp index a9a9d43c5b..a7fb8ff8c3 100644 --- a/addons/frag/XEH_PREP.hpp +++ b/addons/frag/XEH_PREP.hpp @@ -7,19 +7,17 @@ PREP(spallTrack); // * Other */ PREP(addBlackList); -PREP(addTrack); -PREP(drawTraces); -PREP(removeTrack); +PREP(dev_addTrack); +PREP(dev_drawTraces); PREP(spallHP); -PREP(startTracing); -PREP(stopTracing); -PREP(trackTrace); +PREP(dev_startTracing); +PREP(dev_stopTracing); +PREP(dev_trackTrace); // New tracking mechanisms PREP(masterPFH); PREP(pfhRound); PREP(addPfhRound); -PREP(removePfhRound); // THIS SHOULD ABE USED SPARINGLY // Explosive Reflection PREP(findReflections); diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf index 31f9515750..634212354c 100644 --- a/addons/frag/XEH_postInit.sqf +++ b/addons/frag/XEH_postInit.sqf @@ -1,11 +1,7 @@ #include "script_component.hpp" -if (GVAR(enableDebugTrace) && {!isMultiplayer}) then { - GVAR(traceFrags) = true; - GVAR(autoTrace) = true; -}; - if (isServer) then { + GVAR(lastFragTime) = -1; [QGVAR(frag_eh), {_this call FUNC(frago);}] call CBA_fnc_addEventHandler; }; @@ -24,6 +20,13 @@ if (isServer) then { // Cache for ammo type configs GVAR(cacheRoundsTypesToTrack) = [false] call CBA_fnc_createNamespace; -#ifdef DEBUG_ENABLED_FRAG + +// Debug stuff: + +#ifdef DRAW_FRAG_INFO +[] call FUNC(dev_startTracing); +#endif + +#ifdef DEBUG_MODE_FULL [true, true, 30] call FUNC(dev_debugAmmo); #endif diff --git a/addons/frag/XEH_preInit.sqf b/addons/frag/XEH_preInit.sqf index da87d01194..7cbd6092a1 100644 --- a/addons/frag/XEH_preInit.sqf +++ b/addons/frag/XEH_preInit.sqf @@ -6,23 +6,18 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; -GVAR(replacedBisArtyWrapper) = true; GVAR(blackList) = []; GVAR(traceFrags) = false; -GVAR(totalFrags) = 0; - GVAR(spallHPData) = []; GVAR(spallIsTrackingCount) = 0; -GVAR(autoTrace) = false; GVAR(traceID) = -1; GVAR(traces) = []; GVAR(tracesStarted) = false; GVAR(lastIterationIndex) = 0; GVAR(objects) = []; -GVAR(objectTypes) = []; GVAR(arguments) = []; ADDON = true; diff --git a/addons/frag/functions/fnc_addBlackList.sqf b/addons/frag/functions/fnc_addBlackList.sqf index 9950cab2b0..79cb41adab 100644 --- a/addons/frag/functions/fnc_addBlackList.sqf +++ b/addons/frag/functions/fnc_addBlackList.sqf @@ -1,5 +1,21 @@ +/* + * Author: Jaynus, NouberNou + * Adds a round to the blacklist (will be ignored). + * + * Arguments: + * 0: Projectile + * + * Return Value: + * Nothing + * + * Example: + * [bullet] call ace_frag_fnc_addBlackList + * + * Public: No + */ #include "script_component.hpp" params ["_round"]; +TRACE_1("addBlackList",_round); GVAR(blackList) pushBack _round; diff --git a/addons/frag/functions/fnc_addPfhRound.sqf b/addons/frag/functions/fnc_addPfhRound.sqf index f6cddbbd37..7c609f2146 100644 --- a/addons/frag/functions/fnc_addPfhRound.sqf +++ b/addons/frag/functions/fnc_addPfhRound.sqf @@ -1,27 +1,38 @@ +/* + * Author: Jaynus, NouberNou + * Starts tracking a round that will frag. + * Should only be called once per round. + * + * Arguments: + * 0: Shooter + * 1: Ammo classname + * 2: Projectile + * + * Return Value: + * Nothing + * + * Example: + * [player, "handGrenade", bullet] call ace_frag_fnc_addPfhRound + * + * Public: No + */ //#define DEBUG_MODE_FULL #include "script_component.hpp" -params ["_gun", "_type", "_round", ["_doFragTrack", false]]; +params ["_gun", "_type", "_round"]; +TRACE_3("addPfhRound",_gun,_type,_round); -if (!GVAR(enabled)) exitWith {}; +if (!GVAR(enabled)) exitWith {TRACE_1("setting disabled",_this);}; -//_enabled = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(enabled)); -//if (_enabled < 1) exitWith {}; +if (!alive _round) exitWith {TRACE_1("round dead?",_this);}; if (_round in GVAR(blackList)) exitWith { + TRACE_1("round in blackList",_this); REM(GVAR(blackList),_round); }; // Exit on max track -if ((count GVAR(objects)) > GVAR(maxTrack)) exitWith {}; - -if ( - _gun == ACE_player || - {(gunner _gun) == ACE_player} || - {local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}} -) then { - _doFragTrack = true; -}; +if ((count GVAR(objects)) >= GVAR(maxTrack)) exitWith {TRACE_1("maxTrack limit",count GVAR(objects));}; private _doSpall = false; if (GVAR(SpallEnabled)) then { @@ -29,23 +40,23 @@ if (GVAR(SpallEnabled)) then { GVAR(spallHPData) = []; }; if (GVAR(spallIsTrackingCount) > 5) then { - // ACE_player sideChat "LIMT!"; + TRACE_1("At Spall Limit",GVAR(spallIsTrackingCount)); } else { _doSpall = true; INC(GVAR(spallIsTrackingCount)); }; + TRACE_2("",_doSpall,GVAR(spallIsTrackingCount)); }; -// ACE_player sideChat format ["c: %1", GVAR(spallIsTrackingCount)]; -if (GVAR(autoTrace)) then { - [ACE_player, _round, [1, 0, 0, 1]] call FUNC(addTrack); -}; +#ifdef DRAW_FRAG_INFO +[ACE_player, _round, [0, 1, 0, 1]] call FUNC(dev_addTrack); +#endif // We only do the single track object check here. // We should do an {!(_round in GVAR(objects))} // But we leave that out here for optimization. So this cannot be a framework function // Otherwise, it should only be added once and from the FiredEH -if (_doFragTrack && {alive _round}) then { +if (alive _round) then { private _spallTrack = []; private _spallTrackID = []; @@ -64,5 +75,4 @@ if (_doFragTrack && {alive _round}) then { if (_doSpall) then { [_round, 1, _spallTrack, _spallTrackID] call FUNC(spallTrack); }; - // ACE_player sideChat "WTF2"; }; diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_dev_addTrack.sqf similarity index 66% rename from addons/frag/functions/fnc_addTrack.sqf rename to addons/frag/functions/fnc_dev_addTrack.sqf index a93106d518..764627b60f 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_dev_addTrack.sqf @@ -1,10 +1,5 @@ #include "script_component.hpp" -if (GVAR(autoTrace)) then { - [] call FUNC(startTracing); -}; - -// setAccTime 0.05; params ["_origin", "_obj", ["_color", [1, 0, 0, 1]]]; private _positions = []; @@ -13,4 +8,4 @@ _positions pushBack [getPos _obj, _objSpd]; private _data = [_origin, typeOf _origin, typeOf _obj, _objSpd, _positions, _color]; private _index = GVAR(traces) pushBack _data; -[DFUNC(trackTrace), 0, [_obj, _index, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; +[DFUNC(dev_trackTrace), 0, [_obj, _index, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_dev_drawTraces.sqf similarity index 82% rename from addons/frag/functions/fnc_drawTraces.sqf rename to addons/frag/functions/fnc_dev_drawTraces.sqf index 6dd710f61c..c6ab838e84 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_dev_drawTraces.sqf @@ -1,11 +1,10 @@ #include "script_component.hpp" { - private _positions = _x select 4; - private _color = _x select 5; + _x params ["", "", "", "", "_positions", "_color"]; private _index = 0; private _max = count _positions; - private _lastSpd = []; + // private _lastSpd = []; private _lastPos = []; while {_index < _max} do { _data1 = _positions select _index; @@ -17,7 +16,7 @@ drawLine3D [_pos1, _pos2, _color]; _lastPos = _pos2; - _lastSpd = _data1 select 1; + // _lastSpd = _data1 select 1; }; // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format ["%1m/s", _lastSpd], 1, 0.05, "RobotoCondensed"]; } forEach GVAR(traces); diff --git a/addons/frag/functions/fnc_dev_startTracing.sqf b/addons/frag/functions/fnc_dev_startTracing.sqf new file mode 100644 index 0000000000..b58a491896 --- /dev/null +++ b/addons/frag/functions/fnc_dev_startTracing.sqf @@ -0,0 +1,8 @@ +#include "script_component.hpp" + +if (GVAR(tracesStarted)) exitWith {}; + +INFO("Starting Trace Drawing"); + +GVAR(tracesStarted) = true; +GVAR(traceID) = [LINKFUNC(dev_drawTraces), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_stopTracing.sqf b/addons/frag/functions/fnc_dev_stopTracing.sqf similarity index 82% rename from addons/frag/functions/fnc_stopTracing.sqf rename to addons/frag/functions/fnc_dev_stopTracing.sqf index e06a9a2b46..c25021bb4e 100644 --- a/addons/frag/functions/fnc_stopTracing.sqf +++ b/addons/frag/functions/fnc_dev_stopTracing.sqf @@ -1,5 +1,8 @@ #include "script_component.hpp" if (!GVAR(tracesStarted)) exitWith {}; + +INFO("Ending Trace Drawing"); + GVAR(tracesStarted) = false; [GVAR(traceID)] call CBA_fnc_removePerFrameHandler; diff --git a/addons/frag/functions/fnc_trackTrace.sqf b/addons/frag/functions/fnc_dev_trackTrace.sqf similarity index 100% rename from addons/frag/functions/fnc_trackTrace.sqf rename to addons/frag/functions/fnc_dev_trackTrace.sqf diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 97c52062d1..ee1bc37384 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -99,9 +99,9 @@ for "_i" from 1 to _spallCount do { _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; - if (GVAR(traceFrags)) then { - [ACE_player, _fragment, [1, 0.5, 0, 1]] call FUNC(addTrack); - }; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragment, [1, 0.5, 0, 1]] call FUNC(dev_addTrack); + #endif }; _spread = 5 + (random 5); @@ -122,7 +122,7 @@ for "_i" from 1 to _spallCount do { _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; - if (GVAR(traceFrags)) then { - [ACE_player, _fragment, [1, 0, 0, 1]] call FUNC(addTrack); - }; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragment, [1, 0, 0, 1]] call FUNC(dev_addTrack); + #endif }; diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 96841dd7ac..42885d55b0 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -50,6 +50,14 @@ if (isNil "_shouldAdd") then { }; if (_shouldAdd) then { - TRACE_3("Running Frag Tracking",_unit,_ammo,_projectile); + // firedMan will have nil "_gunner", so just check _unit; for firedVehicle we want to check _gunner + private _localShooter = if (isNil "_gunner") then {local _unit} else {local _gunner}; + TRACE_4("",_localShooter,_unit,_ammo,_projectile); + if (!_localShooter) exitWith {}; + + // Skip if less than 0.5 second from last shot + if ((CBA_missionTime - (_unit getVariable [QGVAR(lastTrack), -1])) < 0.5) exitWith {}; + _unit setVariable [QGVAR(lastTrack), CBA_missionTime]; + [_unit, _ammo, _projectile] call FUNC(addPfhRound); }; diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 5481649b54..49f1a62237 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -1,17 +1,35 @@ -//fnc_frago.sqf -// #define DEBUG_MODE_FULL +/* + * Author: Jaynus, NouberNou + * Server func to create the fragmentation for a round. + * + * Arguments: + * 0: Last Position (ASL) + * 1: Velocity + * 2: Ammo Classname + * + * Return Value: + * Nothing + * + * Example: + * [[], [], "handGrenade"] call ace_frag_fnc_frago + * + * Public: No + */ +//#define DEBUG_MODE_FULL #include "script_component.hpp" #define FRAG_VEC_VAR 0.004 - #define MAX_FRAG_COUNT 50 -if (!isServer) exitWith {}; - BEGIN_COUNTER(frago); -// _startTime = diag_tickTime; -params ["_round", "_lastPos", "_lastVel", "_shellType", "_firedFrame", "_gun"]; +params ["_lastPos", "_lastVel", "_shellType"]; +TRACE_3("frago",_lastPos,_lastVel,_shellType); + +// Limit max frag count if there was a recent frag +private _maxFrags = round (MAX_FRAG_COUNT * linearConversion [0.1, 1.5, (CBA_missionTime - GVAR(lastFragTime)), 0.1, 1, true]); +TRACE_2("",_maxFrags,CBA_missionTime - GVAR(lastFragTime)); +GVAR(lastFragTime) = CBA_missionTime; private _fragTypes = [ QGVAR(tiny), QGVAR(tiny), QGVAR(tiny), @@ -28,12 +46,6 @@ if (isArray (configFile >> "CfgAmmo" >> _shellType >> QGVAR(CLASSES))) then { _warn = true; }; -private _isArmed = true; -if (!isNil "_gun") then { - private _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); - _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); -}; - private _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); private _fragRange = 20 * _indirectHitRange * 4; // _c = 185; // grams of comp-b @@ -69,104 +81,91 @@ if ((_atlPos select 2) < 0.5) then { _lastPos vectorAdd [0, 0, 0.5]; }; -// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; - -// setAccTime 0.01; - -//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects private _objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; - -// _objects = _manObjects; // Add unique crews in faster way { { _objects pushBackUnique _x; } forEach (crew _x); } forEach _objects; +TRACE_2("",_fragRange,count _objects); private _fragCount = 0; private _fragArcs = []; _fragArcs set [360, 0]; -#ifdef DEBUG_MODE_FULL - ACE_player sideChat format ["_fragRange: %1", _fragRange]; - ACE_player sideChat format ["_objects: %1", _objects]; -#endif - private _doRandom = true; -if (_isArmed && {!(_objects isEqualTo [])}) then { +if (!(_objects isEqualTo [])) then { if (GVAR(reflectionsEnabled)) then { [_lastPos, _shellType] call FUNC(doReflections); }; { - //if (random(1) > 0.5) then { - private _target = _x; - if (alive _target) then { - (boundingBox _target) params ["_boundingBoxA", "_boundingBoxB"]; + private _target = _x; + if (alive _target) then { + (boundingBox _target) params ["_boundingBoxA", "_boundingBoxB"]; - private _cubic = ((abs (_boundingBoxA select 0)) + (_boundingBoxB select 0)) * ((abs (_boundingBoxA select 1)) + (_boundingBoxB select 1)) * ((abs (_boundingBoxA select 2)) + (_boundingBoxB select 2)); + private _cubic = ((abs (_boundingBoxA select 0)) + (_boundingBoxB select 0)) * ((abs (_boundingBoxA select 1)) + (_boundingBoxB select 1)) * ((abs (_boundingBoxA select 2)) + (_boundingBoxB select 2)); - if (_cubic <= 1) exitWith {}; - _doRandom = true; + if (_cubic <= 1) exitWith {}; + // _doRandom = true; - private _targetVel = velocity _target; - private _targetPos = getPosASL _target; - private _distance = _targetPos vectorDistance _lastPos; - private _add = ((_boundingBoxB select 2) / 2) + ((((_distance - (_fragpower / 8)) max 0) / _fragPower) * 10); + private _targetVel = velocity _target; + private _targetPos = getPosASL _target; + private _distance = _targetPos vectorDistance _lastPos; + private _add = ((_boundingBoxB select 2) / 2) + ((((_distance - (_fragpower / 8)) max 0) / _fragPower) * 10); - _targetPos = _targetPos vectorAdd [ - (_targetVel select 0) * (_distance / _fragPower), - (_targetVel select 1) * (_distance / _fragPower), - _add - ]; + _targetPos = _targetPos vectorAdd [ + (_targetVel select 0) * (_distance / _fragPower), + (_targetVel select 1) * (_distance / _fragPower), + _add + ]; - private _baseVec = _lastPos vectorFromTo _targetPos; + private _baseVec = _lastPos vectorFromTo _targetPos; - private _dir = floor (_baseVec call CBA_fnc_vectDir); - private _currentCount = RETDEF(_fragArcs select _dir,0); - if (_currentCount < 20) then { - private _count = ceil (random (sqrt (_m / 1000))); - private _vecVar = FRAG_VEC_VAR; - if (!(_target isKindOf "Man")) then { - ADD(_vecVar,(sqrt _cubic) / 2000); - if ((crew _target) isEqualTo [] && {_count > 0}) then { - _count = 0 max (_count / 2); - }; + private _dir = floor (_baseVec call CBA_fnc_vectDir); + private _currentCount = RETDEF(_fragArcs select _dir,0); + if (_currentCount < 10) then { + private _count = ceil (random (sqrt (_m / 1000))); + private _vecVar = FRAG_VEC_VAR; + if (!(_target isKindOf "Man")) then { + ADD(_vecVar,(sqrt _cubic) / 2000); + if ((crew _target) isEqualTo [] && {_count > 0}) then { + _count = 0 max (_count / 2); }; - for "_i" from 1 to _count do { - private _vec = _baseVec vectorDiff [ - (_vecVar / 2) + (random _vecVar), - (_vecVar / 2) + (random _vecVar), - (_vecVar / 2) + (random _vecVar) - ]; - - private _fp = _fragPower - (random (_fragPowerRandom)); - private _vel = _vec vectorMultiply _fp; - - private _fragType = round (random ((count _fragTypes) - 1)); - private _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - // diag_log text format ["fp: %1 %2", _fp, typeOf _fragObj]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - if (GVAR(traceFrags)) then { - INC(GVAR(totalFrags)); - [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); - }; - INC(_fragCount); - INC(_currentCount); - }; - _fragArcs set [_dir, _currentCount]; }; + for "_i" from 1 to _count do { + private _vec = _baseVec vectorDiff [ + (_vecVar / 2) + (random _vecVar), + (_vecVar / 2) + (random _vecVar), + (_vecVar / 2) + (random _vecVar) + ]; + + private _fp = _fragPower - (random (_fragPowerRandom)); + private _vel = _vec vectorMultiply _fp; + + private _fragObj = (selectRandom _fragTypes) createVehicleLocal [0,0,10000]; + // TRACE_4("targeted",_fp, typeOf _fragObj,_lastPos vectorDistance _targetPos,typeOf _x); + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragObj, [1,0,0,1]] call FUNC(dev_addTrack); + #endif + INC(_fragCount); + INC(_currentCount); + }; + _fragArcs set [_dir, _currentCount]; }; - //}; - if (_fragCount > MAX_FRAG_COUNT) exitWith {}; + }; + if (_fragCount > _maxFrags) exitWith {}; } forEach _objects; - if (_fragCount > MAX_FRAG_COUNT) exitWith {}; - private _randomCount = ((ceil ((MAX_FRAG_COUNT - _fragCount) * 0.1)) max 0) + 20; + TRACE_1("targeted",_fragCount); + if (_fragCount > _maxFrags) exitWith {}; + private _randomCount = ceil ((_maxFrags - _fragCount) * 0.35); + TRACE_1("",_randomCount); private _sectorSize = 360 / (_randomCount max 1); - // _doRandom = false; + if (_doRandom) then { for "_i" from 1 to _randomCount do { // Distribute evenly @@ -178,24 +177,19 @@ if (_isArmed && {!(_objects isEqualTo [])}) then { _vel = _vec vectorMultiply _fp; - _fragType = round (random ((count _fragTypes) - 1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0, 0, 10000]; + _fragObj = (selectRandom _fragTypes) createVehicleLocal [0, 0, 10000]; _fragObj setPosASL _lastPos; _fragObj setVectorDir _vec; _fragObj setVelocity _vel; - if (GVAR(traceFrags)) then { - INC(GVAR(totalFrags)); - [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); - }; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(dev_addTrack); + #endif INC(_fragCount); }; }; - }; -// #ifdef DEBUG_MODE_FULL - // ACE_player sideChat format["total frags: %1", GVAR(totalFrags)]; - // ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; -// #endif -// _endTime = diag_tickTime; + +TRACE_1("total created",_fragCount); + END_COUNTER(frago); diff --git a/addons/frag/functions/fnc_masterPFH.sqf b/addons/frag/functions/fnc_masterPFH.sqf index f6adb56161..10b7743102 100644 --- a/addons/frag/functions/fnc_masterPFH.sqf +++ b/addons/frag/functions/fnc_masterPFH.sqf @@ -1,19 +1,20 @@ /* * Author: jaynus - * - * Master single PFH abstraction for all rounds being tracked by frag/spall + * Master single PFH abstraction for all rounds being tracked by frag/spall. * * Arguments: - * + * None * * Return Value: * None */ //#define DEBUG_MODE_FULL #include "script_component.hpp" -//PARAMS_2(_pfhArgs,_handle); -if (!GVAR(enabled)) exitWith {}; +BEGIN_COUNTER(PFH); + +// Fast exit if nothing to do +if (GVAR(objects) isEqualTo []) exitWith {END_COUNTER(PFH);}; private _gcIndex = []; @@ -47,3 +48,5 @@ private _deletionCount = 0; INC(_deletionCount); } forEach _gcIndex; + +END_COUNTER(PFH); diff --git a/addons/frag/functions/fnc_pfhRound.sqf b/addons/frag/functions/fnc_pfhRound.sqf index f233fa45a6..3c72a525c9 100644 --- a/addons/frag/functions/fnc_pfhRound.sqf +++ b/addons/frag/functions/fnc_pfhRound.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" -params ["_round", "_lastPos", "_lastVel", "_type", "_firedFrame", "_gun", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; +params ["_round", "_lastPos", "_lastVel", "_shellType", "_firedFrame", "_gun", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; if (_round in GVAR(blackList)) exitWith { false @@ -11,14 +11,22 @@ if (!alive _round) exitWith { if (_skip == 0) then { if ((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1}) then { // shotbullet, shotShell don't seem to explode when touching water, so don't create frags - if (((_lastPos select 2) < 0) && {(toLower getText (configFile >> "CfgAmmo" >> _type >> "simulation")) in ["shotbullet", "shotshell"]}) exitWith {}; - [QGVAR(frag_eh), _this] call CBA_fnc_serverEvent; + if (((_lastPos select 2) < 0) && {(toLower getText (configFile >> "CfgAmmo" >> _shellType >> "simulation")) in ["shotbullet", "shotshell"]}) exitWith {}; + private _isArmed = true; + if (!isNil "_gun") then { + private _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); + _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); + TRACE_2("",_fuseDist,_isArmed); + }; + if (!_isArmed) exitWith {TRACE_1("round not armed",_this);}; + TRACE_3("Sending frag event to server",_lastPos,_lastVel,_shellType); + [QGVAR(frag_eh), [_lastPos,_lastVel,_shellType]] call CBA_fnc_serverEvent; }; }; }; if (_doSpall) then { DEC(GVAR(spallIsTrackingCount)); - // diag_log text format ["F: %1", _foundObjectHPIds]; + TRACE_1("doSpall",_foundObjectHPIds); { if (!isNil "_x") then { _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; diff --git a/addons/frag/functions/fnc_removePfhRound.sqf b/addons/frag/functions/fnc_removePfhRound.sqf deleted file mode 100644 index 9241c7aecb..0000000000 --- a/addons/frag/functions/fnc_removePfhRound.sqf +++ /dev/null @@ -1,11 +0,0 @@ -#include "script_component.hpp" - -// THIS FUNCTION SHOULD NOT BE USED BECAUSE IT CAUSES AN SEARCH AND REBUILD - -params ["_round"]; - -if (_round in GVAR(blackList)) then { - REM(GVAR(blackList),_round); -}; - -REM(GVAR(objects),_round); diff --git a/addons/frag/functions/fnc_removeTrack.sqf b/addons/frag/functions/fnc_removeTrack.sqf deleted file mode 100644 index 8c0f7e3736..0000000000 --- a/addons/frag/functions/fnc_removeTrack.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -private _ret = true; -if (IS_ARRAY(_this select 0)) then { - _ret = false; -} else { - if ((_this select 0) in GVAR(trackedObjects)) then { - REM(GVAR(trackedObjects),_this select 0); - } else { - _ret = false; - }; -}; -_ret diff --git a/addons/frag/functions/fnc_startTracing.sqf b/addons/frag/functions/fnc_startTracing.sqf deleted file mode 100644 index c697a8dca2..0000000000 --- a/addons/frag/functions/fnc_startTracing.sqf +++ /dev/null @@ -1,5 +0,0 @@ -#include "script_component.hpp" - -if (GVAR(tracesStarted)) exitWith {}; -GVAR(tracesStarted) = true; -GVAR(traceID) = [FUNC(drawTraces), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 59868e36cf..0215e9f4d7 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -2,7 +2,7 @@ #define COMPONENT_BEAUTIFIED Frag #include "\z\ace\addons\main\script_mod.hpp" -//#define DEBUG_ENABLED_FRAG +// #define DRAW_FRAG_INFO // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS From a0e1205e54cba7a10defae9d78a35ab7298f5355 Mon Sep 17 00:00:00 2001 From: 11RDP-LoupVert Date: Wed, 12 Apr 2017 08:40:31 +0200 Subject: [PATCH 35/94] (Medical) French text - minor changes (#5043) Minor changes due to users feedback --- addons/medical/stringtable.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index f28bb754c6..6966b73c0b 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -146,7 +146,7 @@ Transfundir salino Transfúze fyziologického roztoku Przetocz sól fizjologiczną - Transfuser (liquide physiologique) + Transfuser (saline) Перелить физраствор Infúzió (sós víz) Trasfusione di soluzione salina @@ -341,7 +341,7 @@ Transfusión de salino... Probíha transfúze fyziologického roztoku... Przetaczanie soli fizjologicznej... - Transfusion (liquide physiologique)... + Transfusion (solution saline)... Переливание физраствора... Infúzió sós vizzel... Effettuo la rasfusione di soluzione salina @@ -454,7 +454,7 @@ QuikClot Opatrunek QuikClot QuikClot - Compresse hydrophile + Bandage hémostatique QuikClot QuikClot (polvere emostatica) QuikClot @@ -691,7 +691,7 @@ Dar Salino IV (1000ml) Перелить пакет физраствора (1000 мл) Podaj sól fizjologiczną IV (1000ml) - Liquide physiologique en IV (1000ml) + Solution saline en IV (1000ml) Podaz fyz. roztok (1000ml) Sós víz adása intravénásan (1000ml) Effettua trasfusione salina EV (1˙000ml) @@ -705,7 +705,7 @@ Dar Salino IV (500ml) Перелить пакет физраствора (500 мл) Podaj sól fizjologiczną IV (500ml) - Liquide physiologique en IV (500ml) + Solution saline en IV (500ml) Podaz fyz. roztok (500ml) Sós víz adása intravénásan (500ml) Effettua trasfusione salina EV (500ml) @@ -719,7 +719,7 @@ Dar Salino IV (250ml) Перелить пакет физраствора (250 мл) Podaj sól fizjologiczną IV (250ml) - Liquide physiologique en IV (250ml) + Solution saline en IV (250ml) Podaz fyz. roztok (250ml) Sós víz adása intravénásan (250ml) Effettua trasfusione salina EV (250ml) @@ -1012,7 +1012,7 @@ Bandage (Elastisch) Повязка (давящая) Vendaje (Elástico) - Bandage (Élastique) + Bande compressive Bandaż (elastyczny) Obvaz (Elastický) Rögzító kötszer @@ -1400,7 +1400,7 @@ Saline IV (1000ml) Физраствор для в/в вливания (1000 мл) Salino IV (1000ml) - Liquide physiologique IV (1000ml) + Solution saline IV (1000ml) Sól fizjologiczna IV (1000ml) Kochsalzlösung (1000ml) 0,9%-os sósvíz-infúzió (1000ml) @@ -1414,7 +1414,7 @@ Saline IV, for restoring a patients blood Пакет физраствора для возмещения объёма потерянной крови Solución salina intravenosa, para restaurar el volumen sanguíneo - Liquide physiologique, pour rétablir temporairement la tension artérielle + Solution saline, pour rétablir temporairement la tension artérielle Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). 0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására Soluzione salina, usata per ripristinare sangue nei pazienti. @@ -1442,7 +1442,7 @@ Saline IV (500ml) Физраствор для в/в вливания (500 мл) Salino IV (500ml) - Liquide physiologique IV (500ml) + Solution saline IV (500ml) Sól fizjologiczna IV (500ml) Kochsalzlösung (500ml) 0,9%-os sósvíz-infúzió (500ml) @@ -1456,7 +1456,7 @@ Saline IV (250ml) Физраствор для в/в вливания (250 мл) Salino IV (250ml) - Liquide physiologique IV (250ml) + Solution saline IV (250ml) Sól fizjologiczna IV (250ml) Kochsalzlösung (250ml) 0,9%-os sósvíz-infúzió (250ml) @@ -1484,7 +1484,7 @@ QuikClot bandage Гемостатический пакет QuikClot Vendaje QuikClot - Compresse hydrophile + Bandage hémostatique Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. Bandage mit Gerinnungsmittel QuikClot kötszer From bcd73edaba07eedac4d3bba517b49f29ac00ae55 Mon Sep 17 00:00:00 2001 From: 11RDP-LoupVert Date: Wed, 12 Apr 2017 10:39:41 +0200 Subject: [PATCH 36/94] French localization complete (#5079) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * French localization complete * STR_ACE_MapTools_drawStaightLines_description fix "l'on doit survoler le milieu du trait pour pouvoir le supprimer" * Space management alganthe : Espace en trop après référence. * Diapo alganthe : Slideshow -> diaporama Slide -> diapo * Cohesion fix alganthe : Vous avez traduit le nom du module juste au dessus (displayname). Il est vrai que les créateurs de missions doivent consulter une documentation principalement écrite en anglais, donc vous avez le choix de traduire la ligne ci-dessus ou la garder, les deux semblent valide à mes yeux. Reasoning : since French mission makers read reference material in English, it makes sense not to translate it and thus keep it simple for them. * Caisses de munitions caisse de mun -> caisses de munitions * STR_ACE_Scopes_Description Oops, forgot that one. --- addons/chemlights/stringtable.xml | 43 ++++++++++++++++++++++++++-- addons/cookoff/stringtable.xml | 12 ++++++-- addons/laser/stringtable.xml | 3 +- addons/map/stringtable.xml | 4 ++- addons/maptools/stringtable.xml | 4 ++- addons/medical_blood/stringtable.xml | 5 +++- addons/overpressure/stringtable.xml | 4 ++- addons/scopes/stringtable.xml | 22 +++++++++++++- addons/slideshow/stringtable.xml | 12 ++++---- addons/tagging/stringtable.xml | 4 +-- addons/zeus/stringtable.xml | 11 ++++++- 11 files changed, 105 insertions(+), 19 deletions(-) diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 20bba14951..1cbf1183f4 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,6 +7,7 @@ Świetliki Knicklichter 켐라이트 + Cyalumes Prepare %1 @@ -14,6 +15,7 @@ Przygotuj %1 %1 vorbereiten %1 준비 + Prépare %1 %1<br/>Prepared @@ -21,13 +23,14 @@ %1<br/>Przygotowany %1<br/>vorbereitet %1<br/>준비됨 + %1<br/>prêt No inventory space Kein Platz im Inventar Sin espacio en inventario Brak miejsca w ekwipunku - Pas de place dans l'inventaire + Pas de place Nedostatek místa v inventáři Sem espaço no inventário Non hai più spazio @@ -42,6 +45,7 @@ [ACE] Świetliki [ACE] Knicklichter [ACE] 켐라이트 + [ACE] Cyalume Chemlight (Orange) @@ -49,6 +53,7 @@ Świetlik (pomarańczowy) Knicklicht (orange) 켐라이트 (주황) + Cyalume (orange) Orange Light @@ -56,6 +61,7 @@ Pomarańczowe światło Oranges Knicklicht 주황색 + Lum. orange Type: Light - Orange<br />Rounds: 1<br />Used in: Hand @@ -63,6 +69,7 @@ Typ: Światło - pomarańczowe<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - orange<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 오렌지<br />수량: 1<br />사용처: 손 + Type: Lumière - orange<br />Nbre: 1<br /> À main Chemlight (White) @@ -70,6 +77,7 @@ Świetlik (biały) Knicklicht (weiß) 켐라이트 (하양) + Cyalume (blanc) White Light @@ -77,6 +85,7 @@ Białe światło Weißes Knicklicht 하얀색 + Lum. blanche Type: Light - White<br />Rounds: 1<br />Used in: Hand @@ -84,6 +93,7 @@ Typ: Światło - białe<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - weiß<br />Anzahl: 1<br />Benutzt in: Hand 종류:하얀색<br />수량: 1<br />사용처: 손 + Type: Lumière - blanche<br />Nbre: 1<br /> À main Chemlight (Hi Red) @@ -91,6 +101,7 @@ Świetlik (jaskrawy czerwony) Knicklicht (rot, hell) 켐라이트 (밝은 빨간색) + Cyalume (Hi rouge) Red Hi Light @@ -98,6 +109,7 @@ Jaskrawe czerwone światło Helles, rotes Knicklicht 밝은 빨간색 + Lum. rouge haute intensité Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -105,6 +117,7 @@ Typ: Światło - jaskrawe czerwone (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - rot, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 빨간색 (5분)<br />수량: 1<br />사용처: 손 + Type: Lumière - rouge Hi (5 minutes)<br />Nbre: 1<br /> À main Chemlight (Hi Yellow) @@ -112,6 +125,7 @@ Świetlik (jaskrawy żółty) Knicklicht (gelb, hell) 켐라이트 (밝은 노란색) + Cyalume (Hi jaune) Yellow Hi Light @@ -119,6 +133,7 @@ Jaskrawe żółte światło Helles, gelbes Knicklicht 밝은 노란색 + Lum. jaune haute intensité Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -126,6 +141,7 @@ Typ: Światło - jaskrawe żółte (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - gelb, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 노란색 (5분)<br />수량: 1<br />사용처: Hand + Type: Lumière - Jaune Hi (5 minutes)Nbre: 1<br /> À main Chemlight (Hi Orange) @@ -133,6 +149,7 @@ Świetlik (jaskrawy pomarańczowy) Knicklicht (orange, hell) 켐라이트 (밝은 주황색) + Cyalume (Hi orange) Orange Hi Light @@ -140,6 +157,7 @@ Jaskrawe pomarańczowe światło Helles, oranges Knicklicht 밝은 주황색 + Lum. orange haute intensité Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -147,6 +165,7 @@ Typ: Światło - jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - orange, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 주황색 (5분)<br />수량: 1<br />사용처: 손 + Type: Lumière - orange Hi (5 minutes)<br />Nbre: 1<br /> À main Chemlight (Hi White) @@ -154,6 +173,7 @@ Świetlik (jaskrawy biały) Knicklicht (weiß, hell) 켐라이트 (밝은 하얀색) + Cyalume (Hi blanc) White Hi Light @@ -161,6 +181,7 @@ Jaskrawe białe światło Helles, weißes Knicklicht 밝은 하얀색 + Lum. blanche haute intensité Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -168,6 +189,7 @@ Typ: Światło - jaskrawe białe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - weiß, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 하얀색 (5분)<br />수량: 1<br />사용처: 손 + Type: Lumière - blanche Hi (5 minutes)<br />Nbre: 1<br /> À main Chemlight (IR) @@ -175,6 +197,7 @@ Świetlik (podczerwony) Knicklicht (IR) 켐라이트 (적외선) + Cyalume (IR) IR Light @@ -182,6 +205,7 @@ Światło podczerwone IR-Knicklicht 적외선 켐라이트 + Lumière IR Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand @@ -189,6 +213,7 @@ Typ: Światło - podczerwone<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - infrarot<br />Anzahl: 1<br />Benutzt in: Hand 종류: 적외선<br />수량: 1<br />사용처: 손 + Type: Lumière - infrarouge<br />Nbre: 1<br /> À main Chemlight Shield (Empty) @@ -196,6 +221,7 @@ Osłona na świetlik (pusta) Knicklicht-Abschirmung (leer) 켐라이트 쉴드 (비어있음) + Étui cyalume (vide) Shield for chemlights. Combine with chemlight to prepare reading light. @@ -203,6 +229,7 @@ Osłona na świetliki. Połącz ją ze świetlikiem by stworzyć lampkę do czytania. Abschirmung für Knicklichter. Mit Knicklicht kombinieren, um Leselicht zu erhalten. 켐라이트를 위한 가림막입니다. 켐라이트와 같이 사용하여 읽을 때 씁니다. + Étui pour cyalume. Combiné avec un cyalume pour obtennir un lampe de lecture. Chemlight Shield (Green) @@ -210,6 +237,7 @@ Osłona na świetlik (zielona) Knicklicht-Abschirmung (grün) 켐라이트 쉴드 (초록) + Étui cyalume (vert) Green reading light. @@ -217,6 +245,7 @@ Zielona lampka. Grünes Leselicht. 초록빛 조명 + Lampe d'orientation verte. Chemlight Shield (Red) @@ -224,6 +253,7 @@ Osłona na świetlik (czerwona) Knicklicht-Abschirmung (rot) 켐라이트 쉴드 (빨강) + Étui cyalume (rouge) Red reading light. @@ -231,6 +261,7 @@ Czerwona lampka. Rotes Leselicht. 빨간색 조명 + Lampe d'orientation rouge. Chemlight Shield (Blue) @@ -238,6 +269,7 @@ Osłona na świetlik (niebieska) Knicklicht-Abschirmung (blau) 켐라이트 쉴드 (파랑) + Étui cyalume (bleu) Blue reading light. @@ -245,6 +277,7 @@ Niebieska lampka. Blaues Leselicht. 파란색 조명 + Lampe d'orientation bleue. Chemlight Shield (Yellow) @@ -252,6 +285,7 @@ Osłona na świetlik (żółta) Knicklicht-Abschirmung (gelb) 켐라이트 쉴드 (노랑) + Étui cyalume (jaune) Yellow reading light. @@ -259,6 +293,7 @@ Żółta lampka. Gelbes Leselicht. 노란색 조명 + Lampe d'orientation jaune. Chemlight Shield (Orange) @@ -266,6 +301,7 @@ Osłona na świetlik (pomarańczowa) Knicklicht-Abschirmung (orange) 켐라이트 쉴드 (주황) + Étui cyalume (orange) Orange reading light. @@ -273,6 +309,7 @@ Pomarańczowa lampka. Oranges Leselicht. 주황색 조명 + Lampe d'orientation orange. Chemlight Shield (White) @@ -280,6 +317,7 @@ Osłona na świetlik (biała) Knicklicht-Abschirmung (weiß) 켐라이트 쉴드 (하양) + Étui cyalume (blanc) White reading light. @@ -287,6 +325,7 @@ Biała lampka. Weißes Leselicht. 주황색 조명 + Lampe d'orientation blanche. diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 04fd809182..4aa9423b96 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ 誘爆を有効化 쿡오프 현상 활성화 Aktywuj efekty samozapłonu amunicji - Activer + Active le cook-off Enables cook off and related vehicle destruction effects. @@ -19,6 +19,7 @@ 誘爆を有効化し、車両が誘爆によって破壊されていきます。 쿡오프 현상을 활성화 하고 관련된 차량에 폭발 이펙트를 적용합니다. Aktywuje efekt samozapłonu amunicji na zniszczonych pojazdach. + Active le cook-off (autocombustion des munitions) et les effets de destruction liés. Wreck (Turret) @@ -40,6 +41,7 @@ Selbstzündung für Munitionskisten ermöglichen 탄약 상자 쿡오프 현상 활성화 Aktywuj samozapłon skrzyń z amunicją + Cook-off caisses de munitions Enables cooking off of ammo boxes. @@ -47,6 +49,7 @@ Ermöglicht Selbstzündung von Munitionskisten. 탄약 상자에 쿡오프 현상을 적용합니다. Aktywuje samozapłon skrzyń z amunicją + Active le cook-off sur toutes les caisses de munitions. Enable Ammunition cook off @@ -54,21 +57,24 @@ Selbstzündung für Munition ermöglichen 탄약 쿡오프 현상 활성화 Aktywuj samozapłon amunicji + Active le cook-off des munitions Enables Ammunition cook off. Fires ammunition projectiles while vehicle is on fire and has ammunition. 弾薬が誘爆します。車両が燃えると、搭載している弾薬が激しく燃え上がりす。 Ermöglicht Selbstzündung von Munition. Feuert Projektile der Munition ab, solange das Fahrzeug brennt und Munition besitzt. Aktywuje samozapłon amunicji. Wystrzeliwuje pociski podczas gdy pojazd płonie i posiada amunicję. + Mets à feu les munitions lorsqu'un véhicule est en feu et contient des munitions. Ammunition cook off duration Czas trwania samozapłonu amunicji 弾薬の誘爆持続時間 + Durée cook-off des munitions Multiplier for how long cook off lasts [Setting to 0 will disable ammo cookoff] - Active le et les effets de destructions assosicée aux vehicules. + Multiplicateur de la durée du cook-off des munitions [Une valeur de 0 désactive l'effet] Mnożnik decydujący jak długo ma trwać samozapłon amunicji [Ustawienie na 0 spowoduje wyłącznie samozapłonu] 誘爆の持続時間を乗数で設定。[0 に設定で誘爆を無効化] diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index 786cb6ec55..4014441551 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -7,6 +7,7 @@ Laserstreuung-Simulationszähler 레이저 분산 시뮬레이션 수 Wskaźnik poziomu rozproszenia wiązki lasera + Compte de la simulation de la dispersion du laser Laser Code @@ -51,4 +52,4 @@ 레이저 - 코드 순환 아래 - \ No newline at end of file + diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 2c0349dc0d..f5eb043e80 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -444,6 +444,7 @@ BFTを無効化 GPS피아식별기 끄기 Wyłącz BFT + Désactive le BFT Always disable Blue Force Tracking for this group. @@ -451,6 +452,7 @@ このグループへのブルー フォース トラッキングを常に無効化します。 이 그룹에 한해 GPS피아식별기를 항상 끕니다. Zawsze wyłączaj Blue Force Tracking dla tej grupy. + Désactive en permanence le Blue Force Tracking pour ce groupe. - \ No newline at end of file + diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index f22d3b7ed4..8828aed603 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -179,6 +179,7 @@ Zeichne gerade Linien mit dem Kartenwerkzeug 독도용 도구로 직선 그리기 Rysuj proste linie przy użyciu narzędzi nawigacyjnych + Tracer des lignes droites Draw on the edge of maptools to draw straight lines. Note: Must hover at midpoint to delete. @@ -186,6 +187,7 @@ Zeichne gerade Linien am Rand des Kartenwerkzeugs. Hinweis: zum Löschen über den Mittelpunkt der Linie fahren 독도용 도구 가장자리에 직선을 그립니다. 주의: 삭제하기 위해선 선의 중앙에 가져다 대십시요 Przeciągnij po krawędzi narzędzi nawigacyjnych by narysować prostą linię. Uwaga: aby usunąć linię - nalezy ustawić kursor nad jej środkiem. + Utiliser le bord des outils de navigation pour tracer des lignes droites. Note: l'on doit survoler le milieu du trait pour pouvoir le supprimer. - \ No newline at end of file + diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index a45dc29d90..8f4edbc9e2 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -7,6 +7,7 @@ Nur Spieler 오직 플레이어만 Tylko gracze + Joueurs seulement Enable Blood Drops @@ -14,12 +15,14 @@ Aktiviere Blutspritzer 피흘리기 활성화 Włącz ślady krwi na ziemi + Active les gouttes de sang Enable or disable Blood Drops created on bleeding and taking damage ダメージを受けたり、出血していると血が滴る様子の有効か無効化 Aktiviere oder deaktiviere Blutspritzer, die durch Blutungen oder bei Schadensnahme entstehen. Włącz lub wyłącz pozostawianie śladów krwi na ziemi kiedy postać odnosi obrażenia bądź krwawi + (Dés)active les gouttes de sang lors d'un saignement ou de blessure - \ No newline at end of file + diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index 420c732b8d..89d8cf8b2d 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -6,12 +6,14 @@ 過圧の距離係数 초과압력 거리 계수 Mnożnik dystansu nadciśnienia + Coéfficient de distance pour la surpression Scales the overpressure effect [Default: 1] 過圧効果の範囲 [標準: 1] 초과압력의 효과 크기 [기본설정: 1] Skaluje efekt nadciśnienia [Domyślne: 1] + Échelonne les effets de la surpression [Par défaut : 1] - \ No newline at end of file + diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index 4a4a9094dc..ce815a49df 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -6,114 +6,133 @@ スコープ 조준경 Celowniki optyczne + Scopes Enable ACE Scope adjustment ACE スコープ調節を有効化 ACE 조준경 영점조작 활성화 Włącz ustawienia celowników optycznych ACE + Active ACE Scope adjustment Enable adjustmet turrets on high powered scopes 高倍率スコープでACE スコープ調節を有効化 고성능 조준경 조절 나사 활성화 Włącz pokrętła regulacyjne + Permet de régler la hausse et la dérive sur les optiques de visée à fort grossissement Force adjustment turrets ACE スコープ調節を有効化 조절 나사 강제 Wymuś użycie pokręteł regulacyjnych + Impose le réglage de la hausse/dérive Force usage of adjustmet turrets on high powered scopes 高倍率スコープで調整の使用を強制させます 고성능 조준경의 조절 나사 사용을 강제합니다 Wymuś użycie pokręteł regulacyjnych dla celowników o dużym powiększeniu + Impose le réglage de la hausse/dérive sur les optiques de visée à fort grossissement Correct zeroing ゼロイン調節 영점 고치기 Poprawka zerowania + Corrige le zérotage Corrects the zeroing of all small arms sights 全ての小口径用照準器のゼロインを調節します 모든 소화기의 영점을 고칩니다 Poprawia zerowanie wszystkich celowników broni ręcznej + Corrige le zérotage des optiques de visée des petites armes Overwrite zero distance ゼロイン距離を上書き 영점거리 덮어쓰기 Nadpisuje ustawienie dla zerowego dystansu + Remplace la distance de zérotage Uses the 'defaultZeroRange' setting to overwrite the zero range of high power scopes 'defaultZeroRange'設定を使う高倍率スコープのゼロイン距離を上書きします 기존 고성능 조준경의 영점거리에 '기본설정 영점거리' 를 덮어씌웁니다 Używa 'defaultZeroRange' zamiast ustawionej odległości zerowania dla celowników o duzym przybliżeniu + Utilise le paramètre 'defaultZeroRange' pour remplacer la distance de zérotage sur les optiques de visée à fort grossissement Default zero distance 標準のゼロイン距離 기본설정 영점거리 Domyślne zerowanie + Distance de zérotage par défaut High power scopes will be zeroed at this distance 高倍率スコープのゼロイン距離はこの設定になります 고성능 조준경이 정해진 수만큼 영점거리를 맞추게 됩니다. Celowniki o dużym powiększeniu będą zerowane dla tej odległości + Distance de zérotage par défaut des optiques de visée à fort grossissement Reference temperature 温度の参照 온도 기준 Referencyjna temperatura + Température de référence Temperature at which the scope was zeroed スコープがゼロインされる温度 조준경 영점조준시 온도 Temperatura, przy której celownik został wyzerowany + Température de référence pour le zérotage des optiques Reference barometric pressure 気圧の参照 기압 기준 Referencyjne ciśnienie barometryczne + Pression barométrique de référence Barometric pressure at which the scope was zeroed 気圧の参照 조준경 영점조준시 기압 Ciśnienie barometryczne, przy którym celownik został wyzerowany + Pression barométrique de référence pour le zérotage des optiques Reference humidity 湿度の参照 습도 기준 Referencyjna wilgotność + Humidité de référence Humidity at which the scope was zeroed スコープがゼロインされる湿度 조준경 영점조준시 습도 Wilgotność powietrza, przy której celownik został wyzerowany + Taux d'humidité de référence pour le zérotage des optiques Deduce pressure from altitude 高度により圧が減少 고도에 맞춰 기압 설정 Ciśnienie określone na podstawie wysokości + Pression selon l'altitude Deduce the barometric pressure from the terrain altitude 標高により気圧が減少されます 주변 고도에 맞춰 기압을 설정합니다 Określ ciśnienie barometryczne na podstawie wysokości terenu + Détermine la pression barométrique selon l'altitude du terrain Minor adjustment up @@ -246,6 +265,7 @@ モジュールは高倍率ライフル スコープにおいて横風と仰角の調節ができます。 이 모듈은 고성능 조준경에 조준 나사를 이용한 편차 및 고도 조절 기능을 더해줍니다. Ten moduł włącza pokrętła kalibracyjne poprawki na wiatr oraz poprawki wysokości dla celowników o dużym powiększeniu. + Ce module ajoute les tambours de correction de la hausse et de dérive sur les optiques de visée à fort grossissement. - \ No newline at end of file + diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index e8b5a1b223..2f5c13b383 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -60,7 +60,7 @@ Controllers Steuereinheit - Controleurs + Contrôleurs Kontroler Vezérlők Controles @@ -74,7 +74,7 @@ Controller object names, separated by commas if multiple. Objekte die als Steuereinheit fungieren. Werden ggf. durch Kommata getrennt. - Noms de controleur d'objets, séparation par virgule si plusieurs + Noms de contrôleur d'objets, séparation par virgule si plusieurs Nazwa obiektu - kontrolera, oddzielona przecinkami jeżeli jest ich więcej niż 1. Vezérlő objektum nevek, vesszővel elválasztva több darab esetén. Nome dos objetos de controle, separado por vírgula se mais de um. @@ -143,15 +143,17 @@ Set Name Ustaw nazwę 名前設定 + Définir le nom Name that will be used for main interaction entry (to distinguish multiple slideshows). Default: "Slides" Nazwa, która będzie użyta w głównym menu interakcji (w celu rozróżnienia różnych slajdów). Domyślnie: "Slides" メイン インタラクション エントリで使われる名前を設定します。(複数のスライドショーを区別するため)。標準: "Slides" + Un nom qui sera utilisé pour interagir avec plusieurs diaporamas. Par défaut : "Slides" Slide Duration - Durée d'une diapositive + Durée d'un diaporama Czas trwania slajdów Dia időtartam Duração do Slide @@ -165,7 +167,7 @@ Duration of each slide. Default: 0 (Automatic Transitions Disabled) - Durée de chaque diapositive. Dafaut: 0 (transition automatique désactivée) + Durée de chaque diaporama. Défaut: 0 (transition automatique désactivée) Czas trwania poszczególnych slajdów. Domyślnie: 0 (Automatyczne przejścia wyłączone) A diák időtartama. Alapértelmezett: 0 (Automatikus váltás letiltva) Duração de cada slide. Padrão: 0 (Transição automática desabilitada) @@ -179,7 +181,7 @@ Slides - Diapositives + Diapo Slajdy Diák Slides diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index e0af181b3d..05a23e4cd1 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -75,6 +75,7 @@ Маркер タグ 뿌리기 + Tag X black @@ -195,4 +196,3 @@ - diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index c55371a41c..33276b33af 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -226,30 +226,35 @@ 編集可能なオブジェクトを更新 Aktualizuj edytowalne obiekty 수정 가능한 물체 갱신 + Màj les objets éditables All Curators 全キュレーター 모든 큐레이터 Wszyscy kuratorzy + Tous curateurs Apply changes to all curators 全キュレーターへ変更を適用 모든 큐레이터에 변화를 적용합니다 Zatwierdź zmiany dla wszystkich kuratorów + Applique les changements à tous les curateurs Remove Objects オブジェクトの削除 물체 삭제 Usuń obiekty + Enlève les objets Remove existing instead of adding new 新しく追加するために削除します 물체를 삭제합니다 Usuń istniejące zamiast dodawać nowe + Enlève les objets existants au lieu d'en ajouter de nouveaux Global AI Skill @@ -420,18 +425,21 @@ FRUES の追加と削除 패스트로프 추가/제거 Dodaj/usuń FRIES + Aj./Enlève FRIES %1 is not fastrope compatible. %1 はファストロープに対応していません。 %1은 패스트로프하기에 적합하지 않습니다. %1 nie jest kompatybilny ze zjazdem linowym. + %1 n'est pas compatible. Unable to remove FRIES, ropes are deployed. すでにロープが展開されているため、FRIES を削除できません。 패스트로프 제거 불가능, 줄이 이미 배치되었습니다. Nie można usunąć FRIES, liny są wypuszczone. + Pas en mesure d'enlever le FRIES, les cordes ne sont pas déployées. Teleport Players @@ -561,6 +569,7 @@ Przełącz symulację シミュレーションをトグル 재현 토글 + Bascule Simulation Add Spare Wheel @@ -814,4 +823,4 @@ 알 수 없는 반경 입력됨 - \ No newline at end of file + From 7bb37982176faf9c22f19c055d777b091e4b07f7 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 16 Apr 2017 09:09:50 -0500 Subject: [PATCH 37/94] Fix RHS mp7 UBC (#5085) --- optionals/compat_rhs_usf3/CfgWeapons.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 4285db8661..2c1594143c 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -105,8 +105,8 @@ class CfgWeapons { ACE_twistDirection = 0; ACE_barrelLength = 508.0; }; - class SMG_01_F; - class rhsusf_weap_MP7A1_base_f: SMG_01_F { + class SMG_02_base_F; + class rhsusf_weap_MP7A1_base_f: SMG_02_base_F { ACE_barrelTwist = 160.0; ACE_barrelLength = 180.0; }; From 06820c6b69f99ad1abd9139d48d8e3abf4c1d035 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 17 Apr 2017 12:19:06 +0200 Subject: [PATCH 38/94] Fix broken url on modules wiki page (#5088) --- docs/wiki/feature/modules.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wiki/feature/modules.md b/docs/wiki/feature/modules.md index 85a809896e..f74777e3c1 100644 --- a/docs/wiki/feature/modules.md +++ b/docs/wiki/feature/modules.md @@ -24,4 +24,4 @@ This is taking care of module initialization. It lets us ensure that modules pla ## 3. Usage -For technical usage and instructions, please refer to our [framework documentation about the module component] ({{site.baseUrl}}/wiki/framework/modules-framework.html). +For technical usage and instructions, please refer to our framework documentation about the module component. From 6464883852186e1c37e3c65976a1409bc2403bbc Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 22 Apr 2017 10:57:32 -0500 Subject: [PATCH 39/94] misc cleanup, 1 sec min delay for vital loop --- .../medical/functions/fnc_addStateHandler.sqf | 2 +- .../medical/functions/fnc_adjustPainLevel.sqf | 2 +- addons/medical/functions/fnc_getBloodLoss.sqf | 3 ++ .../functions/fnc_getCardiacOutput.sqf | 3 ++ .../functions/fnc_handleStateUnconscious.sqf | 15 +++++++++ .../functions/fnc_handleUnitVitals.sqf | 32 ++++++------------- .../medical/functions/fnc_hasStableVitals.sqf | 26 ++++++++------- .../functions/fnc_hasTourniquetAppliedTo.sqf | 3 ++ .../functions/fnc_isInMedicalVehicle.sqf | 2 +- .../functions/fnc_isInStableCondition.sqf | 27 +++++++++------- .../functions/fnc_isMedicalVehicle.sqf | 3 ++ .../medical/functions/fnc_updateHeartRate.sqf | 20 ++++++++---- .../functions/fnc_updatePainSuppress.sqf | 4 +-- .../fnc_updatePeripheralResistance.sqf | 3 +- addons/medical_damage/XEH_preInit.sqf | 5 +-- .../functions/fnc_woundsHandler.sqf | 13 +++----- .../functions/fnc_woundsHandlerSQF.sqf | 13 +++----- 17 files changed, 96 insertions(+), 80 deletions(-) diff --git a/addons/medical/functions/fnc_addStateHandler.sqf b/addons/medical/functions/fnc_addStateHandler.sqf index 7f16eeec12..ae22514569 100644 --- a/addons/medical/functions/fnc_addStateHandler.sqf +++ b/addons/medical/functions/fnc_addStateHandler.sqf @@ -18,7 +18,7 @@ params ["_unit", "_stateMachine"]; if (_unit in GVAR(monitoredUnitsList)) exitWith {}; // already monitored -private _defaultState = _stateMachine getVariable "Default"; +private _defaultState = _stateMachine getVariable "cba_stateMachine_initialState"; // "Default" if (!isNil "_defaultState") then { systemChat format["Assigned default state to: %1. Total monitored: %2", _unit, GVAR(monitoredUnitsList)]; _unit setVariable[QGVAR(state), [-1, _defaultState]]; diff --git a/addons/medical/functions/fnc_adjustPainLevel.sqf b/addons/medical/functions/fnc_adjustPainLevel.sqf index 9f2623e20d..0656eb6be8 100644 --- a/addons/medical/functions/fnc_adjustPainLevel.sqf +++ b/addons/medical/functions/fnc_adjustPainLevel.sqf @@ -20,7 +20,7 @@ params ["_unit", "_desiredPainLevel"]; if (!local _unit) exitWith { ERROR("unit is not local"); }; -TRACE_2("ACE_DEBUG: adjustPainLevel Called",_unit,_desiredPainLevel); +TRACE_2("adjustPainLevel",_unit,_desiredPainLevel); _desiredPainLevel = _desiredPainLevel * GVAR(painCoefficient); diff --git a/addons/medical/functions/fnc_getBloodLoss.sqf b/addons/medical/functions/fnc_getBloodLoss.sqf index 4854108dea..e70a536a73 100644 --- a/addons/medical/functions/fnc_getBloodLoss.sqf +++ b/addons/medical/functions/fnc_getBloodLoss.sqf @@ -8,6 +8,9 @@ * ReturnValue: * Total blood loss of unit (liter per second) * + * Example: + * [player] call ace_medical_fnc_getBloodLoss + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_getCardiacOutput.sqf b/addons/medical/functions/fnc_getCardiacOutput.sqf index 9804520d9f..3198dd5936 100644 --- a/addons/medical/functions/fnc_getCardiacOutput.sqf +++ b/addons/medical/functions/fnc_getCardiacOutput.sqf @@ -8,6 +8,9 @@ * ReturnValue: * Current cardiac output (liter per second) * + * Example: + * [player] call ace_medical_fnc_getCardiacOutput + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleStateUnconscious.sqf b/addons/medical/functions/fnc_handleStateUnconscious.sqf index c117b88c40..b22fac1ee3 100644 --- a/addons/medical/functions/fnc_handleStateUnconscious.sqf +++ b/addons/medical/functions/fnc_handleStateUnconscious.sqf @@ -19,3 +19,18 @@ private _painLevel = [_unit] call FUNC(getPainLevel); if (_painLevel > 0) then { [_unit, "moan", PAIN_TO_MOAN(_painLevel)] call EFUNC(medical_engine,playInjuredSound); }; + +// Handle spontaneous wakeup from unconsciousness +if (_unit call FUNC(hasStableVitals)) then { + private _lastWakeUpCheck = _unit getVariable [QGVAR(lastWakeUpCheck), CBA_missionTime]; + if (CBA_missionTime - _lastWakeUpCheck > SPONTANEOUS_WAKE_UP_INTERVAL) then { + _unit setVariable [QGVAR(lastWakeUpCheck), CBA_missionTime]; + if ((random 1) < SPONTANEOUS_WAKE_UP_CHANCE) then { + TRACE_1("spontaneous wake up",_unit); + [QGVAR(WakeUp), _unit] call CBA_fnc_localEvent; + }; + }; +} else { + // Unstable vitals, procrastinate the next wakeup check + _unit setVariable [QGVAR(lastWakeUpCheck), CBA_missionTime]; +}; diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index e0c2c9197e..73bf62f36a 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -1,6 +1,6 @@ /* * Author: Glowbal - * Updates the vitals. Is expected to be called every second. + * Updates the vitals. Called from the statemachine's onState functions. * * Arguments: * 0: The Unit @@ -8,18 +8,21 @@ * ReturnValue: * * + * Example: + * [player] call ace_medical_fnc_handleUnitVitals + * * Public: No */ +// #define DEBUG_MODE_FULL #include "script_component.hpp" params ["_unit"]; -private _lastTimeUpdated = _unit getVariable [QGVAR(lastTimeUpdated), CBA_missionTime]; -private _deltaT = CBA_missionTime - _lastTimeUpdated; +private _lastTimeUpdated = _unit getVariable [QGVAR(lastTimeUpdated), 0]; +private _deltaT = (CBA_missionTime - _lastTimeUpdated) min 10; +if (_deltaT < 1) exitWith {}; // state machines could be calling this very rapidly depending on number of local units _unit setVariable [QGVAR(lastTimeUpdated), CBA_missionTime]; -if (_deltaT == 0) exitWith {}; - private _lastTimeValuesSynced = _unit getVariable [QGVAR(lastMomentValuesSynced), 0]; private _syncValues = (CBA_missionTime - _lastTimeValuesSynced) >= (10 + floor(random(10))); @@ -86,12 +89,10 @@ private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; } forEach _tourniquets; [_unit, _tourniquetPain] call FUNC(adjustPainLevel); -[_unit, _deltaT, _syncValues] call FUNC(updateHeartRate); +private _heartRate = [_unit, _deltaT, _syncValues] call FUNC(updateHeartRate); [_unit, _deltaT, _syncValues] call FUNC(updatePainSuppress); [_unit, _deltaT, _syncValues] call FUNC(updatePeripheralResistance); -private _heartRate = _unit getVariable [QGVAR(heartRate), DEFAULT_HEART_RATE]; - private _bloodPressure = [_unit] call FUNC(getBloodPressure); _unit setVariable [QGVAR(bloodPressure), _bloodPressure, _syncValues]; @@ -114,18 +115,3 @@ if ((_heartRate < 20) || {_heartRate > 220} || {_bloodPressureH < 50}) then { [QGVAR(FatalVitals), _unit] call CBA_fnc_localEvent; }; -// Handle spontaneous wakeup from unconsciousness -if (_unit getVariable [QGVAR(isUnconscious), false]) then { - if (_unit call FUNC(hasStableVitals)) then { - private _lastWakeUpCheck = _unit getVariable [QGVAR(lastWakeUpCheck), CBA_missionTime]; - if (CBA_missionTime - _lastWakeUpCheck > SPONTANEOUS_WAKE_UP_INTERVAL) then { - _unit setVariable [QGVAR(lastWakeUpCheck), CBA_missionTime]; - if ((random 1) < SPONTANEOUS_WAKE_UP_CHANCE) then { - [QGVAR(WakeUp), _unit] call CBA_fnc_localEvent; - }; - }; - } else { - // Unstable vitals, procrastinate the next wakeup check - _unit setVariable [QGVAR(lastWakeUpCheck), CBA_missionTime]; - }; -}; diff --git a/addons/medical/functions/fnc_hasStableVitals.sqf b/addons/medical/functions/fnc_hasStableVitals.sqf index c021cbccc9..33bd09a4dd 100644 --- a/addons/medical/functions/fnc_hasStableVitals.sqf +++ b/addons/medical/functions/fnc_hasStableVitals.sqf @@ -1,16 +1,18 @@ /* -* Author: Ruthberg -* Check if a unit has stable vitals (required to become conscious) -* -* Arguments: -* 0: The patient -* -* Return Value: -* Has stable vitals -* -* Public: No -*/ - + * Author: Ruthberg + * Check if a unit has stable vitals (required to become conscious) + * + * Arguments: + * 0: The patient + * + * Return Value: + * Has stable vitals + * + * Example: + * [player] call ace_medical_fnc_hasStableVitals + * + * Public: No + */ #include "script_component.hpp" params ["_unit"]; diff --git a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf index acb6838e46..99fe97be94 100644 --- a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf +++ b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf @@ -9,6 +9,9 @@ * ReturnValue: * Has tourniquet applied * + * Example: + * [player, "leftleg"] call ace_medical_fnc_hasTourniquetAppliedTo + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_isInMedicalVehicle.sqf b/addons/medical/functions/fnc_isInMedicalVehicle.sqf index 4182003bad..53b82284dd 100644 --- a/addons/medical/functions/fnc_isInMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isInMedicalVehicle.sqf @@ -21,4 +21,4 @@ private _vehicle = vehicle _unit; if (_unit == _vehicle) exitWith {false}; if (_unit in [driver _vehicle, gunner _vehicle, commander _vehicle]) exitWith {false}; -(_vehicle getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant")]) > 0 +[_vehicle] call FUNC(isMedicalVehicle) diff --git a/addons/medical/functions/fnc_isInStableCondition.sqf b/addons/medical/functions/fnc_isInStableCondition.sqf index c970b20a94..b9b6a31bff 100644 --- a/addons/medical/functions/fnc_isInStableCondition.sqf +++ b/addons/medical/functions/fnc_isInStableCondition.sqf @@ -1,23 +1,26 @@ /* -* Author: Glowbal -* Check if a unit is in a stable condition -* -* Arguments: -* 0: The patient -* -* Return Value: -* Is in stable condition -* -* Public: No -*/ + * Author: Glowbal + * Check if a unit is in a stable condition + * + * Arguments: + * 0: The patient + * + * Return Value: + * Is in stable condition + * + * Example: + * [player] call ace_medical_fnc_isInStableCondition + * + * Public: No + */ #include "script_component.hpp" params ["_unit"]; if (!alive _unit) exitWith { false }; +if (_unit getVariable [QGVAR(isUnconscious), false]) exitWith { false }; if (_unit call FUNC(getBloodLoss) > 0) exitWith { false }; if (!(_unit call FUNC(hasStableVitals))) exitWith { false }; -if (_unit getVariable [QGVAR(isUnconscious), false]) exitWith { false }; true diff --git a/addons/medical/functions/fnc_isMedicalVehicle.sqf b/addons/medical/functions/fnc_isMedicalVehicle.sqf index 14499cb241..beef307301 100644 --- a/addons/medical/functions/fnc_isMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isMedicalVehicle.sqf @@ -8,6 +8,9 @@ * ReturnValue: * Is in of medic class * + * Example: + * [cursorObject] call ace_medical_fnc_isMedicalVehicle + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_updateHeartRate.sqf b/addons/medical/functions/fnc_updateHeartRate.sqf index eb872d1300..3eedfeee3c 100644 --- a/addons/medical/functions/fnc_updateHeartRate.sqf +++ b/addons/medical/functions/fnc_updateHeartRate.sqf @@ -8,7 +8,10 @@ * 2: Sync value? * * ReturnValue: - * nothing + * Current Heart Rate + * + * Example: + * [player, 1, false] call ace_medical_fnc_updateHeartRate * * Public: No */ @@ -25,7 +28,7 @@ if (!(_adjustment isEqualTo [])) then { _x params ["_value", "_timeTillMaxEffect", "_maxTimeInSystem", "_timeInSystem"]; if (abs _value > 0 && {_maxTimeInSystem > 0}) then { if (_timeInSystem >= _maxTimeInSystem) then { - _adjustment set [_forEachIndex, ObjNull]; + _adjustment set [_forEachIndex, ObjNull]; } else { _timeInSystem = _timeInSystem + _deltaT; private _effectRatio = ((_timeInSystem / (1 max _timeTillMaxEffect)) ^ 2) min 1; @@ -50,12 +53,12 @@ if (!(_unit getVariable [QGVAR(inCardiacArrest), false])) then { ([_unit] call FUNC(getBloodPressure)) params ["_bloodPressureL", "_bloodPressureH"]; private _meanBP = (2/3) * _bloodPressureH + (1/3) * _bloodPressureL; private _painLevel = [_unit] call FUNC(getPainLevel); - + private _targetBP = 107; if (_bloodVolume < BLOOD_VOLUME_CLASS_3_HEMORRHAGE) then { _targetBP = _targetBP * (_bloodVolume / DEFAULT_BLOOD_VOLUME); }; - + private _targetHR = 80; if (_bloodVolume < BLOOD_VOLUME_CLASS_2_HEMORRHAGE) then { _targetHR = _heartRate * (_targetBP / (45 max _meanBP)); @@ -64,12 +67,15 @@ if (!(_unit getVariable [QGVAR(inCardiacArrest), false])) then { _targetHR = _targetHR max (80 + 50 * _painLevel); }; _targetHR = _targetHR + _hrTargetAdjustment; - + _hrChange = round(_targetHR - _heartRate) / 2; } else { _hrChange = -round(_heartRate / 10); }; - _heartRate = _heartRate + _deltaT * _hrChange; + _heartRate = (_heartRate + _deltaT * _hrChange) max 0; }; -_unit setVariable [QGVAR(heartRate), 0 max _heartRate, _syncValue]; +_unit setVariable [QGVAR(heartRate), _heartRate, _syncValue]; + +_heartRate + diff --git a/addons/medical/functions/fnc_updatePainSuppress.sqf b/addons/medical/functions/fnc_updatePainSuppress.sqf index 6edc7f4d0b..47f5ec6f5d 100644 --- a/addons/medical/functions/fnc_updatePainSuppress.sqf +++ b/addons/medical/functions/fnc_updatePainSuppress.sqf @@ -38,7 +38,7 @@ if (!(_adjustment isEqualTo [])) then { } forEach _adjustment; _adjustment = _adjustment - [ObjNull]; - _unit setVariable [QGVAR(painSupressAdjustments), _adjustment, _syncValue]; + _unit setVariable [QGVAR(painSupressAdjustments), _adjustment, (_syncValue || {_adjustment isEqualTo []})]; // always sync on last run _unit setVariable [QGVAR(painSuppress), 0 max _painSupressAdjustment, _syncValue]; }; @@ -51,5 +51,5 @@ _unit setVariable [QGVAR(pain), 0 max (_pain - _deltaT / PAIN_FADE_TIME), _syncV if (!GVAR(advancedMedication)) then { private _painSupress = _unit getVariable [QGVAR(painSuppress), 0]; _painSupress = _painSupress - _deltaT / PAIN_SUPPRESSION_FADE_TIME; - _unit setVariable [QGVAR(painSuppress), 0 max _painSupress, true]; + _unit setVariable [QGVAR(painSuppress), 0 max _painSupress, _syncValue]; }; diff --git a/addons/medical/functions/fnc_updatePeripheralResistance.sqf b/addons/medical/functions/fnc_updatePeripheralResistance.sqf index c428935e2a..48ba96f2b9 100644 --- a/addons/medical/functions/fnc_updatePeripheralResistance.sqf +++ b/addons/medical/functions/fnc_updatePeripheralResistance.sqf @@ -40,5 +40,6 @@ if (!(_adjustment isEqualTo [])) then { _adjustment = _adjustment - [ObjNull]; _unit setVariable [QGVAR(peripheralResistanceAdjustments), _adjustment, _syncValue]; - _unit SetVariable [QGVAR(peripheralResistance), 0 max (100 + _peripheralResistanceAdjustment), _syncValue]; + // always sync on last run + _unit SetVariable [QGVAR(peripheralResistance), 0 max (100 + _peripheralResistanceAdjustment), _syncValue || {_adjustment isEqualTo []}]; }; diff --git a/addons/medical_damage/XEH_preInit.sqf b/addons/medical_damage/XEH_preInit.sqf index 980b6d2473..b796caf105 100644 --- a/addons/medical_damage/XEH_preInit.sqf +++ b/addons/medical_damage/XEH_preInit.sqf @@ -25,9 +25,10 @@ if ("ace_medical" callExtension "version" != "") then { params ["_unit", "_woundedHitPoint", "_receivedDamage", "", "_ammo"]; private _typeOfDamage = _ammo call FUNC(getTypeOfDamage); - [_unit, _woundedHitPoint, _receivedDamage, _ammo, _typeOfDamage] call FUNC(woundsHandlerActive); + [_unit, _woundedHitPoint, _receivedDamage, _typeOfDamage] call FUNC(woundsHandlerActive); - [_unit, EGVAR(medical,STATE_MACHINE)] call EFUNC(medical,addStateHandler); + // Disable for now: + // [_unit, EGVAR(medical,STATE_MACHINE)] call EFUNC(medical,addStateHandler); }] call CBA_fnc_addEventHandler; ADDON = true; diff --git a/addons/medical_damage/functions/fnc_woundsHandler.sqf b/addons/medical_damage/functions/fnc_woundsHandler.sqf index abd0744e9f..07af9867db 100644 --- a/addons/medical_damage/functions/fnc_woundsHandler.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandler.sqf @@ -6,8 +6,7 @@ * 0: Unit That Was Hit * 1: Name Of Body Part * 2: Amount Of Damage - * 3: Shooter or source of the damage - * 4: Type of the damage done + * 3: Type of the damage done * * Return Value: * None @@ -18,8 +17,8 @@ #define MATH_E 2.71828182846 -params ["_unit", "_bodyPart", "_damage", "_shooter", "_typeOfDamage"]; -TRACE_5("start",_unit,_bodyPart,_damage,_shooter,_typeOfDamage); +params ["_unit", "_bodyPart", "_damage", "_typeOfDamage"]; +TRACE_5("start",_unit,_bodyPart,_damage,_typeOfDamage); if (_typeOfDamage isEqualTo "") then { _typeOfDamage = "unknown"; @@ -27,7 +26,7 @@ if (_typeOfDamage isEqualTo "") then { // Administration for open wounds and ids private _openWounds = _unit getVariable [QEGVAR(medical,openWounds), []]; -private _woundID = _unit getVariable [QEGVAR(medical,lastUniqueWoundID), 1]; +private _woundID = _unit getVariable [QGVAR(lastUniqueWoundID), 1]; // Unique wound ids are not used anywhere: ToDo Remove from openWounds array TRACE_4("extension call",_bodyPart,_damage,_typeOfDamage,_woundID); private _extensionOutput = "ace_medical" callExtension format ["HandleDamageWounds,%1,%2,%3,%4", _bodyPart, _damage, _typeOfDamage, _woundID]; @@ -109,10 +108,6 @@ _unit setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true]; [_unit, _bodyPart] call EFUNC(medical_engine,updateBodyPartVisuals); -// Only update if new wounds have been created -if (count _woundsCreated > 0) then { - _unit setVariable [QEGVAR(medical,lastUniqueWoundID), _woundID, true]; -}; if (_critialDamage || {_painLevel > PAIN_UNCONSCIOUS}) then { [_unit] call EFUNC(medical,handleIncapacitation); }; diff --git a/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf b/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf index da9dfc37bd..e5ccd02922 100644 --- a/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf +++ b/addons/medical_damage/functions/fnc_woundsHandlerSQF.sqf @@ -6,8 +6,7 @@ * 0: Unit That Was Hit * 1: Name Of Body Part * 2: Amount Of Damage - * 3: Shooter or source of the damage - * 4: Type of the damage done + * 3: Type of the damage done * * Return Value: * None @@ -16,8 +15,8 @@ */ #include "script_component.hpp" -params ["_unit", "_bodyPart", "_damage", "_typeOfProjectile", "_typeOfDamage"]; -TRACE_5("start",_unit,_bodyPart,_damage,_typeOfProjectile,_typeOfDamage); +params ["_unit", "_bodyPart", "_damage", "_typeOfDamage"]; +TRACE_5("start",_unit,_bodyPart,_damage,_typeOfDamage); // Convert the selectionName to a number and ensure it is a valid selection. private _bodyPartN = ALL_BODY_PARTS find toLower _bodyPart; @@ -70,7 +69,7 @@ if (_highestPossibleSpot < 0) exitWith {}; // Administration for open wounds and ids private _openWounds = _unit getVariable [QEGVAR(medical,openWounds), []]; -private _woundID = _unit getVariable [QGVAR(lastUniqueWoundID), 1]; +private _woundID = _unit getVariable [QGVAR(lastUniqueWoundID), 1]; // Unique wound ids are not used anywhere: ToDo Remove from openWounds array private _painLevel = 0; private _critialDamage = false; @@ -164,10 +163,6 @@ _unit setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true]; [_unit, _bodyPart] call EFUNC(medical_engine,updateBodyPartVisuals); -// Only update if new wounds have been created -if (count _woundsCreated > 0) then { - _unit setVariable [QEGVAR(medical,lastUniqueWoundID), _woundID, true]; -}; if (_critialDamage || {_painLevel > PAIN_UNCONSCIOUS}) then { [_unit] call EFUNC(medical,handleIncapacitation); }; From 4cdc323fdf9fcbd68d70c5be09bdac4ba5942bb0 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 22 Apr 2017 11:18:15 -0500 Subject: [PATCH 40/94] Fix Javelin for AI for RHS (#5096) --- optionals/compat_rhs_usf3/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index d4feb96cc0..5125e268fa 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -194,7 +194,7 @@ class CfgAmmo { class M_Titan_AT; class rhs_ammo_M_fgm148_AT: M_Titan_AT { - irLock = 0; + irLock = 1; laserLock = 0; airLock = 0; From 0a7033a1864e763eeda2138b2fa2e80b3f9faec8 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 22 Apr 2017 11:18:56 -0500 Subject: [PATCH 41/94] Remove CfgAiSkill config changes (#5091) * Remove CfgAiSkill config changes * Add note to wiki about removal --- addons/ai/CfgAISkill.hpp | 28 ---------------------------- addons/ai/README.md | 2 +- addons/ai/config.cpp | 1 - docs/wiki/feature/ai.md | 17 ++++++++--------- 4 files changed, 9 insertions(+), 39 deletions(-) delete mode 100644 addons/ai/CfgAISkill.hpp diff --git a/addons/ai/CfgAISkill.hpp b/addons/ai/CfgAISkill.hpp deleted file mode 100644 index c01b5eb96e..0000000000 --- a/addons/ai/CfgAISkill.hpp +++ /dev/null @@ -1,28 +0,0 @@ - -/* - * Documentation: - * https://community.bistudio.com/wiki/AI_Sub-skills - * - * The idea here is to reduce the AI's godlike aiming - * capabilties while retaining it's high intelligence. - * The AI should be smart enough to move through a town, - * but also be 'human' in their reaction time and aim. - * - * Note: All these values can still be adjusted via - * scripts, these arrays just change what 0 & 1 - * are for setSkill. - */ - -class CfgAISkill { - aimingAccuracy[] = {0,0, 1,0.8}; // {0,0,1,1}; v1.26 defaults - aimingShake[] = {0,0, 1,0.6}; // {0,0,1,1}; - aimingSpeed[] = {0,0, 1,0.7}; // {0,0.5,1,1}; - commanding[] = {0,0, 1,0.8}; // {0,0,1,1}; - courage[] = {0,0, 1,0.7}; // {0,0,1,1}; - endurance[] = {0,0, 1,0.7}; // {0,0,1,1}; - general[] = {0,0, 1,0.9}; // {0,0,1,1}; - // apparently breaks rapid firing in single fire mode for players - //reloadSpeed[] = {0,0, 1,0.8}; // {0,0,1,1}; - spotDistance[] = {0,0, 1,0.9}; // {0,0.2,1,0.4}; - spotTime[] = {0,0, 1,0.7}; // {0,0,1,0.7}; -}; diff --git a/addons/ai/README.md b/addons/ai/README.md index 40b4e776a4..e3175b1006 100644 --- a/addons/ai/README.md +++ b/addons/ai/README.md @@ -1,7 +1,7 @@ ace_ai ====== -Minor changes of AI skill and overhaul of AI firing modes of vanilla weapons, encouraging the AI to use full-auto and bursts more often. +Overhaul of AI firing modes of vanilla weapons, encouraging the AI to use full-auto and bursts more often. ## Maintainers diff --git a/addons/ai/config.cpp b/addons/ai/config.cpp index 60bf7184a4..a269bdcdbc 100644 --- a/addons/ai/config.cpp +++ b/addons/ai/config.cpp @@ -14,5 +14,4 @@ class CfgPatches { }; }; -#include "CfgAISkill.hpp" #include "CfgWeapons.hpp" diff --git a/docs/wiki/feature/ai.md b/docs/wiki/feature/ai.md index 9cf34ce667..49727b70f9 100644 --- a/docs/wiki/feature/ai.md +++ b/docs/wiki/feature/ai.md @@ -12,23 +12,22 @@ version: patch: 0 --- +
+
Changes to CfgAISkill were removed in ACE 3.10 (Default AI will now be more skilled)
+
+ ## 1. Overview -### 1.1 Adjusted AI skill values -The idea here is to reduce the AI's godlike aiming capabilities while retaining its high intelligence. The AI should be smart enough to move through a town, but also be 'human' in their reaction time and aim. - -*Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for `setSkill`.* - -### 1.2 Firing in burst mode +### 1.1 Firing in burst mode AI will now use the automatic mode of their weapons at short distances, instead of always relying on firing single shots in quick succession. -### 1.3 Longer engagement ranges +### 1.2 Longer engagement ranges The maximum engagement ranges are increased: AI will fire in bursts with variable lengths on high ranges of 500 - 700 meters, depending on their weapon and optic. -### 1.4 No dead zones in CQB +### 1.3 No dead zones in CQB Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. ACE3 removes this behaviour mostly notable in CQB by adding a valid firing mode. -### 1.5 No scripting +### 1.4 No scripting All changes of ACE3 AI are config based to ensure full compatibility with advanced AI modifications like e.g. "ASR AI 3". ## 2. Dependencies From 604ba50a4a6340c545bfcd12f960e8847a4cec49 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 22 Apr 2017 12:22:51 -0500 Subject: [PATCH 42/94] Make medical menu default enabled --- addons/medical_menu/ACE_Settings.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical_menu/ACE_Settings.hpp b/addons/medical_menu/ACE_Settings.hpp index d74a6bdfe0..f6ec9d3932 100644 --- a/addons/medical_menu/ACE_Settings.hpp +++ b/addons/medical_menu/ACE_Settings.hpp @@ -10,7 +10,7 @@ class ACE_Settings { class GVAR(useMenu) { displayName = CSTRING(useMenu); description = CSTRING(useMenu_Descr); - value = 0; + value = 1; typeName = "SCALAR"; values[] = {ECSTRING(common,Disabled), ECSTRING(common,Enabled), ECSTRING(common,VehiclesOnly)}; isClientSettable = 1; From 9139a52a381ad5b86b1f6839c6fd106bfb12a441 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 22 Apr 2017 13:45:56 -0500 Subject: [PATCH 43/94] Add more debug --- addons/medical/XEH_postInit.sqf | 49 +++++++++++++++++++ .../functions/fnc_getBloodPressure.sqf | 3 ++ 2 files changed, 52 insertions(+) diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index a09e4fe14f..0c31b8ab6e 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -33,6 +33,55 @@ if (!hasInterface) exitWith {}; }] call EFUNC(common,arithmeticSetSource); #ifdef DEBUG_MODE_FULL + +["medical", { + private _unit = cursorTarget; + private _return = []; + + if (!(_unit isKindOf "CAManBase")) then {_unit = cursorObject}; + if (!(_unit isKindOf "CAManBase")) then {_unit = player}; + + if (_unit isKindOf "CAManBase") then { + // Header: + _return pushBack format ["%2 [%3]", (["00FF00", "0000FF"] select (_unit == player)), [_unit] call EFUNC(common,getName), typeOf _unit]; + _return pushBack ""; + + // State: + private _hasStableVitals = [_unit] call FUNC(hasStableVitals); + private _targetState = [_unit, GVAR(STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState; + private _color = switch (_targetState) do {case "Default": {"33FF33"}; case "Injured": {"FF3333"}; case "Unconscious": {"FF8833"}; case "CardiacArrest": {"FF33A"}; default {"333333"}}; + _return pushBack format ["State: %2 [Stable Vitals: %3]", _color, _targetState, _hasStableVitals]; + + // Blood: + private _bloodVolume = _unit getVariable [QGVAR(bloodVolume), DEFAULT_BLOOD_VOLUME]; + private _bloodLoss = [_unit] call FUNC(getBloodLoss); + private _secondsToHeartstop = if (_bloodLoss != 0) then {format ["[Time Left: %1]", (((_bloodVolume - BLOOD_VOLUME_CLASS_4_HEMORRHAGE) max 0) / _bloodLoss) toFixed 1]} else {""}; + _return pushBack format ["Blood: %1 [Loss: %2] %3", _bloodVolume toFixed 3, _bloodLoss toFixed 5, _secondsToHeartstop]; + + // Vitals: + private _cardiacOutput = [_unit] call FUNC(getCardiacOutput); + private _heartRate = _unit getVariable [QGVAR(heartRate), DEFAULT_HEART_RATE]; + ([_unit] call FUNC(getBloodPressure)) params ["_bpLow", "_bpHigh"]; + _return pushBack format ["Output %1 [HR: %2] [BP: %3 / %4]", _cardiacOutput toFixed 4, _heartRate toFixed 1, _bpLow toFixed 1, _bpHigh toFixed 1]; + + // Pain: + private _pain = _unit getVariable [QGVAR(pain), 0]; + private _painSuppress = _unit getVariable [QGVAR(painSuppress), 0]; + private _painLevel = [_unit] call FUNC(getPainLevel); + _return pushBack format ["Effective Pain: %1 [pain: %2] [suppress: %3]", _painLevel toFixed 4, _pain toFixed 3, _painSuppress toFixed 3]; + + // Tourniquets: + private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; + { + if (_x != 0) then { + _return pushBack ["Tourniquet on %1 [Time On: %2]", GVAR(SELECTIONS) select _forEachIndex, (CBA_missionTime - _x)]; + }; + } forEach _tourniquets; + }; + _return joinString "
"; +}, [10]] call ace_common_fnc_watchVariable; + + [{!isNull findDisplay 46}, { INFO("Creating Debug Display"); if (!isNull (uiNamespace getVariable [QGVAR(debugControl), controlNull])) then { diff --git a/addons/medical/functions/fnc_getBloodPressure.sqf b/addons/medical/functions/fnc_getBloodPressure.sqf index 7c6aef1e13..118d5ca433 100644 --- a/addons/medical/functions/fnc_getBloodPressure.sqf +++ b/addons/medical/functions/fnc_getBloodPressure.sqf @@ -9,6 +9,9 @@ * 0: BloodPressure Low * 1: BloodPressure High * + * Example: + * [player] call ace_medical_fnc_getBloodPressure + * * Public: No */ From f1566a7aa31e3e7326041e9dd5c830326c28b2a6 Mon Sep 17 00:00:00 2001 From: James Kingsley Date: Wed, 26 Apr 2017 15:42:14 +0100 Subject: [PATCH 44/94] Add volume toggle docs (#5077) * Add volume toggle docs * Change version and remove ref to another mod * Changes as per review * Fix numbers --- docs/wiki/featurex/volume.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/wiki/featurex/volume.md diff --git a/docs/wiki/featurex/volume.md b/docs/wiki/featurex/volume.md new file mode 100644 index 0000000000..960e3003c3 --- /dev/null +++ b/docs/wiki/featurex/volume.md @@ -0,0 +1,34 @@ +--- +layout: wiki +title: Volume Toggle +description: Ability to toggle volume of game and music. +group: feature +category: general +parent: wiki +mod: acex +version: + major: 3 + minor: 2 + patch: 0 +--- + +## 1. Overview + +Adds the possibility of setting a keybind to toggle volume of game and music. It's quite useful for when you're briefing in heavy rain, or if you're in an obnoxiously loud car. + +## 2. Features + +- Automatically lower volume when inside vehicles (restores when exiting vehicles) +- Change reduction percentage and fade delay +- Option to show/hide notification +- Option to remind you every minute if your volume is lowered + +## 3. Usage + +1. Set the keybind in ACEX controls +2. Enable the feature in ACE options +3. Change the options to your liking + +## 4. Dependencies + +{% include dependenciesx_list.md component="volume" %} From c6fc4d0a139bb0eb19353abaf5ecbf1d9afe5271 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 26 Apr 2017 10:16:09 -0500 Subject: [PATCH 45/94] Clenaup / Debug --- addons/medical/XEH_postInit.sqf | 16 +++++++++++----- addons/medical/functions/fnc_addDamageToUnit.sqf | 2 +- .../functions/fnc_handleIncapacitation.sqf | 9 +-------- .../medical/functions/fnc_handleUnitVitals.sqf | 5 ++++- addons/medical/script_component.hpp | 2 +- addons/medical_damage/XEH_preInit.sqf | 4 ++-- 6 files changed, 20 insertions(+), 18 deletions(-) diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 0c31b8ab6e..4743d95d57 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -1,4 +1,4 @@ -// #define DEBUG_MODE_FULL +#define DEBUG_MODE_FULL #include "script_component.hpp" ["ace_interactMenuClosed", {[objNull, 0] call FUNC(displayPatientInformation);}] call CBA_fnc_addEventHandler; @@ -49,7 +49,7 @@ if (!hasInterface) exitWith {}; // State: private _hasStableVitals = [_unit] call FUNC(hasStableVitals); private _targetState = [_unit, GVAR(STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState; - private _color = switch (_targetState) do {case "Default": {"33FF33"}; case "Injured": {"FF3333"}; case "Unconscious": {"FF8833"}; case "CardiacArrest": {"FF33A"}; default {"333333"}}; + private _color = switch (_targetState) do {case "Default": {"33FF33"}; case "Injured": {"FF3333"}; case "Unconscious": {"FF8833"}; case "CardiacArrest": {"FF33AA"}; default {"333333"}}; _return pushBack format ["State: %2 [Stable Vitals: %3]", _color, _targetState, _hasStableVitals]; // Blood: @@ -74,12 +74,18 @@ if (!hasInterface) exitWith {}; private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; { if (_x != 0) then { - _return pushBack ["Tourniquet on %1 [Time On: %2]", GVAR(SELECTIONS) select _forEachIndex, (CBA_missionTime - _x)]; + _return pushBack format ["Tourniquet on %1 [Time On: %2]", GVAR(SELECTIONS) select _forEachIndex, (CBA_missionTime - _x)]; }; - } forEach _tourniquets; + } forEach _tourniquets; + + // Wounds: + private _wounds = _unit getVariable [QGVAR(openWounds), []]; + { + _return pushBack format ["Wound: %1", _x]; + } forEach _wounds; }; _return joinString "
"; -}, [10]] call ace_common_fnc_watchVariable; +}, [15]] call ace_common_fnc_watchVariable; [{!isNull findDisplay 46}, { diff --git a/addons/medical/functions/fnc_addDamageToUnit.sqf b/addons/medical/functions/fnc_addDamageToUnit.sqf index d84429c347..86ae38efb7 100644 --- a/addons/medical/functions/fnc_addDamageToUnit.sqf +++ b/addons/medical/functions/fnc_addDamageToUnit.sqf @@ -8,7 +8,7 @@ * 1: Damage to Add * 2: Body part ("Head", "Body", "LeftArm", "RightArm", "LeftLeg", "RightLeg") * 3: Projectile Type - * 3: Source + * 4: Source * * Return Value: * Successful diff --git a/addons/medical/functions/fnc_handleIncapacitation.sqf b/addons/medical/functions/fnc_handleIncapacitation.sqf index 1e9ba01051..6808a25c4c 100644 --- a/addons/medical/functions/fnc_handleIncapacitation.sqf +++ b/addons/medical/functions/fnc_handleIncapacitation.sqf @@ -33,13 +33,6 @@ private _damageThreshold = if (isPlayer _unit) then { GVAR(AIDamageThreshold) }; -if (_headDamage > _damageThreshold / 2) then { - [QGVAR(CriticalInjury), _unit] call CBA_fnc_localEvent; -}; -if (_bodyDamage > _damageThreshold) then { - [QGVAR(CriticalInjury), _unit] call CBA_fnc_localEvent; -}; - -if ((_painLevel >= PAIN_UNCONSCIOUS) && {random 1 < 0.1}) then { +if ((_headDamage > _damageThreshold / 2) || {_bodyDamage > _damageThreshold} || {(_painLevel >= PAIN_UNCONSCIOUS) && {random 1 < 0.1}}) then { [QGVAR(CriticalInjury), _unit] call CBA_fnc_localEvent; }; diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 73bf62f36a..c773d26693 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -21,8 +21,10 @@ params ["_unit"]; private _lastTimeUpdated = _unit getVariable [QGVAR(lastTimeUpdated), 0]; private _deltaT = (CBA_missionTime - _lastTimeUpdated) min 10; if (_deltaT < 1) exitWith {}; // state machines could be calling this very rapidly depending on number of local units -_unit setVariable [QGVAR(lastTimeUpdated), CBA_missionTime]; +BEGIN_COUNTER(Vitals); + +_unit setVariable [QGVAR(lastTimeUpdated), CBA_missionTime]; private _lastTimeValuesSynced = _unit getVariable [QGVAR(lastMomentValuesSynced), 0]; private _syncValues = (CBA_missionTime - _lastTimeValuesSynced) >= (10 + floor(random(10))); @@ -115,3 +117,4 @@ if ((_heartRate < 20) || {_heartRate > 220} || {_bloodPressureH < 50}) then { [QGVAR(FatalVitals), _unit] call CBA_fnc_localEvent; }; +END_COUNTER(Vitals); diff --git a/addons/medical/script_component.hpp b/addons/medical/script_component.hpp index c93f584b0c..19015b3af7 100644 --- a/addons/medical/script_component.hpp +++ b/addons/medical/script_component.hpp @@ -4,7 +4,7 @@ // #define DEBUG_MODE_FULL #define DISABLE_COMPILE_CACHE -// #define ENABLE_PERFORMANCE_COUNTERS +#define ENABLE_PERFORMANCE_COUNTERS #ifdef DEBUG_ENABLED_MEDICAL #define DEBUG_MODE_FULL diff --git a/addons/medical_damage/XEH_preInit.sqf b/addons/medical_damage/XEH_preInit.sqf index b796caf105..c2a5055e76 100644 --- a/addons/medical_damage/XEH_preInit.sqf +++ b/addons/medical_damage/XEH_preInit.sqf @@ -16,9 +16,9 @@ addMissionEventHandler ["Loaded",{ // decide which woundsHandler to use by whether the extension is present or not if ("ace_medical" callExtension "version" != "") then { - DFUNC(woundsHandlerActive) = FUNC(woundsHandler); + DFUNC(woundsHandlerActive) = LINKFUNC(woundsHandler); } else { - DFUNC(woundsHandlerActive) = FUNC(woundsHandlerSQF); + DFUNC(woundsHandlerActive) = LINKFUNC(woundsHandlerSQF); }; [QEGVAR(medical_engine,woundReceived), { From e6679316264ac4101d8086ada9c5e78e618a5ce9 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 29 Apr 2017 12:58:35 -0500 Subject: [PATCH 46/94] More debug monitor stuff --- addons/medical/XEH_PREP.hpp | 1 + addons/medical/XEH_postInit.sqf | 55 +-------- .../functions/fnc_dev_watchMedicalStats.sqf | 109 ++++++++++++++++++ 3 files changed, 111 insertions(+), 54 deletions(-) create mode 100644 addons/medical/functions/fnc_dev_watchMedicalStats.sqf diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index 3979fb304b..5d2f0aa195 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -7,6 +7,7 @@ PREP(conditionCardiacArrestTimer); PREP(conditionExecutionDeath); PREP(displayPatientInformation); PREP(displayTriageCard); +PREP(dev_watchMedicalStats); PREP(enteredStateCardiacArrest); PREP(enteredStateFatalInjury); PREP(getBloodLoss); diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 4743d95d57..8b6ad741ec 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -33,60 +33,7 @@ if (!hasInterface) exitWith {}; }] call EFUNC(common,arithmeticSetSource); #ifdef DEBUG_MODE_FULL - -["medical", { - private _unit = cursorTarget; - private _return = []; - - if (!(_unit isKindOf "CAManBase")) then {_unit = cursorObject}; - if (!(_unit isKindOf "CAManBase")) then {_unit = player}; - - if (_unit isKindOf "CAManBase") then { - // Header: - _return pushBack format ["%2 [%3]", (["00FF00", "0000FF"] select (_unit == player)), [_unit] call EFUNC(common,getName), typeOf _unit]; - _return pushBack ""; - - // State: - private _hasStableVitals = [_unit] call FUNC(hasStableVitals); - private _targetState = [_unit, GVAR(STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState; - private _color = switch (_targetState) do {case "Default": {"33FF33"}; case "Injured": {"FF3333"}; case "Unconscious": {"FF8833"}; case "CardiacArrest": {"FF33AA"}; default {"333333"}}; - _return pushBack format ["State: %2 [Stable Vitals: %3]", _color, _targetState, _hasStableVitals]; - - // Blood: - private _bloodVolume = _unit getVariable [QGVAR(bloodVolume), DEFAULT_BLOOD_VOLUME]; - private _bloodLoss = [_unit] call FUNC(getBloodLoss); - private _secondsToHeartstop = if (_bloodLoss != 0) then {format ["[Time Left: %1]", (((_bloodVolume - BLOOD_VOLUME_CLASS_4_HEMORRHAGE) max 0) / _bloodLoss) toFixed 1]} else {""}; - _return pushBack format ["Blood: %1 [Loss: %2] %3", _bloodVolume toFixed 3, _bloodLoss toFixed 5, _secondsToHeartstop]; - - // Vitals: - private _cardiacOutput = [_unit] call FUNC(getCardiacOutput); - private _heartRate = _unit getVariable [QGVAR(heartRate), DEFAULT_HEART_RATE]; - ([_unit] call FUNC(getBloodPressure)) params ["_bpLow", "_bpHigh"]; - _return pushBack format ["Output %1 [HR: %2] [BP: %3 / %4]", _cardiacOutput toFixed 4, _heartRate toFixed 1, _bpLow toFixed 1, _bpHigh toFixed 1]; - - // Pain: - private _pain = _unit getVariable [QGVAR(pain), 0]; - private _painSuppress = _unit getVariable [QGVAR(painSuppress), 0]; - private _painLevel = [_unit] call FUNC(getPainLevel); - _return pushBack format ["Effective Pain: %1 [pain: %2] [suppress: %3]", _painLevel toFixed 4, _pain toFixed 3, _painSuppress toFixed 3]; - - // Tourniquets: - private _tourniquets = _unit getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]; - { - if (_x != 0) then { - _return pushBack format ["Tourniquet on %1 [Time On: %2]", GVAR(SELECTIONS) select _forEachIndex, (CBA_missionTime - _x)]; - }; - } forEach _tourniquets; - - // Wounds: - private _wounds = _unit getVariable [QGVAR(openWounds), []]; - { - _return pushBack format ["Wound: %1", _x]; - } forEach _wounds; - }; - _return joinString "
"; -}, [15]] call ace_common_fnc_watchVariable; - + [] call FUNC(dev_watchMedicalStats); [{!isNull findDisplay 46}, { INFO("Creating Debug Display"); diff --git a/addons/medical/functions/fnc_dev_watchMedicalStats.sqf b/addons/medical/functions/fnc_dev_watchMedicalStats.sqf new file mode 100644 index 0000000000..b7de63c577 --- /dev/null +++ b/addons/medical/functions/fnc_dev_watchMedicalStats.sqf @@ -0,0 +1,109 @@ +/* + * Author: PabstMirror + * Dev function to watch all medical variables on a unit + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_medical_fnc_dev_watchMedicalStats; + * + * Public: Yes + */ +#include "script_component.hpp" + +["medical", { + + // Hide when patient display is up because they might overlap + if (!isNull EGVAR(medical,displayPatientInformationTarget)) exitWith {""}; + + private _unit = cursorTarget; + if (!(_unit isKindOf "CAManBase")) then {_unit = cursorObject}; + if (!(_unit isKindOf "CAManBase")) then {_unit = player}; + if (!(_unit isKindOf "CAManBase")) exitWith {"No Unit?"}; + + private _return = []; + + // Header: + _return pushBack format ["%2 [%3]", (["00FF00", "0000FF"] select (_unit == player)), [_unit] call EFUNC(common,getName), typeOf _unit]; + _return pushBack ""; + + // State: + private _hasStableVitals = [_unit] call EFUNC(medical,hasStableVitals); + private _targetState = [_unit, GVAR(STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState; + private _color = switch (_targetState) do {case "Default": {"33FF33"}; case "Injured": {"FF3333"}; case "Unconscious": {"FF8833"}; case "CardiacArrest": {"FF33AA"}; default {"333333"}}; + _return pushBack format ["State: %2 [StableVitals: %3]", _color, _targetState, _hasStableVitals]; + + // Blood: + private _bloodVolume = _unit getVariable [QEGVAR(medical,bloodVolume), DEFAULT_BLOOD_VOLUME]; + private _bloodLoss = [_unit] call EFUNC(medical,getBloodLoss); + private _secondsToHeartstop = if (_bloodLoss != 0) then {format ["[Time Left: %1 sec]", (((_bloodVolume - BLOOD_VOLUME_CLASS_4_HEMORRHAGE) max 0) / _bloodLoss) toFixed 1]} else {""}; + _return pushBack format ["Blood: %1", _bloodVolume toFixed 3]; + _return pushBack format [" - [Loss: %1] %2", _bloodLoss toFixed 5, _secondsToHeartstop]; + + // Heart: + private _cardiacOutput = [_unit] call EFUNC(medical,getCardiacOutput); + private _heartRate = _unit getVariable [QEGVAR(medical,heartRate), DEFAULT_HEART_RATE]; + ([_unit] call EFUNC(medical,getBloodPressure)) params ["_bpLow", "_bpHigh"]; + _return pushBack format ["CardiacOutput %1", _cardiacOutput toFixed 5]; + _return pushBack format [" - [HR: %1] [BP: %2 / %3]", _heartRate toFixed 1, _bpLow toFixed 1, _bpHigh toFixed 1]; + + // Pain: + private _pain = _unit getVariable [QEGVAR(medical,pain), 0]; + private _painSuppress = _unit getVariable [QEGVAR(medical,painSuppress), 0]; + private _painLevel = [_unit] call EFUNC(medical,getPainLevel); + _return pushBack format ["Effective Pain: %1", _painLevel toFixed 3]; + _return pushBack format [" - [Pain: %1] [Suppress: %2]", _pain toFixed 3, _painSuppress toFixed 3]; + + // Damage: + private _damage = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]]; + private _limping = if (_unit getVariable [QEGVAR(medical_engine,isLimping), false]) then {"[ Limping ]"} else {""}; + _return pushBack format ["Damage: [H: %1] [B: %2] %3", (_damage select 0) toFixed 2, (_damage select 1) toFixed 2, _limping]; + _return pushBack format ["[LA:%1] [RA: %2] [LL:%1] [RL: %2]", (_damage select 2) toFixed 2, (_damage select 3) toFixed 2, (_damage select 4) toFixed 2, (_damage select 5) toFixed 2]; + + + // Tourniquets: + _return pushBack "------- Tourniquets: -------"; + private _tourniquets = _unit getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]]; + private _occludedMedications = _unit getVariable [QEGVAR(medical,occludedMedications), []]; + { + private _tPartNum = _forEachIndex; + if (_x != 0) then { + _return pushBack format ["%1 [Time On: %2]", GVAR(SELECTIONS) select _tPartNum, (CBA_missionTime - _x) toFixed 1]; + }; + { + _x params ["", "_medClassname", "_medPartNum"]; + if (_medPartNum == _tPartNum) then { + _return pushBack format [" - Occluded Med: %1", _medClassname]; + }; + } forEach _occludedMedications; + } forEach _tourniquets; + + + // Wounds: + _return pushBack "------- Wounds: -------"; + private _wounds = _unit getVariable [QEGVAR(medical,openWounds), []]; + { + _x params ["", "_xClassID", "_xBodyPartN", "_xAmountOf", "_xBleeding", "_xDamage", "_xCategory"]; + _return pushBack format ["%1: [%2-%3] [x%4] [Bld: %5] [Dmg: %6]", GVAR(SELECTIONS) select _xBodyPartN, _xClassID, _xCategory, _xAmountOf toFixed 1, _xBleeding toFixed 4, _xDamage toFixed 2]; + } forEach _wounds; + + + // IVs: + _return pushBack "------- IVs: -------"; + private _ivBags = _unit getVariable [QEGVAR(medical,ivBags), []]; + { + _x params ["_xVolumeAdded", "_xType", "_xBodyPartN"]; + _return pushBack format ["%1: %2 [%3 ml]", GVAR(SELECTIONS) select _xBodyPartN, _xType, _xVolumeAdded]; + } forEach _ivBags; + + // Footer: + _return pushBack ""; + + // Return: + _return joinString "
" +}, [30]] call EFUNC(common,watchVariable); + From fdb14cea20a33bd14e4183e10d7fef7ed2b4d0f2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 29 Apr 2017 13:05:39 -0500 Subject: [PATCH 47/94] Fix IvBags in displayPatientInformation --- .../medical/functions/fnc_displayPatientInformation.sqf | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index 2e5a54ee76..79acfda96c 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -77,11 +77,9 @@ if (_show == 1) then { private _totalIvVolume = 0; { - private _value = _target getVariable _x; - if !(isnil "_value") then { - _totalIvVolume = _totalIvVolume + (_target getVariable [_x, 0]); - }; - } foreach EGVAR(medical,IVBags); + _x params ["_xVolumeAdded"]; + _totalIvVolume = _totalIvVolume + _xVolumeAdded; + } foreach (_target getVariable [QEGVAR(medical,ivBags), []]); if (_totalIvVolume >= 1) then { _genericMessages pushback [format[localize ELSTRING(medical,receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]]; From dab9772d03c28a60b3c896a4ce0468fb254883a1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 29 Apr 2017 14:18:31 -0500 Subject: [PATCH 48/94] Don't let flumi see these --- addons/medical/data/model.cfg | 10 +++++----- addons/medical/stringtable.xml | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/medical/data/model.cfg b/addons/medical/data/model.cfg index 114fae7ada..4843dc3991 100644 --- a/addons/medical/data/model.cfg +++ b/addons/medical/data/model.cfg @@ -17,8 +17,8 @@ class CfgModels { sections[] = {"camo"}; skeletonName = ""; }; - - class IVBag_250ml: IVBagBase {}; - class IVBag_500ml: IVBagBase {}; - class IVBag_1000ml: IVBagBase {}; -}; \ No newline at end of file + + class IVBag_250ml: IVBagBase {}; + class IVBag_500ml: IVBagBase {}; + class IVBag_1000ml: IVBagBase {}; +}; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 51e536fc1b..ea05dd797d 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -2980,7 +2980,7 @@ Defines when you can receive a fatal injury - + In Cardiac Arrest @@ -4049,10 +4049,10 @@ どれでも、またはオブジェクトを医療車両として割り当てます。 무엇이 되었던간에 이 목록에 있는 물체는 의료 차량이 됩니다. - + Allow Unconscious Animation - + Allow Unconscious Animation on Treatment. From 79047bd2e75d5a6a10687a0c2976a0eeb6e690ad Mon Sep 17 00:00:00 2001 From: Zakant Date: Sun, 30 Apr 2017 08:46:51 +0200 Subject: [PATCH 49/94] Add player event handler to fix zeus problems with effects (#5022) --- addons/medical_ui/XEH_postInit.sqf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/medical_ui/XEH_postInit.sqf b/addons/medical_ui/XEH_postInit.sqf index e3ae32bf2c..ae29f6cc25 100644 --- a/addons/medical_ui/XEH_postInit.sqf +++ b/addons/medical_ui/XEH_postInit.sqf @@ -15,3 +15,10 @@ GVAR(heartBeatEffectRunning) = false; [_unconscious, 1] call FUNC(effectUnconscious); ["unconscious", _unconscious] call EFUNC(common,setDisableUserInputStatus); }] call CBA_fnc_addEventHandler; + +["unit", { + params ["_new", "_old"]; + private _status = _new getVariable ["ace_unconscious", false]; + [_status, 0] call FUNC(effectUnconscious); + ["unconscious", _status] call EFUNC(common,setDisableUserInputStatus); +}] call CBA_fnc_addPlayerEventHandler; From a08ed0e3076c1fca8b9515d13706f429f18907a1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 1 May 2017 18:06:34 -0500 Subject: [PATCH 50/94] Fix refuel nozzle dropping to ground (#5119) --- addons/refuel/functions/fnc_dropNozzle.sqf | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/addons/refuel/functions/fnc_dropNozzle.sqf b/addons/refuel/functions/fnc_dropNozzle.sqf index 575d318068..80bf8896ab 100644 --- a/addons/refuel/functions/fnc_dropNozzle.sqf +++ b/addons/refuel/functions/fnc_dropNozzle.sqf @@ -19,13 +19,26 @@ #include "script_component.hpp" params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_disconnectOnly", false, [false]]]; +TRACE_3("dropNozzle",_unit,_nozzle,_disconnectOnly); detach _nozzle; _nozzle setVariable [QGVAR(isRefueling), false, true]; if (_disconnectOnly) exitWith {}; _nozzle setVelocity [0, 0, 0]; -_nozzle setPosATL [(getPosATL _nozzle) select 0, (getPosATL _nozzle) select 1, 0.05]; + +private _groundPosition = getPosASL _nozzle; +private _posA = (getPosASL _nozzle) vectorAdd [0,0,0.05]; +private _posB = (getPosASL _nozzle) vectorAdd [0,0,-1000]; +private _intersections = lineIntersectsSurfaces [_posA, _posB, _unit, _nozzle, true, 1, "GEOM"]; +TRACE_1("",_intersections); +if (_intersections isEqualTo []) then { + _groundPosition set [2, (getTerrainHeightASL _groundPosition) vectorAdd [0,0,0.005]]; +} else { + _groundPosition = ((_intersections select 0) select 0) vectorAdd [0,0,0.005]; +}; +_nozzle setPosASL _groundPosition; +TRACE_1("finalPos",getPosATL _nozzle); if (isNull _unit) exitWith {}; _unit setVariable [QGVAR(isRefueling), false, true]; From 8dde674105014d9ddcce75749a4f289ba7f41ae1 Mon Sep 17 00:00:00 2001 From: jonpas Date: Fri, 5 May 2017 20:10:50 +0200 Subject: [PATCH 51/94] Fix jerry can refuel interaction overlapping (#5107) --- addons/refuel/functions/fnc_makeJerryCan.sqf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/refuel/functions/fnc_makeJerryCan.sqf b/addons/refuel/functions/fnc_makeJerryCan.sqf index 36c64a3055..11ef0df46e 100644 --- a/addons/refuel/functions/fnc_makeJerryCan.sqf +++ b/addons/refuel/functions/fnc_makeJerryCan.sqf @@ -36,7 +36,7 @@ private _action = [QGVAR(Refuel), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject); // Add pickup _action = [QGVAR(PickUpNozzle), @@ -48,7 +48,7 @@ _action = [QGVAR(PickUpNozzle), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); // Add turnOn _action = [QGVAR(TurnOn), @@ -60,7 +60,7 @@ _action = [QGVAR(TurnOn), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); // Add turnOff _action = [QGVAR(TurnOff), @@ -72,7 +72,7 @@ _action = [QGVAR(TurnOff), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); // Add disconnect _action = [QGVAR(Disconnect), @@ -84,4 +84,4 @@ _action = [QGVAR(Disconnect), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); From c001be5b09d749737551acf281de70d5c8c32073 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 5 May 2017 13:20:54 -0500 Subject: [PATCH 52/94] Add keybind to toggle interaction menu (#5095) --- addons/common/stringtable.xml | 14 ++++++++++++++ addons/interact_menu/XEH_clientInit.sqf | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 10a6141686..632b24918a 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -940,6 +940,20 @@ Sem espaço para descarregar Нет места для выгрузки 降ろすための空間がありません + + + Toggle + переключить + переключить + Basculer + Cambiar + camb. + Umschalten + pecek + přep. + alternar + トグル + 토글 diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 7e82e2c160..dbe9d548cd 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -42,6 +42,27 @@ GVAR(ParsedTextCached) = []; [219, [false, true, false]], false] call CBA_fnc_addKeybind; //Left Windows Key + Ctrl/Strg +["ACE3 Common", QGVAR(InteractKey_Toggle), +format ["%1 (%2)", (localize LSTRING(InteractKey)), localize ELSTRING(common,KeybindToggle)], +{ + if (GVAR(openedMenuType) != 0) then { + [0] call FUNC(keyDown) + } else { + [0,false] call FUNC(keyUp) + }; +}, {}, [-1, [false, false, false]], false] call CBA_fnc_addKeybind; // UNBOUND + +["ACE3 Common", QGVAR(SelfInteractKey_Toggle), +format ["%1 (%2)", (localize LSTRING(SelfInteractKey)), localize ELSTRING(common,KeybindToggle)], +{ + if (GVAR(openedMenuType) != 1) then { + [1] call FUNC(keyDown) + } else { + [1, false] call FUNC(keyUp) + }; +}, {}, [-1, [false, false, false]], false] call CBA_fnc_addKeybind; // UNBOUND + + // Listens for the falling unconscious event, just in case the menu needs to be closed ["ace_unconscious", { // If no menu is open just quit From ea4a159cd228ca2866580dcda4b45a3acd585b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ozan=20E=C4=9Fitmen?= Date: Fri, 5 May 2017 23:02:59 +0400 Subject: [PATCH 53/94] Add Paradrop Time Coefficient Setting (#5116) * Add coef * Show cargo paradrop time in menu * Unary command, not a function call * If drop time is 0 don't show a progress bar * Add the setting to cargo's editor module * Swap values * Remove extra comma * Move unload message to paradrop event This way the message will show up on all paradrops, not just immidiate ones. --- addons/cargo/ACE_Settings.hpp | 7 +++++++ addons/cargo/CfgVehicles.hpp | 6 ++++++ addons/cargo/functions/fnc_moduleSettings.sqf | 1 + addons/cargo/functions/fnc_onMenuOpen.sqf | 8 +++++++- addons/cargo/functions/fnc_paradropItem.sqf | 9 +++++++++ addons/cargo/functions/fnc_startUnload.sqf | 9 +++++++-- addons/cargo/stringtable.xml | 6 ++++++ 7 files changed, 43 insertions(+), 3 deletions(-) diff --git a/addons/cargo/ACE_Settings.hpp b/addons/cargo/ACE_Settings.hpp index 574000155e..595de28459 100644 --- a/addons/cargo/ACE_Settings.hpp +++ b/addons/cargo/ACE_Settings.hpp @@ -6,4 +6,11 @@ class ACE_Settings { value = 1; category = ECSTRING(OptionsMenu,CategoryLogistics); }; + class GVAR(paradropTimeCoefficent) { + displayName = CSTRING(paradropTimeCoefficent); + description = CSTRING(paradropTimeCoefficent_description); + typeName = "SCALAR"; + value = 2.5; + category = ECSTRING(OptionsMenu,CategoryLogistics); + }; }; diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index a89375e4a0..4c4647581e 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -26,6 +26,12 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 1; }; + class paradropTimeCoefficent { + displayName = CSTRING(paradropTimeCoefficent); + description = CSTRING(paradropTimeCoefficent_description); + typeName = "SCALAR"; + defaultValue = 2.5; + }; }; class ModuleDescription { diff --git a/addons/cargo/functions/fnc_moduleSettings.sqf b/addons/cargo/functions/fnc_moduleSettings.sqf index 0374152a5a..b7af19c76a 100644 --- a/addons/cargo/functions/fnc_moduleSettings.sqf +++ b/addons/cargo/functions/fnc_moduleSettings.sqf @@ -24,5 +24,6 @@ params ["_logic", "", "_activated"]; if (!_activated) exitWith {}; [_logic, QGVAR(enable), "enable"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(paradropTimeCoefficent), "paradropTimeCoefficent"] call EFUNC(common,readSettingFromModule); INFO("Cargo Module Initialized."); diff --git a/addons/cargo/functions/fnc_onMenuOpen.sqf b/addons/cargo/functions/fnc_onMenuOpen.sqf index 852729e529..8b3847993d 100644 --- a/addons/cargo/functions/fnc_onMenuOpen.sqf +++ b/addons/cargo/functions/fnc_onMenuOpen.sqf @@ -44,7 +44,13 @@ if (GVAR(interactionParadrop)) then { lbClear _ctrl; { private _class = if (_x isEqualType "") then {_x} else {typeOf _x}; - _ctrl lbAdd (getText(configfile >> "CfgVehicles" >> _class >> "displayName")); + private _displayName = getText (configfile >> "CfgVehicles" >> _class >> "displayName"); + if (GVAR(interactionParadrop)) then { + _ctrl lbAdd format ["%1 (%2s)", _displayName, GVAR(paradropTimeCoefficent) * ([_class] call FUNC(getSizeItem))]; + } else { + _ctrl lbAdd _displayName; + }; + true } count _loaded; diff --git a/addons/cargo/functions/fnc_paradropItem.sqf b/addons/cargo/functions/fnc_paradropItem.sqf index 2eb59fee1d..4c34e61e4e 100644 --- a/addons/cargo/functions/fnc_paradropItem.sqf +++ b/addons/cargo/functions/fnc_paradropItem.sqf @@ -90,6 +90,15 @@ _itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vecto }, 1, [_itemObject]] call CBA_fnc_addPerFrameHandler; +[ + [ + LSTRING(UnloadedItem), + getText (configFile >> "CfgVehicles" >> typeOf _itemObject >> "displayName"), + getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName") + ], + 3 +] call EFUNC(common,displayTextStructured); + // Invoke listenable event ["ace_cargoUnloaded", [_item, _vehicle, "paradrop"]] call CBA_fnc_globalEvent; diff --git a/addons/cargo/functions/fnc_startUnload.sqf b/addons/cargo/functions/fnc_startUnload.sqf index 8631449b9e..27ebe9e952 100644 --- a/addons/cargo/functions/fnc_startUnload.sqf +++ b/addons/cargo/functions/fnc_startUnload.sqf @@ -28,13 +28,18 @@ private _ctrl = _display displayCtrl 100; private _selected = (lbCurSel _ctrl) max 0; if (count _loaded <= _selected) exitWith {}; -private _item = _loaded select _selected; //This can be an object or a classname string +private _item = _loaded select _selected; // This can be an object or a classname string if (GVAR(interactionParadrop)) exitWith { + // If drop time is 0 don't show a progress bar + if (GVAR(paradropTimeCoefficent) == 0) exitWith { + [QGVAR(paradropItem), [_item, GVAR(interactionVehicle)]] call CBA_fnc_localEvent; + }; + // Start progress bar - paradrop private _size = [_item] call FUNC(getSizeItem); [ - 2.5 * _size, + GVAR(paradropTimeCoefficent) * _size, [_item, GVAR(interactionVehicle), ACE_player], { (_this select 0) params ["_item", "_target", "_player"]; diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index c85d99b7f8..c10f293268 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -253,5 +253,11 @@ 기체가 수평이 아닙니다 Rétablir l'assiette + + Paradrop Time Coffecient + + + Modifier for how long it takes to paradrop a cargo item. + From ec2a90f62cb4bde8eba16eca0b30face64b90bec Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Tue, 17 May 2016 09:36:44 +0100 Subject: [PATCH 54/94] Disable search on spectator unit tree Finally found out how to do this. Having search enabled on the unit tree might seem useful, but it doesn't interact well with keyboard shortcuts used for other purposes like camera control as it causes the tree to jump around unexpectedly. --- addons/spectator/UI/interface.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/spectator/UI/interface.hpp b/addons/spectator/UI/interface.hpp index 392cd9a43d..8c566844ee 100644 --- a/addons/spectator/UI/interface.hpp +++ b/addons/spectator/UI/interface.hpp @@ -190,7 +190,7 @@ class GVAR(interface) { 1 }; multiselectEnabled = 0; - maxHistoryDelay = 10e10; + disableKeyboardSearch = 1; onTreeDblClick = QUOTE([ARR_2('onTreeDblClick',_this)] call FUNC(handleInterface)); }; class unitFrame: RscFrame { From 9ee2f10f63fb807025a1f2308a43cac631541f09 Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Sat, 23 Jul 2016 10:42:58 +0100 Subject: [PATCH 55/94] Simplify spectator compass code --- .../spectator/functions/fnc_handleCompass.sqf | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/addons/spectator/functions/fnc_handleCompass.sqf b/addons/spectator/functions/fnc_handleCompass.sqf index a65cc9ddce..6f0f94b0ee 100644 --- a/addons/spectator/functions/fnc_handleCompass.sqf +++ b/addons/spectator/functions/fnc_handleCompass.sqf @@ -46,19 +46,12 @@ _positions = [ [_compassW + _offset, 0] ]; -_sequence = if (_heading < 90) then { - [_SW, _WN, _NE, _ES] -} else { - if (_heading < 180) then { - [_WN, _NE, _ES, _SW] - } else { - if (_heading < 270) then { - [_NE, _ES, _SW, _WN] - } else { - [_ES, _SW, _WN, _NE] - }; - }; -}; +_sequence = [ + [_SW, _WN, _NE, _ES], + [_WN, _NE, _ES, _SW], + [_NE, _ES, _SW, _WN], + [_ES, _SW, _WN, _NE] +] select floor(_heading/90); { From 74399be1090cbb915fdf8dce99434c202d4656c8 Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Sun, 31 Jul 2016 11:52:25 +0100 Subject: [PATCH 56/94] Optimize spectator unit list function Making good use of the new `select` CODE syntax. --- .../spectator/functions/fnc_updateUnits.sqf | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/addons/spectator/functions/fnc_updateUnits.sqf b/addons/spectator/functions/fnc_updateUnits.sqf index e5b15b6bc1..418643be38 100644 --- a/addons/spectator/functions/fnc_updateUnits.sqf +++ b/addons/spectator/functions/fnc_updateUnits.sqf @@ -33,43 +33,37 @@ if !(_newUnits isEqualTo []) exitWith { }; }; -private ["_sides","_cond","_filteredUnits","_filteredGroups"]; - // Unit setting filter -_newUnits = [[],allPlayers,playableUnits,allUnits] select GVAR(filterUnits); +private _newUnits = [[],allPlayers,playableUnits,allUnits] select GVAR(filterUnits); // Side setting filter -_sides = []; -_cond = [{_this == (side group player)},{(_this getFriend (side group player)) >= 0.6},{(_this getFriend (side group player)) < 0.6},{true}] select GVAR(filterSides); -{ - if (_x call _cond) then { - _sides pushBack _x; - }; -} forEach GVAR(availableSides); +private _sideFilter = [ + {_x == (side group player)}, + {(_x getFriend (side group player)) >= 0.6}, + {(_x getFriend (side group player)) < 0.6}, + {true} +] select GVAR(filterSides); + +private _filteredSides = GVAR(availableSides) select _sideFilter; // Filter units and append to list -_filteredUnits = []; -{ - if ( - (alive _x) && - {(_x isKindOf "CAManBase")} && - {(side group _x) in _sides} && // Side filter - {simulationEnabled _x} && - {!(_x getVariable [QGVAR(isStaged), false])} // Who watches the watchmen? - ) then { - _filteredUnits pushBack _x; - }; -} forEach (_newUnits - GVAR(unitBlacklist)); +private _filteredUnits = (_newUnits - GVAR(unitBlacklist)) select { + (alive _x) && + {(_x isKindOf "CAManBase")} && + {(side group _x) in _filteredSides} && // Side filter + {simulationEnabled _x} && + {!(_x getVariable [QGVAR(isStaged), false])} // Who watches the watchmen? +}; _filteredUnits append GVAR(unitWhitelist); // Cache icons and colour for drawing -_filteredGroups = []; +private _filteredGroups = []; { // Intentionally re-applied to units in case their status changes [_x] call FUNC(cacheUnitInfo); - _filteredGroups pushBack (group _x); + _filteredGroups pushBackUnique (group _x); } forEach _filteredUnits; // Replace previous lists entirely (removes any no longer valid) +GVAR(groupList) = _filteredGroups; GVAR(unitList) = _filteredUnits arrayIntersect _filteredUnits; -GVAR(groupList) = _filteredGroups arrayIntersect _filteredGroups; From 1ff6e820b2b727fa3464a52b6ac8d3b907b868f7 Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Sat, 20 Aug 2016 14:47:41 +0100 Subject: [PATCH 57/94] Add 3den info to spectator template - A `displayName` shown in the 3DEN multiplayer attributes display - A `respawnTypes` array to define which respawn types the template is compatible with (currently only includes `2,3` - need to investigate compatibility with other types further). --- addons/spectator/config.cpp | 2 ++ addons/spectator/stringtable.xml | 3 +++ 2 files changed, 5 insertions(+) diff --git a/addons/spectator/config.cpp b/addons/spectator/config.cpp index 92736edb48..aee0eaaa76 100644 --- a/addons/spectator/config.cpp +++ b/addons/spectator/config.cpp @@ -21,7 +21,9 @@ class CfgPatches { class CfgRespawnTemplates { class ADDON { + displayName = CSTRING(DisplayName); onPlayerKilled = QFUNC(respawnTemplate); onPlayerRespawn = QFUNC(respawnTemplate); + respawnTypes[] = {2,3}; }; }; diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index 4f18fdf08f..b9af855c4f 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -1,6 +1,9 @@ + + ACE Spectator + Spectator Settings Zuschauer Einstellungen From 6394f2b975ee96ddf372c9d060dee8f1f11eeb58 Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Sat, 15 Apr 2017 15:32:05 +0100 Subject: [PATCH 58/94] Fix #5081 The default values of the arrays manipulated by these functions overwrite any changes applied before settings have finished initalising. This won't be an issue after #4456 is merged in future. --- addons/spectator/functions/fnc_updateCameraModes.sqf | 4 ++++ addons/spectator/functions/fnc_updateVisionModes.sqf | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/addons/spectator/functions/fnc_updateCameraModes.sqf b/addons/spectator/functions/fnc_updateCameraModes.sqf index de1611823b..819636ee22 100644 --- a/addons/spectator/functions/fnc_updateCameraModes.sqf +++ b/addons/spectator/functions/fnc_updateCameraModes.sqf @@ -21,6 +21,10 @@ #include "script_component.hpp" +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [DFUNC(updateCameraModes),_this]; +}; + params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]]; private ["_newModes","_currentModes"]; diff --git a/addons/spectator/functions/fnc_updateVisionModes.sqf b/addons/spectator/functions/fnc_updateVisionModes.sqf index c2bbb09167..6db965af3e 100644 --- a/addons/spectator/functions/fnc_updateVisionModes.sqf +++ b/addons/spectator/functions/fnc_updateVisionModes.sqf @@ -29,6 +29,10 @@ #include "script_component.hpp" +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [DFUNC(updateVisionModes),_this]; +}; + params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]]; private ["_newModes","_currentModes"]; From 777d0e6fb0a7f0057bc8e9eaf8c58e502842c619 Mon Sep 17 00:00:00 2001 From: classic Date: Sun, 7 May 2017 02:01:31 +0900 Subject: [PATCH 59/94] Improve Japanese translation (#5133) * Add the Japanese translation for cargo Add the Japanese translation for cargo, fix to html tag and few improvement * fix the Japanese transltion Fix the Japanese translation for attach. it was used wrong html tag. * changed The Japanese translation Changed the Japanese translation of azimuth angle * fix The Japanese translation Fix the Japanese translation for chemlights. it was used wrong html tag. * fix The Japanese translation Fix the Japanese translation for laserpointer. it was used wrong html tag. * Fix the Japanese translation Fix the Japanese translation for medical_blood. it was used wrong translation. * Fix the Japanese translation Fix the Japanese translation for rearm. it was used wrong translation. * add The Japanese translation add The Japanese translation to new words * Improve The Japanese translation Improve, fix and change The Japanese translation * minor fix to Japanese translation minor fix to Japanese translation. see b1b07c5 --- addons/attach/stringtable.xml | 6 ++-- addons/cargo/stringtable.xml | 14 +++++---- addons/chemlights/stringtable.xml | 18 ++++++------ addons/common/stringtable.xml | 32 ++++++++++---------- addons/laserpointer/stringtable.xml | 2 +- addons/medical/stringtable.xml | 44 ++++++++++++++-------------- addons/medical_blood/stringtable.xml | 6 ++-- addons/rearm/stringtable.xml | 8 ++--- addons/spectator/stringtable.xml | 1 + 9 files changed, 67 insertions(+), 64 deletions(-) diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 383ba884fb..900c10bc05 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -12,7 +12,7 @@ Attacca l'oggetto Tárgy hozzácsatolása Прикрепить предмет - &gt;&gt; アイテムを取り付ける + アイテムを取り付ける 물건 부착 @@ -222,7 +222,7 @@ %1<br/>attaccata %1<br/>hozzácsatolva %1<br/>присоединен(-а) - %1&lt;br/&gt; を取り付けた + %1<br/>を取り付けた %1<br/>부착됨 @@ -236,7 +236,7 @@ %1<br/>staccata %1<br/>lecsatolva %1<br/>отсоединен(-а) - %1&lt;br/&gt; を外した + %1<br/>を外した %1<br/>분리됨 diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index c10f293268..9eefee62c1 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -63,7 +63,7 @@ Espacio de carga restante: %1 Spazio cargo rimanente: %1 Espace de cargaison restant : %1 - カーゴの空き容量は: %1 + カーゴの空き容量: %1 선적 공간 남음: %1 @@ -129,7 +129,7 @@ %1<br/>caricato su<br/>%2 %1<br/>berakodva ide:<br/>%2 %1<br/>загружен в<br/>%2 - %1&lt;br/&gt; は &lt;br/&gt;%2 へ積み込まれた + %1<br/>は<br/>%2へ積み込まれた %1<br/>는<br/>%2 에 실림 @@ -143,7 +143,7 @@ Hai scaricato<br/>%1 da<br/>%2 1%<br/>kirakodva ebből:<br/>%2 %1<br/>разгружен из<br/>%2 - &lt;br/&gt;%2 から &lt;br/&gt;%1 が下ろされた + <br/>%1が<br/>%2から降ろされた %1<br/>는<br/>%2 에서 내려짐 @@ -169,7 +169,7 @@ Scaricando Descargando Déchargement de la cargaison - カーゴから下ろしている + カーゴから降ろしている 화물 내리기 @@ -182,7 +182,7 @@ %1<br/>non può essere caricato %1<br/>no pudo ser cargado %1<br /> n'a pas pu être chargé - %1&lt;br/&gt;は積み込めなかった + %1<br/>は積み込めなかった %1<br/>이 실릴 수가 없습니다 @@ -195,7 +195,7 @@ %1<br/>non può essere scaricato %1<br/>no pudo ser descargado %1<br /> n'a pas pu être déchargé - %1&lt;br/&gt;は下ろせなかった + %1<br/>は降ろせなかった %1<br/>이 내려질 수가 없습니다 @@ -255,9 +255,11 @@ Paradrop Time Coffecient + 空中投下までの時間係数 Modifier for how long it takes to paradrop a cargo item. + カーゴ アイテムを空中投下するまでの時間を変更します。 diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 1cbf1183f4..c95af9dc26 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ %1<br/>Prepared - %1&lt;br/&gt; をつかった + %1<br/>をつかった %1<br/>Przygotowany %1<br/>vorbereitet %1<br/>준비됨 @@ -65,7 +65,7 @@ Type: Light - Orange<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - オレンジ&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - オレンジ<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - pomarańczowe<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - orange<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 오렌지<br />수량: 1<br />사용처: 손 @@ -89,7 +89,7 @@ Type: Light - White<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 白&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 白<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - białe<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - weiß<br />Anzahl: 1<br />Benutzt in: Hand 종류:하얀색<br />수량: 1<br />사용처: 손 @@ -113,7 +113,7 @@ Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 赤 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 赤 (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe czerwone (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - rot, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 빨간색 (5분)<br />수량: 1<br />사용처: 손 @@ -137,7 +137,7 @@ Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 黄 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 黄 (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe żółte (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - gelb, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 노란색 (5분)<br />수량: 1<br />사용처: Hand @@ -161,7 +161,7 @@ Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 オレンジ (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - orange, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 주황색 (5분)<br />수량: 1<br />사용처: 손 @@ -185,7 +185,7 @@ Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 白 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 白 (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe białe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - weiß, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 하얀색 (5분)<br />수량: 1<br />사용처: 손 @@ -209,7 +209,7 @@ Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 赤外線&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 赤外線<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - podczerwone<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - infrarot<br />Anzahl: 1<br />Benutzt in: Hand 종류: 적외선<br />수량: 1<br />사용처: 손 diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 632b24918a..a1ac4a6604 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -69,7 +69,7 @@ N É N - N + @@ -83,7 +83,7 @@ NNE ÉÉK NNE - NNE + 北北東 북북동 @@ -97,7 +97,7 @@ NE ÉK NE - NE + 北東 북동 @@ -111,7 +111,7 @@ LNE KÉK ENE - ENE + 東北東 동북동 @@ -125,7 +125,7 @@ L K E - E + @@ -139,7 +139,7 @@ LSE KDK ESE - ESE + 東南東 동남동 @@ -153,7 +153,7 @@ SE DK SE - SE + 南東 남동 @@ -167,7 +167,7 @@ SSE DDK SSE - SSE + 南南東 남남동 @@ -181,7 +181,7 @@ S D S - S + @@ -195,7 +195,7 @@ SSO DDNy SSO - SSW + 南南西 남남서 @@ -209,7 +209,7 @@ SO DNy SO - SW + 南西 남서 @@ -223,7 +223,7 @@ OSO NyDNy OSO - WSW + 西南西 서남서 @@ -237,7 +237,7 @@ O Ny O - W + 西 @@ -251,7 +251,7 @@ ONO NyÉNy ONO - WNW + 北北西 서북서 @@ -265,7 +265,7 @@ NO ÉNy NO - NW + 北西 북서 @@ -279,7 +279,7 @@ NNO ÉÉNy NNO - NNW + 北北西 북북서 diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index fb9fc9b3ed..1de5c8a8db 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -54,7 +54,7 @@ <t color='#9cf953'>Использовать: </t>ВКЛ/ВЫКЛ лазер <t color='#9cf953'>Usar: </t>Encender/Apagar láser <t color='#9cf953'>Használat: </t>Lézer BE/KI kapcsolása - &lt;t color='#9cf953'&gt;つかう: &lt;/t&gt;レーザの起動/停止 + <t color='#9cf953'>つかう: </t>レーザの起動/停止 <t color='#9cf953'>사용키: </t>레이저 켜기/끄기 diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 6966b73c0b..d3eefa0c42 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -416,7 +416,7 @@ Zárókötszer Bendaggio rapido Curativo de Campo - フィールド ドレッシング + 緊急圧迫包帯 필드 드레싱 @@ -430,7 +430,7 @@ Bande extensible Bandagem de Compressão Obvaz Tlakový - パッキング バンテージ + 弾性包帯 거즈 붕대 @@ -444,7 +444,7 @@ Rögzitő kötszer Bendaggio elastico Bandagem Elástica - エラスティック バンテージ + 伸縮包帯 압박 붕대 @@ -458,7 +458,7 @@ QuikClot QuikClot (polvere emostatica) QuikClot - クイック クロット + クイッククロット 퀵 클롯 @@ -934,7 +934,7 @@ Kötszer (Általános) Bendaggio (base) Bandagem(Básico) - 包帯 (ベーシック) + 包帯 (緊急圧迫) 붕대 (기본) @@ -976,7 +976,7 @@ Bendaggio compressivo Bandagem de Compressão Obvaz (Tlakový) - パッキング バンテージ + 弾性包帯 거즈 붕대 @@ -990,7 +990,7 @@ Usato su ferite medie o larghe per fermare emorragie. Usado para o preenchimento de cavidades geradas por ferimentos médios e grandes e estancar o sangramento. Používá se k zastavení středních až silnějších krvácení - パッキングは粘着フィルム状で、普通から大きめなケガにつかい止血します。 + 弾性包帯は粘着フィルム状で、普通から大きめなケガにつかい止血します。 중형 또는 대형 상처를 채우고 출혈을 막기위해 쓰입니다 @@ -1018,7 +1018,7 @@ Rögzító kötszer Benda (elastica) Bandagem (Elástica) - 包帯 (エラスティック) + 包帯 (伸縮) 붕대 (압박) @@ -1032,7 +1032,7 @@ Kit di bendaggio, elastico Kit de Bandagem, Elástica Sada obvazů, Elastická - 包帯キット (エラスティック) + 包帯キット (伸縮) 붕대, 압박 @@ -1477,7 +1477,7 @@ Bendaggio emostatico (QuikClot) Bandagem básica (Coagulante) Hemostatický obvaz (QuikClot) - ベーシック フィールド ドレッシング(クイック クロット) + 緊急圧迫止血包帯 (クイッククロット) 필드 드레싱 (퀵 클롯) @@ -1491,7 +1491,7 @@ Bendaggio emostatico (QuikClot) Bandagem com agente coagulante Hemostatický obvaz (QuikClot) - クイック クロット + クイッククロット 퀵 클롯 붕대 @@ -2121,7 +2121,7 @@ A páciens, %1,<br/>%2.<br/>%3.<br/>%4 Pacient %1<br/>je %2.<br/>%3.<br/>%4 Paciente %1<br/>é %2.<br/>%3.<br/>%4 - 痛みは %1&lt;br/&gt; %2.&lt;br/&gt;%3.&lt;br/&gt;%4 + 痛み %1<br/>は %2.<br/>%3.<br/>%4 환자 %1<br/>는 %2.<br/>%3.<br/>%4 @@ -4155,7 +4155,7 @@ Dans les véhicules et les structures sanitaires Járművek & létesítmény Veicoli e Strutture - 車両 &amp; 施設 + 車両 & 施設 차량 및 시설 @@ -4169,7 +4169,7 @@ Permettre les trousses chirurgicales (Avancé) Sebészkészlet (Fejlett) engedélyezése Permetti Kit Chirurgico (Avanzato) - 縫合キットの許可 (Adv) + 縫合キットの許可 (アド) 봉합키트 활성화 (고급) @@ -4197,7 +4197,7 @@ Consommer les trousses chirurgicales (Av.) Sebészkészlet (Fejlett) eltávolítása Rimuovi Kit Chirurgico (Avanzato) - 縫合キットを削除 (Adv) + 縫合キットを削除 (アド) 봉합키트 제거 (고급) @@ -4225,7 +4225,7 @@ Lieu d'utilisation des trousses chirurgicales Sebészkészlet (Fejlett) helyei Località Kit Chirurgico (Avanzato) - 縫合キットをつかう場所 (Adv) + 縫合キットをつかう場所 (アド) 봉합키트 사용 장소 (고급) @@ -4253,7 +4253,7 @@ Condição do Kit Cirúrgico (Avançado) Условие использования хирургического набора (усл.) Condizioni Kit Chirurgico (Avanzato) - 縫合キットの状態 (Adv) + 縫合キットの状態 (アド) 봉합키트 상태 (고급) @@ -4571,7 +4571,7 @@ Médecin (traitements avancés uniquement) Doktor (csak fejlett orvosok) Dottore (Solo Medici Avanzati) - 医師 (アドバンスド医療でのみ) + 医師 (アドバンスド医療のみ) 의사 (오직 고급 의료에서만) @@ -4697,7 +4697,7 @@ Définir comme installation médical [ACE] Orvosi létesítmény beállítása [ACE] Imposta Struttura Medica [ACE] - 医療施設として設定 [ACE] + 医療施設を設定 [ACE] 의료시설 선정 [ACE] @@ -4739,7 +4739,7 @@ Définir un objet comme installation médical. Cela permet les traitements avancés. Peut être utilisé sur les batiments et les véhicules Egy objektumot orvosi létesítményként határoz meg. Ez fejlett ellátási lehetőségeket engedélyez. Használható járműveken és épületeken. Definisce un oggetto come struttura medica. Questo permette cure più avanzate. Può essere usato su edifici e veicoli. - オブジェクトを医療施設として割り当てます。割り当てられた場合、より高度な治療が可能になり、建物と車両へつかえます。 + オブジェクトを医療施設として割り当てます。建物と車両へ割り当てられた場合、より高度な治療が可能になります。 물체를 의료시설로 정의합니다. 건물 혹은 차량이 될 수 있습니다. 이는 고급 의료 조치를 할 수 있게해줍니다. @@ -4753,7 +4753,7 @@ [ACE] Caisse médicale (basique) [ACE] Orvosi láda (Alap) [ACE] Cassa Rifornimenti Medici (Basico) - [ACE] 医療箱 (ベーシック) + [ACE] 医療物資箱 (ベーシック) [ACE] 의료 물자 (기본) @@ -4767,7 +4767,7 @@ [ACE] Caisse médicale (avancée) [ACE] Orvosi láda (Fejlett) [ACE] Cassa Rifornimenti Medici (Avanzato) - [ACE] 医療箱 (アドバンスド) + [ACE] 医療物資箱 (アドバンスド) [ACE] 의료 물자 (고급) diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index 8f4edbc9e2..bd401f5c39 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -11,7 +11,7 @@ Enable Blood Drops - 血の滴下を有効化 + 血痕を有効化 Aktiviere Blutspritzer 피흘리기 활성화 Włącz ślady krwi na ziemi @@ -19,7 +19,7 @@ Enable or disable Blood Drops created on bleeding and taking damage - ダメージを受けたり、出血していると血が滴る様子の有効か無効化 + ダメージを受けたり、出血していると出る血痕の有効か無効化 Aktiviere oder deaktiviere Blutspritzer, die durch Blutungen oder bei Schadensnahme entstehen. Włącz lub wyłącz pozostawianie śladów krwi na ziemi kiedy postać odnosi obrażenia bądź krwawi (Dés)active les gouttes de sang lors d'un saignement ou de blessure diff --git a/addons/rearm/stringtable.xml b/addons/rearm/stringtable.xml index 7a84aa7a6b..c7b545c481 100644 --- a/addons/rearm/stringtable.xml +++ b/addons/rearm/stringtable.xml @@ -115,7 +115,7 @@ Sto Riarmando %1 con %2... Rearmando %1 con %2... Réarmement de %1 avec %2... - %2により%1を再武装する。 + %1を%2により再武装する。 %2을 %1에 재보급중... @@ -141,7 +141,7 @@ Sto prendendo %1 per %2... Tomando %1 para %2... Prend %1 pour %2... - %2のために%1を取得しています・・・ + %1を%2のために取得しています・・・ %2를 위해 %1 가져오는중... @@ -193,7 +193,7 @@ Sto riponendo %1 in %2... Guardando %1 en %2... Stocke %1 dans %2... - %2へ%1を戻しています・・・ + %1を%2へ戻しています・・・ %2에 %1 보관중... @@ -218,7 +218,7 @@ Riarmati %1 colpi di %2 su %3 Rearmadas %1 rondas de %2 en %3 %1 balles réarmées de %2 dans %3 - %3にある%2の%1弾頭を再武装した + %1発の%2を%3から装填した %3에 2%의 %1 탄약 재보급 diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index b9af855c4f..b2570dd08f 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -3,6 +3,7 @@ ACE Spectator + ACE スペクテイター Spectator Settings From f1ee7756d49b8ad8268db624fe8f4b49b0f00713 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 7 May 2017 16:51:34 -0500 Subject: [PATCH 60/94] Fix Spotting Scope Interaction Point (#5132) --- addons/spottingscope/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp index 84ce5f177f..fa2574cb8d 100644 --- a/addons/spottingscope/CfgVehicles.hpp +++ b/addons/spottingscope/CfgVehicles.hpp @@ -43,7 +43,7 @@ class CfgVehicles { class ACE_Actions: ACE_Actions{ class ACE_MainActions: ACE_MainActions { - selection = "main_gun"; + selection = "main_turret_axis"; class ACE_Pickup { selection = ""; displayName = CSTRING(PickUp); From 5fa9ccc6941804eccfab63c07867c97a17875e10 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 10 May 2017 11:28:14 -0500 Subject: [PATCH 61/94] Disable ACE_FCS on RHS Russian Attack Helis (#5145) --- optionals/compat_rhs_afrf3/CfgVehicles.hpp | 34 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 9de9f8220d..3ae5a06f3f 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -105,6 +105,17 @@ class CfgVehicles { }; class CommanderOptics; }; + class Air; + class Helicopter: Air { + class Turrets; + }; + class Helicopter_Base_F: Helicopter { + class Turrets: Turrets { + class MainTurret; + }; + }; + + class rhs_bmd_base: Tank_F { EGVAR(refuel,fuelCapacity) = 300; class Turrets: Turrets { @@ -279,7 +290,6 @@ class CfgVehicles { EGVAR(refuel,fuelCapacity) = 3600; }; - class Helicopter_Base_F; class Helicopter_Base_H: Helicopter_Base_F { class EventHandlers; }; @@ -334,15 +344,33 @@ class CfgVehicles { }; }; - class Heli_Attack_02_base_F; + class Heli_Attack_02_base_F: Helicopter_Base_F {}; + class rhs_mi28_base: Heli_Attack_02_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; + }; + class RHS_Ka52_base : Heli_Attack_02_base_F { EGVAR(refuel,fuelCapacity) = 1870; EGVAR(fastroping,enabled) = 0; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class RHS_Mi24_base : Heli_Attack_02_base_F { EGVAR(refuel,fuelCapacity) = 1851; EGVAR(fastroping,enabled) = 0; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class rhs_t80b : rhs_tank_base { @@ -352,7 +380,7 @@ class CfgVehicles { ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}}; ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint"}}}; }; - + class Truck_F: Car_F {}; class RHS_Ural_BaseTurret: Truck_F { EGVAR(refuel,fuelCapacity) = 360; From 68a678207859ac3257626787067c8cee4492b66a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 10 May 2017 11:28:26 -0500 Subject: [PATCH 62/94] Switch 2 perm PFEH to everyFrame (#5140) --- addons/frag/XEH_postInit.sqf | 2 +- addons/weather/XEH_postInit.sqf | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf index 634212354c..4126ca328c 100644 --- a/addons/frag/XEH_postInit.sqf +++ b/addons/frag/XEH_postInit.sqf @@ -14,7 +14,7 @@ if (isServer) then { ["ace_firedPlayerVehicle", LINKFUNC(fired)] call CBA_fnc_addEventHandler; ["ace_firedNonPlayerVehicle", LINKFUNC(fired)] call CBA_fnc_addEventHandler; - [LINKFUNC(masterPFH), 0, []] call CBA_fnc_addPerFrameHandler; + addMissionEventHandler ["EachFrame", {call FUNC(masterPFH)}]; }] call CBA_fnc_addEventHandler; // Cache for ammo type configs diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 569dd87dc4..d2c6f3b7df 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -62,11 +62,9 @@ simulWeatherSync; ["ace_settingsInitialized",{ TRACE_1("ace_settingsInitialized eh",GVAR(syncRain)); - //Create a 0 sec delay PFEH to update rain every frame: + // update rain every frame: if (GVAR(syncRain)) then { - [{ - 0 setRain GVAR(ACE_rain); - }, 0, []] call CBA_fnc_addPerFrameHandler; + addMissionEventHandler ["EachFrame", {0 setRain GVAR(ACE_rain)}]; }; //Create a 1 sec delay PFEH to update wind/rain/temp/humidity: From 08217f460ec90aa5aa97503d662be196413217d5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 10 May 2017 11:28:44 -0500 Subject: [PATCH 63/94] Explosives - Add code handler for detonation (#5115) * Explosives - Add code handler for detonation * Add info to wiki * Fix cellphone in demo code, move example to wiki --- addons/explosives/XEH_PREP.hpp | 1 + addons/explosives/XEH_preInit.sqf | 2 ++ .../functions/fnc_addDetonateActions.sqf | 4 +-- .../functions/fnc_addDetonateHandler.sqf | 24 ++++++++++++++ .../functions/fnc_defuseExplosive.sqf | 2 +- .../functions/fnc_detonateExplosive.sqf | 19 ++++++++---- .../functions/fnc_detonateExplosiveAll.sqf | 9 +++--- addons/explosives/functions/fnc_dialPhone.sqf | 2 +- .../explosives/functions/fnc_dialingPhone.sqf | 2 +- .../functions/fnc_onIncapacitated.sqf | 4 +-- .../functions/fnc_scriptedExplosive.sqf | 5 +-- .../explosives/functions/fnc_startTimer.sqf | 11 ++++--- docs/wiki/framework/explosives-framework.md | 31 +++++++++++++++++++ 13 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 addons/explosives/functions/fnc_addDetonateHandler.sqf diff --git a/addons/explosives/XEH_PREP.hpp b/addons/explosives/XEH_PREP.hpp index b43953d8fd..17558ee54c 100644 --- a/addons/explosives/XEH_PREP.hpp +++ b/addons/explosives/XEH_PREP.hpp @@ -2,6 +2,7 @@ PREP(addCellphoneIED); PREP(addClacker); PREP(addDetonateActions); +PREP(addDetonateHandler); PREP(addExplosiveActions); PREP(addToSpeedDial); PREP(addTransmitterActions); diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 65bebfd321..3a4d9a5aea 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -25,4 +25,6 @@ if (isServer) then { GVAR(explosivesOrientations) = [] }; +GVAR(detonationHandlers) = []; + ADDON = true; diff --git a/addons/explosives/functions/fnc_addDetonateActions.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf index f88abc29d3..5b61de01f4 100644 --- a/addons/explosives/functions/fnc_addDetonateActions.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -43,7 +43,7 @@ _explosivesList = []; {(_this select 2) call FUNC(detonateExplosive);}, {true}, {}, - [_unit,_range,_x] + [_unit,_range,_x,_detonator] ] call EFUNC(interact_menu,createAction), [], _unit @@ -62,7 +62,7 @@ if (_detonator != "ACE_DeadManSwitch") then { {(_this select 2) call FUNC(detonateExplosiveAll);}, {true}, {}, - [_unit,_range,_explosivesList] + [_unit,_range,_explosivesList, _detonator] ] call EFUNC(interact_menu,createAction), [], _unit diff --git a/addons/explosives/functions/fnc_addDetonateHandler.sqf b/addons/explosives/functions/fnc_addDetonateHandler.sqf new file mode 100644 index 0000000000..2058b24502 --- /dev/null +++ b/addons/explosives/functions/fnc_addDetonateHandler.sqf @@ -0,0 +1,24 @@ +/* + * Author: PabstMirror + * Add a explosive detonation handler. + * Should be called on all machines. + * Code needs to return BOOL: true(allowed) / false(blocked) + * See https://ace3mod.com/wiki/framework/explosives-framework.html for an example. + * + * Arguments: + * 0: Code + * - Passed [Unit, MaxRange , Explosive , FuzeTime , TriggerItem ] + * + * Return Value: + * None + * + * Example: + * [{false}] call ace_explosives_fnc_addDetonateHandler; + * + * Public: Yes + */ +#include "script_component.hpp" + +params [["_code", {true}, [{}]]]; + +GVAR(detonationHandlers) pushBack _code; diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index b98b992f8e..a6d0e82a6b 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -21,7 +21,7 @@ TRACE_2("params",_unit,_explosive); if (GVAR(ExplodeOnDefuse) && {(random 1.0) < (getNumber (ConfigFile >> "CfgAmmo" >> typeOf _explosive >> QGVAR(explodeOnDefuseChance)))}) exitWith { TRACE_1("exploding on defuse",_explosive); - [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); + [_unit, -1, [_explosive, 1], "#ExplodeOnDefuse"] call FUNC(detonateExplosive); [QGVAR(explodeOnDefuse), [_explosive, _unit]] call CBA_fnc_globalEvent; }; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 0b7f9f3fa4..822a04aeaf 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -8,28 +8,35 @@ * 2: Explosive * 0: Explosive * 1: Fuse time + * 3: Trigger Item Classname * * Return Value: * None * * Example: - * [player, 100, [Explosive, 1]] call ACE_Explosives_fnc_detonateExplosive; // has to be within range - * [player, -1, [Explosive, 1]] call ACE_Explosives_fnc_detonateExplosive; // range ignored. + * [player, 100, [Explosive, 1], "ACE_Clacker"] call ACE_Explosives_fnc_detonateExplosive; // has to be within range + * [player, -1, [Explosive, 1], "ACE_Cellphone"] call ACE_Explosives_fnc_detonateExplosive; // range ignored. * * Public: Yes */ #include "script_component.hpp" -params ["_unit", "_range", "_item"]; -TRACE_3("params",_unit,_range,_item); +params ["_unit", "_range", "_item", ["_triggerClassname", "#unknown", [""]]]; +TRACE_4("detonateExplosive",_unit,_range,_item,_triggerClassname); private ["_result", "_ignoreRange", "_pos"]; _ignoreRange = (_range == -1); -_result = true; - if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {TRACE_1("out of range",_range); false}; +_result = true; +{ + // Pass [Unit, MaxRange , Explosive , FuzeTime , TriggerItem ] + private _handlerResult = [_unit, _range, _item select 0, _item select 1, _triggerClassname] call _x; + if (_handlerResult isEqualTo false) then {TRACE_1("Handler Failed",_forEachIndex); _result = false}; +} forEach GVAR(detonationHandlers); +if (!_result) exitWith {false}; + if (getNumber (ConfigFile >> "CfgAmmo" >> typeOf (_item select 0) >> "TriggerWhenDestroyed") == 0) then { private ["_exp", "_previousExp"]; _previousExp = _item select 0; diff --git a/addons/explosives/functions/fnc_detonateExplosiveAll.sqf b/addons/explosives/functions/fnc_detonateExplosiveAll.sqf index 377dc0b93a..468183a003 100644 --- a/addons/explosives/functions/fnc_detonateExplosiveAll.sqf +++ b/addons/explosives/functions/fnc_detonateExplosiveAll.sqf @@ -8,20 +8,21 @@ * 2: Explosives to detonate * 0: Explosive * 1: Fuse time + * 3: Trigger Item Classname * * Return Value: * None * * Example: - * [player, -1, [[c4,0.5]]] call ACE_Explosives_fnc_detonateExplosiveAll; + * [player, -1, [[c4,0.5]], "ACE_Clacker"] call ACE_Explosives_fnc_detonateExplosiveAll; * * Public: No */ #include "script_component.hpp" -params ["_unit", "_range", "_explosivesList"]; -TRACE_3("Params",_unit,_range,_explosivesList); +params ["_unit", "_range", "_explosivesList", "_triggerClassname"]; +TRACE_4("Params",_unit,_range,_explosivesList,_triggerClassname); { - [_unit,_range,_x] call FUNC(detonateExplosive); + [_unit,_range,_x,_triggerClassname] call FUNC(detonateExplosive); } forEach _explosivesList; diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index e205f9b381..7e715c2ac7 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -41,6 +41,6 @@ if (_unit == ace_player) then { playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; (_this select 0) setVariable [QGVAR(Dialing), false, true]; }, [_unit,_explosive select 0], 0.25 * (count _arr - 4)] call CBA_fnc_waitAndExecute; - [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2), "ACE_Cellphone"] call FUNC(startTimer); }; }; diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf index aa20ebf4b0..9cafa01a5e 100644 --- a/addons/explosives/functions/fnc_dialingPhone.sqf +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -31,7 +31,7 @@ private _explosive = [_code] call FUNC(getSpeedDialExplosive); if (_i >= (count _arr + 2)) then { [_pfID] call CALLSTACK(CBA_fnc_removePerFrameHandler); if ((count _explosive) > 0) then { - [_unit, -1, [_explosive select 0, _explosive select 2]] call FUNC(detonateExplosive); + [_unit, -1, [_explosive select 0, _explosive select 2], "ACE_Cellphone"] call FUNC(detonateExplosive); }; _unit setVariable [QGVAR(Dialing), false, true]; if (_unit == ace_player) then { diff --git a/addons/explosives/functions/fnc_onIncapacitated.sqf b/addons/explosives/functions/fnc_onIncapacitated.sqf index 96949e7719..6f9a9f498a 100644 --- a/addons/explosives/functions/fnc_onIncapacitated.sqf +++ b/addons/explosives/functions/fnc_onIncapacitated.sqf @@ -26,7 +26,7 @@ private _range = getNumber (configFile >> "CfgWeapons" >> "ACE_DeadManSwitch" >> private _deadman = [_unit, "DeadManSwitch"] call FUNC(getPlacedExplosives); TRACE_2("placed",_deadman,_range); { - [_unit, _range, _x, true] call FUNC(detonateExplosive); + [_unit, _range, _x, "ACE_DeadManSwitch"] call FUNC(detonateExplosive); } forEach _deadman; //Handle deadman connected to explosive in inventory @@ -47,5 +47,5 @@ if (_connectedInventoryExplosive != "") then { private _explosive = createVehicle [_ammo, (getPos _unit), [], 0, "NONE"]; _explosive setPosASL (getPosASL _unit); - [_unit, -1, [_explosive, 0.5]] call FUNC(detonateExplosive); //Explode, ignoring range, with a 0.5 second delay + [_unit, -1, [_explosive, 0.5], "ACE_DeadManSwitch"] call FUNC(detonateExplosive); //Explode, ignoring range, with a 0.5 second delay }; diff --git a/addons/explosives/functions/fnc_scriptedExplosive.sqf b/addons/explosives/functions/fnc_scriptedExplosive.sqf index 6a554ac09c..ff7a2ca1a0 100644 --- a/addons/explosives/functions/fnc_scriptedExplosive.sqf +++ b/addons/explosives/functions/fnc_scriptedExplosive.sqf @@ -6,6 +6,7 @@ * Arguments: * 0: Explosives objects to detonate * 1: Fuze delay (for each explosive; use negative number for random time up to value) + * 2: Trigger Item Classname * * Return Value: * None @@ -18,7 +19,7 @@ */ #include "script_component.hpp" -params [["_explosiveArr", [], [[], objNull]], ["_fuzeTime", 0, [0]]]; +params [["_explosiveArr", [], [[], objNull]], ["_fuzeTime", 0, [0]], ["_triggerClassname", "#scripted", [""]]]; if (_explosiveArr isEqualType objNull) then { _explosiveArr = [_explosiveArr]; @@ -26,5 +27,5 @@ if (_explosiveArr isEqualType objNull) then { { private _detTime = if (_fuzeTime < 0) then {random abs _fuzeTime} else {_fuzeTime}; - [objNull, -1, [_x, _detTime]] call FUNC(detonateExplosive); + [objNull, -1, [_x, _detTime], _triggerClassname] call FUNC(detonateExplosive); } forEach _explosiveArr; diff --git a/addons/explosives/functions/fnc_startTimer.sqf b/addons/explosives/functions/fnc_startTimer.sqf index 1f529d9765..6694d5dc0d 100644 --- a/addons/explosives/functions/fnc_startTimer.sqf +++ b/addons/explosives/functions/fnc_startTimer.sqf @@ -5,6 +5,7 @@ * Arguments: * 0: Explosive * 1: Time till detonate + * 2: Trigger Item Classname * * Return Value: * None @@ -16,13 +17,13 @@ */ #include "script_component.hpp" -params ["_explosive", "_delay"]; -TRACE_2("params",_explosive,_delay); +params ["_explosive", "_delay", ["_triggerClassname", "#timer", [""]]]; +TRACE_3("startTimer",_explosive,_delay,_triggerClassname); [{ - params ["_explosive"]; + params ["_explosive", "_triggerClassname"]; TRACE_1("Explosive Going Boom",_explosive); if (!isNull _explosive) then { - [_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive); + [_explosive, -1, [_explosive, 0], _triggerClassname] call FUNC(detonateExplosive); }; -}, [_explosive], _delay] call CBA_fnc_waitAndExecute; +}, [_explosive, _triggerClassname], _delay] call CBA_fnc_waitAndExecute; diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md index caa7f6b812..2d5edebb5e 100644 --- a/docs/wiki/framework/explosives-framework.md +++ b/docs/wiki/framework/explosives-framework.md @@ -170,3 +170,34 @@ Name | Use 0 | `player` | Unit explosive will connect to 1 | `claymore1` | Explosive object that will be connected 2 | `"ACE_Clacker"` | Detonator type class name + +#### 5.3 Detonation Handler. + +Detonation Handlers are called when something attempts to trigger an explosive. They can be used to block the detonation. + +These are only used for script based triggers like clackers, cellphone and timers (anything that uses `detonateExplosive`). +Sensor based triggers like AT Mines, Tripwires are uneffected. +All added handlers will be called, if ANY one returns false, the detonation will be blocked. + +`[{CODE}] call ace_explosives_fnc_addDetonateHandler;` + +CODE will be passed `[Unit, MaxRange , Explosive , FuzeTime , TriggerItem ]` and should return a bool: true(allowed) / false(blocked) + +#### 5.3.1 Example + +Jammer that blocks RF triggers: + +```cpp +[{ + params ["_unit", "_range", "_explosive", "_fuzeTime", "_triggerItem"]; + if (_triggerItem == "ace_cellphone") exitWith { systemChat "Blocking Cell Phone"; false }; // always block cell phones + if (_triggerItem == "ace_m26_clacker") exitWith { + _range = _range / 1000; + private _actualRange = _unit distance _explosive; + systemChat format ["Limited Range For RF Clacker [%1m / %2m]", _actualRange toFixed 1, _range toFixed 1]; + (_actualRange < _range) // return bool + }; + // allow anything else (like timers / wired clackers) + true +}] call ace_explosives_fnc_addDetonateHandler; +``` From b3f03d5ffbae7dbc44473ca44973558927ab0a80 Mon Sep 17 00:00:00 2001 From: Jo David Date: Wed, 10 May 2017 18:29:04 +0200 Subject: [PATCH 64/94] Zeus Suppression Module (#4977) * add base structure * Add getModuleDestination * Add 2d map support, debug * Cleanup, handle weapon max range * Handle non-local units * Use new showMessage func * Run on groups when placed on leader * Support for Indirect Fire Vehicles * Cleanup * Use doArtilleryFire which was fixed in 1.68 --- addons/zeus/CfgVehicles.hpp | 6 + addons/zeus/XEH_PREP.hpp | 3 + addons/zeus/XEH_postInit.sqf | 1 + addons/zeus/config.cpp | 1 + .../functions/fnc_getModuleDestination.sqf | 79 ++++++++++++ .../functions/fnc_moduleSuppressiveFire.sqf | 117 ++++++++++++++++++ .../fnc_moduleSuppressiveFireLocal.sqf | 39 ++++++ addons/zeus/stringtable.xml | 3 + 8 files changed, 249 insertions(+) create mode 100644 addons/zeus/functions/fnc_getModuleDestination.sqf create mode 100644 addons/zeus/functions/fnc_moduleSuppressiveFire.sqf create mode 100644 addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp index c7111e42bc..42dc6d4289 100644 --- a/addons/zeus/CfgVehicles.hpp +++ b/addons/zeus/CfgVehicles.hpp @@ -160,6 +160,12 @@ class CfgVehicles { displayName = CSTRING(ModuleSearchNearby_DisplayName); function = QFUNC(moduleSearchNearby); }; + class GVAR(moduleSuppressiveFire): GVAR(moduleBase) { + curatorCanAttach = 1; + category = QGVAR(AI); + displayName = CSTRING(ModuleSuppressiveFire_DisplayName); + function = QFUNC(moduleSuppressiveFire); + }; class GVAR(moduleSetMedic): GVAR(moduleBase) { curatorCanAttach = 1; category = QGVAR(Medical); diff --git a/addons/zeus/XEH_PREP.hpp b/addons/zeus/XEH_PREP.hpp index f52c300355..0090d04015 100644 --- a/addons/zeus/XEH_PREP.hpp +++ b/addons/zeus/XEH_PREP.hpp @@ -4,6 +4,7 @@ PREP(bi_moduleCurator); PREP(bi_moduleMine); PREP(bi_moduleProjectile); PREP(bi_moduleRemoteControl); +PREP(getModuleDestination); PREP(handleZeusUnitAssigned); PREP(moduleAddSpareTrack); PREP(moduleAddSpareWheel); @@ -16,6 +17,8 @@ PREP(moduleSetMedic); PREP(moduleSetMedicalVehicle); PREP(moduleSetMedicalFacility); PREP(moduleSimulation); +PREP(moduleSuppressiveFire); +PREP(moduleSuppressiveFireLocal); PREP(moduleSurrender); PREP(moduleTeleportPlayers); PREP(moduleUnconscious); diff --git a/addons/zeus/XEH_postInit.sqf b/addons/zeus/XEH_postInit.sqf index 44bd406552..0c3ff85cdf 100644 --- a/addons/zeus/XEH_postInit.sqf +++ b/addons/zeus/XEH_postInit.sqf @@ -14,6 +14,7 @@ QGVAR(GlobalSkillAI) addPublicVariableEventHandler FUNC(moduleGlobalSetSkill); [QGVAR(modulePatrolArea), CBA_fnc_taskPatrol] call CBA_fnc_addEventHandler; [QGVAR(moduleSearchNearby), CBA_fnc_searchNearby] call CBA_fnc_addEventHandler; [QGVAR(moduleSearchArea), CBA_fnc_taskSearchArea] call CBA_fnc_addEventHandler; +[QGVAR(suppressiveFire), LINKFUNC(moduleSuppressiveFireLocal)] call CBA_fnc_addEventHandler; // Editable object commands must be ran on server, this events are used in the respective module if (isServer) then { diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index 248d2af71c..5cd88750b9 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -12,6 +12,7 @@ class CfgPatches { QGVAR(moduleSearchArea), QGVAR(moduleSearchNearby), QGVAR(moduleSimulation), + QGVAR(moduleSuppressiveFire), QGVAR(moduleTeleportPlayers) }; weapons[] = {}; diff --git a/addons/zeus/functions/fnc_getModuleDestination.sqf b/addons/zeus/functions/fnc_getModuleDestination.sqf new file mode 100644 index 0000000000..d6a19d69b1 --- /dev/null +++ b/addons/zeus/functions/fnc_getModuleDestination.sqf @@ -0,0 +1,79 @@ +/* + * Author: PabstMirror + * Allows zeus to click to indicate a 3d position. + * + * Arguments: + * 0: The souce object + * 1: Code to run when position is ready + * - Code is passed [0: Successful , 1: Object , 2: Position ASL ] + * 2: Text + * 3: Icon image file + * 4: Icon color + * + * Return Value: + * None + * + * Example: + * [player, {systemChat format ["Done %1", _this]}] call ace_zeus_fnc_getModuleDestination + * + * Public: No + */ +#include "script_component.hpp" + +params ["_object", "_code", ["_text", ""], ["_icon", "\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa"], ["_color", [1,0,0,1]]]; + +if (missionNamespace getVariable [QGVAR(moduleDestination_running), false]) exitWith { + [false, _object, [0,0,0]] call _code; + ERROR("getModuleDestination already running"); +}; + +GVAR(moduleDestination_running) = true; + +// Add mouse button eh for the zeus display (triggered from 2d or 3d) +GVAR(moduleDestination_displayEH) = [(findDisplay 312), "mouseButtonDown", { + params ["", "_mouseButton"]; + if (_mouseButton != 0) exitWith {}; // Only watch for LMB + _thisArgs params ["_object", "_code"]; + private _mousePosASL = if (ctrlShown ((findDisplay 312) displayCtrl 50)) then { + private _pos2d = (((findDisplay 312) displayCtrl 50) ctrlMapScreenToWorld getMousePosition); + _pos2d set [2, getTerrainHeightASL _pos2d]; + _pos2d + } else { + AGLToASL (screenToWorld getMousePosition); + }; + TRACE_2("placed",_object,_mousePosASL); + [true, _object, _mousePosASL] call _code; + GVAR(moduleDestination_running) = false; +}, [_object, _code]] call CBA_fnc_addBISEventHandler; + +// Add draw eh for the zeus map - draws the 2d icon and line +GVAR(moduleDestination_mapDrawEH) = [((findDisplay 312) displayCtrl 50), "draw", { + params ["_mapCtrl"]; + _thisArgs params ["_object", "_text", "_icon", "_color"]; + + private _pos2d = (((findDisplay 312) displayCtrl 50) ctrlMapScreenToWorld getMousePosition); + _mapCtrl drawIcon [_icon, _color, _pos2d, 24, 24, 45, _text, 1, 0.03, "TahomaB", "right"]; + _mapCtrl drawLine [getPos _object, _pos2d, _color]; +}, [_object, _text, _icon, _color]] call CBA_fnc_addBISEventHandler; + +[{ + (_this select 0) params ["_object", "_code", "_text", "_icon", "_color"]; + if ((isNull _object) || {isNull findDisplay 312} || {!isNull findDisplay 49}) then { + TRACE_3("null-exit",isNull _object,isNull findDisplay 312,isNull findDisplay 49); + GVAR(moduleDestination_running) = false; + [false, _object, [0,0,0]] call _code; + }; + if (GVAR(moduleDestination_running)) then { + // Draw the 3d icon and line + private _mousePosAGL = screenToWorld getMousePosition; + drawIcon3D [_icon, _color, _mousePosAGL, 1.5, 1.5, 45, _text]; + drawLine3D [_mousePosAGL, ASLtoAGL (getPosASL _object), _color];; + } else { + TRACE_3("cleaning up",_this select 1, GVAR(moduleDestination_displayEH), GVAR(moduleDestination_mapDrawEH)); + (_this select 1) call CBA_fnc_removePerFrameHandler; + (findDisplay 312) displayRemoveEventHandler ["mouseButtonDown", GVAR(moduleDestination_displayEH)]; + ((findDisplay 312) displayCtrl 50) ctrlRemoveEventHandler ["draw", GVAR(moduleDestination_mapDrawEH)]; + GVAR(moduleDestination_displayEH) = nil; + GVAR(moduleDestination_mapDrawEH) = nil; + }; +}, 0, [_object, _code, _text, _icon, _color]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf new file mode 100644 index 0000000000..4d18c3f6e4 --- /dev/null +++ b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf @@ -0,0 +1,117 @@ +/* + * Author: bux, PabstMirror + * Commands the selected unit or group to start suppressive fire on the unit, group or location the module is placed on + * + * Arguments: + * 0: The module logic + * 1: Synchronized units + * 2: Activated + * + * Return Value: + * None + * + * Public: No + */ +// #define DRAW_ZEUS_INFO +#include "script_component.hpp" + +if (canSuspend) exitWith {[FUNC(moduleSuppressiveFire), _this] call CBA_fnc_directCall;}; + +params ["_logic", "_units", "_activated"]; + +if !(_activated && local _logic) exitWith {}; + +// Validate the module target +private _unit = effectiveCommander (attachedTo _logic); +TRACE_3("moduleSuppressiveFire placed",_unit,typeOf _unit,typeOf _logic); + +deleteVehicle _logic; // cleanup logic now, we just needed it to get the attached unit + +if (isNull _unit) exitWith { + [LSTRING(NothingSelected)] call FUNC(showMessage); +}; +if (!alive _unit) exitWith { + [localize LSTRING(OnlyAlive)] call FUNC(showMessage); +}; +if ([_unit] call EFUNC(common,isPlayer)) exitWith { + ["str_a3_cfgvehicles_moduleremotecontrol_f_errorPlayer"] call FUNC(showMessage); +}; + +[_unit, { + params ["_successful", "_unit", "_mousePosASL"]; + TRACE_3("getModuleDestination return",_successful,_unit,_mousePosASL); + if (!_successful) exitWith {}; + if (!alive _unit) exitWith {}; + private _vehicle = vehicle _unit; + + private _targetASL = _mousePosASL vectorAdd [0,0,0.6]; // mouse pos is at ground level zero, raise up a bit; + private _artilleryMag = ""; + + if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "artilleryScanner")) == 1) then { + // Artillery - Get mortar ammo type and verify in range + if (isNull gunner _vehicle) exitWith {_targetASL = [];}; + { + private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo"); + private _hit = getNumber (configFile >> "CfgAmmo" >> _ammo >> "hit"); + if (_hit > 20) exitWith {_artilleryMag = _x;}; + } forEach getArtilleryAmmo [_vehicle]; + TRACE_1("getArtilleryAmmo",_artilleryMag); + if (_artilleryMag == "") exitWith {_targetASL = [];}; + private _eta = _vehicle getArtilleryETA [ASLtoAGL _targetASL, _artilleryMag]; + TRACE_1("getArtilleryETA",_eta); + if (_eta < 0) exitWith { + [ELSTRING(Interaction,NotInRange)] call FUNC(showMessage); + _targetASL = []; + }; + ["TOF: %1 sec", _eta toFixed 1] call FUNC(showMessage); + } else { + // Direct fire - Get a target position that will work + private _lis = lineIntersectsSurfaces [eyePos _unit, _targetASL, _unit, _vehicle]; + if ((count _lis) > 0) then { // If point is hidden, unit won't fire, do a ray cast to find where they should shoot at + _targetASL = ((_lis select 0) select 0); + TRACE_1("using ray cast pos",_mousePosASL distance _targetASL); + }; + if (_unit isEqualTo _vehicle) then { // Max range a unit can fire seems to be based on the weapon's config + private _distance = _targetASL vectorDistance eyePos _unit; + private _maxWeaponRange = getNumber (configFile >> "CfgWeapons" >> (currentWeapon _unit) >> "maxRange"); + TRACE_3("",_distance,_maxWeaponRange,currentWeapon _unit); + if (_distance > (_maxWeaponRange - 50)) then { + if (_distance > (2.5 * _maxWeaponRange)) then { + _targetASL = []; + [ELSTRING(Interaction,NotInRange)] call FUNC(showMessage); + } else { + // 1-2.5x the weapon max range, find a virtual point the AI can shoot at (won't have accurate elevation, but it will put rounds downrange) + private _fakeElevation = (_distance / 100000) * (_distance - _maxWeaponRange); + _targetASL = (eyePos _unit) vectorAdd (((eyePos _unit) vectorFromTo _targetASL) vectorMultiply (_maxWeaponRange - 50)) vectorAdd [0,0,_fakeElevation]; + TRACE_2("using virtual halfway point",_mousePosASL distance _targetASL,_fakeElevation); + }; + }; + }; + }; + + if (_targetASL isEqualTo []) exitWith {}; + + private _units = [_unit]; + if (_unit == (leader _unit)) then {_units = units _unit;}; + if (_artilleryMag != "") then {_units = [gunner _vehicle];}; + + { + if (((_unit distance _x) < 30) && {!([_x] call EFUNC(common,isPlayer))} && {[_x] call EFUNC(common,isAwake)}) then { + TRACE_2("sending event",_x,_targetASL); + [QGVAR(suppressiveFire), [_x, _targetASL, _artilleryMag], _x] call CBA_fnc_targetEvent; + }; + } forEach _units; + +#ifdef DRAW_ZEUS_INFO + [eyePos _unit, _mousePosASL, [0,0,1,1]] call EFUNC(common,addLineToDebugDraw); + [eyePos _unit, _targetASL, [1,0,0,1]] call EFUNC(common,addLineToDebugDraw); + if (_unit != _vehicle) then { + [_vehicle] call CBA_fnc_addUnitTrackProjectiles; + } else { + { + [_x] call CBA_fnc_addUnitTrackProjectiles; + } forEach _units; + }; +#endif + +}, (localize LSTRING(ModuleSuppressiveFire_DisplayName))] call FUNC(getModuleDestination); diff --git a/addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf b/addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf new file mode 100644 index 0000000000..7ab7365c3b --- /dev/null +++ b/addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf @@ -0,0 +1,39 @@ +/* + * Author: bux, PabstMirror + * Commands the selected unit or group to start suppressive fire on the unit, group or location the module is placed on + * + * Arguments: + * 0: Unit + * 1: Fire Pos ASL + * 2: Artiller Magazine + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_targetASL", "_artilleryMag"]; +TRACE_4("moduleSuppressiveFireLocal",_unit,local _unit,_targetASL,_artilleryMag); + +if (_artilleryMag != "") exitWith { + (vehicle _unit) doArtilleryFire [ASLtoAGL _targetASL, _artilleryMag, 4]; + TRACE_3("doArtilleryFire",_unit,_targetASL,_artilleryMag); +}; + +[{ + params ["_unit", "_burstsLeft", "_nextRun", "_targetASL", "_artilleryMag"]; + if (!alive _unit) exitWith {true}; + if (CBA_missionTime >= _nextRun) then { + _burstsLeft = _burstsLeft - 1; + _this set [1, _burstsLeft]; + _this set [2, _nextRun + 4]; + _unit doSuppressiveFire _targetASL; + TRACE_2("doSuppressiveFire",_unit,_targetASL); + }; + (_burstsLeft <= 0) +}, { + TRACE_1("Done",_this); +}, [_unit, 11, CBA_missionTime, _targetASL, _artilleryMag]] call CBA_fnc_waitUntilAndExecute; + diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 33276b33af..b9bd67cf3d 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -822,5 +822,8 @@ Ungültiger Radius eingegeben 알 수 없는 반경 입력됨 + + Suppressive Fire + From c26008ad2900b9fc1fe83bc9686398c81f8bdbe4 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 10 May 2017 11:29:26 -0500 Subject: [PATCH 65/94] hitreactions - Close map on hit (#5099) --- addons/hitreactions/functions/fnc_fallDown.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/hitreactions/functions/fnc_fallDown.sqf b/addons/hitreactions/functions/fnc_fallDown.sqf index 03484438eb..915e442b37 100644 --- a/addons/hitreactions/functions/fnc_fallDown.sqf +++ b/addons/hitreactions/functions/fnc_fallDown.sqf @@ -27,6 +27,9 @@ if (_unit == _firer) exitWith {}; // camshake for player if (_unit == ACE_player) then { + if (visibleMap) then { + openMap false; + }; addCamShake [3, 5, _damage + random 10]; }; From de38a5fca7647d22e5ddefc2fc3533602d890dcf Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Wed, 10 May 2017 19:27:41 +0200 Subject: [PATCH 66/94] Wiki AtragMx minor changes (#5111) * fix markdown syntax * Update atragmx.md --- docs/wiki/feature/atragmx.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index 2060edd6d6..5e1f8f9fdf 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -104,7 +104,7 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r ### 3.5 Example with `Add New Gun` in `GunList` -- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the caliber, the bullet weight and the muzzle velocities. +- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the bullet diameter, the bullet weight and the muzzle velocities. - Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) - Select `Add New Gun` in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25) - Add a `New Gun Name` and `Open Gun`. @@ -113,16 +113,18 @@ Horus ATragMX software considers atmospheric conditions, gun data, ammunition, r - Select `M` (Metric unit) at the top right. - Open the `Muz Vel Table` in the `Options` menu or click on `MV` in the `Gun` column. - Edit manually the `Muzzle Velocity Table` according with the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) -- The `C1 coefficient` of the bullet can be found, for example, in the Eden Editor `Config Viewer`: +- The `C1 coefficient` of the bullet can be found with the Eden Editor `Config Viewer`: + > configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_ballisticCoefficients" > configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_dragModel" + - *The AtragMx accepts only **G1 ballistic coefficient**.* - *G7 ballistic coefficient can be converted, for example, with the online [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmgf-5.1.cgi)*. - Optionally, `Save Gun` and `Done` in the `GunList`. -For advanced users, the ballistic coefficient can be calculated by using the [360 Degree Training Course mission](https://forums.bistudio.com/forums/topic/171228-sp-360-degree-training-course/) as a chronograph at different distances and [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi) for example, or an another ballistic software at your own convenience. +> Note: The ballistic coefficient can be calculated by using the [360 Degree Training Course mission](https://forums.bistudio.com/forums/topic/171228-sp-360-degree-training-course/) as a chronograph at different distances and [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi) for example, an another ballistic software at your own convenience, or the [AtragMx Truing Tool](#33-example-with-truing-tool). ## 4. Official Manual and Horus Videos From 457461efbee53a1e538a01345efbd1dd4d78ce5c Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Wed, 10 May 2017 19:28:05 +0200 Subject: [PATCH 67/94] AB: Lythium latitude (#5109) * Update fnc_getMapData.sqf * bump1 * bump2 --- addons/common/functions/fnc_getMapData.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_getMapData.sqf b/addons/common/functions/fnc_getMapData.sqf index 4906966299..5fd183a3a3 100644 --- a/addons/common/functions/fnc_getMapData.sqf +++ b/addons/common/functions/fnc_getMapData.sqf @@ -47,7 +47,7 @@ if (_map in ["csj_lawlands", "uns_dong_ha"]) exitWith { [12, 0] }; // Unsung Mod if (_map in ["csj_sea"]) exitWith { [15, 0] }; // Unsung Mod if (_map in ["dakrong"]) exitWith { [16, 0] }; // Unsung Mod if (_map in ["desert_e"]) exitWith { [40, 800] }; -if (_map in ["desert_island"]) exitWith { [40, 0] }; // CWR2 Desert Island +if (_map in ["desert_island"]) exitWith { [40, 0] }; // CWR2 Desert Island if (_map in ["dya"]) exitWith { [34, 110] }; // Diyala Iraq - default elevationOffset if (_map in ["eden"]) exitWith { [45, 0] }; // CWR2 Everon if (_map in ["esseker"]) exitWith { [43, 2000] }; @@ -71,6 +71,7 @@ if (_map in ["koplic"]) exitWith { [42, 0] }; if (_map in ["kunduz"]) exitWith { [37, 0] }; if (_map in ["lingor", "lingor3", "dingor"]) exitWith { [-4, 0] }; if (_map in ["lost", "lostw"]) exitWith { [60, 0] }; +if (_map in ["lythium"]) exitWith { [34, 0] }; if (_map in ["malvinas"]) exitWith { [-52, 0] }; if (_map in ["marenice"]) exitWith { [51, 0] }; // CSA38 Mod (Czechoslovak army 1938 - Munich crisis), Lisatian Mountains. if (_map in ["mcn_aliabad"]) exitWith { [36, 0] }; From b121152a8811576a04bba3de99c23c26a6b5fa89 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Wed, 10 May 2017 19:28:26 +0200 Subject: [PATCH 68/94] AB: update compat R3F v3.5 (#5097) * Update CfgWeapons.hpp * Update CfgAmmo.hpp * Update CfgAmmo.hpp * Update CfgWeapons.hpp * Update CfgWeapons.hpp * Update CfgWeapons.hpp * Update CfgWeapons.hpp * Update CfgWeapons.hpp * fix missing `{` * fix `dispersion` * fix space --- optionals/compat_r3f/CfgAmmo.hpp | 176 +++++++++++----------- optionals/compat_r3f/CfgWeapons.hpp | 223 ++++++++++++++++++---------- 2 files changed, 235 insertions(+), 164 deletions(-) diff --git a/optionals/compat_r3f/CfgAmmo.hpp b/optionals/compat_r3f/CfgAmmo.hpp index 12db3179bf..72beba29fd 100644 --- a/optionals/compat_r3f/CfgAmmo.hpp +++ b/optionals/compat_r3f/CfgAmmo.hpp @@ -1,100 +1,100 @@ class CfgAmmo { class Default; class BulletBase; - class R3F_9x19_Ball: BulletBase { - ACE_caliber=9.017; - ACE_bulletLength=15.494; - ACE_bulletMass=8.0352; - ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; - ACE_ballisticCoefficients[]={0.165}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={340, 370, 400}; - ACE_barrelLengths[]={101.6, 127.0, 228.6}; + class R3F_9x19_Ball: BulletBase { // ACE_9x19_Ball + ACE_caliber = 9.017; + ACE_bulletLength = 15.494; + ACE_bulletMass = 8.0352; + ACE_ammoTempMuzzleVelocityShifts[] = {-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[] = {0.165}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {340, 370, 400}; + ACE_barrelLengths[] = {101.6, 127.0, 228.6}; }; - class R3F_556x45_Ball: BulletBase { - ACE_caliber=5.69; - ACE_bulletLength=23.012; - ACE_bulletMass=4.0176; - ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; - ACE_ballisticCoefficients[]={0.151}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=7; - ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; - ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; + class R3F_556x45_Ball: BulletBase { // B_556x45_Ball, AtragMx GunList: 5.56x45mm M855 + ACE_caliber = 5.69; + ACE_bulletLength = 23.012; + ACE_bulletMass = 4.0176; + ACE_ammoTempMuzzleVelocityShifts[] = {-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[] = {0.151}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 7; + ACE_muzzleVelocities[] = {723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[] = {210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; - class R3F_762x51_Ball: BulletBase { - ACE_caliber=7.823; - ACE_bulletLength=28.956; - ACE_bulletMass=9.4608; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.2}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ICAO"; - ACE_dragModel=7; - ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; - ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; + class R3F_762x51_Ball: BulletBase { // B_762x51_Ball, AtragMx GunList: 7.62x51mm M80 + ACE_caliber = 7.823; + ACE_bulletLength = 28.956; + ACE_bulletMass = 9.4608; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.2}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ICAO"; + ACE_dragModel = 7; + ACE_muzzleVelocities[] = {700, 800, 820, 833, 845}; + ACE_barrelLengths[] = {254.0, 406.4, 508.0, 609.6, 660.4}; }; - class R3F_127x99_Ball: BulletBase { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={700}; + class R3F_127x99_Ball: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {700}; }; - class R3F_127x99_PEI: R3F_127x99_Ball { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={700}; + class R3F_127x99_PEI: R3F_127x99_Ball { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {700}; }; - class R3F_127x99_Ball2: BulletBase { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + class R3F_127x99_Ball2: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {736.6}; }; - class R3F_127x99_PEI2: R3F_127x99_Ball2 { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + class R3F_127x99_PEI2: R3F_127x99_Ball2 { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {736.6}; }; - class R3F_127x99_Ball3: BulletBase { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + class R3F_127x99_Ball3: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {736.6}; }; }; diff --git a/optionals/compat_r3f/CfgWeapons.hpp b/optionals/compat_r3f/CfgWeapons.hpp index eae4eeb215..fd2619a402 100644 --- a/optionals/compat_r3f/CfgWeapons.hpp +++ b/optionals/compat_r3f/CfgWeapons.hpp @@ -2,189 +2,260 @@ class CfgWeapons { class Pistol_Base_F; class Rifle_Base_F; class R3F_Famas_F1: Rifle_Base_F { - ACE_barrelTwist=304.8; - ACE_barrelLength=488; + ACE_RailHeightAboveBore = 10.6; + ACE_barrelTwist = 304.8; // 12" + ACE_barrelLength = 488.0; }; class R3F_Famas_surb: R3F_Famas_F1 { - ACE_barrelTwist=304.8; - ACE_barrelLength=403.86; + ACE_RailHeightAboveBore = 5.4; + ACE_barrelTwist = 228.6; // 9" + ACE_barrelLength = 450.0; // Beretta barrel + }; + class R3F_Famas_G2: R3F_Famas_F1 { + ACE_RailHeightAboveBore = 10.6; + ACE_barrelTwist = 228.6; // 9" + ACE_barrelLength = 488.0; + }; + class R3F_Famas_felin: R3F_Famas_G2 { + ACE_RailHeightAboveBore = 5.4; + ACE_barrelTwist = 177.8; // 7" + ACE_barrelLength = 450.0; // Beretta barrel }; class R3F_FRF2: Rifle_Base_F { - ACE_barrelTwist=304.8; - ACE_barrelLength=650; + ACE_RailHeightAboveBore = 2.2; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 650.0; + class Single: Mode_SemiAuto { + dispersion = 0.00029; // 1 MOA + }; }; class R3F_PGM_Hecate_II: Rifle_Base_F { - ACE_barrelTwist=381.0; - ACE_barrelLength=700; + ACE_RailHeightAboveBore = 2.0; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 700.0; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; class R3F_M107: Rifle_Base_F { - ACE_barrelTwist=381.0; - ACE_barrelLength=736.6; + ACE_RailHeightAboveBore = 3.6; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 736.6; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; - class R3F_TAC50: Rifle_Base_F - { - ACE_barrelTwist=381.0; - ACE_barrelLength=736.6; + class R3F_TAC50: Rifle_Base_F { + ACE_RailHeightAboveBore = 3.2; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 736.6; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; class R3F_Minimi: Rifle_Base_F { - ACE_barrelTwist=177.8; - ACE_barrelLength=347.98; - }; - class R3F_Minimi_HG: R3F_Minimi { + ACE_RailHeightAboveBore = 4.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 347.98; }; class R3F_Minimi_762: R3F_Minimi { - ACE_barrelTwist=304.8; - ACE_barrelLength=502.92; + ACE_RailHeightAboveBore = 4.0; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 502.92; }; - class R3F_Minimi_762_HG: R3F_Minimi_762 { + class R3F_SIG551: Rifle_Base_F { + ACE_RailHeightAboveBore = 4.2; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 363.0; }; class R3F_HK417M: Rifle_Base_F { - ACE_barrelTwist=279.4; - ACE_barrelLength=406; + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 406.0; }; - class R3F_HK417S_HG: R3F_HK417M - { - ACE_barrelTwist=279.4; - ACE_barrelLength=305; + class R3F_HK417S_HG: R3F_HK417M { + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 305.0; }; class R3F_HK417L: R3F_HK417M { - ACE_barrelTwist=279.4; - ACE_barrelLength=508; + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 508.0; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; class R3F_HK416M: Rifle_Base_F { - ACE_barrelTwist=177.8; - ACE_barrelLength=368.3; + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 368.3; + }; + class R3F_HK416M_HG: R3F_HK416M {}; + class R3F_HK416S_HG: R3F_HK416M_HG { + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 279.4; }; class R3F_MP5SD: Rifle_Base_F { - ACE_barrelTwist=254.0; - ACE_barrelLength=144.78; + ACE_RailHeightAboveBore = 4.5; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 144.78; }; class R3F_MP5A5: R3F_MP5SD { - ACE_barrelTwist=254.0; - ACE_barrelLength=226.06; + ACE_RailHeightAboveBore = 4.5; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 226.06; }; class R3F_M4S90: Rifle_Base_F { - ACE_twistDirection=0; - ACE_barrelTwist=0; - ACE_barrelLength=144.78; + ACE_RailHeightAboveBore = 2.2; + ACE_twistDirection = 0; + ACE_barrelTwist = 0; + ACE_barrelLength = 144.78; }; class R3F_PAMAS: Pistol_Base_F { - ACE_barrelTwist=248.92; - ACE_barrelLength=124.46; + ACE_barrelTwist = 250.0; + ACE_barrelLength = 125.0; }; - + class R3F_HKUSP: Pistol_Base_F { + ACE_barrelTwist = 250.0; + ACE_barrelLength = 121.0; + }; class ItemCore; class InventoryOpticsItem_Base_F; + class R3F_AIMPOINT: ItemCore { + ACE_ScopeHeightAboveRail = 3.0; + }; + class R3F_EOTECH: ItemCore { + ACE_ScopeHeightAboveRail = 3.8; + }; class R3F_J4: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -8, 8 }; - ACE_ScopeAdjust_Horizontal[] = { -8, 8 }; + ACE_ScopeHeightAboveRail = 3.0; + ACE_ScopeAdjust_Vertical[] = {-8, 8}; + ACE_ScopeAdjust_Horizontal[] = {-8, 8}; ACE_ScopeAdjust_VerticalIncrement = 0.2; ACE_ScopeAdjust_HorizontalIncrement = 0.2; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J4 { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; + class R3F_FELIN: ItemCore { + ACE_ScopeHeightAboveRail = 4.2; + }; + class R3F_FELIN_FRF2: ItemCore { + ACE_ScopeHeightAboveRail = 4.0; + }; class R3F_J8: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-10, 10}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J8 { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; - class R3F_J8_MILDOT: R3F_J8 { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + class R3F_J8_MILDOT: R3F_J8 { // Scope rail 30 MOA + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-2, 18}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J8_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_J10: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-10, 10}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J10 { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; - class R3F_J10_MILDOT: R3F_J10 { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + class R3F_J10_MILDOT: R3F_J10 { // Scope rail 30 MOA + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-2, 18}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J10_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_ZEISS: ItemCore { - ACE_ScopeAdjust_Vertical[] = { 0, 23 }; - ACE_ScopeAdjust_Horizontal[] = { -7, 7 }; + ACE_ScopeHeightAboveRail = 4.6; + ACE_ScopeAdjust_Vertical[] = {0, 23}; + ACE_ScopeAdjust_Horizontal[] = {-7, 7}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class ZEISS_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_NF: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -0.9, 34 }; - ACE_ScopeAdjust_Horizontal[] = { -11, 11 }; - ACE_ScopeAdjust_VerticalIncrement = 0.2; + ACE_ScopeHeightAboveRail = 4.2; + ACE_ScopeAdjust_Vertical[] = {0, 30}; + ACE_ScopeAdjust_Horizontal[] = {-11, 11}; + ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class NF_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_NF42: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -27.3, 27.3 }; - ACE_ScopeAdjust_Horizontal[] = { -27.3, 27.3}; + ACE_ScopeHeightAboveRail = 4.2; + ACE_ScopeAdjust_Vertical[] = {0, 24}; + ACE_ScopeAdjust_Horizontal[] = {-9, 9}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class NF42_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; + class R3F_OB50: ItemCore { + ACE_ScopeHeightAboveRail = 4.0; + }; }; From 7c7d779250c03fc325eea450d99b3503cb31e4b9 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Wed, 10 May 2017 19:28:43 +0200 Subject: [PATCH 69/94] AtragMx: BC G1 .338LM API526 (#5069) * Update fnc_initGunList.sqf * Update fnc_initGunList.sqf * C1 coefficient 0.58 --- addons/atragmx/functions/fnc_initGunList.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/functions/fnc_initGunList.sqf b/addons/atragmx/functions/fnc_initGunList.sqf index c8e5f303f5..21592278bd 100644 --- a/addons/atragmx/functions/fnc_initGunList.sqf +++ b/addons/atragmx/functions/fnc_initGunList.sqf @@ -48,7 +48,7 @@ if (_resetGunList) then { [".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], [".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.760, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.580, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], From 12f42ab39ae48b4d06b4e16875b7caa19327342f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 10 May 2017 13:13:15 -0500 Subject: [PATCH 70/94] Jerry Can - only set global var on server (#5131) --- addons/refuel/functions/fnc_makeJerryCan.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/refuel/functions/fnc_makeJerryCan.sqf b/addons/refuel/functions/fnc_makeJerryCan.sqf index 11ef0df46e..f42808d40a 100644 --- a/addons/refuel/functions/fnc_makeJerryCan.sqf +++ b/addons/refuel/functions/fnc_makeJerryCan.sqf @@ -22,7 +22,9 @@ if (isNull _target || {_target isKindOf "AllVehicles"} || {_target getVariable [QGVAR(jerryCan), false]}) exitWith {}; -[_target, _fuelAmount] call FUNC(setFuel); +if (isServer) then { + [_target, _fuelAmount] call FUNC(setFuel); // has global effects +}; _target setVariable [QGVAR(jerryCan), true]; _target setVariable [QGVAR(source), _target]; From 484a68503df90db1782874523fdb72f722924260 Mon Sep 17 00:00:00 2001 From: Dystopian Date: Thu, 11 May 2017 00:36:39 +0300 Subject: [PATCH 71/94] Add Arma 3 Issues breaking ace_rearm (#5150) --- docs/wiki/development/arma-3-issues.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/wiki/development/arma-3-issues.md b/docs/wiki/development/arma-3-issues.md index d7a9ca3b08..11c117b0bf 100644 --- a/docs/wiki/development/arma-3-issues.md +++ b/docs/wiki/development/arma-3-issues.md @@ -24,6 +24,8 @@ Keeping track of Arma 3 issues that need to be fixed. - [Heisenberg: T82108: Switching between optic modes of a sniper scope (AMS, DMS, MOS) will result in a blurred vision](https://feedback.bistudio.com/T82108) - [AgentRev: T80668: setObjectTextureGlobal causing "Cannot load texture" errors when used with valid mission files](https://feedback.bistudio.com/T80668) - [BaerMitUmlaut: T120030: Particles do not render properly since 1.62](https://feedback.bistudio.com/T120030) +- [Killzone_Kid: T79689: magazineTurretAmmo and setMagazineTurretAmmo do not function as expected if there are multiple magazines of the same type](https://feedback.bistudio.com/T79689) +- [nekoarrow: T122981: setMagazineTurretAmmo locality issue](https://feedback.bistudio.com/T122981) **Resolved:** From 3a69019c3353992a8f248452d36ded94ed06ad1f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 11 May 2017 14:02:21 -0500 Subject: [PATCH 72/94] MapGesutres - Fix dependency on maptools (#5154) * MapGesutres - Use getVariable to remove dependency * Use isModLoaded --- addons/map_gestures/functions/fnc_transmitterInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf index a75ebb6e34..3c363d6f04 100644 --- a/addons/map_gestures/functions/fnc_transmitterInit.sqf +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -26,7 +26,7 @@ if (!isNil QGVAR(MouseMoveHandlerID)) then { }; GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { // Don't transmit any data if we're using the map tools - if (!GVAR(EnableTransmit) || EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)) exitWith {}; + if (!GVAR(EnableTransmit) || {(["ace_maptools"] call EFUNC(common,isModLoaded)) && {EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)}}) exitWith {}; params ["_control", "_posX", "_posY"]; From a9b306efac797f293d2920e00bfac6dfbfafc2ac Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 12 May 2017 12:55:28 -0500 Subject: [PATCH 73/94] Add missing base class to r3f compat (#5156) --- optionals/compat_r3f/CfgWeapons.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/optionals/compat_r3f/CfgWeapons.hpp b/optionals/compat_r3f/CfgWeapons.hpp index fd2619a402..bb1ed0ebd5 100644 --- a/optionals/compat_r3f/CfgWeapons.hpp +++ b/optionals/compat_r3f/CfgWeapons.hpp @@ -1,3 +1,5 @@ +class Mode_SemiAuto; + class CfgWeapons { class Pistol_Base_F; class Rifle_Base_F; From b8a6a602f37ccf6c0e05d9fb6da4b4b9d8424aa3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 12 May 2017 13:12:17 -0500 Subject: [PATCH 74/94] Disable g-forces for UAV AI (#5094) --- addons/gforces/XEH_postInit.sqf | 16 ++++++++++------ .../gforces/functions/fnc_pfhUpdateGForces.sqf | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/addons/gforces/XEH_postInit.sqf b/addons/gforces/XEH_postInit.sqf index 9eb049c9f5..f7d532c288 100644 --- a/addons/gforces/XEH_postInit.sqf +++ b/addons/gforces/XEH_postInit.sqf @@ -3,22 +3,26 @@ if (!hasInterface) exitWith {}; GVAR(pfID) = -1; +GVAR(playerIsVirtual) = false; ["ace_settingsInitialized", { TRACE_1("SettingsInitialized eh",GVAR(enabledFor)); if (GVAR(enabledFor) == 0) exitWith {}; //Module has no effect if enabledFor is "None" + + ["unit", { // Add unit changed EH to check if player is either virtual (logic) or a UAV AI + params ["_unit"]; + GVAR(playerIsVirtual) = ((getNumber (configFile >> "CfgVehicles" >> (typeOf _unit) >> "isPlayableLogic")) == 1) || + {(getText (configFile >> "CfgVehicles" >> (typeOf _unit) >> "simulation")) == "UAVPilot"}; + TRACE_3("unit changed",_unit,typeOf _unit,GVAR(playerIsVirtual)); + }, true] call CBA_fnc_addPlayerEventHandler; + if (GVAR(enabledFor) == 2) exitWith { //PFEH is always on when enabledFor is "All" [] call FUNC(addPFEH); TRACE_1("adding perm PFEH",GVAR(pfID)); }; //PFEH only runs when player is in a type "Air" vehicle when enabledFor is "Aircraft" - - if ((!isNull (vehicle ACE_player)) && {(vehicle ACE_player) isKindOf "Air"}) then { //"playerVehicleChanged" can happen before "settingInit" - [] call FUNC(addPFEH); - TRACE_1("adding temp PFEH [start in]",GVAR(pfID)); - }; ["vehicle", { params ["", "_vehicle"]; TRACE_2("playerVehicleChanged",_vehicle,typeOf _vehicle); @@ -35,5 +39,5 @@ GVAR(pfID) = -1; GVAR(pfID) = -1; }; }; - }] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index 3be0130030..f4f7c4becd 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -17,7 +17,7 @@ if ((CBA_missionTime - GVAR(lastUpdateTime)) < INTERVAL) exitWith {}; GVAR(lastUpdateTime) = CBA_missionTime; -if (isNull ACE_player || !(alive ACE_player)) exitWith {}; +if (GVAR(playerIsVirtual) || {!alive ACE_player}) exitWith {}; BEGIN_COUNTER(everyInterval); From 0cdb2ce238f4033c810b67908b747f80f8b5f337 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 12 May 2017 13:12:39 -0500 Subject: [PATCH 75/94] Increase max weapon index for large modsets (#5054) --- addons/dragging/functions/fnc_startCarry.sqf | 2 +- addons/medical/functions/fnc_treatment_failure.sqf | 4 ++-- addons/medical/functions/fnc_treatment_success.sqf | 4 ++-- addons/rearm/script_component.hpp | 2 +- addons/refuel/script_component.hpp | 2 +- addons/repair/functions/fnc_repair_failure.sqf | 2 +- addons/repair/functions/fnc_repair_success.sqf | 2 +- addons/respawn/functions/fnc_restoreGear.sqf | 2 +- addons/safemode/functions/fnc_unlockSafety.sqf | 2 +- addons/weaponselect/functions/fnc_putWeaponAway.sqf | 2 +- addons/weaponselect/functions/fnc_selectWeaponMode.sqf | 2 +- addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf | 2 +- addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf | 4 ++-- 13 files changed, 16 insertions(+), 16 deletions(-) diff --git a/addons/dragging/functions/fnc_startCarry.sqf b/addons/dragging/functions/fnc_startCarry.sqf index 1890dbac1a..7a5341b8a8 100644 --- a/addons/dragging/functions/fnc_startCarry.sqf +++ b/addons/dragging/functions/fnc_startCarry.sqf @@ -51,7 +51,7 @@ if (_target isKindOf "CAManBase") then { } else { // select no weapon and stop sprinting - _unit action ["SwitchWeapon", _unit, _unit, 99]; + _unit action ["SwitchWeapon", _unit, _unit, 299]; [_unit, "AmovPercMstpSnonWnonDnon", 0] call EFUNC(common,doAnimation); [_unit, "forceWalk", "ACE_dragging", true] call EFUNC(common,statusEffect_set); diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index d81c576feb..bef7d04a02 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -41,14 +41,14 @@ _caller setVariable [QGVAR(treatmentPrevAnimCaller), nil]; private _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnTreatment), []]); if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then { - for "_index" from 0 to 99 do { + for "_index" from 0 to 299 do { _caller action ["SwitchWeapon", _caller, _caller, _index]; //Just check weapon, muzzle and mode (ignore ammo in case they were reloading) if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));}; if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");}; }; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; { diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index eb52d20e3c..1e0d6c7a4a 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -41,14 +41,14 @@ _caller setVariable [QGVAR(treatmentPrevAnimCaller), nil]; private _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnTreatment), []]); if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then { - for "_index" from 0 to 99 do { + for "_index" from 0 to 299 do { _caller action ["SwitchWeapon", _caller, _caller, _index]; //Just check weapon, muzzle and mode (ignore ammo in case they were reloading) if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));}; if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");}; }; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; // Record specific callback diff --git a/addons/rearm/script_component.hpp b/addons/rearm/script_component.hpp index f04abacc49..7659faef64 100644 --- a/addons/rearm/script_component.hpp +++ b/addons/rearm/script_component.hpp @@ -28,7 +28,7 @@ #define REARM_HOLSTER_WEAPON \ _unit setVariable [QGVAR(selectedWeaponOnRearm), currentWeapon _unit]; \ - _unit action ["SwitchWeapon", _unit, _unit, 99]; + _unit action ["SwitchWeapon", _unit, _unit, 299]; #define REARM_UNHOLSTER_WEAPON \ _weaponSelect = _unit getVariable QGVAR(selectedWeaponOnRearm); \ diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index 37b9502510..96006a2822 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -23,7 +23,7 @@ #define REFUEL_HOLSTER_WEAPON \ _unit setVariable [QGVAR(selectedWeaponOnRefuel), currentWeapon _unit]; \ _unit call EFUNC(common,fixLoweredRifleAnimation); \ - _unit action ["SwitchWeapon", _unit, _unit, 99]; + _unit action ["SwitchWeapon", _unit, _unit, 299]; #define REFUEL_UNHOLSTER_WEAPON \ _weaponSelect = _unit getVariable QGVAR(selectedWeaponOnRefuel); \ diff --git a/addons/repair/functions/fnc_repair_failure.sqf b/addons/repair/functions/fnc_repair_failure.sqf index 8616dd4808..db58c94448 100644 --- a/addons/repair/functions/fnc_repair_failure.sqf +++ b/addons/repair/functions/fnc_repair_failure.sqf @@ -40,7 +40,7 @@ _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnrepair), ""]); if (_weaponSelect != "") then { _caller selectWeapon _weaponSelect; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; { diff --git a/addons/repair/functions/fnc_repair_success.sqf b/addons/repair/functions/fnc_repair_success.sqf index c18116f862..5196075735 100644 --- a/addons/repair/functions/fnc_repair_success.sqf +++ b/addons/repair/functions/fnc_repair_success.sqf @@ -40,7 +40,7 @@ _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnrepair), ""]); if (_weaponSelect != "") then { _caller selectWeapon _weaponSelect; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; //Unclaim repair objects: diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index a035bdd52d..1d234f16be 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -44,7 +44,7 @@ if (!isNil "_activeWeaponAndMuzzle") then { private _index = 0; while { - _index < 100 && {currentWeaponMode _unit != _activeWeaponMode} + _index < 299 && {currentWeaponMode _unit != _activeWeaponMode} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/safemode/functions/fnc_unlockSafety.sqf b/addons/safemode/functions/fnc_unlockSafety.sqf index b1c2fda540..da93bfa671 100644 --- a/addons/safemode/functions/fnc_unlockSafety.sqf +++ b/addons/safemode/functions/fnc_unlockSafety.sqf @@ -56,7 +56,7 @@ if (inputAction "nextWeapon" > 0) then { // switch to last mode _index = 0; while { - _index < 100 && {currentMuzzle _unit != _weapon || {currentWeaponMode _unit != _mode}} + _index < 299 && {currentMuzzle _unit != _weapon || {currentWeaponMode _unit != _mode}} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/weaponselect/functions/fnc_putWeaponAway.sqf b/addons/weaponselect/functions/fnc_putWeaponAway.sqf index d2747bf23f..0d7e93a429 100644 --- a/addons/weaponselect/functions/fnc_putWeaponAway.sqf +++ b/addons/weaponselect/functions/fnc_putWeaponAway.sqf @@ -19,4 +19,4 @@ params ["_unit"]; _unit call EFUNC(common,fixLoweredRifleAnimation); -_unit action ["SwitchWeapon", _unit, _unit, 99]; +_unit action ["SwitchWeapon", _unit, _unit, 299]; diff --git a/addons/weaponselect/functions/fnc_selectWeaponMode.sqf b/addons/weaponselect/functions/fnc_selectWeaponMode.sqf index 80784778de..c0a5f00a8a 100644 --- a/addons/weaponselect/functions/fnc_selectWeaponMode.sqf +++ b/addons/weaponselect/functions/fnc_selectWeaponMode.sqf @@ -42,7 +42,7 @@ private _mode = _modes select _index; _index = 0; while { - _index < 100 && {currentMuzzle _unit != _muzzle || {currentWeaponMode _unit != _mode}} + _index < 299 && {currentMuzzle _unit != _muzzle || {currentWeaponMode _unit != _mode}} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf b/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf index 973d34f7c8..3d7f05e954 100644 --- a/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf +++ b/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf @@ -42,7 +42,7 @@ private _muzzle = _muzzles select _index; _index = 0; while { - _index < 100 && {currentMuzzle _unit != _muzzle} + _index < 299 && {currentMuzzle _unit != _muzzle} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf b/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf index 7435dd30d8..883588ee4b 100644 --- a/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf +++ b/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf @@ -31,7 +31,7 @@ if (_turret isEqualTo [] && {_unit == driver _vehicle}) then { _index = 0; while { - _index < 100 && {currentWeapon _vehicle != _weapon} + _index < 299 && {currentWeapon _vehicle != _weapon} } do { _unit action ["SwitchWeapon", _vehicle, _unit, _index]; _index = _index + 1; @@ -46,7 +46,7 @@ if (_turret isEqualTo [] && {_unit == driver _vehicle}) then { _index = 0; while { - _index < 100 && {_vehicle currentWeaponTurret _turret != _weapon} + _index < 299 && {_vehicle currentWeaponTurret _turret != _weapon} } do { _unit action ["SwitchWeapon", _vehicle, _unit, _index]; _index = _index + 1; From f69148bdc010305faf3ce804b1d1f0b06f1cb635 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 13 May 2017 17:36:53 -0500 Subject: [PATCH 76/94] Disable rearm,refuel on dead vehicles (#5158) --- addons/rearm/functions/fnc_canRearm.sqf | 2 ++ addons/rearm/functions/fnc_canStoreAmmo.sqf | 1 + addons/rearm/functions/fnc_canTakeAmmo.sqf | 1 + addons/refuel/CfgVehicles.hpp | 2 +- addons/refuel/functions/fnc_canConnectNozzle.sqf | 1 + optionals/compat_rhs_afrf3/CfgVehicles.hpp | 2 +- optionals/compat_rhs_usf3/CfgVehicles.hpp | 2 +- 7 files changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/rearm/functions/fnc_canRearm.sqf b/addons/rearm/functions/fnc_canRearm.sqf index a0a268cdfa..357eaac8eb 100644 --- a/addons/rearm/functions/fnc_canRearm.sqf +++ b/addons/rearm/functions/fnc_canRearm.sqf @@ -19,6 +19,8 @@ private ["_dummy","_magazineClass"]; params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; +if (!alive _target) exitWith {false}; + if (GVAR(level) == 0 || {isNull _unit} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REARM_ACTION_DISTANCE} || {_target getVariable [QGVAR(disabled), false]}) exitWith {false}; _dummy = _unit getVariable [QGVAR(dummy), objNull]; diff --git a/addons/rearm/functions/fnc_canStoreAmmo.sqf b/addons/rearm/functions/fnc_canStoreAmmo.sqf index a3139d6f11..29c15559a0 100644 --- a/addons/rearm/functions/fnc_canStoreAmmo.sqf +++ b/addons/rearm/functions/fnc_canStoreAmmo.sqf @@ -19,6 +19,7 @@ params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; !(isNull _unit || + {!alive _target} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {(_target distance _unit) > REARM_ACTION_DISTANCE} || diff --git a/addons/rearm/functions/fnc_canTakeAmmo.sqf b/addons/rearm/functions/fnc_canTakeAmmo.sqf index 496e7a12a4..242ff81222 100644 --- a/addons/rearm/functions/fnc_canTakeAmmo.sqf +++ b/addons/rearm/functions/fnc_canTakeAmmo.sqf @@ -19,6 +19,7 @@ params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; !(isNull _unit || + {!alive _target} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {(_target distance _unit) > REARM_ACTION_DISTANCE} || diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index 4859cd883f..104da38f71 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -5,7 +5,7 @@ class GVAR(Refuel) { \ displayName = CSTRING(Refuel); \ distance = REFUEL_ACTION_DISTANCE; \ - condition = "true"; \ + condition = "alive _target"; \ statement = ""; \ showDisabled = 0; \ priority = 2; \ diff --git a/addons/refuel/functions/fnc_canConnectNozzle.sqf b/addons/refuel/functions/fnc_canConnectNozzle.sqf index 3cd5ac4c58..03cd79d3c6 100644 --- a/addons/refuel/functions/fnc_canConnectNozzle.sqf +++ b/addons/refuel/functions/fnc_canConnectNozzle.sqf @@ -26,6 +26,7 @@ if (_target isKindOf "AllVehicles") then { }; !(isNull _nozzle || + {!alive _target} || {_engine} || {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} || {!isNull (_target getVariable [QGVAR(nozzle), objNull])}) diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 3ae5a06f3f..9eca6c1c3a 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -28,7 +28,7 @@ class EGVAR(refuel,Refuel) { \ displayName = ECSTRING(refuel,Refuel); \ distance = 7; \ - condition = "true"; \ + condition = "alive _target"; \ statement = ""; \ showDisabled = 0; \ priority = 2; \ diff --git a/optionals/compat_rhs_usf3/CfgVehicles.hpp b/optionals/compat_rhs_usf3/CfgVehicles.hpp index 5350e10867..d37fe7f09b 100644 --- a/optionals/compat_rhs_usf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_usf3/CfgVehicles.hpp @@ -41,7 +41,7 @@ class EGVAR(refuel,Refuel) { \ displayName = ECSTRING(refuel,Refuel); \ distance = 7; \ - condition = "true"; \ + condition = "alive _target"; \ statement = ""; \ showDisabled = 0; \ priority = 2; \ From bfd36958687295cfa7b379d3223c8764912f2009 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 14 May 2017 14:48:05 -0500 Subject: [PATCH 77/94] SQF Lint Cleanup Pass (#5157) * SQF Lint Cleanup Pass * Fix var in TRACE * Add basic python tool * Simplify * Hit space key 6 times * Fix error in dropNozzle * handle error message exceptions * Fix py --- .../functions/fnc_readAmmoDataFromConfig.sqf | 2 +- .../fnc_readWeaponDataFromConfig.sqf | 2 +- .../functions/fnc_handlePlayerChanged.sqf | 1 - addons/advanced_throwing/XEH_postInit.sqf | 3 +- addons/attach/functions/fnc_attach.sqf | 1 - addons/attach/functions/fnc_canDetach.sqf | 2 +- .../functions/fnc_doEscortCaptive.sqf | 2 +- .../fnc_handleAnimChangedHandcuffed.sqf | 2 +- addons/captives/functions/fnc_handleGetIn.sqf | 2 +- .../captives/functions/fnc_handleRespawn.sqf | 4 +- addons/common/XEH_postInit.sqf | 4 +- addons/common/functions/fnc_checkFiles.sqf | 2 +- .../functions/fnc_deviceKeyFindValidIndex.sqf | 2 +- .../common/functions/fnc_getDoorTurrets.sqf | 2 +- addons/common/functions/fnc_getMGRSdata.sqf | 4 +- .../common/functions/fnc_getMapGridData.sqf | 4 +- .../functions/fnc_throttledPublicVariable.sqf | 2 +- addons/common/scripts/checkVersionNumber.sqf | 2 +- addons/hearing/functions/fnc_firedNear.sqf | 2 +- .../functions/fnc_magazineRepackProgress.sqf | 2 +- .../functions/fnc_compileFlashlightMenu.sqf | 2 +- addons/minedetector/XEH_postInit.sqf | 2 +- .../functions/fnc_getDistance.sqf | 2 +- addons/refuel/functions/fnc_dropNozzle.sqf | 2 +- .../repair/functions/fnc_addRepairActions.sqf | 2 +- addons/tagging/functions/fnc_tag.sqf | 2 +- tools/sqf_linter.py | 66 +++++++++++++++++++ 27 files changed, 94 insertions(+), 31 deletions(-) create mode 100644 tools/sqf_linter.py diff --git a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf index 160b6ddd06..bac37a22a0 100644 --- a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf @@ -26,7 +26,7 @@ TRACE_1("Reading Ammo Config",_this); private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"]; -_ammoConfig = configFile >> "CfgAmmo" >> _this; +private _ammoConfig = configFile >> "CfgAmmo" >> _this; _airFriction = getNumber(_ammoConfig >> "airFriction"); _caliber = getNumber(_ammoConfig >> "ACE_caliber"); diff --git a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf index 7c97e10bda..882542f068 100644 --- a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf @@ -30,6 +30,6 @@ private _barrelLength = getNumber(_weaponConfig >> "ACE_barrelLength"); private _result = [_barrelTwist, _twistDirection, _barrelLength]; -uiNamespace setVariable [format[QGVAR(%1), _weapon], _result]; +uiNamespace setVariable [format[QGVAR(%1), _this], _result]; _result diff --git a/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf b/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf index 9d33df10be..bdcbb9b296 100644 --- a/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf +++ b/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf @@ -54,7 +54,6 @@ GVAR(peakPower) = VO2MAX_STRENGTH * GVAR(VO2MaxPower); GVAR(ae1PathwayPower) = GVAR(peakPower) / (13.3 + 16.7 + 113.3) * 13.3 * ANTPERCENT ^ 1.28 * 1.362; GVAR(ae2PathwayPower) = GVAR(peakPower) / (13.3 + 16.7 + 113.3) * 16.7 * ANTPERCENT ^ 1.28 * 1.362; -GVAR(anPathwayPower) = GVAR(peakPower) - _ae1PathwayPower - _ae2PathwayPower; GVAR(ppeBlackoutLast) = 100; GVAR(lastBreath) = 0; diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index f0c0e5231b..3754be0e2d 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -115,8 +115,7 @@ addMissionEventHandler ["Draw3D", { // Blue is predicted before throw, red is re drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [0,0,1,1], _newTrajAGL, 1, 1, 0, "", 2]; } forEach GVAR(predictedPath); { - _newTrajAGL = _x; - drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,0,0,1], _newTrajAGL, 1, 1, 0, "", 2]; + drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,0,0,1], _x, 1, 1, 0, "", 2]; } forEach GVAR(flightPath) }]; #endif diff --git a/addons/attach/functions/fnc_attach.sqf b/addons/attach/functions/fnc_attach.sqf index 366a43d900..e48a850209 100644 --- a/addons/attach/functions/fnc_attach.sqf +++ b/addons/attach/functions/fnc_attach.sqf @@ -57,7 +57,6 @@ if (_unit == _attachToVehicle) then { //Self Attachment _actionID = _unit addAction [format ["%1", localize LSTRING(CancelAction)], {GVAR(placeAction) = PLACE_CANCEL}]; //Display to show virtual object: - private []; _model = getText (configFile >> "CfgAmmo" >> _itemVehClass >> "model"); if (_model == "") then { _model = getText (configFile >> "CfgVehicles" >> _itemVehClass >> "model"); diff --git a/addons/attach/functions/fnc_canDetach.sqf b/addons/attach/functions/fnc_canDetach.sqf index d9796a5a5c..a9b6f2deff 100644 --- a/addons/attach/functions/fnc_canDetach.sqf +++ b/addons/attach/functions/fnc_canDetach.sqf @@ -21,7 +21,7 @@ TRACE_2("params",_attachToVehicle,_unit); if ((vehicle _unit) != _unit) exitWith {false}; -_attachedList = _attachToVehicle getVariable [QGVAR(attached), []]; +private _attachedList = _attachToVehicle getVariable [QGVAR(attached), []]; if ((count _attachedList) == 0) exitWith {false}; private ["_inRange"]; diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index e0d3ae8fa6..ad57dabcd7 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -30,7 +30,7 @@ if (_state) then { _unit setVariable [QGVAR(escortedUnit), _target, true]; //Add Actionmenu to release captive - _actionID = _unit addAction [format ["%1", localize LSTRING(StopEscorting)], + private _actionID = _unit addAction [format ["%1", localize LSTRING(StopEscorting)], {[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);}, nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))]; diff --git a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf index 2f55d51fc3..c876a4f364 100644 --- a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf +++ b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf @@ -23,7 +23,7 @@ if (_unit == (vehicle _unit)) then { [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); }; } else { - _turretPath = []; + private _turretPath = []; { _x params ["_xUnit", "", "", "_xTurretPath"]; if (_unit == _xUnit) exitWith {_turretPath = _xTurretPath}; diff --git a/addons/captives/functions/fnc_handleGetIn.sqf b/addons/captives/functions/fnc_handleGetIn.sqf index d89049a031..60f1ecf9b9 100644 --- a/addons/captives/functions/fnc_handleGetIn.sqf +++ b/addons/captives/functions/fnc_handleGetIn.sqf @@ -31,7 +31,7 @@ if (local _unit) then { if (_unit getVariable [QGVAR(isHandcuffed), false]) then { //Need to force animation for FFV turrets - _turretPath = []; + private _turretPath = []; { _x params ["_xUnit", "", "", "_xTurretPath"]; if (_unit == _xUnit) exitWith {_turretPath = _xTurretPath}; diff --git a/addons/captives/functions/fnc_handleRespawn.sqf b/addons/captives/functions/fnc_handleRespawn.sqf index b95438fa22..0181640a28 100644 --- a/addons/captives/functions/fnc_handleRespawn.sqf +++ b/addons/captives/functions/fnc_handleRespawn.sqf @@ -46,7 +46,7 @@ if (_respawn > 3) then { }; [_unit, "setCaptive", QGVAR(Surrendered), false] call EFUNC(common,statusEffect_set); - if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { - _oldUnit setVariable [QGVAR(isEscorting), false, true]; + if (_unit getVariable [QGVAR(isEscorting), false]) then { + _unit setVariable [QGVAR(isEscorting), false, true]; }; }; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index adea925980..ebfbd31ef4 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -458,8 +458,8 @@ GVAR(deviceKeyCurrentIndex) = -1; ["ACE3 Equipment", QGVAR(cycleDevice), (localize "STR_ACE_Common_cycleHandheldDevices"), { [1] call FUNC(deviceKeyFindValidIndex); if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false}; - _displayName = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 0); - _iconImage = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 1); + private _displayName = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 0); + private _iconImage = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 1); [_displayName, _iconImage] call FUNC(displayTextPicture); true }, diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf index a3ad83459b..98736a6dba 100644 --- a/addons/common/functions/fnc_checkFiles.sqf +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -111,7 +111,7 @@ if (isMultiplayer) then { _addons = _addons - GVAR(ServerAddons); if !(_addons isEqualTo []) then { - _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons]; + private _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons]; ERROR(_errorMsg); diff --git a/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf b/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf index 02135e59db..7b692ce300 100644 --- a/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf +++ b/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf @@ -28,7 +28,7 @@ if (_searchOffsetOrName isEqualType "") then { } forEach GVAR(deviceKeyHandlingArray); } else { if (count GVAR(deviceKeyHandlingArray) > 0) then { - _baseIndex = [GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName, 0] select (GVAR(deviceKeyCurrentIndex) == -1); + private _baseIndex = [GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName, 0] select (GVAR(deviceKeyCurrentIndex) == -1); for "_offset" from _baseIndex to (count GVAR(deviceKeyHandlingArray) - 1 + _baseIndex) do { private _realIndex = _offset % (count GVAR(deviceKeyHandlingArray)); diff --git a/addons/common/functions/fnc_getDoorTurrets.sqf b/addons/common/functions/fnc_getDoorTurrets.sqf index 533e2a7489..9ef2ad4704 100644 --- a/addons/common/functions/fnc_getDoorTurrets.sqf +++ b/addons/common/functions/fnc_getDoorTurrets.sqf @@ -23,7 +23,7 @@ private _doorTurrets = []; _config = [_config, _x] call FUNC(getTurretConfigPath); - if (getNumber (_config >> "isCopilot" == 0) && {count getArray (_config >> "weapons") > 0}) then { + if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then { _doorTurrets pushBack _x; }; false diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index 6b29b6625a..7854380b18 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -25,9 +25,9 @@ private _altitude = getNumber (configFile >> "CfgWorlds" >> _map >> "elevationO private _mapData = _map call FUNC(getMapData); if (!(_mapData isEqualTo [])) then { _lat = _mapData select 0; - _alt = _mapData select 1; + _altitude = _mapData select 1; }; -TRACE_2("Latitude and Altitude",_lat,_alt); +TRACE_2("Latitude and Altitude",_lat,_altitude); private _UTM = [_long, _lat] call BIS_fnc_posDegToUTM; private _easting = _UTM select 0; diff --git a/addons/common/functions/fnc_getMapGridData.sqf b/addons/common/functions/fnc_getMapGridData.sqf index bda9288635..60edb8941d 100644 --- a/addons/common/functions/fnc_getMapGridData.sqf +++ b/addons/common/functions/fnc_getMapGridData.sqf @@ -64,8 +64,8 @@ while {_startGrid == _originGrid} do { private _realOffsetY = (parseNumber (_originGrid select [count _formatX, count _formatY])) * _stepY + _heightOffset - 1; //Calculate MGRS 10digit step - they should both be 1 meter: -_stepXat5 = _stepX * 10 ^ ((count _formatX) - 5); -_stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5); +private _stepXat5 = _stepX * 10 ^ ((count _formatX) - 5); +private _stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5); if (_stepYat5 < 0) then { WARNING_1("Map Grid Warning (%1) - Northing is reversed.",worldName); diff --git a/addons/common/functions/fnc_throttledPublicVariable.sqf b/addons/common/functions/fnc_throttledPublicVariable.sqf index 3aaa3c8f47..7d86a75a29 100644 --- a/addons/common/functions/fnc_throttledPublicVariable.sqf +++ b/addons/common/functions/fnc_throttledPublicVariable.sqf @@ -27,7 +27,7 @@ if (isNil QGVAR(publishSchedId)) then { GVAR(publishSchedId) = [{ if (diag_tickTime > GVAR(publishNextTime)) then { { - _x params [_unit, _varName]; + _x params ["_unit", "_varName"]; _unit setVariable [_varName, _unit getVariable _varName, true]; false } count GVAR(publishVarNames); diff --git a/addons/common/scripts/checkVersionNumber.sqf b/addons/common/scripts/checkVersionNumber.sqf index 6267ed08b2..f407ed57b0 100644 --- a/addons/common/scripts/checkVersionNumber.sqf +++ b/addons/common/scripts/checkVersionNumber.sqf @@ -74,7 +74,7 @@ if (!isServer) then { } forEach _files; // display and log error messages - _fnc_cutComma = { + private _fnc_cutComma = { _string = _this; _string = toArray _string; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index a1a97deca0..9a5e65b774 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -53,7 +53,7 @@ if (isNil "_loudness") then { }; } count _muzzles; { - _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); + private _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); _weaponMagazines set [_forEachIndex, [_x, _ammoType]]; } forEach _weaponMagazines; diff --git a/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf b/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf index 3808df4cdc..ddc7ca4fa8 100644 --- a/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf +++ b/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf @@ -18,7 +18,7 @@ */ #include "script_component.hpp" -params ["_ars", "_elapsedTime", "_totalTime"]; +params ["_args", "_elapsedTime", "_totalTime"]; _args params ["_magazineClassname", "_lastAmmoCount", "_simEvents"]; if !((_simEvents select 0) params ["_nextEventTime", "_nextEventIsBullet", "_nextEventMags"]) exitWith { ERROR("No Event"); false }; diff --git a/addons/map/functions/fnc_compileFlashlightMenu.sqf b/addons/map/functions/fnc_compileFlashlightMenu.sqf index fb33b59682..f271cd723f 100644 --- a/addons/map/functions/fnc_compileFlashlightMenu.sqf +++ b/addons/map/functions/fnc_compileFlashlightMenu.sqf @@ -39,7 +39,7 @@ _unitLight params ["_flashlight", ""]; {[_player, _this select 2] call FUNC(switchFlashlight)} }; - _action = [_x, _displayName, _icon, _statement, {true}, {}, _x] call EFUNC(interact_menu,createAction); + private _action = [_x, _displayName, _icon, _statement, {true}, {}, _x] call EFUNC(interact_menu,createAction); _actions pushBack [_action, [], _player]; } forEach _flashlightItems; diff --git a/addons/minedetector/XEH_postInit.sqf b/addons/minedetector/XEH_postInit.sqf index 4b842e3488..7ea04b5a5d 100644 --- a/addons/minedetector/XEH_postInit.sqf +++ b/addons/minedetector/XEH_postInit.sqf @@ -27,7 +27,7 @@ addMissionEventHandler ["Draw3D", { GVAR(debugDetector) params ["_detectorPointAGL", "_mines"]; drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [0,0,1,1], _detectorPointAGL, 1, 1, 0, "detector", 1, 0.02, "PuristaMedium"]; { - _name = format ["%1@%2", typeOf _x, (floor ((_x distance _detectorPointAGL) * 10)) / 10]; + private _name = format ["%1@%2", typeOf _x, (floor ((_x distance _detectorPointAGL) * 10)) / 10]; if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> QGVAR(detectable))) == 1) then { drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [1,0,0,1], (ASLtoAGL (getPosASL _x)), 1, 1, 0, _name, 1, 0.02, "PuristaMedium"]; } else { diff --git a/addons/overpressure/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf index febb4ea747..29105c2e7c 100644 --- a/addons/overpressure/functions/fnc_getDistance.sqf +++ b/addons/overpressure/functions/fnc_getDistance.sqf @@ -38,7 +38,7 @@ private _distance = 999; if (isNull _intersectObject) then { //Terrain: // Calculate the angle between the terrain and the back blast direction - _angle = 90 - acos (- (_surfaceNormal vectorDotProduct _direction)); + private _angle = 90 - acos (- (_surfaceNormal vectorDotProduct _direction)); TRACE_3("Terrain Intersect",_surfaceNormal,_direction,_angle); // Angles is below 25deg, no backblast at all if (_angle < 25) exitWith {_distance = 999}; diff --git a/addons/refuel/functions/fnc_dropNozzle.sqf b/addons/refuel/functions/fnc_dropNozzle.sqf index 80bf8896ab..21b700a757 100644 --- a/addons/refuel/functions/fnc_dropNozzle.sqf +++ b/addons/refuel/functions/fnc_dropNozzle.sqf @@ -33,7 +33,7 @@ private _posB = (getPosASL _nozzle) vectorAdd [0,0,-1000]; private _intersections = lineIntersectsSurfaces [_posA, _posB, _unit, _nozzle, true, 1, "GEOM"]; TRACE_1("",_intersections); if (_intersections isEqualTo []) then { - _groundPosition set [2, (getTerrainHeightASL _groundPosition) vectorAdd [0,0,0.005]]; + _groundPosition set [2, (getTerrainHeightASL _groundPosition) + 0.005]; } else { _groundPosition = ((_intersections select 0) select 0) vectorAdd [0,0,0.005]; }; diff --git a/addons/repair/functions/fnc_addRepairActions.sqf b/addons/repair/functions/fnc_addRepairActions.sqf index 1dfc518d39..d2bb3adfee 100644 --- a/addons/repair/functions/fnc_addRepairActions.sqf +++ b/addons/repair/functions/fnc_addRepairActions.sqf @@ -56,7 +56,7 @@ _processedHitpoints = []; // An action to remove the wheel is required _name = format ["Remove_%1_%2", _forEachIndex, _hitpoint]; - _text = localize LSTRING(RemoveWheel); + private _text = localize LSTRING(RemoveWheel); _condition = {[_this select 1, _this select 0, _this select 2 select 0, "RemoveWheel"] call DFUNC(canRepair)}; _statement = {[_this select 1, _this select 0, _this select 2 select 0, "RemoveWheel"] call DFUNC(repair)}; _action = [_name, _text, _icon, _statement, _condition, {}, [_hitpoint], _position, 2] call EFUNC(interact_menu,createAction); diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index f90e09cd0a..4893037117 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -77,7 +77,7 @@ private _v3 = _v2 vectorCrossProduct _v1; TRACE_3("Reference:", _v1, _v2, _v3); -_fnc_isOk = { +private _fnc_isOk = { params ["_rx", "_ry"]; private _startPosASL2 = _touchingPoint vectorAdd (_v2 vectorMultiply _rx) vectorAdd (_v3 vectorMultiply _ry) vectorAdd (_v1 vectorMultiply (-0.06)); private _endPosASL2 = _startPosASL2 vectorAdd (_v1 vectorMultiply (0.12)); diff --git a/tools/sqf_linter.py b/tools/sqf_linter.py new file mode 100644 index 0000000000..46461eb357 --- /dev/null +++ b/tools/sqf_linter.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +# Requires: https://github.com/LordGolias/sqf + +import fnmatch +import os +import sys +import argparse +from sqf.parser import parse +import sqf.analyzer +from sqf.exceptions import SQFParserError + + +def analyze(filename, writer=sys.stdout): + warnings = 0 + errors = 0 + with open(filename, 'r') as file: + code = file.read() + try: + result = parse(code) + except SQFParserError as e: + print("{}:".format(filename)) + writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message)) + return 0, 1 + + exceptions = sqf.analyzer.analyze(result).exceptions + if (exceptions): + print("{}:".format(filename)) + for e in exceptions: + if (e.message.startswith("error")): + errors += 1 + else: + warnings += 1 + writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message)) + + return warnings, errors + +def main(): + print("#########################") + print("# Lint Check #") + print("#########################") + + sqf_list = [] + all_warnings = 0 + all_errors = 0 + + parser = argparse.ArgumentParser() + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") + args = parser.parse_args() + + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): + for filename in fnmatch.filter(filenames, '*.sqf'): + sqf_list.append(os.path.join(root, filename)) + + for filename in sqf_list: + warnings, errors = analyze(filename) + all_warnings += warnings + all_errors += errors + + print ("Parse Errors {0} - Warnings {1}".format(all_errors,all_warnings)) + + # return (all_errors + all_warnings) + return all_errors + +if __name__ == "__main__": + main() From 9e1a9b9af90dfe7527a8b13942c3ead4e8722217 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 14 May 2017 15:14:22 -0500 Subject: [PATCH 78/94] Fix bad var names --- addons/medical/functions/fnc_updatePainSuppress.sqf | 2 +- addons/medical_treatment/functions/fnc_litterHandleCreate.sqf | 2 +- .../medical_treatment/functions/fnc_treatmentFullHealLocal.sqf | 2 +- .../functions/fnc_treatmentMedicationLocal.sqf | 2 +- .../functions/fnc_treatmentPartialHealLocal.sqf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/medical/functions/fnc_updatePainSuppress.sqf b/addons/medical/functions/fnc_updatePainSuppress.sqf index 47f5ec6f5d..8e2b15214f 100644 --- a/addons/medical/functions/fnc_updatePainSuppress.sqf +++ b/addons/medical/functions/fnc_updatePainSuppress.sqf @@ -45,7 +45,7 @@ if (!(_adjustment isEqualTo [])) then { // Handle continuous pain reduction private _pain = _unit getVariable [QGVAR(pain), 0]; -_unit setVariable [QGVAR(pain), 0 max (_pain - _deltaT / PAIN_FADE_TIME), _syncValues]; +_unit setVariable [QGVAR(pain), 0 max (_pain - _deltaT / PAIN_FADE_TIME), _syncValue]; // Handles simple medication if (!GVAR(advancedMedication)) then { diff --git a/addons/medical_treatment/functions/fnc_litterHandleCreate.sqf b/addons/medical_treatment/functions/fnc_litterHandleCreate.sqf index 2bec813e7b..0b37207daf 100644 --- a/addons/medical_treatment/functions/fnc_litterHandleCreate.sqf +++ b/addons/medical_treatment/functions/fnc_litterHandleCreate.sqf @@ -17,7 +17,7 @@ params ["_litterClass", "_position", "_direction"]; TRACE_3("params",_litterClass,_position,_direction); -//IGNORE_PRIVATE_WARNING(_values); +//IGNORE_PRIVATE_WARNING ["_values"]; if (isNil QGVAR(allCreatedLitter)) then { GVAR(allCreatedLitter) = []; diff --git a/addons/medical_treatment/functions/fnc_treatmentFullHealLocal.sqf b/addons/medical_treatment/functions/fnc_treatmentFullHealLocal.sqf index 89569a7e38..48f9f6fc60 100644 --- a/addons/medical_treatment/functions/fnc_treatmentFullHealLocal.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentFullHealLocal.sqf @@ -62,7 +62,7 @@ private _allUsedMedication = _target getVariable [QEGVAR(medical,allUsedMedicati _target setVariable [_x select 0, nil]; } forEach _allUsedMedication; -[_unit, false] call EFUNC(medical_engine,setLimping); +[_target, false] call EFUNC(medical_engine,setLimping); // Resetting damage _target setDamage 0; diff --git a/addons/medical_treatment/functions/fnc_treatmentMedicationLocal.sqf b/addons/medical_treatment/functions/fnc_treatmentMedicationLocal.sqf index f161529cfb..9d240be2d0 100644 --- a/addons/medical_treatment/functions/fnc_treatmentMedicationLocal.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentMedicationLocal.sqf @@ -76,7 +76,7 @@ if (alive _target) then { private _heartRate = _target getVariable [QEGVAR(medical,heartRate), 80]; private _hrIncrease = [_hrIncreaseLow, _hrIncreaseNorm, _hrIncreaseHigh] select (floor ((0 max _heartRate min 110) / 55)); _hrIncrease params ["_minIncrease", "_maxIncrease"]; - _heartRateChange = _minIncrease + random (_maxIncrease - _minIncrease); + private _heartRateChange = _minIncrease + random (_maxIncrease - _minIncrease); // Adjust the heart rate based upon config entry if (_heartRateChange != 0) then { diff --git a/addons/medical_treatment/functions/fnc_treatmentPartialHealLocal.sqf b/addons/medical_treatment/functions/fnc_treatmentPartialHealLocal.sqf index f094398ee3..6d6a368aa4 100644 --- a/addons/medical_treatment/functions/fnc_treatmentPartialHealLocal.sqf +++ b/addons/medical_treatment/functions/fnc_treatmentPartialHealLocal.sqf @@ -31,7 +31,7 @@ _bodyPartDamage = _bodyPartDamage apply { _target setVariable [QEGVAR(medical,bodyPartDamage), _bodyPartDamage, true]; if ((_bodyPartDamage select 4) < 0.3 && {(_bodyPartDamage select 5) < 0.3}) then { - [_unit, false] call EFUNC(medical_engine,setLimping); + [_target, false] call EFUNC(medical_engine,setLimping); }; // Resetting damage From 7ddb5383f3211d188d8a079c963fa670c7bdfdde Mon Sep 17 00:00:00 2001 From: jonpas Date: Tue, 16 May 2017 00:29:52 +0200 Subject: [PATCH 79/94] 1.70 CMs - Remove countermeasure mode switching (#5163) --- addons/aircraft/CfgWeapons.hpp | 16 ---------------- addons/aircraft/stringtable.xml | 14 -------------- 2 files changed, 30 deletions(-) diff --git a/addons/aircraft/CfgWeapons.hpp b/addons/aircraft/CfgWeapons.hpp index b94d9f4940..7e5c2a34bb 100644 --- a/addons/aircraft/CfgWeapons.hpp +++ b/addons/aircraft/CfgWeapons.hpp @@ -1,5 +1,3 @@ -class Mode_SemiAuto; -class Mode_Burst; class Mode_FullAuto; class CfgWeapons { @@ -18,20 +16,6 @@ class CfgWeapons { magazineReloadTime = 0.1; }; - // Manual Switching Of Flare Mode - class SmokeLauncher; - class CMFlareLauncher: SmokeLauncher { - modes[] = {"Single", "Burst", "AIBurst"}; - - class Single: Mode_SemiAuto { - reloadTime = 0.1; - }; - - class Burst: Mode_Burst { - displayName = CSTRING(CMFlareLauncher_Burst_Name); - }; - }; - // bigger mag for comanche class CannonCore; class gatling_20mm: CannonCore { diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 36012099b1..7e08f906ee 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -1,20 +1,6 @@ - - Burst - Feuerstoß - Ráfaga - Seria - Dávka - Rafale - Очередь - Sorozat - Rajada - Raffica - バースト - 점사 - XM301 XM301 From 305c5a7be70246380f552ceda378e162ddaade19 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 17:30:47 -0500 Subject: [PATCH 80/94] 1.70 FCS - Remove ACE_FCS from most vics (#5152) * Handle 1.70 FCS * Cleanup CfgWeapons * Add warning for discreteDistance --- addons/fcs/CfgOptics.hpp | 210 +--------- addons/fcs/CfgVehicles.hpp | 458 +-------------------- addons/fcs/CfgWeapons.hpp | 9 - addons/fcs/XEH_postInit.sqf | 4 + addons/fcs/functions/dev_debugConfigs.sqf | 88 ++++ optionals/compat_rhs_afrf3/CfgVehicles.hpp | 5 + 6 files changed, 135 insertions(+), 639 deletions(-) create mode 100644 addons/fcs/functions/dev_debugConfigs.sqf diff --git a/addons/fcs/CfgOptics.hpp b/addons/fcs/CfgOptics.hpp index aa68a6f68a..f8770d7327 100644 --- a/addons/fcs/CfgOptics.hpp +++ b/addons/fcs/CfgOptics.hpp @@ -11,110 +11,13 @@ h = 0; \ }; +class RscText; class RscControlsGroup; class RscMapControl; class RscInGameUI { class RscUnitInfo; - class RscUnitInfo_AH64D_gunner { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinder { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderPAS13 { - MACRO_RANGEFINDER - }; - class RscOptics_Rangefinder: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscWeaponRangeFinderMAAWS { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscWeaponRangeFinderAbramsCom { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderAbramsGun { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderStrykerMGSGun { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscOptics_crows: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_strider_commander { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - - class RscWeaponRangeZeroing: RscUnitInfo { - controls[] = {"CA_Zeroing", "CA_DistanceText", "CA_Distance","ACE_CA_Distance", "ACE_Rangehelper"}; - MACRO_RANGEFINDER - }; - class RscOptics_sos: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_nightstalker: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_tws: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_punisher { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_tws_sniper: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_SDV_periscope { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; class RscOptics_Heli_Attack_02_gunner: RscUnitInfo { class CA_IGUI_elements_group: RscControlsGroup { class controls { @@ -122,7 +25,7 @@ class RscInGameUI { }; }; }; - class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { // RscOptics_Heli_Attack_01_gunner onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];"; class CA_IGUI_elements_group: RscControlsGroup { class controls { @@ -130,103 +33,30 @@ class RscInGameUI { }; }; }; - class RscOptics_Heli_Attack_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_UAV_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_UGV_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; + class RscOptics_APC_Tracked_01_gunner: RscUnitInfo { class CA_IGUI_elements_group: RscControlsGroup { class controls { - MACRO_RANGEFINDER + class CA_Distance: RscText {}; }; }; }; - class RscOptics_APC_Tracked_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_03_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_01_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_02_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_02_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - - // marksmen - class RscOptics_LaserDesignator_02 { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER + class ACE_RscOptics_APC_Tracked_01_gunner: RscOptics_APC_Tracked_01_gunner { + class CA_IGUI_elements_group: CA_IGUI_elements_group { + class controls: controls { + // MACRO_RANGEFINDER + modify IDC of CA_Distance + class CA_Distance: CA_Distance { + idc = 151; + }; + class ACE_CA_Distance: CA_Distance { + idc = 1713151; + text = "----"; + }; + class ACE_Rangehelper: RscMapControl { + onDraw = "((ctrlParent (_this select 0)) displayCtrl 1713151) ctrlShow (cameraView == 'GUNNER');"; + w = 0; + h = 0; + }; }; }; }; diff --git a/addons/fcs/CfgVehicles.hpp b/addons/fcs/CfgVehicles.hpp index 82572f2c68..47b731a66c 100644 --- a/addons/fcs/CfgVehicles.hpp +++ b/addons/fcs/CfgVehicles.hpp @@ -49,9 +49,6 @@ class CfgVehicles { class Turrets { class MainTurret: NewTurret { GVAR(Enabled) = 1; // all tracked vehicles get one by default - class Turrets { - class CommanderOptics; - }; }; }; }; @@ -60,231 +57,52 @@ class CfgVehicles { class Turrets { class MainTurret: NewTurret { GVAR(Enabled) = 1; // all tracked vehicles get one by default - class Turrets { - class CommanderOptics;//: CommanderOptics {}; - }; }; }; }; - class Car_F: Car { - class Turrets { - class MainTurret; - }; - }; - - class Wheeled_APC_F: Car_F { - class Turrets { - class MainTurret: NewTurret { - class Turrets { - class CommanderOptics;//: CommanderOptics {}; - }; - }; - }; - }; - - class MRAP_01_base_F: Car_F {}; - - class MRAP_01_gmg_base_F: MRAP_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class MRAP_01_hmg_base_F: MRAP_01_gmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class B_MRAP_01_F: MRAP_01_base_F { - class Turrets; - }; - - class MRAP_02_base_F: Car_F {}; - - class MRAP_02_hmg_base_F: MRAP_02_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class MRAP_02_gmg_base_F: MRAP_02_hmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class O_MRAP_02_F: MRAP_02_base_F { - class Turrets; - }; - - class MRAP_03_base_F: Car_F { - class Turrets: Turrets { - class CommanderTurret: MainTurret { - GVAR(Enabled) = 0; - }; - }; - }; - - class MRAP_03_hmg_base_F: MRAP_03_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - class CommanderTurret: CommanderTurret { - GVAR(Enabled) = 0; - }; - }; - }; - - class MRAP_03_gmg_base_F: MRAP_03_hmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - class CommanderTurret: CommanderTurret {}; - };*/ - }; - - class APC_Wheeled_01_base_F: Wheeled_APC_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret { - class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - }; - }; - };*/ - }; - - class B_APC_Wheeled_01_base_F: APC_Wheeled_01_base_F {}; - - class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class APC_Wheeled_02_base_F: Wheeled_APC_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - - // class CommanderOptics: CommanderOptics {}; - }; - }; - - class APC_Wheeled_03_base_F: Wheeled_APC_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ - }; - }; - }; - - class I_APC_Wheeled_03_base_F: APC_Wheeled_03_base_F {}; - - class I_APC_Wheeled_03_cannon_F: I_APC_Wheeled_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - class APC_Tracked_01_base_F: Tank_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret { - class Turrets; - }; - };*/ - }; - - class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class B_APC_Tracked_01_rcws_F: B_APC_Tracked_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; + GVAR(Enabled) = 0; }; - class CommanderOptics: CommanderOptics {}; }; }; - class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { - //GVAR(Enabled) = 0; @todo - }; + class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F {}; class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { + GVAR(Enabled) = 1; + turretinfotype = "ACE_RscOptics_APC_Tracked_01_gunner"; + GVAR(MaxDistance) = 2000; discreteDistance[] = {}; discreteDistanceInitIndex = 0; magazines[] += {"ACE_120Rnd_35mm_ABM_shells_Tracer_Red"}; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ }; }; }; class APC_Tracked_02_base_F: Tank_F { - /*class Turrets: Turrets { + class Turrets: Turrets { class MainTurret: MainTurret { - class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - }; + GVAR(Enabled) = 0; }; - };*/ + }; }; class O_APC_Tracked_02_base_F: APC_Tracked_02_base_F {}; - - class O_APC_Tracked_02_cannon_F: O_APC_Tracked_02_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - + class O_APC_Tracked_02_AA_F: O_APC_Tracked_02_base_F { class Turrets: Turrets { class MainTurret: MainTurret { + GVAR(Enabled) = 1; + turretinfotype = "ACE_RscOptics_APC_Tracked_01_gunner"; + GVAR(MaxDistance) = 2000; + discreteDistance[] = {}; + discreteDistanceInitIndex = 0; magazines[] += {"ACE_120Rnd_35mm_ABM_shells_Tracer_Green"}; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ }; }; }; @@ -292,151 +110,31 @@ class CfgVehicles { class APC_Tracked_03_base_F: Tank_F { class Turrets: Turrets { class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ + GVAR(Enabled) = 0; }; }; }; class MBT_01_base_F: Tank_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ - }; - }; - }; - - class B_MBT_01_base_F: MBT_01_base_F {}; - - class B_MBT_01_cannon_F: B_MBT_01_base_F {}; - - class B_MBT_01_TUSK_F: B_MBT_01_cannon_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_01_arty_base_F: MBT_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { GVAR(Enabled) = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_01_mlrs_base_F: MBT_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 0; - //class Turrets; }; }; }; class MBT_02_base_F: Tank_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_02_arty_base_F: MBT_02_base_F { class Turrets: Turrets { class MainTurret: MainTurret { GVAR(Enabled) = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; }; }; }; - + class MBT_03_base_F: Tank_F { class Turrets: Turrets { class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - // SHIPS - class Ship: AllVehicles { - class Turrets { - class MainTurret; - }; - }; - - class Ship_F: Ship {}; - - class Boat_F: Ship_F {}; - - class Boat_Armed_01_base_F: Boat_F { - class Turrets: Turrets { - class FrontTurret: NewTurret { - GVAR(enabled) = 1; - GVAR(minDistance) = 100; - GVAR(maxDistance) = 2000; - GVAR(distanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - class RearTurret: FrontTurret { - discreteDistance[] = {100,200,300,400,600,800,1000,1200}; // Originally inherited from FrontTurret - discreteDistanceInitIndex = 4; + GVAR(Enabled) = 0; }; }; }; @@ -450,51 +148,7 @@ class CfgVehicles { }; }; - class Plane: Air {}; - - class Helicopter_Base_F: Helicopter { - class Turrets: Turrets { - class CopilotTurret; - }; - }; - - class Helicopter_Base_H: Helicopter_Base_F { - class Turrets: Turrets { - class CopilotTurret; - }; - }; - - class Heli_Light_01_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_01_unarmed_base_F: Heli_Light_01_base_F {}; - - class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_01_armed_base_F: Heli_Light_01_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_02_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Plane_Base_F: Plane { - class Turrets { - class CopilotTurret; - }; - }; + class Helicopter_Base_F: Helicopter {}; class Heli_Attack_01_base_F: Helicopter_Base_F { class Turrets: Turrets { @@ -515,80 +169,4 @@ class CfgVehicles { }; }; }; - - class Heli_Transport_01_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - class MainTurret: MainTurret {}; - class RightDoorGun: MainTurret {}; - };*/ - }; - - class Heli_Transport_02_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_light_03_base_F; - class I_Heli_light_03_base_F: Heli_light_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - class I_Heli_light_03_F: Heli_light_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class Plane_CAS_01_base_F: Plane_Base_F { - class Turrets; - }; - - class Plane_CAS_02_base_F: Plane_Base_F { - class Turrets; - }; - - class Plane_Fighter_03_base_F: Plane_Base_F { - class Turrets; - }; - - // static weapons. - class StaticWeapon: LandVehicle { - class Turrets { - class MainTurret; //: NewTurret {}; - }; - }; - - class StaticMGWeapon: StaticWeapon {}; - - class HMG_01_base_F: StaticMGWeapon { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MinDistance) = 200; - GVAR(MaxDistance) = 2000; - GVAR(DistanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class StaticGrenadeLauncher: StaticWeapon {}; - class GMG_TriPod: StaticGrenadeLauncher {}; - - class GMG_01_base_F: GMG_TriPod { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MinDistance) = 200; - GVAR(MaxDistance) = 2000; - GVAR(DistanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; }; diff --git a/addons/fcs/CfgWeapons.hpp b/addons/fcs/CfgWeapons.hpp index 760e39e2de..555060b119 100644 --- a/addons/fcs/CfgWeapons.hpp +++ b/addons/fcs/CfgWeapons.hpp @@ -1,15 +1,6 @@ class CfgWeapons { - // disable locking, so it doesn't interfere with our system class CannonCore; - class cannon_120mm: CannonCore { - canLock = 0; - ballisticsComputer = 0; - }; - class autocannon_Base_F: CannonCore { - canLock = 0; - ballisticsComputer = 0; - }; class autocannon_35mm: CannonCore { canLock = 0; ballisticsComputer = 4; //was "4 + 2", 2 is for manual zeroing, 4 is for the lead indicator - https://community.bistudio.com/wiki/A3_Locking_Review#ballisticsComputer diff --git a/addons/fcs/XEH_postInit.sqf b/addons/fcs/XEH_postInit.sqf index 02c9e72ae5..ef6e89d5cc 100644 --- a/addons/fcs/XEH_postInit.sqf +++ b/addons/fcs/XEH_postInit.sqf @@ -21,3 +21,7 @@ if (!hasInterface) exitWith {}; // Register event for global updates [QGVAR(forceUpdate), {[ACE_player] call FUNC(onForceUpdate)}] call CBA_fnc_addEventHandler; + +#ifdef DEBUG_MODE_FULL +call compile preprocessFileLineNumbers QPATHTOF(functions\dev_debugConfigs.sqf); +#endif diff --git a/addons/fcs/functions/dev_debugConfigs.sqf b/addons/fcs/functions/dev_debugConfigs.sqf new file mode 100644 index 0000000000..73abd89771 --- /dev/null +++ b/addons/fcs/functions/dev_debugConfigs.sqf @@ -0,0 +1,88 @@ +// PabstMirror +#include "script_component.hpp" + +diag_log text format ["[ACE_FCS] ---------------"]; +private _vehicles = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {2 == getNumber (_x >> 'scope')}", true]; +private _problemUIs = []; +{ + private _vehicleType = configName _x; + { + private _turret = _x; + private _config = [_vehicleType, _turret] call CBA_fnc_getTurret; + if (!isNull _config) then { + private _aceFCS = (getNumber (_config >> "ACE_FCS_Enabled")) == 1; + + private _vanillaFCS = false; + private _weapons = getArray (_config >> "weapons"); + { + private _weapon = _x; + private _ballisticComputer = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ballisticsComputer"); + _ballisticComputer = [_ballisticComputer, 5] call ace_common_fnc_toBin; + if ((_ballisticComputer select [(count _ballisticComputer) - 5, 1]) == "1") then { + _vanillaFCS = true; + if (_aceFCS) then {diag_log text format ["%1 -> %2: ACE FCS Enabled CONFLICTS with vanilla FCS [%3]", _vehicleType, _weapon, _ballisticComputer];}; + }; + } forEach _weapons; + + if (!(_weapons isEqualTo [])) then { + private _fcsMsg = switch (true) do { + // case ((!_vanillaFCS) && {!_aceFCS}): {"No FCS"}; + // case ((_vanillaFCS) && {_aceFCS}): {"CONFLICT FCS"}; + // case (_vanillaFCS): {"Vanilla FCS"}; + // case (_aceFCS): {"ACE FCS"}; + default {""}; + }; + if (_fcsMsg != "") then {diag_log text format ["%1: %2", _vehicleType, _fcsMsg];}; + }; + + if (_vanillaFCS) then { + private _dd = getArray (_config >> "discreteDistance"); + if (_dd isEqualTo []) exitWith {diag_log format ["%1->%2: discreteDistance with vanillaFCS [%3]", _vehicleType, _turret, _config];}; + }; + + if (true) then { + private _turretInfo = getText (_config >> "turretInfoType"); + private _infoConfig = configFile >> "RscInGameUI" >> _turretInfo; + if (!isNull _infoConfig) then { + private _idcList = []; + + private _fncGetIDCS = { + params ["_subConfig"]; + if (!isClass _subConfig) exitWith {diag_log "err";}; + private _controlsArray = getArray (_subConfig >> "controls"); + { + [_subConfig >> _x] call _fncGetIDCS; + } forEach _controlsArray; + private _controlsConfig = configProperties [(_subConfig >> "controls"), "isClass _x", true]; + { + [_x] call _fncGetIDCS; + } forEach _controlsConfig; + _idcList pushBack getNumber (_subConfig >> "idc"); + }; + [_infoConfig] call _fncGetIDCS; + + if (_aceFCS && {!(1713151 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: ACE_FCS, but missing ACE_CA_DIST", _turretInfo]; + }; + if (_aceFCS && {(198 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: ACE_FCS, but NEW Lazr CA_DIST", _turretInfo, _vehicleType]; + }; + if ((!_aceFCS) && {(1713151 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: Not ACE but has ACE_CA_DIST", _turretInfo, _vehicleType]; + }; + if (_vanillaFCS && {!(198 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: vanillaFCS but missing NEW Lazr CA_DIST [just a warning]", _turretInfo, _vehicleType]; + }; + }; + }; + }; + } forEach [[0],[0,0]]; +} forEach _vehicles; + +_problemUIs sort true; + +diag_log text format ["[ACE_FCS] ------- Problem UIs --------"]; +{ + diag_log text format ["- %1", _x]; +} forEach _problemUIs; +diag_log text format ["[ACE_FCS] ---------------"]; diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 9eca6c1c3a..5771ea3e16 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -451,6 +451,11 @@ class CfgVehicles { class rhs_2s3tank_base : Tank_F { EGVAR(refuel,fuelCapacity) = 830; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class OTR21_Base : Truck_F { From 406db1928b102f61ed2eab07b2914ce605ef0a10 Mon Sep 17 00:00:00 2001 From: jonpas Date: Tue, 16 May 2017 00:29:52 +0200 Subject: [PATCH 81/94] 1.70 CMs - Remove countermeasure mode switching (#5163) --- addons/aircraft/CfgWeapons.hpp | 16 ---------------- addons/aircraft/stringtable.xml | 14 -------------- 2 files changed, 30 deletions(-) diff --git a/addons/aircraft/CfgWeapons.hpp b/addons/aircraft/CfgWeapons.hpp index b94d9f4940..7e5c2a34bb 100644 --- a/addons/aircraft/CfgWeapons.hpp +++ b/addons/aircraft/CfgWeapons.hpp @@ -1,5 +1,3 @@ -class Mode_SemiAuto; -class Mode_Burst; class Mode_FullAuto; class CfgWeapons { @@ -18,20 +16,6 @@ class CfgWeapons { magazineReloadTime = 0.1; }; - // Manual Switching Of Flare Mode - class SmokeLauncher; - class CMFlareLauncher: SmokeLauncher { - modes[] = {"Single", "Burst", "AIBurst"}; - - class Single: Mode_SemiAuto { - reloadTime = 0.1; - }; - - class Burst: Mode_Burst { - displayName = CSTRING(CMFlareLauncher_Burst_Name); - }; - }; - // bigger mag for comanche class CannonCore; class gatling_20mm: CannonCore { diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 36012099b1..7e08f906ee 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -1,20 +1,6 @@ - - Burst - Feuerstoß - Ráfaga - Seria - Dávka - Rafale - Очередь - Sorozat - Rajada - Raffica - バースト - 점사 - XM301 XM301 From 0498e3bae1270019453a143e22a096906ad42a5c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 17:30:47 -0500 Subject: [PATCH 82/94] 1.70 FCS - Remove ACE_FCS from most vics (#5152) * Handle 1.70 FCS * Cleanup CfgWeapons * Add warning for discreteDistance --- addons/fcs/CfgOptics.hpp | 210 +--------- addons/fcs/CfgVehicles.hpp | 458 +-------------------- addons/fcs/CfgWeapons.hpp | 9 - addons/fcs/XEH_postInit.sqf | 4 + addons/fcs/functions/dev_debugConfigs.sqf | 88 ++++ optionals/compat_rhs_afrf3/CfgVehicles.hpp | 5 + 6 files changed, 135 insertions(+), 639 deletions(-) create mode 100644 addons/fcs/functions/dev_debugConfigs.sqf diff --git a/addons/fcs/CfgOptics.hpp b/addons/fcs/CfgOptics.hpp index aa68a6f68a..f8770d7327 100644 --- a/addons/fcs/CfgOptics.hpp +++ b/addons/fcs/CfgOptics.hpp @@ -11,110 +11,13 @@ h = 0; \ }; +class RscText; class RscControlsGroup; class RscMapControl; class RscInGameUI { class RscUnitInfo; - class RscUnitInfo_AH64D_gunner { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinder { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderPAS13 { - MACRO_RANGEFINDER - }; - class RscOptics_Rangefinder: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscWeaponRangeFinderMAAWS { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscWeaponRangeFinderAbramsCom { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderAbramsGun { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderStrykerMGSGun { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscOptics_crows: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_strider_commander { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - - class RscWeaponRangeZeroing: RscUnitInfo { - controls[] = {"CA_Zeroing", "CA_DistanceText", "CA_Distance","ACE_CA_Distance", "ACE_Rangehelper"}; - MACRO_RANGEFINDER - }; - class RscOptics_sos: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_nightstalker: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_tws: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_punisher { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_tws_sniper: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_SDV_periscope { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; class RscOptics_Heli_Attack_02_gunner: RscUnitInfo { class CA_IGUI_elements_group: RscControlsGroup { class controls { @@ -122,7 +25,7 @@ class RscInGameUI { }; }; }; - class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { // RscOptics_Heli_Attack_01_gunner onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];"; class CA_IGUI_elements_group: RscControlsGroup { class controls { @@ -130,103 +33,30 @@ class RscInGameUI { }; }; }; - class RscOptics_Heli_Attack_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_UAV_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_UGV_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; + class RscOptics_APC_Tracked_01_gunner: RscUnitInfo { class CA_IGUI_elements_group: RscControlsGroup { class controls { - MACRO_RANGEFINDER + class CA_Distance: RscText {}; }; }; }; - class RscOptics_APC_Tracked_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_03_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_01_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_02_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_02_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - - // marksmen - class RscOptics_LaserDesignator_02 { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER + class ACE_RscOptics_APC_Tracked_01_gunner: RscOptics_APC_Tracked_01_gunner { + class CA_IGUI_elements_group: CA_IGUI_elements_group { + class controls: controls { + // MACRO_RANGEFINDER + modify IDC of CA_Distance + class CA_Distance: CA_Distance { + idc = 151; + }; + class ACE_CA_Distance: CA_Distance { + idc = 1713151; + text = "----"; + }; + class ACE_Rangehelper: RscMapControl { + onDraw = "((ctrlParent (_this select 0)) displayCtrl 1713151) ctrlShow (cameraView == 'GUNNER');"; + w = 0; + h = 0; + }; }; }; }; diff --git a/addons/fcs/CfgVehicles.hpp b/addons/fcs/CfgVehicles.hpp index 82572f2c68..47b731a66c 100644 --- a/addons/fcs/CfgVehicles.hpp +++ b/addons/fcs/CfgVehicles.hpp @@ -49,9 +49,6 @@ class CfgVehicles { class Turrets { class MainTurret: NewTurret { GVAR(Enabled) = 1; // all tracked vehicles get one by default - class Turrets { - class CommanderOptics; - }; }; }; }; @@ -60,231 +57,52 @@ class CfgVehicles { class Turrets { class MainTurret: NewTurret { GVAR(Enabled) = 1; // all tracked vehicles get one by default - class Turrets { - class CommanderOptics;//: CommanderOptics {}; - }; }; }; }; - class Car_F: Car { - class Turrets { - class MainTurret; - }; - }; - - class Wheeled_APC_F: Car_F { - class Turrets { - class MainTurret: NewTurret { - class Turrets { - class CommanderOptics;//: CommanderOptics {}; - }; - }; - }; - }; - - class MRAP_01_base_F: Car_F {}; - - class MRAP_01_gmg_base_F: MRAP_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class MRAP_01_hmg_base_F: MRAP_01_gmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class B_MRAP_01_F: MRAP_01_base_F { - class Turrets; - }; - - class MRAP_02_base_F: Car_F {}; - - class MRAP_02_hmg_base_F: MRAP_02_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class MRAP_02_gmg_base_F: MRAP_02_hmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class O_MRAP_02_F: MRAP_02_base_F { - class Turrets; - }; - - class MRAP_03_base_F: Car_F { - class Turrets: Turrets { - class CommanderTurret: MainTurret { - GVAR(Enabled) = 0; - }; - }; - }; - - class MRAP_03_hmg_base_F: MRAP_03_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - class CommanderTurret: CommanderTurret { - GVAR(Enabled) = 0; - }; - }; - }; - - class MRAP_03_gmg_base_F: MRAP_03_hmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - class CommanderTurret: CommanderTurret {}; - };*/ - }; - - class APC_Wheeled_01_base_F: Wheeled_APC_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret { - class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - }; - }; - };*/ - }; - - class B_APC_Wheeled_01_base_F: APC_Wheeled_01_base_F {}; - - class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class APC_Wheeled_02_base_F: Wheeled_APC_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - - // class CommanderOptics: CommanderOptics {}; - }; - }; - - class APC_Wheeled_03_base_F: Wheeled_APC_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ - }; - }; - }; - - class I_APC_Wheeled_03_base_F: APC_Wheeled_03_base_F {}; - - class I_APC_Wheeled_03_cannon_F: I_APC_Wheeled_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - class APC_Tracked_01_base_F: Tank_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret { - class Turrets; - }; - };*/ - }; - - class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class B_APC_Tracked_01_rcws_F: B_APC_Tracked_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; + GVAR(Enabled) = 0; }; - class CommanderOptics: CommanderOptics {}; }; }; - class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { - //GVAR(Enabled) = 0; @todo - }; + class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F {}; class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { + GVAR(Enabled) = 1; + turretinfotype = "ACE_RscOptics_APC_Tracked_01_gunner"; + GVAR(MaxDistance) = 2000; discreteDistance[] = {}; discreteDistanceInitIndex = 0; magazines[] += {"ACE_120Rnd_35mm_ABM_shells_Tracer_Red"}; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ }; }; }; class APC_Tracked_02_base_F: Tank_F { - /*class Turrets: Turrets { + class Turrets: Turrets { class MainTurret: MainTurret { - class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - }; + GVAR(Enabled) = 0; }; - };*/ + }; }; class O_APC_Tracked_02_base_F: APC_Tracked_02_base_F {}; - - class O_APC_Tracked_02_cannon_F: O_APC_Tracked_02_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - + class O_APC_Tracked_02_AA_F: O_APC_Tracked_02_base_F { class Turrets: Turrets { class MainTurret: MainTurret { + GVAR(Enabled) = 1; + turretinfotype = "ACE_RscOptics_APC_Tracked_01_gunner"; + GVAR(MaxDistance) = 2000; + discreteDistance[] = {}; + discreteDistanceInitIndex = 0; magazines[] += {"ACE_120Rnd_35mm_ABM_shells_Tracer_Green"}; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ }; }; }; @@ -292,151 +110,31 @@ class CfgVehicles { class APC_Tracked_03_base_F: Tank_F { class Turrets: Turrets { class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ + GVAR(Enabled) = 0; }; }; }; class MBT_01_base_F: Tank_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ - }; - }; - }; - - class B_MBT_01_base_F: MBT_01_base_F {}; - - class B_MBT_01_cannon_F: B_MBT_01_base_F {}; - - class B_MBT_01_TUSK_F: B_MBT_01_cannon_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_01_arty_base_F: MBT_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { GVAR(Enabled) = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_01_mlrs_base_F: MBT_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 0; - //class Turrets; }; }; }; class MBT_02_base_F: Tank_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_02_arty_base_F: MBT_02_base_F { class Turrets: Turrets { class MainTurret: MainTurret { GVAR(Enabled) = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; }; }; }; - + class MBT_03_base_F: Tank_F { class Turrets: Turrets { class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - // SHIPS - class Ship: AllVehicles { - class Turrets { - class MainTurret; - }; - }; - - class Ship_F: Ship {}; - - class Boat_F: Ship_F {}; - - class Boat_Armed_01_base_F: Boat_F { - class Turrets: Turrets { - class FrontTurret: NewTurret { - GVAR(enabled) = 1; - GVAR(minDistance) = 100; - GVAR(maxDistance) = 2000; - GVAR(distanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - class RearTurret: FrontTurret { - discreteDistance[] = {100,200,300,400,600,800,1000,1200}; // Originally inherited from FrontTurret - discreteDistanceInitIndex = 4; + GVAR(Enabled) = 0; }; }; }; @@ -450,51 +148,7 @@ class CfgVehicles { }; }; - class Plane: Air {}; - - class Helicopter_Base_F: Helicopter { - class Turrets: Turrets { - class CopilotTurret; - }; - }; - - class Helicopter_Base_H: Helicopter_Base_F { - class Turrets: Turrets { - class CopilotTurret; - }; - }; - - class Heli_Light_01_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_01_unarmed_base_F: Heli_Light_01_base_F {}; - - class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_01_armed_base_F: Heli_Light_01_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_02_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Plane_Base_F: Plane { - class Turrets { - class CopilotTurret; - }; - }; + class Helicopter_Base_F: Helicopter {}; class Heli_Attack_01_base_F: Helicopter_Base_F { class Turrets: Turrets { @@ -515,80 +169,4 @@ class CfgVehicles { }; }; }; - - class Heli_Transport_01_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - class MainTurret: MainTurret {}; - class RightDoorGun: MainTurret {}; - };*/ - }; - - class Heli_Transport_02_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_light_03_base_F; - class I_Heli_light_03_base_F: Heli_light_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - class I_Heli_light_03_F: Heli_light_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class Plane_CAS_01_base_F: Plane_Base_F { - class Turrets; - }; - - class Plane_CAS_02_base_F: Plane_Base_F { - class Turrets; - }; - - class Plane_Fighter_03_base_F: Plane_Base_F { - class Turrets; - }; - - // static weapons. - class StaticWeapon: LandVehicle { - class Turrets { - class MainTurret; //: NewTurret {}; - }; - }; - - class StaticMGWeapon: StaticWeapon {}; - - class HMG_01_base_F: StaticMGWeapon { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MinDistance) = 200; - GVAR(MaxDistance) = 2000; - GVAR(DistanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class StaticGrenadeLauncher: StaticWeapon {}; - class GMG_TriPod: StaticGrenadeLauncher {}; - - class GMG_01_base_F: GMG_TriPod { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MinDistance) = 200; - GVAR(MaxDistance) = 2000; - GVAR(DistanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; }; diff --git a/addons/fcs/CfgWeapons.hpp b/addons/fcs/CfgWeapons.hpp index 760e39e2de..555060b119 100644 --- a/addons/fcs/CfgWeapons.hpp +++ b/addons/fcs/CfgWeapons.hpp @@ -1,15 +1,6 @@ class CfgWeapons { - // disable locking, so it doesn't interfere with our system class CannonCore; - class cannon_120mm: CannonCore { - canLock = 0; - ballisticsComputer = 0; - }; - class autocannon_Base_F: CannonCore { - canLock = 0; - ballisticsComputer = 0; - }; class autocannon_35mm: CannonCore { canLock = 0; ballisticsComputer = 4; //was "4 + 2", 2 is for manual zeroing, 4 is for the lead indicator - https://community.bistudio.com/wiki/A3_Locking_Review#ballisticsComputer diff --git a/addons/fcs/XEH_postInit.sqf b/addons/fcs/XEH_postInit.sqf index 02c9e72ae5..ef6e89d5cc 100644 --- a/addons/fcs/XEH_postInit.sqf +++ b/addons/fcs/XEH_postInit.sqf @@ -21,3 +21,7 @@ if (!hasInterface) exitWith {}; // Register event for global updates [QGVAR(forceUpdate), {[ACE_player] call FUNC(onForceUpdate)}] call CBA_fnc_addEventHandler; + +#ifdef DEBUG_MODE_FULL +call compile preprocessFileLineNumbers QPATHTOF(functions\dev_debugConfigs.sqf); +#endif diff --git a/addons/fcs/functions/dev_debugConfigs.sqf b/addons/fcs/functions/dev_debugConfigs.sqf new file mode 100644 index 0000000000..73abd89771 --- /dev/null +++ b/addons/fcs/functions/dev_debugConfigs.sqf @@ -0,0 +1,88 @@ +// PabstMirror +#include "script_component.hpp" + +diag_log text format ["[ACE_FCS] ---------------"]; +private _vehicles = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {2 == getNumber (_x >> 'scope')}", true]; +private _problemUIs = []; +{ + private _vehicleType = configName _x; + { + private _turret = _x; + private _config = [_vehicleType, _turret] call CBA_fnc_getTurret; + if (!isNull _config) then { + private _aceFCS = (getNumber (_config >> "ACE_FCS_Enabled")) == 1; + + private _vanillaFCS = false; + private _weapons = getArray (_config >> "weapons"); + { + private _weapon = _x; + private _ballisticComputer = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ballisticsComputer"); + _ballisticComputer = [_ballisticComputer, 5] call ace_common_fnc_toBin; + if ((_ballisticComputer select [(count _ballisticComputer) - 5, 1]) == "1") then { + _vanillaFCS = true; + if (_aceFCS) then {diag_log text format ["%1 -> %2: ACE FCS Enabled CONFLICTS with vanilla FCS [%3]", _vehicleType, _weapon, _ballisticComputer];}; + }; + } forEach _weapons; + + if (!(_weapons isEqualTo [])) then { + private _fcsMsg = switch (true) do { + // case ((!_vanillaFCS) && {!_aceFCS}): {"No FCS"}; + // case ((_vanillaFCS) && {_aceFCS}): {"CONFLICT FCS"}; + // case (_vanillaFCS): {"Vanilla FCS"}; + // case (_aceFCS): {"ACE FCS"}; + default {""}; + }; + if (_fcsMsg != "") then {diag_log text format ["%1: %2", _vehicleType, _fcsMsg];}; + }; + + if (_vanillaFCS) then { + private _dd = getArray (_config >> "discreteDistance"); + if (_dd isEqualTo []) exitWith {diag_log format ["%1->%2: discreteDistance with vanillaFCS [%3]", _vehicleType, _turret, _config];}; + }; + + if (true) then { + private _turretInfo = getText (_config >> "turretInfoType"); + private _infoConfig = configFile >> "RscInGameUI" >> _turretInfo; + if (!isNull _infoConfig) then { + private _idcList = []; + + private _fncGetIDCS = { + params ["_subConfig"]; + if (!isClass _subConfig) exitWith {diag_log "err";}; + private _controlsArray = getArray (_subConfig >> "controls"); + { + [_subConfig >> _x] call _fncGetIDCS; + } forEach _controlsArray; + private _controlsConfig = configProperties [(_subConfig >> "controls"), "isClass _x", true]; + { + [_x] call _fncGetIDCS; + } forEach _controlsConfig; + _idcList pushBack getNumber (_subConfig >> "idc"); + }; + [_infoConfig] call _fncGetIDCS; + + if (_aceFCS && {!(1713151 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: ACE_FCS, but missing ACE_CA_DIST", _turretInfo]; + }; + if (_aceFCS && {(198 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: ACE_FCS, but NEW Lazr CA_DIST", _turretInfo, _vehicleType]; + }; + if ((!_aceFCS) && {(1713151 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: Not ACE but has ACE_CA_DIST", _turretInfo, _vehicleType]; + }; + if (_vanillaFCS && {!(198 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: vanillaFCS but missing NEW Lazr CA_DIST [just a warning]", _turretInfo, _vehicleType]; + }; + }; + }; + }; + } forEach [[0],[0,0]]; +} forEach _vehicles; + +_problemUIs sort true; + +diag_log text format ["[ACE_FCS] ------- Problem UIs --------"]; +{ + diag_log text format ["- %1", _x]; +} forEach _problemUIs; +diag_log text format ["[ACE_FCS] ---------------"]; diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 9de9f8220d..a6a8117780 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -423,6 +423,11 @@ class CfgVehicles { class rhs_2s3tank_base : Tank_F { EGVAR(refuel,fuelCapacity) = 830; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class OTR21_Base : Truck_F { From cd0609b28dce044a1664093692f5bbd818c305a1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 17:37:36 -0500 Subject: [PATCH 83/94] Realistic names for 1.70 pylon magazines (#5165) --- addons/realisticnames/CfgMagazines.hpp | 61 +++++++++++++++++++++++++ addons/realisticnames/dev_dumpPylon.sqf | 29 ++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 addons/realisticnames/dev_dumpPylon.sqf diff --git a/addons/realisticnames/CfgMagazines.hpp b/addons/realisticnames/CfgMagazines.hpp index a6a64a4a15..d32ee3ec2c 100644 --- a/addons/realisticnames/CfgMagazines.hpp +++ b/addons/realisticnames/CfgMagazines.hpp @@ -417,4 +417,65 @@ class CfgMagazines { class SmokeShellYellow: SmokeShell { displayName = CSTRING(SmokeShellYellow_Name); }; + + + // 1.70 Pylon Magazines (Should Match Weapon Name) + class 2Rnd_Missile_AA_04_F; + class PylonRack_1Rnd_Missile_AA_04_F: 2Rnd_Missile_AA_04_F { + displayName = "AIM-9 Sidewinder"; // [vanilla: Falchion-22 - Missile_AA_04_Plane_CAS_01_F] + }; + class 4Rnd_AAA_missiles; + class PylonRack_1Rnd_AAA_missiles: 4Rnd_AAA_missiles { + displayName = "AIM-132 ASRAAM"; // [vanilla: ASRAAM - missiles_ASRAAM] + }; + class 4Rnd_GAA_missiles; + class PylonRack_1Rnd_GAA_missiles: 4Rnd_GAA_missiles { + displayName = "AIM-120A AMRAAM"; // [vanilla: Zephyr - missiles_Zephyr] + }; + class 6Rnd_Missile_AGM_02_F; + class PylonRack_1Rnd_Missile_AGM_02_F: 6Rnd_Missile_AGM_02_F { + displayName = "AGM-65 Maverick"; // [vanilla: Macer - Missile_AGM_02_Plane_CAS_01_F] + }; + class PylonRack_3Rnd_Missile_AGM_02_F: PylonRack_1Rnd_Missile_AGM_02_F { + displayName = "AGM-65 Maverick 3x"; // [vanilla: Macer 3x - Missile_AGM_02_Plane_CAS_01_F] + }; + class 2Rnd_LG_scalpel; + class PylonRack_1Rnd_LG_scalpel: 2Rnd_LG_scalpel { + displayName = "9K121 Vikhr"; // [vanilla: Scalpel - missiles_SCALPEL] + }; + class PylonRack_3Rnd_LG_scalpel: PylonRack_1Rnd_LG_scalpel { + displayName = "9K121 Vikhr 3x"; // [vanilla: Scalpel 3x - missiles_SCALPEL] + }; + class PylonRack_4Rnd_LG_scalpel: PylonRack_1Rnd_LG_scalpel { + displayName = "9K121 Vikhr 4x"; // [vanilla: Scalpel 4x - missiles_SCALPEL] + }; + class PylonRack_7Rnd_Rocket_04_HE_F: 7Rnd_Rocket_04_HE_F { + displayName = "Hydra 70 7x HE"; // [vanilla: Shrieker 7x HE - Rocket_04_HE_Plane_CAS_01_F] + }; + class PylonRack_7Rnd_Rocket_04_AP_F: 7Rnd_Rocket_04_AP_F { + displayName = "Hydra 70 7x AP"; // [vanilla: Shrieker 7x AP - Rocket_04_AP_Plane_CAS_01_F] + }; + class 12Rnd_missiles; + class PylonRack_12Rnd_missiles: 12Rnd_missiles { + displayName = "Hydra 70"; // [vanilla: DAR - missiles_DAR] + }; + class PylonRack_20Rnd_Rocket_03_HE_F: 20Rnd_Rocket_03_HE_F { + displayName = "S-8 20x HE"; // [vanilla: Tratnyr 20x HE - Rocket_03_HE_Plane_CAS_02_F] + }; + class PylonRack_20Rnd_Rocket_03_AP_F: 20Rnd_Rocket_03_AP_F { + displayName = "S-8 20x AP"; // [vanilla: Tratnyr 20x AP - Rocket_03_AP_Plane_CAS_02_F] + }; + class 2Rnd_Missile_AA_03_F; + class PylonRack_1Rnd_Missile_AA_03_F: 2Rnd_Missile_AA_03_F { + displayName = "Wympel R-73"; // [vanilla: Sahr-3 - Missile_AA_03_Plane_CAS_02_F] + }; + class 4Rnd_Missile_AGM_01_F; + class PylonRack_1Rnd_Missile_AGM_01_F: 4Rnd_Missile_AGM_01_F { + displayName = "Kh-25MTP"; // [vanilla: Sharur - Missile_AGM_01_Plane_CAS_02_F] + }; + class 2Rnd_Bomb_03_F; + class PylonMissile_1Rnd_Bomb_03_F: 2Rnd_Bomb_03_F { + displayName = "FAB-250M-54"; // [vanilla: LOM-250G - Bomb_03_Plane_CAS_02_F] + }; + }; diff --git a/addons/realisticnames/dev_dumpPylon.sqf b/addons/realisticnames/dev_dumpPylon.sqf new file mode 100644 index 0000000000..df0d7ea4a5 --- /dev/null +++ b/addons/realisticnames/dev_dumpPylon.sqf @@ -0,0 +1,29 @@ +// [] execVM "z\ace\addons\realisticnames\dev_dumpPylon.sqf"; + +private _justLog = true; + +diag_log text format ["[Dumping Pylons] --------------------"]; +private _magazines = configProperties [configFile >> "CfgMagazines", "isClass _x", true]; +{ + private _pylonWeapon = getText (_x >> "pylonWeapon"); + if (_pylonWeapon != "") then { + private _weaponConfig = configFile >> "CfgWeapons" >> _pylonWeapon; + private _weaponName = getText (_weaponConfig >> "displayName"); + private _inherit = (configProperties [_x, "configName _x == 'displayName'", false]) isEqualTo []; + private _pylonMagName = getText (_x >> "displayName"); + if (_justLog) then { + if (!_inherit) then { + diag_log text format ["%1: [%2 vs %3]", configName _x, _pylonMagName, _weaponName]; + } else { + diag_log text format [" - %1: [%2 vs %3]", configName _x, _pylonMagName, _weaponName]; + }; + } else { + if (!_inherit) then { + diag_log text format ['class %1;', configName inheritsFrom _x]; + diag_log text format ['class %1: %2 {', configName _x, configName inheritsFrom _x]; + diag_log text format ['displayName = "%1"; [vanilla: %2 - %3]', _weaponName, _pylonMagName, _pylonWeapon]; + diag_log text format ['};', configName _x, configName inheritsFrom _x, _weaponName, _pylonMagName]; + }; + }; + }; +} forEach _magazines; From 941502af460f52302495915bcd7b3eda9c787a52 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 17:37:36 -0500 Subject: [PATCH 84/94] Realistic names for 1.70 pylon magazines (#5165) --- addons/realisticnames/CfgMagazines.hpp | 61 +++++++++++++++++++++++++ addons/realisticnames/dev_dumpPylon.sqf | 29 ++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 addons/realisticnames/dev_dumpPylon.sqf diff --git a/addons/realisticnames/CfgMagazines.hpp b/addons/realisticnames/CfgMagazines.hpp index a6a64a4a15..d32ee3ec2c 100644 --- a/addons/realisticnames/CfgMagazines.hpp +++ b/addons/realisticnames/CfgMagazines.hpp @@ -417,4 +417,65 @@ class CfgMagazines { class SmokeShellYellow: SmokeShell { displayName = CSTRING(SmokeShellYellow_Name); }; + + + // 1.70 Pylon Magazines (Should Match Weapon Name) + class 2Rnd_Missile_AA_04_F; + class PylonRack_1Rnd_Missile_AA_04_F: 2Rnd_Missile_AA_04_F { + displayName = "AIM-9 Sidewinder"; // [vanilla: Falchion-22 - Missile_AA_04_Plane_CAS_01_F] + }; + class 4Rnd_AAA_missiles; + class PylonRack_1Rnd_AAA_missiles: 4Rnd_AAA_missiles { + displayName = "AIM-132 ASRAAM"; // [vanilla: ASRAAM - missiles_ASRAAM] + }; + class 4Rnd_GAA_missiles; + class PylonRack_1Rnd_GAA_missiles: 4Rnd_GAA_missiles { + displayName = "AIM-120A AMRAAM"; // [vanilla: Zephyr - missiles_Zephyr] + }; + class 6Rnd_Missile_AGM_02_F; + class PylonRack_1Rnd_Missile_AGM_02_F: 6Rnd_Missile_AGM_02_F { + displayName = "AGM-65 Maverick"; // [vanilla: Macer - Missile_AGM_02_Plane_CAS_01_F] + }; + class PylonRack_3Rnd_Missile_AGM_02_F: PylonRack_1Rnd_Missile_AGM_02_F { + displayName = "AGM-65 Maverick 3x"; // [vanilla: Macer 3x - Missile_AGM_02_Plane_CAS_01_F] + }; + class 2Rnd_LG_scalpel; + class PylonRack_1Rnd_LG_scalpel: 2Rnd_LG_scalpel { + displayName = "9K121 Vikhr"; // [vanilla: Scalpel - missiles_SCALPEL] + }; + class PylonRack_3Rnd_LG_scalpel: PylonRack_1Rnd_LG_scalpel { + displayName = "9K121 Vikhr 3x"; // [vanilla: Scalpel 3x - missiles_SCALPEL] + }; + class PylonRack_4Rnd_LG_scalpel: PylonRack_1Rnd_LG_scalpel { + displayName = "9K121 Vikhr 4x"; // [vanilla: Scalpel 4x - missiles_SCALPEL] + }; + class PylonRack_7Rnd_Rocket_04_HE_F: 7Rnd_Rocket_04_HE_F { + displayName = "Hydra 70 7x HE"; // [vanilla: Shrieker 7x HE - Rocket_04_HE_Plane_CAS_01_F] + }; + class PylonRack_7Rnd_Rocket_04_AP_F: 7Rnd_Rocket_04_AP_F { + displayName = "Hydra 70 7x AP"; // [vanilla: Shrieker 7x AP - Rocket_04_AP_Plane_CAS_01_F] + }; + class 12Rnd_missiles; + class PylonRack_12Rnd_missiles: 12Rnd_missiles { + displayName = "Hydra 70"; // [vanilla: DAR - missiles_DAR] + }; + class PylonRack_20Rnd_Rocket_03_HE_F: 20Rnd_Rocket_03_HE_F { + displayName = "S-8 20x HE"; // [vanilla: Tratnyr 20x HE - Rocket_03_HE_Plane_CAS_02_F] + }; + class PylonRack_20Rnd_Rocket_03_AP_F: 20Rnd_Rocket_03_AP_F { + displayName = "S-8 20x AP"; // [vanilla: Tratnyr 20x AP - Rocket_03_AP_Plane_CAS_02_F] + }; + class 2Rnd_Missile_AA_03_F; + class PylonRack_1Rnd_Missile_AA_03_F: 2Rnd_Missile_AA_03_F { + displayName = "Wympel R-73"; // [vanilla: Sahr-3 - Missile_AA_03_Plane_CAS_02_F] + }; + class 4Rnd_Missile_AGM_01_F; + class PylonRack_1Rnd_Missile_AGM_01_F: 4Rnd_Missile_AGM_01_F { + displayName = "Kh-25MTP"; // [vanilla: Sharur - Missile_AGM_01_Plane_CAS_02_F] + }; + class 2Rnd_Bomb_03_F; + class PylonMissile_1Rnd_Bomb_03_F: 2Rnd_Bomb_03_F { + displayName = "FAB-250M-54"; // [vanilla: LOM-250G - Bomb_03_Plane_CAS_02_F] + }; + }; diff --git a/addons/realisticnames/dev_dumpPylon.sqf b/addons/realisticnames/dev_dumpPylon.sqf new file mode 100644 index 0000000000..df0d7ea4a5 --- /dev/null +++ b/addons/realisticnames/dev_dumpPylon.sqf @@ -0,0 +1,29 @@ +// [] execVM "z\ace\addons\realisticnames\dev_dumpPylon.sqf"; + +private _justLog = true; + +diag_log text format ["[Dumping Pylons] --------------------"]; +private _magazines = configProperties [configFile >> "CfgMagazines", "isClass _x", true]; +{ + private _pylonWeapon = getText (_x >> "pylonWeapon"); + if (_pylonWeapon != "") then { + private _weaponConfig = configFile >> "CfgWeapons" >> _pylonWeapon; + private _weaponName = getText (_weaponConfig >> "displayName"); + private _inherit = (configProperties [_x, "configName _x == 'displayName'", false]) isEqualTo []; + private _pylonMagName = getText (_x >> "displayName"); + if (_justLog) then { + if (!_inherit) then { + diag_log text format ["%1: [%2 vs %3]", configName _x, _pylonMagName, _weaponName]; + } else { + diag_log text format [" - %1: [%2 vs %3]", configName _x, _pylonMagName, _weaponName]; + }; + } else { + if (!_inherit) then { + diag_log text format ['class %1;', configName inheritsFrom _x]; + diag_log text format ['class %1: %2 {', configName _x, configName inheritsFrom _x]; + diag_log text format ['displayName = "%1"; [vanilla: %2 - %3]', _weaponName, _pylonMagName, _pylonWeapon]; + diag_log text format ['};', configName _x, configName inheritsFrom _x, _weaponName, _pylonMagName]; + }; + }; + }; +} forEach _magazines; From 225c8d797540b04c21aab97cd80d45a1c36ad776 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 17:45:31 -0500 Subject: [PATCH 85/94] Fix gatling_30mm UBC for 1.70 (#5125) * Fix gatling_30mm UBC for 1.70 * Fix verEsion --- addons/realisticnames/CfgWeapons.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 3bc97b14ab..6aa3c7c3c8 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -319,7 +319,7 @@ class CfgWeapons { }; }; - class gatling_30mm: CannonCore { // This is a fictional veresion of the GSh-6-30, with 3 barrels + class gatling_30mm_base: CannonCore { // This is a fictional version of the GSh-6-30, with 3 barrels displayName = "GSh-3-30"; class LowROF: Mode_FullAuto { displayName = "GSh-3-30"; @@ -602,7 +602,7 @@ class CfgWeapons { class arifle_CTAR_GL_hex_F: arifle_CTAR_GL_base_F { displayName = CSTRING(arifle_CTAR_GL_hex); }; - + class arifle_CTARS_base_F; class arifle_CTARS_blk_F: arifle_CTARS_base_F { displayName = CSTRING(arifle_CTARS_blk); From 5da5a7cc3e30c2113afd3de9e1cc34bbe9eb3832 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 17:45:31 -0500 Subject: [PATCH 86/94] Fix gatling_30mm UBC for 1.70 (#5125) * Fix gatling_30mm UBC for 1.70 * Fix verEsion --- addons/realisticnames/CfgWeapons.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 3bc97b14ab..6aa3c7c3c8 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -319,7 +319,7 @@ class CfgWeapons { }; }; - class gatling_30mm: CannonCore { // This is a fictional veresion of the GSh-6-30, with 3 barrels + class gatling_30mm_base: CannonCore { // This is a fictional version of the GSh-6-30, with 3 barrels displayName = "GSh-3-30"; class LowROF: Mode_FullAuto { displayName = "GSh-3-30"; @@ -602,7 +602,7 @@ class CfgWeapons { class arifle_CTAR_GL_hex_F: arifle_CTAR_GL_base_F { displayName = CSTRING(arifle_CTAR_GL_hex); }; - + class arifle_CTARS_base_F; class arifle_CTARS_blk_F: arifle_CTARS_base_F { displayName = CSTRING(arifle_CTARS_blk); From 6034a13d4295299493fa12b2f5ae26e38493ba69 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 15 May 2017 18:00:09 -0500 Subject: [PATCH 87/94] Prep 3.9.2 (version numbers) --- addons/main/script_version.hpp | 4 ++-- docs/_config.yml | 4 ++-- docs/_config_dev.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 6b0cc9e423..a52346e875 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 9 -#define PATCHLVL 1 -#define BUILD 17 +#define PATCHLVL 2 +#define BUILD 18 diff --git a/docs/_config.yml b/docs/_config.yml index 0e5fab26bc..b8ac5e22c3 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -9,8 +9,8 @@ ace: version: major: 3 minor: 9 - patch: 1 - build: 17 + patch: 2 + build: 18 acex: githubUrl: https://github.com/acemod/ACEX diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index d3ec0acb83..227d4029bf 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -11,8 +11,8 @@ ace: version: major: 3 minor: 9 - patch: 1 - build: 17 + patch: 2 + build: 18 acex: githubUrl: https://github.com/acemod/ACEX From 5f0e6b7112a4ebd9879064cba50da27317b6502c Mon Sep 17 00:00:00 2001 From: jonpas Date: Tue, 16 May 2017 14:05:23 +0200 Subject: [PATCH 88/94] Update required Arma 3 version to 1.70 --- addons/main/script_mod.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 6cb346a72b..f0681137a6 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -9,7 +9,7 @@ #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 1.64 +#define REQUIRED_VERSION 1.70 #define REQUIRED_CBA_VERSION {3,2,1} #ifdef COMPONENT_BEAUTIFIED From bae6124d0cf6c0e097c9c4ea05b6a61b0d5644ee Mon Sep 17 00:00:00 2001 From: jonpas Date: Tue, 16 May 2017 14:16:59 +0200 Subject: [PATCH 89/94] Prepare release 3.9.2 --- README.md | 2 +- docs/README_DE.md | 2 +- docs/README_PL.md | 2 +- mod.cpp | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b885f22b23..733af4eaed 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/docs/README_DE.md b/docs/README_DE.md index fda503c4d2..52b11e0797 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Fehlermeldungen diff --git a/docs/README_PL.md b/docs/README_PL.md index 01aa93ddb0..5c5163313f 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -3,7 +3,7 @@

- ACE3 Wersja + ACE3 Wersja ACE3 Zagadnienia diff --git a/mod.cpp b/mod.cpp index 639e957a64..3357f64b54 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.9.1"; +name = "Advanced Combat Environment 3.9.2"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.9.1"; +description = "ACE3 - Version 3.9.2"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; From 9ba3b5aa6a8805c2ddcec159433dcfdceb346bc3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 16 May 2017 21:40:07 -0500 Subject: [PATCH 90/94] Update helmet hearing protection for RHS-US (#5146) * Update helmet hearing protection for RHS-US * Hearing - Add standardized helmet protection macros * Tweak peltor vol --- addons/hearing/CfgWeapons.hpp | 28 ++-- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 16 +- optionals/compat_rhs_usf3/CfgWeapons.hpp | 182 +++++++++++++++++++--- 3 files changed, 181 insertions(+), 45 deletions(-) diff --git a/addons/hearing/CfgWeapons.hpp b/addons/hearing/CfgWeapons.hpp index c063c0e896..8b138271b3 100644 --- a/addons/hearing/CfgWeapons.hpp +++ b/addons/hearing/CfgWeapons.hpp @@ -13,42 +13,42 @@ class CfgWeapons { }; }; + #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; + #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; + #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; + class H_HelmetB; class H_HelmetCrew_B: H_HelmetB { - GVAR(protection) = 1; - GVAR(lowerVolume) = 0.80; + HEARING_PROTECTION_VICCREW }; class H_CrewHelmetHeli_B: H_HelmetB { - GVAR(protection) = 0.85; - GVAR(lowerVolume) = 0.75; + HEARING_PROTECTION_VICCREW }; class H_PilotHelmetHeli_B: H_HelmetB { - GVAR(protection) = 0.85; - GVAR(lowerVolume) = 0.75; + HEARING_PROTECTION_VICCREW }; class H_PilotHelmetFighter_B: H_HelmetB { - GVAR(protection) = 1; - GVAR(lowerVolume) = 0.80; + HEARING_PROTECTION_VICCREW }; class HelmetBase; class H_Cap_headphones: HelmetBase { - GVAR(protection) = 0.5; - GVAR(lowerVolume) = 0.60; + HEARING_PROTECTION_EARMUFF }; class H_HelmetB_light: H_HelmetB { - GVAR(protection) = 0.8; - GVAR(lowerVolume) = 0.20; + HEARING_PROTECTION_PELTOR + }; + class H_HelmetB_camo: H_HelmetB { + HEARING_PROTECTION_PELTOR }; class H_HelmetB_plain_mcamo; class H_HelmetSpecB: H_HelmetB_plain_mcamo { - GVAR(protection) = 0.8; - GVAR(lowerVolume) = 0.20; + HEARING_PROTECTION_PELTOR }; }; diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 09a3af7384..14431a92ae 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -87,24 +87,20 @@ class CfgWeapons { ace_reloadlaunchers_enabled = 1; }; + #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; + #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; + #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; class H_HelmetB; class rhs_tsh4: H_HelmetB { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + HEARING_PROTECTION_VICCREW }; - class rhs_tsh4_ess: rhs_tsh4 {}; - class rhs_tsh4_bala: rhs_tsh4 {}; - class rhs_tsh4_ess_bala: rhs_tsh4 {}; class rhs_zsh7a: H_HelmetB { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + HEARING_PROTECTION_VICCREW }; - class rhs_zsh7a_mike: rhs_zsh7a {}; class rhs_gssh18: H_HelmetB { - ace_hearing_protection = 0.5; - ace_hearing_lowerVolume = 0.60; + HEARING_PROTECTION_EARMUFF }; class rhs_weap_d81; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 2c1594143c..d67879916b 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -30,7 +30,7 @@ class CfgWeapons { ACE_barrelTwist = 304.8; // 1:12" ACE_barrelLength = 635.0; // 25" ACE_RailHeightAboveBore = 2.6; - }; + }; class arifle_MX_Base_F; class rhs_weap_m4_Base: arifle_MX_Base_F { ACE_barrelTwist = 177.8; @@ -195,7 +195,7 @@ class CfgWeapons { class Snip { discreteDistance[] = {100}; discreteDistanceInitIndex = 0; - }; + }; }; }; }; @@ -212,36 +212,176 @@ class CfgWeapons { lockedTargetSound[] = {"",0,1}; }; - class rhsusf_ach_helmet_ocp; - class rhsusf_opscore_01: rhsusf_ach_helmet_ocp { - ace_hearing_protection = 0.50; - ace_hearing_lowerVolume = 0.60; - }; - class rhsusf_opscore_01_tan: rhsusf_opscore_01 {}; - class rhsusf_opscore_03_ocp: rhsusf_opscore_01 {}; - class rhsusf_cvc_helmet: rhsusf_opscore_01 { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + + #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; + #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; + #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; + // Fast Helmets + class rhsusf_opscore_01; + class rhsusf_opscore_aor1_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR }; - class rhsusf_cvc_green_helmet: rhsusf_cvc_helmet {}; - class rhsusf_cvc_ess: rhsusf_cvc_helmet {}; - class rhsusf_cvc_green_ess: rhsusf_cvc_ess {}; + class rhsusf_opscore_aor1_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_bk_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_fg_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_fg_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_fg_pelt_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_paint_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_paint_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_paint_pelt_nsw_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_aor2_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_aor2_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt_nsw_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mc_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mc_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_cover; + class rhsusf_opscore_mc_cover_pelt: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mc_cover_pelt_cam: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_rg_cover_pelt: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_coy_cover_pelt: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mar_01; + class rhsusf_opscore_mar_ut_pelt: rhsusf_opscore_mar_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mar_fg_pelt: rhsusf_opscore_mar_01 { + HEARING_PROTECTION_PELTOR + }; + + // ACH Helmets + class rhsusf_ach_helmet_ocp; + class rhsusf_ach_bare_des_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_des_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_semi_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_semi_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_tan_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_tan_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_wood_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_wood_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_helmet_headset_ocp: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_helmet_headset_ess_ocp: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + + // ACVC Helmets + class rhsusf_cvc_helmet: rhsusf_opscore_01 { + HEARING_PROTECTION_VICCREW + }; + + // MICH Helmets + class rhsusf_mich_bare; + class rhsusf_mich_bare_alt: rhsusf_mich_bare { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos; + class rhsusf_mich_bare_norotos_alt: rhsusf_mich_bare_norotos { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_arc; + class rhsusf_mich_bare_norotos_arc_alt: rhsusf_mich_bare_norotos_arc { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_semi; + class rhsusf_mich_bare_alt_semi: rhsusf_mich_bare_semi { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_semi; + class rhsusf_mich_bare_norotos_alt_semi: rhsusf_mich_bare_norotos_semi { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_arc_semi; + class rhsusf_mich_bare_norotos_arc_alt_semi: rhsusf_mich_bare_norotos_arc_semi { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_tan; + class rhsusf_mich_bare_alt_tan: rhsusf_mich_bare_tan { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_tan; + class rhsusf_mich_bare_norotos_alt_tan: rhsusf_mich_bare_norotos_tan { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_arc_tan; + class rhsusf_mich_bare_norotos_arc_alt_tan: rhsusf_mich_bare_norotos_arc_tan { + HEARING_PROTECTION_PELTOR + }; + class H_PilotHelmetHeli_B; class H_CrewHelmetHeli_B; class rhsusf_hgu56p: H_PilotHelmetHeli_B { - ace_hearing_protection = 0.85; - ace_hearing_lowerVolume = 0.75; + HEARING_PROTECTION_VICCREW }; class rhsusf_hgu56p_mask: H_CrewHelmetHeli_B { - ace_hearing_protection = 0.85; - ace_hearing_lowerVolume = 0.75; + HEARING_PROTECTION_VICCREW }; class H_HelmetB; class RHS_jetpilot_usaf: H_HelmetB { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + HEARING_PROTECTION_VICCREW }; }; From f7d9a165f6adef07a4ecfd7be7931a5d5c1750a6 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 16 May 2017 21:40:24 -0500 Subject: [PATCH 91/94] Disable aircraft flightmodel changes (#5167) * Disable aircraft flightmodel changes * Remove files --- addons/aircraft/CfgVehicles.hpp | 9 -------- addons/aircraft/flightmodel_alca.hpp | 23 --------------------- addons/aircraft/flightmodel_thunderbolt.hpp | 21 ------------------- addons/aircraft/flightmodel_yak.hpp | 20 ------------------ 4 files changed, 73 deletions(-) delete mode 100644 addons/aircraft/flightmodel_alca.hpp delete mode 100644 addons/aircraft/flightmodel_thunderbolt.hpp delete mode 100644 addons/aircraft/flightmodel_yak.hpp diff --git a/addons/aircraft/CfgVehicles.hpp b/addons/aircraft/CfgVehicles.hpp index f5f496505e..8f3be35873 100644 --- a/addons/aircraft/CfgVehicles.hpp +++ b/addons/aircraft/CfgVehicles.hpp @@ -223,25 +223,16 @@ class CfgVehicles { class Plane_CAS_01_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - class Turrets; - - #include }; class Plane_CAS_02_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - class Turrets; - - #include }; class Plane_Fighter_03_base_F: Plane_Base_F { lockDetectionSystem = 12; incomingMissileDetectionSystem = 16; - class Turrets; - - #include }; class UAV_01_base_F: Helicopter_Base_F { diff --git a/addons/aircraft/flightmodel_alca.hpp b/addons/aircraft/flightmodel_alca.hpp deleted file mode 100644 index afe74ef9fd..0000000000 --- a/addons/aircraft/flightmodel_alca.hpp +++ /dev/null @@ -1,23 +0,0 @@ -acceleration = 300; -maxSpeed = 936; -irScanRangeMin = 500; -irScanRangeMax = 5000; -aileronSensitivity = 0.64; -elevatorSensitivity = 0.682; -rudderInfluence = 0.001; -aileronControlsSensitivityCoef = 3; -elevatorControlsSensitivity = 2; -rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.6, 0.73, 0.62, 0.52, 0.39, 0.33, 0.28}; -aileronCoef[] = {0.5, 0.68, 0.75, 0.86, 0.92, 0.96, 1}; -rudderCoef[] = {0.9, 0.75, 0.58, 0.45, 0.38, 0.35, 0.3}; -envelope[] = {0, 0.06, 1.2, 3, 3.6, 3.75, 3.65, 3.45, 3.3, 2.8, 2.4, 1.9, 1.5}; -angleOfIndicence = 0.0523599; //determines velocity vector behaviour, how quickly it catches up with where your nose is pointing, I think -draconicForceXCoef = 7.5; //max angle of attack, lower value gives higher aoa -draconicForceYCoef = 0.2198; //Something to do with bleed off of speed, low values seem to increase bleed off -draconicForceZCoef = 5.12; //???? -draconicTorqueXCoef = 0.18; //resistance to elevator input, also impacts speed degradation -draconicTorqueYCoef = 0.000017; -thrustCoef[] = {1.3, 1.27, 1.24, 1.2, 1.17, 1.15, 1.13, 1.1, 1.06, 1, 0.94, 0.72, 0.51, 0.4, 0.25, 0}; -gunAimDown = 0.029; -flapsFrictionCoef = 0.32; diff --git a/addons/aircraft/flightmodel_thunderbolt.hpp b/addons/aircraft/flightmodel_thunderbolt.hpp deleted file mode 100644 index 0f99f5ef91..0000000000 --- a/addons/aircraft/flightmodel_thunderbolt.hpp +++ /dev/null @@ -1,21 +0,0 @@ -maxSpeed = 736; -aileronSensitivity = 0.85; -elevatorSensitivity = 0.75; -rudderInfluence = 0.001; -aileronControlsSensitivityCoef = 3; -elevatorControlsSensitivity = 2; -rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.7, 0.75, 0.75, 0.65, 0.55, 0.45, 0.35}; -aileronCoef[] = {0.6, 0.85, 0.88, 0.92, 0.95, 0.97, 1}; -rudderCoef[] = {0.8, 0.75, 0.65, 0.5, 0.4, 0.33, 0.3}; -flapsFrictionCoef = 0.35; -angleOfIndicence = 0.0523599; -draconicForceXCoef = 9.5; -draconicForceYCoef = 0.56; -draconicForceZCoef = 0.1; -draconicTorqueXCoef = 0.58; -draconicTorqueYCoef = 0.00013; -envelope[] = {0, 0, 0.75, 2.4, 3.6, 3.8, 3.7, 3.2, 2.2, 1.7, 0.9}; -thrustCoef[] = {1, 1.2, 1.3, 1.25, 1.06, 1.01, 1, 0.92, 0.75, 0.65, 0.5, 0.25, 0}; -acceleration = 265; -landingSpeed = 220; diff --git a/addons/aircraft/flightmodel_yak.hpp b/addons/aircraft/flightmodel_yak.hpp deleted file mode 100644 index 9ba4c40c76..0000000000 --- a/addons/aircraft/flightmodel_yak.hpp +++ /dev/null @@ -1,20 +0,0 @@ -maxSpeed = 1059; -acceleration = 300; -aileronSensitivity = 0.635; -elevatorSensitivity = 0.814; -rudderInfluence = 0.001; -aileronControlsSensitivityCoef = 3; -elevatorControlsSensitivity = 2; -rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.6, 0.76, 0.7, 0.65, 0.58, 0.47, 0.43}; -aileronCoef[] = {0.5, 0.85, 0.87, 0.89, 0.92, 0.95, 1}; -rudderCoef[] = {0.8, 0.7, 0.6, 0.5, 0.4, 0.32, 0.27}; -angleOfIndicence = 0.0523599; -draconicForceXCoef = 7.6; -draconicForceYCoef = 0.75; -draconicForceZCoef = 0.085; -draconicTorqueXCoef = 0.815; -draconicTorqueYCoef = 0.000152; -envelope[] = {0, 0.446, 1.5, 3.9, 5.2, 4.8, 4.2, 3.5, 2, 1, 0.5}; -thrustCoef[] = {1, 1.2, 1.7, 1.7, 1.65, 1.54, 1.32, 1.1, 0.95, 0.75, 0.5, 0.35, 0}; -flapsFrictionCoef = 0.32; From cd5dcf56fe93d023e8201f42c7b82d2f51a106f9 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 18 May 2017 17:23:01 -0500 Subject: [PATCH 92/94] Use correct TransportX type for ace items (#5168) * Use correct TransportX type for ace items * Fix messing with flare colors --- addons/grenades/CfgVehicles.hpp | 38 +++++++++++++-------------- addons/minedetector/CfgVehicles.hpp | 6 ++--- addons/mx2a/CfgVehicles.hpp | 8 +++--- addons/overheating/CfgVehicles.hpp | 40 ++++++++++++++--------------- addons/vector/CfgVehicles.hpp | 8 +++--- addons/yardage450/CfgVehicles.hpp | 8 +++--- 6 files changed, 54 insertions(+), 54 deletions(-) diff --git a/addons/grenades/CfgVehicles.hpp b/addons/grenades/CfgVehicles.hpp index 1315ccf611..f9ac60d9fe 100644 --- a/addons/grenades/CfgVehicles.hpp +++ b/addons/grenades/CfgVehicles.hpp @@ -2,40 +2,40 @@ class CfgVehicles { class NATO_Box_Base; class Box_NATO_Grenades_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_White,12); - MACRO_ADDITEM(ACE_HandFlare_Green,12); - MACRO_ADDITEM(ACE_M84,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_White,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Green,12); + MACRO_ADDMAGAZINE(ACE_M84,12); }; }; class EAST_Box_Base; class Box_East_Grenades_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_Yellow,12); - MACRO_ADDITEM(ACE_HandFlare_Red,12); - MACRO_ADDITEM(ACE_M84,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_Yellow,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Red,12); + MACRO_ADDMAGAZINE(ACE_M84,12); }; }; class IND_Box_Base; class Box_IND_Grenades_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_Yellow,12); - MACRO_ADDITEM(ACE_HandFlare_Green,12); - MACRO_ADDITEM(ACE_M84,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_Yellow,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Green,12); + MACRO_ADDMAGAZINE(ACE_M84,12); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_White,12); - MACRO_ADDITEM(ACE_HandFlare_Red,12); - MACRO_ADDITEM(ACE_HandFlare_Green,12); - MACRO_ADDITEM(ACE_HandFlare_Yellow,12); - MACRO_ADDITEM(ACE_M84,12); - MACRO_ADDITEM(ACE_M14,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_White,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Red,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Green,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Yellow,12); + MACRO_ADDMAGAZINE(ACE_M84,12); + MACRO_ADDMAGAZINE(ACE_M14,12); }; }; }; diff --git a/addons/minedetector/CfgVehicles.hpp b/addons/minedetector/CfgVehicles.hpp index 14273b108c..ab6c06b4cb 100644 --- a/addons/minedetector/CfgVehicles.hpp +++ b/addons/minedetector/CfgVehicles.hpp @@ -1,9 +1,9 @@ class CfgVehicles { class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_VMM3,4); - MACRO_ADDITEM(ACE_VMH3,4); + class TransportWeapons { + MACRO_ADDWEAPON(ACE_VMM3,4); + MACRO_ADDWEAPON(ACE_VMH3,4); }; }; diff --git a/addons/mx2a/CfgVehicles.hpp b/addons/mx2a/CfgVehicles.hpp index c450133ba7..51038b9625 100644 --- a/addons/mx2a/CfgVehicles.hpp +++ b/addons/mx2a/CfgVehicles.hpp @@ -6,15 +6,15 @@ class CfgVehicles { scopeCurator = 2; displayName = CSTRING(DisplayName); vehicleClass = "Items"; - class TransportWeapons { - MACRO_ADDWEAPON(ACE_MX2A,1); + class TransportItems { + MACRO_ADDITEM(ACE_MX2A,1); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportWeapons { - MACRO_ADDWEAPON(ACE_MX2A,6); + class TransportItems { + MACRO_ADDITEM(ACE_MX2A,6); }; }; }; diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index a096754ce3..2d6a48b7b3 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -68,62 +68,62 @@ class CfgVehicles { class FIA_Box_Base_F; class Box_NATO_Support_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class B_supplyCrate_F: ReammoBox_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class Box_East_Support_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class O_supplyCrate_F: B_supplyCrate_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class Box_IND_Support_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class Box_FIA_Support_F: FIA_Box_Base_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class I_supplyCrate_F: B_supplyCrate_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class IG_supplyCrate_F: ReammoBox_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class C_supplyCrate_F: ReammoBox_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,6); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,6); }; }; }; diff --git a/addons/vector/CfgVehicles.hpp b/addons/vector/CfgVehicles.hpp index f06f79aa12..23aa8d7412 100644 --- a/addons/vector/CfgVehicles.hpp +++ b/addons/vector/CfgVehicles.hpp @@ -6,15 +6,15 @@ class CfgVehicles { scopeCurator = 2; displayName = CSTRING(VectorName); vehicleClass = "Items"; - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Vector,1); + class TransportItems { + MACRO_ADDITEM(ACE_Vector,1); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Vector,6); + class TransportItems { + MACRO_ADDITEM(ACE_Vector,6); }; }; }; diff --git a/addons/yardage450/CfgVehicles.hpp b/addons/yardage450/CfgVehicles.hpp index d8f2ccabe3..2dc52de68a 100644 --- a/addons/yardage450/CfgVehicles.hpp +++ b/addons/yardage450/CfgVehicles.hpp @@ -6,15 +6,15 @@ class CfgVehicles { scopeCurator = 2; displayName = CSTRING(DisplayName); vehicleClass = "Items"; - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Yardage450,1); + class TransportItems { + MACRO_ADDITEM(ACE_Yardage450,1); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Yardage450,4); + class TransportItems { + MACRO_ADDITEM(ACE_Yardage450,4); }; }; }; From d4a6caf2b1fdf2d58252ae750059ad46c065350c Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 22 May 2017 13:19:43 -0500 Subject: [PATCH 93/94] Just warn for old compat pbos (#5177) * Just warn for old compat pbos * Use CBA_fnc_error big warning box * fix caps --- addons/common/functions/fnc_checkFiles.sqf | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf index 98736a6dba..f0821f3f4c 100644 --- a/addons/common/functions/fnc_checkFiles.sqf +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -41,18 +41,29 @@ private _addons = "true" configClasses (configFile >> "CfgPatches");// _addons = _addons apply {toLower configName _x};// _addons = _addons select {_x find "ace_" == 0}; +private _oldCompats = []; { if (getText (configFile >> "CfgPatches" >> _x >> "versionStr") != _version) then { private _errorMsg = format ["File %1.pbo is outdated.", _x]; ERROR(_errorMsg); - if (hasInterface) then { - ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + if ((_x select [0, 10]) != "ace_compat") then { + if (hasInterface) then { + ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + }; + } else { + _oldCompats pushBack _x; // Don't block game if it's just an old compat pbo }; }; false } count _addons; +if (!(_oldCompats isEqualTo [])) then { + [{ + // Lasts for ~10 seconds + ERROR_WITH_TITLE_1("The following ACE compatiblity PBOs are outdated", "%1", _this); + }, _oldCompats, 1] call CBA_fnc_waitAndExecute; +}; /////////////// // check dlls From e3fd1612e2b0ef2b32ab4d23ac35a4a51e202cb6 Mon Sep 17 00:00:00 2001 From: Andrea Verano Date: Tue, 23 May 2017 20:44:17 +0200 Subject: [PATCH 94/94] Italian translation (Add & Fix) (#5193) Added Italian translation for: -advanced fatigue -advanced throwing -cook off -dogtags -gunbag -ui-scopes and much more... Fixed a lot of grammatical errors --- addons/advanced_ballistics/stringtable.xml | 14 +++---- addons/advanced_fatigue/stringtable.xml | 15 ++++++- addons/advanced_throwing/stringtable.xml | 23 ++++++++++- addons/cargo/stringtable.xml | 10 +++-- addons/chemlights/stringtable.xml | 43 +++++++++++++++++++- addons/cookoff/stringtable.xml | 8 ++++ addons/disposable/stringtable.xml | 4 +- addons/dogtags/stringtable.xml | 9 ++++- addons/explosives/stringtable.xml | 4 +- addons/fastroping/stringtable.xml | 10 ++--- addons/gestures/stringtable.xml | 10 ++--- addons/gforces/stringtable.xml | 4 +- addons/goggles/stringtable.xml | 6 ++- addons/grenades/stringtable.xml | 5 ++- addons/gunbag/stringtable.xml | 8 +++- addons/javelin/stringtable.xml | 2 +- addons/laser/stringtable.xml | 1 + addons/logistics_wirecutter/stringtable.xml | 4 +- addons/map/stringtable.xml | 2 + addons/maptools/stringtable.xml | 4 ++ addons/medical_ai/stringtable.xml | 1 + addons/medical_blood/stringtable.xml | 5 ++- addons/minedetector/stringtable.xml | 11 +++++- addons/nametags/stringtable.xml | 3 +- addons/optionsmenu/stringtable.xml | 10 ++--- addons/overheating/stringtable.xml | 15 +++++-- addons/overpressure/stringtable.xml | 2 + addons/refuel/stringtable.xml | 28 ++++++------- addons/reload/stringtable.xml | 6 +-- addons/reloadlaunchers/stringtable.xml | 4 +- addons/repair/stringtable.xml | 17 ++++---- addons/respawn/stringtable.xml | 4 +- addons/safemode/stringtable.xml | 4 +- addons/scopes/stringtable.xml | 20 ++++++++++ addons/slideshow/stringtable.xml | 2 + addons/spectator/stringtable.xml | 3 +- addons/switchunits/stringtable.xml | 4 +- addons/tagging/stringtable.xml | 7 ++++ addons/trenches/stringtable.xml | 7 +++- addons/ui/stringtable.xml | 44 ++++++++++++++++++++- addons/zeus/stringtable.xml | 7 ++++ 41 files changed, 304 insertions(+), 86 deletions(-) diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 606009a2c8..31b9b56bb9 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -151,7 +151,7 @@ Active la balistique avancée pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs) Engedélyezi a fejlett ballisztikát az összes nem-helyi játékosnak (ez a funkció leronthatja a teljesítményt intenzív többjátékos tűzharcok alatt) Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере) - Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe degradare le prestazioni durante scontri intensi in multiplayer) + Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe ridurre le prestazioni durante scontri intensi in multiplayer) 非ローカルの全プレイヤーへアドバンスド バリスティックスを有効化します (マルチプレイで大規模な銃撃戦がおこなわれると、動作の低下を招きます) 고급 탄도학을 모든 비-로컬그룹에게도 적용합니다(적용 후 대규모 전투시 성능하락을 유발할 수 있습니다) @@ -179,7 +179,7 @@ Active tout le temps la balistique avancée quand un membre du groupe ouvre le feu Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel Всегда включает продвинутую баллистику когда стреляет член группы - Abilita sempre Balistica Avanzata quando un Membro del Gruppo spara + Abilita sempre Balistica Avanzata quando un membro del gruppo spara グループ メンバーが射撃した時、常にアドバンスド バリスティックスを有効化します 그룹 멤버가 발사시 항상 고급 탄도학을 적용합니다 @@ -235,7 +235,7 @@ La température de la munition influe sur la vélocité intiale A kezdősebesség a lőszer hőmérsékletétől függően változó Начальная скорость пули зависит от температуры - Velocità alla volata varia con la temperatura delle munizioni + La velocità dello sparo varia a seconda della temperatura delle munizioni 弾薬の温度により初速値を変化させます 탄약 온도에 비례해 총구 속도가 달라집니다 @@ -263,7 +263,7 @@ La longueur du canon influe sur la vélocité initale A kezdősebesség a cső hosszától függően változó Начальная скорость пули зависит от длины ствола - Velocità alla volata varia con la lunghezza della canna + La velocità di sparo varia a seconda della lunghezza della canna 銃身長により初速値を変化させます 총구 속도가 총열에 비례해 달라집니다 @@ -277,7 +277,7 @@ Activer l'effet balle traçante Nyomkövető-effekt engedélyezése Следы пуль - Abilita effetto di tracciatura dei proiettili + Abilita effetto dei Proiettili Traccianti 弾丸の痕跡表示を有効化 예광탄 효과 적용 @@ -291,7 +291,7 @@ Active une tracante pour les munitions de gros calibre (seulement visible en utilisant des optiques avancées) Engedélyezi a nagy kaliberű lövedékek nyomának vizuális követését (csak nagy teljesítményű optikán keresztül látható) Включает эффект следов пуль для больших калибров (видны только через мощную оптику) - Abilita effetto di tracciatura per proiettili di alto calibro (visibile solo attraverso ottiche ad alto potenziale) + Abilita effetto dei proiettili traccianti di alto calibro (visibile solo attraverso ottiche ad alto potenziale) 大口径の銃弾による弾丸の痕跡表示を有効化します (高倍率スコープを介してでしか見れません) 대구경 탄환에 예광탄 효과를 적용합니다(오직 고성능 조준경 사용시에만 보입니다) diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index 4a02cb07dd..02924c0ae9 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Współczynnik wydolności 성능 요인 Facteur de performance + Fattore Prestazione Influences the overall performance of all players with no custom factor. Higher means better. @@ -16,6 +17,7 @@ Wpływa na ogólną wydolność organizmu u wszystkich graczy bez ustawionego niestandardowego współczynnika. Więcej znaczy lepiej. 모든 성능이 임의로 설정된 값 없이 영향받습니다. 값이 클수록 더 나은 성능을 발휘합니다 Influence les performances générales de tous les joueurs sans facteurs personalisés. Une valeur plus élevée implique de meilleures performances. + Influenza qualsiasi prestazione di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore. Influences the overall performance of this unit. Higher means better. @@ -24,6 +26,7 @@ Wpływa na ogólną wydolność tej jednostki. Więcej znaczy lepiej. 모든 성능이 이 단위로 영향을 받습니다. 값이 클수록 더 나은 성능을 발휘합니다 Influence les performances générales de cette unité. Une valeur plus élevée implique de meilleures performances. + Influenza qualsiasi prestazione di questa unità. Maggiore significa migliore. Recovery Factor @@ -32,6 +35,7 @@ Współczynnik regeneracji 회복 요인 Facteur de récupération + Fattore Recupero Changes how fast the player recovers when resting. Higher is faster. @@ -40,6 +44,7 @@ Wpływa na czas regeneracji podczas postoju. Więcej znaczy szybciej. 얼마나 빨리 회복하는지를 바꿉니다. 값이 클수록 더 나은 성능을 발휘합니다 Change la vitesse à laquelle les joueurs récupèrent leur endurance lorsqu'ils se reposent. Une valeur plus élevée implique une récupération plus rapide. + Determina in quanto tempo il giocatore recupera quando rilassato. Maggiore significa migliore. Load Factor @@ -48,6 +53,7 @@ Współczynnik masy ekwipunku 부담 요인 Facteur d'encombrement + Fattore Caricamento Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence. @@ -56,6 +62,7 @@ Zmniejsza lub zwiększa wpływ ciężaru ekwipunku na wydolność gracza. Zero oznacza kompletny brak wpływu na wydolność. 플레이어가 무게에 따라 얼마나 영향받는지를 증가시키거나 감소시킵니다. 0의 경우 플레이어가 장비 무게에 영향받지 않습니다. Augmente ou réduit l'influence que le poids à sur les performances des joueurs. Zéro implique que le poids de l'équipement n'a pas d'influence sur les performances. + Incrementa o decrementa quanto il peso influenza le prestazioni dei giocatori. Zero significa che il peso dell'equipaggiamento non ha alcuna influenza nelle prestazioni. Terrain Gradient Factor @@ -64,6 +71,7 @@ Współczynnik terenu 지형 경사도 요인 Facteur d'inclinaison du terrain + Fattore Pendenza Terreno Sets how much steep terrain increases stamina loss. Higher means higher stamina loss. @@ -72,6 +80,7 @@ Wpływa na to w jakim stopniu stromy teren wpływa na utratę wytrzymałości. Więcej oznacza szybszą utratę wytrzymałości. 경사도에 따라 얼마나 피로해지는지를 정합니다. 값이 클수록 더 많은 피로를 유발합니다. Configure l'influence de l'inclinaison du terrain sur la perte d'endurance. Une valeur plus élevée implique une perte d'endurance plus importante. + Stabilisce quanto la pendenza del terreno incrementa la perdita della stamina. Maggiore significa più stamina persa. Enabled @@ -80,6 +89,7 @@ Włączone 활성화 Activé + Abilitato Enables/disables Advanced Fatigue. @@ -88,6 +98,7 @@ Włącza/wyłącza zaawansowaną wytrzymałość 고급 피로도 활성화/비활성화 Active/désactive la fatigue avancée. + Abilita/disabilita la Fatica Avanzata. Show stamina bar @@ -96,6 +107,7 @@ Pokaż pasek wytrzymałości 피로도 막대 Afficher la barre d'endurance + Mostra barra stamina Shows the stamina bar. @@ -104,6 +116,7 @@ Pokazuje pasek wytrzymałości. 피로도 막대를 보여줍니다. Affiche la barre d'endurance. + Mostra la barra della stamina. diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 2cc7a9c8b6..2874570523 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ Erweitertes Wurfsystem 고급 투척 Lancé amélioré + Lancio Avanzato Allows changing advanced throwing behaviour. @@ -18,6 +19,7 @@ Erlaubt es, das Verhalten des erweiterten Wurfsystems zu ändern. 고급 투척 행위를 허가합니다 Permet de changer la configuration du lancé amélioré. + Permette il cambiamento della modalità di tiro. Enable Advanced Throwing @@ -27,6 +29,7 @@ Aktiviere erweitertes Wurfsystem 고급 투척 활성화 Active le lancé amélioré + Abilita Lancio Avanzato Enables advanced throwing system. @@ -36,6 +39,7 @@ Aktiviert das erweiterte Wurfsystem. 고급 투척을 활성화 합니다 Active le système de lancé amélioré. + Abilita il sistema di lancio avanzato. Show Throw Arc @@ -45,6 +49,7 @@ Zeige Wurfbogen 투척 궤적 표시 Afficher l'arc de lancé + Mostra Arco di Tiro Enables visualization of the throw arc (where throwable will fly). @@ -54,6 +59,7 @@ Aktiviert die Visualisierung des Wurfbogens (wohin das Objekt geworfen werden wird). 투척 궤도를 시각화 합니다(투척물이 어디로 갈지) Active la visualisation de l'arc de lancé (où l'objet lancé va atterrir). + Abilita la visualizzazione dell'arco del tiro (dove l'oggetto lanciabile volerà). Show Throwing Mouse Controls @@ -63,6 +69,7 @@ Zeige Maussteuerung beim Werfen 마우스 조작 표시 Afficher les contrôles à la souris du lancé + Mostra Comandi Mouse Lancio Enables visual cues for mouse controls when throwable is prepared. @@ -72,6 +79,7 @@ Aktiviert visuelle Hinweise zur Maussteuerung, wenn ein Objekt zum Werfen vorbereitet wird. 투척물을 준비시 마우스 조작을 시각화해서 보여줍니다 Active les aides visuels pour les controles à la souris lorsqu'un lancé est préparé. + Abilita la visualizzazione dei controlli del mouse quando l'oggetto lanciabile è pronto. Enable Throwables Pick Up @@ -81,6 +89,7 @@ Aktiviere Aufheben von Wurfobjekten 투척물 줍기 활성화 Active la récupération des objets lancés + Abilita Raccogli Oggetti Enables ability to pick up throwables from the ground. @@ -90,6 +99,7 @@ Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben. 땅에 떨어진 투척물을 주울 수 있게 해줍니다. Active la capacité de récupérer les objets lancés sur le sol. + Abilita la possibilità di raccogliere un oggetto lanciabile da terra. Enable Attached Throwables Pick Up @@ -99,6 +109,7 @@ Aktiviere erneute Aufnahme befestigter Wurfobjekte 부착 투척물 줍기 활성화 Active le ramassage d'objets lançables attachés + Abilita Raccogli Oggetti Lanciabili da altri Oggetti Enables ability to pick up throwables from attached objects. @@ -108,6 +119,7 @@ Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen. 부착된 투척물을 주울 수 있게 해줍니다. Active la capacité à ramasser les objets lançables attaché à d'autres objets. + Abilita la possibilità di raccogliere gli oggetti lanciabili dagli altri oggetti. Prepare/Change Throwable @@ -117,6 +129,7 @@ Wurfobjekt vorbereiten/wechseln 투척물 준비/변경 Préparer/changer d'objet + Prepara/Cambia Oggetto lanciabile Throwable Drop Mode (Hold) @@ -126,6 +139,7 @@ Wurfobjekt Fallmodus (halten) 투척물 떨어뜨리기 모드(꾹눌러서) Mode de lancé de l'objet (Tenir) + Modalità Oggetto Gettabile (Mantenere) Throwable Drop Mode (Toggle) @@ -135,6 +149,7 @@ Wurfobjekt Fallmodus (umschalten) 투척물 떨어뜨리기 모드(토글) Mode de lancé de l'objet (Basculer) + Modalità Oggetto lanciabile Gettabile (Interruttore) Primed @@ -144,6 +159,7 @@ Scharf gemacht 뇌관 작동 Amorcer + Armato Throw @@ -153,6 +169,7 @@ Werfen 던지기 Lancer + Lanciare (Scroll) Change Mode @@ -162,6 +179,7 @@ (Scrollen) Modus wechseln (마우스 휠) 모드 변경 (Molette souris) Changer de mode + (Scorrere) Cambio Modalità (Scroll) Extend @@ -171,6 +189,7 @@ (Scrollen) Erweitern (마우스 휠) 연장 (Molette souris) Etendre + (Scorrere) Estendere (Click) Cook @@ -180,6 +199,7 @@ (Klicken) Abkochen (클릭) 예열 (Clique) Dégoupiller + (Click) Arma Pick Up @@ -189,6 +209,7 @@ Aufheben 줍기 Ramasser + Raccogli diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 9eefee62c1..1caeccb40a 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -243,7 +243,8 @@ 空中投下 Zrzut zaopatrzenia 공중 투하 - Largage aérien + Largage aérien + Lancio Aereo Unlevel Flight @@ -251,15 +252,18 @@ 機体が水平ではありません Nierówny lot 기체가 수평이 아닙니다 - Rétablir l'assiette + Rétablir l'assiette + Volo non Livellato Paradrop Time Coffecient 空中投下までの時間係数 + Coefficente Tempo Lancio Paracadute Modifier for how long it takes to paradrop a cargo item. カーゴ アイテムを空中投下するまでの時間を変更します。 + Modificato per quanto tempo ci impiega a paracadutare un oggetto cargo. diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index c95af9dc26..76e1ffd27e 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ Knicklichter 켐라이트 Cyalumes + Luce chimica Prepare %1 @@ -16,6 +17,7 @@ %1 vorbereiten %1 준비 Prépare %1 + Prepara %1 %1<br/>Prepared @@ -24,6 +26,7 @@ %1<br/>vorbereitet %1<br/>준비됨 %1<br/>prêt + %1 <br/> Preparata No inventory space @@ -33,7 +36,7 @@ Pas de place Nedostatek místa v inventáři Sem espaço no inventário - Non hai più spazio + Nessuno spazio nell'inventario Nincs több hely В инвентаре нет места インベントリに空きがありません @@ -46,6 +49,7 @@ [ACE] Knicklichter [ACE] 켐라이트 [ACE] Cyalume + [ACE] Luci chimiche Chemlight (Orange) @@ -54,6 +58,7 @@ Knicklicht (orange) 켐라이트 (주황) Cyalume (orange) + Luce chimica (Arancione) Orange Light @@ -62,6 +67,7 @@ Oranges Knicklicht 주황색 Lum. orange + Luce Arancione Type: Light - Orange<br />Rounds: 1<br />Used in: Hand @@ -70,6 +76,7 @@ Typ: Licht - orange<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 오렌지<br />수량: 1<br />사용처: 손 Type: Lumière - orange<br />Nbre: 1<br /> À main + Tipo: Luce - Arancione<br/>Rimanenti: 1<br/>Usata in: Mano Chemlight (White) @@ -78,6 +85,7 @@ Knicklicht (weiß) 켐라이트 (하양) Cyalume (blanc) + Luce chimica (Bianca) White Light @@ -86,6 +94,7 @@ Weißes Knicklicht 하얀색 Lum. blanche + Luce Bianca Type: Light - White<br />Rounds: 1<br />Used in: Hand @@ -94,6 +103,7 @@ Typ: Licht - weiß<br />Anzahl: 1<br />Benutzt in: Hand 종류:하얀색<br />수량: 1<br />사용처: 손 Type: Lumière - blanche<br />Nbre: 1<br /> À main + Tipo: Luce - Bianca<br/>Rimanenti: 1<br/>Usata in: Mano Chemlight (Hi Red) @@ -102,6 +112,7 @@ Knicklicht (rot, hell) 켐라이트 (밝은 빨간색) Cyalume (Hi rouge) + Luce chimica (Hi Rossa) Red Hi Light @@ -110,6 +121,7 @@ Helles, rotes Knicklicht 밝은 빨간색 Lum. rouge haute intensité + Luce Hi Rossa Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -118,6 +130,7 @@ Typ: Licht - rot, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 빨간색 (5분)<br />수량: 1<br />사용처: 손 Type: Lumière - rouge Hi (5 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Rossa Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano Chemlight (Hi Yellow) @@ -126,6 +139,7 @@ Knicklicht (gelb, hell) 켐라이트 (밝은 노란색) Cyalume (Hi jaune) + Luce chimica (Hi Gialla) Yellow Hi Light @@ -134,6 +148,7 @@ Helles, gelbes Knicklicht 밝은 노란색 Lum. jaune haute intensité + Luce Hi Gialla Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -142,6 +157,7 @@ Typ: Licht - gelb, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 노란색 (5분)<br />수량: 1<br />사용처: Hand Type: Lumière - Jaune Hi (5 minutes)Nbre: 1<br /> À main + Tipo: Luce - Gialla Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano Chemlight (Hi Orange) @@ -150,6 +166,7 @@ Knicklicht (orange, hell) 켐라이트 (밝은 주황색) Cyalume (Hi orange) + Luce chimica (Hi Arancione) Orange Hi Light @@ -158,6 +175,7 @@ Helles, oranges Knicklicht 밝은 주황색 Lum. orange haute intensité + Luce Hi Arancione Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -166,6 +184,7 @@ Typ: Licht - orange, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 주황색 (5분)<br />수량: 1<br />사용처: 손 Type: Lumière - orange Hi (5 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Arancione Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano Chemlight (Hi White) @@ -174,6 +193,7 @@ Knicklicht (weiß, hell) 켐라이트 (밝은 하얀색) Cyalume (Hi blanc) + Luce chimica (Hi Bianca) White Hi Light @@ -182,6 +202,7 @@ Helles, weißes Knicklicht 밝은 하얀색 Lum. blanche haute intensité + Luce Hi Bianca Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand @@ -190,6 +211,7 @@ Typ: Licht - weiß, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 하얀색 (5분)<br />수량: 1<br />사용처: 손 Type: Lumière - blanche Hi (5 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Bianca Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano Chemlight (IR) @@ -198,6 +220,7 @@ Knicklicht (IR) 켐라이트 (적외선) Cyalume (IR) + Luce chimica (IR) IR Light @@ -206,6 +229,7 @@ IR-Knicklicht 적외선 켐라이트 Lumière IR + Luce IR Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand @@ -214,6 +238,7 @@ Typ: Licht - infrarot<br />Anzahl: 1<br />Benutzt in: Hand 종류: 적외선<br />수량: 1<br />사용처: 손 Type: Lumière - infrarouge<br />Nbre: 1<br /> À main + Tipo: Luce - Infrarossi<br />Usata in: Mano Chemlight Shield (Empty) @@ -222,6 +247,7 @@ Knicklicht-Abschirmung (leer) 켐라이트 쉴드 (비어있음) Étui cyalume (vide) + Scudo Luce chimica (Vuoto) Shield for chemlights. Combine with chemlight to prepare reading light. @@ -230,6 +256,7 @@ Abschirmung für Knicklichter. Mit Knicklicht kombinieren, um Leselicht zu erhalten. 켐라이트를 위한 가림막입니다. 켐라이트와 같이 사용하여 읽을 때 씁니다. Étui pour cyalume. Combiné avec un cyalume pour obtennir un lampe de lecture. + Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura. Chemlight Shield (Green) @@ -238,6 +265,7 @@ Knicklicht-Abschirmung (grün) 켐라이트 쉴드 (초록) Étui cyalume (vert) + Scudo Luce Chimica (Verde) Green reading light. @@ -246,6 +274,7 @@ Grünes Leselicht. 초록빛 조명 Lampe d'orientation verte. + Luce da lettura Verde. Chemlight Shield (Red) @@ -254,6 +283,7 @@ Knicklicht-Abschirmung (rot) 켐라이트 쉴드 (빨강) Étui cyalume (rouge) + Scudo Luce Chimica (Rossa) Red reading light. @@ -262,6 +292,7 @@ Rotes Leselicht. 빨간색 조명 Lampe d'orientation rouge. + Luce da lettura Rossa. Chemlight Shield (Blue) @@ -270,6 +301,7 @@ Knicklicht-Abschirmung (blau) 켐라이트 쉴드 (파랑) Étui cyalume (bleu) + Scudo Luce Chimica (Blu) Blue reading light. @@ -278,6 +310,7 @@ Blaues Leselicht. 파란색 조명 Lampe d'orientation bleue. + Luce da lettura Blu. Chemlight Shield (Yellow) @@ -286,6 +319,7 @@ Knicklicht-Abschirmung (gelb) 켐라이트 쉴드 (노랑) Étui cyalume (jaune) + Scudo Luce Chimica (Gialla) Yellow reading light. @@ -294,6 +328,7 @@ Gelbes Leselicht. 노란색 조명 Lampe d'orientation jaune. + Luce da lettura Gialla. Chemlight Shield (Orange) @@ -302,6 +337,7 @@ Knicklicht-Abschirmung (orange) 켐라이트 쉴드 (주황) Étui cyalume (orange) + Scudo Luce Chimica (Arancione) Orange reading light. @@ -310,6 +346,7 @@ Oranges Leselicht. 주황색 조명 Lampe d'orientation orange. + Luce da lettura Arancione. Chemlight Shield (White) @@ -318,6 +355,7 @@ Knicklicht-Abschirmung (weiß) 켐라이트 쉴드 (하양) Étui cyalume (blanc) + Scudo Luce Chimica (Bianca) White reading light. @@ -326,6 +364,7 @@ Weißes Leselicht. 주황색 조명 Lampe d'orientation blanche. + Luce da lettura Bianca. diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 4aa9423b96..8e8e41ff4f 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -10,6 +10,7 @@ 쿡오프 현상 활성화 Aktywuj efekty samozapłonu amunicji Active le cook-off + Abilita Esplosione Enables cook off and related vehicle destruction effects. @@ -20,6 +21,7 @@ 쿡오프 현상을 활성화 하고 관련된 차량에 폭발 이펙트를 적용합니다. Aktywuje efekt samozapłonu amunicji na zniszczonych pojazdach. Active le cook-off (autocombustion des munitions) et les effets de destruction liés. + Abilita l'esplosione e i relativi effetti di distruzione del veicolo. Wreck (Turret) @@ -42,6 +44,7 @@ 탄약 상자 쿡오프 현상 활성화 Aktywuj samozapłon skrzyń z amunicją Cook-off caisses de munitions + Abilita esplosione cassa munizioni Enables cooking off of ammo boxes. @@ -50,6 +53,7 @@ 탄약 상자에 쿡오프 현상을 적용합니다. Aktywuje samozapłon skrzyń z amunicją Active le cook-off sur toutes les caisses de munitions. + Abilita l'esplosione della cassa di munizioni. Enable Ammunition cook off @@ -58,6 +62,7 @@ 탄약 쿡오프 현상 활성화 Aktywuj samozapłon amunicji Active le cook-off des munitions + Abilita Esplosione munizioni Enables Ammunition cook off. Fires ammunition projectiles while vehicle is on fire and has ammunition. @@ -65,18 +70,21 @@ Ermöglicht Selbstzündung von Munition. Feuert Projektile der Munition ab, solange das Fahrzeug brennt und Munition besitzt. Aktywuje samozapłon amunicji. Wystrzeliwuje pociski podczas gdy pojazd płonie i posiada amunicję. Mets à feu les munitions lorsqu'un véhicule est en feu et contient des munitions. + Abilita l'esplosione delle munizioni. Spara munizioni di proiettili quando il veicolo va a fuoco e contiene munizioni. Ammunition cook off duration Czas trwania samozapłonu amunicji 弾薬の誘爆持続時間 Durée cook-off des munitions + Durata esplosione munizioni Multiplier for how long cook off lasts [Setting to 0 will disable ammo cookoff] Multiplicateur de la durée du cook-off des munitions [Une valeur de 0 désactive l'effet] Mnożnik decydujący jak długo ma trwać samozapłon amunicji [Ustawienie na 0 spowoduje wyłącznie samozapłonu] 誘爆の持続時間を乗数で設定。[0 に設定で誘爆を無効化] + Moltiplicatore della durata dell'esplosione [Impostare 0 disabiliterà l'esplosione delle munizioni] diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 29d9d5e232..3d9df039a1 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -10,7 +10,7 @@ Lanzador utilizado Elhasznált kilövőcső Отстрелянная труба - Tubo usato + Lanciatore usato Tubo utilizado 使用済み 사용함 diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml index 3e13f3621e..5aa5d80a4e 100644 --- a/addons/dogtags/stringtable.xml +++ b/addons/dogtags/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -10,6 +10,7 @@ Hundemarke 군번줄 Plaque d'identification + Piastrina Check Dog Tag @@ -20,6 +21,7 @@ Hundemarke prüfen 군번줄 확인 Vérifier les plaques d'identification + Controlla Piastrina Check @@ -30,6 +32,7 @@ Prüfen 확인 Vérifier + Controlla Take @@ -40,6 +43,7 @@ Nehmen 회수 Prendre + Prendi Dogtag taken from %1... @@ -50,6 +54,7 @@ Hundemarke von %1 genommen ... %1로부터 군번줄을 회수했습니다... Plaque d'identification pris sur %1... + Piastrina presa da %1... Somebody else has already taken the dogtag... @@ -60,7 +65,7 @@ Jemand anderes hat bereits die Hundemarke genommen ... 누군가 이미 군번줄을 회수해갔습니다... Quelqu'un d'autre a déjâ pris les plaques d'identification... + Qualcun altro ha già preso la piastrina... - diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 9b9296d3d4..e0cb44badf 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -883,6 +883,7 @@ Stolperdraht-Leuchtrakete 조명지뢰 Fusée éclairante avec fil de détente + Cavo d'innesco Type: Tripwire flare - Ignites a non-lethal flare when triggered.<br />Rounds: 1<br />Used on: Ground @@ -892,6 +893,7 @@ Typ: Stolperdraht-Leuchtrakete - Schießt bei Auslösung eine nicht-tödliche Leuchtrakete ab.<br />Ladungen: 1<br />Benutzt auf: Boden 종류: 조명지뢰 - 작동시 무해한 조명을 사출합니다.<br />장탄수: 1<br />사용처: 지면 Type : Fusée éclairante avec fil de détente - Allume une fusée éclairante lorsque déclenché. <br />Coups : 1<br />Utilisé sur : le sol + Tipo: Cavo d'innesco - Sfocio un abbaglio non letale quanto attivato. <br />Rimanenti: 1<br />Usato: A terra diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index 362b422fa1..26573f3e0d 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,7 +7,7 @@ Wyposaż FRIES Equiper le FRIES Equipar FRIES - Equipaggia la FRIES + Equipaggia il FRIES Vybavit FRIES Equipar FRIES Десантирование по канатам @@ -20,7 +20,7 @@ Wyposaża kompatybilne helikoptery w zestaw Fast Rope Insertion Extraction System. Equipe les hélicoptères compatibles avec un Module Fast Rope Insertion Extraction System. Equipar helicoptero compatible con un Sistema de Inserción Extracción Fast Rope. - Equipagga l'elicottero compatibile con il Fast Rope Insertion Exstraction System + Equipagga l'elicottero compatibile con il Fast Rope Insertion Extraction System Vybavit kompatibilní vrtulníky systémem Fast Rope Insertion Extraction (FRIES). Equipa um helicóptero compatível com o Fast Rope Insertion Exctraction System. Снаряжает совместимые вертолеты оборудованием для спуска десанта по канатам. @@ -59,7 +59,7 @@ Zjedź na linie Descendre à la corde Descender por la cuerda - Scendi sulla corda + Scendi dalla corda SLANIT Descida rápida Спуститься по канату @@ -85,7 +85,7 @@ Wyposaż helikopter w FRIES Equiper l'hélicoptère avec le FRIES Equipar helicoptero con FRIES - Equipaggia l'elicottero con FRIES + Equipaggia l'elicottero con il FRIES Vybavit vrtulník pomocí FRIES Equipar helicóptero com FRIES Снарядить вертолет канатами для спуска diff --git a/addons/gestures/stringtable.xml b/addons/gestures/stringtable.xml index 46a3fdba6a..4f5063721b 100644 --- a/addons/gestures/stringtable.xml +++ b/addons/gestures/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,7 +8,7 @@ ACE Posunky ACE Gestes ACE Kézjelek - ACE Gesti + Gesti ACE ACE Gestos ACE Жесты ACE Gestos @@ -236,7 +236,7 @@ Zeige Gesten im Selbst-Interkationsmenü, lege sie auf Schnelltasten, oder deaktiviere sie vollständig. Zobrazit posunky pro vlastní interakční menu, nebo prostě použít klávesové zkratky, nebo to zakázat úplně Pokaż listę gestów w menu własnej interakcji, użyj tylko skrótów na klawiaturze lub wyłącz całkowicie - Mostra Gesti nel Menù Interazione Personale, o usa solamente Hotkey, o disabilita completamente + Mostra Gesti nel Menù Interazione Personale, o usa solamente tasti di scelta rapida, o disabilita completamente Muestror los gestos en el menú de interacción propia, utilizar solo combinación de teclas o desactivarlos completamente Afficher les gestes dans le menu d'interaction personnel, ou seulement utiliser les touches, ou desactiver complètement. Mostra gestos no menu de interação, ou utilize um dos atalhos de teclado ou desative completamente @@ -249,7 +249,7 @@ Nur Schnelltasten Pouze klávesové zkratky Tylko skróty klaw. - Solo Hotkey + Solo tasti di scelta rapida Solo mediante teclas Seulement les touches Somente atalhos de teclado @@ -262,7 +262,7 @@ Schnelltasten+ Interaktionsmenü Klávesové zkratky + interakční menu Skróty klaw. + menu interakcji - Hotkey + Menù Interazione + Tasti di scelta rapida + Menù Interazione Teclas y Menú de Interacción Touches + menu d'interaction Atalhos + Menu de Interação diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index 4bce899bd1..2abb558b58 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -12,6 +12,7 @@ G による効果 Efekty przeciążeń 중력가속도 효과 + Effetti forza G Only Aircraft @@ -24,6 +25,7 @@ 航空機のみ Tylko samoloty 비행기에만 적용 + Solo Aerei diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 6d37b00e21..c06d310ef7 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -37,6 +37,7 @@ Brilleneffekt 고글 효과 Effets des lunettes + Effetto Occhiali Tint @@ -46,6 +47,7 @@ Tönung 색조 Teinte + Colore Tint + Effects @@ -55,7 +57,7 @@ Tönung + Effekte 색조+효과 Teinte + effets + Colore + Effetti - diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index cbabdd01b2..fe102bec8f 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -303,6 +303,7 @@ Granat zapalający AN-M14 AN-M14 소이 수류탄 Grenade incendiaire AN-M14 + AN-M14 Granata Incendiaria AN-M14 @@ -312,6 +313,7 @@ AN-M14 AN-M14 AN-M14 + AN-M14 Incendiary grenade used to destroy weapons, ammunition and other equipment. @@ -321,6 +323,7 @@ Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu. 소이 수류탄은 무기나 탄약 그리고 장비를 파괴할때 쓰입니다. Grenade incendiaire utilisé pour détruire des armes, munitions et autres équipements. + Granata incendiaria usata per distruggere armi, munizioni e altri equipaggiamenti. diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index 51a1e63cdf..5e5d8a7526 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -10,6 +10,7 @@ ガンバッグ Torba na broń 총가방 + Borsa per Armi Gunbag (Tan) @@ -20,6 +21,7 @@ ガンバッグ (タン) Torba na broń (jasnobrązowa) 총가방 (황갈색) + Borsa per Armi (Tan) Put weapon into gunbag @@ -30,6 +32,7 @@ ガンバッグへ武器を入れる Włóż broń do torby 무기를 총가방에 넣기 + Metti l'arma nella borsa per armi Get weapon out of gunbag @@ -40,6 +43,7 @@ ガンバッグから武器を出す Wyciągnij broń z torby 무기를 총가방에서 꺼내기 + Prendi l'arma dalla borsa per armi Status @@ -50,6 +54,7 @@ 中身 Status 상태 + Stato Gunbag Empty @@ -60,6 +65,7 @@ ガンバッグは空 Torba jest pusta 총가방 비어있음 + Borsa per armi vuota diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index ece03b3699..a1f786da72 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -9,7 +9,7 @@ Namierz cel (przytrzymaj) Verrouiller la cible (maintenir) Célpontra állás (Lenyomva tartott) - Aggangia il bersagio + Aggangia il bersaglio Fijar objetivo (Mantener) Travar Alvo(Segurar) 目標を捕捉 (押しっぱ) diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index 4014441551..7e8db0c87c 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -8,6 +8,7 @@ 레이저 분산 시뮬레이션 수 Wskaźnik poziomu rozproszenia wiązki lasera Compte de la simulation de la dispersion du laser + Contatore Simulazione Dispersione Laser Laser Code diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index f13cd9a288..542b152af3 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -24,7 +24,7 @@ Służą do cięcia drutu i płotów Pince coupante Drótok, huzalok, és kábelek vágására alkalmas olló. - Trancia da ferro + Tronchese Cortador de Arame ワイヤーカッター 절단기 diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index f5eb043e80..d7fb92a3d6 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -445,6 +445,7 @@ GPS피아식별기 끄기 Wyłącz BFT Désactive le BFT + Disablita BFT Always disable Blue Force Tracking for this group. @@ -453,6 +454,7 @@ 이 그룹에 한해 GPS피아식별기를 항상 끕니다. Zawsze wyłączaj Blue Force Tracking dla tej grupy. Désactive en permanence le Blue Force Tracking pour ce groupe. + Disabilita sempre il Blue Force Tracking per questo gruppo. diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 8828aed603..da72ba5a52 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -163,6 +163,7 @@ Klawisz obrotu narzędzi nawigacyjnych Taste zum Drehen des Kartenwerkzeugs 독도용 도구 돌리기 키 + Ruota Strumenti di Mappatura Modifier key to allow rotating map tools @@ -172,6 +173,7 @@ Modyfikator pozwalający na obracanie narzędzi nawigacyjnych Steuerungstaste, um Drehung des Kartenwerkzeugs zu ermöglichen. 독도용 도구를 돌리기 위한 키를 변경할 수 있습니다. + Tasto modifica per consentire strumenti di mappatura rotanti Draw straight lines with maptools @@ -180,6 +182,7 @@ 독도용 도구로 직선 그리기 Rysuj proste linie przy użyciu narzędzi nawigacyjnych Tracer des lignes droites + Disegna linee dritte con gli strumenti di mappatura Draw on the edge of maptools to draw straight lines. Note: Must hover at midpoint to delete. @@ -188,6 +191,7 @@ 독도용 도구 가장자리에 직선을 그립니다. 주의: 삭제하기 위해선 선의 중앙에 가져다 대십시요 Przeciągnij po krawędzi narzędzi nawigacyjnych by narysować prostą linię. Uwaga: aby usunąć linię - nalezy ustawić kursor nad jej środkiem. Utiliser le bord des outils de navigation pour tracer des lignes droites. Note: l'on doit survoler le milieu du trait pour pouvoir le supprimer. + Disegna sul bordo degli strumenti di mappatura per disegnare linee dritte. Nota: Deve spostarsi al centro per essere cancellato. diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index c7eba9b03a..b2fdbbb773 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -9,6 +9,7 @@ サーバーと HC のみ Tylko serwer i HC Seulement sur le server ou le HC + Solo Server e HC diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index bd401f5c39..4bbd2c19a1 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ 오직 플레이어만 Tylko gracze Joueurs seulement + Solo Giocatori Enable Blood Drops @@ -16,6 +17,7 @@ 피흘리기 활성화 Włącz ślady krwi na ziemi Active les gouttes de sang + Abilita Perdite di Sangue Enable or disable Blood Drops created on bleeding and taking damage @@ -23,6 +25,7 @@ Aktiviere oder deaktiviere Blutspritzer, die durch Blutungen oder bei Schadensnahme entstehen. Włącz lub wyłącz pozostawianie śladów krwi na ziemi kiedy postać odnosi obrażenia bądź krwawi (Dés)active les gouttes de sang lors d'un saignement ou de blessure + Abilita o disabilita la Perdite di Sangue create sanguinando e prendendo danno diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml index 14ff729334..456873d2c4 100644 --- a/addons/minedetector/stringtable.xml +++ b/addons/minedetector/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -10,6 +10,7 @@ Wykrywacz metali Metalldetektor 지뢰탐지기 + Metal detector Metal detector @@ -20,6 +21,7 @@ Wykrywacz metali Metalldetektor 지뢰탐지기 + Metal detector Activate @@ -30,6 +32,7 @@ Aktywuj Aktivieren 작동 + Attiva Deactivate @@ -40,6 +43,7 @@ Deaktywuj Deaktivieren 끄기 + Disattiva Connect Headphones @@ -50,6 +54,7 @@ Kopfhörer verbinden 헤드폰에 연결 Connecter les écouteurs + Connetti Auricolari Disconnect Headphones @@ -60,6 +65,7 @@ Kopfhörer trennen 헤드폰 연결끊기 Déconnecter les écouteurs + Disconnetti Auricolari Headphones Connected @@ -70,6 +76,7 @@ Kopfhörer verbunden 헤드폰 연결됨 Écouteurs connectés + Auricolari Connessi Headphones Disconnected @@ -80,7 +87,7 @@ Kopfhörer getrennt 헤드폰 연결끊김 Écouteurs déconnectés + Auricolari Disconnessi - diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 628384bc19..9a4acbe108 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -469,6 +469,7 @@ Ukryj na brzegach ekranu 화면 가장자리에서 사라짐 Estomper sur les bords de l'écran + Sfocatura nei bordi dello schermo diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 6d5b70baa7..58929567af 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -24,7 +24,7 @@ Napraw animację Corriger animation Animációk kijavítása - Fixa l'animazione + Sistema l'animazione Arrumar Animação アニメーションを修正 동작 고정 @@ -150,7 +150,7 @@ Tableau. Séparation par ,. Tabulka. Odděl elementy použitím ,. Array. Válasszad el az elemeket vesszővel. - Array. Separa gli elementi usando ,. + Vettor. Separa gli elementi usando ,. Vetor. Separe elementos usando *,*. アライ。,を使うことで区別できます。 배열. 요소를 ,. 로 나눔 @@ -445,7 +445,7 @@ Fix Headbug Fix Headbug Corregir error de cabeza (headbug) - Sistema Headbug + Sistema Bug della Testa ヘッドバグ修正 헤드버그 수정 @@ -473,7 +473,7 @@ Nouveautés ACE ACE hírek Новости ACE - News ACE + Novità ACE ACE からのお知らせ ACE 새소식 diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 8c2eef1732..faa0462893 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -266,7 +266,7 @@ Смена ствола... Cső kicserélése folyamatban... Substituindo cano... - Sto sostituendo la canna... + Sostituendo la canna... 銃身を交換中・・・ 총열 교체중... @@ -321,7 +321,7 @@ Hőmérséklet ellenőrzése... Zjišťuju teplotu... Conferindo temperatura... - Sto controllando la temperatura... + Controllando la temperatura... Проверка температуры... 温度を測っている・・・ 무기 온도 확인중... @@ -336,6 +336,7 @@ Sprawdź temperaturę zapasowych luf Temperatur der Wechselläufe prüfen 총열 온도 확인 + Controlla la temperatura della canna di ricambio Checking spare barrels temperatures... @@ -347,6 +348,7 @@ Sprawdzanie temperatury zapasowych luf... Prüfe Temperatur der Wechselläufe ... 총열 온도 확인중... + Controllando la temperatura della canna di ricambio... Temperature @@ -372,6 +374,7 @@ Zimne zapasowe lufy Kalte Wechselläufe 차가운 예비 총열 + Canna/e di Ricambio Fredda Warm Spare Barrel/s @@ -383,6 +386,7 @@ Ciepłe zapasowe lufy Warme Wechselläufe 따뜻한 예비 총열 + Canna/e di Ricambio Calda Hot Spare Barrel/s @@ -394,6 +398,7 @@ Gorące zapasowe lufy Heiße Wechselläufe 뜨거운 예비 총열 + Canna/e di Ricambio Molto Calda Very Hot Spare Barrel/s @@ -405,6 +410,7 @@ Bardzo gorące zapasowe lufy Sehr heiße Wechselläufe 매우 뜨거운 예비 총열 + Canna/e di Ricambio Estremamente Calda Extremely Hot Spare Barrel/s @@ -416,6 +422,7 @@ Ekstremalnie gorące zapasowe lufy Extrem heiße Wechselläufe 엄청나게 뜨거운 예비 총열 + Canna/e di Ricambio Rovente Overheating Enabled @@ -428,6 +435,7 @@ 過熱を有効化 Przegrzewanie włączone 과열 활성화 + Surriscaldamento Abilitato Master enable for the overheating/jamming module @@ -438,6 +446,7 @@ Główny włącznik modułu przegrzewania/zacinania się broni Hauptschalter, um die Überhitzung-/Ladehemmung-Module zu aktivieren 과열/탄걸림 최종 활성화 + Abilitazione master per il modulo di surriscaldamento / inceppamento diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index 89d8cf8b2d..a982ec488c 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -7,6 +7,7 @@ 초과압력 거리 계수 Mnożnik dystansu nadciśnienia Coéfficient de distance pour la surpression + Coefficente Distanza Sovrapressione Scales the overpressure effect [Default: 1] @@ -14,6 +15,7 @@ 초과압력의 효과 크기 [기본설정: 1] Skaluje efekt nadciśnienia [Domyślne: 1] Échelonne les effets de la surpression [Par défaut : 1] + Scala l'effetto di sovrapressione [Predefinito: 1] diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index c685b520de..0bc50bb63d 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -21,7 +21,7 @@ Скорость заправки Velocidade da vazão Rychlost tankování - Rateo Flusso + Portata Flusso Caudal de llenado Vitesse du ravitaillement 流量 @@ -60,7 +60,7 @@ Взять топливный шланг Pegar o bocal de combustível Vzít výdejní pistoli - Prenti manica benzina + Prendi manica benzina Tomar surtidor Prendre la pompe 給油ノズルを取る @@ -73,7 +73,7 @@ Берем топливный шланг... Pegando o bocal de combustível... Beru výdejní pistoli... - Sto prendendo manica benzina... + Prendendo manicotto benzina... Tomando surtidor... Prise de la pompe... 給油ノズルを取っている・・・ @@ -99,7 +99,7 @@ Присоединяем топливный шланг... Conectando o bocal de combustível... Připojuji výdejní pistoli... - Sto collegando la manica benzina... + Collegando manicotto benzina... Conectando surtidor... Connection de la pompe... 給油ノズルを接続している・・・ @@ -112,7 +112,7 @@ Отсоединить топливный шланг Desconectar o bocal de combustível Odpojit výdejní pistoli - Scollega manica benzina + Scollega manicotto benzina Desconectar surtidor Déconnecter la pompe 給油ノズルを外した @@ -151,7 +151,7 @@ Проверяем остаток топлива... Verificando combustível restante... Kontroluji zůstatek paliva... - Sto controllando la benzina rimanente... + Controllando la benzina rimanente... Verificando combustible remanente,,, Vérifie le carburant restant... 残燃料を見ている・・・ @@ -229,7 +229,7 @@ Останавливаем заправку... Parando reabastecimento... Zastavuji tankování... - Sto fermando il rifornimento... + Fermando il rifornimento... Deteniendo reabastecimiento... Arrête le ravitaillement... 給油をやめている・・・ @@ -255,7 +255,7 @@ Начинаем заправку... Começando reabastecimento... Spouštím tankování... - Sto iniziando il rifornimento... + Iniziando il rifornimento... Comenzando reabastecimiento... Début du ravitaillement... 給油を始めている・・・ @@ -281,7 +281,7 @@ Источник топлива пустой. A fonte de combustível está vazia. Zdroj paliva je prázdný. - La fonte di benzina èvuota. + La fonte di benzina è vuota. La fuente de combustible está vacía. La source de carburant est vide. 給油元は空です。 @@ -294,7 +294,7 @@ Достигнута максимальная длина шланга. Distância máxima da mangueira de combustível alcançada. Dosažena maximální délka hadice - Distanza massima della manica raggiunta. + Distanza massima della pompa raggiunta. Máxima longitud de manguera alcanzada. Tuyau tendu au maximum 給油ホースはもうこれ以上届かない。 @@ -346,7 +346,7 @@ Вернуть топливный шланг Retornar bocal de combustível Vrátit výdejní pistoli - Riponi manica benzina + Riponi manicotto benzina Devolver surtidor Retourner la pompe 給油ノズルを戻す @@ -359,7 +359,7 @@ Возвращаем топливный шланг... Retornando bocal de combustível... Vracím výdejní pistoli... - Sto riponendo la manica della benzina... + Riponendo la manica della benzina... Devolviendo el surtidor... Retourne la pompe 給油ノズルを戻している・・・ @@ -385,7 +385,7 @@ Проверяем счетчик топлива... Verificando contador de combustível... Konroluji palivoměr... - Sto controllando l'indicatore del livello benzina... + Controllando l'indicatore del livello benzina... Verificando el contador de combustible Vérification du compteur... 燃料計を見ている・・・ diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 10426344ed..4454bd3f9a 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -10,7 +10,7 @@ Sprawdź stan amunicji przy przeładowaniu broni Vérification des munitions au rechargement Lőszer ellenőrzése a fegyver újratöltésekor - Controlla le munizioni ricaricando + Controlla le munizioni durante il ricaricamento Conferir munição ao recarregar a arma 再装填された武器の弾薬を確認 재장전시 장탄수 확인 @@ -80,7 +80,7 @@ Podłączanie taśmy... Gurt anhängen... Töltényheveder összekötése folyamatban... - Attacco la tracolla... + Attaccando la tracolla... Ligando cintos... ベルトをつなげている・・・ 벨트 연결중... diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index cb9c610c56..c9ffa3cef8 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -24,7 +24,7 @@ Nabíjím odpalovač... Ładowanie wyrzutni... Kilövő betöltés alatt... - Carico il lanciamissili... + Caricando il lanciamissili... Recarregando lançador... ランチャーを装填している・・・ 무기 재장전중... diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index bdfa2001ad..d1926a47eb 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -51,7 +51,7 @@ Замена колеса... Měním kolo... Cambiando rueda... - Sto sostituendo la ruota... + Sostituendo la ruota... Remplacement de la roue... タイヤを交換中・・・ 바퀴 교체중... @@ -91,7 +91,7 @@ Снятие колеса... Odstraňuji kolo... Quitando rueda... - Sto rimuovendo la ruota... + Rimuovendo la ruota... Démontage de la roue... タイヤを外している・・ 바퀴 제거중... @@ -130,7 +130,7 @@ Замена гусеницы... Měním pás... Cambiando oruga... - Sto sostituendo il cingolo... + Sostituendo il cingolo... Remplacement de la chenille... 履帯を交換中・・・ 궤도 교체중... @@ -169,7 +169,7 @@ Снятие гусеницы... Odstraňuji pás... Quitando oruga... - Sto rimuovendo il cingolo... + Rimuovendo il cingolo... Enlèvement de la chenille... 履帯を外している・・・ 궤도 제거중... @@ -208,7 +208,7 @@ Ремонт транспорта... Opravuji vozidlo... Reparando vehículo... - Sto riparando il veicolo... + Riparando il veicolo... Réparation du véhicule... 車両を修理中・・・ 차량 수리중... @@ -339,7 +339,7 @@ Naprawianie... Opravuji... Reparando... - Sto riparando... + Riparando... javítása... Ремонтируем... 修理中・・・ @@ -353,7 +353,7 @@ Naprawianie %1... Opravuji %1... Reparando %1... - Sto riparando %1... + Riparando %1... %1 javítása... Ремонтируем %1... %1 を修理中・・・ @@ -1563,6 +1563,7 @@ 修理のためにエンジンを停止させる必要があります。 Silnik musi być wyłączony w celu naprawy 수리를 위해서는 엔진을 꺼야만 합니다 + Il motore deve essere spento per poter riparare diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 7a24936f65..a2d90acce4 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -330,7 +330,7 @@ ACE Respawn ACE Respawn ACE Возрождение - Respawn ACE + Rigenerazione ACE ACE リスポン ACE 재배치 diff --git a/addons/safemode/stringtable.xml b/addons/safemode/stringtable.xml index 29b84cb095..d2c7ff3fd6 100644 --- a/addons/safemode/stringtable.xml +++ b/addons/safemode/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -10,7 +10,7 @@ Biztonságos mód Предохранитель Sécurité - Sicura inserita + Modalità Sicura Modo de segurança 安全装置 안전 모드 diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index ce815a49df..d36161e99d 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -7,6 +7,7 @@ 조준경 Celowniki optyczne Scopes + Mirini Enable ACE Scope adjustment @@ -14,6 +15,7 @@ ACE 조준경 영점조작 활성화 Włącz ustawienia celowników optycznych ACE Active ACE Scope adjustment + Abilita Regolazione mirino ACE Enable adjustmet turrets on high powered scopes @@ -21,6 +23,7 @@ 고성능 조준경 조절 나사 활성화 Włącz pokrętła regulacyjne Permet de régler la hausse et la dérive sur les optiques de visée à fort grossissement + Abilita la regolazione delle torrette nei mirini a lunga gittata Force adjustment turrets @@ -28,6 +31,7 @@ 조절 나사 강제 Wymuś użycie pokręteł regulacyjnych Impose le réglage de la hausse/dérive + Forza la regolazione delle torrette Force usage of adjustmet turrets on high powered scopes @@ -35,6 +39,7 @@ 고성능 조준경의 조절 나사 사용을 강제합니다 Wymuś użycie pokręteł regulacyjnych dla celowników o dużym powiększeniu Impose le réglage de la hausse/dérive sur les optiques de visée à fort grossissement + Forza l'uso della regolazione nei mirini a lunga gittata Correct zeroing @@ -42,6 +47,7 @@ 영점 고치기 Poprawka zerowania Corrige le zérotage + Correggi azzeramento Corrects the zeroing of all small arms sights @@ -49,6 +55,7 @@ 모든 소화기의 영점을 고칩니다 Poprawia zerowanie wszystkich celowników broni ręcznej Corrige le zérotage des optiques de visée des petites armes + Corregge l'azzeramento di tutti i mirini di bassa portata Overwrite zero distance @@ -56,6 +63,7 @@ 영점거리 덮어쓰기 Nadpisuje ustawienie dla zerowego dystansu Remplace la distance de zérotage + Sovrascrivi la distanza zero Uses the 'defaultZeroRange' setting to overwrite the zero range of high power scopes @@ -63,6 +71,7 @@ 기존 고성능 조준경의 영점거리에 '기본설정 영점거리' 를 덮어씌웁니다 Używa 'defaultZeroRange' zamiast ustawionej odległości zerowania dla celowników o duzym przybliżeniu Utilise le paramètre 'defaultZeroRange' pour remplacer la distance de zérotage sur les optiques de visée à fort grossissement + Usa le impostazioni di "defaultZeroRange" (Portata Zero Predefinita) per sovrascrivere la portata zero dei mirini a lunga gittata Default zero distance @@ -70,6 +79,7 @@ 기본설정 영점거리 Domyślne zerowanie Distance de zérotage par défaut + Distanza zero predefinita High power scopes will be zeroed at this distance @@ -77,6 +87,7 @@ 고성능 조준경이 정해진 수만큼 영점거리를 맞추게 됩니다. Celowniki o dużym powiększeniu będą zerowane dla tej odległości Distance de zérotage par défaut des optiques de visée à fort grossissement + I mirini a lunga gittata verranno azzerrati a questa distanza Reference temperature @@ -84,6 +95,7 @@ 온도 기준 Referencyjna temperatura Température de référence + Temperatura di riferimento Temperature at which the scope was zeroed @@ -91,6 +103,7 @@ 조준경 영점조준시 온도 Temperatura, przy której celownik został wyzerowany Température de référence pour le zérotage des optiques + Temperatura a cui è stato azzerato il mirino Reference barometric pressure @@ -98,6 +111,7 @@ 기압 기준 Referencyjne ciśnienie barometryczne Pression barométrique de référence + Pressione barometrica di riferimento Barometric pressure at which the scope was zeroed @@ -105,6 +119,7 @@ 조준경 영점조준시 기압 Ciśnienie barometryczne, przy którym celownik został wyzerowany Pression barométrique de référence pour le zérotage des optiques + Pressione barometrica a cui è stato azzerato il mirino Reference humidity @@ -112,6 +127,7 @@ 습도 기준 Referencyjna wilgotność Humidité de référence + Umidità di riferimento Humidity at which the scope was zeroed @@ -119,6 +135,7 @@ 조준경 영점조준시 습도 Wilgotność powietrza, przy której celownik został wyzerowany Taux d'humidité de référence pour le zérotage des optiques + Umidità a cui è stato azzerato il mirino Deduce pressure from altitude @@ -126,6 +143,7 @@ 고도에 맞춰 기압 설정 Ciśnienie określone na podstawie wysokości Pression selon l'altitude + Ricava la pressione dall'altitudine Deduce the barometric pressure from the terrain altitude @@ -133,6 +151,7 @@ 주변 고도에 맞춰 기압을 설정합니다 Określ ciśnienie barometryczne na podstawie wysokości terenu Détermine la pression barométrique selon l'altitude du terrain + Ricava la pressione barometrica dall'altitudine del terreno Minor adjustment up @@ -266,6 +285,7 @@ 이 모듈은 고성능 조준경에 조준 나사를 이용한 편차 및 고도 조절 기능을 더해줍니다. Ten moduł włącza pokrętła kalibracyjne poprawki na wiatr oraz poprawki wysokości dla celowników o dużym powiększeniu. Ce module ajoute les tambours de correction de la hausse et de dérive sur les optiques de visée à fort grossissement. + Questo modulo aggiunge lo spostamento dell'aria e la regolazione dell'elevazione delle torrette in mirini a lunga gittata diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 2f5c13b383..213834841d 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -144,12 +144,14 @@ Ustaw nazwę 名前設定 Définir le nom + Imposta Nome Name that will be used for main interaction entry (to distinguish multiple slideshows). Default: "Slides" Nazwa, która będzie użyta w głównym menu interakcji (w celu rozróżnienia różnych slajdów). Domyślnie: "Slides" メイン インタラクション エントリで使われる名前を設定します。(複数のスライドショーを区別するため)。標準: "Slides" Un nom qui sera utilisé pour interagir avec plusieurs diaporamas. Par défaut : "Slides" + Nome che sarà utilizzato per le principali interazioni (per distinguere le multiple diapositive). Predefinito: "Slides" Slide Duration diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index b2570dd08f..29262d06b5 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -1,9 +1,10 @@ - + ACE Spectator ACE スペクテイター + Spettatore ACE Spectator Settings diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index d079350a19..c86142c877 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -20,7 +20,7 @@ Versuche zu Wechseln Snažím se přehodit Próba zmiany - Sto provando a cambiare + Provando a cambiare Intentando cambiar Essaye de basculer Tentando trocar diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 05a23e4cd1..ab5866dbfa 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -9,6 +9,7 @@ Markierungssystem 뿌리기 Marquage + Marcamento Configure how the tagging system will operate by default. @@ -18,6 +19,7 @@ Konfiguriert, wie das Markierungssystem standardmäßig funktioniert. 뿌리기 시스템의 기본사항을 설정합니다. Configure le fonctionnement par défaut du système de marquage. + Configura quanto il sistema di marcamento agirà da se. Quick Tag @@ -27,6 +29,7 @@ Schnelle Markierung 빠른 뿌리기 Marquage rapide + Marcamento Rapido Action performed on main tag interaction point. @@ -36,6 +39,7 @@ Aktion, die am Haupt-Interaktionspunkt ausgeführt werden soll. 이 동작은 상호작용에서 뿌리기를 할 수 있게 해준다 Action réalisé au point de marquage principal. + Azione eseguita sul punto di interazione dei tag principali. Last Used @@ -45,6 +49,7 @@ Zuletzt benutzt 최근 사용 Dernier utilisé + Ultimo Usato Random X @@ -54,6 +59,7 @@ Zufällig X 무작위 X Aléatoire X + Random X Random @@ -63,6 +69,7 @@ Zufällig 무작위 Aléatoire + Random Tag diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 9203635d49..1fee5489df 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -147,7 +147,7 @@ Digging Trench Grabe Schützengraben Kopanie wnęki - Sto Scavando la Trincea + Scavando la Trincea Cavando trinchera Creuse la tranchée Vykopat zákop @@ -166,6 +166,7 @@ 塹壕を掘りつづける Graben fortsetzen 계속해서 참호파기 + Continua a Scavare la Trincea Remove Trench @@ -177,6 +178,7 @@ 塹壕を消す Schützengraben entfernen 참호 제거 + Rimuove Trincea Removing Trench @@ -188,6 +190,7 @@ 塹壕を消している Entferne Schützengraben 참호 제거중... + Rimuovendo la Trincea diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index e13c38f6df..1bc2f8d888 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -11,6 +11,7 @@ Interfejs użytkownika Benutzeroberfläche 사용자 인터페이스 + Interfaccia Utente User Interface @@ -22,6 +23,7 @@ Interfejs użytkownika Benutzeroberfläche 사용자 인터페이스 + Interfaccia Utente This module allows toggling visible user interface parts. @@ -32,6 +34,7 @@ Moduł ten pozwala zmienić stan widoczności poszczególnych elementów UI. Dieses Modul erlaubt es, Teile der Benutzeroberfläche (UI) an- oder auszuschalten. 이 모듈은 사용자 인터페이스의 부분을 토글하는것을 가능케 해줍니다. + Questo modulo consente di commutare parti di interfaccia utente visibili. Allow Selective UI @@ -43,6 +46,7 @@ Zezwól na selektywne UI Erlaube selektives UI 선택적 사용자 인터페이스 허가 + Permette l'UI Selettiva Allow client to modify their UI. @@ -54,6 +58,7 @@ Zezwól klientowi na modyfikację UI. Erlaube Clients, ihr UI zu modifizieren. 클라이언트가 선택적 사용자 인터페이스 사용하는것을 허가합니다 + Permette al client di modificare la propria UI. Soldier/Vehicle/Weapon Information @@ -65,6 +70,7 @@ Informacje o żołnierzu/pojeździe/broni Soldat/Fahrzeug/Waffe Information 병사/차량/무기 정보 + Informazioni Soldato/Veicolo/Arma Vehicle Radar @@ -76,6 +82,7 @@ Radar w pojeździe Fahrzeugradar 차량 레이더 + Rada Veicolo Vehicle Compass @@ -87,6 +94,7 @@ Kompas w pojeździe Fahrzeugkompass 차량 나침반 + Bussola Veicolo Command Menu @@ -98,6 +106,7 @@ Menu dowodzenia Kommandomenü 지휘 메뉴 + Menù di Comando Group Bar @@ -109,6 +118,7 @@ Pasek grupy Gruppenleiste 그룹 막대 + Barra del Gruppo Weapon Name @@ -120,6 +130,7 @@ Nazwa broni Waffenname 무기 이름 + Nome Arma Weapon Name Background @@ -131,6 +142,7 @@ Tło nazwy broni Waffenname Hintergrund 무기 이름 배경 + Nome Sfondo Arma Firing Mode @@ -142,6 +154,7 @@ Tryb ognia Feuermodus 사격 모드 + Modalità di Fuoco Ammo Type @@ -153,6 +166,7 @@ Typ amunicji Munitionstyp 탄종 + Tipo Munizioni Ammo Count @@ -164,6 +178,7 @@ Ilość amunicji Munitionsanzahl 탄약수 + Contatore Munizioni Magazine Count @@ -175,6 +190,7 @@ Ilość magazynków Magazinanzahl 탄창수 + Contatore Caricatore Throwable Type @@ -186,6 +202,7 @@ Typ granatu Wurfobjekt-Typ 투척물 종류 + Tipo Lanciabile Throwable Count @@ -197,6 +214,7 @@ Ilość granatów Wurfobjekt-Anzahl 투척물 개수 + Contatore Lanciabili Zeroing @@ -208,6 +226,7 @@ Wyzerowanie broni Nullung 영점 + Azzeramento Weapon Lower Info Background @@ -218,6 +237,7 @@ Tło dolnej części informacji o broni Hintergrund der unteren Waffen-Info-Leiste 무기 상세 정보 배경 + Informazioni Sfondo Arma Bassa Stance @@ -229,6 +249,7 @@ Postura Haltung 자세 + Postura Stamina Bar @@ -240,6 +261,7 @@ Pasek staminy Ausdaueranzeige 체력 막대 + Barra Stamina Gunner Weapon Name @@ -250,6 +272,7 @@ Nazwa broni strzelca Richtschütze Waffenname 사수 무기 명칭 + Nome Arma Artigliere Gunner Weapon Name Background @@ -260,6 +283,7 @@ Tło nazwy broni strzelca Richtschütze Waffenname Hintergrund 사수 무기 명칭 배경 + Nome Sfondo Arma Artigliere Gunner Firing Mode @@ -270,6 +294,7 @@ Tryb ognia strzelca Richtschütze Feuermodus 사수 사격 모드 + Modalità di Fuoco Artigliere Gunner Ammo Type @@ -280,6 +305,7 @@ Typ amunicji strzelca Richtschütze Munitionstyp 사수 탄종 + Tipo Munizioni Artigliere Gunner Ammo Count @@ -290,6 +316,7 @@ Ilość amunicji strzelca Richtschütze Munitionsanzahl 사수 탄약 수량 + Contatore Munizioni Artigliere Gunner Magazine Count @@ -300,6 +327,7 @@ Ilość magazynków strzelca Richtschütze Magazinanzahl 사수 탄창 수량 + Contatore Caricatore Artigliere Gunner Launchable Type @@ -310,6 +338,7 @@ Typ rakiet strzelca Richtschütze Raketentyp 사수 발사체 종류 + Tipo Lanciabile Artigliere Gunner Launchable Count @@ -320,6 +349,7 @@ Ilość rakiet strzelca Richtschütze Raketenanzahl 사수 발사체 수량 + Contatore Lanciabili Artigliere Gunner Zeroing @@ -330,6 +360,7 @@ Wyzerowanie broni strzelca Richtschütze Nullung 사수 영점 + Azzeramento Artigliere Gunner Weapon Lower Info Background @@ -340,6 +371,7 @@ Tło dolnej części informacji o broni strzelca Hintergrund der unteren Waffen-Info-Leiste (Richtschütze) 사수 무기 상세 정보 배경 + Informazioni Sfondo Arma Artigliere Bassa Vehicle Name @@ -351,6 +383,7 @@ Nazwa pojazdu Fahrzeugname 차량 명칭 + Nome Veicolo Vehicle Name Background @@ -362,6 +395,7 @@ Tło nazwy pojazdu Fahrzeugname Hintergrund 차량 명칭 배경 + Nome Sfondo Veicolo Vehicle Fuel Bar @@ -373,6 +407,7 @@ Pasek paliwa Fahrzeug-Treibstoffleiste 차량 연료 막대 + Barra Carburante Veicolo Vehicle Speed @@ -384,6 +419,7 @@ Prędkościomierz Fahrzeuggeschwindigkeit 차량 속도 + Velocità Veicolo Vehicle Altitude @@ -395,6 +431,7 @@ Wysokościomierz radarowy Fahrzeughöhe 차량 고도 + Altitudine Veicolo Vehicle Damage @@ -406,6 +443,7 @@ Uszkodzenia pojazdu Fahrzeugschaden 차량 피해 + Danno Veicolo Vehicle Info Background @@ -417,6 +455,7 @@ Tło informacji o pojeździe Fahrzeug Info Hintergrund 차량 정보 배경 + Informazioni Sfondo Veicolo Requires Soldier/Vehicle/Weapon Information. @@ -428,6 +467,7 @@ Wymaga informacji o żołnierzu/pojeździe/broni. Benötigt Soldat/Fahrzeug/Waffe Information. 병사/차량/무기의 정보가 필요합니다. + Richiede informazione Soldato/Veicolo/Arma. Modifying User Interface is disabled. @@ -439,6 +479,7 @@ Modyfikacja interfejsu użytkownika jest wyłączona. Die Modifizierung des UI ist deaktiviert. 사용자 인터페이스 변경이 비활성화 되어있습니다. + La modifica dell'Interfaccia Utente è disabilitata. Cannot modify a forced User Interface element. @@ -449,6 +490,7 @@ Nie można modyfikować wymuszonego elementu interfejsu użytkownika. Gesperrte UI-Elemente können nicht modifiziert werden. 강제 사용자 인터페이스는 변경하실 수 없습니다. + Impossibile modificare un elemento forzato d' Interfaccia Utente. diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index b9bd67cf3d..3a416358c8 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -774,6 +774,7 @@ Ładunek: Ladung: 화물: + Cargo: Task Position @@ -784,6 +785,7 @@ Pozycja zadania Position der Aufgabe 작업 위치 + Posizione Incarico Select a position to perform the task at @@ -793,6 +795,7 @@ Wybierz pozycję na której wykonać zadanie Wähle eine Position, an der die Aufgabe ausgeführt werden soll 작업을 할 위치를 선택하십시요 + Seleziona una posizione per eseguire l'incarico Task Radius @@ -802,6 +805,7 @@ Obszar zadania Radius der Aufgabe 작업 반경 + Raggio Incarico Radius to perform the task within @@ -811,6 +815,7 @@ Obszar na którym zadanie powinno zostać wykonane Radius, in dem die Aufgabe ausgeführt werden soll 다음 반경 내에서 작업 + Raggio per eseguire un incarico Invalid radius entered @@ -821,9 +826,11 @@ Wpisano nieprawidłowy promień Ungültiger Radius eingegeben 알 수 없는 반경 입력됨 + Raggio Invalido Inserito Suppressive Fire + Fuoco di Soppressione