Compare commits

...

51 Commits

Author SHA1 Message Date
dependabot[bot]
3e8d9a74b2 Bump starlette from 0.45.3 to 0.49.1
Bumps [starlette](https://github.com/Kludex/starlette) from 0.45.3 to 0.49.1.
- [Release notes](https://github.com/Kludex/starlette/releases)
- [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md)
- [Commits](https://github.com/Kludex/starlette/compare/0.45.3...0.49.1)

---
updated-dependencies:
- dependency-name: starlette
  dependency-version: 0.49.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-28 22:00:53 +00:00
zhexu14
7006d370e4 Bump pydcs to support DCS 2.9.21. Add support for F-14A-135-GR Early. (#3531) 2025-10-25 11:32:09 +00:00
zhexu14
2591a2b9a8 Add setting to fast forward until player is at IP (#3530) 2025-10-24 23:56:51 +00:00
zhexu14
545990b16d Add basic MiG-29 Fulcrum (full fidelity) support (#3529)
Add basic support for full fidelity MiG-29 Fulcrum.
2025-10-24 23:48:33 +00:00
zhexu14
bb1d4f1b18 Bump pydcs to support DCS 2.9.20 (#3528) 2025-10-18 12:46:25 +00:00
zhexu14
c4a195646f Replan (#3527)
This PR

- Introduces replanning of missions after continuing a turn.
- A new doctrine field setting the AEWC mission duration that was
previously hard coded.
2025-10-17 11:23:55 +00:00
zhexu14
d09a15a7f3 Allow player to continue playing after the end of a turn. (#3526)
This PR:

Keeps track of time spent in mission 

Introduces a new "turnless mode" setting, which activates the following:
- At the end of a mission, fast forwards through the time spent in the
mission, skipping any combat (which has already been tracked through
state.json)
- Removes killed flights from the ATO
- Does not start a new turn, instead allows the player to continue the
current turn.
2025-10-16 12:51:27 +00:00
zhexu14
5676c40788 Update A4EC mod version to 2.3 (#3525) 2025-10-03 23:28:48 +10:00
zhexu14
a7488a5fdd Update pydcs to support DCS 2.9.19 (#3524) 2025-09-14 21:26:31 +10:00
dependabot[bot]
1a9fa8ad5a Bump axios from 1.8.3 to 1.12.1 in /client (#3523)
Bumps [axios](https://github.com/axios/axios) from 1.8.3 to 1.12.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>Release v1.12.1</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>types:</strong> fixed env config types; (<a
href="https://redirect.github.com/axios/axios/issues/7020">#7020</a>)
(<a
href="b5f26b75bd">b5f26b7</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a
href="https://github.com/DigitalBrainJS" title="+10/-4
([#7020](https://github.com/axios/axios/issues/7020) )">Dmitriy
Mozgovoy</a></li>
</ul>
<h2>Release v1.12.0</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li>adding build artifacts (<a
href="9ec86de257">9ec86de</a>)</li>
<li>dont add dist on release (<a
href="a2edc3606a">a2edc36</a>)</li>
<li><strong>fetch-adapter:</strong> set correct Content-Type for Node
FormData (<a
href="https://redirect.github.com/axios/axios/issues/6998">#6998</a>)
(<a
href="a9f47afbf3">a9f47af</a>)</li>
<li><strong>node:</strong> enforce maxContentLength for data: URLs (<a
href="https://redirect.github.com/axios/axios/issues/7011">#7011</a>)
(<a
href="945435fc51">945435f</a>)</li>
<li>package exports (<a
href="https://redirect.github.com/axios/axios/issues/5627">#5627</a>)
(<a
href="aa78ac23fc">aa78ac2</a>)</li>
<li><strong>params:</strong> removing '[' and ']' from URL encode
exclude characters (<a
href="https://redirect.github.com/axios/axios/issues/3316">#3316</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/5715">#5715</a>)
(<a
href="6d84189349">6d84189</a>)</li>
<li>release pr run (<a
href="fd7f404488">fd7f404</a>)</li>
<li><strong>types:</strong> change the type guard on isCancel (<a
href="https://redirect.github.com/axios/axios/issues/5595">#5595</a>)
(<a
href="0dbb7fd4f6">0dbb7fd</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li><strong>adapter:</strong> surface low‑level network error details;
attach original error via cause (<a
href="https://redirect.github.com/axios/axios/issues/6982">#6982</a>)
(<a
href="78b290c57c">78b290c</a>)</li>
<li><strong>fetch:</strong> add fetch, Request, Response env config
variables for the adapter; (<a
href="https://redirect.github.com/axios/axios/issues/7003">#7003</a>)
(<a
href="c959ff2901">c959ff2</a>)</li>
<li>support reviver on JSON.parse (<a
href="https://redirect.github.com/axios/axios/issues/5926">#5926</a>)
(<a
href="2a9763426e">2a97634</a>),
closes <a
href="https://redirect.github.com/axios/axios/issues/5924">#5924</a></li>
<li><strong>types:</strong> extend AxiosResponse interface to include
custom headers type (<a
href="https://redirect.github.com/axios/axios/issues/6782">#6782</a>)
(<a
href="7960d34ede">7960d34</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a
href="https://github.com/WillianAgostini" title="+132/-16760
([#7002](https://github.com/axios/axios/issues/7002)
[#5926](https://github.com/axios/axios/issues/5926)
[#6782](https://github.com/axios/axios/issues/6782) )">Willian
Agostini</a></li>
<li><!-- raw HTML omitted --> <a
href="https://github.com/DigitalBrainJS" title="+4263/-293
([#7006](https://github.com/axios/axios/issues/7006)
[#7003](https://github.com/axios/axios/issues/7003) )">Dmitriy
Mozgovoy</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/mkhani01"
title="+111/-15 ([#6982](https://github.com/axios/axios/issues/6982)
)">khani</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/AmeerAssadi"
title="+123/-0 ([#7011](https://github.com/axios/axios/issues/7011)
)">Ameer Assadi</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/emiedonmokumo"
title="+55/-35 ([#6998](https://github.com/axios/axios/issues/6998)
)">Emiedonmokumo Dick-Boro</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/opsysdebug"
title="+8/-8 ([#6980](https://github.com/axios/axios/issues/6980)
)">Zeroday BYTE</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/jasonsaayman"
title="+7/-7 ([#6985](https://github.com/axios/axios/issues/6985)
[#6985](https://github.com/axios/axios/issues/6985) )">Jason
Saayman</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/HealGaren"
title="+5/-7 ([#5715](https://github.com/axios/axios/issues/5715)
)">최예찬</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/gligorkot"
title="+3/-1 ([#5627](https://github.com/axios/axios/issues/5627)
)">Gligor Kotushevski</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/adimit"
title="+2/-1 ([#5595](https://github.com/axios/axios/issues/5595)
)">Aleksandar Dimitrov</a></li>
</ul>
<h2>Release v1.11.0</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li>form-data npm pakcage (<a
href="https://redirect.github.com/axios/axios/issues/6970">#6970</a>)
(<a
href="e72c193722">e72c193</a>)</li>
<li>prevent RangeError when using large Buffers (<a
href="https://redirect.github.com/axios/axios/issues/6961">#6961</a>)
(<a
href="a2214ca1bc">a2214ca</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/axios/axios/compare/v1.12.0...v1.12.1">1.12.1</a>
(2025-09-12)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>types:</strong> fixed env config types; (<a
href="https://redirect.github.com/axios/axios/issues/7020">#7020</a>)
(<a
href="b5f26b75bd">b5f26b7</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a
href="https://github.com/DigitalBrainJS" title="+10/-4
([#7020](https://github.com/axios/axios/issues/7020) )">Dmitriy
Mozgovoy</a></li>
</ul>
<h1><a
href="https://github.com/axios/axios/compare/v1.11.0...v1.12.0">1.12.0</a>
(2025-09-11)</h1>
<h3>Bug Fixes</h3>
<ul>
<li>adding build artifacts (<a
href="9ec86de257">9ec86de</a>)</li>
<li>dont add dist on release (<a
href="a2edc3606a">a2edc36</a>)</li>
<li><strong>fetch-adapter:</strong> set correct Content-Type for Node
FormData (<a
href="https://redirect.github.com/axios/axios/issues/6998">#6998</a>)
(<a
href="a9f47afbf3">a9f47af</a>)</li>
<li><strong>node:</strong> enforce maxContentLength for data: URLs (<a
href="https://redirect.github.com/axios/axios/issues/7011">#7011</a>)
(<a
href="945435fc51">945435f</a>)</li>
<li>package exports (<a
href="https://redirect.github.com/axios/axios/issues/5627">#5627</a>)
(<a
href="aa78ac23fc">aa78ac2</a>)</li>
<li><strong>params:</strong> removing '[' and ']' from URL encode
exclude characters (<a
href="https://redirect.github.com/axios/axios/issues/3316">#3316</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/5715">#5715</a>)
(<a
href="6d84189349">6d84189</a>)</li>
<li>release pr run (<a
href="fd7f404488">fd7f404</a>)</li>
<li><strong>types:</strong> change the type guard on isCancel (<a
href="https://redirect.github.com/axios/axios/issues/5595">#5595</a>)
(<a
href="0dbb7fd4f6">0dbb7fd</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li><strong>adapter:</strong> surface low‑level network error details;
attach original error via cause (<a
href="https://redirect.github.com/axios/axios/issues/6982">#6982</a>)
(<a
href="78b290c57c">78b290c</a>)</li>
<li><strong>fetch:</strong> add fetch, Request, Response env config
variables for the adapter; (<a
href="https://redirect.github.com/axios/axios/issues/7003">#7003</a>)
(<a
href="c959ff2901">c959ff2</a>)</li>
<li>support reviver on JSON.parse (<a
href="https://redirect.github.com/axios/axios/issues/5926">#5926</a>)
(<a
href="2a9763426e">2a97634</a>),
closes <a
href="https://redirect.github.com/axios/axios/issues/5924">#5924</a></li>
<li><strong>types:</strong> extend AxiosResponse interface to include
custom headers type (<a
href="https://redirect.github.com/axios/axios/issues/6782">#6782</a>)
(<a
href="7960d34ede">7960d34</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a
href="https://github.com/WillianAgostini" title="+132/-16760
([#7002](https://github.com/axios/axios/issues/7002)
[#5926](https://github.com/axios/axios/issues/5926)
[#6782](https://github.com/axios/axios/issues/6782) )">Willian
Agostini</a></li>
<li><!-- raw HTML omitted --> <a
href="https://github.com/DigitalBrainJS" title="+4263/-293
([#7006](https://github.com/axios/axios/issues/7006)
[#7003](https://github.com/axios/axios/issues/7003) )">Dmitriy
Mozgovoy</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/mkhani01"
title="+111/-15 ([#6982](https://github.com/axios/axios/issues/6982)
)">khani</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/AmeerAssadi"
title="+123/-0 ([#7011](https://github.com/axios/axios/issues/7011)
)">Ameer Assadi</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/emiedonmokumo"
title="+55/-35 ([#6998](https://github.com/axios/axios/issues/6998)
)">Emiedonmokumo Dick-Boro</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/opsysdebug"
title="+8/-8 ([#6980](https://github.com/axios/axios/issues/6980)
)">Zeroday BYTE</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/jasonsaayman"
title="+7/-7 ([#6985](https://github.com/axios/axios/issues/6985)
[#6985](https://github.com/axios/axios/issues/6985) )">Jason
Saayman</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/HealGaren"
title="+5/-7 ([#5715](https://github.com/axios/axios/issues/5715)
)">최예찬</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/gligorkot"
title="+3/-1 ([#5627](https://github.com/axios/axios/issues/5627)
)">Gligor Kotushevski</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/adimit"
title="+2/-1 ([#5595](https://github.com/axios/axios/issues/5595)
)">Aleksandar Dimitrov</a></li>
</ul>
<h1><a
href="https://github.com/axios/axios/compare/v1.10.0...v1.11.0">1.11.0</a>
(2025-07-22)</h1>
<h3>Bug Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3cac78c2de"><code>3cac78c</code></a>
chore(release): v1.12.1 (<a
href="https://redirect.github.com/axios/axios/issues/7021">#7021</a>)</li>
<li><a
href="b5f26b75bd"><code>b5f26b7</code></a>
fix(types): fixed env config types; (<a
href="https://redirect.github.com/axios/axios/issues/7020">#7020</a>)</li>
<li><a
href="0d8ad6e1de"><code>0d8ad6e</code></a>
chore(release): v1.12.0 (<a
href="https://redirect.github.com/axios/axios/issues/7013">#7013</a>)</li>
<li><a
href="fd7f404488"><code>fd7f404</code></a>
fix: release pr run</li>
<li><a
href="a2edc3606a"><code>a2edc36</code></a>
fix: dont add dist on release</li>
<li><a
href="9ec86de257"><code>9ec86de</code></a>
fix: adding build artifacts</li>
<li><a
href="945435fc51"><code>945435f</code></a>
fix(node): enforce maxContentLength for data: URLs (<a
href="https://redirect.github.com/axios/axios/issues/7011">#7011</a>)</li>
<li><a
href="28e5e3016d"><code>28e5e30</code></a>
chore(sponsor): update sponsor block (<a
href="https://redirect.github.com/axios/axios/issues/7005">#7005</a>)</li>
<li><a
href="d03f245a40"><code>d03f245</code></a>
chore(CI): fixed release info script to use npm registry instead of git
as fi...</li>
<li><a
href="a0bc911379"><code>a0bc911</code></a>
chore: removing dist files from src (<a
href="https://redirect.github.com/axios/axios/issues/7002">#7002</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/axios/axios/compare/v1.8.3...v1.12.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axios&package-manager=npm_and_yarn&previous-version=1.8.3&new-version=1.12.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-14 11:27:19 +10:00
dependabot[bot]
cc3e3a8fa1 Bump pyinstaller from 5.13.1 to 6.0.0 (#3522)
Bumps [pyinstaller](https://github.com/pyinstaller/pyinstaller) from
5.13.1 to 6.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pyinstaller/pyinstaller/releases">pyinstaller's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<p>Please see the <a
href="https://pyinstaller.org/en/v6.0.0/CHANGES.html#id1">v6.0.0 section
of the changelog</a> for a list of the changes since v5.13.2.</p>
<h2>v5.13.2</h2>
<p>Please see the <a
href="https://pyinstaller.org/en/v5.13.2/CHANGES.html#id1">v5.13.2
section of the changelog</a> for a list of the changes since
v5.13.1.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst">pyinstaller's
changelog</a>.</em></p>
<blockquote>
<h2>6.0.0 (2023-09-22)</h2>
<p>Features</p>
<pre><code>
* (macOS) PyInstaller now attempts to preserve the ``.framework``
bundles when
collecting shared libraries from them. If a shared library is to be
collected
  from a ``.framework`` bundle, the ``Info.plist`` is also automatically
collected. The ``.framework`` bundle collection code also attempts to
fix the
bundles' structure to conform to code-signing requirements (i.e.,
creation of
the ``Current`` symbolic link in the ``Versions`` directory, and
top-level
  contents being symbolic links that point to counterparts in the
``Versions/Current`` directory). Note that other resources (for example
from
  ``Resources`` or ``Helpers`` directories) still need to be explicitly
  collected by hooks. (:issue:`7619`)
* (macOS) The file relocation mechanism in ``BUNDLE`` that generates
macOS .app
bundles has been completely redesigned. All data files are now placed
into
directory structure rooted in ``Contents/Resources``, all shared
libraries (as
well as nested .framework bundles) are placed into directory structure
rooted
in ``Contents/Frameworks``, and only the the program executable is
placed into
the ``Contents/MacOS`` directory. The contents of ``Contents/Resources``
and
``Contents/Frameworks`` directories are cross-linked via symlinks
between the
two directory trees in order to maintain illusion of mixed-content
directories
(in both directory trees). The cross-linking is done at either file
level or
(sub)directory level, depending on the content type of a (sub)directory.
For
directories in ``Contents/Frameworks`` that contain a dot in the name, a
work-around is automatically applied: the directory is created with a
modified
name that does not include the dot, and next to it, a symbolic link is
created
under the original name and pointing to the directory with modified
name.
  (:issue:`7619`)
* (non-Windows) PyInstaller now attempts to preserve the parent
directory
  structure for shared libraries discovered and collected by the binary
  dependency analysis, instead of automatically collecting them into the
top-level application directory. Due to library search path assumptions
made in various places, symbolic links to collected libraries are
created
  in the top-level application directory. This complements earlier work
  (:issue:`7028`) that implemented DLL parent directory structure
  preservation on Windows. (:issue:`7619`)
* (Windows) Add an option to hide or minimize the console window in
  console-enabled applications, but only if the program's process owns
the console window (i.e., the program was not launched from an existing
  console window). (:issue:`7729`)
* (Windows) The :option:`--add-data` and :option:`--add-binary` options
accept
  the POSIX syntax of ``--add-data=source:dest`` rather than
``--add-data=source;dest``. The latter will continue to work on Windows
to
avoid breaking backwards compatibility but is discouraged in favour of
the now
  cross platform format. (:issue:`6724`)
* Add automatic binary vs. data file (re)classification step to the
analysis
  process. PyInstaller now inspects all files passed to ``Analysis`` via
&lt;/tr&gt;&lt;/table&gt; 
</code></pre>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7001defa6f"><code>7001def</code></a>
Release v6.0.0. [skip ci]</li>
<li><a
href="87cda61c09"><code>87cda61</code></a>
building: fix executable-bit preservation for collected shell
scripts</li>
<li><a
href="d1adaed16d"><code>d1adaed</code></a>
tests: add a test with bundled shell script</li>
<li><a
href="8bbc4f72bc"><code>8bbc4f7</code></a>
bootloader: onefile: set executable bit only on extracted binaries</li>
<li><a
href="3bd5160ee7"><code>3bd5160</code></a>
building: use <code>shutil.copyfile</code> when copying files into
onedir build</li>
<li><a
href="3b4099bdb1"><code>3b4099b</code></a>
Cherry pick v5 release commits into develop. [skip ci]</li>
<li><a
href="962ac8ff4c"><code>962ac8f</code></a>
hookutils: remove requirements_for_package</li>
<li><a
href="984545a775"><code>984545a</code></a>
hookutils: adjust behavior of collect_data_files with
include_py_files</li>
<li><a
href="deb6613da8"><code>deb6613</code></a>
hookutils: have collect_all look up the dist from package name</li>
<li><a
href="e4e6ea345b"><code>e4e6ea3</code></a>
hookutils: implement replacement for is_module_satisfies</li>
<li>Additional commits viewable in <a
href="https://github.com/pyinstaller/pyinstaller/compare/v5.13.1...v6.0.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pyinstaller&package-manager=pip&previous-version=5.13.1&new-version=6.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-14 11:27:08 +10:00
dependabot[bot]
d4d0d9e060 Bump electron from 28.3.2 to 35.7.5 in /client (#3521)
Bumps [electron](https://github.com/electron/electron) from 28.3.2 to
35.7.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/electron/electron/releases">electron's
releases</a>.</em></p>
<blockquote>
<h2>electron v35.7.5</h2>
<h1>Release Notes for v35.7.5</h1>
<blockquote>
<p>[!WARNING]
Electron 35.x.y has reached end-of-support as per the project's <a
href="https://www.electronjs.org/docs/latest/tutorial/electron-timelines#version-support-policy">support
policy</a>. Developers and applications are encouraged to upgrade to a
newer version of Electron.</p>
</blockquote>
<h2>Fixes</h2>
<ul>
<li>Fixed an issue where <code>shell.openPath</code> was not
non-blocking as expected. <a
href="https://redirect.github.com/electron/electron/pull/48079">#48079</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/48088">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/48088">37</a>,
<a
href="https://redirect.github.com/electron/electron/pull/48088">38</a>)<!--
raw HTML omitted --></li>
</ul>
<h2>electron v35.7.4</h2>
<h1>Release Notes for v35.7.4</h1>
<ul>
<li>Fix ffmpeg generation on Windows non-x64</li>
</ul>
<h2>electron v35.7.2</h2>
<h1>Release Notes for v35.7.2</h1>
<h2>Fixes</h2>
<ul>
<li>Fixed an issue where printing PDFs with <code>webContents.print({
silent: true })</code> would fail. <a
href="https://redirect.github.com/electron/electron/pull/47645">#47645</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47624">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47397">37</a>)<!--
raw HTML omitted --></li>
</ul>
<h2>electron v35.7.0</h2>
<h1>Release Notes for v35.7.0</h1>
<h2>Other Changes</h2>
<ul>
<li>Updated Node.js to v22.16.0. <a
href="https://redirect.github.com/electron/electron/pull/47213">#47213</a></li>
</ul>
<h2>electron v35.6.0</h2>
<h1>Release Notes for v35.6.0</h1>
<h2>Features</h2>
<ul>
<li>Added support for <code>--no-experimental-global-navigator</code>
flag. <a
href="https://redirect.github.com/electron/electron/pull/47416">#47416</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47417">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47418">37</a>)<!--
raw HTML omitted --></li>
<li>Added support for customizing system accent color and highlighting
of active window border. <a
href="https://redirect.github.com/electron/electron/pull/47539">#47539</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47538">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47537">37</a>)<!--
raw HTML omitted --></li>
</ul>
<h2>Fixes</h2>
<ul>
<li>Fixed a potential crash using <code>session.clearData</code> in some
circumstances. <a
href="https://redirect.github.com/electron/electron/pull/47410">#47410</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47411">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47412">37</a>)<!--
raw HTML omitted --></li>
<li>Fixed an error when importing <code>electron</code> for the first
time from an ESM module loaded by a CJS module in a packaged app. <a
href="https://redirect.github.com/electron/electron/pull/47344">#47344</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47343">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47342">37</a>)<!--
raw HTML omitted --></li>
<li>Fixed an issue where calling <code>Fetch.continueResponse</code> via
debugger with <code>WebContentsView</code> could cause a crash. <a
href="https://redirect.github.com/electron/electron/pull/47443">#47443</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47442">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47444">37</a>)<!--
raw HTML omitted --></li>
<li>Fixed an issue where utility processes could leak file handles. <a
href="https://redirect.github.com/electron/electron/pull/47542">#47542</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47541">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47543">37</a>)<!--
raw HTML omitted --></li>
<li>Partially fixes an issue with printing a PDF via
<code>webContents.print()</code> where the callback would not be called.
<a
href="https://redirect.github.com/electron/electron/pull/47399">#47399</a>
<!-- raw HTML omitted -->(Also in <a
href="https://redirect.github.com/electron/electron/pull/47400">36</a>,
<a
href="https://redirect.github.com/electron/electron/pull/47398">37</a>)<!--
raw HTML omitted --></li>
</ul>
<h2>Other Changes</h2>
<ul>
<li>Backported fix for 420637585. <a
href="https://redirect.github.com/electron/electron/pull/47369">#47369</a></li>
</ul>
<h2>electron v35.5.1</h2>
<h1>Release Notes for v35.5.1</h1>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/electron/electron/blob/main/docs/breaking-changes.md">electron's
changelog</a>.</em></p>
<blockquote>
<h1>Breaking Changes</h1>
<p>Breaking changes will be documented here, and deprecation warnings
added to JS code where possible, at least <a
href="https://github.com/electron/electron/blob/main/docs/tutorial/electron-versioning.md#semver">one
major version</a> before the change is made.</p>
<h3>Types of Breaking Changes</h3>
<p>This document uses the following convention to categorize breaking
changes:</p>
<ul>
<li><strong>API Changed:</strong> An API was changed in such a way that
code that has not been updated is guaranteed to throw an exception.</li>
<li><strong>Behavior Changed:</strong> The behavior of Electron has
changed, but not in such a way that an exception will necessarily be
thrown.</li>
<li><strong>Default Changed:</strong> Code depending on the old default
may break, not necessarily throwing an exception. The old behavior can
be restored by explicitly specifying the value.</li>
<li><strong>Deprecated:</strong> An API was marked as deprecated. The
API will continue to function, but will emit a deprecation warning, and
will be removed in a future release.</li>
<li><strong>Removed:</strong> An API or feature was removed, and is no
longer supported by Electron.</li>
</ul>
<h2>Planned Breaking API Changes (39.0)</h2>
<h3>Deprecated: <code>--host-rules</code> command line switch</h3>
<p>Chromium is deprecating the <code>--host-rules</code> switch.</p>
<p>You should use <code>--host-resolver-rules</code> instead.</p>
<h3>Behavior Changed: window.open popups are always resizable</h3>
<p>Per current <a
href="https://html.spec.whatwg.org/multipage/nav-history-apis.html#dom-open-dev">WHATWG
spec</a>, the <code>window.open</code> API will now always create a
resizable popup window.</p>
<p>To restore previous behavior:</p>
<pre lang="js"><code>webContents.setWindowOpenHandler((details) =&gt; {
  return {
    action: 'allow',
    overrideBrowserWindowOptions: {
      resizable: details.features.includes('resizable=yes')
    }
  }
})
</code></pre>
<h3>Behavior Changed: shared texture OSR <code>paint</code> event data
structure</h3>
<p>When using shared texture offscreen rendering feature, the
<code>paint</code> event now emits a more structured object.
It moves the <code>sharedTextureHandle</code>, <code>planes</code>,
<code>modifier</code> into a unified <code>handle</code> property.
See <a
href="https://www.electronjs.org/docs/latest/api/structures/offscreen-shared-texture">here</a>
for more details.</p>
<h2>Planned Breaking API Changes (38.0)</h2>
<h3>Removed: <code>ELECTRON_OZONE_PLATFORM_HINT</code> environment
variable</h3>
<p>The default value of the <code>--ozone-plaftform</code> flag <a
href="https://chromium-review.googlesource.com/c/chromium/src/+/6775426">changed
to <code>auto</code></a>.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="86d839a881"><code>86d839a</code></a>
build: correct CHECK syntax (<a
href="https://redirect.github.com/electron/electron/issues/48106">#48106</a>)</li>
<li><a
href="5be0be7f04"><code>5be0be7</code></a>
fix: ensure snapshot is valid (<a
href="https://redirect.github.com/electron/electron/issues/48105">#48105</a>)</li>
<li><a
href="df232d1269"><code>df232d1</code></a>
ci: cleanup use new arc cluster (<a
href="https://redirect.github.com/electron/electron/issues/48007">#48007</a>)</li>
<li><a
href="ab51554bdf"><code>ab51554</code></a>
ci: fixup mac runner hang (<a
href="https://redirect.github.com/electron/electron/issues/47992">#47992</a>)</li>
<li><a
href="203abdd5a9"><code>203abdd</code></a>
ci: use new arc cluster (<a
href="https://redirect.github.com/electron/electron/issues/47913">#47913</a>)</li>
<li><a
href="ea17e8339f"><code>ea17e83</code></a>
build: fix ffmpeg generation on Windows non-x64 (<a
href="https://redirect.github.com/electron/electron/issues/47845">#47845</a>)</li>
<li><a
href="7b5d411819"><code>7b5d411</code></a>
build(dev-deps): drop unused <code>@​types/webpack</code> dep (<a
href="https://redirect.github.com/electron/electron/issues/47806">#47806</a>)</li>
<li><a
href="def6203bb9"><code>def6203</code></a>
build: deep update brace-expansion to resolve an audit alert (<a
href="https://redirect.github.com/electron/electron/issues/47719">#47719</a>)</li>
<li><a
href="28d8ed037c"><code>28d8ed0</code></a>
test: cleanup RenderFrame lifespan tests (<a
href="https://redirect.github.com/electron/electron/issues/47795">#47795</a>)</li>
<li><a
href="ee8942dcbf"><code>ee8942d</code></a>
build: drop eslint-plugin-unicorn (<a
href="https://redirect.github.com/electron/electron/issues/47690">#47690</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/electron/electron/compare/v28.3.2...v35.7.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=electron&package-manager=npm_and_yarn&previous-version=28.3.2&new-version=35.7.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-07 20:33:32 +10:00
dependabot[bot]
6a99c61e2e Bump form-data in /client (#3520)
Bumps and [form-data](https://github.com/form-data/form-data). These
dependencies needed to be updated together.
Updates `form-data` from 4.0.0 to 4.0.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/form-data/form-data/releases">form-data's
releases</a>.</em></p>
<blockquote>
<h2>v4.0.4</h2>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4">v4.0.4</a>
- 2025-07-16</h2>
<h3>Commits</h3>
<ul>
<li>[meta] add <code>auto-changelog</code> <a
href="811f68282f"><code>811f682</code></a></li>
<li>[Tests] handle predict-v8-randomness failures in node &lt; 17 and
node &gt; 23 <a
href="1d11a76434"><code>1d11a76</code></a></li>
<li>[Fix] Switch to using <code>crypto</code> random for boundary values
<a
href="3d1723080e"><code>3d17230</code></a></li>
<li>[Tests] fix linting errors <a
href="5e340800b5"><code>5e34080</code></a></li>
<li>[meta] actually ensure the readme backup isn’t published <a
href="316c82ba93"><code>316c82b</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code> <a
href="58c25d7640"><code>58c25d7</code></a></li>
<li>[meta] fix readme capitalization <a
href="2300ca1959"><code>2300ca1</code></a></li>
</ul>
<h2>v4.0.3</h2>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3">v4.0.3</a>
- 2025-06-05</h2>
<h3>Fixed</h3>
<ul>
<li>[Fix] <code>append</code>: avoid a crash on nullish values <a
href="https://redirect.github.com/form-data/form-data/issues/577"><code>[#577](https://github.com/form-data/form-data/issues/577)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[eslint] use a shared config <a
href="426ba9ac44"><code>426ba9a</code></a></li>
<li>[eslint] fix some spacing issues <a
href="20941917f0"><code>2094191</code></a></li>
<li>[Refactor] use <code>hasown</code> <a
href="81ab41b46f"><code>81ab41b</code></a></li>
<li>[Fix] validate boundary type in <code>setBoundary()</code> method <a
href="8d8e469309"><code>8d8e469</code></a></li>
<li>[Tests] add tests to check the behavior of <code>getBoundary</code>
with non-strings <a
href="837b8a1f75"><code>837b8a1</code></a></li>
<li>[Dev Deps] remove unused deps <a
href="870e4e6659"><code>870e4e6</code></a></li>
<li>[meta] remove local commit hooks <a
href="e6e83ccb54"><code>e6e83cc</code></a></li>
<li>[Dev Deps] update <code>eslint</code> <a
href="4066fd6f65"><code>4066fd6</code></a></li>
<li>[meta] fix scripts to use prepublishOnly <a
href="c4bbb13c0e"><code>c4bbb13</code></a></li>
</ul>
<h2>v4.0.2</h2>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2">v4.0.2</a>
- 2025-02-14</h2>
<h3>Merged</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
</ul>
<h3>Commits</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/form-data/form-data/blob/master/CHANGELOG.md">form-data's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4">v4.0.4</a>
- 2025-07-16</h2>
<h3>Commits</h3>
<ul>
<li>[meta] add <code>auto-changelog</code> <a
href="811f68282f"><code>811f682</code></a></li>
<li>[Tests] handle predict-v8-randomness failures in node &lt; 17 and
node &gt; 23 <a
href="1d11a76434"><code>1d11a76</code></a></li>
<li>[Fix] Switch to using <code>crypto</code> random for boundary values
<a
href="3d1723080e"><code>3d17230</code></a></li>
<li>[Tests] fix linting errors <a
href="5e340800b5"><code>5e34080</code></a></li>
<li>[meta] actually ensure the readme backup isn’t published <a
href="316c82ba93"><code>316c82b</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code> <a
href="58c25d7640"><code>58c25d7</code></a></li>
<li>[meta] fix readme capitalization <a
href="2300ca1959"><code>2300ca1</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3">v4.0.3</a>
- 2025-06-05</h2>
<h3>Fixed</h3>
<ul>
<li>[Fix] <code>append</code>: avoid a crash on nullish values <a
href="https://redirect.github.com/form-data/form-data/issues/577"><code>[#577](https://github.com/form-data/form-data/issues/577)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[eslint] use a shared config <a
href="426ba9ac44"><code>426ba9a</code></a></li>
<li>[eslint] fix some spacing issues <a
href="20941917f0"><code>2094191</code></a></li>
<li>[Refactor] use <code>hasown</code> <a
href="81ab41b46f"><code>81ab41b</code></a></li>
<li>[Fix] validate boundary type in <code>setBoundary()</code> method <a
href="8d8e469309"><code>8d8e469</code></a></li>
<li>[Tests] add tests to check the behavior of <code>getBoundary</code>
with non-strings <a
href="837b8a1f75"><code>837b8a1</code></a></li>
<li>[Dev Deps] remove unused deps <a
href="870e4e6659"><code>870e4e6</code></a></li>
<li>[meta] remove local commit hooks <a
href="e6e83ccb54"><code>e6e83cc</code></a></li>
<li>[Dev Deps] update <code>eslint</code> <a
href="4066fd6f65"><code>4066fd6</code></a></li>
<li>[meta] fix scripts to use prepublishOnly <a
href="c4bbb13c0e"><code>c4bbb13</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2">v4.0.2</a>
- 2025-02-14</h2>
<h3>Merged</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>Merge tags v2.5.3 and v3.0.3 <a
href="92613b9208"><code>92613b9</code></a></li>
<li>[Tests] migrate from travis to GHA <a
href="806eda7774"><code>806eda7</code></a></li>
<li>[Tests] migrate from travis to GHA <a
href="8fdb3bc6b5"><code>8fdb3bc</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="41996f5ac7"><code>41996f5</code></a>
v4.0.4</li>
<li><a
href="316c82ba93"><code>316c82b</code></a>
[meta] actually ensure the readme backup isn’t published</li>
<li><a
href="2300ca1959"><code>2300ca1</code></a>
[meta] fix readme capitalization</li>
<li><a
href="811f68282f"><code>811f682</code></a>
[meta] add <code>auto-changelog</code></li>
<li><a
href="5e340800b5"><code>5e34080</code></a>
[Tests] fix linting errors</li>
<li><a
href="1d11a76434"><code>1d11a76</code></a>
[Tests] handle predict-v8-randomness failures in node &lt; 17 and node
&gt; 23</li>
<li><a
href="58c25d7640"><code>58c25d7</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code></li>
<li><a
href="3d1723080e"><code>3d17230</code></a>
[Fix] Switch to using <code>crypto</code> random for boundary
values</li>
<li><a
href="d8d67dc8ac"><code>d8d67dc</code></a>
v4.0.3</li>
<li><a
href="e6e83ccb54"><code>e6e83cc</code></a>
[meta] remove local commit hooks</li>
<li>Additional commits viewable in <a
href="https://github.com/form-data/form-data/compare/v4.0.0...v4.0.4">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~ljharb">ljharb</a>, a new releaser for
form-data since your current version.</p>
</details>
<br />

Updates `form-data` from 3.0.1 to 3.0.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/form-data/form-data/releases">form-data's
releases</a>.</em></p>
<blockquote>
<h2>v4.0.4</h2>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4">v4.0.4</a>
- 2025-07-16</h2>
<h3>Commits</h3>
<ul>
<li>[meta] add <code>auto-changelog</code> <a
href="811f68282f"><code>811f682</code></a></li>
<li>[Tests] handle predict-v8-randomness failures in node &lt; 17 and
node &gt; 23 <a
href="1d11a76434"><code>1d11a76</code></a></li>
<li>[Fix] Switch to using <code>crypto</code> random for boundary values
<a
href="3d1723080e"><code>3d17230</code></a></li>
<li>[Tests] fix linting errors <a
href="5e340800b5"><code>5e34080</code></a></li>
<li>[meta] actually ensure the readme backup isn’t published <a
href="316c82ba93"><code>316c82b</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code> <a
href="58c25d7640"><code>58c25d7</code></a></li>
<li>[meta] fix readme capitalization <a
href="2300ca1959"><code>2300ca1</code></a></li>
</ul>
<h2>v4.0.3</h2>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3">v4.0.3</a>
- 2025-06-05</h2>
<h3>Fixed</h3>
<ul>
<li>[Fix] <code>append</code>: avoid a crash on nullish values <a
href="https://redirect.github.com/form-data/form-data/issues/577"><code>[#577](https://github.com/form-data/form-data/issues/577)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[eslint] use a shared config <a
href="426ba9ac44"><code>426ba9a</code></a></li>
<li>[eslint] fix some spacing issues <a
href="20941917f0"><code>2094191</code></a></li>
<li>[Refactor] use <code>hasown</code> <a
href="81ab41b46f"><code>81ab41b</code></a></li>
<li>[Fix] validate boundary type in <code>setBoundary()</code> method <a
href="8d8e469309"><code>8d8e469</code></a></li>
<li>[Tests] add tests to check the behavior of <code>getBoundary</code>
with non-strings <a
href="837b8a1f75"><code>837b8a1</code></a></li>
<li>[Dev Deps] remove unused deps <a
href="870e4e6659"><code>870e4e6</code></a></li>
<li>[meta] remove local commit hooks <a
href="e6e83ccb54"><code>e6e83cc</code></a></li>
<li>[Dev Deps] update <code>eslint</code> <a
href="4066fd6f65"><code>4066fd6</code></a></li>
<li>[meta] fix scripts to use prepublishOnly <a
href="c4bbb13c0e"><code>c4bbb13</code></a></li>
</ul>
<h2>v4.0.2</h2>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2">v4.0.2</a>
- 2025-02-14</h2>
<h3>Merged</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
</ul>
<h3>Commits</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/form-data/form-data/blob/master/CHANGELOG.md">form-data's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4">v4.0.4</a>
- 2025-07-16</h2>
<h3>Commits</h3>
<ul>
<li>[meta] add <code>auto-changelog</code> <a
href="811f68282f"><code>811f682</code></a></li>
<li>[Tests] handle predict-v8-randomness failures in node &lt; 17 and
node &gt; 23 <a
href="1d11a76434"><code>1d11a76</code></a></li>
<li>[Fix] Switch to using <code>crypto</code> random for boundary values
<a
href="3d1723080e"><code>3d17230</code></a></li>
<li>[Tests] fix linting errors <a
href="5e340800b5"><code>5e34080</code></a></li>
<li>[meta] actually ensure the readme backup isn’t published <a
href="316c82ba93"><code>316c82b</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code> <a
href="58c25d7640"><code>58c25d7</code></a></li>
<li>[meta] fix readme capitalization <a
href="2300ca1959"><code>2300ca1</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3">v4.0.3</a>
- 2025-06-05</h2>
<h3>Fixed</h3>
<ul>
<li>[Fix] <code>append</code>: avoid a crash on nullish values <a
href="https://redirect.github.com/form-data/form-data/issues/577"><code>[#577](https://github.com/form-data/form-data/issues/577)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[eslint] use a shared config <a
href="426ba9ac44"><code>426ba9a</code></a></li>
<li>[eslint] fix some spacing issues <a
href="20941917f0"><code>2094191</code></a></li>
<li>[Refactor] use <code>hasown</code> <a
href="81ab41b46f"><code>81ab41b</code></a></li>
<li>[Fix] validate boundary type in <code>setBoundary()</code> method <a
href="8d8e469309"><code>8d8e469</code></a></li>
<li>[Tests] add tests to check the behavior of <code>getBoundary</code>
with non-strings <a
href="837b8a1f75"><code>837b8a1</code></a></li>
<li>[Dev Deps] remove unused deps <a
href="870e4e6659"><code>870e4e6</code></a></li>
<li>[meta] remove local commit hooks <a
href="e6e83ccb54"><code>e6e83cc</code></a></li>
<li>[Dev Deps] update <code>eslint</code> <a
href="4066fd6f65"><code>4066fd6</code></a></li>
<li>[meta] fix scripts to use prepublishOnly <a
href="c4bbb13c0e"><code>c4bbb13</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2">v4.0.2</a>
- 2025-02-14</h2>
<h3>Merged</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/pull/573"><code>[#573](https://github.com/form-data/form-data/issues/573)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
<li>fix (npmignore): ignore temporary build files <a
href="https://redirect.github.com/form-data/form-data/pull/532"><code>[#532](https://github.com/form-data/form-data/issues/532)</code></a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available (<a
href="https://redirect.github.com/form-data/form-data/issues/573">#573</a>)
<a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
<li>[Fix] set <code>Symbol.toStringTag</code> when available <a
href="https://redirect.github.com/form-data/form-data/issues/396"><code>[#396](https://github.com/form-data/form-data/issues/396)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>Merge tags v2.5.3 and v3.0.3 <a
href="92613b9208"><code>92613b9</code></a></li>
<li>[Tests] migrate from travis to GHA <a
href="806eda7774"><code>806eda7</code></a></li>
<li>[Tests] migrate from travis to GHA <a
href="8fdb3bc6b5"><code>8fdb3bc</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="41996f5ac7"><code>41996f5</code></a>
v4.0.4</li>
<li><a
href="316c82ba93"><code>316c82b</code></a>
[meta] actually ensure the readme backup isn’t published</li>
<li><a
href="2300ca1959"><code>2300ca1</code></a>
[meta] fix readme capitalization</li>
<li><a
href="811f68282f"><code>811f682</code></a>
[meta] add <code>auto-changelog</code></li>
<li><a
href="5e340800b5"><code>5e34080</code></a>
[Tests] fix linting errors</li>
<li><a
href="1d11a76434"><code>1d11a76</code></a>
[Tests] handle predict-v8-randomness failures in node &lt; 17 and node
&gt; 23</li>
<li><a
href="58c25d7640"><code>58c25d7</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code></li>
<li><a
href="3d1723080e"><code>3d17230</code></a>
[Fix] Switch to using <code>crypto</code> random for boundary
values</li>
<li><a
href="d8d67dc8ac"><code>d8d67dc</code></a>
v4.0.3</li>
<li><a
href="e6e83ccb54"><code>e6e83cc</code></a>
[meta] remove local commit hooks</li>
<li>Additional commits viewable in <a
href="https://github.com/form-data/form-data/compare/v4.0.0...v4.0.4">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~ljharb">ljharb</a>, a new releaser for
form-data since your current version.</p>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-07 20:33:23 +10:00
dependabot[bot]
5398ec59a5 Bump ws in /client (#3519)
Bumps and [ws](https://github.com/websockets/ws). These dependencies
needed to be updated together.
Updates `ws` from 8.5.0 to 8.18.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/websockets/ws/releases">ws's
releases</a>.</em></p>
<blockquote>
<h2>8.18.3</h2>
<h1>Bug fixes</h1>
<ul>
<li>Fixed a spec violation where the <code>Sec-WebSocket-Version</code>
header was not added
to the HTTP response if the client requested version was either invalid
or
unacceptable (33f5dbaf).</li>
</ul>
<h2>8.18.2</h2>
<h1>Bug fixes</h1>
<ul>
<li>Fixed an issue that, during message decompression when the maximum
size was
exceeded, led to the emission of an inaccurate error and closure of the
connection with an improper close code (<a
href="https://redirect.github.com/websockets/ws/issues/2285">#2285</a>).</li>
</ul>
<h2>8.18.1</h2>
<h1>Bug fixes</h1>
<ul>
<li>The length of the UNIX domain socket paths in the tests has been
shortened to
make them work when run via <a
href="https://github.com/nodejs/citgm">CITGM</a> (021f7b8b).</li>
</ul>
<h2>8.18.0</h2>
<h1>Features</h1>
<ul>
<li>Added support for <code>Blob</code> (<a
href="https://redirect.github.com/websockets/ws/issues/2229">#2229</a>).</li>
</ul>
<h2>8.17.1</h2>
<h1>Bug fixes</h1>
<ul>
<li>Fixed a DoS vulnerability (<a
href="https://redirect.github.com/websockets/ws/issues/2231">#2231</a>).</li>
</ul>
<p>A request with a number of headers exceeding
the[<code>server.maxHeadersCount</code>][]
threshold could be used to crash a ws server.</p>
<pre lang="js"><code>const http = require('http');
const WebSocket = require('ws');
<p>const wss = new WebSocket.Server({ port: 0 }, function () {
const chars =
&quot;!#$%&amp;'*+-.0123456789abcdefghijklmnopqrstuvwxyz^_`|~&quot;.split('');
const headers = {};
let count = 0;</p>
<p>for (let i = 0; i &lt; chars.length; i++) {
if (count === 2000) break;</p>
<pre><code>for (let j = 0; j &amp;lt; chars.length; j++) {
  const key = chars[i] + chars[j];
  headers[key] = 'x';
</code></pre>
<p>&lt;/tr&gt;&lt;/table&gt;
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="dabbdec92f"><code>dabbdec</code></a>
[dist] 8.18.3</li>
<li><a
href="33f5dbaf33"><code>33f5dba</code></a>
[fix] Respond with the supported protocol versions (<a
href="https://redirect.github.com/websockets/ws/issues/2291">#2291</a>)</li>
<li><a
href="22a5a17db5"><code>22a5a17</code></a>
[ci] Test on node 24</li>
<li><a
href="e67eb7ad70"><code>e67eb7a</code></a>
[ci] Do not test on node 23</li>
<li><a
href="fa670f2b24"><code>fa670f2</code></a>
[ci] Run the lint step on node 22</li>
<li><a
href="0eb8535f9b"><code>0eb8535</code></a>
[dist] 8.18.2</li>
<li><a
href="4f20aedbe2"><code>4f20aed</code></a>
[fix] Handle oversized messages with designated error (<a
href="https://redirect.github.com/websockets/ws/issues/2285">#2285</a>)</li>
<li><a
href="aa998e38c5"><code>aa998e3</code></a>
[pkg] Update globals to version 16.0.0</li>
<li><a
href="cf259541e8"><code>cf25954</code></a>
[minor] Fix nit in error message</li>
<li><a
href="b92745a9d6"><code>b92745a</code></a>
[dist] 8.18.1</li>
<li>Additional commits viewable in <a
href="https://github.com/websockets/ws/compare/8.5.0...8.18.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `ws` from 7.5.7 to 7.5.10
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/websockets/ws/releases">ws's
releases</a>.</em></p>
<blockquote>
<h2>8.18.3</h2>
<h1>Bug fixes</h1>
<ul>
<li>Fixed a spec violation where the <code>Sec-WebSocket-Version</code>
header was not added
to the HTTP response if the client requested version was either invalid
or
unacceptable (33f5dbaf).</li>
</ul>
<h2>8.18.2</h2>
<h1>Bug fixes</h1>
<ul>
<li>Fixed an issue that, during message decompression when the maximum
size was
exceeded, led to the emission of an inaccurate error and closure of the
connection with an improper close code (<a
href="https://redirect.github.com/websockets/ws/issues/2285">#2285</a>).</li>
</ul>
<h2>8.18.1</h2>
<h1>Bug fixes</h1>
<ul>
<li>The length of the UNIX domain socket paths in the tests has been
shortened to
make them work when run via <a
href="https://github.com/nodejs/citgm">CITGM</a> (021f7b8b).</li>
</ul>
<h2>8.18.0</h2>
<h1>Features</h1>
<ul>
<li>Added support for <code>Blob</code> (<a
href="https://redirect.github.com/websockets/ws/issues/2229">#2229</a>).</li>
</ul>
<h2>8.17.1</h2>
<h1>Bug fixes</h1>
<ul>
<li>Fixed a DoS vulnerability (<a
href="https://redirect.github.com/websockets/ws/issues/2231">#2231</a>).</li>
</ul>
<p>A request with a number of headers exceeding
the[<code>server.maxHeadersCount</code>][]
threshold could be used to crash a ws server.</p>
<pre lang="js"><code>const http = require('http');
const WebSocket = require('ws');
<p>const wss = new WebSocket.Server({ port: 0 }, function () {
const chars =
&quot;!#$%&amp;'*+-.0123456789abcdefghijklmnopqrstuvwxyz^_`|~&quot;.split('');
const headers = {};
let count = 0;</p>
<p>for (let i = 0; i &lt; chars.length; i++) {
if (count === 2000) break;</p>
<pre><code>for (let j = 0; j &amp;lt; chars.length; j++) {
  const key = chars[i] + chars[j];
  headers[key] = 'x';
</code></pre>
<p>&lt;/tr&gt;&lt;/table&gt;
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="dabbdec92f"><code>dabbdec</code></a>
[dist] 8.18.3</li>
<li><a
href="33f5dbaf33"><code>33f5dba</code></a>
[fix] Respond with the supported protocol versions (<a
href="https://redirect.github.com/websockets/ws/issues/2291">#2291</a>)</li>
<li><a
href="22a5a17db5"><code>22a5a17</code></a>
[ci] Test on node 24</li>
<li><a
href="e67eb7ad70"><code>e67eb7a</code></a>
[ci] Do not test on node 23</li>
<li><a
href="fa670f2b24"><code>fa670f2</code></a>
[ci] Run the lint step on node 22</li>
<li><a
href="0eb8535f9b"><code>0eb8535</code></a>
[dist] 8.18.2</li>
<li><a
href="4f20aedbe2"><code>4f20aed</code></a>
[fix] Handle oversized messages with designated error (<a
href="https://redirect.github.com/websockets/ws/issues/2285">#2285</a>)</li>
<li><a
href="aa998e38c5"><code>aa998e3</code></a>
[pkg] Update globals to version 16.0.0</li>
<li><a
href="cf259541e8"><code>cf25954</code></a>
[minor] Fix nit in error message</li>
<li><a
href="b92745a9d6"><code>b92745a</code></a>
[dist] 8.18.1</li>
<li>Additional commits viewable in <a
href="https://github.com/websockets/ws/compare/8.5.0...8.18.3">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-07 20:33:11 +10:00
dependabot[bot]
f6d536877b Bump on-headers and compression in /client (#3514)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-22 22:17:53 +10:00
dependabot[bot]
5f6bb8749e Bump electron from 22.3.25 to 28.3.2 in /client (#3513)
Bumps [electron](https://github.com/electron/electron) from 22.3.25 to
28.3.2.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="db688056d8"><code>db68805</code></a>
chore: cherry-pick 3 changes from 0-M125 (<a
href="https://redirect.github.com/electron/electron/issues/42221">#42221</a>)</li>
<li><a
href="cd25fbfd73"><code>cd25fbf</code></a>
chore: cherry-pick 1 changes from 0-M124 (<a
href="https://redirect.github.com/electron/electron/issues/41985">#41985</a>)</li>
<li><a
href="65d35309db"><code>65d3530</code></a>
fix: rename patches/devtools_frontend to patches/devtools-frontend (<a
href="https://redirect.github.com/electron/electron/issues/42212">#42212</a>)</li>
<li><a
href="1e054f3ef9"><code>1e054f3</code></a>
chore: cherry-pick b3c01ac1e60a from v8 (<a
href="https://redirect.github.com/electron/electron/issues/42176">#42176</a>)</li>
<li><a
href="c89546bc92"><code>c89546b</code></a>
chore: cherry-pick f320600cd1f4 from v8 (<a
href="https://redirect.github.com/electron/electron/issues/42124">#42124</a>)</li>
<li><a
href="19d3d66f46"><code>19d3d66</code></a>
chore: cherry-pick 19a4eebd05a7 from devtools-frontend (<a
href="https://redirect.github.com/electron/electron/issues/42103">#42103</a>)</li>
<li><a
href="196b6e66b8"><code>196b6e6</code></a>
chore: cherry-pick 1 changes from 3-M124 (<a
href="https://redirect.github.com/electron/electron/issues/42091">#42091</a>)</li>
<li><a
href="b5262e4700"><code>b5262e4</code></a>
chore: cherry-pick 013961609785 from chromium (<a
href="https://redirect.github.com/electron/electron/issues/42092">#42092</a>)</li>
<li><a
href="70cdc2e551"><code>70cdc2e</code></a>
chore: cherry-pick b2cc7b7ac538 from chromium (<a
href="https://redirect.github.com/electron/electron/issues/42098">#42098</a>)</li>
<li><a
href="b5eba900b5"><code>b5eba90</code></a>
chore: cherry-pick 8a3bfd4b7403 from devtools-frontend (<a
href="https://redirect.github.com/electron/electron/issues/42093">#42093</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/electron/electron/compare/v22.3.25...v28.3.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=electron&package-manager=npm_and_yarn&previous-version=22.3.25&new-version=28.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 08:16:28 +10:00
zhexu14
bcdd9e1807 Handle scenaio where flight that is not added to the ATO (flight in the process of being created) is deleted (#3512) 2025-06-30 19:53:10 +10:00
zhexu14
7b1c84d347 Recover combat instances from flight state when initializing aircraft simulation (#3511)
This PR recovers combat instances from the flight state when
initializing aircraft simulation. Flight states are serialized into a
game save but the state of the aircraft simulation is not. When
deserializing a game, the aircraft simulation would otherwise lose track
of the combat instances, leading the simulation never exiting combat in
some scenarios e.g. when at the mission IP.
2025-06-22 19:32:58 +10:00
zhexu14
9baebeebf8 Check if callsign is None before releasing to handle scenario where callsign was never generated correctly (#3510)
This PR is a workaround for modules where the standard callsigns (Ford,
Uzi etc) are not supported. Callsigns are not generated correctly and a
crash occurs when trying to release them if a package is released.
2025-06-14 18:15:48 +10:00
zhexu14
6da9dc7a49 Persist fast forward in save game file (#3509)
This PR allows persisting of the game state, in particular the flight
state and simulation time, after a fast forward.
2025-06-14 08:16:56 +10:00
zhexu14
81d5f82090 pydcs update for DCS 2.9.16 (#3508) 2025-06-09 16:13:55 +10:00
zhexu14
b141320052 Remove package when last flight in package is cancelled (#3507)
This PR handles the scenario where the last flight in a package is
cancelled (deleted). Previously, the package would show "No mission".
With this PR, the package is cancelled (deleted).
2025-06-09 15:47:03 +10:00
zhexu14
3ed1f20233 Restore theater ground objects to full health when repairing via UI (#3506) 2025-06-07 21:47:04 +10:00
Starfire13
43be243711 Campaign inversion fix for Operation Vectron's Claw (#3505) 2025-06-05 21:59:32 +10:00
zhexu14
be5b201848 Update requirements.txt to latest pydcs version (#3502) 2025-05-04 21:18:47 +10:00
dependabot[bot]
a0a8bab373 Bump http-proxy-middleware from 2.0.3 to 2.0.9 in /client (#3500)
Bumps
[http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware)
from 2.0.3 to 2.0.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/chimurai/http-proxy-middleware/releases">http-proxy-middleware's
releases</a>.</em></p>
<blockquote>
<h2>v2.0.9</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(fixRequestBody): check readableLength by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/1097">chimurai/http-proxy-middleware#1097</a></li>
<li>chore(package): v2.0.9 by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/1099">chimurai/http-proxy-middleware#1099</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.8...v2.0.9">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.8...v2.0.9</a></p>
<h2>v2.0.8</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(fixRequestBody): prevent multiple .write() calls by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/1090">chimurai/http-proxy-middleware#1090</a></li>
<li>fix(fixRequestBody): handle invalid request by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/1091">chimurai/http-proxy-middleware#1091</a></li>
<li>chore(package): v2.0.8 by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/1094">chimurai/http-proxy-middleware#1094</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7...v2.0.8">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7...v2.0.8</a></p>
<h2>v2.0.7</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.6...v2.0.7">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.6...v2.0.7</a></p>
<h2>v2.0.7-beta.1</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7-beta.0...v2.0.7-beta.1">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7-beta.0...v2.0.7-beta.1</a></p>
<h2>v2.0.7-beta.0</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.6...v2.0.7-beta.0">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.6...v2.0.7-beta.0</a></p>
<h2>v2.0.6</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(proxyReqWs): catch socket errors by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/763">chimurai/http-proxy-middleware#763</a></li>
<li>chore(package): v2.0.6 by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/764">chimurai/http-proxy-middleware#764</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.5...v2.0.6">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.5...v2.0.6</a></p>
<h2>v2.0.5</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(error handler): add default handler to econnreset by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/759">chimurai/http-proxy-middleware#759</a></li>
<li>chore(package): v2.0.5 by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/760">chimurai/http-proxy-middleware#760</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.4...v2.0.5">https://github.com/chimurai/http-proxy-middleware/compare/v2.0.4...v2.0.5</a></p>
<h2>v2.0.4</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(package): bump dev dependencies by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/714">chimurai/http-proxy-middleware#714</a></li>
<li>chore(vscode): add recommended extensions by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/715">chimurai/http-proxy-middleware#715</a></li>
<li>docs(response-interceptor.md): add headers modification example by
<a
href="https://github.com/stefanwright1988"><code>@​stefanwright1988</code></a>
in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/724">chimurai/http-proxy-middleware#724</a></li>
<li>fix(fix-request-body): improve content type check by <a
href="https://github.com/kevinxh"><code>@​kevinxh</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/725">chimurai/http-proxy-middleware#725</a></li>
<li>chore(package): v2.0.4 by <a
href="https://github.com/chimurai"><code>@​chimurai</code></a> in <a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/729">chimurai/http-proxy-middleware#729</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/chimurai/http-proxy-middleware/blob/v2.0.9/CHANGELOG.md">http-proxy-middleware's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.9">v2.0.9</a></h2>
<ul>
<li>fix(fixRequestBody): check readableLength</li>
</ul>
<h2><a
href="https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.8">v2.0.8</a></h2>
<ul>
<li>fix(fixRequestBody): prevent multiple .write() calls</li>
<li>fix(fixRequestBody): handle invalid request</li>
</ul>
<h2><a
href="https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.7">v2.0.7</a></h2>
<ul>
<li>ci(github actions): add publish.yml</li>
<li>fix(filter): handle errors</li>
</ul>
<h2><a
href="https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.6">v2.0.6</a></h2>
<ul>
<li>fix(proxyReqWs): catch socket errors (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/763">#763</a>)</li>
</ul>
<h2><a
href="https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.5">v2.0.5</a></h2>
<ul>
<li>fix(error handler): add default handler to econnreset (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/759">#759</a>)</li>
</ul>
<h2><a
href="https://github.com/chimurai/http-proxy-middleware/releases/tag/v2.0.4">v2.0.4</a></h2>
<ul>
<li>fix(fix-request-body): improve content type check (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/pull/725">#725</a>)
(<a href="https://github.com/kevinxh">kevinxh</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="617a7c9da9"><code>617a7c9</code></a>
chore(package): v2.0.9 (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/issues/1099">#1099</a>)</li>
<li><a
href="d22d587648"><code>d22d587</code></a>
fix(fixRequestBody): check readableLength (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/issues/1097">#1097</a>)</li>
<li><a
href="d03d51b54a"><code>d03d51b</code></a>
chore(package): v2.0.8 (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/issues/1094">#1094</a>)</li>
<li><a
href="c50dd06d91"><code>c50dd06</code></a>
fix(fixRequestBody): handle invalid request (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/issues/1091">#1091</a>)</li>
<li><a
href="76a9d8d6dc"><code>76a9d8d</code></a>
fix(fixRequestBody): prevent multiple .write() calls (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/issues/1090">#1090</a>)</li>
<li><a
href="1e92339098"><code>1e92339</code></a>
ci(github-actions): fix npm tag</li>
<li><a
href="90afb7c9a6"><code>90afb7c</code></a>
chore(package): v2.0.7</li>
<li><a
href="0b4274e8cc"><code>0b4274e</code></a>
fix(filter): handle errors</li>
<li><a
href="1bd6dd578b"><code>1bd6dd5</code></a>
ci(github actions): add publish.yml</li>
<li><a
href="c08cb1e13b"><code>c08cb1e</code></a>
chore(package): v2.0.6 (<a
href="https://redirect.github.com/chimurai/http-proxy-middleware/issues/764">#764</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/chimurai/http-proxy-middleware/compare/v2.0.3...v2.0.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=http-proxy-middleware&package-manager=npm_and_yarn&previous-version=2.0.3&new-version=2.0.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-27 18:50:28 +10:00
dependabot[bot]
38d9f476c9 Bump @babel/runtime from 7.19.0 to 7.27.0 in /client (#3501)
Bumps
[@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime)
from 7.19.0 to 7.27.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/babel/babel/releases"><code>@​babel/runtime</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v7.27.0 (2025-03-24)</h2>
<p>Thanks <a
href="https://github.com/ishchhabra"><code>@​ishchhabra</code></a> and
<a href="https://github.com/vovkasm"><code>@​vovkasm</code></a> for your
first PRs!</p>
<h4>👓 Spec Compliance</h4>
<ul>
<li><code>babel-generator</code>, <code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/16977">#16977</a>
Default <code>importAttributesKeyword</code> to <code>with</code> (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>🚀 New Feature</h4>
<ul>
<li><code>babel-helper-create-class-features-plugin</code>,
<code>babel-traverse</code>, <code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17169">#17169</a>
Allow <code>traverseFast</code> to exit early (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-parser</code>, <code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17110">#17110</a> Add
<code>ImportAttributes</code> to <code>Standardized</code> and move its
parser test fixtures (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-generator</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17100">#17100</a>
fix(babel-generator): add named export of generate function (<a
href="https://github.com/vovkasm"><code>@​vovkasm</code></a>)</li>
</ul>
</li>
<li><code>babel-parser</code>, <code>babel-template</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17149">#17149</a> Add
<code>allowYieldOutsideFunction</code> to parser (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-plugin-transform-typescript</code>,
<code>babel-traverse</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17102">#17102</a>
feat: Add <code>upToScope</code> parameter to <code>hasBinding</code>
(<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17082">#17082</a>
Support ESTree AccessorProperty (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17162">#17162</a>
feat(babel-types): Add support for BigInt literal conversion in
valueToNode (<a
href="https://github.com/ishchhabra"><code>@​ishchhabra</code></a>)</li>
</ul>
</li>
</ul>
<h4>🐛 Bug Fix</h4>
<ul>
<li><code>babel-helper-create-class-features-plugin</code>,
<code>babel-plugin-transform-class-properties</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/16816">#16816</a>
fix: Class reference in type throws error (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-traverse</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17170">#17170</a>
fix: Reset child scopes when <code>scope.crawl()</code> (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-helpers</code>, <code>babel-preset-typescript</code>,
<code>babel-runtime-corejs2</code>, <code>babel-runtime-corejs3</code>,
<code>babel-runtime</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17118">#17118</a>
Fix: align behaviour to tsc <code>rewriteRelativeImportExtensions</code>
(<a href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-cli</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17182">#17182</a>
fix: <code>@babel/cli</code> generates duplicate inline source maps (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-plugin-transform-named-capturing-groups-regex</code>,
<code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17175">#17175</a>
Generate computed proto key (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>🏃‍♀️ Performance</h4>
<ul>
<li><code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/16870">#16870</a>
perf: Improve builders of <code>@babel/types</code> (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-helper-create-regexp-features-plugin</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17176">#17176</a>
fix: improve duplicate named groups check (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>Committers: 5</h4>
<ul>
<li>Babel Bot (<a
href="https://github.com/babel-bot"><code>@​babel-bot</code></a>)</li>
<li>Huáng Jùnliàng (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
<li>Ish Chhabra (<a
href="https://github.com/ishchhabra"><code>@​ishchhabra</code></a>)</li>
<li>Vladimir Timofeev (<a
href="https://github.com/vovkasm"><code>@​vovkasm</code></a>)</li>
<li><a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a></li>
</ul>
<h2>v7.26.10 (2025-03-11)</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/babel/babel/blob/main/CHANGELOG.md"><code>@​babel/runtime</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>v7.27.0 (2025-03-24)</h2>
<h4>👓 Spec Compliance</h4>
<ul>
<li><code>babel-generator</code>, <code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/16977">#16977</a>
Default <code>importAttributesKeyword</code> to <code>with</code> (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>🚀 New Feature</h4>
<ul>
<li><code>babel-helper-create-class-features-plugin</code>,
<code>babel-traverse</code>, <code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17169">#17169</a>
Allow <code>traverseFast</code> to exit early (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-parser</code>, <code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17110">#17110</a> Add
<code>ImportAttributes</code> to <code>Standardized</code> and move its
parser test fixtures (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-generator</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17100">#17100</a>
fix(babel-generator): add named export of generate function (<a
href="https://github.com/vovkasm"><code>@​vovkasm</code></a>)</li>
</ul>
</li>
<li><code>babel-parser</code>, <code>babel-template</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17149">#17149</a> Add
<code>allowYieldOutsideFunction</code> to parser (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-plugin-transform-typescript</code>,
<code>babel-traverse</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17102">#17102</a>
feat: Add <code>upToScope</code> parameter to <code>hasBinding</code>
(<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17082">#17082</a>
Support ESTree AccessorProperty (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17162">#17162</a>
feat(babel-types): Add support for BigInt literal conversion in
valueToNode (<a
href="https://github.com/ishchhabra"><code>@​ishchhabra</code></a>)</li>
</ul>
</li>
</ul>
<h4>🐛 Bug Fix</h4>
<ul>
<li><code>babel-helper-create-class-features-plugin</code>,
<code>babel-plugin-transform-class-properties</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/16816">#16816</a>
fix: Class reference in type throws error (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-traverse</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17170">#17170</a>
fix: Reset child scopes when <code>scope.crawl()</code> (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-helpers</code>, <code>babel-preset-typescript</code>,
<code>babel-runtime-corejs2</code>, <code>babel-runtime-corejs3</code>,
<code>babel-runtime</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17118">#17118</a>
Fix: align behaviour to tsc <code>rewriteRelativeImportExtensions</code>
(<a href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-cli</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17182">#17182</a>
fix: <code>@babel/cli</code> generates duplicate inline source maps (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-plugin-transform-named-capturing-groups-regex</code>,
<code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17175">#17175</a>
Generate computed proto key (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>🏃‍♀️ Performance</h4>
<ul>
<li><code>babel-types</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/16870">#16870</a>
perf: Improve builders of <code>@babel/types</code> (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-helper-create-regexp-features-plugin</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17176">#17176</a>
fix: improve duplicate named groups check (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h2>v7.26.10 (2025-03-11)</h2>
<h4>👓 Spec Compliance</h4>
<ul>
<li><code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17159">#17159</a>
Disallow decorator in array pattern (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>🐛 Bug Fix</h4>
<ul>
<li><code>babel-parser</code>, <code>babel-template</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17164">#17164</a>
Fix: always initialize ExportDeclaration attributes (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-core</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17142">#17142</a>
fix: &quot;Map maximum size exceeded&quot; in deepClone (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5c350eab83"><code>5c350ea</code></a>
v7.27.0</li>
<li><a
href="ca4865a7f4"><code>ca4865a</code></a>
Fix: align behaviour to tsc <code>rewriteRelativeImportExtensions</code>
(<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-runtime/issues/17118">#17118</a>)</li>
<li><a
href="e1ce99df42"><code>e1ce99d</code></a>
v7.26.10</li>
<li><a
href="d5952e80c0"><code>d5952e8</code></a>
Fix processing of replacement pattern with named capture groups (<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-runtime/issues/17173">#17173</a>)</li>
<li><a
href="64bca7b5f3"><code>64bca7b</code></a>
v7.26.9</li>
<li><a
href="2d9514066e"><code>2d95140</code></a>
v7.26.7</li>
<li><a
href="63d30381c1"><code>63d3038</code></a>
v7.26.0</li>
<li><a
href="b07957ebb3"><code>b07957e</code></a>
v7.25.9</li>
<li><a
href="af917594e4"><code>af91759</code></a>
fix: Accidentally publishing useless files (<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-runtime/issues/16917">#16917</a>)</li>
<li><a
href="2533cfb0c1"><code>2533cfb</code></a>
v7.25.7</li>
<li>Additional commits viewable in <a
href="https://github.com/babel/babel/commits/v7.27.0/packages/babel-runtime">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@babel/runtime&package-manager=npm_and_yarn&previous-version=7.19.0&new-version=7.27.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-27 18:50:19 +10:00
dependabot[bot]
8c3fb0f67b Bump h11 from 0.14.0 to 0.16.0 (#3498)
Bumps [h11](https://github.com/python-hyper/h11) from 0.14.0 to 0.16.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1c5b07581f"><code>1c5b075</code></a>
this time for surer</li>
<li><a
href="d9c369935e"><code>d9c3699</code></a>
this time for sure...</li>
<li><a
href="d91b9dd229"><code>d91b9dd</code></a>
blacken</li>
<li><a
href="5a4683ca46"><code>5a4683c</code></a>
Soothe mypy</li>
<li><a
href="9c9567f0a9"><code>9c9567f</code></a>
Bump version to 0.16.0</li>
<li><a
href="114803a29c"><code>114803a</code></a>
Merge commit from fork</li>
<li><a
href="9462006f6c"><code>9462006</code></a>
Bump version to 0.15.0</li>
<li><a
href="70a96bea8e"><code>70a96be</code></a>
Merge pull request <a
href="https://redirect.github.com/python-hyper/h11/issues/181">#181</a>
from Julien00859/Julien00859/get_int_max_str_digits</li>
<li><a
href="60782ad107"><code>60782ad</code></a>
Reject Content-Length longer 1 billion TB</li>
<li><a
href="dff7cc397a"><code>dff7cc3</code></a>
Validate Chunked-Encoding chunk footer</li>
<li>Additional commits viewable in <a
href="https://github.com/python-hyper/h11/compare/v0.14.0...v0.16.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=h11&package-manager=pip&previous-version=0.14.0&new-version=0.16.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: zhexu14 <64713351+zhexu14@users.noreply.github.com>
2025-04-27 18:50:09 +10:00
zhexu14
b046365b91 Update Github actions to use latest versions of setup-python and checkout (#3499) 2025-04-27 18:41:20 +10:00
zhexu14
023c56700e Wrap DEAD event handler in pcall as it sometimes fails (#3497) 2025-04-06 22:43:52 +10:00
Starfire13
5f66b6230f Fix Operation Gazelle inversion (#3494)
Operation Gazelle can now be played inverted.
2025-04-03 21:19:42 +11:00
dependabot[bot]
7246c16774 Bump axios from 1.7.4 to 1.8.3 in /client (#3492)
Bumps [axios](https://github.com/axios/axios) from 1.7.4 to 1.8.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>Release v1.8.3</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add missing type for allowAbsoluteUrls (<a
href="https://redirect.github.com/axios/axios/issues/6818">#6818</a>)
(<a
href="10fa70ef14">10fa70e</a>)</li>
<li><strong>xhr/fetch:</strong> pass <code>allowAbsoluteUrls</code> to
<code>buildFullPath</code> in <code>xhr</code> and <code>fetch</code>
adapters (<a
href="https://redirect.github.com/axios/axios/issues/6814">#6814</a>)
(<a
href="ec159e507b">ec159e5</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a href="https://github.com/Electroid"
title="+6/-0 ([#6811](https://github.com/axios/axios/issues/6811)
)">Ashcon Partovi</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/StefanBRas"
title="+4/-0 ([#6818](https://github.com/axios/axios/issues/6818)
)">StefanBRas</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/mhassan1"
title="+2/-2 ([#6814](https://github.com/axios/axios/issues/6814)
)">Marc Hassan</a></li>
</ul>
<h2>Release v1.8.2</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>http-adapter:</strong> add allowAbsoluteUrls to path
building (<a
href="https://redirect.github.com/axios/axios/issues/6810">#6810</a>)
(<a
href="fb8eec214c">fb8eec2</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a href="https://github.com/lexcorp16"
title="+1/-1 ([#6810](https://github.com/axios/axios/issues/6810)
)">Fasoro-Joseph Alexander</a></li>
</ul>
<h2>Release v1.8.1</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>utils:</strong> move <code>generateString</code> to platform
utils to avoid importing crypto module into client builds; (<a
href="https://redirect.github.com/axios/axios/issues/6789">#6789</a>)
(<a
href="36a5a620be">36a5a62</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a
href="https://github.com/DigitalBrainJS" title="+51/-47
([#6789](https://github.com/axios/axios/issues/6789) )">Dmitriy
Mozgovoy</a></li>
</ul>
<h2>Release v1.8.0</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>examples:</strong> application crashed when navigating
examples in browser (<a
href="https://redirect.github.com/axios/axios/issues/5938">#5938</a>)
(<a
href="1260ded634">1260ded</a>)</li>
<li>missing word in SUPPORT_QUESTION.yml (<a
href="https://redirect.github.com/axios/axios/issues/6757">#6757</a>)
(<a
href="1f890b13f2">1f890b1</a>)</li>
<li><strong>utils:</strong> replace getRandomValues with crypto module
(<a
href="https://redirect.github.com/axios/axios/issues/6788">#6788</a>)
(<a
href="23a25af068">23a25af</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>Add config for ignoring absolute URLs (<a
href="https://redirect.github.com/axios/axios/issues/5902">#5902</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/6192">#6192</a>)
(<a
href="32c7bcc0f2">32c7bcc</a>)</li>
</ul>
<h3>Reverts</h3>
<ul>
<li>Revert &quot;chore: expose fromDataToStream to be consumable (<a
href="https://redirect.github.com/axios/axios/issues/6731">#6731</a>)&quot;
(<a
href="https://redirect.github.com/axios/axios/issues/6732">#6732</a>)
(<a
href="1317261125">1317261</a>),
closes <a
href="https://redirect.github.com/axios/axios/issues/6731">#6731</a> <a
href="https://redirect.github.com/axios/axios/issues/6732">#6732</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/axios/axios/compare/v1.8.2...v1.8.3">1.8.3</a>
(2025-03-10)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add missing type for allowAbsoluteUrls (<a
href="https://redirect.github.com/axios/axios/issues/6818">#6818</a>)
(<a
href="10fa70ef14">10fa70e</a>)</li>
<li><strong>xhr/fetch:</strong> pass <code>allowAbsoluteUrls</code> to
<code>buildFullPath</code> in <code>xhr</code> and <code>fetch</code>
adapters (<a
href="https://redirect.github.com/axios/axios/issues/6814">#6814</a>)
(<a
href="ec159e507b">ec159e5</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a href="https://github.com/Electroid"
title="+6/-0 ([#6811](https://github.com/axios/axios/issues/6811)
)">Ashcon Partovi</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/StefanBRas"
title="+4/-0 ([#6818](https://github.com/axios/axios/issues/6818)
)">StefanBRas</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/mhassan1"
title="+2/-2 ([#6814](https://github.com/axios/axios/issues/6814)
)">Marc Hassan</a></li>
</ul>
<h2><a
href="https://github.com/axios/axios/compare/v1.8.1...v1.8.2">1.8.2</a>
(2025-03-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>http-adapter:</strong> add allowAbsoluteUrls to path
building (<a
href="https://redirect.github.com/axios/axios/issues/6810">#6810</a>)
(<a
href="fb8eec214c">fb8eec2</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a href="https://github.com/lexcorp16"
title="+1/-1 ([#6810](https://github.com/axios/axios/issues/6810)
)">Fasoro-Joseph Alexander</a></li>
</ul>
<h2><a
href="https://github.com/axios/axios/compare/v1.8.0...v1.8.1">1.8.1</a>
(2025-02-26)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>utils:</strong> move <code>generateString</code> to platform
utils to avoid importing crypto module into client builds; (<a
href="https://redirect.github.com/axios/axios/issues/6789">#6789</a>)
(<a
href="36a5a620be">36a5a62</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a
href="https://github.com/DigitalBrainJS" title="+51/-47
([#6789](https://github.com/axios/axios/issues/6789) )">Dmitriy
Mozgovoy</a></li>
</ul>
<h1><a
href="https://github.com/axios/axios/compare/v1.7.9...v1.8.0">1.8.0</a>
(2025-02-25)</h1>
<h3>Bug Fixes</h3>
<ul>
<li><strong>examples:</strong> application crashed when navigating
examples in browser (<a
href="https://redirect.github.com/axios/axios/issues/5938">#5938</a>)
(<a
href="1260ded634">1260ded</a>)</li>
<li>missing word in SUPPORT_QUESTION.yml (<a
href="https://redirect.github.com/axios/axios/issues/6757">#6757</a>)
(<a
href="1f890b13f2">1f890b1</a>)</li>
<li><strong>utils:</strong> replace getRandomValues with crypto module
(<a
href="https://redirect.github.com/axios/axios/issues/6788">#6788</a>)
(<a
href="23a25af068">23a25af</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>Add config for ignoring absolute URLs (<a
href="https://redirect.github.com/axios/axios/issues/5902">#5902</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/6192">#6192</a>)
(<a
href="32c7bcc0f2">32c7bcc</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="39ec206483"><code>39ec206</code></a>
chore(release): v1.8.3 (<a
href="https://redirect.github.com/axios/axios/issues/6819">#6819</a>)</li>
<li><a
href="10fa70ef14"><code>10fa70e</code></a>
fix: add missing type for allowAbsoluteUrls (<a
href="https://redirect.github.com/axios/axios/issues/6818">#6818</a>)</li>
<li><a
href="7821ef9f5b"><code>7821ef9</code></a>
docs: update readme to include bun install (<a
href="https://redirect.github.com/axios/axios/issues/6811">#6811</a>)</li>
<li><a
href="ec159e507b"><code>ec159e5</code></a>
fix(xhr/fetch): pass <code>allowAbsoluteUrls</code> to
<code>buildFullPath</code> in <code>xhr</code> and `fet...</li>
<li><a
href="a9f7689b0c"><code>a9f7689</code></a>
chore(release): v1.8.2 (<a
href="https://redirect.github.com/axios/axios/issues/6812">#6812</a>)</li>
<li><a
href="fb8eec214c"><code>fb8eec2</code></a>
fix(http-adapter): add allowAbsoluteUrls to path building (<a
href="https://redirect.github.com/axios/axios/issues/6810">#6810</a>)</li>
<li><a
href="9812045755"><code>9812045</code></a>
chore(sponsor): update sponsor block (<a
href="https://redirect.github.com/axios/axios/issues/6804">#6804</a>)</li>
<li><a
href="72acf75937"><code>72acf75</code></a>
chore(sponsor): update sponsor block (<a
href="https://redirect.github.com/axios/axios/issues/6794">#6794</a>)</li>
<li><a
href="2e64afdff5"><code>2e64afd</code></a>
chore(release): v1.8.1 (<a
href="https://redirect.github.com/axios/axios/issues/6800">#6800</a>)</li>
<li><a
href="36a5a620be"><code>36a5a62</code></a>
fix(utils): move <code>generateString</code> to platform utils to avoid
importing crypto...</li>
<li>Additional commits viewable in <a
href="https://github.com/axios/axios/compare/v1.7.4...v1.8.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axios&package-manager=npm_and_yarn&previous-version=1.7.4&new-version=1.8.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-15 09:05:04 +11:00
dependabot[bot]
dd407414a8 Bump jinja2 from 3.1.5 to 3.1.6 (#3490)
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.5 to 3.1.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/releases">jinja2's
releases</a>.</em></p>
<blockquote>
<h2>3.1.6</h2>
<p>This is the Jinja 3.1.6 security release, which fixes security issues
but does not otherwise change behavior and should not result in breaking
changes compared to the latest feature release.</p>
<p>PyPI: <a
href="https://pypi.org/project/Jinja2/3.1.6/">https://pypi.org/project/Jinja2/3.1.6/</a>
Changes: <a
href="https://jinja.palletsprojects.com/en/stable/changes/#version-3-1-6">https://jinja.palletsprojects.com/en/stable/changes/#version-3-1-6</a></p>
<ul>
<li>The <code>|attr</code> filter does not bypass the environment's
attribute lookup, allowing the sandbox to apply its checks. <a
href="https://github.com/pallets/jinja/security/advisories/GHSA-cpwx-vrp4-4pq7">https://github.com/pallets/jinja/security/advisories/GHSA-cpwx-vrp4-4pq7</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.6</h2>
<p>Released 2025-03-05</p>
<ul>
<li>The <code>|attr</code> filter does not bypass the environment's
attribute lookup,
allowing the sandbox to apply its checks.
:ghsa:<code>cpwx-vrp4-4pq7</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="15206881c0"><code>1520688</code></a>
release version 3.1.6</li>
<li><a
href="90457bbf33"><code>90457bb</code></a>
Merge commit from fork</li>
<li><a
href="065334d1ee"><code>065334d</code></a>
attr filter uses env.getattr</li>
<li><a
href="033c20015c"><code>033c200</code></a>
start version 3.1.6</li>
<li><a
href="bc68d4efa9"><code>bc68d4e</code></a>
use global contributing guide (<a
href="https://redirect.github.com/pallets/jinja/issues/2070">#2070</a>)</li>
<li><a
href="247de5e0c5"><code>247de5e</code></a>
use global contributing guide</li>
<li><a
href="ab8218c7a1"><code>ab8218c</code></a>
use project advisory link instead of global</li>
<li><a
href="b4ffc8ff29"><code>b4ffc8f</code></a>
release version 3.1.5 (<a
href="https://redirect.github.com/pallets/jinja/issues/2066">#2066</a>)</li>
<li>See full diff in <a
href="https://github.com/pallets/jinja/compare/3.1.5...3.1.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.5&new-version=3.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-15 09:04:45 +11:00
zhexu14
88eded41ae Bump version to 14, update changelog (#3489) 2025-02-22 06:41:03 +00:00
zhexu14
51e46653b9 Disable Air Wing and Transfer buttons if no game is enabled (#3488)
This PR addresses #3481 by disabling the Air Wing and Transfer buttons
if no game is loaded.
2025-02-22 06:26:05 +00:00
zhexu14
60c7990d63 Bump starlette==0.45.3, fastapi==0.115.8 (#3487) 2025-02-22 06:08:38 +00:00
zhexu14
6447930654 Bump version to 13, update changelog (#3486) 2025-02-16 08:25:09 +11:00
zhexu14
54304573b9 Update pydcs to resolve carrier spawn issue and for DCS 2.9.12 (#3485)
This PR updates the pydcs build to the latest version to resolve issues
with carrier spawns in multiplayer and to update DCS 2.9.12 support.
2025-02-15 19:51:47 +11:00
dependabot[bot]
5ad4493ec2 Bump virtualenv from 20.24.7 to 20.26.6 (#3483)
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.24.7 to
20.26.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/virtualenv/releases">virtualenv's
releases</a>.</em></p>
<blockquote>
<h2>20.26.6</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.26.5 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2766">pypa/virtualenv#2766</a></li>
<li>Fix <a
href="https://redirect.github.com/pypa/virtualenv/issues/2768">#2768</a>:
Quote template strings in activation scripts by <a
href="https://github.com/y5c4l3"><code>@​y5c4l3</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2771">pypa/virtualenv#2771</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/y5c4l3"><code>@​y5c4l3</code></a> made
their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2771">pypa/virtualenv#2771</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.26.5...20.26.6">https://github.com/pypa/virtualenv/compare/20.26.5...20.26.6</a></p>
<h2>20.26.5</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.26.4 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2761">pypa/virtualenv#2761</a></li>
<li>Use uv over pip by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2765">pypa/virtualenv#2765</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.26.4...20.26.5">https://github.com/pypa/virtualenv/compare/20.26.4...20.26.5</a></p>
<h2>20.26.4</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.26.3 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2742">pypa/virtualenv#2742</a></li>
<li>Fix whitespace around backticks in changelog by <a
href="https://github.com/edmorley"><code>@​edmorley</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2751">pypa/virtualenv#2751</a></li>
<li>Test latest Python 3.13 by <a
href="https://github.com/hugovk"><code>@​hugovk</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2752">pypa/virtualenv#2752</a></li>
<li>Fix typo in Nushell activation script by <a
href="https://github.com/edmorley"><code>@​edmorley</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2754">pypa/virtualenv#2754</a></li>
<li>GitHub Actions: Replace deprecated macos-12 with macos-13 by <a
href="https://github.com/hugovk"><code>@​hugovk</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2756">pypa/virtualenv#2756</a></li>
<li>Fix <a
href="https://redirect.github.com/pypa/virtualenv/issues/2728">#2728</a>:
Activating venv create unwanted console output by <a
href="https://github.com/ShootGan"><code>@​ShootGan</code></a> in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2748">pypa/virtualenv#2748</a></li>
<li>Upgrade bundled wheels by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2760">pypa/virtualenv#2760</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/ShootGan"><code>@​ShootGan</code></a>
made their first contribution in <a
href="https://redirect.github.com/pypa/virtualenv/pull/2748">pypa/virtualenv#2748</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.26.3...20.26.4">https://github.com/pypa/virtualenv/compare/20.26.3...20.26.4</a></p>
<h2>20.26.3</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>release 20.26.2 by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2724">pypa/virtualenv#2724</a></li>
<li>Bump embeded wheels by <a
href="https://github.com/gaborbernat"><code>@​gaborbernat</code></a> in
<a
href="https://redirect.github.com/pypa/virtualenv/pull/2741">pypa/virtualenv#2741</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/pypa/virtualenv/compare/20.26.2...20.26.3">https://github.com/pypa/virtualenv/compare/20.26.2...20.26.3</a></p>
<h2>20.26.2</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's
changelog</a>.</em></p>
<blockquote>
<h2>v20.26.6 (2024-09-27)</h2>
<p>Bugfixes - 20.26.6</p>
<pre><code>- Properly quote string placeholders in activation script
templates to mitigate
  potential command injection - by :user:`y5c4l3`. (:issue:`2768`)
<h2>v20.26.5 (2024-09-17)</h2>
<p>Bugfixes - 20.26.5
</code></pre></p>
<ul>
<li>Upgrade embedded wheels: setuptools to <code>75.1.0</code> from
<code>74.1.2</code> - by :user:<code>gaborbernat</code>.
(:issue:<code>2765</code>)</li>
</ul>
<h2>v20.26.4 (2024-09-07)</h2>
<p>Bugfixes - 20.26.4</p>
<pre><code>- no longer create `()` output in console during activation
of a virtualenv by .bat file. (:issue:`2728`)
- Upgrade embedded wheels:
<ul>
<li>wheel to <code>0.44.0</code> from <code>0.43.0</code></li>
<li>pip to <code>24.2</code> from <code>24.1</code></li>
<li>setuptools to <code>74.1.2</code> from <code>70.1.0</code>
(:issue:<code>2760</code>)</li>
</ul>
<h2>v20.26.3 (2024-06-21)</h2>
<p>Bugfixes - 20.26.3
</code></pre></p>
<ul>
<li>
<p>Upgrade embedded wheels:</p>
<ul>
<li>setuptools to <code>70.1.0</code> from <code>69.5.1</code></li>
<li>pip to <code>24.1</code> from <code>24.0</code>
(:issue:<code>2741</code>)</li>
</ul>
</li>
</ul>
<h2>v20.26.2 (2024-05-13)</h2>
<p>Bugfixes - 20.26.2</p>
<pre><code>- ``virtualenv.pyz`` no longer fails when zipapp path
contains a symlink - by :user:`HandSonic` and :user:`petamas`.
(:issue:`1949`)
- Fix bad return code from activate.sh if hashing is disabled - by
:user:'fenkes-ibm'. (:issue:`2717`)
<h2>v20.26.1 (2024-04-29)</h2>
<p>Bugfixes - 20.26.1
</code></pre></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ec04726d06"><code>ec04726</code></a>
release 20.26.6</li>
<li><a
href="86dddeda7c"><code>86ddded</code></a>
Fix <a
href="https://redirect.github.com/pypa/virtualenv/issues/2768">#2768</a>:
Quote template strings in activation scripts (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2771">#2771</a>)</li>
<li><a
href="6bb3f6226c"><code>6bb3f62</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2769">#2769</a>)</li>
<li><a
href="220d49c2e3"><code>220d49c</code></a>
Bump pypa/gh-action-pypi-publish from 1.10.1 to 1.10.2 (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2767">#2767</a>)</li>
<li><a
href="cf340c83c2"><code>cf340c8</code></a>
Merge pull request <a
href="https://redirect.github.com/pypa/virtualenv/issues/2766">#2766</a>
from pypa/release-20.26.5</li>
<li><a
href="f3172b4da5"><code>f3172b4</code></a>
release 20.26.5</li>
<li><a
href="22b9795eb6"><code>22b9795</code></a>
Use uv over pip (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2765">#2765</a>)</li>
<li><a
href="35d8269aba"><code>35d8269</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2764">#2764</a>)</li>
<li><a
href="ee77feb77c"><code>ee77feb</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/pypa/virtualenv/issues/2763">#2763</a>)</li>
<li><a
href="c516056629"><code>c516056</code></a>
Update README.md</li>
<li>Additional commits viewable in <a
href="https://github.com/pypa/virtualenv/compare/20.24.7...20.26.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=pip&previous-version=20.24.7&new-version=20.26.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 19:23:47 +11:00
dependabot[bot]
4a827f2f1c Bump jinja2 from 3.1.4 to 3.1.5 (#3480)
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/releases">jinja2's
releases</a>.</em></p>
<blockquote>
<h2>3.1.5</h2>
<p>This is the Jinja 3.1.5 security fix release, which fixes security
issues and bugs but does not otherwise change behavior and should not
result in breaking changes compared to the latest feature release.</p>
<p>PyPI: <a
href="https://pypi.org/project/Jinja2/3.1.5/">https://pypi.org/project/Jinja2/3.1.5/</a>
Changes: <a
href="https://jinja.palletsprojects.com/changes/#version-3-1-5">https://jinja.palletsprojects.com/changes/#version-3-1-5</a>
Milestone: <a
href="https://github.com/pallets/jinja/milestone/16?closed=1">https://github.com/pallets/jinja/milestone/16?closed=1</a></p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as by passing a stored reference to a
filter that calls its argument. <a
href="https://github.com/pallets/jinja/security/advisories/GHSA-q2x7-8rv6-6q7h">GHSA-q2x7-8rv6-6q7h</a></li>
<li>Escape template name before formatting it into error messages, to
avoid issues with names that contain f-string syntax. <a
href="https://redirect.github.com/pallets/jinja/issues/1792">#1792</a>,
<a
href="https://github.com/pallets/jinja/security/advisories/GHSA-gmj6-6f8f-6699">GHSA-gmj6-6f8f-6699</a></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence types. <a
href="https://redirect.github.com/pallets/jinja/issues/2032">#2032</a></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1952">#1952</a></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment when calling block references. <a
href="https://redirect.github.com/pallets/jinja/issues/1701">#1701</a></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another async-aware filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1781">#1781</a></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation. <a
href="https://redirect.github.com/pallets/jinja/issues/1921">#1921</a></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code> call. <a
href="https://redirect.github.com/pallets/jinja/issues/2021">#2021</a></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code> objects. <a
href="https://redirect.github.com/pallets/jinja/issues/2025">#2025</a></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object. <a
href="https://redirect.github.com/pallets/jinja/issues/2027">#2027</a></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
<a
href="https://redirect.github.com/pallets/jinja/issues/2061">#2061</a></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were searched. <a
href="https://redirect.github.com/pallets/jinja/issues/1661">#1661</a></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not contain the templates directory. <a
href="https://redirect.github.com/pallets/jinja/issues/1705">#1705</a></li>
<li>Improve annotations for methods returning copies. <a
href="https://redirect.github.com/pallets/jinja/issues/1880">#1880</a></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@a@b</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1870">#1870</a></li>
<li>Tests decorated with <code>@pass_context</code> can be used with the
<code>|select</code> filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1624">#1624</a></li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the target is a namespace attribute. <a
href="https://redirect.github.com/pallets/jinja/issues/1413">#1413</a></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks does not cause the variable to be considered
initially undefined. <a
href="https://redirect.github.com/pallets/jinja/issues/1253">#1253</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.5</h2>
<p>Released 2024-12-21</p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as
by passing a stored reference to a filter that calls its argument.
:ghsa:<code>q2x7-8rv6-6q7h</code></li>
<li>Escape template name before formatting it into error messages, to
avoid
issues with names that contain f-string syntax.
:issue:<code>1792</code>, :ghsa:<code>gmj6-6f8f-6699</code></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence
types. :issue:<code>2032</code></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>.
:pr:<code>1952</code></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings.
:pr:<code>1960</code></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends.
:pr:<code>1960</code></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment
when calling block references. :issue:<code>1701</code></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another
async-aware filter. :issue:<code>1781</code></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation.
:issue:<code>1921</code></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code>
call. :issue:<code>2021</code></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code>
objects. :issue:<code>2025</code></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object.
:issue:<code>2027</code></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
:pr:<code>2061</code></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were
searched. :issue:<code>1661</code></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not
contain the templates directory. :issue:<code>1705</code></li>
<li>Improve annotations for methods returning copies.
:pr:<code>1880</code></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@a@b</code>. :pr:<code>1870</code></li>
<li>Tests decorated with <code>@pass_context`` can be used with the
``|select`` filter. :issue:</code>1624`</li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the
target is a namespace attribute. :issue:<code>1413</code></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks
does not cause the variable to be considered initially undefined.
:issue:<code>1253</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="877f6e51be"><code>877f6e5</code></a>
release version 3.1.5</li>
<li><a
href="8d58859265"><code>8d58859</code></a>
remove test pypi</li>
<li><a
href="eda8fe86fd"><code>eda8fe8</code></a>
update dev dependencies</li>
<li><a
href="c8fdce1e03"><code>c8fdce1</code></a>
Fix bug involving calling set on a template parameter within all
branches of ...</li>
<li><a
href="66587ce989"><code>66587ce</code></a>
Fix bug where set would sometimes fail within if</li>
<li><a
href="fbc3a696c7"><code>fbc3a69</code></a>
Add support for namespaces in tuple parsing (<a
href="https://redirect.github.com/pallets/jinja/issues/1664">#1664</a>)</li>
<li><a
href="b8f4831d41"><code>b8f4831</code></a>
more comments about nsref assignment</li>
<li><a
href="ee832194cd"><code>ee83219</code></a>
Add support for namespaces in tuple assignment</li>
<li><a
href="1d55cddbb2"><code>1d55cdd</code></a>
Triple quotes in docs (<a
href="https://redirect.github.com/pallets/jinja/issues/2064">#2064</a>)</li>
<li><a
href="8a8eafc6b9"><code>8a8eafc</code></a>
edit block assignment section</li>
<li>Additional commits viewable in <a
href="https://github.com/pallets/jinja/compare/3.1.4...3.1.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.4&new-version=3.1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-15 19:23:33 +11:00
zhexu14
4c3a100835 Update pydcs for DCS 2.9.10 (#3475) 2024-12-07 22:32:07 +11:00
zhexu14
bc371a1b99 Update NATO Desert Storm faction to include Tornado GR4 (#3472)
This PR addresses #1877 by adding Tornado GR4 to NATO Desert Storm
faction. The Tornado IDS unit is left in the faction to provide backward
compatibility for custom campaigns that use the faction.
2024-12-02 10:40:47 +00:00
zhexu14
3a9a2f5a3f Update UI template to match setting name (#3471)
This PR updates the UI template for the mission start screen to rename
"Never delay player flights" to "Player flights ignore TOT and spawn
immediately" as the setting name has been updated.
2024-12-02 10:39:38 +00:00
zhexu14
d0d22b3d21 Add Strike mission to KA-50 and add appropriate payloads. (#3470)
This PR addresses #1434 by adding the Strike mission to KA-50 (both
playable variants) and adds appropriate default payloads.

#1434 requests DEAD mission type but that was already present.
2024-11-30 17:59:40 +11:00
zhexu14
fefe57b75e Make fix to FlightCallsignGenerator to prevent crashes backwards compatible with 12.x saves (#3469)
This PR implements #3467 to make it backwards compatible with 12.x
saves.
2024-11-30 17:19:35 +11:00
zhexu14
82258f331c Add support for DCS CH-47 (#3468)
This PR adds support for the playable CH-47F

---------

Co-authored-by: Raffson <Raffson@users.noreply.github.com>
Co-authored-by: Starfire13 <72491792+Starfire13@users.noreply.github.com>
2024-11-29 22:49:40 +11:00
zhexu14
4e86b5211c Fix callsign generator (#3467)
Fix crash in CallsignGenerator when player uses faction that uses
Eastern callsign conventions.
2024-11-29 22:30:04 +11:00
zhexu14
6cd3043b60 Add CBU52B and Mk20 Rockeye weapons data, update CBU-87 fallback. Bump Versions in Github Issue Template, config. (#3465) 2024-11-22 22:12:12 +11:00
DillieKoe
d8ba7c7d4d Minor addition to peruvian mirage squadron (#3464)
Added the female pilot percentage to the peruvian 412 mirage squadron
2024-11-17 16:04:17 +11:00
zhexu14
c3d4ddae44 Bump version to 12.1 (#3463) 2024-11-16 11:58:14 +11:00
zhexu14
9d774c8976 Update release workflow to use latest upload-artifact version (#3462) 2024-11-16 08:41:25 +11:00
107 changed files with 2417 additions and 903 deletions

View File

@@ -31,7 +31,7 @@ body:
If the bug was found in a development build, select "Development build"
and provide a link to the build in the field below.
options:
- 11.1.1
- 14.0.0
- Development build
- type: textarea
attributes:

View File

@@ -39,7 +39,7 @@ body:
If the bug was found in a development build, select "Development build"
and provide a link to the build in the field below.
options:
- 11.1.1
- 14.0.0
- Development build
- type: textarea
attributes:

View File

@@ -4,7 +4,7 @@ runs:
using: composite
steps:
- name: Set up Node
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: "16"
cache: npm

View File

@@ -4,7 +4,7 @@ runs:
using: composite
steps:
- name: Set up Python
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: "3.11.4"
cache: pip

View File

@@ -12,7 +12,7 @@ jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: true

View File

@@ -7,8 +7,8 @@ jobs:
name: Black
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: psf/black@stable
with:
version: ~=24.3.0
@@ -19,7 +19,7 @@ jobs:
name: Type checking
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: true

View File

@@ -14,7 +14,7 @@ jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: true
@@ -33,7 +33,7 @@ jobs:
with:
release: true
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: dcs_liberation
path: dist/

View File

@@ -5,7 +5,7 @@ jobs:
name: Python tests
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: true
@@ -24,7 +24,7 @@ jobs:
name: Typescript tests
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up JS environment
uses: ./.github/actions/setup-liberation-js

View File

@@ -1,3 +1,39 @@
# 14.0.0
Saves from 13.x are not compatible with 14.0.0.
## Features/Improvements
* **[Engine]** Support for DCS 2.9.21.
* **[Engine]** Support for MiG-29 Fulcrum (full fidelity version).
* **[Engine]** Support for F-14A-135-GR Early.
* **[Mods]** A4EC mod version updated to 2.3.
* **[UI]** Allow saving after fast forwarding manually with sim speed controls (--show-sim-speed-controls option).
* **[UI]** Add new option to fast forward until player is at the IP.
## Fixes
* **[Campaign]** Units are restored to full health when repaired.
* **[UI]** Air Wing and Transfers buttons disabled when no game is loaded as pressing them without a game loaded resulted in a crash.
* **[UI]** A package is cancelled (deleted) when the last flight in the package is cancelled instead of showing "No mission".
# 13.0.0
Saves from 12.x are not compatible with 13.0.0.
## Features/Improvements
* **[Engine]** Support for DCS 2.9.12.5536.
* **[Data]** Support for CH-47 Chinook.
## Fixes
* **[Data]** Added/updated CBU weapons data.
* **[Data]** Added Strike mission type for KA-50 (all playable variants).
* **[Mission Generation]** Fixed crash when using factions that have Eastern callsign conventions.
* **[Mission Generation]** Fixed issues when spawning on carriers and FARPs in multiplayer sessions.
# 12.0.0
Saves from 11.x are not compatible with 12.0.0.

619
client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.6",
"@types/react-redux": "^7.1.24",
"axios": "^1.7.4",
"axios": "^1.12.1",
"electron-window-state": "^5.0.3",
"esri-leaflet": "^3.0.8",
"leaflet": "^1.9.2",
@@ -66,7 +66,7 @@
"@types/leaflet": "^1.8.0",
"@types/redux-logger": "^3.0.9",
"@types/websocket": "^1.0.5",
"electron": "^22.3.25",
"electron": "^35.7.5",
"electron-is-dev": "^2.0.0",
"generate-license-file": "^2.0.0",
"jest-transform-stub": "^2.0.0",

View File

@@ -7,9 +7,9 @@
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = "DCS Liberation"
copyright = "2024, DCS Liberation Team"
copyright = "2025, DCS Liberation Team"
author = "DCS Liberation Team"
release = "12.0.0"
release = "14.0.0"
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

View File

@@ -12,6 +12,7 @@ from .flightmembers import FlightMembers
from .flightroster import FlightRoster
from .flightstate import FlightState, Navigating, Uninitialized
from .flightstate.killed import Killed
from .flighttype import FlightType
from ..sidc import (
Entity,
SidcDescribable,
@@ -31,7 +32,6 @@ if TYPE_CHECKING:
from game.data.weapons import WeaponType
from .flightmember import FlightMember
from .flightplans.flightplan import FlightPlan
from .flighttype import FlightType
from .flightwaypoint import FlightWaypoint
from .package import Package
from .starttype import StartType
@@ -58,7 +58,8 @@ class Flight(SidcDescribable):
self.coalition = squadron.coalition
self.squadron = squadron
self.flight_type = flight_type
self.squadron.claim_inventory(count)
if flight_type != FlightType.IDLE:
self.squadron.claim_inventory(count)
if roster is None:
self.roster = FlightMembers(self, initial_size=count)
else:
@@ -109,19 +110,6 @@ class Flight(SidcDescribable):
waypoint.actions.clear()
waypoint.options.clear()
def __getstate__(self) -> dict[str, Any]:
state = self.__dict__.copy()
# Avoid persisting the flight state since that's not (currently) used outside
# mission generation. This is a bit of a hack for the moment and in the future
# we will need to persist the flight state, but for now keep it out of save
# compat (it also contains a generator that cannot be pickled).
del state["state"]
return state
def __setstate__(self, state: dict[str, Any]) -> None:
state["state"] = Uninitialized(self, state["squadron"].settings)
self.__dict__.update(state)
@property
def blue(self) -> bool:
return self.squadron.player

View File

@@ -69,6 +69,15 @@ class FlightMembers(IFlightRoster):
self.flight.squadron.return_pilot(current_pilot)
self.members[index].pilot = pilot
def remove_pilot(self, pilot: Pilot) -> None:
for i, member in enumerate(self.members):
if member.pilot is not None and member.pilot.name == pilot.name:
self.members.pop(i)
if (code := member.tgp_laser_code) is not None:
code.release()
return
raise ValueError(f"Pilot {pilot.name} not a member")
def clear(self) -> None:
self.flight.squadron.return_pilots(
[p for p in self.iter_pilots() if p is not None]

View File

@@ -12,7 +12,7 @@ from game.utils import Distance, Heading, Speed, feet, knots, meters, nautical_m
class AewcFlightPlan(PatrollingFlightPlan[PatrollingLayout]):
@property
def patrol_duration(self) -> timedelta:
return timedelta(hours=4)
return self.flight.coalition.doctrine.aewc.duration
@property
def patrol_speed(self) -> Speed:

View File

@@ -64,6 +64,7 @@ class FlightPlanBuilderTypes:
FlightType.TRANSPORT: AirliftFlightPlan.builder_type(),
FlightType.FERRY: FerryFlightPlan.builder_type(),
FlightType.AIR_ASSAULT: AirAssaultFlightPlan.builder_type(),
FlightType.IDLE: BarCapFlightPlan.builder_type(),
}
try:
return builder_dict[flight.flight_type]

View File

@@ -21,8 +21,14 @@ class FlightState(ABC):
self.settings = settings
self.avoid_further_combat = False
def reinitialize(self, now: datetime) -> None:
from game.ato.flightstate import WaitingForStart
def initialize(self, now: datetime) -> None:
from game.ato.flightstate import Uninitialized, WaitingForStart
# Flight objects are created with Uninitialized state. However when the simulation runs
# the flight state changes and may be serialized. We only want to initialize the state
# for newly created flights and not ones deserialized from a save file.
if type(self.flight.state) != Uninitialized:
return
if self.flight.flight_plan.startup_time() <= now:
self._set_active_flight_state(now)

View File

@@ -3,6 +3,7 @@ from __future__ import annotations
from abc import ABC, abstractmethod
from collections import deque
from datetime import datetime, timedelta
import logging
from typing import TYPE_CHECKING
from dcs import Point
@@ -13,6 +14,7 @@ from game.ato.flightstate.flightstate import FlightState
from game.ato.flightwaypoint import FlightWaypoint
from game.ato.flightwaypointtype import FlightWaypointType
from game.ato.starttype import StartType
from game.settings.settings import FastForwardStopCondition
from game.utils import Distance, LBS_TO_KG, Speed, pairwise
if TYPE_CHECKING:
@@ -164,3 +166,17 @@ class InFlight(FlightState, ABC):
@property
def spawn_type(self) -> StartType:
return StartType.IN_FLIGHT
def should_halt_sim(self) -> bool:
if (
self.flight.client_count > 0
and self.settings.fast_forward_stop_condition
== FastForwardStopCondition.PLAYER_AT_IP
and self.is_at_ip
):
logging.info(
f"Interrupting simulation because {self.flight} has players and has "
"reached IP"
)
return True
return False

View File

@@ -20,7 +20,7 @@ class Uninitialized(FlightState):
def on_game_tick(
self, events: GameUpdateEvents, time: datetime, duration: timedelta
) -> None:
self.reinitialize(time)
self.initialize(time)
self.flight.state.on_game_tick(events, time, duration)
@property

View File

@@ -57,6 +57,7 @@ class FlightType(Enum):
REFUELING = "Refueling"
FERRY = "Ferry"
AIR_ASSAULT = "Air Assault"
IDLE = "Idle"
def __str__(self) -> str:
return self.value

View File

@@ -230,13 +230,18 @@ class EasternFlightCallsignGenerator:
class FlightCallsignGenerator:
def __init__(self, country: str):
self._use_western_callsigns = countries_by_name[country]().use_western_callsigns
self._generators: dict[
bool, WesternFlightCallsignGenerator | EasternFlightCallsignGenerator
] = {
True: WesternFlightCallsignGenerator(country),
False: EasternFlightCallsignGenerator(),
}
self._use_western_callsigns = countries_by_name[country]().use_western_callsigns
] = {}
if self._use_western_callsigns:
self._generators[self._use_western_callsigns] = (
WesternFlightCallsignGenerator(country)
)
else:
self._generators[self._use_western_callsigns] = (
EasternFlightCallsignGenerator()
)
def reset(self) -> None:
self._generators[self._use_western_callsigns].reset()

View File

@@ -47,6 +47,17 @@ class MissionScheduler:
margin=5 * 60,
)
for package in self.coalition.ato.packages:
if package.time_over_target > datetime.min:
if package.primary_task in dca_types:
if (
package.mission_departure_time is not None
and package.mission_departure_time
> previous_cap_end_time[package.target]
):
previous_cap_end_time[package.target] = (
package.mission_departure_time
)
continue # If package already has TOT, leave it.
tot = TotEstimator(package).earliest_tot(now)
if package.primary_task in dca_types:
previous_end_time = previous_cap_end_time[package.target]

View File

@@ -24,6 +24,7 @@ from game.theater.theatergroundobject import (
VehicleGroupGroundObject,
)
from game.threatzones import ThreatZones
from game.ato.flighttype import FlightType
if TYPE_CHECKING:
from game import Game
@@ -77,7 +78,8 @@ class TheaterState(WorldState["TheaterState"]):
self.threatening_air_defenses.remove(target)
if target in self.detecting_air_defenses:
self.detecting_air_defenses.remove(target)
self.enemy_air_defenses.remove(target)
if target in self.enemy_air_defenses:
self.enemy_air_defenses.remove(target)
self._rebuild_threat_zones()
def eliminate_ship(self, target: NavalGroundObject) -> None:
@@ -85,7 +87,8 @@ class TheaterState(WorldState["TheaterState"]):
self.threatening_air_defenses.remove(target)
if target in self.detecting_air_defenses:
self.detecting_air_defenses.remove(target)
self.enemy_ships.remove(target)
if target in self.enemy_ships:
self.enemy_ships.remove(target)
self._rebuild_threat_zones()
def has_battle_position(self, target: VehicleGroupGroundObject) -> bool:
@@ -155,21 +158,16 @@ class TheaterState(WorldState["TheaterState"]):
tracer,
)
# Plan enough rounds of CAP that the target has coverage over the expected
# mission duration.
mission_duration = game.settings.desired_player_mission_duration.total_seconds()
barcap_duration = coalition.doctrine.cap.duration.total_seconds()
barcap_rounds = math.ceil(mission_duration / barcap_duration)
refueling_targets: list[MissionTarget] = []
theater_refuling_point = finder.preferred_theater_refueling_control_point()
if theater_refuling_point is not None:
refueling_targets.append(theater_refuling_point)
return TheaterState(
theater_state = TheaterState(
context=context,
barcaps_needed={
cp: barcap_rounds for cp in finder.vulnerable_control_points()
cp: cls._barcap_rounds(game, player, now, cp)
for cp in finder.vulnerable_control_points()
},
active_front_lines=list(finder.front_lines()),
front_line_stances={f: None for f in finder.front_lines()},
@@ -191,3 +189,62 @@ class TheaterState(WorldState["TheaterState"]):
enemy_barcaps=list(game.theater.control_points_for(not player)),
threat_zones=game.threat_zone_for(not player),
)
# Look through packages already planned in the ATO and eliminate from the
# list of targets.
for package in coalition.ato.packages:
if isinstance(package.target, NavalGroundObject):
theater_state.eliminate_ship(package.target)
if package.primary_task == FlightType.BAI and isinstance(
package.target, VehicleGroupGroundObject
):
theater_state.eliminate_battle_position(package.target)
if isinstance(package.target, IadsGroundObject):
theater_state.eliminate_air_defense(package.target)
if (
package.primary_task == FlightType.STRIKE
and isinstance(package.target, TheaterGroundObject)
and package.target in theater_state.strike_targets
):
theater_state.strike_targets.remove(package.target)
if package.primary_task == FlightType.AEWC:
# If a planned AEWC mission covers the target beyond the planned mission duration, it can safely be removed
if (
package.time_over_target + coalition.doctrine.aewc.duration
> now + game.settings.desired_player_mission_duration
) and package.target in theater_state.aewc_targets:
theater_state.aewc_targets.remove(package.target)
if (
package.primary_task
in (
FlightType.OCA_AIRCRAFT,
FlightType.OCA_RUNWAY,
)
and isinstance(package.target, ControlPoint)
and package.target in theater_state.oca_targets
):
theater_state.oca_targets.remove(package.target)
return theater_state
@classmethod
def _barcap_rounds(
cls, game: Game, player: bool, now: datetime, control_point: ControlPoint
) -> int:
"""Calculate number of additional rounds of CAP required to cover mission duration."""
coalition = game.coalition_for(player)
# Look through ATO for any existing planned CAP missions and calculate last planned CAP end
planned_cap_coverage_end_time = now
for package in coalition.ato.packages:
if package.target == control_point:
cap_end_time = (
package.time_over_target + coalition.doctrine.cap.duration
)
if cap_end_time > planned_cap_coverage_end_time:
planned_cap_coverage_end_time = cap_end_time
# When mission is expected to finish
mission_end_time = now + game.settings.desired_player_mission_duration
return math.ceil(
(mission_end_time - planned_cap_coverage_end_time).total_seconds()
/ coalition.doctrine.cap.duration.total_seconds()
)

View File

@@ -52,6 +52,16 @@ class Helicopter:
)
@dataclass
class Aewc:
#: The duration that AEWC flights will remain on-station
duration: timedelta
@staticmethod
def from_dict(data: dict[str, Any]) -> Aewc:
return Aewc(duration=timedelta(minutes=data["duration_minutes"]))
@dataclass
class Cas:
#: The duration that CAP flights will remain on-station.
@@ -169,6 +179,9 @@ class Doctrine:
#: Helicopter specific doctrines.
helicopter: Helicopter
#: Doctrine for AEWC missions.
aewc: Aewc
#: Doctrine for CAS missions.
cas: Cas
@@ -238,6 +251,7 @@ class Doctrine:
data["ground_unit_procurement_ratios"]
),
helicopter=Helicopter.from_dict(data["helicopter"]),
aewc=Aewc.from_dict(data["aewc"]),
cas=Cas.from_dict(data["cas"]),
cap=Cap.from_dict(data["cap"]),
sweep=Sweep.from_dict(data["sweep"]),

View File

@@ -38,6 +38,7 @@ from game.radio.channels import (
HindChannelNamer,
HipChannelNamer,
KiowaChannelNamer,
FulcrumChannelNamer,
)
from game.utils import (
Distance,
@@ -118,6 +119,7 @@ class RadioConfig:
"hind": HindChannelNamer,
"hip": HipChannelNamer,
"kiowa": KiowaChannelNamer,
"fulcrum": FulcrumChannelNamer,
}[config.get("namer", "default")]

View File

@@ -196,6 +196,9 @@ class StateData:
#: True if the mission ended. If False, the mission exited abnormally.
mission_ended: bool
#: Simulation time since mission start in seconds
simulation_time_seconds: float
#: Names of aircraft units that were killed during the mission.
killed_aircraft: List[str]
@@ -248,6 +251,7 @@ class StateData:
return cls(
mission_ended=data["mission_ended"],
simulation_time_seconds=data["simulation_time_seconds"],
killed_aircraft=killed_aircraft,
killed_ground_units=killed_ground_units,
destroyed_statics=data["destroyed_objects_positions"],

View File

@@ -125,7 +125,11 @@ class Game:
self.time_of_day_offset_for_start_time = list(TimeOfDay).index(
self.theater.daytime_map.best_guess_time_of_day_at(start_time)
)
# self.conditions.start_time is the time at the start of a turn and does not change within a turn.
# self.simulation_time tracks time progression within a turn and is synchronized with the
# MissionSimulation object.
self.conditions = self.generate_conditions(forced_time=start_time)
self.simulation_time = self.conditions.start_time
self.sanitize_sides(player_faction, enemy_faction)
self.blue = Coalition(self, player_faction, player_budget, player=True)
@@ -291,6 +295,7 @@ class Game:
# turn 1.
if self.turn > 1:
self.conditions = self.generate_conditions()
self.simulation_time = self.conditions.start_time
def begin_turn_0(self) -> None:
"""Initialization for the first turn of the game."""

View File

@@ -148,7 +148,7 @@ class AircraftGenerator:
faction.country,
squadron,
1,
FlightType.BARCAP,
FlightType.IDLE,
StartType.COLD,
divert=None,
)

View File

@@ -285,7 +285,7 @@ class FlightGroupConfigurator:
if (
unit_callsign.name is None
): # pydcs needs unit.callsign to be set for eastern callsigns
unit.callsign = str(unit_callsign) # type: ignore
unit.callsign = str(unit_callsign)
else: # Use western callsign
unit.callsign_dict = unit_callsign.pydcs_dict(
country=self.flight.country

View File

@@ -243,11 +243,7 @@ class FlightGroupSpawner:
for i in range(self.flight.count):
group.units[i].position = hpad.position
group.units[i].heading = hpad.heading
# pydcs has just `parking_id = None`, so mypy thinks str is invalid. Ought
# to fix pydcs, but that's not the kind of change we want to pull into the
# 6.1 branch, and frankly we should probably just improve pydcs's handling
# of FARPs instead.
group.units[i].parking_id = str(i + 1) # type: ignore
group.units[i].parking_id = str(i + 1)
return group
def dcs_start_type(self) -> DcsStartType:

View File

@@ -4,7 +4,7 @@ from datetime import datetime
from typing import Any, Iterable, Union
from dcs import Mission
from dcs.planes import AJS37, F_14B, JF_17
from dcs.planes import AJS37, F_14A_135_GR, F_14A_135_GR_Early, F_14B, JF_17
from dcs.point import MovingPoint, PointAction
from dcs.unitgroup import FlyingGroup
@@ -127,5 +127,9 @@ class PydcsWaypointBuilder:
for i, t in enumerate(targets):
if self.group.units[0].unit_type == JF_17 and i < 4:
self.group.add_nav_target_point(t.position, "PP" + str(i + 1))
if self.group.units[0].unit_type == F_14B and i == 0:
if (
self.group.units[0].unit_type
in [F_14A_135_GR, F_14A_135_GR_Early, F_14B]
and i == 0
):
self.group.add_nav_target_point(t.position, "ST")

View File

@@ -450,3 +450,15 @@ class KiowaChannelNamer(ChannelNamer):
@classmethod
def name(cls) -> str:
return "kiowa"
class FulcrumChannelNamer(ChannelNamer):
"""Channel namer for MiG-29A Fulcrum"""
@staticmethod
def channel_name(radio_id: int, channel_id: int) -> str:
return f"R862 Ch {channel_id}"
@classmethod
def name(cls) -> str:
return "fulcrum"

View File

@@ -234,7 +234,6 @@ RADIOS: List[Radio] = [
# Ka-50
# Note: Also capable of 100MHz-150MHz, but we can't model gaps.
Radio("R-800L1", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)),
Radio("R-828", (RadioRange(MHz(20), MHz(60), kHz(25), Modulation.FM),)),
# UH-1H
Radio("AN/ARC-51BX", (RadioRange(MHz(225), MHz(400), kHz(50), Modulation.AM),)),
Radio("AN/ARC-131", (RadioRange(MHz(30), MHz(76), kHz(50), Modulation.FM),)),
@@ -298,6 +297,16 @@ RADIOS: List[Radio] = [
# Mi-8/Mi-24
Radio("R863", (RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),)),
Radio("R828", (RadioRange(MHz(20), MHz(60), kHz(25), Modulation.FM),)),
# MiG-29A
Radio(
"R862",
(
RadioRange(MHz(220), MHz(400), kHz(25), Modulation.AM),
RadioRange(MHz(100), MHz(150), kHz(25), Modulation.AM),
RadioRange(MHz(220), MHz(400), kHz(25), Modulation.FM),
RadioRange(MHz(100), MHz(150), kHz(25), Modulation.FM),
),
),
]

View File

@@ -35,6 +35,7 @@ class FastForwardStopCondition(Enum):
PLAYER_TAKEOFF = "Player takeoff time"
PLAYER_TAXI = "Player taxi time"
PLAYER_STARTUP = "Player startup time"
PLAYER_AT_IP = "Player at IP"
MANUAL = "Manual fast forward control"
@@ -355,6 +356,16 @@ class Settings:
"your game after aborting take off."
),
)
turnless_mode: bool = boolean_option(
"Enable turnless mode (WIP)",
page=MISSION_GENERATOR_PAGE,
section=GAMEPLAY_SECTION,
default=False,
detail=(
"If enabled, turns do not end after mission completion. A new mission "
"can be started picking up from where the previous mission ended."
),
)
fast_forward_stop_condition: FastForwardStopCondition = choices_option(
"Fast forward until",
page=MISSION_GENERATOR_PAGE,
@@ -365,6 +376,7 @@ class Settings:
"Player startup time": FastForwardStopCondition.PLAYER_STARTUP,
"Player taxi time": FastForwardStopCondition.PLAYER_TAXI,
"Player takeoff time": FastForwardStopCondition.PLAYER_TAKEOFF,
"Player at IP": FastForwardStopCondition.PLAYER_AT_IP,
"First contact": FastForwardStopCondition.FIRST_CONTACT,
"Manual": FastForwardStopCondition.MANUAL,
},

View File

@@ -7,9 +7,7 @@ from datetime import datetime, timedelta
from typing_extensions import TYPE_CHECKING
from game.ato.flightstate import (
Uninitialized,
)
from game.ato.flightstate import Uninitialized, Completed, InCombat
from game.settings.settings import FastForwardStopCondition, CombatResolutionMethod
from .combat import CombatInitiator, FrozenCombat
from .gameupdateevents import GameUpdateEvents
@@ -27,13 +25,20 @@ class AircraftSimulation:
self.results = SimulationResults()
def begin_simulation(self) -> None:
self.reset()
self.set_initial_flight_states()
def on_game_tick(
self, events: GameUpdateEvents, time: datetime, duration: timedelta
self,
events: GameUpdateEvents,
time: datetime,
duration: timedelta,
combat_resolution_method: CombatResolutionMethod,
force_continue: bool,
) -> None:
if not self._auto_resolve_combat() and self.combats:
if (
not self._auto_resolve_combat(combat_resolution_method, force_continue)
and self.combats
):
logging.error(
"Cannot resume simulation because aircraft are in combat and "
"auto-resolve is disabled"
@@ -48,7 +53,7 @@ class AircraftSimulation:
duration,
self.results,
events,
self.game.settings.combat_resolution_method,
combat_resolution_method,
):
events.end_combat(combat)
else:
@@ -64,22 +69,38 @@ class AircraftSimulation:
# After updating all combat states, check for halts.
for flight in self.iter_flights():
if flight.should_halt_sim():
if flight.should_halt_sim() and not force_continue:
events.complete_simulation()
return
if not self._auto_resolve_combat() and self.combats:
# Find completed flights, removing them from the ATO and returning aircraft
# and pilots back to the squadron.
for flight in self.iter_flights():
if type(flight.state) == Completed:
flight.package.remove_flight(flight)
if len(flight.package.flights) == 0:
flight.squadron.coalition.ato.remove_package(flight.package)
if (
not self._auto_resolve_combat(combat_resolution_method, force_continue)
and self.combats
):
events.complete_simulation()
def set_initial_flight_states(self) -> None:
now = self.game.conditions.start_time
# Initialize flights in Uninitialized state
now = self.game.simulation_time
for flight in self.iter_flights():
flight.state.reinitialize(now)
flight.state.initialize(now)
def reset(self) -> None:
# Recover combat instances from flight states. Flight state information is serialized
# when saving a game but the aircraft simulation state is not. Combat instances are
# de-duplicated as multiple flights can be involved in a single combat instance.
combats = set()
for flight in self.iter_flights():
flight.set_state(Uninitialized(flight, self.game.settings))
self.combats = []
if type(flight.state) == InCombat:
combats.add(flight.state.combat)
self.combats = list(combats)
def iter_flights(self) -> Iterator[Flight]:
packages = itertools.chain(
@@ -88,10 +109,9 @@ class AircraftSimulation:
for package in packages:
yield from package.flights
def _auto_resolve_combat(self) -> bool:
return (
self.game.settings.fast_forward_stop_condition
!= FastForwardStopCondition.DISABLED
and self.game.settings.combat_resolution_method
!= CombatResolutionMethod.PAUSE
)
def _auto_resolve_combat(
self, combat_resolution_method: CombatResolutionMethod, force_continue: bool
) -> bool:
if force_continue:
return True
return combat_resolution_method != CombatResolutionMethod.PAUSE

View File

@@ -100,7 +100,11 @@ class GameLoop:
if not self.started:
raise RuntimeError("Attempted to tick game loop before initialization")
try:
self.sim.tick(self.events)
self.sim.tick(
self.events,
self.game.settings.combat_resolution_method,
force_continue=False,
)
self.completed = self.events.simulation_complete
if not suppress_events:
self.send_update(rate_limit=True)

View File

@@ -8,6 +8,7 @@ from game.ground_forces.combat_stance import CombatStance
from game.theater import ControlPoint
from .gameupdateevents import GameUpdateEvents
from ..ato.airtaaskingorder import AirTaskingOrder
from ..ato.flightstate.atdeparture import AtDeparture
if TYPE_CHECKING:
from ..game import Game
@@ -57,6 +58,25 @@ class MissionResultsProcessor:
logging.info(f"{aircraft} destroyed from {squadron}")
squadron.owned_aircraft -= 1
# Remove air losses from the flight. Remove the flight if all aircraft are lost.
# Remove the package if the flight is the last flight in the package.
# This logic is redundant if we are going to a new turn, since the whole ATO is
# regenerated. However if we want to keep the ATO to continue a turn, this update
# is necessary to make sure lost aircraft are removed from the ATO.
if loss.pilot is not None:
loss.flight.roster.remove_pilot(loss.pilot)
if loss.flight.count == 0: # Last aircraft in the flight, remove the flight
# If no flights in package, generally indicates that the loss is an aircraft
# that is not assigned to a mission and is parked on the ground. There is no need
# to remove the aircraft from the ATO as it was never in the ATO in the first place.
if len(loss.flight.package.flights) == 0:
continue
loss.flight.package.remove_flight(loss.flight)
if len(loss.flight.package.flights) == 0:
loss.flight.squadron.coalition.ato.remove_package(
loss.flight.package
)
@staticmethod
def _commit_pilot_experience(ato: AirTaskingOrder) -> None:
for package in ato.packages:
@@ -148,10 +168,21 @@ class MissionResultsProcessor:
iads_network.update_network(events)
return
@staticmethod
def commit_damaged_runways(debriefing: Debriefing) -> None:
def commit_damaged_runways(self, debriefing: Debriefing) -> None:
for damaged_runway in debriefing.damaged_runways:
damaged_runway.damage_runway()
# Remove any flight in ATO scheduled to take off from the damaged runway.
for coalition in self.game.coalitions:
for package in coalition.ato.packages:
for flight in package.flights:
if flight.departure.name == damaged_runway.name and isinstance(
flight.state, AtDeparture
):
flight.package.remove_flight(flight)
if len(flight.package.flights) == 0:
flight.squadron.coalition.ato.remove_package(
flight.package
)
def commit_captures(self, debriefing: Debriefing, events: GameUpdateEvents) -> None:
for captured in debriefing.base_captures:

View File

@@ -1,5 +1,5 @@
from __future__ import annotations
import copy
import json
from datetime import timedelta
from pathlib import Path
@@ -7,6 +7,7 @@ from typing import Optional, TYPE_CHECKING
from game.debriefing import Debriefing
from game.missiongenerator import MissionGenerator
from game.settings.settings import FastForwardStopCondition, CombatResolutionMethod
from game.unitmap import UnitMap
from .aircraftsimulation import AircraftSimulation
from .missionresultsprocessor import MissionResultsProcessor
@@ -31,17 +32,31 @@ class MissionSimulation:
self.unit_map: Optional[UnitMap] = None
self.aircraft_simulation = AircraftSimulation(self.game)
self.completed = False
self.time = self.game.conditions.start_time
self.time = self.game.simulation_time
def begin_simulation(self) -> None:
self.time = self.game.conditions.start_time
self.time = self.game.simulation_time
self.aircraft_simulation.begin_simulation()
def tick(self, events: GameUpdateEvents) -> GameUpdateEvents:
def tick(
self,
events: GameUpdateEvents,
combat_resolution_method: CombatResolutionMethod,
force_continue: bool,
) -> GameUpdateEvents:
self.time += TICK
self.game.simulation_time = self.time
if self.completed:
raise RuntimeError("Simulation already completed")
self.aircraft_simulation.on_game_tick(events, self.time, TICK)
if (
self.game.settings.fast_forward_stop_condition
== FastForwardStopCondition.DISABLED
):
events.complete_simulation()
return events
self.aircraft_simulation.on_game_tick(
events, self.time, TICK, combat_resolution_method, force_continue
)
self.completed = events.simulation_complete
return events
@@ -75,6 +90,24 @@ class MissionSimulation:
self.game.save_last_turn_state()
MissionResultsProcessor(self.game).commit(debriefing, events)
if self.game.settings.turnless_mode:
# Set completed to False to clear completion of any previous simulation tick.
self.completed = False
# If running in turnless mode, run sim to calculate planned positions of flights
# for the duration of time the DCS mission ran.
start_time = copy.deepcopy(self.time)
while self.time < start_time + timedelta(
seconds=int(debriefing.state_data.simulation_time_seconds)
):
# Always skip combat as we are processing results from DCS. Any combat has already
# been resolved in-game
self.tick(events, CombatResolutionMethod.SKIP, force_continue=True)
self.game.blue.plan_missions(self.game.simulation_time)
self.game.red.plan_missions(self.game.simulation_time)
self.game.game_stats.update(self.game)
# Generate begin_new_turn event which triggers a refresh of the React map screen to
# show newly planned missions.
events.begin_new_turn()
def finish(self) -> None:
self.unit_map = None

View File

@@ -1,7 +1,7 @@
from pathlib import Path
MAJOR_VERSION = 12
MAJOR_VERSION = 14
MINOR_VERSION = 0
MICRO_VERSION = 0
VERSION_NUMBER = ".".join(str(v) for v in (MAJOR_VERSION, MINOR_VERSION, MICRO_VERSION))

File diff suppressed because it is too large Load Diff

View File

@@ -9,17 +9,11 @@ from pydcs_extensions.weapon_injector import inject_weapons
class Su57Weapons:
Kh_59MK2 = {"clsid": "{KH_59MK2}", "name": "Kh-59MK2", "weight": None}
RVV_AE = {"clsid": "{RVV-AE}", "name": "RVV-AE", "weight": 250}
RVV_BD = {"clsid": "{RVV-BD}", "name": "RVV-BD", "weight": 600}
RVV_L = {"clsid": "{RVV-L}", "name": "RVV-L", "weight": 748}
RVV_M = {"clsid": "{RVV-M}", "name": "RVV-M", "weight": 190}
R_37M_Active_Rdr = {"clsid": "{RVV-BD}", "name": "R-37M Active Rdr", "weight": 600}
Su_57_Fuel_Tank = {
"clsid": "{SU_57Tank}",
"name": "Su-57 Fuel Tank",
"weight": 1561.421,
}
R_77PD_Active_rdr = {
"clsid": "{RVV-AE}",
"name": "R-77PD Active rdr",
@@ -56,8 +50,10 @@ class Su_57(PlaneType):
class Pylon1:
R_73__AA_11_Archer____Infra_Red = (1, Weapons.R_73__AA_11_Archer____Infra_Red)
R_77PD_Active_rdr = (1, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (1, Su57Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (1, Weapons.KS_172_Passive_Rdr)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (1, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (1, Weapons.K_77M_Active_Rdr)
L_081_Fantasmagoria_ELINT_pod = (1, Weapons.L_081_Fantasmagoria_ELINT_pod)
Smoke_Generator___red = (1, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (1, Weapons.Smoke_Generator___green)
@@ -93,37 +89,37 @@ class Su_57(PlaneType):
2,
Weapons.Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr,
)
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser = (
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_ = (
2,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_,
)
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided = (
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_ = (
2,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_,
)
Kh_59M__AS_18_Kazoo____930kg__ASM__IN = (
2,
Weapons.Kh_59M__AS_18_Kazoo____930kg__ASM__IN,
)
MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD = (
MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD = (
2,
Weapons.MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD,
Weapons.MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD,
)
B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag = (
2,
Weapons.B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag,
)
B_13L_pod___5_x_S_13_OF__122mm_UnGd_Rkts__Blast_Frag = (
B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation = (
2,
Weapons.B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation,
)
S_25_OFM___340mm_UnGd_Rkt__480kg_Penetrator = (
O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator = (
2,
Weapons.O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator,
)
BetAB_500___500kg_Concrete_Piercing_Bomb_LD = (
BetAB_500___500_kg_Concrete_Piercing_Bomb_LD = (
2,
Weapons.BetAB_500___500kg_Concrete_Piercing_Bomb_LD,
Weapons.BetAB_500___500_kg_Concrete_Piercing_Bomb_LD,
)
KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag = (
2,
@@ -133,12 +129,12 @@ class Su_57(PlaneType):
2,
Weapons.KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP,
)
FAB_250___250kg_GP_Bomb_LD = (2, Weapons.FAB_250___250kg_GP_Bomb_LD)
OFAB_250_270___250_kg_GP_Bomb_LD = (2, Weapons.OFAB_250_270___250_kg_GP_Bomb_LD)
RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP = (
2,
Weapons.RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP,
)
FAB_500_M_62___500kg_GP_Bomb_LD = (2, Weapons.FAB_500_M_62___500kg_GP_Bomb_LD)
FAB_500M_62___500_kg_GP_Bomb_LD = (2, Weapons.FAB_500M_62___500_kg_GP_Bomb_LD)
RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP = (
2,
Weapons.RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP,
@@ -156,21 +152,20 @@ class Su_57(PlaneType):
2,
Weapons.KAB_1500L___1500kg_Laser_Guided_Bomb,
)
MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD = (
MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD = (
2,
Weapons.MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD,
Weapons.MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD,
)
R_37M_Active_Rdr = (2, Su57Weapons.R_37M_Active_Rdr)
R_77PD_Active_rdr = (2, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (2, Su57Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (2, Su57Weapons.KS_172_Passive_Rdr)
R_37M_Active_Rdr = (2, Weapons.R_37M_Active_Rdr)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (2, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (2, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (2, Weapons.KS_172_Passive_Rdr)
Fuel_tank_800L_Wing = (2, Weapons.Fuel_tank_800L_Wing)
RN_28___260_kg__nuclear_bomb__free_fall = (
2,
Weapons.RN_28___260_kg__nuclear_bomb__free_fall,
)
Su_57_Fuel_Tank = (2, Su57Weapons.Su_57_Fuel_Tank)
Kh_59MK2 = (2, Su57Weapons.Kh_59MK2)
Smoke_Generator___red = (2, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (2, Weapons.Smoke_Generator___green)
Smoke_Generator___blue = (2, Weapons.Smoke_Generator___blue)
@@ -214,37 +209,37 @@ class Su_57(PlaneType):
4,
Weapons.Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr,
)
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser = (
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_ = (
4,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_,
)
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided = (
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_ = (
4,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_,
)
Kh_59M__AS_18_Kazoo____930kg__ASM__IN = (
4,
Weapons.Kh_59M__AS_18_Kazoo____930kg__ASM__IN,
)
MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD = (
MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD = (
4,
Weapons.MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD,
Weapons.MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD,
)
B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag = (
4,
Weapons.B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag,
)
B_13L_pod___5_x_S_13_OF__122mm_UnGd_Rkts__Blast_Frag = (
B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation = (
4,
Weapons.B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation,
)
S_25_OFM___340mm_UnGd_Rkt__480kg_Penetrator = (
O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator = (
4,
Weapons.O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator,
)
BetAB_500___500kg_Concrete_Piercing_Bomb_LD = (
BetAB_500___500_kg_Concrete_Piercing_Bomb_LD = (
4,
Weapons.BetAB_500___500kg_Concrete_Piercing_Bomb_LD,
Weapons.BetAB_500___500_kg_Concrete_Piercing_Bomb_LD,
)
KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag = (
4,
@@ -254,12 +249,12 @@ class Su_57(PlaneType):
4,
Weapons.KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP,
)
FAB_250___250kg_GP_Bomb_LD = (4, Weapons.FAB_250___250kg_GP_Bomb_LD)
OFAB_250_270___250_kg_GP_Bomb_LD = (4, Weapons.OFAB_250_270___250_kg_GP_Bomb_LD)
RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP = (
4,
Weapons.RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP,
)
FAB_500_M_62___500kg_GP_Bomb_LD = (4, Weapons.FAB_500_M_62___500kg_GP_Bomb_LD)
FAB_500M_62___500_kg_GP_Bomb_LD = (4, Weapons.FAB_500M_62___500_kg_GP_Bomb_LD)
RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP = (
4,
Weapons.RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP,
@@ -277,158 +272,61 @@ class Su_57(PlaneType):
4,
Weapons.KAB_1500L___1500kg_Laser_Guided_Bomb,
)
MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD = (
MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD = (
4,
Weapons.MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD,
Weapons.MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD,
)
R_37M_Active_Rdr = (4, Su57Weapons.R_37M_Active_Rdr)
R_77PD_Active_rdr = (4, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (4, Su57Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (4, Su57Weapons.KS_172_Passive_Rdr)
R_37M_Active_Rdr = (4, Weapons.R_37M_Active_Rdr)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (4, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (4, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (4, Weapons.KS_172_Passive_Rdr)
RN_28___260_kg__nuclear_bomb__free_fall = (
4,
Weapons.RN_28___260_kg__nuclear_bomb__free_fall,
)
Su_57_Fuel_Tank = (4, Su57Weapons.Su_57_Fuel_Tank)
Kh_59MK2 = (4, Su57Weapons.Kh_59MK2)
class Pylon5:
R_77__AA_12_Adder____Active_Rdr = (5, Weapons.R_77__AA_12_Adder____Active_Rdr)
R_77PD_Active_rdr = (5, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (5, Su57Weapons.K_77M_Active_Rdr)
Kh_59MK2 = (5, Su57Weapons.Kh_59MK2)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (5, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (5, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (5, Weapons.KS_172_Passive_Rdr)
class Pylon6:
R_77__AA_12_Adder____Active_Rdr = (6, Weapons.R_77__AA_12_Adder____Active_Rdr)
R_77PD_Active_rdr = (6, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (6, Su57Weapons.K_77M_Active_Rdr)
Kh_59MK2 = (6, Su57Weapons.Kh_59MK2)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (6, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (6, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (6, Weapons.KS_172_Passive_Rdr)
class Pylon7:
R_77__AA_12_Adder____Active_Rdr = (7, Weapons.R_77__AA_12_Adder____Active_Rdr)
R_77PD_Active_rdr = (7, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (7, Su57Weapons.K_77M_Active_Rdr)
Kh_59MK2 = (7, Su57Weapons.Kh_59MK2)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (7, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (7, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (7, Weapons.KS_172_Passive_Rdr)
class Pylon8:
R_77__AA_12_Adder____Active_Rdr = (8, Weapons.R_77__AA_12_Adder____Active_Rdr)
R_77PD_Active_rdr = (8, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (8, Su57Weapons.K_77M_Active_Rdr)
Kh_59MK2 = (8, Su57Weapons.Kh_59MK2)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (8, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (8, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (8, Weapons.KS_172_Passive_Rdr)
class Pylon9:
R_27R__AA_10_Alamo_A____Semi_Act_Rdr = (
9,
Weapons.R_27R__AA_10_Alamo_A____Semi_Act_Rdr,
)
R_27ER__AA_10_Alamo_C____Semi_Act_Extended_Range = (
9,
Weapons.R_27ER__AA_10_Alamo_C____Semi_Act_Extended_Range,
)
R_27T__AA_10_Alamo_B____Infra_Red = (
9,
Weapons.R_27T__AA_10_Alamo_B____Infra_Red,
)
R_27ET__AA_10_Alamo_D____IR_Extended_Range = (
9,
Weapons.R_27ET__AA_10_Alamo_D____IR_Extended_Range,
)
R_77__AA_12_Adder____Active_Rdr = (9, Weapons.R_77__AA_12_Adder____Active_Rdr)
R_73__AA_11_Archer____Infra_Red = (9, Weapons.R_73__AA_11_Archer____Infra_Red)
Kh_31P__AS_17_Krypton____600kg__ARM__IN__Pas_Rdr = (
9,
Weapons.Kh_31P__AS_17_Krypton____600kg__ARM__IN__Pas_Rdr,
)
Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr = (
9,
Weapons.Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr,
)
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser = (
9,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser,
)
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided = (
9,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided,
)
Kh_59M__AS_18_Kazoo____930kg__ASM__IN = (
9,
Weapons.Kh_59M__AS_18_Kazoo____930kg__ASM__IN,
)
MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD = (
9,
Weapons.MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD,
)
B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag = (
9,
Weapons.B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag,
)
B_13L_pod___5_x_S_13_OF__122mm_UnGd_Rkts__Blast_Frag = (
9,
Weapons.B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation,
)
S_25_OFM___340mm_UnGd_Rkt__480kg_Penetrator = (
9,
Weapons.O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator,
)
BetAB_500___500kg_Concrete_Piercing_Bomb_LD = (
9,
Weapons.BetAB_500___500kg_Concrete_Piercing_Bomb_LD,
)
KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag = (
9,
Weapons.KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag,
)
KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP = (
9,
Weapons.KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP,
)
FAB_250___250kg_GP_Bomb_LD = (9, Weapons.FAB_250___250kg_GP_Bomb_LD)
RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP = (
9,
Weapons.RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP,
)
FAB_500_M_62___500kg_GP_Bomb_LD = (9, Weapons.FAB_500_M_62___500kg_GP_Bomb_LD)
RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP = (
9,
Weapons.RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP,
)
KAB_500LG___500kg_Laser_Guided_Bomb = (
9,
Weapons.KAB_500LG___500kg_Laser_Guided_Bomb,
)
KAB_500Kr___500kg_TV_Guided_Bomb = (9, Weapons.KAB_500Kr___500kg_TV_Guided_Bomb)
FAB_1500_M_54___1500kg_GP_Bomb_LD = (
9,
Weapons.FAB_1500_M_54___1500kg_GP_Bomb_LD,
)
KAB_1500L___1500kg_Laser_Guided_Bomb = (
9,
Weapons.KAB_1500L___1500kg_Laser_Guided_Bomb,
)
MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD = (
9,
Weapons.MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD,
)
R_37M_Active_Rdr = (9, Su57Weapons.R_37M_Active_Rdr)
R_77PD_Active_rdr = (9, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (9, Su57Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (9, Su57Weapons.KS_172_Passive_Rdr)
RN_28___260_kg__nuclear_bomb__free_fall = (
9,
Weapons.RN_28___260_kg__nuclear_bomb__free_fall,
)
Su_57_Fuel_Tank = (9, Su57Weapons.Su_57_Fuel_Tank)
Kh_59MK2 = (9, Su57Weapons.Kh_59MK2)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (9, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (9, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (9, Weapons.KS_172_Passive_Rdr)
class Pylon10:
R_73__AA_11_Archer____Infra_Red = (10, Weapons.R_73__AA_11_Archer____Infra_Red)
Smoke_Generator___red = (10, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (10, Weapons.Smoke_Generator___green)
Smoke_Generator___blue = (10, Weapons.Smoke_Generator___blue)
Smoke_Generator___white = (10, Weapons.Smoke_Generator___white)
Smoke_Generator___yellow = (10, Weapons.Smoke_Generator___yellow)
Smoke_Generator___orange = (10, Weapons.Smoke_Generator___orange)
R_77__AA_12_Adder____Active_Rdr = (10, Weapons.R_77__AA_12_Adder____Active_Rdr)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (10, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (10, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (10, Weapons.KS_172_Passive_Rdr)
class Pylon11:
R_27R__AA_10_Alamo_A____Semi_Act_Rdr = (
@@ -457,37 +355,37 @@ class Su_57(PlaneType):
11,
Weapons.Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr,
)
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser = (
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_ = (
11,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_,
)
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided = (
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_ = (
11,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_,
)
Kh_59M__AS_18_Kazoo____930kg__ASM__IN = (
11,
Weapons.Kh_59M__AS_18_Kazoo____930kg__ASM__IN,
)
MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD = (
MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD = (
11,
Weapons.MBD3_U6_68_with_6_x_FAB_100___100kg_GP_Bombs_LD,
Weapons.MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD,
)
B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag = (
11,
Weapons.B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag,
)
B_13L_pod___5_x_S_13_OF__122mm_UnGd_Rkts__Blast_Frag = (
B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation = (
11,
Weapons.B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation,
)
S_25_OFM___340mm_UnGd_Rkt__480kg_Penetrator = (
O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator = (
11,
Weapons.O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator,
)
BetAB_500___500kg_Concrete_Piercing_Bomb_LD = (
BetAB_500___500_kg_Concrete_Piercing_Bomb_LD = (
11,
Weapons.BetAB_500___500kg_Concrete_Piercing_Bomb_LD,
Weapons.BetAB_500___500_kg_Concrete_Piercing_Bomb_LD,
)
KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag = (
11,
@@ -497,12 +395,15 @@ class Su_57(PlaneType):
11,
Weapons.KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP,
)
FAB_250___250kg_GP_Bomb_LD = (11, Weapons.FAB_250___250kg_GP_Bomb_LD)
OFAB_250_270___250_kg_GP_Bomb_LD = (
11,
Weapons.OFAB_250_270___250_kg_GP_Bomb_LD,
)
RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP = (
11,
Weapons.RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP,
)
FAB_500_M_62___500kg_GP_Bomb_LD = (11, Weapons.FAB_500_M_62___500kg_GP_Bomb_LD)
FAB_500M_62___500_kg_GP_Bomb_LD = (11, Weapons.FAB_500M_62___500_kg_GP_Bomb_LD)
RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP = (
11,
Weapons.RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP,
@@ -523,33 +424,22 @@ class Su_57(PlaneType):
11,
Weapons.KAB_1500L___1500kg_Laser_Guided_Bomb,
)
MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD = (
MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD = (
11,
Weapons.MBD3_U6_68_with_6_x_FAB_250___250kg_GP_Bombs_LD,
Weapons.MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD,
)
# ERRR {R-33}
R_37M_Active_Rdr = (11, Su57Weapons.R_37M_Active_Rdr)
R_77PD_Active_rdr = (11, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (11, Su57Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (11, Su57Weapons.KS_172_Passive_Rdr)
Fuel_tank_800L_Wing = (11, Weapons.Fuel_tank_800L_Wing)
Su_57_Fuel_Tank = (11, Su57Weapons.Su_57_Fuel_Tank)
R_37M_Active_Rdr = (11, Weapons.R_37M_Active_Rdr)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (11, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (11, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (11, Weapons.KS_172_Passive_Rdr)
RN_28___260_kg__nuclear_bomb__free_fall = (
11,
Weapons.RN_28___260_kg__nuclear_bomb__free_fall,
)
Smoke_Generator___red = (11, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (11, Weapons.Smoke_Generator___green)
Smoke_Generator___blue = (11, Weapons.Smoke_Generator___blue)
Smoke_Generator___white = (11, Weapons.Smoke_Generator___white)
Smoke_Generator___yellow = (11, Weapons.Smoke_Generator___yellow)
Smoke_Generator___orange = (11, Weapons.Smoke_Generator___orange)
Kh_59MK2 = (11, Su57Weapons.Kh_59MK2)
class Pylon12:
R_73__AA_11_Archer____Infra_Red = (12, Weapons.R_73__AA_11_Archer____Infra_Red)
R_77PD_Active_rdr = (12, Su57Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (12, Su57Weapons.K_77M_Active_Rdr)
Smoke_Generator___red = (12, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (12, Weapons.Smoke_Generator___green)
Smoke_Generator___blue = (12, Weapons.Smoke_Generator___blue)
@@ -557,7 +447,140 @@ class Su_57(PlaneType):
Smoke_Generator___yellow = (12, Weapons.Smoke_Generator___yellow)
Smoke_Generator___orange = (12, Weapons.Smoke_Generator___orange)
pylons: Set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
class Pylon13:
R_27R__AA_10_Alamo_A____Semi_Act_Rdr = (
13,
Weapons.R_27R__AA_10_Alamo_A____Semi_Act_Rdr,
)
R_27ER__AA_10_Alamo_C____Semi_Act_Extended_Range = (
13,
Weapons.R_27ER__AA_10_Alamo_C____Semi_Act_Extended_Range,
)
R_27T__AA_10_Alamo_B____Infra_Red = (
13,
Weapons.R_27T__AA_10_Alamo_B____Infra_Red,
)
R_27ET__AA_10_Alamo_D____IR_Extended_Range = (
13,
Weapons.R_27ET__AA_10_Alamo_D____IR_Extended_Range,
)
R_77__AA_12_Adder____Active_Rdr = (13, Weapons.R_77__AA_12_Adder____Active_Rdr)
R_73__AA_11_Archer____Infra_Red = (13, Weapons.R_73__AA_11_Archer____Infra_Red)
Kh_31P__AS_17_Krypton____600kg__ARM__IN__Pas_Rdr = (
13,
Weapons.Kh_31P__AS_17_Krypton____600kg__ARM__IN__Pas_Rdr,
)
Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr = (
13,
Weapons.Kh_31A__AS_17_Krypton____610kg__AShM__IN__Act_Rdr,
)
Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_ = (
13,
Weapons.Kh_29L__AS_14_Kedge____657kg__ASM__Semi_Act_Laser_,
)
Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_ = (
13,
Weapons.Kh_29T__AS_14_Kedge____670kg__ASM__TV_Guided_,
)
Kh_59M__AS_18_Kazoo____930kg__ASM__IN = (
13,
Weapons.Kh_59M__AS_18_Kazoo____930kg__ASM__IN,
)
MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD = (
13,
Weapons.MBD3_U6_68___6_x_OFAB_100_120___100_kg_GP_Bomb_LD,
)
B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag = (
13,
Weapons.B_8M1___20_x_UnGd_Rkts__80_mm_S_8KOM_HEAT_Frag,
)
B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation = (
13,
Weapons.B_13L___5_x_UnGd_Rkts__122_mm_S_13OF_Blast_Fragmentation,
)
O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator = (
13,
Weapons.O_25___1_x_UnGd_Rkts__340_mm_S_25_OFM_Hardened_Target_Penetrator,
)
BetAB_500___500_kg_Concrete_Piercing_Bomb_LD = (
13,
Weapons.BetAB_500___500_kg_Concrete_Piercing_Bomb_LD,
)
KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag = (
13,
Weapons.KMGU_2___96_x_AO_2_5RT_Dispenser__CBU__HE_Frag,
)
KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP = (
13,
Weapons.KMGU_2___96_x_PTAB_2_5KO_Dispenser__CBU__HEAT_AP,
)
OFAB_250_270___250_kg_GP_Bomb_LD = (
13,
Weapons.OFAB_250_270___250_kg_GP_Bomb_LD,
)
RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP = (
13,
Weapons.RBK_250___42_x_PTAB_2_5M__250kg_CBU_Medium_HEAT_AP,
)
FAB_500M_62___500_kg_GP_Bomb_LD = (13, Weapons.FAB_500M_62___500_kg_GP_Bomb_LD)
RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP = (
13,
Weapons.RBK_500_255___30_x_PTAB_10_5__500kg_CBU_Heavy_HEAT_AP,
)
KAB_500LG___500kg_Laser_Guided_Bomb = (
13,
Weapons.KAB_500LG___500kg_Laser_Guided_Bomb,
)
KAB_500Kr___500kg_TV_Guided_Bomb = (
13,
Weapons.KAB_500Kr___500kg_TV_Guided_Bomb,
)
FAB_1500_M_54___1500kg_GP_Bomb_LD = (
13,
Weapons.FAB_1500_M_54___1500kg_GP_Bomb_LD,
)
KAB_1500L___1500kg_Laser_Guided_Bomb = (
13,
Weapons.KAB_1500L___1500kg_Laser_Guided_Bomb,
)
MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD = (
13,
Weapons.MBD3_U6_68___6_x_OFAB_250_270___250_kg_GP_Bomb_LD,
)
# ERRR {R-33}
R_37M_Active_Rdr = (13, Weapons.R_37M_Active_Rdr)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (13, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (13, Weapons.K_77M_Active_Rdr)
KS_172_Passive_Rdr = (13, Weapons.KS_172_Passive_Rdr)
Fuel_tank_800L_Wing = (13, Weapons.Fuel_tank_800L_Wing)
RN_28___260_kg__nuclear_bomb__free_fall = (
13,
Weapons.RN_28___260_kg__nuclear_bomb__free_fall,
)
Smoke_Generator___red = (13, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (13, Weapons.Smoke_Generator___green)
Smoke_Generator___blue = (13, Weapons.Smoke_Generator___blue)
Smoke_Generator___white = (13, Weapons.Smoke_Generator___white)
Smoke_Generator___yellow = (13, Weapons.Smoke_Generator___yellow)
Smoke_Generator___orange = (13, Weapons.Smoke_Generator___orange)
class Pylon14:
R_73__AA_11_Archer____Infra_Red = (14, Weapons.R_73__AA_11_Archer____Infra_Red)
# ERRR {RVV-AE}
R_77PD_Active_rdr = (14, Weapons.R_77PD_Active_rdr)
K_77M_Active_Rdr = (14, Weapons.K_77M_Active_Rdr)
Smoke_Generator___red = (14, Weapons.Smoke_Generator___red)
Smoke_Generator___green = (14, Weapons.Smoke_Generator___green)
Smoke_Generator___blue = (14, Weapons.Smoke_Generator___blue)
Smoke_Generator___white = (14, Weapons.Smoke_Generator___white)
Smoke_Generator___yellow = (14, Weapons.Smoke_Generator___yellow)
Smoke_Generator___orange = (14, Weapons.Smoke_Generator___orange)
class Pylon15:
Mercury_LLTV_Pod = (15, Weapons.Mercury_LLTV_Pod)
pylons: Set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
tasks = [
task.CAP,

View File

@@ -172,6 +172,17 @@ class PackageModel(QAbstractListModel):
else:
flight.abort()
EventStream.put_nowait(GameUpdateEvents().update_flight(flight))
# If there are no more flights in the package, delete the package.
if len(self.package.flights) == 0:
# Check if package is in ATO first as flight may still be "tentative" i.e.
# not added to the ATO yet.
if flight.package in flight.squadron.coalition.ato.packages:
flight.squadron.coalition.ato.remove_package(flight.package)
# Update ATO model so packages list is refreshed.
is_player = flight.squadron.coalition.player
self.game_model.ato_model_for(is_player).replace_from_game(
is_player
)
def delete_flight(self, flight: Flight) -> None:
"""Removes the given flight from the package."""
@@ -306,9 +317,12 @@ class AtoModel(QAbstractListModel):
index = self.ato.packages.index(package)
self.beginRemoveRows(QModelIndex(), index, index)
for flight in package.flights:
self.game_model.game.blue.callsign_generator.release_callsign(
flight.callsign
)
# Check if flight.callsign is None to handle case where callsign was not generated.
# This can happen when a module does not support the standard callsigns e.g. Kiowa.
if flight.callsign is not None:
self.game_model.game.blue.callsign_generator.release_callsign(
flight.callsign
)
self.ato.remove_package(package)
self.endRemoveRows()
# noinspection PyUnresolvedReferences

View File

@@ -65,14 +65,17 @@ class QTimeTurnWidget(QGroupBox):
else:
self.set_date_and_time(time)
def set_current_turn(self, turn: int, conditions: Conditions) -> None:
def set_current_turn(
self, turn: int, conditions: Conditions, time: datetime
) -> None:
"""Sets the turn information display.
:arg turn Current turn number.
:arg conditions Current time and weather conditions.
:arg conditions Current weather conditions.
:arg time Current time.
"""
self.daytime_icon.setPixmap(self.icons[conditions.time_of_day])
self.set_date_and_time(conditions.start_time)
self.set_date_and_time(time)
self.setTitle(f"Turn {turn}")
def set_date_and_time(self, time: datetime) -> None:
@@ -305,12 +308,15 @@ class QConditionsWidget(QFrame):
self.weather_widget.hide()
self.layout.addWidget(self.weather_widget, 0, 1)
def setCurrentTurn(self, turn: int, conditions: Conditions) -> None:
def setCurrentTurn(
self, turn: int, conditions: Conditions, time: datetime | None
) -> None:
"""Sets the turn information display.
:arg turn Current turn number.
:arg conditions Current time and weather conditions.
:arg conditions Current weather conditions.
:arg time Current time.
"""
self.time_turn_widget.set_current_turn(turn, conditions)
self.time_turn_widget.set_current_turn(turn, conditions, time)
self.weather_widget.setCurrentTurn(turn, conditions)
self.weather_widget.show()

View File

@@ -50,10 +50,7 @@ class QTopPanel(QFrame):
self.conditionsWidget = QConditionsWidget(sim_controller)
self.budgetBox = QBudgetBox(self.game)
pass_turn_text = "Pass Turn"
if not self.game or self.game.turn == 0:
pass_turn_text = "Begin Campaign"
self.passTurnButton = QPushButton(pass_turn_text)
self.passTurnButton = QPushButton(self._pass_turn_button_text(self.game))
self.passTurnButton.setIcon(CONST.ICONS["PassTurn"])
self.passTurnButton.setProperty("style", "btn-primary")
self.passTurnButton.clicked.connect(self.passTurn)
@@ -104,7 +101,9 @@ class QTopPanel(QFrame):
if game is None:
return
self.conditionsWidget.setCurrentTurn(game.turn, game.conditions)
self.conditionsWidget.setCurrentTurn(
game.turn, game.conditions, game.simulation_time
)
if game.conditions.weather.clouds:
base_m = game.conditions.weather.clouds.base
@@ -118,11 +117,9 @@ class QTopPanel(QFrame):
self.factionsInfos.setGame(game)
self.passTurnButton.setEnabled(True)
if game and game.turn > 0:
self.passTurnButton.setText("Pass Turn")
self.passTurnButton.setText(self._pass_turn_button_text(game))
if game and game.turn == 0:
self.passTurnButton.setText("Begin Campaign")
self.proceedButton.setEnabled(False)
else:
self.proceedButton.setEnabled(True)
@@ -281,3 +278,11 @@ class QTopPanel(QFrame):
def budget_update(self, game: Game):
self.budgetBox.setGame(game)
def _pass_turn_button_text(self, game: Game) -> None:
if game and game.turn > 0:
if game.settings.turnless_mode:
return "End Turn"
else:
return "Pass Turn"
return "Begin campaign"

View File

@@ -242,6 +242,8 @@ class QLiberationWindow(QMainWindow):
self.openSettingsAction.setVisible(enabled)
self.openStatsAction.setVisible(enabled)
self.openNotesAction.setVisible(enabled)
self.openAirWingAction.setVisible(enabled)
self.openTransfersAction.setVisible(enabled)
# Also Disable SaveAction to prevent Keyboard Shortcut
self.saveGameAction.setEnabled(enabled)
@@ -569,7 +571,8 @@ class QLiberationWindow(QMainWindow):
if state is not TurnState.CONTINUE:
GameOverDialog(won=state is TurnState.WIN, parent=self).exec()
else:
self.game.pass_turn()
if not self.game.settings.turnless_mode:
self.game.pass_turn()
GameUpdateSignal.get_instance().updateGame(self.game)
def open_tgo_info_dialog(self, tgo: TheaterGroundObject) -> None:

View File

@@ -23,6 +23,7 @@ from game.theater import ControlPoint, TheaterGroundObject
from game.theater.theatergroundobject import (
BuildingGroundObject,
)
from game.theater.theatergroup import TheaterUnit
from game.utils import Heading
from qt_ui.uiconstants import EVENT_ICONS, ICONS
from qt_ui.widgets.QBudgetBox import QBudgetBox
@@ -229,10 +230,11 @@ class QGroundObjectMenu(QDialog):
if self.sell_all_button is not None:
self.sell_all_button.setText("Disband (+$" + str(self.total_value) + "M)")
def repair_unit(self, unit, price):
def repair_unit(self, unit: TheaterUnit, price: float):
if self.game.blue.budget > price:
self.game.blue.budget -= price
unit.alive = True
unit.hit_points = unit.unit_type.hit_points # Restore unit health to full
GameUpdateSignal.get_instance().updateGame(self.game)
# Remove destroyed units in the vicinity

View File

@@ -843,7 +843,7 @@ class GeneratorOptions(QtWidgets.QWizardPage):
modLayout = QtWidgets.QGridLayout()
modLayout_row = 1
modLayout.addWidget(
QtWidgets.QLabel("A-4E Skyhawk (version 2.2.0)"), modLayout_row, 0
QtWidgets.QLabel("A-4E Skyhawk (version 2.3.0)"), modLayout_row, 0
)
modLayout.addWidget(a4_skyhawk, modLayout_row, 1)
modLayout_row += 1

View File

@@ -12,15 +12,15 @@ coverage==7.3.2
distlib==0.3.7
exceptiongroup==1.2.0
Faker==20.1.0
fastapi==0.109.1
fastapi==0.115.8
filelock==3.13.1
future==0.18.3
h11==0.14.0
h11==0.16.0
httptools==0.6.1
identify==2.5.32
idna==3.7
iniconfig==2.0.0
Jinja2==3.1.4
Jinja2==3.1.6
MarkupSafe==2.1.3
mypy==1.7.1
mypy-extensions==1.0.0
@@ -36,8 +36,8 @@ pre-commit==3.5.0
pydantic==2.5.2
pydantic-settings==2.1.0
pydantic_core==2.14.5
pydcs @ git+https://github.com/dcs-liberation/dcs@2eddd456dd23effc9f8c254b967b82a8e8c3c790
pyinstaller==5.13.1
pydcs @ git+https://github.com/dcs-liberation/dcs@046ed928de5d4aae1652251b87e46517ab334f6e
pyinstaller==6.0.0
pyinstaller-hooks-contrib==2023.6
pyproj==3.6.1
PySide6==6.4.1
@@ -54,7 +54,7 @@ shapely==2.0.2
shiboken6==6.4.1
six==1.16.0
sniffio==1.3.0
starlette==0.35.1
starlette==0.49.1
tabulate==0.9.0
tomli==2.0.1
types-Jinja2==2.11.9
@@ -64,6 +64,6 @@ types-PyYAML==6.0.12.12
types-tabulate==0.9.0.3
typing_extensions==4.8.0
uvicorn==0.24.0.post1
virtualenv==20.24.7
virtualenv==20.26.6
watchfiles==0.21.0
websockets==12.0

View File

@@ -178,15 +178,15 @@ local unitPayloads = {
["name"] = "Liberation SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "{C_A4E_AGM-45B_LAU34}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "{C_A4E_AGM-45B_LAU34}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "<CLEAN>",
["num"] = 4,
},
[4] = {
@@ -194,7 +194,7 @@ local unitPayloads = {
["num"] = 3,
},
[5] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "<CLEAN>",
["num"] = 2,
},
},
@@ -265,15 +265,15 @@ local unitPayloads = {
["name"] = "Liberation SEAD Escort",
["pylons"] = {
[1] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "{C_A4E_AGM-45B_LAU34}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "{C_A4E_AGM-45B_LAU34}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "<CLEAN>",
["num"] = 4,
},
[4] = {
@@ -281,7 +281,7 @@ local unitPayloads = {
["num"] = 3,
},
[5] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "<CLEAN>",
["num"] = 2,
},
},
@@ -352,11 +352,11 @@ local unitPayloads = {
["name"] = "Liberation DEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "{C_A4E_AGM-45B_LAU34}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{AGM_45A}",
["CLSID"] = "{C_A4E_AGM-45B_LAU34}",
["num"] = 1,
},
[3] = {

View File

@@ -0,0 +1,25 @@
local unitPayloads = {
["name"] = "CH-47Fbl1",
["payloads"] = {
[1] = {
["name"] = "Liberation Air Assault",
["pylons"] = {
[1] = {
["CLSID"] = "{CH47_STBD_M60D}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{CH47_PORT_M60D}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 35,
},
},
},
["tasks"] = {
},
["unitType"] = "CH-47Fbl1",
}
return unitPayloads

View File

@@ -0,0 +1,344 @@
local unitPayloads = {
["name"] = "F-14A",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{SHOULDER AIM_54C_Mk47 L}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{SHOULDER AIM_54C_Mk47 R}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{AIM_54C_Mk47}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{AIM_54C_Mk47}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{AIM_54C_Mk47}",
["num"] = 6,
},
[10] = {
["CLSID"] = "{AIM_54C_Mk47}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[2] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{F14-LANTIRN-TP}",
["num"] = 9,
},
[4] = {
["CLSID"] = "{PHXBRU3242_2*LAU10 LS}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{BRU-32 MK-82}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{BRU-32 MK-82}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{BRU-32 MK-82}",
["num"] = 6,
},
[10] = {
["CLSID"] = "{BRU-32 MK-82}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[3] = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{F14-LANTIRN-TP}",
["num"] = 9,
},
[4] = {
["CLSID"] = "{SHOULDER AIM-7MH}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{BRU-32 GBU-16}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{BRU-32 GBU-16}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{BRU-32 GBU-16}",
["num"] = 6,
},
[10] = {
["CLSID"] = "{BRU-32 GBU-16}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[4] = {
["name"] = "BAI",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{F14-LANTIRN-TP}",
["num"] = 9,
},
[4] = {
["CLSID"] = "{PHXBRU3242_2*LAU10 LS}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{BRU-32 MK-82}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{BRU-32 MK-82}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{BRU-32 MK-20}",
["num"] = 6,
},
[10] = {
["CLSID"] = "{BRU-32 MK-20}",
["num"] = 5,
},
},
["tasks"] = {
[1] = 10,
},
},
[5] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{F14-LANTIRN-TP}",
["num"] = 9,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[3] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[4] = {
["CLSID"] = "{PHXBRU3242_2*LAU10 LS}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{BRU-32 GBU-16}",
["num"] = 7,
},
[6] = {
["CLSID"] = "{BRU-32 GBU-16}",
["num"] = 4,
},
[7] = {
["CLSID"] = "{BRU3242_ADM141}",
["num"] = 6,
},
[8] = {
["CLSID"] = "{BRU3242_ADM141}",
["num"] = 5,
},
[9] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[10] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
},
["tasks"] = {
[1] = 10,
},
},
[6] = {
["name"] = "Liberation DEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{SHOULDER AIM_54C_Mk47 L}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{SHOULDER AIM_54C_Mk47 R}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{MAK79_MK82 4}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{MAK79_MK82 3R}",
["num"] = 6,
},
[9] = {
["CLSID"] = "{MAK79_MK82 3L}",
["num"] = 5,
},
[10] = {
["CLSID"] = "{MAK79_MK82 4}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
},
},
[7] = {
["displayName"] = "Liberation SEAD",
["name"] = "Liberation SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 10,
},
[2] = {
["CLSID"] = "{LAU-138 wtip - AIM-9M}",
["num"] = 1,
},
[3] = {
["CLSID"] = "{SHOULDER AIM_54C_Mk47 L}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{SHOULDER AIM_54C_Mk47 R}",
["num"] = 9,
},
[5] = {
["CLSID"] = "{F14-300gal}",
["num"] = 8,
},
[6] = {
["CLSID"] = "{F14-300gal}",
["num"] = 3,
},
[7] = {
["CLSID"] = "{BRU3242_ADM141}",
["num"] = 7,
},
[8] = {
["CLSID"] = "{BRU3242_ADM141}",
["num"] = 6,
},
[9] = {
["CLSID"] = "{BRU3242_ADM141}",
["num"] = 5,
},
[10] = {
["CLSID"] = "{BRU3242_ADM141}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 31,
},
},
},
["unitType"] = "F-14A-135-GR-Early",
}
return unitPayloads

View File

@@ -97,7 +97,32 @@ local unitPayloads = {
},
},
["tasks"] = {
[1] = 31,
[1] = 29,
},
},
[5] = {
["displayName"] = "Liberation Strike",
["name"] = "Liberation Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
},

View File

@@ -129,7 +129,32 @@ local unitPayloads = {
},
},
["tasks"] = {
[1] = 31,
[1] = 29,
},
},
[5] = {
["displayName"] = "Liberation Strike",
["name"] = "Liberation Strike",
["pylons"] = {
[1] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 32,
},
},
},

View File

@@ -0,0 +1,224 @@
local unitPayloads = {
["name"] = "MiG-29A",
["payloads"] = {
[1] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
[2] = {
["CLSID"] = "B-8M1 - 20 S-8OFP2",
["num"] = 5,
},
[3] = {
["CLSID"] = "B-8M1 - 20 S-8OFP2",
["num"] = 6,
},
[4] = {
["CLSID"] = "B-8M1 - 20 S-8OFP2",
["num"] = 3,
},
[5] = {
["CLSID"] = "B-8M1 - 20 S-8OFP2",
["num"] = 2,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{PTB_1500_MIG29A}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 30,
},
},
[2] = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{PTB_1500_MIG29A}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{37DCC01E-9E02-432F-B61D-10C166CA2798}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 32,
},
},
[3] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{9B25D316-0434-4954-868F-D51DB1A38DF0}",
["num"] = 5,
},
[5] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 6,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
[7] = {
["CLSID"] = "{PTB_1500_MIG29A}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 10,
},
},
[4] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
[2] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{PTB_1500_MIG29A}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 30,
},
},
[5] = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
[2] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 5,
},
[3] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 6,
},
[4] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 3,
},
[5] = {
["CLSID"] = "{3858707D-F5D5-4bbb-BDD8-ABB0530EBC7C}",
["num"] = 2,
},
[6] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{PTB_1500_MIG29A}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 30,
},
},
[6] = {
["displayName"] = "OCA/Runway",
["name"] = "OCA/Runway",
["pylons"] = {
[1] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{PTB_1500_MIG29A}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{BD289E34-DF84-4C5E-9220-4B14C346E79D}",
["num"] = 6,
},
[7] = {
["CLSID"] = "{FBC29BFE-3D24-4C64-B81D-941239D12249}",
["num"] = 7,
},
},
["tasks"] = {
[1] = 34,
},
},
},
["unitType"] = "MiG-29 Fulcrum",
}
return unitPayloads

View File

@@ -6,6 +6,8 @@ max_ingress_distance_nm: 30
min_ingress_distance_nm: 10
rendezvous_altitude_ft_msl: 22000
combat_altitude_ft_msl: 18000
aewc:
duration_minutes: 240
cap:
duration_minutes: 30
min_track_length_nm: 12

View File

@@ -6,6 +6,8 @@ max_ingress_distance_nm: 45
min_ingress_distance_nm: 10
rendezvous_altitude_ft_msl: 25000
combat_altitude_ft_msl: 20000
aewc:
duration_minutes: 240
cap:
duration_minutes: 30
min_track_length_nm: 15

View File

@@ -6,6 +6,8 @@ max_ingress_distance_nm: 7
min_ingress_distance_nm: 5
rendezvous_altitude_ft_msl: 10000
combat_altitude_ft_msl: 8000
aewc:
duration_minutes: 240
cap:
duration_minutes: 30
min_track_length_nm: 8

View File

@@ -14,6 +14,7 @@ aircrafts:
- C-130
- C-130J-30 Super Hercules
- F-117A Nighthawk
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-14B Tomcat
- F-15C Eagle
@@ -30,6 +31,7 @@ aircrafts:
- SA 342M Gazelle
- SA 342M Gazelle Mistral
- Tornado IDS
- Tornado GR4
- UH-1H Iroquois
awacs:
- E-2C Hawkeye

View File

@@ -15,6 +15,7 @@ aircrafts:
- C-130
- C-130J-30 Super Hercules
- F-117A Nighthawk
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-14B Tomcat
- F-15C Eagle

View File

@@ -10,6 +10,7 @@ aircrafts:
- B-52H Stratofortress
- C-130
- C-130J-30 Super Hercules
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-14B Tomcat
- F-4E-45MC Phantom II

View File

@@ -19,6 +19,7 @@ aircrafts:
- C-130J-30 Super Hercules
- C-17A
- CH-47D
- CH-47F Block I
- CH-53E
- F-117A Nighthawk
- F-14B Tomcat

View File

@@ -17,6 +17,7 @@ aircrafts:
- C-47 Dakota
- CH-47D
- CH-53E
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-14B Tomcat
- F-15C Eagle

View File

@@ -7,6 +7,7 @@ locales:
- fa_IR
aircrafts:
- AH-1J SeaCobra
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-4E-45MC Phantom II
- F-5E Tiger II

View File

@@ -6,6 +6,7 @@ description: <p>Iranian 2010s faction</p>
locales:
- fa_IR
aircrafts:
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-4E-45MC Phantom II
- F-5E Tiger II
@@ -14,6 +15,7 @@ aircrafts:
- Mi-24P Hind-F
- Mi-28N Havoc
- MiG-21bis Fishbed-N
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A
- Mirage-F1EQ
- Su-22M4 Fitter-K

View File

@@ -13,6 +13,7 @@ aircrafts:
- MiG-21bis Fishbed-N
- MiG-23ML Flogger-G
- MiG-25PD Foxbat-E
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A
- Mirage-F1EQ
- SA 342M Gazelle

View File

@@ -11,6 +11,7 @@ aircrafts:
- MiG-19P Farmer-B
- MiG-21bis Fishbed-N
- MiG-23MLD Flogger-K
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A
awacs:
- A-50

View File

@@ -10,6 +10,7 @@ aircrafts:
- Mi-24V Hind-E
- Mi-24P Hind-F
- Mi-8MTV2 Hip
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A
- MiG-29G Fulcrum-A
- Su-22M4 Fitter-K

View File

@@ -13,6 +13,7 @@ aircrafts:
- MiG-21bis Fishbed-N
- MiG-23MLD Flogger-K
- MiG-25PD Foxbat-E
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A
- Su-17M4 Fitter-K
- Su-24M Fencer-D

View File

@@ -14,6 +14,7 @@ aircrafts:
- MiG-23MLD Flogger-K
- MiG-25PD Foxbat-E
- MiG-27K Flogger-J2
- MIG-29-FULCRUM
- MiG-29A Fulcrum-A
- MiG-31 Foxhound
- Su-17M4 Fitter-K

View File

@@ -6,6 +6,7 @@ description: <p>US military during the Vietnam War from 1965 to 1975</p>
locales:
- en_US
aircrafts:
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-4C Phantom II
- F-4B Phantom II

View File

@@ -10,6 +10,7 @@ aircrafts:
- C-130
- CH-47D
- CH-53E
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-4E-45MC Phantom II
- F-4B Phantom II

View File

@@ -16,6 +16,7 @@ aircrafts:
- CH-47D
- CH-53E
- F-117A Nighthawk
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-14B Tomcat
- F-15C Eagle

View File

@@ -17,6 +17,7 @@ aircrafts:
- C-130J-30 Super Hercules
- C-17A
- CH-47D
- CH-47F Block I
- CH-53E
- F-117A Nighthawk
- F-14B Tomcat

View File

@@ -8,6 +8,7 @@ locales:
aircrafts:
- AH-1W SuperCobra
- A-4E Skyhawk
- F-14A Tomcat (Block 135-GR Early)
- F-14A Tomcat (Block 135-GR Late)
- F-14B Tomcat
- F-4B Phantom II

View File

@@ -4,6 +4,7 @@ local WRITESTATE_SCHEDULE_IN_SECONDS = 60
logger = mist.Logger:new("DCSLiberation", "info")
logger:info("Check that json.lua is loaded : json = "..tostring(json))
simulation_time_seconds = 0
crash_events = {} -- killed aircraft will be added via S_EVENT_CRASH event
dead_events = {} -- killed units will be added via S_EVENT_DEAD event
unit_lost_events = {} -- killed units will be added via S_EVENT_UNIT_LOST
@@ -43,6 +44,7 @@ function write_state()
["destroyed_objects_positions"] = destroyed_objects_positions,
["killed_ground_units"] = killed_ground_units,
["unit_hit_point_updates"] = unit_hit_point_updates,
["simulation_time_seconds"] = simulation_time_seconds
}
if not json then
local message = string.format("Unable to save DCS Liberation state to %s, JSON library is not loaded !", _debriefing_file_location)
@@ -160,6 +162,9 @@ end
activeWeapons = {}
local function onEvent(event)
simulation_time_seconds = event.time
if event.id == world.event.S_EVENT_CRASH and event.initiator then
crash_events[#crash_events + 1] = event.initiator.getName(event.initiator)
write_state()
@@ -176,16 +181,19 @@ local function onEvent(event)
end
if event.id == world.event.S_EVENT_DEAD and event.initiator then
dead_events[#dead_events + 1] = event.initiator.getName(event.initiator)
local position = event.initiator.getPosition(event.initiator)
local destruction = {}
destruction.x = position.p.x
destruction.y = position.p.y
destruction.z = position.p.z
destruction.type = event.initiator:getTypeName()
destruction.orientation = mist.getHeading(event.initiator) * 57.3
destroyed_objects_positions[#destroyed_objects_positions + 1] = destruction
write_state()
get_initiator_name_success, initiator_name = pcall(event.initiator.getName, event.initiator)
if get_initiator_name_success then
dead_events[#dead_events + 1] = event.initiator.getName(event.initiator)
local position = event.initiator.getPosition(event.initiator)
local destruction = {}
destruction.x = position.p.x
destruction.y = position.p.y
destruction.z = position.p.z
destruction.type = event.initiator:getTypeName()
destruction.orientation = mist.getHeading(event.initiator) * 57.3
destroyed_objects_positions[#destroyed_objects_positions + 1] = destruction
write_state()
end
end
if event.id == world.event.S_EVENT_HIT then

View File

@@ -1,6 +1,7 @@
---
name: Escuadrón Aéreo 412
nickname: Halcones
female_pilot_percentage: 0
country: Peru
role: Fighter
aircraft: Mirage 2000C

View File

@@ -13,7 +13,7 @@
</p>
<p>
To avoid delays entirely, use the "Never delay player flights" option in the
To avoid delays entirely, use the "Player flights ignore TOT and spawn immediately" option in the
mission generation settings. Note that this will <strong>not</strong> adjust
the timing of your mission; this option only allows you to wait in the
cockpit.

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,32 @@
class: Helicopter
carrier_capable: true
description: # from https://en.wikipedia.org/wiki/Boeing_CH-47_Chinook
In 2001, the CH-47F, an upgraded CH-47D, made its maiden flight. The first production model rolled out at Boeing's
facility in Ridley Park, Pennsylvania, and first flew on 23 October 2006. Upgrades included 4,868-shaft-horsepower
(3,630 kW) Honeywell engines and airframe with better integrated construction for lower maintenance requirements.
The milled construction reduces vibration, as well as inspection and repair needs, and eliminates flexing points to
increase service life. The CH-47F can fly at speeds of over 175 mph (282 km/h) with a payload of more than
21,000 lb (9,500 kg). New avionics include a Rockwell Collins Common Avionics Architecture System (CAAS) cockpit,
and BAE Systems' Digital Advanced Flight Control System (DAFCS). AgustaWestland assembles the CH-47F under license,
known as the Chinook ICH-47F, for several customers. Boeing delivered 48 CH-47Fs to the U.S. Army through August 2008;
at that time Boeing announced a $4.8 billion (~$6.67 billion in 2023) contract with the Army for 191 Chinooks.
lha_capable: true
introduced: 2006
cabin_size: 24 # It should have 33 but we do not want so much for CTLD to be possible
can_carry_crates: true
manufacturer: Boeing
origin: USA
price: 8
role: Transport
variants:
CH-47F Block I: {}
radios:
intra_flight: AN/ARC-186(V) FM
inter_flight: AN/ARC-186(V) FM
channels:
type: common
intra_flight_radio_index: 1
inter_flight_radio_index: 1
tasks:
Air Assault: 120
Transport: 110

View File

@@ -0,0 +1,62 @@
carrier_capable: true
description:
"The Grumman F-14 Tomcat is a two-crew, variable wing-geometry, maritime\
\ air superiority fighter that served with the US Navy for 32 years and continues\
\ to serve with the IRIAF in Iran. The F-14 was the US Navy's frontline fighter\
\ from the 1970s to the mid-2000s. Over the course of its long service it also became\
\ one of the US Navy\u2019s premier precision ground-attack platform and its lone\
\ airborne reconnaissance asset.\n\nNoteworthy features of the Tomcat are its swing-wing\
\ configuration, two-man crew, and the powerful AN/AWG-9 Weapons Control System\
\ (WCS) and radar. The AWG-9 allows employment of the long-range AIM-54 Phoenix\
\ air-to-air missile, and the LANTIRN targeting pod allows precision ground strikes\
\ using laser-guided bombs. The F-14 Tomcat was present in several historic events\
\ that include the two Gulf of Sidra incidents, Operations Desert Storm Iraqi Freedom,\
\ the Yugoslavian conflict, and Operation Enduring Freedom over Afghanistan. It\
\ was also immortalized in the iconic motion picture, Top Gun, and starred in several\
\ other feature films including The Final Countdown, Executive Decision, and others.\n\
\nThe Tomcat was also played a vital role in the Iran-Iraq war of the 1980s, where\
\ is flew for the Islamic Republic of Iran Air Force."
introduced: 1984
manufacturer: Grumman
origin: USA
price: 22
role: Carrier-based Air-Superiority Fighter/Fighter Bomber
max_range: 350
variants:
F-14A Tomcat (Block 135-GR Early): {}
radios:
intra_flight: AN/ARC-182
inter_flight: AN/ARC-159
channels:
type: common
namer: tomcat
intra_flight_radio_index: 2
inter_flight_radio_index: 1
default_overrides:
INSAlignmentStored: true
# ALE39Loadout: 0
# IlsChannel: 1
# KY28Key: 1
# LGB1: 8
# LGB10: 8
# LGB100: 6
# LGB1000: 1
# M61BURST: 0
# TacanBand: 0
# TacanChannel: 0
# UseLAU138: true
tasks:
BAI: 630
BARCAP: 520
CAS: 630
DEAD: 240
Escort: 520
Fighter sweep: 520
Intercept: 520
OCA/Aircraft: 630
OCA/Runway: 550
SEAD: 90
SEAD Escort: 90
Strike: 550
TARCAP: 520
hit_points: 20

View File

@@ -28,5 +28,6 @@ tasks:
BAI: 430
CAS: 430
DEAD: 113
Strike: 200
OCA/Aircraft: 430
hit_points: 15

View File

@@ -28,5 +28,6 @@ tasks:
BAI: 440
CAS: 440
DEAD: 114
Strike: 200
OCA/Aircraft: 440
hit_points: 15

View File

@@ -0,0 +1,52 @@
description:
'The MiG-29 "Fulcrum" is a Russian-designed, twin-engine, supersonic
fighter. First operational in the early 1980s, the Fulcrum is a "light weight" fighter,
comparable to the American F/A-18 Hornet and F-16. Designed to work in conjunction
with the larger Su-27 Flanker, the MiG-29 is armed with an internal 30mm cannon
and both infrared and radar guided air-to-air missiles. For air-to-ground tasks,
the MiG-29 can be armed with a large array of unguided bombs and rockets.
In addition to a sophisticated pulse doppler radar, the MiG-29 is also equipped
with a passive Infrared Search and Track (IRST) sensor that allows the Fulcrum to
detect and target enemy aircraft just based on target infrared emissions. This allows
the MiG-29 to make stealthy attacks with no warning!
The Fulcrum is a highly-maneuverable fighter in a dogfight, and when paired with
the helmet mounted sight and the AA-11 "Archer" air-to-air missile, it is a very
lethal adversary.
The MiG-29 has also been widely exported and has served in many countries that include
Germany, Iran, Ukraine, and Poland.'
introduced: 1983
manufacturer: Mikoyan
origin: USSR/Russia
price: 15
role: Multirole Fighter
max_range: 150
variants:
MIG-29-FULCRUM:
display_name: MiG-29A Fulcrum-A
kneeboard_units: "metric"
radios:
intra_flight: R862
inter_flight: R862
channels:
type: common
namer: fulcrum
intra_flight_radio_index: 1
inter_flight_radio_index: 1
tasks:
BAI: 530
BARCAP: 370
CAS: 530
Escort: 370
Fighter sweep: 370
Intercept: 370
OCA/Aircraft: 530
OCA/Runway: 410
Strike: 410
TARCAP: 370
hit_points: 16

View File

@@ -27,7 +27,8 @@ price: 15
role: Multirole Fighter
max_range: 150
variants:
MiG-29A Fulcrum-A: {}
MiG-29A Fulcrum-A:
display_name: MiG-29A Fulcrum-A (FC3)
kneeboard_units: "metric"
tasks:
BAI: 530

View File

@@ -0,0 +1,6 @@
name: 2xCBU-52B
year: 1972
fallback: 2xMk 20 Rockeye
clsids:
- "{HB_F4E_CBU-52B_2x}"
- "{HB_F4E_CBU-52B_2x_SWA}"

View File

@@ -0,0 +1,6 @@
name: 3xCBU-52B
year: 1972
fallback: 3xMk 20 Rockeye
clsids:
- "{HB_F4E_CBU-52B_MER_3x_Left}"
- "{HB_F4E_CBU-52B_MER_3x_Right}"

View File

@@ -0,0 +1,5 @@
name: 6xCBU-52B
year: 1972
fallback: 6xMk 20 Rockeye
clsids:
- "{HB_F4E_CBU-52B_MER_6x}"

View File

@@ -0,0 +1,6 @@
name: CBU-52B
year: 1972
fallback: Mk 20 Rockeye
clsids:
- "{CBU-52B}"
- "{HB_CBU-52B_SWA}"

View File

@@ -1,6 +1,8 @@
name: 2xCBU-87
year: 1986
fallback: 2xMk 82
fallback: 2xCBU-52B
clsids:
- "{TER_9A_2L*CBU-87}"
- "{TER_9A_2R*CBU-87}"
- "{HB_F4E_CBU-87_2x}"
- "{HB_F4E_CBU-87_2x_SWA}"

View File

@@ -1,5 +1,9 @@
name: 3xCBU-87
year: 1986
fallback: 3xMk 82
fallback: 3xCBU-52B
clsids:
- "{TER_9A_3*CBU-87}"
- "{CFT_L_CBU_87_x_3}"
- "{CFT_R_CBU_87_x_3}"
- "{HB_F4E_CBU-87_MER_3x_Left}"
- "{HB_F4E_CBU-87_MER_3x_Right}"

View File

@@ -0,0 +1,7 @@
name: 6xCBU-87
year: 1986
fallback: 6xCBU-52B
clsids:
- "{CFT_L_CBU_87_x_6}"
- "{CFT_R_CBU_87_x_6}"
- "{HB_F4E_CBU-87_MER_4x}"

View File

@@ -1,5 +1,6 @@
name: CBU-87
year: 1986
fallback: Mk 82
fallback: CBU-52B
clsids:
- "{CBU-87}"
- "{HB_CBU-87_SWA}"

View File

@@ -0,0 +1,10 @@
name: 2xMk 20 Rockeye
year: 1968
fallback: 2xMk 82
clsids:
- "{BRU33_2X_ROCKEYE}"
- "{0B9ABA77-93B8-45FC-9C63-82AFB2CB50A4}"
- "{HB_F4E_ROCKEYE_2x}"
- "{BRU-42_2*MK-20_LEFT}"
- "{BRU-42_2*MK-20_RIGHT}"
- "{HB_F4E_ROCKEYE_2x_SWA}"

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