Merge branch 'medical-rewrite' into medical-rewrite-kill-ai

This commit is contained in:
Ľuboš Lendáč 2017-09-25 23:36:49 +02:00 committed by GitHub
commit b292cbf8c6
615 changed files with 13700 additions and 4680 deletions

View File

@ -2,13 +2,12 @@ stages:
mark_for_closing:
days: 30
labels:
- need more info
- invalid
- can't reproduce
- wontfix
- information required
- status/need more info
- status/invalid
- status/can't reproduce
- status/wontfix
exclude:
- marked for cleanup
- status/marked for cleanup
comment:
- 'Hello @{author}! There has been no activity on this ticket for over a period of {days} days. I am automatically replying to let you know we will close this ticket within 1 week due to inactivity and consider this resolved.'
- 'If you believe this is in error, please reply with the requested information.'
@ -17,11 +16,11 @@ stages:
close: false
comment: true
assign_label:
- marked for cleanup
- status/marked for cleanup
clean_up:
days: 7
labels:
- marked for cleanup
- status/marked for cleanup
comment:
- 'Hello @{author}! We have detected no activity for {days} days on this ticket. We therefore assume that the original reporter has lost interest or the issue has been resolved.'
- 'Since we have marked this ticket for deletion, we will be closing it.'
@ -31,25 +30,25 @@ stages:
close: true
comment: true
assign_label:
- closed by bot
- status/closed by bot
remove_label:
- marked for cleanup
- status/marked for cleanup
remind_about_old_ticket:
days: 160
labels:
- bug
- critical bug
- kind/bug
- kind/critical bug
exclude:
- need more info
- invalid
- can't reproduce
- wontfix
- information required
- marked for cleanup
- inactive
- status/need more info
- status/invalid
- status/can't reproduce
- status/wontfix
- status/marked for cleanup
- status/inactive
- status/stale
comment:
- 'Hello @acemod/maintainers. This ticket has been open for over {days} days without any activity.'
action:
comment: true
assign_label:
- inactive
- status/inactive

View File

@ -4,7 +4,7 @@ branches:
- release
language: python
python:
- '3.4'
- '3.5'
before_script:
- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then
pip install pygithub;

View File

@ -41,6 +41,7 @@ Alganthe <alganthe@live.fr>
Andrea "AtixNeon" Verano <veranoandrea88@gmail.com>
Anthariel <Contact@storm-simulation.com>
Arcanum417 <lubos.len@gmail.com>
Anton
Arkhir <wonsz666@gmail.com >
Asgar Serran <piechottaf@web.de>
BaerMitUmlaut
@ -52,6 +53,8 @@ Brakoviejo
Brisse <brisse@outlook.com>
Brostrom.A | Evul <andreas.brostrom.ce@gmail.com>
BullHorn <bullhorn7@gmail.com>
chris579 <github@klemm.one>
classicarma
Clon1998 <ps.patti1998@gmail.com>
Codingboy
Coren <coren4@gmail.com>
@ -62,6 +65,7 @@ dixon13 <dixonbegay@gmail.com>
Drill <drill87@gmail.com>
Dudakov aka [OMCB]Kaban <dudakov.s@gmail.com>
Dslyecxi <dslyecxi@gmail.com>
ElTyranos
eRazeri
evromalarkey <evromalarkey@gmail.com>
F3 Project <alanr@ferstaberinde.com>
@ -88,6 +92,7 @@ Head <brobergsebastian@gmail.com>
Hybrid V
Karneck <dschultz26@hotmail.com>
Kavinsky <nmunozfernandez@gmail.com>
Keithen <Keithen.Neu@gmail.com>
Kllrt <kllrtik@gmail.com>
legman <juicemelon@msn.com>
Legolasindar "Viper" <legolasindar@gmail.com>
@ -128,4 +133,5 @@ Valentin Torikian <valentin.torikian@gmail.com>
voiper
VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Winter <simon@agius-muscat.net>
xrufix
zGuba

View File

@ -4,7 +4,7 @@
<p align="center">
<a href="https://github.com/acemod/ACE3/releases/latest">
<img src="https://img.shields.io/badge/Version-3.9.2-blue.svg?style=flat-square" alt="ACE3 Version">
<img src="https://img.shields.io/badge/Version-3.10.2-blue.svg?style=flat-square" alt="ACE3 Version">
</a>
<a href="https://github.com/acemod/ACE3/issues">
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">
@ -18,8 +18,8 @@
<a href="https://github.com/acemod/ACE3/blob/master/LICENSE">
<img src="https://img.shields.io/badge/License-GPLv2-red.svg?style=flat-square" alt="ACE3 License">
</a>
<a href="http://slackin.ace3mod.com/">
<img src="http://slackin.ace3mod.com/badge.svg?style=flat-square&label=Slack" alt="ACE3 Slack">
<a href="https://slackin.ace3mod.com/">
<img src="https://slackin.ace3mod.com/badge.svg?style=flat-square&label=Slack" alt="ACE3 Slack">
</a>
<a href="https://travis-ci.org/acemod/ACE3">
<img src="https://img.shields.io/travis/acemod/ACE3.svg?style=flat-square&label=Build" alt="ACE3 Build Status">
@ -28,7 +28,7 @@
<p align="center">
<sup><strong>Requires the latest version of <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>.<br/>
Visit us on <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="http://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup>
Visit us on <a href="https://twitter.com/ACE3Mod">Twitter</a> | <a href="https://www.facebook.com/ACE3Mod">Facebook</a> | <a href="https://www.youtube.com/c/ACE3Mod">YouTube</a> | <a href="https://www.reddit.com/r/arma/search?q=ACE&restrict_sr=on&sort=new&t=all">Reddit</a></strong></sup>
</p>
**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3.
@ -37,7 +37,8 @@ The project is entirely **open-source** and all contributions are welcome. Feel
The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE3 by simply excluding any components they don't need, or those possibly in conflict with other mods. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience.
### Core features
## Core features
- Brand new 3D interaction/action system
- Performance and reliability framework
- Focus on modularity and customization
@ -51,7 +52,8 @@ The mod is **built modularly**, so almost any included PBO can be easily removed
- Logistics
- Advanced missile guidance and laser designation
#### Additional features
### Additional features
- Carrying and dragging
- Realistic names for vehicles and weapons
- A fire control system (FCS) for armored vehicles and helicopters
@ -72,18 +74,56 @@ The mod is **built modularly**, so almost any included PBO can be easily removed
- Vector, MicroDAGR and Kestrel devices<br>
***and much more...***
### Guides & how-tos
If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first:
- [Installation guide](http://ace3mod.com/wiki/user/installation-guide.html)
- [Information center](http://ace3mod.com/wiki/user/information-center.html)
## Getting started
#### Contributing
You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE3, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address.
ACE3 requires Arma 3 and the latest version of <a href="https://github.com/CBATeam/CBA_A3/releases">CBA A3</a>. See the following pages for help and information on how to get started with ACE3:
- [Installation guide](https://ace3mod.com/wiki/user/installation-guide.html)
- [Information center](https://ace3mod.com/wiki/user/information-center.html)
## Contributing
You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. We are always welcoming new pull requests containing bug fixes, refactors and new features. We have a list of tasks and bugs on our issue tracker on Github. Please comment on issues if you want to contribute with, to avoid duplicating effort.
### Contribution guidelines
To contribute something to ACE3, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address.
### Submitting issues and requesting features
Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest changes to the existing ones. See also:
- [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html)
- [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
- [How to report an issue](https://ace3mod.com/wiki/user/how-to-report-an-issue.html)
- [How to make a feature request](https://ace3mod.com/wiki/user/how-to-make-a-feature-request.html)
### Testing & building
#### Testing & building
To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build:
- [Setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) step-by-step instructions on how to properly setup and build a version of ACE3 for testing purposes.
- [Setting up the development environment](https://ace3mod.com/wiki/development/setting-up-the-development-environment.html) step-by-step instructions on how to properly setup and build a version of ACE3 for testing purposes.
### Get in touch
<table>
<tr>
<td><a href="https://slackin.ace3mod.com/">Slack</a></td>
<td>We have a public Slack team that anyone can join. This is where all our developers and contributors hang out and where we make announcements</td>
</tr>
<tr>
<td><a href="https://twitter.com/ACE3Mod">Twitter</a></td>
<td>You can follow our Twitter account to get updates and various links to guides</td>
</tr>
<tr>
<td><a href="https://www.facebook.com/ACE3Mod">Facebook</a></td>
<td>You can follow our Facebook account to get updates and various links to guides</td>
</tr>
<tr>
<td><a href="https://forums.bistudio.com/topic/181341-ace3-a-collaborative-merger-between-agm-cse-and-ace/?p=2859670">Bohemia Forum</a></td>
<td>We have a dedicated thread on the Bohemia Forums for the ACE3 project</td>
</tr>
</table>
## License
ACE3 is licensed under the GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE).

Binary file not shown.

Binary file not shown.

View File

@ -33,7 +33,7 @@ private _aceTimeSecond = floor CBA_missionTime;
drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.02*_caliber,0.01*_caliber],[[0,0,0,0.65],[0,0,0,0.2]],[1,0],0,0,"","",""];
};
call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, _aceTimeSecond, CBA_missionTime - _aceTimeSecond]);
_bullet setVelocity (_bulletVelocity vectorAdd (parseSimpleArray ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, _aceTimeSecond, CBA_missionTime - _aceTimeSecond])));
};
nil
} count +GVAR(allBullets);

View File

@ -14,6 +14,8 @@
<Portuguese>Mostrar Informação do Vento</Portuguese>
<Japanese>風の情報を表示</Japanese>
<Korean>바람의 정보를 표시</Korean>
<Chinese>顯示風況</Chinese>
<Chinesesimp>显示风况</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ProtractorKey">
<English>Show Protractor</English>
@ -28,6 +30,8 @@
<Portuguese>Mostrar Transferidor</Portuguese>
<Japanese>分度器を表示</Japanese>
<Korean>각도기 표시</Korean>
<Chinese>顯示量角器</Chinese>
<Chinesesimp>显示量角器</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_DisplayName">
<English>Advanced Ballistics</English>
@ -42,6 +46,8 @@
<Italian>Balistica Avanzata</Italian>
<Japanese>アドバンスド バリスティックス</Japanese>
<Korean>고급 탄도학</Korean>
<Chinese>先進彈道系統</Chinese>
<Chinesesimp>先进弹道系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName">
<English>Advanced Ballistics</English>
@ -56,6 +62,8 @@
<Italian>Balistica Avanzata</Italian>
<Japanese>アドバンスド バリスティックス</Japanese>
<Korean>고급 탄도학</Korean>
<Chinese>先進彈道系統</Chinese>
<Chinesesimp>先进弹道系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_Description">
<English>Enables advanced ballistics</English>
@ -70,6 +78,8 @@
<Italian>Abilita Balistica Avanzata</Italian>
<Japanese>アドバンスド バリスティックスを有効化</Japanese>
<Korean>고급 탄도학을 적용합니다</Korean>
<Chinese>啟用先進彈道系統</Chinese>
<Chinesesimp>启用先进弹道系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName">
<English>Enabled For Snipers</English>
@ -84,6 +94,8 @@
<Italian>Abilita per Tiratori Scelti</Italian>
<Japanese>狙撃手へ有効化</Japanese>
<Korean>저격수만 적용</Korean>
<Chinese>啟用給狙擊手</Chinese>
<Chinesesimp>启用给狙击手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description">
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
@ -98,6 +110,8 @@
<Italian>Abilita Balistica Avanzata per Tiratori Scelti non locali (con ottiche ad alto potenziale)</Italian>
<Japanese>非ローカルの狙撃手 (高倍率スコープを使っている場合)へアドバンスド バリスティックスを有効化します</Japanese>
<Korean>고급 탄도학을 비-저격수 인원에게도 적용합니다(고성능 조준경을 사용시)</Korean>
<Chinese>啟用先進彈道系統給非本地狙擊手(當使用高倍率光學瞄鏡時)</Chinese>
<Chinesesimp>启用先进弹道系统给非本地狙击手(当使用高倍率光学瞄镜时)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName">
<English>Enabled For Group Members</English>
@ -112,6 +126,8 @@
<Italian>Abilita per Membri del Gruppo</Italian>
<Japanese>グループ メンバーへ有効化</Japanese>
<Korean>그룹 멤버도 적용</Korean>
<Chinese>啟用給小隊成員</Chinese>
<Chinesesimp>启用给小队成员</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description">
<English>Enables advanced ballistics for non local group members</English>
@ -126,6 +142,8 @@
<Italian>Abilita Balistica Avanzata per Membri non locali del Gruppo</Italian>
<Japanese>非ローカルのグループ メンバーへアドバンスド バリスティックスを有効化します</Japanese>
<Korean>고급 탄도학을 비-그룹멤버에게도 적용합니다</Korean>
<Chinese>啟用先進彈道系統給非本地小隊成員</Chinese>
<Chinesesimp>启用先进弹道系统给非本地小队成员</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName">
<English>Enabled For Everyone</English>
@ -140,6 +158,8 @@
<Italian>Abilita per tutti</Italian>
<Japanese>全員に有効化</Japanese>
<Korean>모두에게 적용</Korean>
<Chinese>啟用給所有人</Chinese>
<Chinesesimp>启用给所有人</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description">
<English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
@ -154,6 +174,8 @@
<Italian>Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe ridurre le prestazioni durante scontri intensi in multiplayer)</Italian>
<Japanese>非ローカルの全プレイヤーへアドバンスド バリスティックスを有効化します (マルチプレイで大規模な銃撃戦がおこなわれると、動作の低下を招きます)</Japanese>
<Korean>고급 탄도학을 모든 비-로컬그룹에게도 적용합니다(적용 후 대규모 전투시 성능하락을 유발할 수 있습니다)</Korean>
<Chinese>啟用先進彈道系統給所有非本地玩家 (啟用此功能後,在多人連線大量交火時可能會降低效能)</Chinese>
<Chinesesimp>启用先进弹道系统给所有非本地玩家 (启用此功能后,在多人连线大量交火时可能会降低效能)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName">
<English>Always Enabled For Group Members</English>
@ -168,6 +190,8 @@
<Italian>Sempre abilitato per Membri del Gruppo</Italian>
<Japanese>常にグループ メンバーへ有効化</Japanese>
<Korean>그룹 멤버에게 항상 적용</Korean>
<Chinese>永遠啟用給小隊成員</Chinese>
<Chinesesimp>永远启用给小队成员</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description">
<English>Always enables advanced ballistics when a group member fires</English>
@ -182,6 +206,8 @@
<Italian>Abilita sempre Balistica Avanzata quando un membro del gruppo spara</Italian>
<Japanese>グループ メンバーが射撃した時、常にアドバンスド バリスティックスを有効化します</Japanese>
<Korean>그룹 멤버가 발사시 항상 고급 탄도학을 적용합니다</Korean>
<Chinese>當小隊成員開火時,永遠啟用先進彈道系統</Chinese>
<Chinesesimp>当小队成员开火时,永远启用先进弹道系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English>
@ -196,6 +222,8 @@
<Italian>Disabilita in modalità di fuoco automatico</Italian>
<Japanese>フルオートでは無効化</Japanese>
<Korean>조정간 자동시 비활성화</Korean>
<Chinese>在全自動模式時關閉</Chinese>
<Chinesesimp>在全自动模式时关闭</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English>
@ -210,6 +238,8 @@
<Italian>Disabilita Balistica Avanzata durante fuoco automatico</Italian>
<Japanese>フルオートで射撃中ではアドバンスド バリスティックスを無効化します</Japanese>
<Korean>조정간 자동시 고급 탄도학을 비활성화 합니다</Korean>
<Chinese>在全自動模式開火時,關閉先進彈道系統</Chinese>
<Chinesesimp>在全自动模式开火时,关闭先进弹道系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>
@ -224,6 +254,8 @@
<Italian>Abilita simulazione della temperatura delle munizioni</Italian>
<Japanese>弾薬の温度シミュレーションを有効化</Japanese>
<Korean>탄약 온도 구현 적용</Korean>
<Chinese>啟用彈藥溫度模擬系統</Chinese>
<Chinesesimp>启用弹药温度模拟系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English>
@ -238,6 +270,8 @@
<Italian>La velocità dello sparo varia a seconda della temperatura delle munizioni</Italian>
<Japanese>弾薬の温度により初速値を変化させます</Japanese>
<Korean>탄약 온도에 비례해 총구 속도가 달라집니다</Korean>
<Chinese>子彈初速將隨彈藥溫度而有所變化</Chinese>
<Chinesesimp>子弹初速将随弹药温度而有所变化</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English>
@ -252,6 +286,8 @@
<Italian>Abilita simulazione della lunghezza della canna</Italian>
<Japanese>銃身長のシミュレーションを有効化</Japanese>
<Korean>총열 길이 구현 적용</Korean>
<Chinese>啟用槍管長度模擬系統</Chinese>
<Chinesesimp>启用枪管长度模拟系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English>
@ -266,6 +302,8 @@
<Italian>La velocità di sparo varia a seconda della lunghezza della canna</Italian>
<Japanese>銃身長により初速値を変化させます</Japanese>
<Korean>총구 속도가 총열에 비례해 달라집니다</Korean>
<Chinese>子彈初速將隨槍管長度而有所變化</Chinese>
<Chinesesimp>子弹初速将随枪管长度而有所变化</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English>
@ -280,6 +318,8 @@
<Italian>Abilita effetto dei Proiettili Traccianti</Italian>
<Japanese>弾丸の痕跡表示を有効化</Japanese>
<Korean>예광탄 효과 적용</Korean>
<Chinese>啟用曳光彈效果</Chinese>
<Chinesesimp>启用曳光弹效果</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
@ -294,6 +334,8 @@
<Italian>Abilita effetto dei proiettili traccianti di alto calibro (visibile solo attraverso ottiche ad alto potenziale)</Italian>
<Japanese>大口径の銃弾による弾丸の痕跡表示を有効化します (高倍率スコープを介してでしか見れません)</Japanese>
<Korean>대구경 탄환에 예광탄 효과를 적용합니다(오직 고성능 조준경 사용시에만 보입니다)</Korean>
<Chinese>啟用曳光彈效果給大口徑子彈 (只有透過高倍率光學瞄鏡才能看到)</Chinese>
<Chinesesimp>启用曳光弹效果给大口径子弹 (只有透过高倍率光学瞄镜才能看到)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName">
<English>Simulation Interval</English>
@ -308,6 +350,8 @@
<Italian>Intervallo Simulazione</Italian>
<Japanese>シミュレーション間隔</Japanese>
<Korean>구현 간격</Korean>
<Chinese>模擬間隔</Chinese>
<Chinesesimp>模拟间隔</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English>
@ -322,6 +366,8 @@
<Italian>Definisce l'intervallo tra ogni step di calcolo</Italian>
<Japanese>各計算ごとの間隔を定義します</Japanese>
<Korean>각 계산 단위의 간격을 정의합니다</Korean>
<Chinese>定義每個模擬計算之間的時間間隔</Chinese>
<Chinesesimp>定义每个模拟计算之间的时间间隔</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName">
<English>Simulation Radius</English>
@ -336,6 +382,8 @@
<Italian>Raggio Simulazione</Italian>
<Japanese>シミュレーションの適用範囲</Japanese>
<Korean>구현 범위</Korean>
<Chinese>模擬半徑</Chinese>
<Chinesesimp>模拟半径</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
@ -350,6 +398,8 @@
<Italian>Definisce il raggio attorno al giocatore (in metri) per cui la Balistica Avanzata è applicata ai proiettili</Italian>
<Japanese>プレイヤーの周囲にアドバンスド バリスティックスによる弾道を適用させる範囲を半径で定義します (メートル)</Japanese>
<Korean>플레이어 주위의 발사체를 고급 탄도학으로 정의하는 범위를 정합니다(미터)</Korean>
<Chinese>以玩家的半徑距離(公尺)定義先進彈道系統啟用範圍</Chinese>
<Chinesesimp>以玩家的半径距离(公尺)定义先进弹道系统启用范围</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_Description">
<English>This module enables advanced ballistics simulation - meaning the trajectory of projectiles is influenced by variables like air temperature, atmospheric pressure, humidity, gravity, the type of ammunition and the weapon from which it was fired.</English>
@ -364,6 +414,8 @@
<Italian>Questo modulo abilita la simulazione della Balistica Avanzata - cioè la traiettoria dei proiettili è influenzata da variabili come la temperatura dell'aria, pressione atmosferica, umidità, gravità, il tipo di munizione e l'arma da cui è sparata</Italian>
<Japanese>このモジュールはアドバンスド バリスティックスを有効化します。弾道は気温や気圧、湿度、重力、弾薬の種類、発射する武器から影響を受けるようになります。</Japanese>
<Korean>이 모듈은 고급 탄도학을 적용시킵니다 - 이는 발사체의 궤적이 기온, 대기압, 습도, 중력, 탄환의 종류와 어느 무기에서 발사되는지에 따라 영향을 받습니다.</Korean>
<Chinese>該模塊實現先進的彈道仿真 - 這意味著子彈的軌跡是由空氣溫度、大氣壓力、濕度、重力、彈藥類型以及射擊的武器所影響</Chinese>
<Chinesesimp>该模块实现先进的弹道仿真 - 这意味着子弹的轨迹是由空气温度、大气压力、湿度、重力、弹药类型以及射击的武器所影响</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -1,13 +1,13 @@
class ACE_Settings {
class GVAR(enabled) {
category = "Advanced Fatigue";
category = CSTRING(DisplayName);
displayName = CSTRING(Enabled);
description = CSTRING(Enabled_Description);
typeName = "BOOL";
value = 1;
};
class GVAR(enableStaminaBar) {
category = "Advanced Fatigue";
category = CSTRING(DisplayName);
displayName = CSTRING(EnableStaminaBar);
description = CSTRING(EnableStaminaBar_Description);
typeName = "BOOL";
@ -15,28 +15,28 @@ class ACE_Settings {
isClientSettable = 1;
};
class GVAR(performanceFactor) {
category = "Advanced Fatigue";
category = CSTRING(DisplayName);
displayName = CSTRING(PerformanceFactor);
description = CSTRING(PerformanceFactor_Description);
typeName = "SCALAR";
value = 1;
};
class GVAR(recoveryFactor) {
category = "Advanced Fatigue";
category = CSTRING(DisplayName);
displayName = CSTRING(RecoveryFactor);
description = CSTRING(RecoveryFactor_Description);
typeName = "SCALAR";
value = 1;
};
class GVAR(loadFactor) {
category = "Advanced Fatigue";
category = CSTRING(DisplayName);
displayName = CSTRING(LoadFactor);
description = CSTRING(LoadFactor_Description);
typeName = "SCALAR";
value = 1;
};
class GVAR(terrainGradientFactor) {
category = "Advanced Fatigue";
category = CSTRING(DisplayName);
displayName = CSTRING(TerrainGradientFactor);
description = CSTRING(TerrainGradientFactor_Description);
typeName = "SCALAR";

View File

@ -3,7 +3,7 @@ class CfgVehicles {
class GVAR(moduleSettings): ACE_Module {
author = ECSTRING(common,ACETeam);
category = "ACE";
displayName = "Advanced Fatigue";
displayName = CSTRING(DisplayName);
function = QFUNC(moduleSettings);
scope = 2;
isGlobal = 1;

View File

@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Advanced_Fatigue">
<Key ID="STR_ACE_Advanced_Fatigue_DisplayName">
<English>Advanced Fatigue</English>
<Chinese>進階疲勞</Chinese>
<Chinesesimp>进阶疲劳</Chinesesimp>
<Japanese>アドバンスド疲労</Japanese>
<Italian>Fatica Avanzata</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor">
<English>Performance Factor</English>
<German>Leistungsfaktor</German>
@ -9,6 +16,8 @@
<Korean>성능 요인</Korean>
<French>Facteur de performance</French>
<Italian>Fattore Prestazione</Italian>
<Chinese>體力值</Chinese>
<Chinesesimp>体力值</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_Description">
<English>Influences the overall performance of all players with no custom factor. Higher means better.</English>
@ -18,6 +27,8 @@
<Korean>모든 성능이 임의로 설정된 값 없이 영향받습니다. 값이 클수록 더 나은 성능을 발휘합니다</Korean>
<French>Influence les performances générales de tous les joueurs sans facteurs personalisés. Une valeur plus élevée implique de meilleures performances.</French>
<Italian>Influenza qualsiasi prestazione di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore.</Italian>
<Chinese>影響所有玩家的體力表現,值越高代表體力越好</Chinese>
<Chinesesimp>影响所有玩家的体力表现,值越高代表体力越好</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_EdenDescription">
<English>Influences the overall performance of this unit. Higher means better.</English>
@ -27,6 +38,8 @@
<Korean>모든 성능이 이 단위로 영향을 받습니다. 값이 클수록 더 나은 성능을 발휘합니다</Korean>
<French>Influence les performances générales de cette unité. Une valeur plus élevée implique de meilleures performances.</French>
<Italian>Influenza qualsiasi prestazione di questa unità. Maggiore significa migliore.</Italian>
<Chinese>影響這個單位的體力表現,值越高代表體力越好</Chinese>
<Chinesesimp>影响这个单位的体力表现,值越高代表体力越好</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor">
<English>Recovery Factor</English>
@ -36,6 +49,8 @@
<Korean>회복 요인</Korean>
<French>Facteur de récupération</French>
<Italian>Fattore Recupero</Italian>
<Chinese>回復值</Chinese>
<Chinesesimp>回复值</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor_Description">
<English>Changes how fast the player recovers when resting. Higher is faster.</English>
@ -45,6 +60,8 @@
<Korean>얼마나 빨리 회복하는지를 바꿉니다. 값이 클수록 더 나은 성능을 발휘합니다</Korean>
<French>Change la vitesse à laquelle les joueurs récupèrent leur endurance lorsqu'ils se reposent. Une valeur plus élevée implique une récupération plus rapide.</French>
<Italian>Determina in quanto tempo il giocatore recupera quando rilassato. Maggiore significa migliore.</Italian>
<Chinese>決定玩家休息多久就能回復體力,值越高恢復越快</Chinese>
<Chinesesimp>决定玩家休息多久就能回复体力,值越高恢复越快</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor">
<English>Load Factor</English>
@ -54,6 +71,8 @@
<Korean>부담 요인</Korean>
<French>Facteur d'encombrement</French>
<Italian>Fattore Caricamento</Italian>
<Chinese>負重量</Chinese>
<Chinesesimp>负重量</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor_Description">
<English>Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence.</English>
@ -63,6 +82,8 @@
<Korean>플레이어가 무게에 따라 얼마나 영향받는지를 증가시키거나 감소시킵니다. 0의 경우 플레이어가 장비 무게에 영향받지 않습니다.</Korean>
<French>Augmente ou réduit l'influence que le poids à sur les performances des joueurs. Zéro implique que le poids de l'équipement n'a pas d'influence sur les performances.</French>
<Italian>Incrementa o decrementa quanto il peso influenza le prestazioni dei giocatori. Zero significa che il peso dell'equipaggiamento non ha alcuna influenza nelle prestazioni.</Italian>
<Chinese>增加或降低玩家所能承受的負重量. 如設定值為0, 代表裝備的重量將不會影響到玩家的體力表現</Chinese>
<Chinesesimp>增加或降低玩家所能承受的负重量. 如设定值为0, 代表装备的重量将不会影响到玩家的体力表现</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor">
<English>Terrain Gradient Factor</English>
@ -72,6 +93,8 @@
<Korean>지형 경사도 요인</Korean>
<French>Facteur d'inclinaison du terrain</French>
<Italian>Fattore Pendenza Terreno</Italian>
<Chinese>地形陡峭影響值</Chinese>
<Chinesesimp>地形陡峭影响值</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor_Description">
<English>Sets how much steep terrain increases stamina loss. Higher means higher stamina loss.</English>
@ -81,6 +104,8 @@
<Korean>경사도에 따라 얼마나 피로해지는지를 정합니다. 값이 클수록 더 많은 피로를 유발합니다.</Korean>
<French>Configure l'influence de l'inclinaison du terrain sur la perte d'endurance. Une valeur plus élevée implique une perte d'endurance plus importante.</French>
<Italian>Stabilisce quanto la pendenza del terreno incrementa la perdita della stamina. Maggiore significa più stamina persa.</Italian>
<Chinese>設定陡峭的地形將會影響多少體力的流失,值越高代表體力流失越快</Chinese>
<Chinesesimp>设定陡峭的地形将会影响多少体力的流,失值越高代表体力流失越快</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_Enabled">
<English>Enabled</English>
@ -90,6 +115,8 @@
<Korean>활성화</Korean>
<French>Activé</French>
<Italian>Abilitato</Italian>
<Chinese>啟用</Chinese>
<Chinesesimp>启用</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_Enabled_Description">
<English>Enables/disables Advanced Fatigue.</English>
@ -99,6 +126,8 @@
<Korean>고급 피로도 활성화/비활성화</Korean>
<French>Active/désactive la fatigue avancée.</French>
<Italian>Abilita/disabilita la Fatica Avanzata.</Italian>
<Chinese>啟用/關閉進階體力.</Chinese>
<Chinesesimp>启用/关闭进阶体力.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar">
<English>Show stamina bar</English>
@ -108,6 +137,8 @@
<Korean>피로도 막대</Korean>
<French>Afficher la barre d'endurance</French>
<Italian>Mostra barra stamina</Italian>
<Chinese>顯示體力條</Chinese>
<Chinesesimp>显示体力条</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar_Description">
<English>Shows the stamina bar.</English>
@ -117,6 +148,8 @@
<Korean>피로도 막대를 보여줍니다.</Korean>
<French>Affiche la barre d'endurance.</French>
<Italian>Mostra la barra della stamina.</Italian>
<Chinese>顯示體力條</Chinese>
<Chinesesimp>显示体力条</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -60,6 +60,7 @@ class CfgVehicles {
displayName = CSTRING(PickUp);
condition = QUOTE([ARR_2(_player,true)] call FUNC(canPrepare));
statement = QUOTE(_this call FUNC(pickUp));
exceptions[] = {"isNotSwimming"};
distance = 1.8; // Requires >1.7 to work when standing with weapon on back
icon = "\a3\ui_f\data\igui\cfg\actions\obsolete\ui_action_takemine_ca.paa";
};

View File

@ -21,6 +21,7 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
["ACE3 Weapons", QGVAR(prepare), localize LSTRING(Prepare), {
// Condition
if (!([ACE_player] call FUNC(canPrepare))) exitWith {false};
if (EGVAR(common,isReloading)) exitWith {true};
// Statement
[ACE_player] call FUNC(prepare);
@ -30,7 +31,7 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
["ACE3 Weapons", QGVAR(dropModeToggle), localize LSTRING(DropModeToggle), {
// Condition
if !(ACE_player getVariable [QGVAR(inHand), false]) exitWith {false};
if (!(ACE_player getVariable [QGVAR(inHand), false]) || {underwater ACE_player}) exitWith {false};
// Statement
private _currentDropMode = ACE_player getVariable [QGVAR(dropMode), false];

View File

@ -32,6 +32,5 @@ GVAR(enabled) &&
#endif
{!(call EFUNC(common,isFeatureCameraActive))} &&
{!EGVAR(common,isReloading)} &&
{[_unit, objNull, ["isNotInside", "isNotSitting"/*, "isNotOnLadder"*/]] call EFUNC(common,canInteractWith)} && // Ladder needs positioning fixes on throw
{[_unit, objNull, ["isNotInside", "isNotSwimming", "isNotSitting"/*, "isNotOnLadder"*/]] call EFUNC(common,canInteractWith)} && // Ladder needs positioning fixes on throw
{_unit call CBA_fnc_canUseWeapon} // Disable in non-FFV seats due to surface detection issues

View File

@ -128,6 +128,10 @@ _activeThrowable setDir (_unitDirVisual + 90);
private _pitch = [-30, -90] select (_throwType == "high");
[_activeThrowable, _pitch, 0] call BIS_fnc_setPitchBank;
// Force drop mode if underwater
if (underwater player) then {
ACE_player setVariable [QGVAR(dropMode), true];
};
if (ACE_player getVariable [QGVAR(dropMode), false]) then {
_posFin = _posFin vectorAdd (AGLToASL (positionCameraToWorld [_leanCoef, 0, ACE_player getVariable [QGVAR(dropDistance), DROP_DISTANCE_DEFAULT]]));

View File

@ -10,6 +10,8 @@
<Korean>고급 투척</Korean>
<French>Lancé amélioré</French>
<Italian>Lancio Avanzato</Italian>
<Chinese>進階投擲</Chinese>
<Chinesesimp>进阶投掷</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Module_Description">
<English>Allows changing advanced throwing behaviour.</English>
@ -20,6 +22,8 @@
<Korean>고급 투척 행위를 허가합니다</Korean>
<French>Permet de changer la configuration du lancé amélioré.</French>
<Italian>Permette il cambiamento della modalità di tiro.</Italian>
<Chinese>允許使用更多不同的投擲方式</Chinese>
<Chinesesimp>允许使用更多不同的投掷方式</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Enable_DisplayName">
<English>Enable Advanced Throwing</English>
@ -30,6 +34,8 @@
<Korean>고급 투척 활성화 </Korean>
<French>Active le lancé amélioré</French>
<Italian>Abilita Lancio Avanzato</Italian>
<Chinese>啟用進階投擲</Chinese>
<Chinesesimp>启用进阶投掷</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Enable_Description">
<English>Enables advanced throwing system.</English>
@ -40,6 +46,8 @@
<Korean>고급 투척을 활성화 합니다</Korean>
<French>Active le système de lancé amélioré.</French>
<Italian>Abilita il sistema di lancio avanzato.</Italian>
<Chinese>啟用進階投擲系統</Chinese>
<Chinesesimp>启用进阶投掷系统</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_DisplayName">
<English>Show Throw Arc</English>
@ -50,6 +58,8 @@
<Korean>투척 궤적 표시</Korean>
<French>Afficher l'arc de lancé</French>
<Italian>Mostra Arco di Tiro</Italian>
<Chinese>顯示投擲軌道</Chinese>
<Chinesesimp>显示投掷轨道</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_Description">
<English>Enables visualization of the throw arc (where throwable will fly).</English>
@ -60,6 +70,8 @@
<Korean>투척 궤도를 시각화 합니다(투척물이 어디로 갈지)</Korean>
<French>Active la visualisation de l'arc de lancé (où l'objet lancé va atterrir).</French>
<Italian>Abilita la visualizzazione dell'arco del tiro (dove l'oggetto lanciabile volerà).</Italian>
<Chinese>顯示投擲軌道幫助投擲</Chinese>
<Chinesesimp>显示投掷轨道帮助投掷</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_DisplayName">
<English>Show Throwing Mouse Controls</English>
@ -70,6 +82,8 @@
<Korean>마우스 조작 표시</Korean>
<French>Afficher les contrôles à la souris du lancé</French>
<Italian>Mostra Comandi Mouse Lancio</Italian>
<Chinese>顯示滑鼠投擲控制提示</Chinese>
<Chinesesimp>显示滑鼠投掷控制提示</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_Description">
<English>Enables visual cues for mouse controls when throwable is prepared.</English>
@ -80,6 +94,8 @@
<Korean>투척물을 준비시 마우스 조작을 시각화해서 보여줍니다</Korean>
<French>Active les aides visuels pour les controles à la souris lorsqu'un lancé est préparé.</French>
<Italian>Abilita la visualizzazione dei controlli del mouse quando l'oggetto lanciabile è pronto.</Italian>
<Chinese>開啟後會在準備投擲時, 顯示滑鼠相關操作</Chinese>
<Chinesesimp>开启后会在准备投掷时, 显示滑鼠相关操作</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_DisplayName">
<English>Enable Throwables Pick Up</English>
@ -90,6 +106,8 @@
<Korean>투척물 줍기 활성화</Korean>
<French>Active la récupération des objets lancés</French>
<Italian>Abilita Raccogli Oggetti</Italian>
<Chinese>啟用可撿取地面投擲物</Chinese>
<Chinesesimp>启用可捡取地面投掷物</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_Description">
<English>Enables ability to pick up throwables from the ground.</English>
@ -100,6 +118,8 @@
<Korean>땅에 떨어진 투척물을 주울 수 있게 해줍니다.</Korean>
<French>Active la capacité de récupérer les objets lancés sur le sol.</French>
<Italian>Abilita la possibilità di raccogliere un oggetto lanciabile da terra.</Italian>
<Chinese>啟用後, 可撿取地面上的投擲物</Chinese>
<Chinesesimp>启用后, 可捡取地面上的投掷物</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_DisplayName">
<English>Enable Attached Throwables Pick Up</English>
@ -110,6 +130,8 @@
<Korean>부착 투척물 줍기 활성화</Korean>
<French>Active le ramassage d'objets lançables attachés</French>
<Italian>Abilita Raccogli Oggetti Lanciabili da altri Oggetti</Italian>
<Chinese>啟用可撿取附著投擲物</Chinese>
<Chinesesimp>启用可捡取附着投掷物</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_Description">
<English>Enables ability to pick up throwables from attached objects.</English>
@ -120,6 +142,8 @@
<Korean>부착된 투척물을 주울 수 있게 해줍니다.</Korean>
<French>Active la capacité à ramasser les objets lançables attaché à d'autres objets.</French>
<Italian>Abilita la possibilità di raccogliere gli oggetti lanciabili dagli altri oggetti. </Italian>
<Chinese>啟用後, 可撿取附著在物件上的投擲物</Chinese>
<Chinesesimp>启用后, 可捡取附着在物件上的投掷物</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Prepare">
<English>Prepare/Change Throwable</English>
@ -130,6 +154,8 @@
<Korean>투척물 준비/변경</Korean>
<French>Préparer/changer d'objet</French>
<Italian>Prepara/Cambia Oggetto lanciabile</Italian>
<Chinese>準備/變更投擲物</Chinese>
<Chinesesimp>准备/变更投掷物</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_dropModeHold">
<English>Throwable Drop Mode (Hold)</English>
@ -140,6 +166,8 @@
<Korean>투척물 떨어뜨리기 모드(꾹눌러서)</Korean>
<French>Mode de lancé de l'objet (Tenir)</French>
<Italian>Modalità Oggetto Gettabile (Mantenere)</Italian>
<Chinese>投擲模式 (按住)</Chinese>
<Chinesesimp>投掷模式 (按住)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_DropModeToggle">
<English>Throwable Drop Mode (Toggle)</English>
@ -150,6 +178,8 @@
<Korean>투척물 떨어뜨리기 모드(토글)</Korean>
<French>Mode de lancé de l'objet (Basculer)</French>
<Italian>Modalità Oggetto lanciabile Gettabile (Interruttore)</Italian>
<Chinese>投擲模式 (切換)</Chinese>
<Chinesesimp>投掷模式 (切换)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Primed">
<English>Primed</English>
@ -160,6 +190,8 @@
<Korean>뇌관 작동</Korean>
<French>Amorcer</French>
<Italian>Armato</Italian>
<Chinese>引信開始燃燒</Chinese>
<Chinesesimp>引信开始燃烧</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Throw">
<English>Throw</English>
@ -170,6 +202,8 @@
<Korean>던지기</Korean>
<French>Lancer</French>
<Italian>Lanciare</Italian>
<Chinese>投擲</Chinese>
<Chinesesimp>投掷</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ChangeMode">
<English>(Scroll) Change Mode</English>
@ -180,6 +214,8 @@
<Korean>(마우스 휠) 모드 변경</Korean>
<French>(Molette souris) Changer de mode</French>
<Italian>(Scorrere) Cambio Modalità</Italian>
<Chinese>(滾輪) 變更模式</Chinese>
<Chinesesimp>(滚轮) 变更模式</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Extend">
<English>(Scroll) Extend</English>
@ -190,6 +226,8 @@
<Korean>(마우스 휠) 연장</Korean>
<French>(Molette souris) Etendre</French>
<Italian>(Scorrere) Estendere</Italian>
<Chinese>(滾輪) 延長</Chinese>
<Chinesesimp>(滚轮) 延长</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Cook">
<English>(Click) Cook</English>
@ -200,6 +238,8 @@
<Korean>(클릭) 예열</Korean>
<French>(Clique) Dégoupiller</French>
<Italian>(Click) Arma</Italian>
<Chinese>(點擊) 提早拉開引信</Chinese>
<Chinesesimp>(点击) 提早拉开引信</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_PickUp">
<English>Pick Up</English>
@ -210,6 +250,8 @@
<Korean>줍기</Korean>
<French>Ramasser</French>
<Italian>Raccogli</Italian>
<Chinese>撿取</Chinese>
<Chinesesimp>捡取</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -0,0 +1,17 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient));
};
};

View File

@ -37,11 +37,9 @@ class CfgVehicles {
class Heli_Light_01_base_F: Helicopter_Base_H {
incomingMissileDetectionSystem = 16; // Vanilla: 0
driverCanEject = 1;
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
showHMD = 1;
};
};
@ -49,22 +47,13 @@ class CfgVehicles {
class Heli_Light_01_armed_base_F: Heli_Light_01_base_F {
incomingMissileDetectionSystem = 16; // Vanilla: 0
driverCanEject = 1;
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
};
};
};
class Heli_Light_02_base_F: Helicopter_Base_H {
driverCanEject = 1;
incomingMissileDetectionSystem = 16; // Vanilla: 24
magazines[] = {"2000Rnd_762x51_Belt_T_Green", "12Rnd_PG_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; // Switch gun magazine to 7.62mm from 6.5mm
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
showHMD = 1;
};
};
@ -80,44 +69,31 @@ class CfgVehicles {
class Heli_Attack_02_base_F: Helicopter_Base_F {
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
canEject = 1;
};
};
};
class Heli_Transport_01_base_F: Helicopter_Base_H {
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
showHMD = 1;
};
class MainTurret: MainTurret {
magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; // Switch gun magazine to 7.62mm from 6.5mm
canEject = 1;
};
class RightDoorGun: MainTurret {
magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; // Switch gun magazine to 7.62mm from 6.5mm
canEject = 1;
};
};
};
class Heli_Transport_02_base_F: Helicopter_Base_H {
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
showHMD = 1;
};
};
@ -126,11 +102,9 @@ class CfgVehicles {
class Heli_light_03_base_F: Helicopter_Base_F {
lockDetectionSystem = 0; // Vanilla: 12
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {
canEject = 1;
showHMD = 1;
weapons[] = {"Laserdesignator_mounted"}; // Add Laser Designator
magazines[] = {"Laserbatteries"};
@ -166,26 +140,8 @@ class CfgVehicles {
class Heli_Transport_03_base_F: Helicopter_Base_H {
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
};
};
};
class Heli_Transport_04_base_F: Helicopter_Base_H {
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class CopilotTurret: CopilotTurret {
canEject = 1;
};
class LoadmasterTurret: MainTurret {
canEject = 1;
};
};
};
};

View File

@ -1,6 +1,5 @@
class Heli_Attack_01_base_F: Helicopter_Base_F {
incomingMissileDetectionSystem = 16; // Vanilla: 24
driverCanEject = 1;
class Turrets: Turrets {
class MainTurret: MainTurret {

View File

@ -0,0 +1,2 @@
PREP(initEjectAction);
PREP(canShowEject);

View File

@ -0,0 +1,29 @@
#include "script_component.hpp"
if (!hasInterface) exitWith {};
private _cfgAction = configFile >> "CfgActions" >> "Eject";
GVAR(ejectActionParams) = [
[
"", // will be set with setUserActionText
{
params ["_vehicle", "_unit"];
private _preserveEngineOn = (_unit == driver _vehicle) && {isEngineOn _vehicle};
moveOut _unit;
if (_preserveEngineOn) then {
// vehicle is local to last driver, no need to care
_vehicle engineOn true;
};
},
nil,
getNumber (_cfgAction >> "priority"),
false,
true,
getText (_cfgAction >> "shortcut"),
'[_this, _target] call DFUNC(canShowEject)'
],
getText (_cfgAction >> "text"),
getText (_cfgAction >> "textDefault")
];
["Helicopter", "initPost", LINKFUNC(initEjectAction)] call CBA_fnc_addClassEventHandler;

View File

@ -0,0 +1,9 @@
#include "script_component.hpp"
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -18,6 +18,7 @@ class CfgPatches {
};
#include "CfgAmmo.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgMagazines.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"

View File

@ -0,0 +1,34 @@
/*
* Author: Dystopian
* Check if Eject action can be shown.
*
* Arguments:
* 0: Unit who calls action <OBJECT>
* 1: Vehicle which action is attached to <OBJECT>
*
* Return Value:
* Can show <BOOL>
*
* Example:
* [player, vehicle player] call ace_aircraft_fnc_canShowEject
*
* Public: No
*/
#include "script_component.hpp"
#define FULLCREW_UNIT 0
#define FULLCREW_ROLE 1
#define FULLCREW_TURRETPATH 3
params ["_unit", "_vehicle"];
_vehicle == vehicle _unit
&& {
private _ejectVarName = "";
{
if (_unit == _x select FULLCREW_UNIT) exitWith {
_ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH];
};
} count fullCrew _vehicle;
_vehicle getVariable [_ejectVarName, false]
}

View File

@ -0,0 +1,48 @@
/*
* Author: Dystopian
* Add Eject action to vehicle if needed.
*
* Arguments:
* 0: Vehicle <OBJECT>
*
* Return Value:
* None
*
* Example:
* [cursorObject] call ace_aircraft_fnc_initEjectAction
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
if (unitIsUAV _vehicle) exitWith {};
private _config = configFile >> "CfgVehicles" >> typeOf _vehicle;
private _addAction = false;
if (0 == getNumber (_config >> "driverCanEject")) then {
TRACE_2("eject action",typeOf _vehicle,"driver");
_vehicle setVariable [QGVAR(ejectAction_driver_[]), true];
_addAction = true;
};
{
{
_x params ["", "_role", "", "_turretPath"];
if (0 == getNumber (([_config, _turretPath] call CBA_fnc_getTurret) >> "canEject")) then {
TRACE_2("eject action",typeOf _vehicle,_turretPath);
_vehicle setVariable [format [QGVAR(ejectAction_%1_%2), _role, _turretPath], true];
_addAction = true;
};
} forEach fullCrew [_vehicle, _x, true];
} forEach ["gunner", "commander", "turret"];
if (!_addAction) exitWith {};
GVAR(ejectActionParams) params ["_params", "_text", "_picture"];
private _actionID = _vehicle addAction _params;
_vehicle setUserActionText [_actionID, _text, "", _picture];
_vehicle setVariable [QGVAR(ejectAction), _actionID];

View File

@ -0,0 +1 @@
#include "\z\ace\addons\aircraft\script_component.hpp"

View File

@ -14,6 +14,8 @@
<Italian>XM301</Italian>
<Japanese>XM301</Japanese>
<Korean>XM301</Korean>
<Chinese>XM301</Chinese>
<Chinesesimp>XM301</Chinesesimp>
</Key>
<Key ID="STR_ACE_Aircraft_OpenCargoRamp">
<English>Open Cargo Door</English>
@ -28,6 +30,8 @@
<Portuguese>Abrir porta de carga</Portuguese>
<Japanese>カーゴ ドアを開く</Japanese>
<Korean>화물칸 개방</Korean>
<Chinese>開啟貨艙門</Chinese>
<Chinesesimp>开启货舱门</Chinesesimp>
</Key>
<Key ID="STR_ACE_Aircraft_CloseCargoRamp">
<English>Close Cargo Door</English>
@ -42,6 +46,8 @@
<Portuguese>Fechar porta de carga</Portuguese>
<Japanese>カーゴ ドアを閉じる</Japanese>
<Korean>화물칸 폐쇄</Korean>
<Chinese>關閉貨艙門</Chinese>
<Chinesesimp>关闭货舱门</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -1 +0,0 @@
#include "\z\ace\addons\apl\script_component.hpp"

View File

@ -1,7 +1,7 @@
class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_F;
class CBA_MiscItem_ItemInfo;
class ACE_ATragMX: ACE_ItemCore {
author = "Ruthberg";
@ -13,7 +13,7 @@ class CfgWeapons {
icon = "iconObject_circle";
mapSize = 0.034;
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 2;
};
};

View File

@ -52,7 +52,6 @@ class ATragMX_RscButton {
shadow=0;
};
class ATragMX_RscEdit {
access=0;
type=2;
style=ST_RIGHT;
x=0;

View File

@ -48,7 +48,7 @@ _barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
if (!GVAR(atmosphereModeTBH)) then {
_barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
_relativeHumidity = 50;
_relativeHumidity = 0.5;
};
private ["_bulletLength", "_stabilityFactor"];

View File

@ -36,7 +36,7 @@ _barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
if (!GVAR(atmosphereModeTBH)) then {
_barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
_relativeHumidity = 50;
_relativeHumidity = 0.5;
};
private _scopeBaseAngle = if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) then {

View File

@ -14,6 +14,8 @@
<Russian>ATragMX</Russian>
<Japanese>ATragMX</Japanese>
<Korean>ATragMX</Korean>
<Chinese>ATragMX</Chinese>
<Chinesesimp>ATragMX</Chinesesimp>
</Key>
<Key ID="STR_ACE_ATragMX_OpenATragMXDialog">
<English>Open ATragMX</English>
@ -28,6 +30,8 @@
<Portuguese>Abrir ATragMX</Portuguese>
<Japanese>ATragMX を開く</Japanese>
<Korean>ATragMX 열기</Korean>
<Chinese>開啟ATragMX</Chinese>
<Chinesesimp>开启ATragMX</Chinesesimp>
</Key>
<Key ID="STR_ACE_ATragMX_Description">
<English>Rugged PDA with ATragMX</English>
@ -42,6 +46,8 @@
<Portuguese>PDA Robusto com ATragMX</Portuguese>
<Japanese>ATragMX 付きの携行型端末</Japanese>
<Korean>ATragMX가 달린 PDA</Korean>
<Chinese>裝有軍用PDA的ATragMX</Chinese>
<Chinesesimp>装有军用PDA的ATragMX</Chinesesimp>
</Key>
<Key ID="STR_ACE_ATragMX_ATragMXDialogKey">
<English>Open ATragMX</English>
@ -56,6 +62,8 @@
<Portuguese>Abrir ATragMX</Portuguese>
<Japanese>ATragMX を開く</Japanese>
<Korean>ATragMX 열기</Korean>
<Chinese>開啟ATragMX</Chinese>
<Chinesesimp>开启ATragMX</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -6,7 +6,7 @@
displayName = CSTRING(AttachDetach); \
condition = QUOTE(_this call FUNC(canAttach)); \
insertChildren = QUOTE(_this call FUNC(getChildrenAttachActions)); \
exceptions[] = {}; \
exceptions[] = {"isNotSwimming"}; \
showDisabled = 0; \
priority = 0; \
icon = QPATHTOF(UI\attach_ca.paa); \
@ -15,7 +15,7 @@
displayName = CSTRING(Detach); \
condition = QUOTE(_this call FUNC(canDetach)); \
statement = QUOTE(_this call FUNC(detach) ); \
exceptions[] = {}; \
exceptions[] = {"isNotSwimming"}; \
showDisabled = 0; \
priority = 0.1; \
icon = QPATHTOF(UI\detach_ca.paa); \
@ -55,7 +55,7 @@ class CfgVehicles {
displayName = CSTRING(AttachDetach);
condition = QUOTE(_this call FUNC(canAttach));
insertChildren = QUOTE(_this call FUNC(getChildrenAttachActions));
exceptions[] = {"isNotDragging"};
exceptions[] = {"isNotDragging", "isNotSwimming"};
showDisabled = 0;
priority = 5;
icon = QPATHTOF(UI\attach_ca.paa);
@ -64,7 +64,7 @@ class CfgVehicles {
displayName = CSTRING(Detach);
condition = QUOTE(_this call FUNC(canDetach));
statement = QUOTE(_this call FUNC(detach));
exceptions[] = {"isNotDragging"};
exceptions[] = {"isNotDragging", "isNotSwimming"};
showDisabled = 0;
priority = 5;
icon = QPATHTOF(UI\detach_ca.paa);

View File

@ -1,6 +1,6 @@
class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_F;
class CBA_MiscItem_ItemInfo;
class ACE_IR_Strobe_Item: ACE_ItemCore {
ACE_attachable = "ACE_IR_Strobe_Effect";
@ -11,8 +11,8 @@ class CfgWeapons {
model = QPATHTOF(data\ace_IRStrobe.p3d);
picture = QPATHTOF(UI\irstrobe_item.paa);
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
};
};
};
};

View File

@ -83,7 +83,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
if ((GVAR(placeAction) != PLACE_WAITING) ||
{_unit != ACE_player} ||
{!([_unit, _attachToVehicle, []] call EFUNC(common,canInteractWith))} ||
{!([_unit, _attachToVehicle, ["isNotSwimming"]] call EFUNC(common,canInteractWith))} ||
{!([_attachToVehicle, _unit, _itemClassname] call FUNC(canAttach))}) then {
[_idPFH] call CBA_fnc_removePerFrameHandler;

View File

@ -31,7 +31,7 @@ _actions = [];
if (getText (_item >> "ACE_Attachable") != "") then {
_displayName = getText(_item >> "displayName");
_picture = getText(_item >> "picture");
_action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {_this call FUNC(canAttach)}, {}, [_x]] call EFUNC(interact_menu,createAction);
_action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
};
@ -44,7 +44,7 @@ _actions = [];
if (getText (_item >> "ACE_Attachable") != "") then {
_displayName = getText(_item >> "displayName");
_picture = getText(_item >> "picture");
_action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {_this call FUNC(canAttach)}, {}, [_x]] call EFUNC(interact_menu,createAction);
_action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
};

View File

@ -54,9 +54,20 @@ while {(_closeInMax - _closeInMin) > 0.01} do {
_endPosShifted = _endPosTest vectorAdd _x;
_endASL = if (surfaceIsWater _startingPosShifted) then {_endPosShifted} else {ATLtoASL _endPosShifted};
//Uncomment to see the lazor show, and see how the scanning works:
// drawLine3D [_startingPosShifted, _endPosShifted, [1,0,0,1]];
if (_attachToVehicle in lineIntersectsWith [_startASL, _endASL, _unit]) exitWith {_doesIntersect = true};
#ifdef DRAW_ATTACH_SCAN
[{
params ["_args", "_idPFH"];
_args params ["_startingPosShifted", "_endPosShifted", "_timeAdded"];
drawLine3D [_startingPosShifted, _endPosShifted, [1,0,0,1]];
if (_timeAdded + 5 < CBA_missionTime) then {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
}, 0, [_startingPosShifted, _endPosShifted, CBA_missionTime]] call CBA_fnc_addPerFrameHandler;
#endif
// Default max results is 1, so take only first subarray and select parentObject (object itself or parent of proxy)
private _intersectObject = ((lineIntersectsSurfaces [_startASL, _endASL, _unit]) param [0, objNull]) param [3, objNull];
if (_attachToVehicle == _intersectObject) exitWith {_doesIntersect = true};
} forEach [[0,0,0.045], [0,0,-0.045], [0,0.045,0], [0,-0.045,0], [0.045,0,0], [-0.045,0,0]];
} forEach [[0,0,0], [0,0,0.05], [0,0,-0.05]];

View File

@ -2,6 +2,7 @@
#define COMPONENT_BEAUTIFIED Attach
#include "\z\ace\addons\main\script_mod.hpp"
// #define DRAW_ATTACH_SCAN
// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define ENABLE_PERFORMANCE_COUNTERS

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Attach">
<Key ID="STR_ACE_Attach_AttachDetach">
@ -14,6 +14,8 @@
<Russian>Прикрепить предмет</Russian>
<Japanese>アイテムを取り付ける</Japanese>
<Korean>물건 부착</Korean>
<Chinese>附掛裝備&gt;&gt;</Chinese>
<Chinesesimp>附挂装备&gt;&gt;</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Attach">
<English>Attach</English>
@ -28,6 +30,8 @@
<Russian>Прикрепить</Russian>
<Japanese>取り付ける</Japanese>
<Korean>부착</Korean>
<Chinese>附掛</Chinese>
<Chinesesimp>附挂</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Detach">
<English>Detach item</English>
@ -42,6 +46,8 @@
<Russian>Отсоединить</Russian>
<Japanese>アイテムを外す</Japanese>
<Korean>분리</Korean>
<Chinese>取下裝備</Chinese>
<Chinesesimp>取下装备</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_IrStrobe_Attached">
<English>IR Strobe Attached</English>
@ -56,6 +62,8 @@
<Russian>ИК-маяк прикреплён</Russian>
<Japanese>赤外線ストロボを取り付ける</Japanese>
<Korean>적외선 스트로브 부착됨</Korean>
<Chinese>已附掛紅外線頻閃器</Chinese>
<Chinesesimp>已附挂红外线频闪器</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_IrStrobe_Detached">
<English>IR Strobe Detached</English>
@ -70,6 +78,8 @@
<Russian>ИК-маяк отсоединён</Russian>
<Japanese>赤外線ストロボを外す</Japanese>
<Korean>적외선 스트로브 분리됨</Korean>
<Chinese>已取下紅外線頻閃器</Chinese>
<Chinesesimp>已取下红外线频闪器</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_IrGrenade_Attached">
<English>IR Grenade Attached</English>
@ -84,6 +94,8 @@
<Russian>ИК-граната прикреплена</Russian>
<Japanese>赤外線グレネードを取り付ける</Japanese>
<Korean>적외선 수류탄 부착됨</Korean>
<Chinese>已附掛紅外線手榴彈</Chinese>
<Chinesesimp>已附挂红外线手榴弹</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_IrGrenade_Detached">
<English>IR Grenade Detached</English>
@ -98,6 +110,8 @@
<Russian>ИК-граната отсоединена</Russian>
<Japanese>赤外線グレネードを外す</Japanese>
<Korean>적외선 수류탄 분리됨</Korean>
<Chinese>已取下紅外線手榴彈</Chinese>
<Chinesesimp>已取下红外线手榴弹</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Chemlight_Attached">
<English>Chemlight Attached</English>
@ -112,6 +126,8 @@
<Russian>Химсвет прикреплён</Russian>
<Japanese>ケミライトを取り付け</Japanese>
<Korean>켐라이트 부착됨</Korean>
<Chinese>已附掛螢光棒</Chinese>
<Chinesesimp>已附挂萤光棒</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Chemlight_Detached">
<English>Chemlight Detached</English>
@ -126,6 +142,8 @@
<Russian>Химсвет отсоединён</Russian>
<Japanese>ケミライトを外す</Japanese>
<Korean>켐라이트 분리됨</Korean>
<Chinese>已取下螢光棒</Chinese>
<Chinesesimp>已取下萤光棒</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Inventory_Full">
<English>No inventory space</English>
@ -140,6 +158,8 @@
<Russian>В инвентаре нет места</Russian>
<Japanese>インベントリに空きがない</Japanese>
<Korean>넣을 공간이 없음</Korean>
<Chinese>無可用空間</Chinese>
<Chinesesimp>无可用空间</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_IrStrobe_Name">
<English>IR Strobe</English>
@ -154,6 +174,8 @@
<Russian>ИК-маяк</Russian>
<Japanese>赤外線ストロボ</Japanese>
<Korean>적외선 스트로브</Korean>
<Chinese>紅外線頻閃器</Chinese>
<Chinesesimp>红外线频闪器</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_IrStrobe_Description">
<English>IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs.</English>
@ -168,6 +190,8 @@
<Russian>ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ.</Russian>
<Japanese>赤外線ストロボはあなたの位置を知らせますが、夜間暗視装置を介してでしか見れません。</Japanese>
<Korean>적외선 스트로브는 자신의 위치를 반짝이면서 표시합니다. 이는 야간투시경으로 밖에 보지 못합니다.</Korean>
<Chinese>紅外線閃頻器,藉由紅外線閃頻信號來辨識你的位置,僅能使用夜視系統來辨識紅外線信號</Chinese>
<Chinesesimp>红外线闪频器,藉由红外线闪频信号来辨识你的位置,仅能使用夜视系统来辨识红外线信号</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_PlaceAction">
<English>Place</English>
@ -182,6 +206,8 @@
<Russian>Установить</Russian>
<Japanese>置く</Japanese>
<Korean>두기</Korean>
<Chinese>放置</Chinese>
<Chinesesimp>放置</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_CancelAction">
<English>Cancel</English>
@ -196,6 +222,8 @@
<Russian>Отмена</Russian>
<Japanese>やめる</Japanese>
<Korean>취소</Korean>
<Chinese>取消</Chinese>
<Chinesesimp>取消</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Failed">
<English>Attach Failed</English>
@ -210,6 +238,8 @@
<Italian>Non si attacca</Italian>
<Japanese>取り付けに失敗した</Japanese>
<Korean>부착 실패</Korean>
<Chinese>附掛失敗</Chinese>
<Chinesesimp>附挂失败</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Item_Attached">
<English>%1&lt;br/&gt;Attached</English>
@ -224,6 +254,8 @@
<Russian>%1&lt;br/&gt;присоединен(-а)</Russian>
<Japanese>%1&lt;br/&gt;を取り付けた</Japanese>
<Korean>%1&lt;br/&gt;부착됨</Korean>
<Chinese>%1&lt;br/&gt;已附掛</Chinese>
<Chinesesimp>%1&lt;br/&gt;已附挂</Chinesesimp>
</Key>
<Key ID="STR_ACE_Attach_Item_Detached">
<English>%1&lt;br/&gt;Detached</English>
@ -238,6 +270,8 @@
<Russian>%1&lt;br/&gt;отсоединен(-а)</Russian>
<Japanese>%1&lt;br/&gt;を外した</Japanese>
<Korean>%1&lt;br/&gt;분리됨</Korean>
<Chinese>%1&lt;br/&gt;已取下</Chinese>
<Chinesesimp>%1&lt;br/&gt;已取下</Chinesesimp>
</Key>
</Package>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -18,4 +18,10 @@ class ACE_Settings {
typeName = "BOOL";
value = 1;
};
class GVAR(requireSurrenderAi) {
displayName = CSTRING(ModuleSettings_requireSurrenderAi_name);
description = CSTRING(ModuleSettings_requireSurrenderAi_description);
typeName = "BOOL";
value = 0;
};
};

View File

@ -2,14 +2,13 @@ class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_Actions {
class ACE_ApplyHandcuffs {
displayName = CSTRING(SetCaptive);
selection = "righthand";
distance = 2;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canApplyHandcuffs));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doApplyHandcuffs));
exceptions[] = {};
exceptions[] = {"isNotSwimming", "isNotInside"};
icon = QPATHTOF(UI\handcuff_ca.paa);
};
@ -20,7 +19,7 @@ class CfgVehicles {
distance = 2;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRemoveHandcuffs));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doRemoveHandcuffs));
exceptions[] = {};
exceptions[] = {"isNotSwimming", "isNotInside"};
icon = QPATHTOF(UI\handcuff_ca.paa);
};
class ACE_EscortCaptive {
@ -28,7 +27,7 @@ class CfgVehicles {
distance = 4;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canEscortCaptive));
statement = QUOTE([ARR_3(_player, _target, true)] call FUNC(doEscortCaptive));
exceptions[] = {};
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
icon = QPATHTOF(UI\captive_ca.paa);
priority = 2.3;
@ -38,7 +37,7 @@ class CfgVehicles {
distance = 4;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canStopEscorting));
statement = QUOTE([ARR_3(_player,_target, false)] call FUNC(doEscortCaptive));
exceptions[] = {"isNotEscorting"};
exceptions[] = {"isNotEscorting", "isNotSwimming"};
showDisabled = 0;
icon = QPATHTOF(UI\captive_ca.paa);
priority = 2.3;
@ -48,7 +47,7 @@ class CfgVehicles {
distance = 4;
condition = QUOTE([ARR_3(_player, _target, objNull)] call FUNC(canLoadCaptive));
statement = QUOTE([ARR_3(_player, _target, objNull)] call FUNC(doLoadCaptive));
exceptions[] = {"isNotEscorting"};
exceptions[] = {"isNotEscorting", "isNotSwimming"};
showDisabled = 0;
icon = QPATHTOF(UI\captive_ca.paa);
priority = 2.2;
@ -58,6 +57,7 @@ class CfgVehicles {
distance = 4;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive));
exceptions[] = {"isNotSwimming"};
priority = 1.2;
};
};
@ -68,7 +68,7 @@ class CfgVehicles {
displayName = CSTRING(StopEscorting);
condition = QUOTE([ARR_2(_player, objNull)] call FUNC(canStopEscorting));
statement = QUOTE([ARR_3(_player,objNull, false)] call FUNC(doEscortCaptive));
exceptions[] = {"isNotEscorting"};
exceptions[] = {"isNotEscorting", "isNotSwimming"};
showDisabled = 0;
priority = 2.3;
};
@ -76,7 +76,7 @@ class CfgVehicles {
displayName = CSTRING(StartSurrendering);
condition = QUOTE([ARR_2(_player, true)] call FUNC(canSurrender));
statement = QUOTE([ARR_2(_player, true)] call FUNC(setSurrendered));
exceptions[] = {};
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
priority = 0;
icon = QPATHTOF(UI\Surrender_ca.paa);
@ -85,7 +85,7 @@ class CfgVehicles {
displayName = CSTRING(StopSurrendering);
condition = QUOTE([ARR_2(_player, false)] call FUNC(canSurrender));
statement = QUOTE([ARR_2(_player, false)] call FUNC(setSurrendered));
exceptions[] = {"isNotSurrendering"};
exceptions[] = {"isNotSurrendering", "isNotSwimming"};
showDisabled = 0;
priority = 0;
icon = QPATHTOF(UI\Surrender_ca.paa);
@ -101,7 +101,7 @@ class CfgVehicles {
distance = 4; \
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
exceptions[] = {"isNotEscorting"}; \
exceptions[] = {"isNotEscorting", "isNotSwimming"}; \
priority = 1.2; \
}; \
}; \
@ -222,6 +222,12 @@ class CfgVehicles {
};
};
};
class requireSurrenderAi {
displayName = CSTRING(ModuleSettings_requireSurrenderAi_name);
description = CSTRING(ModuleSettings_requireSurrenderAi_description);
typeName = "BOOL";
defaultValue = 0;
};
};
class ModuleDescription: ModuleDescription {
description = CSTRING(ModuleSettings_Description);

View File

@ -1,6 +1,6 @@
class CfgWeapons {
class ACE_ItemCore;
class InventoryItem_Base_F;
class CBA_MiscItem_ItemInfo;
class ACE_CableTie: ACE_ItemCore {
displayName = CSTRING(CableTie);
@ -8,7 +8,7 @@ class CfgWeapons {
model = QPATHTOF(models\ace_cabletie.p3d);
picture = QPATHTOF(UI\ace_cabletie_ca.paa);
scope = 2;
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
};
};

View File

@ -25,7 +25,7 @@ params ["_unit", "_target"];
{!(_target getVariable [QGVAR(isHandcuffed), false])} &&
{
(_target getVariable ["ACE_isUnconscious", false]) || //isUnconscious
{!([_target] call EFUNC(common,isPlayer))} || //is an AI (not a player)
{!GVAR(requireSurrenderAi) && {!([_target] call EFUNC(common,isPlayer))}} || //is an AI (not a player) and doesn't require surrendering
{GVAR(requireSurrender) == 0} || //or don't require surrendering
{_target getVariable [QGVAR(isSurrendering), false]} || //or is surrendering
{(GVAR(requireSurrender) == 2) && {(currentWeapon _target) == ""}} //or "SurrenderOrNoWeapon" and no weapon

View File

@ -1,13 +1,13 @@
/*
* Author: PabstMirror
* Tests if player can stop escorting
* Tests if player can stop escorting.
*
* Arguments:
* 0: caller (player) <OBJECT>
* 1: target <OBJECT><OPTIONAL>
* 0: Caller (player) <OBJECT>
* 1: Target <OBJECT> (default: objNull)
*
* Return Value:
* The return value <BOOL>
* Can unit stop escorting another unit <BOOL>
*
* Example:
* [player, bob] call ACE_captives_fnc_canStopEscorting

View File

@ -21,3 +21,4 @@ params ["_logic"];
[_logic, QGVAR(allowHandcuffOwnSide), "allowHandcuffOwnSide"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(allowSurrender), "allowSurrender"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(requireSurrender), "requireSurrender"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(requireSurrenderAi), "requireSurrenderAi"] call EFUNC(common,readSettingFromModule);

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Captives">
<Key ID="STR_ACE_Captives_SetCaptive">
@ -14,6 +14,8 @@
<Russian>Взять в плен</Russian>
<Japanese>捕虜にする</Japanese>
<Korean>사로잡기</Korean>
<Chinese>逮捕俘虜</Chinese>
<Chinesesimp>逮捕俘虏</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ReleaseCaptive">
<English>Free Prisoner</English>
@ -28,6 +30,8 @@
<Russian>Освободить пленника</Russian>
<Japanese>捕虜を解放する</Japanese>
<Korean>풀어주기</Korean>
<Chinese>釋放俘虜</Chinese>
<Chinesesimp>释放俘虏</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_EscortCaptive">
<English>Escort Prisoner</English>
@ -42,6 +46,8 @@
<Russian>Конвоировать пленника</Russian>
<Japanese>捕虜を移動させる</Japanese>
<Korean>포로 호송하기</Korean>
<Chinese>護送俘虜</Chinese>
<Chinesesimp>护送俘虏</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_StopEscorting">
<English>Release Prisoner</English>
@ -56,6 +62,8 @@
<Russian>Прекратить конвоирование</Russian>
<Japanese>捕虜を解放する</Japanese>
<Korean>포로 풀어주기</Korean>
<Chinese>停止護送俘虜</Chinese>
<Chinesesimp>停止护送俘虏</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_NoCaptive">
<English>You need to take him as prisoner first!</English>
@ -70,6 +78,8 @@
<Russian>Вы должны сначала взять его в плен!</Russian>
<Japanese>あなたは先に捕虜を取る必要があります。</Japanese>
<Korean>먼저 포로로 만들어야합니다!</Korean>
<Chinese>你必須先逮捕他!</Chinese>
<Chinesesimp>你必须先逮捕他!</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_LoadCaptive">
<English>Load Captive</English>
@ -84,6 +94,8 @@
<Italian>Fai salire il prigioniero</Italian>
<Japanese>捕虜を乗せる</Japanese>
<Korean>포로 태우기</Korean>
<Chinese>將俘虜放入載具</Chinese>
<Chinesesimp>将俘虏放入载具</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_UnloadCaptive">
<English>Unload Captive</English>
@ -98,6 +110,8 @@
<Italian>Fai scendere il prigioniero</Italian>
<Japanese>捕虜を降ろす</Japanese>
<Korean>포로 내리기</Korean>
<Chinese>將俘虜帶出載具</Chinese>
<Chinesesimp>将俘虏带出载具</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_CableTie">
<English>Cable Tie</English>
@ -112,6 +126,8 @@
<Russian>Кабельная стяжка</Russian>
<Japanese>ケーブル タイ</Japanese>
<Korean>케이블 타이</Korean>
<Chinese>束線帶</Chinese>
<Chinesesimp>束线带</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_CableTieDescription">
<English>Cable ties that allow you to restrain prisoners.</English>
@ -126,6 +142,8 @@
<Russian>Кабельные стяжки позволяют связывать пленников.</Russian>
<Japanese>ケーブル タイは捕虜を制圧できます。</Japanese>
<Korean>케이블 타이는 포로를 구류시킬때 씁니다.</Korean>
<Chinese>束線帶可以綁住俘虜</Chinese>
<Chinesesimp>束线带可以绑住俘虏</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_FriskMenuHeader">
<English>Inventory of frisked person</English>
@ -140,6 +158,8 @@
<Italian>Inventario della persona perquisita</Italian>
<Japanese>捕虜の持ち物を確認する</Japanese>
<Korean>검문당한 사람의 소지품</Korean>
<Chinese>搜身選單</Chinese>
<Chinesesimp>搜身选单</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_FriskPerson">
<English>Frisk person</English>
@ -154,6 +174,8 @@
<Italian>Perquisisci la persona</Italian>
<Japanese>捕虜の持ち物</Japanese>
<Korean>검문당한사람</Korean>
<Chinese>搜身</Chinese>
<Chinesesimp>搜身</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_StartSurrendering">
<English>Surrender</English>
@ -168,6 +190,8 @@
<Italian>Arrenditi</Italian>
<Japanese>投降</Japanese>
<Korean>투항</Korean>
<Chinese>投降</Chinese>
<Chinesesimp>投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_StopSurrendering">
<English>Stop Surrendering</English>
@ -182,6 +206,8 @@
<Italian>Smetti di arrenderti</Italian>
<Japanese>投降をやめる</Japanese>
<Korean>투항하는것을 멈춤</Korean>
<Chinese>停止投降</Chinese>
<Chinesesimp>停止投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_DisplayName">
<English>Make Unit Surrender</English>
@ -196,6 +222,8 @@
<Italian>Fai arrendere l'unità</Italian>
<Japanese>ユニットを投降させる</Japanese>
<Korean>투항시키기</Korean>
<Chinese>使單位投降</Chinese>
<Chinesesimp>使单位投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.</English>
@ -210,6 +238,8 @@
<Italian>Sincronizza una unità per farla arrendere.</Italian>
<Japanese>同期されたユニットを投降させます。</Japanese>
<Korean>투항시키기 위해 동기화합니다.</Korean>
<Chinese>同步此模塊到一個單位,使該單位投降</Chinese>
<Chinesesimp>同步此模块到一个单位,使该单位投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_DisplayName">
<English>Make Unit Handcuffed</English>
@ -223,6 +253,8 @@
<French>Rendre une unité captive</French>
<Japanese>ユニットを拘束する</Japanese>
<Korean>수갑을 채우기</Korean>
<Chinese>使單位戴上手銬</Chinese>
<Chinesesimp>使单位戴上手铐</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_Description">
<English>Sync a unit to make them handcuffed.</English>
@ -236,6 +268,8 @@
<French>Synchronisez une unité pour la rendre captive.</French>
<Japanese>同期されたユニットを拘束させます。</Japanese>
<Korean>수갑을 채우기 위해 동기화합니다.</Korean>
<Chinese>使單位戴上手銬</Chinese>
<Chinesesimp>使单位戴上手铐</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
<English>Captives Settings</English>
@ -250,6 +284,8 @@
<Italian>Impostazioni Prigionieri</Italian>
<Japanese>拘束の設定</Japanese>
<Korean>포로 설정</Korean>
<Chinese>俘虜設定</Chinese>
<Chinesesimp>俘虏设定</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_Description">
<English>Controls settings for surrender and cable ties</English>
@ -264,6 +300,8 @@
<Italian>Controlla le impostazioni per la resa e le manette</Italian>
<Japanese>投降したユニットや拘束されたユニットの扱いを設定します。</Japanese>
<Korean>투항과 케이블 타이에 관련한 설정</Korean>
<Chinese>定義投降與束帶等設定</Chinese>
<Chinesesimp>定义投降与束带等设定</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
<English>Can handcuff own side</English>
@ -278,6 +316,8 @@
<Italian>Puoi ammanettare unità alleate</Italian>
<Japanese>自陣営への拘束を可能に</Japanese>
<Korean>자기편에게 수갑을 채울 수 있게 합니다</Korean>
<Chinese>可以銬住同陣營隊友</Chinese>
<Chinesesimp>可以铐住同阵营队友</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
<English>Can players cabletie units on their own side</English>
@ -292,6 +332,8 @@
<Italian>I giocatori possono ammanettare unità alleate</Italian>
<Japanese>プレイヤーがユニットを拘束し、彼らの陣営に変更できます。</Japanese>
<Korean>자기편에게 케이블타이를 사용할 수 있게합니다</Korean>
<Chinese>玩家可以使用束線帶銬住同陣營隊友</Chinese>
<Chinesesimp>玩家可以使用束线带铐住同阵营队友</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
<English>Allow surrendering</English>
@ -306,6 +348,8 @@
<Italian>Permetti Resa</Italian>
<Japanese>投降を許可</Japanese>
<Korean>투항 활성화</Korean>
<Chinese>允許投降</Chinese>
<Chinesesimp>允许投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
<English>Players can surrender after holstering their weapon</English>
@ -320,6 +364,8 @@
<Italian>I giocatori possono arrendersi dopo aver messo via le proprie armi</Italian>
<Japanese>プレイヤーは武器を収めたあとに投降できるようにします。</Japanese>
<Korean>비무장한 플레이어가 투항할 수 있게 합니다</Korean>
<Chinese>玩家能在收起自己武器後投降</Chinese>
<Chinesesimp>玩家能在收起自己武器后投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_name">
<English>Require surrendering</English>
@ -333,6 +379,8 @@
<French>Requiert la reddition</French>
<Japanese>投降を必要とする</Japanese>
<Korean>투항 필요</Korean>
<Chinese>要求目標投降</Chinese>
<Chinesesimp>要求目标投降</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
<English>Require Players to surrender before they can be arrested</English>
@ -346,6 +394,8 @@
<French>Requiert la capitulation des joueurs avant qu'ils ne puissent être arrêtés</French>
<Japanese>プレイヤーは拘束される前に、投降する必要があります。</Japanese>
<Korean>체포하기 전에 플레이어가 투항을 먼저해야만 합니다</Korean>
<Chinese>玩家須先要求目標投降,才可以進行逮捕</Chinese>
<Chinesesimp>玩家须先要求目标投降,才可以进行逮捕</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOnly">
<English>Surrendering only</English>
@ -359,6 +409,8 @@
<French>Reddition seulement</French>
<Japanese>投降中のみ</Japanese>
<Korean>투항 중에만</Korean>
<Chinese>只能在投降狀態</Chinese>
<Chinesesimp>只能在投降状态</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
<English>Surrendering or No weapon</English>
@ -372,6 +424,20 @@
<French>Capitulation ou desarmé</French>
<Japanese>投降中か非武装時</Japanese>
<Korean>투항 중 혹은 비무장</Korean>
<Chinese>投降或無武器狀態</Chinese>
<Chinesesimp>投降或无武器状态</Chinesesimp>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrenderAi_name">
<English>Require AI surrendering</English>
<German>Benötigt AI Kapitulation</German>
<Italian>Necessita arresa AI</Italian>
<Japanese>AI の投降を必要とする</Japanese>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrenderAi_description">
<English>Require AI to surrender before they can be arrested</English>
<German>AI muss sich erst ergeben, bevor sie gefangen genommen werden kann</German>
<Italian>Necessita che le AI si arrendano prima di essere arrestate</Italian>
<Japanese>AI の拘束は AI が投降している場合に限り可能にします。</Japanese>
</Key>
</Package>
</Project>

View File

@ -286,11 +286,19 @@ class CfgVehicles {
GVAR(hasCargo) = 1;
};
// autonomus
// autonomous
class UAV_01_base_F: Helicopter_Base_F {
GVAR(space) = 0;
GVAR(hasCargo) = 0;
};
class UAV_03_base_F: Helicopter_Base_F {
GVAR(space) = 0;
GVAR(hasCargo) = 0;
};
class UAV_06_base_F: Helicopter_Base_F {
GVAR(space) = 0;
GVAR(hasCargo) = 0;
};
// boats
class Ship;
@ -327,26 +335,6 @@ class CfgVehicles {
GVAR(canLoad) = 1;
};
// Taru pods
class Pod_Heli_Transport_04_base_F;
class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F {
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
class Land_Pod_Heli_Transport_04_box_F: Pod_Heli_Transport_04_base_F {
GVAR(space) = 20;
GVAR(hasCargo) = 1;
};
class Land_Pod_Heli_Transport_04_repair_F: Pod_Heli_Transport_04_base_F {
GVAR(space) = 12;
GVAR(hasCargo) = 1;
};
class Pod_Heli_Transport_04_crewed_base_F;
class Land_Pod_Heli_Transport_04_medevac_F: Pod_Heli_Transport_04_crewed_base_F {
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
class StaticMortar;
class Mortar_01_base_F: StaticMortar {
GVAR(size) = 2; // 1 = small, 2 = large
@ -375,8 +363,57 @@ class CfgVehicles {
class CargoNet_01_base_F: Slingload_base_F { //Slingload pallets
GVAR(size) = 6;
};
class Slingload_01_Base_F: Slingload_base_F { //Huron 20ft containers
//Huron 20ft containers
class Slingload_01_Base_F: Slingload_base_F {
GVAR(canLoad) = 0;
GVAR(size) = -1;
};
class B_Slingload_01_Cargo_F: Slingload_01_Base_F { // Huron Cargo
GVAR(space) = 20;
GVAR(hasCargo) = 1;
};
class B_Slingload_01_Ammo_F: Slingload_01_Base_F { // Huron Ammo
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
class B_Slingload_01_Medevac_F: Slingload_01_Base_F { // Huron Medevac
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
class B_Slingload_01_Repair_F: Slingload_01_Base_F { // Huron Repair
GVAR(space) = 12;
GVAR(hasCargo) = 1;
};
// Taru pods
class Pod_Heli_Transport_04_base_F: Slingload_base_F {
GVAR(canLoad) = 0;
GVAR(size) = -1;
};
class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F {
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
class Land_Pod_Heli_Transport_04_box_F: Pod_Heli_Transport_04_base_F {
GVAR(space) = 20;
GVAR(hasCargo) = 1;
};
class Land_Pod_Heli_Transport_04_repair_F: Pod_Heli_Transport_04_base_F {
GVAR(space) = 12;
GVAR(hasCargo) = 1;
};
class Pod_Heli_Transport_04_crewed_base_F: StaticWeapon {
GVAR(canLoad) = 0;
GVAR(size) = -1;
};
class Land_Pod_Heli_Transport_04_covered_F: Pod_Heli_Transport_04_crewed_base_F {
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
class Land_Pod_Heli_Transport_04_medevac_F: Pod_Heli_Transport_04_crewed_base_F {
GVAR(space) = 8;
GVAR(hasCargo) = 1;
};
//Plastic and metal case
@ -395,7 +432,14 @@ class CfgVehicles {
GVAR(size) = 2; // 1 = small, 2 = large
};
// Fuel Canister (ace_refuel)
class Land_CanisterFuel_F: Items_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
};
// objects
class Lamps_base_F;
class RoadCone_F: ThingX {
GVAR(size) = 1;
GVAR(canLoad) = 1;
@ -403,7 +447,11 @@ class CfgVehicles {
class RoadBarrier_F: RoadCone_F {
GVAR(size) = 2;
};
class Land_PortableLight_single_F: Lamps_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
};
class Scrapyard_base_F;
class Land_PaperBox_closed_F: Scrapyard_base_F {
class EventHandlers {
@ -713,7 +761,7 @@ class CfgVehicles {
GVAR(size) = 100;
};
// small
// Small
class Land_CargoBox_V1_F: ThingX {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
@ -734,10 +782,55 @@ class CfgVehicles {
};
};
};
class Lamps_base_F;
class Land_PortableLight_single_F: Lamps_base_F {
class Land_PaperBox_01_small_closed_base_F: Items_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
maximumLoad = 1000;
transportMaxBackpacks = 12;
transportMaxMagazines = 64;
transportMaxWeapons = 12;
};
class Box_UAV_06_base_F: Items_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
};
// Aid items
class Land_FoodSack_01_full_base_F: Items_base_F {
GVAR(size) = 1;
GVAR(canLoad) = 1;
};
class Land_FoodSack_01_cargo_base_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
class Land_FoodSack_01_large_base_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
class Land_FoodSack_01_small_base_F: Items_base_F {
GVAR(size) = 2;
GVAR(canLoad) = 1;
};
class Land_PaperBox_01_open_boxes_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
class Land_PaperBox_01_open_water_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
class Land_PaperBox_01_open_empty_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
class Land_PaperBox_01_small_stacked_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
class Land_WaterBottle_01_stack_F: Items_base_F {
GVAR(size) = 7;
GVAR(canLoad) = 1;
};
};

Binary file not shown.

View File

@ -14,6 +14,7 @@ PREP(moduleMakeLoadable);
PREP(moduleSettings);
PREP(onMenuOpen);
PREP(paradropItem);
PREP(removeCargoItem);
PREP(setSize);
PREP(setSpace);
PREP(startLoadIn);

View File

@ -50,6 +50,11 @@
_item hideObjectGlobal false;
_item setPosASL (AGLtoASL _emptyPosAGL);
if ((getText (configFile >> "CfgVehicles" >> (typeOf _item) >> "simulation")) == "carx") then {
TRACE_1("re-enabling car damage",_item);
[_item, "blockDamage", "ACE_cargo", false] call EFUNC(common,statusEffect_set);
};
}] call CBA_fnc_addEventHandler;
// Private events to handle adding actions globally via public functions

View File

@ -8,5 +8,6 @@ PREP_RECOMPILE_END;
GVAR(initializedItemClasses) = [];
GVAR(initializedVehicleClasses) = [];
GVAR(cargoHolderTypes) = ["Car", "Air", "Tank", "Ship", "Cargo_base_F", "Land_PaperBox_closed_F"];
ADDON = true;

View File

@ -40,6 +40,6 @@ private _actions = [];
private _action = [format ["%1", _x], _name, _icon, _statement, {true}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
} forEach (nearestObjects [_player, CARGO_VEHICLE_CLASSES, MAX_LOAD_DISTANCE]);
} forEach (nearestObjects [_player, GVAR(cargoHolderTypes), MAX_LOAD_DISTANCE]);
_actions

View File

@ -5,7 +5,7 @@
* Arguments:
* 0: loaded Object <OBJECT>
* 1: Object <OBJECT>
* 2: Unloader (player) <OPTIONAL><OBJECT>
* 2: Unloader (player) <OBJECT> (default: objNull)
*
* Return Value:
* Can be unloaded <BOOL>

View File

@ -21,10 +21,13 @@ TRACE_2("params",_object,_type);
// If object had size given to it via eden/public then override config canLoad setting
private _canLoadPublic = _object getVariable [QGVAR(canLoad), false];
if (!(_canLoadPublic isEqualType false)) then {
WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_object,_type,QGVAR(canLoad),_canLoadPublic);
};
private _canLoadConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad)) == 1;
// Nothing to do here if object can't be loaded
if !(_canLoadConfig || _canLoadPublic) exitWith {};
if !(_canLoadConfig || {_canLoadPublic in [true, 1]}) exitWith {};
// Servers and HCs do not require action menus (beyond this point)
if !(hasInterface) exitWith {};
@ -47,7 +50,7 @@ if (_canLoadConfig) then {
private _condition = {
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
GVAR(enable) &&
{(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad)) == 1])} &&
{(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad))]) in [true, 1]} &&
{locked _target < 2} &&
{alive _target} &&
{[_player, _target, []] call EFUNC(common,canInteractWith)} &&
@ -56,14 +59,14 @@ private _condition = {
private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false];
private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) == 1;
(_hasCargoPublic || _hasCargoConfig) && {_x != _target}
} count (nearestObjects [_player, CARGO_VEHICLE_CLASSES, MAX_LOAD_DISTANCE])}
} count (nearestObjects [_player, GVAR(cargoHolderTypes), MAX_LOAD_DISTANCE])}
};
private _statement = {
params ["_target", "_player"];
[_player, _target] call FUNC(startLoadIn);
};
private _text = localize LSTRING(loadObject);
private _icon = QPATHTOF(UI\Icon_load.paa);
private _icon = "a3\ui_f\data\IGUI\Cfg\Actions\loadVehicle_ca.paa";
private _action = [QGVAR(load), _text, _icon, _statement, _condition, {call FUNC(addCargoVehiclesActions)}] call EFUNC(interact_menu,createAction);
if (_canLoadConfig) then {

View File

@ -27,6 +27,16 @@ private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGV
// Nothing to do here if vehicle has no cargo space
if !(_hasCargoConfig || _hasCargoPublic) exitWith {};
// Check if cargo is in cargo holder types (checked when trying to search for loadable objects)
private _addCargoType = true;
{
if (_type isKindOf _x) exitWith {_addCargoType = false};
} forEach GVAR(cargoHolderTypes);
TRACE_2("",_addCargoType,_type);
if (_addCargoType) then {
GVAR(cargoHolderTypes) pushBack _type;
};
// Vehicle can have default ace cargo in its config
if (isServer) then {
{

View File

@ -36,6 +36,12 @@ if (_item isEqualType objNull) then {
detach _item;
_item attachTo [_vehicle,[0,0,-100]];
[QEGVAR(common,hideObjectGlobal), [_item, true]] call CBA_fnc_serverEvent;
// Cars below water will take engine damage over time and eventualy become "water logged" and unfixable (because of negative z attach)
if ((getText (configFile >> "CfgVehicles" >> (typeOf _item) >> "simulation")) == "carx") then {
TRACE_1("disabling car damage",_item);
[_item, "blockDamage", "ACE_cargo", true] call EFUNC(common,statusEffect_set);
};
};
true

View File

@ -0,0 +1,70 @@
/*
* Author: 654wak654
* Removes a cargo item from the vehicle.
*
* Arguments:
* 0: Item <STRING> or <OBJECT>
* 1: Vehicle <OBJECT>
* 2: Amount <NUMBER> (default: 1)
*
* Return Value:
* Number of items removed <NUMBER>
*
* Example:
* ["ACE_Wheel", vehicle, 2] call ace_cargo_fnc_removeCargoItem
* [crate_7, truck] call ace_cargo_fnc_removeCargoItem
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_item", "_vehicle", ["_amount", 1]];
TRACE_3("params",_item,_vehicle,_amount);
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
private _addedSpace = 0;
private _itemClass = _item;
private _itemsRemoved = 0;
private _continue = if (_item isEqualType objNull) then {
if !(_item in _loaded) exitWith {false};
_addedSpace = [_item] call FUNC(getSizeItem);
_loaded deleteAt (_loaded find _item);
_itemClass = typeOf _item;
deleteVehicle _item;
_itemsRemoved = 1;
true
} else {
{
if (_itemsRemoved == _amount) exitWith {};
if (
(_x isEqualType "" && {_x == _item}) || // Check for classname, case-insensitive
{_x isEqualType objNull && {typeOf _x isEqualTo _item}}
) then {
INC(_itemsRemoved);
ADD(_addedSpace,[_x] call FUNC(getSizeItem));
if (_x isEqualType objNull) then {
deleteVehicle _x;
};
_loaded set [_forEachIndex, nil];
};
} forEach _loaded;
FILTER(_loaded,_x != nil);
true
};
if (!_continue) exitWith {0};
_vehicle setVariable [QGVAR(loaded), _loaded, true];
private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
_vehicle setVariable [QGVAR(space), _space + _addedSpace, true];
// Invoke listenable event
["ace_cargoRemoved", [_itemClass, _vehicle, _amount, _itemsRemoved]] call CBA_fnc_globalEvent;
_itemsRemoved

View File

@ -50,6 +50,7 @@ private _jipID = _object getVariable QGVAR(setSize_jipID);
// Actions should be added to all future JIP players too
if (isNil "_jipID") then {
_jipID = [QGVAR(initObject), [_object]] call CBA_fnc_globalEventJIP;
[_jipID, _object] call CBA_fnc_removeGlobalEventJIP;
// Store the ID for any future calls to this function
_object setVariable [QGVAR(setSize_jipID), _jipID, true];

View File

@ -49,6 +49,7 @@ private _jipID = _vehicle getVariable QGVAR(setSpace_jipID);
// Cargo menu should be added to all future JIP players too
if (isNil "_jipID") then {
_jipID = [QGVAR(initVehicle), [_vehicle]] call CBA_fnc_globalEventJIP;
[_jipID, _vehicle] call CBA_fnc_removeGlobalEventJIP;
// Store the ID for any future calls to this function
_vehicle setVariable [QGVAR(setSpace_jipID), _jipID, true];

View File

@ -24,7 +24,7 @@ private _vehicle = _cargoVehicle;
if (isNull _vehicle) then {
{
if ([_object, _x] call FUNC(canLoadItemIn)) exitWith {_vehicle = _x};
} forEach (nearestObjects [_player, CARGO_VEHICLE_CLASSES, MAX_LOAD_DISTANCE]);
} forEach (nearestObjects [_player, GVAR(cargoHolderTypes), MAX_LOAD_DISTANCE]);
};
if (isNull _vehicle) exitWith {

View File

@ -18,8 +18,6 @@
#define MAX_LOAD_DISTANCE 10
#define CARGO_VEHICLE_CLASSES ["Car", "Air", "Tank", "Ship", "Cargo_base_F", "Land_PaperBox_closed_F"]
#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default})
// Default cargo size is -1 as 0 is a valid size

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Cargo">
<Key ID="STR_ACE_Cargo_loadObject">
@ -13,6 +13,8 @@
<French>Charger</French>
<Japanese>積み込む</Japanese>
<Korean>싣기</Korean>
<Chinese>裝載</Chinese>
<Chinesesimp>装载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_unloadObject">
<English>Unload</English>
@ -26,6 +28,8 @@
<French>Décharger</French>
<Japanese>下ろす</Japanese>
<Korean>내리기</Korean>
<Chinese>卸載</Chinese>
<Chinesesimp>卸载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_openMenu">
<English>Cargo</English>
@ -39,6 +43,8 @@
<French>Cargaison</French>
<Japanese>カーゴ</Japanese>
<Korean>화물</Korean>
<Chinese>貨物</Chinese>
<Chinesesimp>货物</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_cargoMenu">
<English>Cargo Menu</English>
@ -52,6 +58,8 @@
<French>Menu de cargaison</French>
<Japanese>カーゴ メニュー</Japanese>
<Korean>화물 메뉴</Korean>
<Chinese>貨物選單</Chinese>
<Chinesesimp>货物选单</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_labelSpace">
<English>Cargo space left: %1</English>
@ -65,6 +73,8 @@
<French>Espace de cargaison restant : %1</French>
<Japanese>カーゴの空き容量: %1</Japanese>
<Korean>선적 공간 남음: %1</Korean>
<Chinese>貨物剩餘空間: %1</Chinese>
<Chinesesimp>货物剩余空间: %1</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable">
<English>Enable Cargo</English>
@ -78,6 +88,8 @@
<French>Activer la mise en cargaison</French>
<Japanese>カーゴを有効化</Japanese>
<Korean>화물 활성화</Korean>
<Chinese>啟用貨物裝載</Chinese>
<Chinesesimp>启用货物装载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable_Description">
<English>Enable the load in cargo module</English>
@ -91,6 +103,8 @@
<French>Active le chargement de cargaison dans un vehicule</French>
<Japanese>カーゴ モジュールで積み込みを有効化</Japanese>
<Korean>화물 모듈에 싣기를 활성화합니다</Korean>
<Chinese>啟用貨物裝載功能</Chinese>
<Chinesesimp>启用货物装载功能</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_SettingsModule_DisplayName">
<English>Cargo Settings</English>
@ -104,6 +118,8 @@
<French>Paramètres de cargaison</French>
<Japanese>カーゴ設定</Japanese>
<Korean>화물 설정</Korean>
<Chinese>貨物設定</Chinese>
<Chinesesimp>货物设定</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_SettingsModule_Description">
<English>Configure the cargo module settings</English>
@ -117,6 +133,8 @@
<French>Configure les paramètres du module de cargaison</French>
<Japanese>カーゴ モジュールの設定を構成</Japanese>
<Korean>화물 모듈의 환경 설정을 바꿉니다</Korean>
<Chinese>配置貨物模塊設定</Chinese>
<Chinesesimp>配置货物模块设定</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_LoadedItem">
<English>%1&lt;br/&gt;loaded into&lt;br/&gt;%2</English>
@ -131,6 +149,8 @@
<Russian>%1&lt;br/&gt;загружен в&lt;br/&gt;%2</Russian>
<Japanese>%1&lt;br/&gt;&lt;br/&gt;%2へ積み込まれた</Japanese>
<Korean>%1&lt;br/&gt;&lt;br/&gt;%2 에 실림</Korean>
<Chinese>%1&lt;br/&gt;裝載至&lt;br/&gt;%2</Chinese>
<Chinesesimp>%1&lt;br/&gt;装载至&lt;br/&gt;%2</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_UnloadedItem">
<English>Unloaded&lt;br/&gt;%1 from&lt;br/&gt;%2</English>
@ -145,6 +165,8 @@
<Russian>%1&lt;br/&gt;разгружен из&lt;br/&gt;%2</Russian>
<Japanese>&lt;br/&gt;%1が&lt;br/&gt;%2から降ろされた</Japanese>
<Korean>%1&lt;br/&gt;&lt;br/&gt;%2 에서 내려짐</Korean>
<Chinese>&lt;br/&gt;%2卸載&lt;br/&gt;%1</Chinese>
<Chinesesimp>&lt;br/&gt;%2卸载&lt;br/&gt;%1</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_LoadingItem">
<English>Loading Cargo</English>
@ -158,6 +180,8 @@
<French>Chargement de la cargaison</French>
<Japanese>カーゴへ積み込んでいる</Japanese>
<Korean>화물 싣기</Korean>
<Chinese>裝載貨物中</Chinese>
<Chinesesimp>装载货物中</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingItem">
<English>Unloading Cargo</English>
@ -171,6 +195,8 @@
<French>Déchargement de la cargaison</French>
<Japanese>カーゴから降ろしている</Japanese>
<Korean>화물 내리기</Korean>
<Chinese>卸載貨物中</Chinese>
<Chinesesimp>卸载货物中</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_LoadingFailed">
<English>%1&lt;br/&gt;could not be loaded</English>
@ -184,6 +210,8 @@
<French>%1&lt;br /&gt; n'a pas pu être chargé</French>
<Japanese>%1&lt;br/&gt;は積み込めなかった</Japanese>
<Korean>%1&lt;br/&gt;이 실릴 수가 없습니다</Korean>
<Chinese>%1&lt;br/&gt;無法被裝載</Chinese>
<Chinesesimp>%1&lt;br/&gt;无法被装载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingFailed">
<English>%1&lt;br/&gt;could not be unloaded</English>
@ -197,6 +225,8 @@
<French>%1&lt;br /&gt; n'a pas pu être déchargé</French>
<Japanese>%1&lt;br/&gt;は降ろせなかった</Japanese>
<Korean>%1&lt;br/&gt;이 내려질 수가 없습니다</Korean>
<Chinese>%1&lt;br/&gt;無法被卸載</Chinese>
<Chinesesimp>%1&lt;br/&gt;无法被卸载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_displayName">
<English>Make Object Loadable</English>
@ -210,6 +240,8 @@
<Russian>Сделать объект загружаемым</Russian>
<Japanese>オブジェクトを積載可能に</Japanese>
<Korean>물체를 화물화시키기</Korean>
<Chinese>使物件可裝載</Chinese>
<Chinesesimp>使物件可装载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_description">
<English>Sets the synced object as loadable by the cargo system.</English>
@ -223,6 +255,8 @@
<Russian>Делает синхронизированный объект загружаемым для модуля перевозки грузов.</Russian>
<Japanese>オブジェクトを同期させると、カーゴ システムによる積載が可能になります。</Japanese>
<Korean>물체를 화물 시스템과 동기화시켜 실을 수 있게 합니다</Korean>
<Chinese>使用同步線來使該物件可被裝載.</Chinese>
<Chinesesimp>使用同步线来使该物件可被装载.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_setSize_displayName">
<English>Object's Size</English>
@ -236,22 +270,40 @@
<Russian>Размер объекта</Russian>
<Japanese>オブジェクトの大きさ</Japanese>
<Korean>물체 크기</Korean>
<Chinese>物件的大小</Chinese>
<Chinesesimp>物件的大小</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_space_edenName">
<English>Cargo Space</English>
<Italian>Spazio Cargo</Italian>
<Japanese>カーゴ スペース</Japanese>
<Chinese>貨物空間</Chinese>
<Chinesesimp>货物空间</Chinesesimp>
<Polish>Przestrzeń ładunkowa</Polish>
</Key>
<Key ID="STR_ACE_Cargo_space_edenDesc">
<English>The cargo space available in this vehicle/container</English>
<Italian>Lo spazio disponibile in questo veicolo/container</Italian>
<Japanese>この車両/コンテナでカーゴ スペースを使えるようにします</Japanese>
<Chinese>設定此載具/集裝箱可裝載多少貨物</Chinese>
<Chinesesimp>设定此载具/集装箱可装载多少货物</Chinesesimp>
<Polish>Dostępna przestrzeń ładunkowa w tym pojeździe/kontenerze</Polish>
</Key>
<Key ID="STR_ACE_Cargo_size_edenName">
<English>Cargo Size</English>
<Italian>Dimensioni Cargo</Italian>
<Japanese>カーゴ サイズ</Japanese>
<Chinese>貨物的大小</Chinese>
<Chinesesimp>货物的大小</Chinesesimp>
<Polish>Wielkość ładunku</Polish>
</Key>
<Key ID="STR_ACE_Cargo_size_edenDesc">
<English>The cargo space required to hold this object (-1 for unloadable)</English>
<Italian>Lo spazio del cargo necessita di mantenere questo oggetto (-1 per scaricabile)</Italian>
<Japanese>このオブジェクトを積載するのに必要なカーゴ スペース (-1 で積載不可)</Japanese>
<Chinese>此貨物會佔掉多少空間(設定-1的話此貨物就不能被裝載)</Chinese>
<Chinesesimp>此货物会占掉多少空间(设定-1的话此货物就不能被装载)</Chinesesimp>
<Polish>Wymagana przestrzeń ładunkowa dla tego obiektu (-1 dla niemożliwych do załadowania)</Polish>
</Key>
<Key ID="STR_ACE_Cargo_paradropButton">
<English>Airdrop</English>
@ -261,6 +313,8 @@
<Korean>공중 투하</Korean>
<French>Largage aérien</French>
<Italian>Lancio Aereo</Italian>
<Chinese>空投</Chinese>
<Chinesesimp>空投</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_unlevelFlightWarning">
<English>Unlevel Flight</English>
@ -270,18 +324,26 @@
<Korean>기체가 수평이 아닙니다</Korean>
<French>Rétablir l'assiette</French>
<Italian>Volo non Livellato</Italian>
<Chinese>此架飛機並無保持水平飛行</Chinese>
<Chinesesimp>此架飞机并无保持水平飞行</Chinesesimp>
</Key>
<Key ID="STR_ACE_Cargo_paradropTimeCoefficent">
<English>Paradrop Time Coffecient</English>
<Japanese>空中投下までの時間係数</Japanese>
<Italian>Coefficente Tempo Lancio Paracadute</Italian>
<French>Coefficient Temps de largage de cargaison</French>
<Chinese>空投時間係數</Chinese>
<Chinesesimp>空投时间系数</Chinesesimp>
<Polish>Współczynnik czasu zrzutu</Polish>
</Key>
<Key ID="STR_ACE_Cargo_paradropTimeCoefficent_description">
<English>Modifier for how long it takes to paradrop a cargo item.</English>
<Japanese>カーゴ アイテムを空中投下するまでの時間を変更します。</Japanese>
<Italian>Modificato per quanto tempo ci impiega a paracadutare un oggetto cargo.</Italian>
<French>Modifier le temps qu'il faut pour larguer la cargaison.</French>
<Chinese>設定空投所需消耗的時間.</Chinese>
<Chinesesimp>设定空投所需消耗的时间.</Chinesesimp>
<Polish>Modyfikator wskazujący jak dużo czasu potrzeba by zrzucić przedmiot na spadochronie.</Polish>
</Key>
</Package>
</Project>

View File

@ -12,7 +12,7 @@ class CfgVehicles {
icon = "\a3\ui_f\data\gui\cfg\Hints\chemlights_ca.paa";
condition = QUOTE(count ([ACE_player] call FUNC(getShieldComponents)) > 0);
statement = "true";
exceptions[] = {"isNotDragging", "notOnMap", "isNotInside", "isNotSitting"};
exceptions[] = {"isNotDragging", "isNotSwimming", "notOnMap", "isNotInside", "isNotSitting"};
insertChildren = QUOTE(_this call DFUNC(compileChemlightMenu));
showDisabled = 0;
priority = 99;
@ -20,10 +20,10 @@ class CfgVehicles {
};
};
};
class Thing;
class ThingX;
class ACE_Chemlight_IR_Marker: Thing {
author = ECSTRING(common,ACETeam);
displayName = "ACE Chemlight IR Marker";
@ -49,7 +49,7 @@ class CfgVehicles {
useFlare = 0;
};
};
class ACE_Chemlight_IR_Dummy: ThingX {
ACE_Attachable = "ACE_G_Chemlight_IR";
author = ECSTRING(common,ACETeam);
@ -62,7 +62,7 @@ class CfgVehicles {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
};
class Item_Base_F;
class ACE_Item_Chemlight_Shield: Item_Base_F {
@ -78,7 +78,7 @@ class CfgVehicles {
};
};
};
class ACE_Item_Chemlight_Shield_Green: Item_Base_F {
scope = 2;
scopeCurator = 2;
@ -92,7 +92,7 @@ class CfgVehicles {
};
};
};
class ACE_Item_Chemlight_Shield_Red: ACE_Item_Chemlight_Shield_Green {
displayName = CSTRING(Shield_Red_DisplayName);
class TransportItems {
@ -102,7 +102,7 @@ class CfgVehicles {
};
};
};
class ACE_Item_Chemlight_Shield_Blue: ACE_Item_Chemlight_Shield_Green {
displayName = CSTRING(Shield_Blue_DisplayName);
class TransportItems {
@ -112,7 +112,7 @@ class CfgVehicles {
};
};
};
class ACE_Item_Chemlight_Shield_Yellow: ACE_Item_Chemlight_Shield_Green {
displayName = CSTRING(Shield_Yellow_DisplayName);
class TransportItems {
@ -122,7 +122,7 @@ class CfgVehicles {
};
};
};
class ACE_Item_Chemlight_Shield_Orange: ACE_Item_Chemlight_Shield_Green {
displayName = CSTRING(Shield_Orange_DisplayName);
class TransportItems {
@ -132,7 +132,7 @@ class CfgVehicles {
};
};
};
class ACE_Item_Chemlight_Shield_White: ACE_Item_Chemlight_Shield_Green {
displayName = CSTRING(Shield_White_DisplayName);
class TransportItems {
@ -154,13 +154,13 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class Box_NATO_Support_F: NATO_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class B_supplyCrate_F: ReammoBox_F {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
@ -172,13 +172,13 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class Box_East_Support_F: EAST_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class O_supplyCrate_F: B_supplyCrate_F {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
@ -190,13 +190,13 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class Box_IND_Support_F: IND_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class I_supplyCrate_F: B_supplyCrate_F {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
@ -208,19 +208,19 @@ class CfgVehicles {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class IG_supplyCrate_F: ReammoBox_F {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class C_supplyCrate_F: ReammoBox_F {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
};
};
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,12);
@ -235,7 +235,7 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_Chemlight_IR,20);
};
};
class ACE_Box_Chemlights: NATO_Box_Base {
scope = 2;
accuracy = 1;
@ -246,11 +246,11 @@ class CfgVehicles {
transportMaxItems = 9002;
maximumload = 9002;
model = "\A3\weapons_F\AmmoBoxes\WpnsBox_large_F";
class TransportItems {
MACRO_ADDITEM(ACE_Chemlight_Shield,20);
};
class TransportMagazines {
MACRO_ADDMAGAZINE(Chemlight_red,20);
MACRO_ADDMAGAZINE(Chemlight_blue,20);
@ -264,7 +264,7 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_Chemlight_HiWhite,10);
MACRO_ADDMAGAZINE(ACE_Chemlight_IR,20);
};
class AnimationSources {
class Ammo_source {
source = "user";

View File

@ -36,7 +36,7 @@ class CfgWeapons {
};
class ACE_ItemCore;
class InventoryItem_Base_F;
class CBA_MiscItem_ItemInfo;
class ACE_Chemlight_Shield: ACE_ItemCore {
author = ECSTRING(common,ACETeam);
@ -45,7 +45,7 @@ class CfgWeapons {
model = "\A3\weapons_F\ammo\mag_univ.p3d";
picture = QPATHTOF(UI\ace_chemlight_shield_x_ca.paa);
scope = 2;
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
};
};
@ -58,7 +58,7 @@ class CfgWeapons {
model = "\A3\weapons_F\ammo\mag_univ.p3d";
picture = QPATHTOF(UI\ace_chemlight_shield_green_x_ca.paa);
scope = 1;
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
class FlashLight {
ACE_Flashlight_Colour = "green";
@ -73,7 +73,7 @@ class CfgWeapons {
displayName = CSTRING(Shield_Red_DisplayName);
descriptionShort = CSTRING(Shield_Red_DescriptionShort);
picture = QPATHTOF(UI\ace_chemlight_shield_red_x_ca.paa);
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
class FlashLight {
ACE_Flashlight_Colour = "red";
@ -88,7 +88,7 @@ class CfgWeapons {
displayName = CSTRING(Shield_Blue_DisplayName);
descriptionShort = CSTRING(Shield_Blue_DescriptionShort);
picture = QPATHTOF(UI\ace_chemlight_shield_blue_x_ca.paa);
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
class FlashLight {
ACE_Flashlight_Colour = "blue";
@ -103,7 +103,7 @@ class CfgWeapons {
displayName = CSTRING(Shield_Yellow_DisplayName);
descriptionShort = CSTRING(Shield_Yellow_DescriptionShort);
picture = QPATHTOF(UI\ace_chemlight_shield_yellow_x_ca.paa);
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
class FlashLight {
ACE_Flashlight_Colour = "yellow";
@ -118,7 +118,7 @@ class CfgWeapons {
displayName = CSTRING(Shield_Orange_DisplayName);
descriptionShort = CSTRING(Shield_Orange_DescriptionShort);
picture = QPATHTOF(UI\ace_chemlight_shield_orange_x_ca.paa);
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
class FlashLight {
ACE_Flashlight_Colour = "orange";
@ -133,7 +133,7 @@ class CfgWeapons {
displayName = CSTRING(Shield_White_DisplayName);
descriptionShort = CSTRING(Shield_White_DescriptionShort);
picture = QPATHTOF(UI\ace_chemlight_shield_white_x_ca.paa);
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
class FlashLight {
ACE_Flashlight_Colour = "white";

View File

@ -5,13 +5,13 @@
* Arguments:
* 0: Original throw projectile <OBJECT>
* 1: Class of projectile <STRING>
* 2: Adv throw (default: false) <BOOL><OPTIONAL>
* 2: Adv throw <BOOL> (default: false)
*
* Return Value:
* None
*
* Example:
* [_projectile, _ammoType] call ace_chemlights_fnc_throwIR;
* [_projectile, _ammoType] call ace_chemlights_fnc_throwIR
*
* Public: No
*/

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Chemlights">
<Key ID="STR_ACE_Chemlights_Action_Chemlights">
@ -9,6 +9,8 @@
<Korean>켐라이트</Korean>
<French>Cyalumes</French>
<Italian>Luce chimica</Italian>
<Chinese>螢光棒</Chinese>
<Chinesesimp>萤光棒</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Action_Prepare">
<English>Prepare %1</English>
@ -18,6 +20,8 @@
<Korean>%1 준비</Korean>
<French>Prépare %1</French>
<Italian>Prepara %1</Italian>
<Chinese>使用%1</Chinese>
<Chinesesimp>使用%1</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Action_Prepare_Done">
<English>%1&lt;br/&gt;Prepared</English>
@ -27,6 +31,8 @@
<Korean>%1&lt;br/&gt;준비됨</Korean>
<French>%1&lt;br/&gt;prêt</French>
<Italian>%1 &lt;br/&gt; Preparata</Italian>
<Chinese>%1&lt;br/&gt;已使用</Chinese>
<Chinesesimp>%1&lt;br/&gt;已使用</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Inventory_Full">
<English>No inventory space</English>
@ -41,6 +47,8 @@
<Russian>В инвентаре нет места</Russian>
<Japanese>インベントリに空きがありません</Japanese>
<Korean>소지품 공간이 없음</Korean>
<Chinese>已無存放空間</Chinese>
<Chinesesimp>已无存放空间</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Box_DisplayName">
<English>[ACE] Chemlights</English>
@ -50,6 +58,8 @@
<Korean>[ACE] 켐라이트</Korean>
<French>[ACE] Cyalume</French>
<Italian>[ACE] Luci chimiche</Italian>
<Chinese>[ACE] 螢光棒</Chinese>
<Chinesesimp>[ACE] 萤光棒</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DisplayName">
<English>Chemlight (Orange)</English>
@ -59,6 +69,8 @@
<Korean>켐라이트 (주황)</Korean>
<French>Cyalume (orange)</French>
<Italian>Luce chimica (Arancione)</Italian>
<Chinese>螢光棒 (橘色)</Chinese>
<Chinesesimp>萤光棒 (橘色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DisplayNameShort">
<English>Orange Light</English>
@ -68,6 +80,8 @@
<Korean>주황색</Korean>
<French>Lum. orange </French>
<Italian>Luce Arancione</Italian>
<Chinese>橘色光</Chinese>
<Chinesesimp>橘色光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DescriptionShort">
<English>Type: Light - Orange&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -77,6 +91,8 @@
<Korean>종류:밝은 오렌지&lt;br /&gt;수량: 1&lt;br /&gt;사용처: 손</Korean>
<French>Type: Lumière - orange&lt;br /&gt;Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Arancione&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 橘色&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 橘色&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_White_DisplayName">
<English>Chemlight (White)</English>
@ -86,6 +102,8 @@
<Korean>켐라이트 (하양)</Korean>
<French>Cyalume (blanc)</French>
<Italian>Luce chimica (Bianca)</Italian>
<Chinese>螢光棒 (白色)</Chinese>
<Chinesesimp>萤光棒 (白色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_White_DisplayNameShort">
<English>White Light</English>
@ -95,6 +113,8 @@
<Korean>하얀색</Korean>
<French>Lum. blanche </French>
<Italian>Luce Bianca</Italian>
<Chinese>白色光</Chinese>
<Chinesesimp>白色光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_White_DescriptionShort">
<English>Type: Light - White&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -104,6 +124,8 @@
<Korean>종류:하얀색&lt;br /&gt;수량: 1&lt;br /&gt;사용처: 손</Korean>
<French>Type: Lumière - blanche&lt;br /&gt;Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Bianca&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 白色&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 白色&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DisplayName">
<English>Chemlight (Hi Red)</English>
@ -113,6 +135,8 @@
<Korean>켐라이트 (밝은 빨간색)</Korean>
<French>Cyalume (Hi rouge)</French>
<Italian>Luce chimica (Hi Rossa)</Italian>
<Chinese>螢光棒 (超亮紅色)</Chinese>
<Chinesesimp>萤光棒 (超亮红色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DisplayNameShort">
<English>Red Hi Light</English>
@ -122,6 +146,8 @@
<Korean>밝은 빨간색</Korean>
<French>Lum. rouge haute intensité</French>
<Italian>Luce Hi Rossa</Italian>
<Chinese>超亮紅色光</Chinese>
<Chinesesimp>超亮红色光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DescriptionShort">
<English>Type: Light - Red Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -131,6 +157,8 @@
<Korean>종류: 밝은 빨간색 (5분)&lt;br /&gt;수량: 1&lt;br /&gt;사용처: 손</Korean>
<French>Type: Lumière - rouge Hi (5 minutes)&lt;br /&gt;Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Rossa Hi (5 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮紅色 (5分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮红色 (5分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayName">
<English>Chemlight (Hi Yellow)</English>
@ -140,6 +168,8 @@
<Korean>켐라이트 (밝은 노란색)</Korean>
<French>Cyalume (Hi jaune)</French>
<Italian>Luce chimica (Hi Gialla)</Italian>
<Chinese>螢光棒 (超亮黃色)</Chinese>
<Chinesesimp>萤光棒 (超亮黄色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayNameShort">
<English>Yellow Hi Light</English>
@ -149,6 +179,8 @@
<Korean>밝은 노란색</Korean>
<French>Lum. jaune haute intensité</French>
<Italian>Luce Hi Gialla</Italian>
<Chinese>超亮黃色光</Chinese>
<Chinesesimp>超亮黄色光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DescriptionShort">
<English>Type: Light - Yellow Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -158,6 +190,8 @@
<Korean>종류:밝은 노란색 (5분)&lt;br /&gt;수량: 1&lt;br /&gt;사용처: Hand</Korean>
<French>Type: Lumière - Jaune Hi (5 minutes)Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Gialla Hi (5 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮黃色 (5分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮黄色 (5分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DisplayName">
<English>Chemlight (Hi Orange)</English>
@ -167,6 +201,8 @@
<Korean>켐라이트 (밝은 주황색)</Korean>
<French>Cyalume (Hi orange)</French>
<Italian>Luce chimica (Hi Arancione)</Italian>
<Chinese>螢光棒 (超亮橘色)</Chinese>
<Chinesesimp>萤光棒 (超亮橘色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DisplayNameShort">
<English>Orange Hi Light</English>
@ -176,6 +212,8 @@
<Korean>밝은 주황색</Korean>
<French>Lum. orange haute intensité</French>
<Italian>Luce Hi Arancione</Italian>
<Chinese>超亮橘色光</Chinese>
<Chinesesimp>超亮橘色光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DescriptionShort">
<English>Type: Light - Orange Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -185,6 +223,8 @@
<Korean>종류: 밝은 주황색 (5분)&lt;br /&gt;수량: 1&lt;br /&gt;사용처: 손</Korean>
<French>Type: Lumière - orange Hi (5 minutes)&lt;br /&gt;Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Arancione Hi (5 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮橘色 (5分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮橘色 (5分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayName">
<English>Chemlight (Hi White)</English>
@ -194,6 +234,8 @@
<Korean>켐라이트 (밝은 하얀색)</Korean>
<French>Cyalume (Hi blanc)</French>
<Italian>Luce chimica (Hi Bianca)</Italian>
<Chinese>螢光棒 (超亮白色)</Chinese>
<Chinesesimp>萤光棒 (超亮白色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayNameShort">
<English>White Hi Light</English>
@ -203,6 +245,8 @@
<Korean>밝은 하얀색</Korean>
<French>Lum. blanche haute intensité</French>
<Italian>Luce Hi Bianca</Italian>
<Chinese>超亮白色光</Chinese>
<Chinesesimp>超亮白色光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DescriptionShort">
<English>Type: Light - White Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -212,6 +256,8 @@
<Korean>종류: 밝은 하얀색 (5분)&lt;br /&gt;수량: 1&lt;br /&gt;사용처: 손</Korean>
<French>Type: Lumière - blanche Hi (5 minutes)&lt;br /&gt;Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Bianca Hi (5 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮白色 (5分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮白色 (5分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DisplayName">
<English>Chemlight (IR)</English>
@ -221,6 +267,8 @@
<Korean>켐라이트 (적외선)</Korean>
<French>Cyalume (IR)</French>
<Italian>Luce chimica (IR)</Italian>
<Chinese>螢光棒 (紅外線)</Chinese>
<Chinesesimp>萤光棒 (红外线)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DisplayNameShort">
<English>IR Light</English>
@ -230,6 +278,8 @@
<Korean>적외선 켐라이트</Korean>
<French>Lumière IR</French>
<Italian>Luce IR</Italian>
<Chinese>紅外線光</Chinese>
<Chinesesimp>红外线光</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DescriptionShort">
<English>Type: Light - Infrared&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -239,6 +289,8 @@
<Korean>종류: 적외선&lt;br /&gt;수량: 1&lt;br /&gt;사용처: 손</Korean>
<French>Type: Lumière - infrarouge&lt;br /&gt;Nbre: 1&lt;br /&gt; À main</French>
<Italian>Tipo: Luce - Infrarossi&lt;br /&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 紅外線&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 红外线&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Empty_DisplayName">
<English>Chemlight Shield (Empty)</English>
@ -248,6 +300,8 @@
<Korean>켐라이트 쉴드 (비어있음)</Korean>
<French>Étui cyalume (vide)</French>
<Italian>Scudo Luce chimica (Vuoto)</Italian>
<Chinese>螢光棒保護殼 (空)</Chinese>
<Chinesesimp>萤光棒保护壳 (空)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Empty_DescriptionShort">
<English>Shield for chemlights. Combine with chemlight to prepare reading light.</English>
@ -257,6 +311,8 @@
<Korean>켐라이트를 위한 가림막입니다. 켐라이트와 같이 사용하여 읽을 때 씁니다.</Korean>
<French>Étui pour cyalume. Combiné avec un cyalume pour obtennir un lampe de lecture.</French>
<Italian>Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura.</Italian>
<Chinese>螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈.</Chinese>
<Chinesesimp>萤光棒的保护壳. 与萤光棒结合后可充当阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DisplayName">
<English>Chemlight Shield (Green)</English>
@ -266,6 +322,8 @@
<Korean>켐라이트 쉴드 (초록)</Korean>
<French>Étui cyalume (vert)</French>
<Italian>Scudo Luce Chimica (Verde)</Italian>
<Chinese>螢光棒保護殼 (綠色)</Chinese>
<Chinesesimp>萤光棒保护壳 (绿色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DescriptionShort">
<English>Green reading light.</English>
@ -275,6 +333,8 @@
<Korean>초록빛 조명</Korean>
<French>Lampe d'orientation verte.</French>
<Italian>Luce da lettura Verde.</Italian>
<Chinese>綠色閱讀燈.</Chinese>
<Chinesesimp>绿色阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DisplayName">
<English>Chemlight Shield (Red)</English>
@ -284,6 +344,8 @@
<Korean>켐라이트 쉴드 (빨강)</Korean>
<French>Étui cyalume (rouge)</French>
<Italian>Scudo Luce Chimica (Rossa)</Italian>
<Chinese>螢光棒保護殼 (紅色)</Chinese>
<Chinesesimp>萤光棒保护壳 (红色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DescriptionShort">
<English>Red reading light.</English>
@ -293,6 +355,8 @@
<Korean>빨간색 조명</Korean>
<French>Lampe d'orientation rouge.</French>
<Italian>Luce da lettura Rossa.</Italian>
<Chinese>紅色閱讀燈.</Chinese>
<Chinesesimp>红色阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DisplayName">
<English>Chemlight Shield (Blue)</English>
@ -302,6 +366,8 @@
<Korean>켐라이트 쉴드 (파랑)</Korean>
<French>Étui cyalume (bleu)</French>
<Italian>Scudo Luce Chimica (Blu)</Italian>
<Chinese>螢光棒保護殼 (藍色)</Chinese>
<Chinesesimp>萤光棒保护壳 (蓝色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DescriptionShort">
<English>Blue reading light.</English>
@ -311,6 +377,8 @@
<Korean>파란색 조명</Korean>
<French>Lampe d'orientation bleue.</French>
<Italian>Luce da lettura Blu.</Italian>
<Chinese>藍色閱讀燈.</Chinese>
<Chinesesimp>蓝色阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DisplayName">
<English>Chemlight Shield (Yellow)</English>
@ -320,6 +388,8 @@
<Korean>켐라이트 쉴드 (노랑)</Korean>
<French>Étui cyalume (jaune)</French>
<Italian>Scudo Luce Chimica (Gialla)</Italian>
<Chinese>螢光棒保護殼 (黃色)</Chinese>
<Chinesesimp>萤光棒保护壳 (黄色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DescriptionShort">
<English>Yellow reading light.</English>
@ -329,6 +399,8 @@
<Korean>노란색 조명</Korean>
<French>Lampe d'orientation jaune.</French>
<Italian>Luce da lettura Gialla.</Italian>
<Chinese>黃色閱讀燈.</Chinese>
<Chinesesimp>黄色阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DisplayName">
<English>Chemlight Shield (Orange)</English>
@ -338,6 +410,8 @@
<Korean>켐라이트 쉴드 (주황)</Korean>
<French>Étui cyalume (orange)</French>
<Italian>Scudo Luce Chimica (Arancione)</Italian>
<Chinese>螢光棒保護殼 (橘色)</Chinese>
<Chinesesimp>萤光棒保护壳 (橘色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DescriptionShort">
<English>Orange reading light.</English>
@ -347,6 +421,8 @@
<Korean>주황색 조명</Korean>
<French>Lampe d'orientation orange.</French>
<Italian>Luce da lettura Arancione.</Italian>
<Chinese>橘色閱讀燈.</Chinese>
<Chinesesimp>橘色阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DisplayName">
<English>Chemlight Shield (White)</English>
@ -356,6 +432,8 @@
<Korean>켐라이트 쉴드 (하양)</Korean>
<French>Étui cyalume (blanc)</French>
<Italian>Scudo Luce Chimica (Bianca)</Italian>
<Chinese>螢光棒保護殼 (白色)</Chinese>
<Chinesesimp>萤光棒保护壳 (白色)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DescriptionShort">
<English>White reading light.</English>
@ -365,6 +443,8 @@
<Korean>주황색 조명</Korean>
<French>Lampe d'orientation blanche.</French>
<Italian>Luce da lettura Bianca.</Italian>
<Chinese>白色閱讀燈.</Chinese>
<Chinesesimp>白色阅读灯.</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -1,11 +1,8 @@
class CfgWeapons {
class ItemCore;
class ACE_ItemCore: ItemCore {
type = 4096;//4;
detectRange = -1;
simulation = "ItemMineDetector";
};
class CBA_MiscItem;
class CBA_MiscItem_ItemInfo;
class ACE_ItemCore: CBA_MiscItem {};
class Rifle;
class Rifle_Base_F: Rifle {
@ -28,7 +25,6 @@ class CfgWeapons {
};
};
class InventoryItem_Base_F;
class ACE_Banana: ACE_ItemCore {
author = CSTRING(ACETeam);
scope = 2;
@ -38,7 +34,7 @@ class CfgWeapons {
picture = QPATHTOF(data\icon_banana_ca.paa);
icon = "iconObject_circle";
mapSize = 0.034;
class ItemInfo: InventoryItem_Base_F {
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
};
};

View File

@ -12,7 +12,6 @@ class GVAR(ProgressBar_Dialog) {
text = "";
sizeEx = 0;
lineSpacing = 0;
access = 0;
type = 0;
style = 0;
size = 1;
@ -64,7 +63,6 @@ class GVAR(DisableMouse_Dialog) {
text = "";
sizeEx = 0;
lineSpacing = 0;
access = 0;
type = 0;
style = 0;
size = 1;

Binary file not shown.

View File

@ -78,6 +78,7 @@ PREP(getTurretDirection);
PREP(getUavControlPosition);
PREP(getVehicleCargo);
PREP(getVehicleCodriver);
PREP(getVehicleIcon);
PREP(getVersion);
PREP(getWeaponAzimuthAndInclination);
PREP(getWeaponIndex);
@ -100,6 +101,7 @@ PREP(isEngineer);
PREP(isEOD);
PREP(isFeatureCameraActive);
PREP(isInBuilding);
PREP(isMedic);
PREP(isModLoaded);
PREP(isPlayer);
PREP(isUnderwater);
@ -134,6 +136,7 @@ PREP(requestCallback);
PREP(resetAllDefaults);
PREP(restoreVariablesJIP);
PREP(runAfterSettingsInit);
PREP(runTests);
PREP(sanitizeString);
PREP(sendRequest);
PREP(serverLog);
@ -161,7 +164,6 @@ PREP(statusEffect_sendEffects);
PREP(statusEffect_set);
PREP(stringCompare);
PREP(stringToColoredText);
PREP(stringRemoveWhiteSpace);
PREP(switchToGroupSide);
PREP(throttledPublicVariable);
PREP(toBin);

View File

@ -22,7 +22,7 @@
["forceWalk", false, ["ACE_SwitchUnits", "ACE_Attach", "ACE_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_Sandbag", "ACE_refuel", "ACE_rearm", "ACE_dragging"]] call FUNC(statusEffect_addType);
["blockSprint", false, []] call FUNC(statusEffect_addType);
["setCaptive", true, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered), "ace_unconscious"]] call FUNC(statusEffect_addType);
["blockDamage", false, ["fixCollision"]] call FUNC(statusEffect_addType);
["blockDamage", false, ["fixCollision", "ACE_cargo"]] call FUNC(statusEffect_addType);
["blockEngine", false, ["ACE_Refuel"]] call FUNC(statusEffect_addType);
[QGVAR(forceWalk), {
@ -127,6 +127,7 @@ if (isServer) then {
[QGVAR(switchMove), {(_this select 0) switchMove (_this select 1)}] call CBA_fnc_addEventHandler;
[QGVAR(setVectorDirAndUp), {(_this select 0) setVectorDirAndUp (_this select 1)}] call CBA_fnc_addEventHandler;
[QGVAR(setVanillaHitPointDamage), {(_this select 0) setHitPointDamage (_this select 1)}] call CBA_fnc_addEventHandler;
[QGVAR(addWeaponItem), {(_this select 0) addWeaponItem [(_this select 1), (_this select 2)]}] call CBA_fnc_addEventHandler;
// Request framework
[QGVAR(requestCallback), FUNC(requestCallback)] call CBA_fnc_addEventHandler;
@ -321,6 +322,49 @@ GVAR(OldIsCamera) = false;
END_COUNTER(stateChecker);
}, 0.5, []] call CBA_fnc_addPerFrameHandler;
// Add event handler for UAV control change
ACE_controlledUAV = [objNull, objNull, [], ""];
addMissionEventHandler ["PlayerViewChanged", {
// On non-server client this command is semi-broken
// arg index 5 should be the controlled UAV, but it will often be objNull (delay from locality switching?)
// On PlayerViewChanged event, start polling for new uav state for a few seconds (should be done within a few frames)
params ["", "", "", "", "_newCameraOn", "_UAV"];
TRACE_2("PlayerViewChanged",_newCameraOn,_UAV);
[{
if (isNull player) exitWith {true};
private _UAV = getConnectedUAV player;
if (!alive player) then {_UAV = objNull;};
private _position = (UAVControl _UAV) param [1, ""];
private _seatAI = objNull;
private _turret = [];
switch (toLower _position) do {
case (""): {
_UAV = objNull; // set to objNull if not actively controlling
};
case ("driver"): {
_turret = [-1];
_seatAI = driver _UAV;
};
case ("gunner"): {
_turret = [0];
_seatAI = gunner _UAV;
};
};
private _newArray = [_UAV, _seatAI, _turret, _position];
if (_newArray isEqualTo ACE_controlledUAV) exitWith {false}; // no change yet
TRACE_2("Seat Change",_newArray,ACE_controlledUAV);
ACE_controlledUAV = _newArray;
["ACE_controlledUAV", _newArray] call CBA_fnc_localEvent;
// stay in the loop as we might switch from gunner -> driver, and there may be a empty position event in-between
false
}, {}, [], 3, {TRACE_1("timeout",_this);}] call CBA_fnc_waitUntilAndExecute;
}];
//////////////////////////////////////////////////
// Eventhandlers for player controlled machines
@ -359,7 +403,9 @@ GVAR(OldIsCamera) = false;
// Players can always interact with his vehicle
{vehicle _unit == _target} ||
// Players can always interact with passengers of the same vehicle
{_unit != _target && {vehicle _unit == vehicle _target}}
{_unit != _target && {vehicle _unit == vehicle _target}} ||
// Players can always interact with connected UAV
{!(isNull (ACE_controlledUAV select 0))}
}] call FUNC(addCanInteractWithCondition);
["isNotInZeus", {isNull curatorCamera}] call FUNC(addCanInteractWithCondition);
@ -377,7 +423,9 @@ GVAR(isReloading) = false;
private _weapon = currentWeapon ACE_player;
if (_weapon != "") then {
private _gesture = getText (configfile >> "CfgWeapons" >> _weapon >> "reloadAction");
private _muzzle = currentMuzzle ACE_player;
private _wpnConfig = configFile >> "CfgWeapons" >> _weapon;
private _gesture = getText ([_wpnConfig >> _muzzle, _wpnConfig] select (_weapon isEqualTo _muzzle) >> "reloadAction");
if (_gesture == "") exitWith {}; //Ignore weapons with no reload gesture (binoculars)
private _isLauncher = _weapon isKindOf ["Launcher", configFile >> "CfgWeapons"];
private _config = ["CfgGesturesMale", "CfgMovesMaleSdr"] select _isLauncher;

View File

@ -45,7 +45,6 @@ class ACE_Rsc_Control_Base {
idc = 1;
type = 0;
style = 48;
access = 0;
lineSpacing = 0;
moving = 1;
text = "";
@ -90,3 +89,8 @@ class CfgUIGrids {
class ACE_Extensions {
extensions[] = {};
};
class ACE_Tests {
vehicleTransportInventory = QPATHTOF(dev\test_vehicleInventory.sqf);
mapConfigs = QPATHTOF(dev\test_mapConfigs.sqf);
};

View File

@ -94,7 +94,6 @@ class ACE_gui_backgroundBase {
};
class ACE_gui_editBase
{
access = 0;
type = 2;
x = 0;
y = 0;
@ -290,7 +289,6 @@ class ACE_gui_listBoxBase : RscListBox{
class ACE_gui_listNBox {
access = 0;
type = CT_LISTNBOX;// 102;
style =ST_MULTI;
w = 0.4;

View File

@ -0,0 +1,49 @@
// PabstMirror
// ["mapConfigs"] call ace_common_fnc_runTests;
// execVM "z\ace\addons\common\dev\test_mapConfigs.sqf";
#include "\z\ace\addons\common\script_component.hpp"
diag_log text format ["--- Checking Map Configs ---"];
private _testPass = true;
private _maps = configProperties [configFile >> "CfgWorldList", "(isClass _x)", true];
{
private _mapConfigName = configName _x;
private _worldConfig = configFile >> "CfgWorlds" >> _mapConfigName;
private _mapDescription = getText (_worldConfig >> "description");
// Check if custom latitude/elevation in lookup table (ace_common_fnc_getMapData)
private _getMapData = [_mapConfigName] call FUNC(getMapData);
if (_getMapData isEqualTo []) then {
diag_log text format ["%1 [%2] - Not in getMapData",_mapDescription,_mapConfigName];
diag_log text format [" - Using map's config [latitude: %1] [elevationOffset: %2]", getNumber (_worldConfig >> "latitude"), getNumber (_worldConfig >> "elevationOffset")];
};
// Test MGRS grid step size (from ace_common_fnc_getMapGridData)
private _zoomMax = 1e99;
private _formatX = "";
private _formatY = "";
private _stepX = 1e10;
private _stepY = 1e10;
{
private _zoom = getnumber (_x >> "zoomMax");
if (_zoom < _zoomMax) then {
_zoomMax = _zoom;
_formatX = getText (_x >> "formatX");
_formatY = getText (_x >> "formatY");
_stepX = getNumber (_x >> "stepX");
_stepY = getNumber (_x >> "stepY");
};
} forEach configProperties [(_worldConfig >> "Grid"), "isClass _x", false];
private _stepXat5 = _stepX * 10 ^ ((count _formatX) - 5);
private _stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5);
if (_stepYat5 < 0) then {diag_log text format ["%1 [%2] - Northing is reversed.",_mapDescription,_mapConfigName];};
if (_stepXat5 != 1) then {diag_log text format ["%1 [%2] - MGRS 10 digit grid does not equal 1 meter: (%3) for x.",_mapDescription,_mapConfigName,_stepXat5];};
if (_stepYat5 != 1 && {_stepYat5 != -1}) then {diag_log text format ["%1 [%2] - MGRS 10 digit grid does not equal 1 meter: (%3) for y.",_mapDescription,_mapConfigName,_stepXat5];};
} forEach _maps;
// Always return true, these are just warnings
_testPass

View File

@ -0,0 +1,47 @@
// PabstMirror
// ["vehicleTransportInventory"] call ace_common_fnc_runTests;
// execVM "z\ace\addons\common\dev\test_vehicleInventory.sqf";
private _testPass = true;
private _vehicles = configProperties [configFile >> "CfgVehicles", "(isClass _x)", true];
{
private _vehType = configName _x;
{
private _name = getText (_x >> "name");
if (_name != "MineDetector") then { // Vanilla mixes up mineDetector alot?
private _weaponConfig = configFile >> "CfgWeapons" >> _name;
private _glassesConfig = configFile >> "CfgGlasses" >> _name;
if (((!isClass _weaponConfig) || {(getNumber (_weaponConfig >> "type")) in [1,2,4]}) && {!isClass _glassesConfig}) then {
diag_log text format ["%1 -> TransportItems -> %2 = Bad", _vehType, _name];
_testPass = false;
};
};
} forEach (configProperties [_x >> "TransportItems", "isClass _x", true]);
{
private _name = getText (_x >> "weapon");
private _weaponConfig = configFile >> "CfgWeapons" >> _name;
if ((!isClass _weaponConfig) || {!((getNumber (_weaponConfig >> "type")) in [1,2,4])}) then {
diag_log text format ["%1 -> TransportWeapons -> %2 = Bad", _vehType, _name];
_testPass = false;
};
} forEach (configProperties [_x >> "TransportWeapons", "isClass _x", true]);
{
private _name = getText (_x >> "magazine");
private _magConfig = configFile >> "CfgMagazines" >> _name;
if ((!isClass _magConfig)) then {
diag_log text format ["%1 -> TransportMagazines -> %2 = Bad", _vehType, _name];
_testPass = false;
};
} forEach (configProperties [_x >> "TransportMagazines", "isClass _x", true]);
{
private _name = getText (_x >> "backpack");
private _vehConfig = configFile >> "CfgVehicles" >> _name;
if ((!isClass _vehConfig)) then {
diag_log text format ["%1 -> TransportBackpacks -> %2 = Bad", _vehType, _name];
_testPass = false;
};
} forEach (configProperties [_x >> "TransportBackpacks", "isClass _x", true]);
} forEach _vehicles;
_testPass

View File

@ -11,7 +11,7 @@
* None
*
* Example:
* [[0,0,0], [1,1,0], [1,0,0,1]]] call ace_common_fnc_addLineToDebugDraw;
* [[0,0,0], [1,1,0], [1,0,0,1]] call ace_common_fnc_addLineToDebugDraw;
*
* Public: No
*/

View File

@ -28,4 +28,4 @@ private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >>
private _surfaceDust = getNumber (configFile >> "CfgSurfaces" >> _surfaceClass >> "dust");
TRACE_2("Surface",_surfaceType,_surfaceDust);
!(_surfaceType in DIG_SURFACE_BLACKLIST) && {_surfaceDust >= 0.1}
!(_surfaceType in DIG_SURFACE_BLACKLIST) && {(_surfaceDust >= 0.1) || {_surfaceType in DIG_SURFACE_WHITELIST}}

View File

@ -4,7 +4,7 @@
*
* Arguments:
* 0: Array to be dumped <ARRAY>
* 1: Depth <NUMBER><OPTIONAL>
* 1: Depth <NUMBER> (default: 0)
*
* Return Value:
* None

View File

@ -1,20 +1,20 @@
/*
* Author: PabstMirror, ViperMaul
* Find a safe place near a vehicle to unload something
* Handles Normal Terrain, In Water or On Buildings (Pier, StaticShip)
* Find a safe place near a vehicle to unload something.
* Handles Normal Terrain, In Water or On Buildings (Pier, StaticShip).
*
* Arguments:
* 0: Source Vehicle <OBJECT>
* 1: Cargo Classname <STRING>
* 2: Unloader (player) <OBJECT><OPTIONAL>
* 3: Max Distance (meters) <NUMBER><OPTIONAL>
* 4: Check Vehicle is Stable <BOOL><OPTIONAL>
* 2: Unloader (player) <OBJECT> (default: objNull)
* 3: Max Distance (meters) <NUMBER> (default: 10)
* 4: Check Vehicle is Stable <BOOL> (default: true)
*
* Return Value:
* Unload PositionAGL (Can Be [] if no valid pos found) <ARRAY>
* Unload PositionAGL (can Be [] if no valid pos found) <ARRAY>
*
* Example:
* [theCar, "CAManBase", player, 10, true] call ace_common_fnc_findUnloadPosition;
* [theCar, "CAManBase", player, 10, true] call ace_common_fnc_findUnloadPosition
*
* Public: No
*/

View File

@ -22,7 +22,7 @@
params [["_map", worldName]];
private _long = getNumber (configFile >> "CfgWorlds" >> _map >> "longitude");
private _lat = getNumber (configFile >> "CfgWorlds" >> _map >> "latitude");
private _lat = -1 * getNumber (configFile >> "CfgWorlds" >> _map >> "latitude"); // latitude is reversed in arma (negative config values in north)
private _altitude = getNumber (configFile >> "CfgWorlds" >> _map >> "elevationOffset");
private _mapData = _map call FUNC(getMapData);

View File

@ -24,13 +24,14 @@ _map = toLower _map;
if (_map in ["tanoa"]) exitWith { [-18, 0] };
if (_map in ["altis"]) exitWith { [40, 0] };
if (_map in ["stratis"]) exitWith { [40, 0] };
if (_map in ["malden", "abel"]) exitWith { [38.8, 0] }; // 1.72 Malden and CWR2 Malden
if (_map in ["abbottabad"]) exitWith { [34, 1256] }; // Abbottabad elevation 1256m (Wikipedia)
if (_map in ["abel"]) exitWith { [39, 0] }; // CWR2 Malden
if (_map in ["abramia"]) exitWith { [60, 0] };
if (_map in ["af_kandahar_province"]) exitWith { [42, 0] };
if (_map in ["angel"]) exitWith { [38, 0] };
if (_map in ["anim_helvantis_v2"]) exitWith { [50, 0] };
if (_map in ["anim_starokovka"]) exitWith { [50, 0] };
if (_map in ["australia"]) exitWith { [-25, 0] };
if (_map in ["baranow", "ivachev", "panavo", "staszow"]) exitWith { [50, 148.1] }; // IFA3LITE - default elevationOffset
if (_map in ["beketov"]) exitWith { [55, 0] };
@ -98,6 +99,7 @@ if (_map in ["pja308"]) exitWith { [36, 0] }; // G.O.S Gunkizli
if (_map in ["pja310"]) exitWith { [36, 0] }; // G.O.S Al Rayak
if (_map in ["pja312"]) exitWith { [16, 0] }; // G.O.S Song Bin Tanh
if (_map in ["pja314"]) exitWith { [46, 0] }; // G.O.S Leskovets
if (_map in ["pja319"]) exitWith { [20, 0] }; // G.O.S N'Djenahoud, Ennedi Massif (Republic of Chad)
if (_map in ["plr_bulge"]) exitWith { [49, 0] }; // I44: Battle of the Bulge
if (_map in ["porquerolles"]) exitWith { [43, 0] };
if (_map in ["porto"]) exitWith { [40, 0] };

View File

@ -68,15 +68,13 @@ private _stepXat5 = _stepX * 10 ^ ((count _formatX) - 5);
private _stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5);
if (_stepYat5 < 0) then {
WARNING_1("Map Grid Warning (%1) - Northing is reversed.",worldName);
TRACE_1("Northing is reversed",worldName);
};
if (_stepXat5 != 1) then {
WARNING_2("Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for x.",worldName,_stepXat5);
TRACE_2("MGRS 10 digit grid does not equal 1 meter",_stepXat5,worldName);
};
if (_stepYat5 != 1 && {_stepYat5 != -1}) then {
WARNING_2("Map Grid Warning (%1) - MGRS 10 digit grid does not equal 1 meter: (%2) for y.",worldName,_stepXat5);
TRACE_2("MGRS 10 digit grid does not equal 1 meter",_stepYat5,worldName);
};
GVAR(mapGridData) = [_offsetX, _realOffsetY, _stepXat5, _stepYat5];

View File

@ -0,0 +1,50 @@
/*
* Author: AACO
* Function used to get the vehicle icon for provided object (cached for repeat use)
*
* Arguments:
* 0: Object to get icon of <OBJECT/STRING>
*
* Return Value:
* Icon of vehicle <STRING>
*
* Examples:
* ["B_Soldier_F"] call ace_common_fnc_getVehicleIcon;
*
* Public: Yes
*/
#include "script_component.hpp"
#define DEFAULT_TEXTURE "\A3\ui_f\data\Map\VehicleIcons\iconVehicle_ca.paa"
params [["_object", objNull, [objNull, ""]]];
if ((_object isEqualType objNull && {isNull _object}) || {_object isEqualType "" && {_object == ""}}) exitWith { DEFAULT_TEXTURE };
ISNILS(GVAR(vehicleIconCache),call CBA_fnc_createNamespace);
private _objectType = if (_object isEqualType objNull) then {
typeOf _object
} else {
_object
};
private _cachedValue = GVAR(vehicleIconCache) getVariable _objectType;
if (isNil "_cachedValue") then {
private _vehicleValue = getText (configfile >> "CfgVehicles" >> _objectType >> "icon");
private _vehicleIconValue = getText (configfile >> "CfgVehicleIcons" >> _vehicleValue);
if (_vehicleIconValue == "") then {
if (_vehicleValue != "" && {((toLower _vehicleValue) find ".paa") > -1}) then {
_cachedValue = _vehicleValue;
} else {
_cachedValue = DEFAULT_TEXTURE;
};
} else {
_cachedValue = _vehicleIconValue;
};
GVAR(vehicleIconCache) setVariable [_objectType, _cachedValue];
};
_cachedValue

View File

@ -25,7 +25,7 @@
!(
isNull curatorCamera && // Curator
{isNull (GETMVAR(EGVAR(spectator,camera),objNull))} && // ACE Spectator
{!(GETMVAR(EGVAR(spectator,isSet),false))} && // ACE Spectator
{isNull (GETUVAR(BIS_fnc_arsenal_cam, objNull))} && // Arsenal camera
{isNull (GETMVAR(BIS_fnc_establishingShot_fakeUAV, objNull))} && // Establishing shot camera
{isNull (GETMVAR(BIS_fnc_camera_cam, objNull))} && // Splendid camera

View File

@ -0,0 +1,23 @@
/*
* Author: SilentSpike
* Check if a unit is a medic
*
* Arguments:
* 0: The Unit <OBJECT>
*
* ReturnValue:
* Unit is medic <BOOL>
*
* Example:
* [player] call ace_common_fnc_isMedic
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_unit"];
private _isMedic = _unit getVariable [QEGVAR(medical,medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "attendant")];
_isMedic > 0

View File

@ -24,7 +24,7 @@ private _vehicle = objNull;
if (!([_caller, _unit, ["isNotDragging", "isNotCarrying"]] call FUNC(canInteractWith)) || {_caller == _unit}) exitWith {_vehicle};
private _nearVehicles = nearestObjects [_unit, ["Car", "Air", "Tank", "Ship_F"], 10];
private _nearVehicles = nearestObjects [_unit, ["Car", "Air", "Tank", "Ship_F","Pod_Heli_Transport_04_crewed_base_F"], 10];
{
TRACE_1("",_x);

View File

@ -0,0 +1,48 @@
/*
* Author: PabstMirror
* Run test functions.
*
* Arguments:
* 0: Specific test to run (default is to run all) <STRING> (default: #all)
*
* Return Value:
* None
*
* Example:
* [] call ace_common_fnc_runTests
* ["fcs"] call ace_common_fnc_runTests
*
* Public: Yes
*/
#include "script_component.hpp"
params [["_specificTest", "#all", [""]]];
private _startTime = diag_tickTime;
private _fails = [];
private _total = 0;
INFO_1("ace_common_fnc_runTests starting for [%1]", _specificTest);
{
private _testName = configName _x;
if ((_specificTest == "#all") || {_specificTest == _testName}) then {
_total = _total + 1;
private _testFile = getText _x;
diag_log text format ["----- Starting Testing %1 [%2] -----", _testName, _testFile];
private _return = ([nil] apply (compile preProcessFileLineNumbers _testFile)) select 0;
if ((isNil "_return") || {!(_return isEqualTo true)}) then {
systemChat format ["Test [%1] Failed", _testName];
diag_log text format ["----- Finished Testing %1 [Failed] -----", _testName];
_fails pushBack _testName;
} else {
diag_log text format ["----- Finished Testing %1 [Passed] -----", _testName];
};
};
} forEach (configProperties [configFile >> "ACE_Tests"]);
INFO_1("ace_common_fnc_runTests finished in %1 ms", (1000 * (diag_tickTime - _startTime)) toFixed 1);
INFO_2("[%1 / %2] Tests Passed", (_total - (count _fails)), _total);
if (!(_fails isEqualTo [])) then {
INFO_1("Failed: %1", _fails);
};

View File

@ -1,11 +1,11 @@
/*
* Author: PabstMirror
* Allows multiple sources to not overwrite showHud command
* Bitwise AND Logic (a single false in a mask will make it false)
* Allows multiple sources to not overwrite showHud command.
* Bitwise AND Logic (a single false in a mask will make it false).
*
* Arguments:
* 0: Source ID <STRING><OPTIONAL>
* 1: Show Hud Bool Array (8 to set, empty to remove) <ARRAY><OPTIONAL>
* 0: Source ID <STRING> (default: "")
* 1: Show Hud Bool Array (8 to set, empty to remove) <ARRAY> (default: [])
* - [hud, info, radar, compass, direction, menu, group, cursors]
* - hud: Boolean - show scripted HUD (same as normal showHUD true/false)
* - info: Boolean - show vehicle + soldier info (hides weapon info from the HUD as well)

View File

@ -1,22 +0,0 @@
/*
* Author: Glowbal
* Removes whitespace from a string.
*
* Arguments:
* 0: String <STRING>
*
* Return Value:
* String Without Whitespace <STRING>
*
* Example:
* _stringWithoutWhitespace = ["String with whitespace"] call ace_common_fnc_stringRemoveWhiteSpace
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_string"];
ACE_DEPRECATED(QFUNC(stringRemoveWhiteSpace),"3.10.0","CBA_fnc_removeWhitespace");
(_string splitString " ") joinString ""

View File

@ -3,12 +3,12 @@
* Unload a person from a vehicle, local
*
* Arguments:
* 0: unit to unload <OBJECT>
* 0: Unit to unload <OBJECT>
* 1: Vehicle <OBJECT>
* 2: Unloader (player) <OBJECT><OPTIONAL>
* 2: Unloader (player) <OBJECT> (default: objNull)
*
* Return Value:
* Returns true if succesfully unloaded person <BOOL>
* Succesfully unloaded person <BOOL>
*
* Example:
* [bob, car, bob] call ace_common_fnc_unloadpersonLocal

View File

@ -1,27 +1,27 @@
/*
* Author: PabstMirror
* Shows multiple watched variables on the main display (for easy debugging)
* Shows multiple watched variables on the main display (for easy debugging).
*
* Arguments:
* 0: Title (var name) <STRING>
* 1: Code to generate result (passed nothing, can return any) <OPTIONAL><CODE>
* 2: Array containing modifiers <OPTIONAL><ARRAY>
* 0: Title (var name) <STRING> (default: "")
* 1: Code to generate result (passed nothing, can return any) <CODE> (default: {})
* 2: Array containing modifiers <ARRAY> (default: [])
* For Numbers:
* 0: Show Delta change (default: true) <OPTIONAL><BOOL>
* 1: Slider Min Value (default: 0) <OPTIONAL><NUMBER>
* 1: Slider Max Value (default: 0) <OPTIONAL><NUMBER>
* 0: Show Delta change <BOOL> (default: true)
* 1: Slider Min Value <NUMBER> (default: 0)
* 1: Slider Max Value <NUMBER> (default: 0)
* For Anything else:
* 0: Number of structured text lines (default: 1) <OPTIONAL><NUMBER>
* 0: Number of structured text lines <NUMBER> (default: 1)
*
* Return Value:
* None
*
* Example:
* ["CBA_missionTime"] call ace_common_fnc_watchVariable; // Uses title as code
* ["diag_frameNo", {diag_frameNo}, [false]] call ace_common_fnc_watchVariable; // Won't show delta
* ["blood", {player getVariable "ace_medical_bloodVolume"}, [true, 0, 100]] call ace_common_fnc_watchVariable; // Shows slider
* ["multiLine text", {"Line 1 <br/>Line 2"}, [2]] call ace_common_fnc_watchVariable;
* ["player names", {allPlayers apply {name _x}}, [5]] call ace_common_fnc_watchVariable; // handles any data types
* ["CBA_missionTime"] call ace_common_fnc_watchVariable // Uses title as code
* ["diag_frameNo", {diag_frameNo}, [false]] call ace_common_fnc_watchVariable // Won't show delta
* ["blood", {player getVariable "ace_medical_bloodVolume"}, [true, 0, 100]] call ace_common_fnc_watchVariable // Shows slider
* ["multiLine text", {"Line 1 <br/>Line 2"}, [2]] call ace_common_fnc_watchVariable
* ["player names", {allPlayers apply {name _x}}, [5]] call ace_common_fnc_watchVariable // handles any data types
*
* Public: Yes
*/

View File

@ -32,3 +32,5 @@
"lino_exp", "int_lino_exp", "int_mat_exp", \
"wood", "wood_int", "int_wood", "softwood_exp", "int_softwood_exp", "int_solidwood_exp" \
]
#define DIG_SURFACE_WHITELIST ["grass"]

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Common">
<Key ID="STR_ACE_Common_ACETeam">
@ -14,6 +14,8 @@
<Italian>ACE-Team</Italian>
<Japanese>ACE-Team</Japanese>
<Korean>ACE-Team</Korean>
<Chinese>ACE-製作團隊</Chinese>
<Chinesesimp>ACE-制作团队</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Advanced">
<English>Advanced</English>
@ -42,6 +44,8 @@
<Italian>Salva</Italian>
<Japanese>保存</Japanese>
<Korean>저장</Korean>
<Chinese>儲存</Chinese>
<Chinesesimp>储存</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Cancel">
<English>Cancel</English>
@ -56,6 +60,8 @@
<Italian>Annulla</Italian>
<Japanese>中止</Japanese>
<Korean>취소</Korean>
<Chinese>取消</Chinese>
<Chinesesimp>取消</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Options">
<English>ACE Options</English>
@ -70,6 +76,8 @@
<Italian>Opzioni ACE</Italian>
<Japanese>ACE オプション</Japanese>
<Korean>ACE 옵션</Korean>
<Chinese>ACE設定選項</Chinese>
<Chinesesimp>ACE设定选项</Chinesesimp>
</Key>
<!-- These are cardinal directions, in case you didn't guess. -->
<Key ID="STR_ACE_Common_N">
@ -85,6 +93,8 @@
<Italian>N</Italian>
<Japanese></Japanese>
<Korean></Korean>
<Chinese></Chinese>
<Chinesesimp></Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_NNE">
<English>NNE</English>
@ -99,6 +109,8 @@
<Italian>NNE</Italian>
<Japanese>北北東</Japanese>
<Korean>북북동</Korean>
<Chinese>北北東</Chinese>
<Chinesesimp>北北东</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_NE">
<English>NE</English>
@ -113,6 +125,8 @@
<Italian>NE</Italian>
<Japanese>北東</Japanese>
<Korean>북동</Korean>
<Chinese>東北</Chinese>
<Chinesesimp>东北</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ENE">
<English>ENE</English>
@ -127,6 +141,8 @@
<Italian>ENE</Italian>
<Japanese>東北東</Japanese>
<Korean>동북동</Korean>
<Chinese>東北東</Chinese>
<Chinesesimp>东北东</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_E">
<English>E</English>
@ -141,6 +157,8 @@
<Italian>E</Italian>
<Japanese></Japanese>
<Korean></Korean>
<Chinese></Chinese>
<Chinesesimp></Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ESE">
<English>ESE</English>
@ -155,6 +173,8 @@
<Italian>ESE</Italian>
<Japanese>東南東</Japanese>
<Korean>동남동</Korean>
<Chinese>東南東</Chinese>
<Chinesesimp>东南东</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SE">
<English>SE</English>
@ -169,6 +189,8 @@
<Italian>SE</Italian>
<Japanese>南東</Japanese>
<Korean>남동</Korean>
<Chinese>東南</Chinese>
<Chinesesimp>东南</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SSE">
<English>SSE</English>
@ -183,6 +205,8 @@
<Italian>SSE</Italian>
<Japanese>南南東</Japanese>
<Korean>남남동</Korean>
<Chinese>南南東</Chinese>
<Chinesesimp>南南东</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_S">
<English>S</English>
@ -197,6 +221,8 @@
<Italian>S</Italian>
<Japanese></Japanese>
<Korean></Korean>
<Chinese></Chinese>
<Chinesesimp></Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SSW">
<English>SSW</English>
@ -211,6 +237,8 @@
<Italian>SSO</Italian>
<Japanese>南南西</Japanese>
<Korean>남남서</Korean>
<Chinese>南南西</Chinese>
<Chinesesimp>南南西</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SW">
<English>SW</English>
@ -225,6 +253,8 @@
<Italian>SO</Italian>
<Japanese>南西</Japanese>
<Korean>남서</Korean>
<Chinese>西南</Chinese>
<Chinesesimp>西南</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_WSW">
<English>WSW</English>
@ -239,6 +269,8 @@
<Italian>OSO</Italian>
<Japanese>西南西</Japanese>
<Korean>서남서</Korean>
<Chinese>西南西</Chinese>
<Chinesesimp>西南西</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_W">
<English>W</English>
@ -253,6 +285,8 @@
<Italian>O</Italian>
<Japanese>西</Japanese>
<Korean></Korean>
<Chinese>西</Chinese>
<Chinesesimp>西</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_WNW">
<English>WNW</English>
@ -267,6 +301,8 @@
<Italian>ONO</Italian>
<Japanese>北北西</Japanese>
<Korean>서북서</Korean>
<Chinese>西北西</Chinese>
<Chinesesimp>西北西</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_NW">
<English>NW</English>
@ -281,6 +317,8 @@
<Italian>NO</Italian>
<Japanese>北西</Japanese>
<Korean>북서</Korean>
<Chinese>西北</Chinese>
<Chinesesimp>西北</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_NNW">
<English>NNW</English>
@ -295,6 +333,8 @@
<Italian>NNO</Italian>
<Japanese>北北西</Japanese>
<Korean>북북서</Korean>
<Chinese>北北西</Chinese>
<Chinesesimp>北北西</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ActionAborted">
<English>Action cancelled.</English>
@ -309,6 +349,8 @@
<Italian>Azione cancellata.</Italian>
<Japanese>動作を中止した。</Japanese>
<Korean>행동 취소됨.</Korean>
<Chinese>動作已被取消</Chinese>
<Chinesesimp>动作已被取消</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_MiscItems">
<English>[ACE] Miscellaneous Items</English>
@ -323,6 +365,8 @@
<Italian>[ACE] Oggetti vari</Italian>
<Japanese>[ACE] その他のアイテム</Japanese>
<Korean>[ACE] 기타 물품.</Korean>
<Chinese>[ACE] 雜項</Chinese>
<Chinesesimp>[ACE] 杂项</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_EnableNumberHotkeys">
<English>Disable Command Menu</English>
@ -337,6 +381,8 @@
<Portuguese>Desabilitar menu de comando</Portuguese>
<Japanese>指揮メニューを無効化</Japanese>
<Korean>지휘 메뉴 종료</Korean>
<Chinese>關閉命令選單</Chinese>
<Chinesesimp>关闭命令选单</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Unknown">
<English>Unknown</English>
@ -351,6 +397,8 @@
<Portuguese>Desconhecido</Portuguese>
<Japanese>不明</Japanese>
<Korean>알 수 없음</Korean>
<Chinese>未知的</Chinese>
<Chinesesimp>未知的</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Normal">
<English>Normal</English>
@ -379,6 +427,8 @@
<Portuguese>Sem voz</Portuguese>
<Japanese>音声なし</Japanese>
<Korean>무음</Korean>
<Chinese>沒聲音</Chinese>
<Chinesesimp>没声音</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TITLE">
<English>Accept Requests</English>
@ -393,6 +443,8 @@
<Italian>Accetta la richiesta</Italian>
<Japanese>要求を受け入れ</Japanese>
<Korean>요청 수락</Korean>
<Chinese>接受請求</Chinese>
<Chinesesimp>接受请求</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TITLE">
<English>Decline Requests</English>
@ -407,6 +459,8 @@
<Italian>Rifiuta la richiesta</Italian>
<Japanese>要求を拒否</Japanese>
<Korean>요청 거부</Korean>
<Chinese>拒絕請求</Chinese>
<Chinesesimp>拒绝请求</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_ACCEPT_REQUEST_KEY_TOOLTIP">
<English>Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
@ -421,6 +475,8 @@
<Portuguese>Aceitar pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
<Japanese>他プレイヤからの要求を許可します。他プレイヤは装備を共有し、使うなど特定の動作を行えます。</Japanese>
<Korean>다른 플레이어가 보내온 요청을 수락합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다.</Korean>
<Chinese>接受由其他玩家送出的請求. 包含使用/共享裝備與執行特定動作</Chinese>
<Chinesesimp>接受由其他玩家送出的请求. 包含使用/共享装备与执行特定动作</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
<English>Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions.</English>
@ -435,6 +491,8 @@
<Portuguese>Rejeita pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
<Japanese>他プレイヤからの要求を拒否します。他プレイヤは装備を共有し、使うなど特定の動作をできません。</Japanese>
<Korean>다른 플레이어가 보내온 요청을 거부합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다.</Korean>
<Chinese>拒絕由其他玩家送出的請求. 包含使用/共享裝備與執行特定動作</Chinese>
<Chinesesimp>拒绝由其他玩家送出的请求. 包含使用/共享装备与执行特定动作</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
<English>Feedback icons</English>
@ -449,6 +507,8 @@
<Portuguese>Ícones de Feedback</Portuguese>
<Japanese>フィードバック アイコン</Japanese>
<Korean>피드백 아이콘</Korean>
<Chinese>回饋圖標</Chinese>
<Chinesesimp>回馈图标</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
<English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English>
@ -463,6 +523,8 @@
<Portuguese>Selecione a posição ou disabilite a posição dos ícones de feedback na sua tela. Esses ícones irão aparecer para mostrar feedback extra do status do seu personagem e ações realizadas.</Portuguese>
<Japanese>画面上に表示するフィードバック アイコンの位置や無効化を選択できます。このアイコンは自キャラクター状態や動作の状況をフィードバックするために表示されています。</Japanese>
<Korean>피드백 아이콘의 위치를 설정하거나 비활성화합니다. 피드백 아이콘은 캐릭터의 상세정보와 행동을 보여줍니다.</Korean>
<Chinese>選擇位置或取消回饋圖標顯示在螢幕上. 這些圖標將顯示出你角色額外的狀態與行動等資訊.</Chinese>
<Chinesesimp>选择位置或取消回馈图标显示在荧幕上. 这些图标将显示出你角色额外的状态与行动等资讯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
<English>Progress bar location</English>
@ -477,6 +539,8 @@
<Portuguese>Local da barra de progresso</Portuguese>
<Japanese>プログレス バーの位置</Japanese>
<Korean>진행 막대의 위치</Korean>
<Chinese>進度欄位置</Chinese>
<Chinesesimp>进度栏位置</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
<English>Set the desired location of the progress bar on your screen.</English>
@ -491,6 +555,8 @@
<Portuguese>Define o local desejado da barra de progresso na sua tela.</Portuguese>
<Japanese>画面上に表示されるプログレス バーの位置を設定できます。</Japanese>
<Korean>진행 막대를 원하는 곳에 배치합니다.</Korean>
<Chinese>設定進度欄在畫面中的位置</Chinese>
<Chinesesimp>设定进度栏在画面中的位置</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
<English>Hint Background color</English>
@ -505,6 +571,8 @@
<Portuguese>Cor do fundo da hint</Portuguese>
<Japanese>ヒントの背景色</Japanese>
<Korean>힌트 배경색</Korean>
<Chinese>提示的背景顏色</Chinese>
<Chinesesimp>提示的背景颜色</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
<English>The color of the background from the ACE hints.</English>
@ -519,6 +587,8 @@
<Portuguese>A cor de fundo das hints do ACE.</Portuguese>
<Japanese>ACE によるヒントの背景色を指定します。</Japanese>
<Korean>ACE힌트의 배경색을 정합니다.</Korean>
<Chinese>設定ACE提示的背景顏色.</Chinese>
<Chinesesimp>设定ACE提示的背景颜色.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
<English>Hint text font color</English>
@ -533,6 +603,8 @@
<Portuguese>Cor do do texto da hint</Portuguese>
<Japanese>ヒント文章の色</Japanese>
<Korean>힌트 글씨색</Korean>
<Chinese>提示文字的顏色</Chinese>
<Chinesesimp>提示文字的颜色</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
@ -547,6 +619,8 @@
<Portuguese>A cor do texto das hints do ACE. Essa cor é a cor default para todos os texos exibidos pelo sistema de hints do ACE , caso o texto da hint não tem outra cor especificada.</Portuguese>
<Japanese>ACE によるヒントの文章へ、色を設定できます。この色は ACE ヒント システムを介して表示される全文章の色と標準でなっており、特定の色を設定していても、標準色になります。</Japanese>
<Korean>ACE 힌트에 쓰이는 글씨 색입니다. 힌트 글씨의 색이 정해지지 않을경우 모든 힌트의 색은 기본으로 설정됩니다.</Korean>
<Chinese>設定ACE提示文字的顏色. 若提示字體並無指定其他顏色, 將會自動選用ACE系統的預設顏色</Chinese>
<Chinesesimp>设定ACE提示文字的颜色. 若提示字体并无指定其他颜色, 将会自动选用ACE系统的预设颜色</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_bananaDisplayName">
<English>Banana</English>
@ -561,6 +635,8 @@
<Portuguese>Banana</Portuguese>
<Japanese>甘蕉</Japanese>
<Korean>바나나</Korean>
<Chinese>香蕉</Chinese>
<Chinesesimp>香蕉</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_bananaDescr">
<English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English>
@ -575,6 +651,8 @@
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
<Japanese>甘蕉は食べられる果物でバショウ科バショウ属のうち、果実を食用とする品種群の総称。また、その果実のこと。いくつかの原種から育種された多年草。種によっては熟すまでは毒を持つものもある。</Japanese>
<Korean>바나나는 식용 과일로써 식물학적으로 열매류이며 여러 종류의 개화가능한 초본의 파초과로 부터 생산됩니다.</Korean>
<Chinese>香蕉(學名: Musa × paradisiaca), 為芭蕉科芭蕉屬小果野蕉及野蕉的人工栽培雜交種, 為多年生草本植物. 果實長有棱; 果皮黃色, 果肉白色, 味道香甜. 主要生長在熱帶、亞熱帶地區. 原產於亞洲東南部熱帶、亞熱帶地區.</Chinese>
<Chinesesimp>香蕉(学名: Musa × paradisiaca), 为芭蕉科芭蕉属小果野蕉及野蕉的人工栽培杂交种, 为多年生草本植物. 果实长有棱; 果皮黄色, 果肉白色, 味道香甜. 主要生长在热带、亚热带地区. 原产于亚洲东南部热带、亚热带地区.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
<English>Check PBOs</English>
@ -589,6 +667,8 @@
<Italian>Controlla PBO</Italian>
<Japanese>PBO を検査</Japanese>
<Korean>PBO 검사</Korean>
<Chinese>檢查PBO檔</Chinese>
<Chinesesimp>检查PBO档</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Description">
<English>Check addon integrity with server and do selected action if an addon is missing.</English>
@ -602,6 +682,8 @@
<Italian>Controlla l'integrità degli addon con il server ed esegui l'azione selezionata se un addon è mancante</Italian>
<Japanese>サーバがアドオンの整合性を検査し、もし不備があれば実行する動作を選択できます。</Japanese>
<Korean>서버 에드온의 무결성을 검사하고 사라진 에드온이 있을경우 행동을 선택합니다.</Korean>
<Chinese>檢查客戶端與伺服器端的模組清單是否一致且完整, 並提供訊息表示遺失的模組.</Chinese>
<Chinesesimp>检查客户端与伺服器端的模组清单是否一致且完整, 并提供讯息表示遗失的模组.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English>
@ -616,6 +698,8 @@
<Italian>Azione</Italian>
<Japanese>動作</Japanese>
<Korean>작동</Korean>
<Chinese>動作</Chinese>
<Chinesesimp>动作</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English>
@ -630,6 +714,8 @@
<Italian>Cosa fare con giocatori che non hanno i PBO corretti?</Italian>
<Japanese>プレイヤーが正しい PBO を持っていない場合は?</Japanese>
<Korean>올바르지 않는 PBO를 가진 사람을 어떻게 할까요?</Korean>
<Chinese>若玩家沒有正確的PBO檔時, 將採取何種動作?</Chinese>
<Chinesesimp>若玩家没有正确的PBO档时, 将采取何种动作?</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English>
@ -644,6 +730,8 @@
<Italian>Avverti una volta</Italian>
<Japanese>一度の警告</Japanese>
<Korean>경고 한 번</Korean>
<Chinese>警告 (一次)</Chinese>
<Chinesesimp>警告 (一次)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English>
@ -658,6 +746,8 @@
<Italian>Avverti (permanente)</Italian>
<Japanese>警告(永久的)</Japanese>
<Korean>경고 (영구적)</Korean>
<Chinese>警告 (持續)</Chinese>
<Chinesesimp>警告 (持续)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English>
@ -672,6 +762,8 @@
<Italian>Kick</Italian>
<Japanese>排除</Japanese>
<Korean>추방</Korean>
<Chinese>踢除</Chinese>
<Chinesesimp>踢除</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English>
@ -686,6 +778,8 @@
<Italian>Controlla tutti gli addon</Italian>
<Japanese>全アドオンを検査</Japanese>
<Korean>모든 에드온 검사</Korean>
<Chinese>檢查所有模組</Chinese>
<Chinesesimp>检查所有模组</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English>
@ -700,6 +794,8 @@
<Italian>Controlla tutti gli addon invece dei soli addon ACE?</Italian>
<Japanese>ACE MOD の代わりに全アドオンを検査しますか?</Japanese>
<Korean>ACE를 제외한 모든 모드를 검사할까요?</Korean>
<Chinese>檢查包含ACE之外的其他模組?</Chinese>
<Chinesesimp>检查包含ACE之外的其他模组?</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English>
@ -714,6 +810,8 @@
<Italian>Lista Bianca</Italian>
<Japanese>許可制</Japanese>
<Korean>화이트리스트</Korean>
<Chinese>白名單</Chinese>
<Chinesesimp>白名单</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English>
@ -728,6 +826,8 @@
<Italian>Quali addon sono permessi in ogni caso?</Italian>
<Japanese>どのようなアドオンを許可しますか?</Japanese>
<Korean>허가되는 에드온은 어느것입니까?</Korean>
<Chinese>哪些模組是可被允許/忽略的?</Chinese>
<Chinesesimp>哪些模组是可被允许/忽略的?</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English>
@ -742,6 +842,8 @@
<Italian>Veicoli LSD</Italian>
<Japanese>LSD 車両</Japanese>
<Korean>LSD 차량</Korean>
<Chinese>迷幻載具</Chinese>
<Chinesesimp>迷幻载具</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English>
@ -756,6 +858,8 @@
<Italian>Aggiunge effetti LSD ai veicoli sincronizzati</Italian>
<Japanese>同期されたオブジェクトに LSD の効果を追加します</Japanese>
<Korean>동기화된 차량에 LSD효과를 추가합니다.</Korean>
<Chinese>使被同步的載具產生瘋狂的迷幻效果. (後果自負)</Chinese>
<Chinesesimp>使被同步的载具产生疯狂的迷幻效果. (后果自负)</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_toggleHandheldDevice">
<English>Toggle Handheld Device</English>
@ -770,6 +874,8 @@
<Italian>Apri dispositivo palmare</Italian>
<Japanese>デバイスを常に表示</Japanese>
<Korean>휴대장치 토글</Korean>
<Chinese>切換手持裝備</Chinese>
<Chinesesimp>切换手持装备</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_closeHandheldDevice">
<English>Close Handheld Device</English>
@ -784,6 +890,8 @@
<Italian>Chiudi dispositivo palmare</Italian>
<Japanese>デバイスを閉じる</Japanese>
<Korean>휴대장치 닫기</Korean>
<Chinese>關閉手持裝備</Chinese>
<Chinesesimp>关闭手持装备</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_cycleHandheldDevices">
<English>Cycle Handheld Devices</English>
@ -798,6 +906,8 @@
<Italian>Cicla tra dispositivi palmari</Italian>
<Japanese>表示するデバイスを変える</Japanese>
<Korean>휴대장치 순환</Korean>
<Chinese>循環切換手持裝備</Chinese>
<Chinesesimp>循环切换手持装备</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Disabled">
<English>Disabled</English>
@ -811,6 +921,8 @@
<Spanish>Desactivado</Spanish>
<Japanese>無効化</Japanese>
<Korean>비활성화</Korean>
<Chinese>停用</Chinese>
<Chinesesimp>停用</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Enabled">
<English>Enabled</English>
@ -824,6 +936,8 @@
<Spanish>Activado</Spanish>
<Japanese>有効化</Japanese>
<Korean>활성화</Korean>
<Chinese>啟用</Chinese>
<Chinesesimp>启用</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Always">
<English>Always</English>
@ -883,6 +997,8 @@
<Italian>Si</Italian>
<Japanese>はい</Japanese>
<Korean></Korean>
<Chinese></Chinese>
<Chinesesimp></Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_No">
<English>No</English>
@ -897,6 +1013,8 @@
<Italian>No</Italian>
<Japanese>いいえ</Japanese>
<Korean>아니오</Korean>
<Chinese></Chinese>
<Chinesesimp></Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Never">
<English>Never</English>
@ -913,6 +1031,8 @@
<French>Vehicules seulement</French>
<Japanese>車両のみ</Japanese>
<Korean>차량 전용</Korean>
<Chinese>只有載具</Chinese>
<Chinesesimp>只有载具</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_DoNotForce">
<English>Do Not Force</English>
@ -926,6 +1046,8 @@
<French>Ne pas forcer</French>
<Japanese>強制しない</Japanese>
<Korean>강제하지 말것</Korean>
<Chinese>不要強行</Chinese>
<Chinesesimp>不要强行</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryEquipment">
<English>ACE3 Equipment</English>
@ -939,6 +1061,8 @@
<French>ACE3 Equipement</French>
<Japanese>ACE3 装備</Japanese>
<Korean>ACE3 장비</Korean>
<Chinese>ACE3 裝備按鍵</Chinese>
<Chinesesimp>ACE3 装备按键</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryCommon">
<English>ACE3 Common</English>
@ -952,6 +1076,8 @@
<French>ACE3 Commun</French>
<Japanese>ACE3 全般</Japanese>
<Korean>ACE3 일반</Korean>
<Chinese>ACE3 通用按鍵</Chinese>
<Chinesesimp>ACE3 通用按键</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryWeapons">
<English>ACE3 Weapons</English>
@ -965,6 +1091,8 @@
<French>ACE3 Armes</French>
<Japanese>ACE3 武器</Japanese>
<Korean>ACE3 무기</Korean>
<Chinese>ACE3 武器按鍵</Chinese>
<Chinesesimp>ACE3 武器按键</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryMovement">
<English>ACE3 Movement</English>
@ -978,6 +1106,8 @@
<French>ACE3 Mouvement</French>
<Japanese>ACE3 移動</Japanese>
<Korean>ACE3 움직임</Korean>
<Chinese>ACE3 動作按鍵</Chinese>
<Chinesesimp>ACE3 动作按键</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryScopeAdjustment">
<English>ACE3 Scope Adjustment</English>
@ -991,6 +1121,8 @@
<French>ACE3 Ajustement de la lunette </French>
<Japanese>ACE3 スコープ調節</Japanese>
<Korean>ACE3 조준경 조정</Korean>
<Chinese>ACE3 瞄準鏡調節按鍵</Chinese>
<Chinesesimp>ACE3 瞄准镜调节按键</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryVehicles">
<English>ACE3 Vehicles</English>
@ -1004,6 +1136,8 @@
<French>ACE3 Vehicules</French>
<Japanese>ACE3 車両</Japanese>
<Korean>ACE3 차량</Korean>
<Chinese>ACE3 載具按鍵</Chinese>
<Chinesesimp>ACE3 载具按键</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_NoRoomToUnload">
<English>No Room to unload</English>
@ -1016,6 +1150,8 @@
<Portuguese>Sem espaço para descarregar</Portuguese>
<Russian>Нет места для выгрузки</Russian>
<Japanese>降ろすための空間がありません</Japanese>
<Chinese>沒有空間可卸載</Chinese>
<Chinesesimp>没有空间可卸载</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_KeybindToggle">
<English>Toggle</English>
@ -1030,6 +1166,8 @@
<Portuguese>alternar</Portuguese>
<Japanese>トグル</Japanese>
<Korean>토글</Korean>
<Chinese>切換</Chinese>
<Chinesesimp>切换</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -14,6 +14,8 @@
<Portuguese>Arame farpado</Portuguese>
<Japanese>鉄条網</Japanese>
<Korean>철조망</Korean>
<Chinese>鐵絲網</Chinese>
<Chinesesimp>铁丝网</Chinesesimp>
</Key>
<Key ID="STR_ACE_CONCERTINA_WIRECOIL">
<English>Concertina Wire Coil</English>
@ -28,6 +30,8 @@
<Portuguese>Bobina de arame farpado</Portuguese>
<Japanese>鉄条網コイル</Japanese>
<Korean>윤형 철조망</Korean>
<Chinese>鐵絲網捲</Chinese>
<Chinesesimp>铁丝网卷</Chinesesimp>
</Key>
<Key ID="STR_ACE_UNROLLWIRE">
<English>Dismount Concertina Wire</English>
@ -42,6 +46,8 @@
<Portuguese>Desmontar arame farpado</Portuguese>
<Japanese>鉄条網をほどく</Japanese>
<Korean>철조망 해체</Korean>
<Chinese>卸下鐵絲網</Chinese>
<Chinesesimp>卸下铁丝网</Chinesesimp>
</Key>
<Key ID="STR_ACE_ROLLWIRE">
<English>Deploy Concertina Wire</English>
@ -56,6 +62,8 @@
<Portuguese>Colocar arame farpado</Portuguese>
<Japanese>鉄条網を置く</Japanese>
<Korean>철조망 배치</Korean>
<Chinese>佈署鐵絲網</Chinese>
<Chinesesimp>布署铁丝网</Chinesesimp>
</Key>
</Package>
</Project>

View File

@ -1,13 +1,18 @@
class CfgSFX {
class GVAR(CookOff) {
name = QGVAR(cookoff);
// Index 4 is percentage chance to play, in theory high pressure is way more likely
variant0[] = {PATHTOF(sounds\cookoff_low_pressure.ogg),6,1,400,0.1,0,0,0};
variant1[] = {PATHTOF(sounds\cookoff_mid_pressure.ogg),6,1,400,0.25,0,0,0};
variant2[] = {PATHTOF(sounds\cookoff_high_pressure.ogg),6,1,400,0.65,0,0,0};
sounds[] = {"variant0","variant1","variant2"};
class GVAR(CookOff_low) {
name = QGVAR(cookoff_low);
sound[] = {QPATHTOF(sounds\cookoff_low_pressure.ogg),6,1,400,1,0,0,0};
sounds[] = {"sound"};
titles[] = {};
empty[] = {"",0,0,0,0,0,0,0};
};
class GVAR(CookOff_mid): GVAR(CookOff_low) {
name = QGVAR(cookoff_mid);
sound[] = {QPATHTOF(sounds\cookoff_mid_pressure.ogg),6,1,400,1,0,0,0};
};
class GVAR(CookOff_high): GVAR(CookOff_low) {
name = QGVAR(cookoff_high);
sound[] = {QPATHTOF(sounds\cookoff_high_pressure.ogg),6,1,400,1,0,0,0};
};
};

View File

@ -1,11 +1,18 @@
class CfgVehicles {
class Sound;
class GVAR(Sound): Sound {
class GVAR(Sound_low): Sound {
author = ECSTRING(common,ACETeam);
_generalMacro = QGVAR(Sound);
scope = 1;
sound = QGVAR(CookOff);
sound = QGVAR(CookOff_low);
};
class GVAR(Sound_mid): GVAR(Sound_low) {
sound = QGVAR(CookOff_mid);
};
class GVAR(Sound_high): GVAR(Sound_low) {
sound = QGVAR(CookOff_high);
};
class ThingX;

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