Compare commits
149 Commits
emp
...
6b33680e77
| Author | SHA1 | Date | |
|---|---|---|---|
| 6b33680e77 | |||
|
|
3db6191e0d | ||
|
|
fef05fa153 | ||
|
|
2bd8a16079 | ||
| 1fbda6ac95 | |||
| dbc380c6af | |||
| 22c1f1a21a | |||
|
|
3f4d4147a3 | ||
| c9c15681ce | |||
| 840652f853 | |||
| 05936d9213 | |||
| 84ab6a1ca7 | |||
| 175988efe6 | |||
| b60f7922f3 | |||
|
|
071a056dc8 | ||
|
|
c31e5cf9ac | ||
| 69aed97ce3 | |||
| 5cf3ea5c1f | |||
| 38d03353b3 | |||
| ca478ab08d | |||
| f6703e7dd4 | |||
|
|
ea64f8e63c | ||
| 3308cdc5ba | |||
| a35c39721e | |||
| dba0a0e57c | |||
| 888a688f56 | |||
| c94f660682 | |||
|
|
7e93ebfbfd | ||
|
|
e0c8f3c952 | ||
|
|
d200f83375 | ||
| 51c5da44ce | |||
| 0f5569c5ba | |||
|
|
448fad1ee0 | ||
|
|
2210dc1a70 | ||
|
|
7e5e7e26af | ||
|
|
7c6130891a | ||
|
|
eee4ac1b83 | ||
| faf84a0bf2 | |||
| 68d793a519 | |||
| 2e67e0e932 | |||
| 04546e49f7 | |||
| 8cfebeef10 | |||
| 8c6c1f6a62 | |||
|
1fea46355a
|
|||
|
de91b61fcc
|
|||
| fedc6f1432 | |||
| b34928c0c3 | |||
| 2d9e5aabef | |||
| 87ebbae31c | |||
| 408228f07b | |||
| 736e90e305 | |||
| f17fff8363 | |||
| 64bc303893 | |||
| 80247a01d0 | |||
|
7c8cd6104b
|
|||
|
7322799b78
|
|||
| 8f89283ceb | |||
|
|
db7bdf1ecd | ||
|
|
0f8783ffa9 | ||
| af7600ac16 | |||
|
|
fac86f18f0 | ||
|
|
87b6f359c1 | ||
|
|
cbd8b5963e | ||
|
|
09ee014912 | ||
|
|
5b482b022f | ||
|
|
8afe420527 | ||
| ff98546907 | |||
| 5a1e6dd1a1 | |||
|
|
0524af05b9 | ||
|
|
023550743d | ||
|
|
ab28ed4e50 | ||
|
|
8794dc226d | ||
|
|
2bfaaacfc6 | ||
| 8a4f161df9 | |||
| cc5b8bbf45 | |||
|
eb4959a2ba
|
|||
|
643a7f212b
|
|||
| 6c4740dd1f | |||
|
|
f128e0fec8 | ||
|
|
32dda56f69 | ||
|
|
90f3caf1f9 | ||
| 706794a114 | |||
|
|
ee43868a32 | ||
|
|
e7af2f115e | ||
| c1aeace994 | |||
| d9beb44c72 | |||
|
|
44b842ad33 | ||
| d9b5dd66a8 | |||
| d6549fc040 | |||
|
|
073f5ffd63 | ||
|
|
53a8b782e6 | ||
|
737f1ef7ee
|
|||
|
|
3e4eda2843 | ||
|
|
34c36f58e2 | ||
| 1279503743 | |||
| 35dd63cbab | |||
| 3c0124070e | |||
|
|
77c3b0d67a | ||
|
|
2a776718c0 | ||
|
5d50375256
|
|||
|
6917db3b7d
|
|||
|
d2b8e10baf
|
|||
|
496fd21830
|
|||
|
f3c95322e9
|
|||
|
7d10d2622d
|
|||
|
a20f477ee0
|
|||
|
c29e46d5f7
|
|||
|
de074b62f2
|
|||
|
|
40ee46ea98 | ||
|
|
10ef37cb80 | ||
|
|
74b630bfaa | ||
|
|
e64b29479d | ||
|
|
d25e67182a | ||
|
|
2218898ff7 | ||
|
|
4976aa51b8 | ||
|
|
ddf0fe91d4 | ||
|
|
72bac32219 | ||
|
|
21dbb725ac | ||
|
|
57c012195a | ||
|
|
d71ba9e3bd | ||
|
|
32491da46f | ||
|
|
94814b6d07 | ||
|
|
d2a557dda1 | ||
|
|
81f4bb4d48 | ||
|
|
6f5a0ca523 | ||
|
|
4eae553c6d | ||
|
|
3194409192 | ||
|
293a050027
|
|||
|
d2758b7570
|
|||
|
|
1bdbdd1273 | ||
|
|
d4c01c6554 | ||
|
|
2866153654 | ||
|
|
23dc0656a6 | ||
|
4fb0ea9a15
|
|||
| ef83d41a32 | |||
| e76da62b7f | |||
|
|
aaad8675a6 | ||
| c00f1b0e17 | |||
|
|
8e10819b92 | ||
|
9f89ec12d5
|
|||
|
e55c9a0751
|
|||
|
|
68f35a9b44 | ||
|
|
f11cadbd06 | ||
|
|
a00f6cb0da | ||
|
5114ae334f
|
|||
|
296f945ea3
|
|||
|
fdcf70b713
|
|||
|
|
1e5d50828b | ||
| f8af54aa06 |
37
.gitea/ISSUE_TEMPLATE/bug_report.yaml
Normal file
37
.gitea/ISSUE_TEMPLATE/bug_report.yaml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Bug Report
|
||||||
|
about: File a bug report to help us improve
|
||||||
|
title: ""
|
||||||
|
labels: "Kind/Bug"
|
||||||
|
ref: main
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this bug report!
|
||||||
|
- type: textarea
|
||||||
|
id: what-happened
|
||||||
|
attributes:
|
||||||
|
label: Describe the bug!
|
||||||
|
description: What did you see, and what did you expect to happen.
|
||||||
|
render: markdown
|
||||||
|
value: "A bug happened!"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: reproduce-steps
|
||||||
|
attributes:
|
||||||
|
label: How can we reproduce this?
|
||||||
|
description: "Steps to reproduce the behavior, and attach full log here if needed."
|
||||||
|
value: |
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Relevant log output?
|
||||||
|
description: Please copy and paste any relevant log output. This will be automatically formatted into code.
|
||||||
|
render: shell
|
||||||
1
.gitea/ISSUE_TEMPLATE/config.yaml
Normal file
1
.gitea/ISSUE_TEMPLATE/config.yaml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
blank_issues_enabled: true
|
||||||
34
.gitea/ISSUE_TEMPLATE/feature_request.yaml
Normal file
34
.gitea/ISSUE_TEMPLATE/feature_request.yaml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
name: Feature Request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ""
|
||||||
|
labels: "Kind/Feature"
|
||||||
|
ref: main
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to suggest an idea to us!
|
||||||
|
- type: textarea
|
||||||
|
id: feature-description
|
||||||
|
attributes:
|
||||||
|
label: Is your feature request related to a problem?
|
||||||
|
description: A clear and concise description of what the problem is.
|
||||||
|
render: markdown
|
||||||
|
value: " I'm always frustrated when [...]"
|
||||||
|
- type: textarea
|
||||||
|
id: feature-solution
|
||||||
|
attributes:
|
||||||
|
label: Describe the solution you would like.
|
||||||
|
description: "A clear and concise description of what you want to happen. Context and screenshots welcome!"
|
||||||
|
value: |
|
||||||
|
1. Go to '...'
|
||||||
|
2. Look at '....'
|
||||||
|
3. Change to '....'
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: feature-references
|
||||||
|
attributes:
|
||||||
|
label: Describe the alternatives you have considered.
|
||||||
|
description: "A clear and concise description of any alternative solutions or features you've considered."
|
||||||
|
render: markdown
|
||||||
71
.gitea/workflows/on-push-devel.yaml
Normal file
71
.gitea/workflows/on-push-devel.yaml
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
name: Generate testing snapshot
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [develop]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Clean:
|
||||||
|
name: Create testing release
|
||||||
|
runs-on: windows
|
||||||
|
steps:
|
||||||
|
- name: Diagnostics
|
||||||
|
run: |
|
||||||
|
echo "repository: ${{ gitea.repository }}"
|
||||||
|
echo "ref: ${{ gitea.ref }}"
|
||||||
|
echo "ref_name: ${{ gitea.ref_name }}"
|
||||||
|
echo "sha: ${{ gitea.sha }}"
|
||||||
|
echo "api_url: ${{ gitea.api_url }}"
|
||||||
|
echo "workflow: ${{ gitea.workflow }}"
|
||||||
|
|
||||||
|
- name: Checkout framework
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
path: MissionFramework
|
||||||
|
|
||||||
|
- name: Clean framework
|
||||||
|
run: |
|
||||||
|
Remove-Item -Recurse MissionFramework\aaFrameworkUtils
|
||||||
|
Remove-Item -Recurse MissionFramework\framework\x
|
||||||
|
Remove-Item -Recurse MissionFramework\.git*
|
||||||
|
|
||||||
|
- name: Backup artifacts from runner
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: framework-test-snapshot
|
||||||
|
path: MissionFramework
|
||||||
|
|
||||||
|
- name: Create archive
|
||||||
|
run: Compress-Archive MissionFramework framework-test-snapshot.zip
|
||||||
|
|
||||||
|
- name: Delete old testing-release release
|
||||||
|
run: |
|
||||||
|
$headers = @{
|
||||||
|
"accept" = "application/json"
|
||||||
|
"Authorization" = "token ${{ gitea.token }}"
|
||||||
|
}
|
||||||
|
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/tags/testing-release" -Method Delete -Headers $headers
|
||||||
|
|
||||||
|
- name: Delete old testing-release tag
|
||||||
|
run: |
|
||||||
|
$headers = @{
|
||||||
|
"accept" = "application/json"
|
||||||
|
"Authorization" = "token ${{ gitea.token }}"
|
||||||
|
}
|
||||||
|
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/tags/testing-release" -Method Delete -Headers $headers
|
||||||
|
|
||||||
|
- name: Create new testing-release tag
|
||||||
|
run: |
|
||||||
|
$headers = @{
|
||||||
|
"accept" = "application/json"
|
||||||
|
"Authorization" = "token ${{ gitea.token }}"
|
||||||
|
}
|
||||||
|
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/tags" -Method Post -Headers $headers -ContentType "application/json" -Body "{`"message`": `"testing-release`", `"tag_name`": `"testing-release`", `"target`": `"${{ gitea.sha }}`"}"
|
||||||
|
|
||||||
|
- name: Create new testing-release
|
||||||
|
uses: https://gitea.com/actions/gitea-release-action@v1.3.0
|
||||||
|
with:
|
||||||
|
tag_name: 'testing-release'
|
||||||
|
name: 'testing-release'
|
||||||
|
prerelease: true
|
||||||
|
files: |-
|
||||||
|
framework-test-snapshot.zip
|
||||||
70
.gitea/workflows/on-release.yaml
Normal file
70
.gitea/workflows/on-release.yaml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
name: Pack Release files
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
DispatchZGMBuild:
|
||||||
|
name: Dispatch MissionZGM build job
|
||||||
|
runs-on: windows
|
||||||
|
steps:
|
||||||
|
- name: Diagnostics
|
||||||
|
run: |
|
||||||
|
echo "repository: ${{ gitea.repository }}"
|
||||||
|
echo "ref: ${{ gitea.ref }}"
|
||||||
|
echo "ref_name: ${{ gitea.ref_name }}"
|
||||||
|
echo "sha: ${{ gitea.sha }}"
|
||||||
|
echo "api_url: ${{ gitea.api_url }}"
|
||||||
|
echo "workflow: ${{ gitea.workflow }}"
|
||||||
|
|
||||||
|
- name: Publish remote issue
|
||||||
|
run: |
|
||||||
|
$headers = @{
|
||||||
|
"accept" = "application/json"
|
||||||
|
"Authorization" = "token ${{ secrets.RUNNER_ISSUE_TOKEN }}"
|
||||||
|
}
|
||||||
|
$response = Invoke-RestMethod -Uri "${{ gitea.api_url }}/repos/17th-Ranger-Battalion-ORG/MissionsForZGM/issues" -Method Post -Headers $headers -ContentType "application/json" -Body "{`"title`": `"publish-release`"}"
|
||||||
|
|
||||||
|
CreateRelease:
|
||||||
|
name: Publish cleaned template
|
||||||
|
runs-on: windows
|
||||||
|
steps:
|
||||||
|
- name: Diagnostics
|
||||||
|
run: |
|
||||||
|
echo "repository: ${{ gitea.repository }}"
|
||||||
|
echo "ref: ${{ gitea.ref }}"
|
||||||
|
echo "ref_name: ${{ gitea.ref_name }}"
|
||||||
|
echo "sha: ${{ gitea.sha }}"
|
||||||
|
echo "api_url: ${{ gitea.api_url }}"
|
||||||
|
echo "workflow: ${{ gitea.workflow }}"
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: 'main'
|
||||||
|
path: release
|
||||||
|
|
||||||
|
- name: Prepare template
|
||||||
|
run: |
|
||||||
|
mkdir MissionTemplate
|
||||||
|
cd MissionTemplate
|
||||||
|
Get-ChildItem ..\release\ | Copy-Item -Recurse
|
||||||
|
Remove-Item -Recurse aaFrameworkUtils
|
||||||
|
Remove-Item -Recurse framework\x
|
||||||
|
Remove-Item -Recurse .git*
|
||||||
|
Get-ChildItem
|
||||||
|
|
||||||
|
- name: Create archive
|
||||||
|
run: |
|
||||||
|
cd release
|
||||||
|
$revision = git rev-parse --short=10 HEAD
|
||||||
|
$tag = git describe --abbrev=0 --tags
|
||||||
|
cd ..
|
||||||
|
Compress-Archive MissionTemplate mission-maker-template-v$tag-$revision.zip
|
||||||
|
|
||||||
|
- name: Add archive to release
|
||||||
|
uses: https://gitea.com/actions/gitea-release-action@v1.3.0
|
||||||
|
with:
|
||||||
|
files: |-
|
||||||
|
mission-maker-template*.zip
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,3 +2,5 @@
|
|||||||
# Notepad++ backups #
|
# Notepad++ backups #
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
|
||||||
|
.vscode/
|
||||||
|
|||||||
99
CHANGELOG.md
99
CHANGELOG.md
@@ -4,6 +4,103 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [4.2.3] - 2025-05-24
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Warlord Vehicle Flag
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Campaign Callsigns
|
||||||
|
- Equipment Changes
|
||||||
|
- Supply Crate contents
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Update chat logic handler for new cba settings
|
||||||
|
|
||||||
|
## [4.2.2] - 2024-12-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- CBA settings to allow disabling of remaining text chat channels
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Log triage level on player respawn
|
||||||
|
- Campaign Callsigns
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Equipment typos
|
||||||
|
|
||||||
|
## [4.2.1] - 2024-06-23
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Allowed Equipment Definition typo
|
||||||
|
|
||||||
|
## [4.2.0] - 2024-06-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Custom remainsCollector script to replace and supplement the built in arma remainsCollector function
|
||||||
|
- New Resupply Boxes
|
||||||
|
- Ability to spawn spare tires and tracks at the arsenal and via Zeus module
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Split vehicle flags into colors and shapes for additional options
|
||||||
|
- Battalion Callsigns
|
||||||
|
- Allowed Equipment Definitions
|
||||||
|
- Resupply Box Contents
|
||||||
|
- Fixed incorrect ace carry variable setting
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- SMA mod references
|
||||||
|
- Extraneous server performance calculation broadcast to all clients
|
||||||
|
- Ability for pilots to check re-insertion queue
|
||||||
|
|
||||||
|
## [4.1.2] - 2024-04-25
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Fix internal versioning
|
||||||
|
- Swap resupply box 5.56 magazines due to mod conflict
|
||||||
|
- Group deletion handler now properly processes empty groups and logs errors
|
||||||
|
|
||||||
|
## [4.1.1] - 2024-04-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Function to remove lightning bolt from zeus
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Alpha Callsign
|
||||||
|
- Allowed Equipment Definitions
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Custom tire patch code
|
||||||
|
- Extraneous server performance calculation broadcast to all clients
|
||||||
|
|
||||||
|
## [4.1.0] - 2024-03-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added ability for mission maker to use custom leaflets
|
||||||
|
- Added ability for mission maker to define points of interested to be automatically added as MicroDAGR waypoints
|
||||||
|
- Added `missionGroup` variable in `description.ext` for backend grouping of mission
|
||||||
|
- Added custom script support via `CfgFunctions`
|
||||||
|
- Added 5 second invulnerability on ejection of air vehicle when parachute equipped
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Track unconsciousness time
|
||||||
|
|
||||||
## [4.0.0] - 2024-02-07
|
## [4.0.0] - 2024-02-07
|
||||||
|
|
||||||
Version 4 marks a massive rewrite due in whole to @IndigoFox by updating the internals of the framework into CBA macros and functions.
|
Version 4 marks a massive rewrite due in whole to @IndigoFox by updating the internals of the framework into CBA macros and functions.
|
||||||
@@ -14,6 +111,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||||||
- Added various framework utitily functions
|
- Added various framework utitily functions
|
||||||
- Added ability for mission maker to allow spawning of resupply boxes from arsenal boxes
|
- Added ability for mission maker to allow spawning of resupply boxes from arsenal boxes
|
||||||
- Added CBA settings for resupply box spawning
|
- Added CBA settings for resupply box spawning
|
||||||
|
- Added additional vehicle flags
|
||||||
|
- Addded Zeus module to fill vehicle ace cargo inventory with tracks/tires
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|||||||
24
README.md
24
README.md
@@ -2,11 +2,10 @@
|
|||||||
|
|
||||||
The only file which should be pre-existing in your mission folder is `mission.sqm`, once freshly saved from Arma 3's EDEN Editor.
|
The only file which should be pre-existing in your mission folder is `mission.sqm`, once freshly saved from Arma 3's EDEN Editor.
|
||||||
|
|
||||||
Download the latest mission template zip from the [latest release](https://17th-gs.iceberg-gaming.com:5443/hizumi/MissionTemplate/releases/latest) and copy its contents to the folder where your mission file lives.
|
Download the latest mission template zip from the [latest release](https://gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/MissionTemplate/releases/latest) and copy its contents to the folder where your mission file lives.
|
||||||
|
|
||||||
Once copied, the final structure should appear similar to the following:
|
Once copied, the final structure should appear similar to the following:
|
||||||
```markdown
|
```
|
||||||
├── aaFrameworkUtils/
|
|
||||||
├── defines/
|
├── defines/
|
||||||
├── framework/
|
├── framework/
|
||||||
├── images/
|
├── images/
|
||||||
@@ -14,13 +13,17 @@ Once copied, the final structure should appear similar to the following:
|
|||||||
├── sounds/
|
├── sounds/
|
||||||
├── textures/
|
├── textures/
|
||||||
├── CHANGELOG.md
|
├── CHANGELOG.md
|
||||||
|
├── custom_leaflets.hpp
|
||||||
|
├── custom_scripts.hpp
|
||||||
|
├── CHANGELOG.md
|
||||||
├── description.ext
|
├── description.ext
|
||||||
├── mission_settings.hpp
|
|
||||||
├── mission.jpg
|
├── mission.jpg
|
||||||
├── mission.sqm
|
├── mission.sqm
|
||||||
|
├── mission_settings.hpp
|
||||||
|
├── README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** If you're building a mission for use and not actively developing code, the `aaFrameworkUtils` and `framework\x` directories **should be deleted**. *These are for the purposes of development and add size bloat to the mission download when players connect to your mission.*
|
> **Note:** If you're building a mission for use and not actively developing code, you should download the `mission-maker-template` zip file which is a cleaned version of this framework. The `aaFrameworkUtils` and `framework\x` directories in the source tree are for the purposes of development and would only add size bloat to the mission download when players connect to your mission.
|
||||||
|
|
||||||
After the requisite configuration file edits have been made, your mission is ready to be packed into a pbo for deployment.
|
After the requisite configuration file edits have been made, your mission is ready to be packed into a pbo for deployment.
|
||||||
|
|
||||||
@@ -38,13 +41,21 @@ Almost none of the template files should be edited in anyway as they have been f
|
|||||||
|
|
||||||
The contents of this file must be edited to reflect the naming of your mission for display purposes. All variables are self-documented inside the file to clearly identify the purpose of each piece of required text
|
The contents of this file must be edited to reflect the naming of your mission for display purposes. All variables are self-documented inside the file to clearly identify the purpose of each piece of required text
|
||||||
|
|
||||||
The contents of the lower half of the file are where the mission maker is able to add/replace/modify the built in `#ace-fortify` preset
|
The contents of the lower half of the file contain templated declaration blocks where the mission maker can define custom waypoints to be automatically added to the ACE MicroDAGR, and define/edit the custom built in `#ace-fortify` preset.
|
||||||
|
|
||||||
## mission.jpg
|
## mission.jpg
|
||||||
|
|
||||||
This file will be displayed the client mission loading screen.
|
This file will be displayed the client mission loading screen.
|
||||||
File should remain small *(under 300KiB)* and should optimally be `1024px by 512px` in resolution
|
File should remain small *(under 300KiB)* and should optimally be `1024px by 512px` in resolution
|
||||||
|
|
||||||
|
## custom_leaflets.hpp
|
||||||
|
|
||||||
|
This file contains the temeplate block for declaring custom leaflets to be used within missions.
|
||||||
|
|
||||||
|
## custom_scripts.hpp
|
||||||
|
|
||||||
|
This file contains an accessbile `CfgFunctions` declaration block for custom functions which require setup in this manner.
|
||||||
|
|
||||||
## defines/
|
## defines/
|
||||||
|
|
||||||
This directory contains the definition files use by the framework in various places. *Contents should not be edited*
|
This directory contains the definition files use by the framework in various places. *Contents should not be edited*
|
||||||
@@ -124,3 +135,4 @@ This directory contains a number of hpp files used to define constants throughou
|
|||||||
- Provides an ACE3 interaction menu that allows players to attach and remove flags from vehicles.
|
- Provides an ACE3 interaction menu that allows players to attach and remove flags from vehicles.
|
||||||
- Flags are defined in `defines/VehicleFlags.hpp`.
|
- Flags are defined in `defines/VehicleFlags.hpp`.
|
||||||
|
|
||||||
|
c
|
||||||
39
custom_leaflets.hpp
Normal file
39
custom_leaflets.hpp
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// This contains custom definitions for leaflets. It is not required to set this up, but you're welcome to if you want to use them.
|
||||||
|
|
||||||
|
// To use this, configure one or more of the below. Then use the pylon editor of a drone in EDEN to add the appropriate magazine type (like 1Rnd_Leaflets_Custom_01_F) to the drone. Then, when the drone is flying, do `drone1 fire "1Rnd_Leaflets_Custom_01_F";` to drop the leaflets. The leaflet will then be shown in the world, and can be picked up by players to read the text and see the image.
|
||||||
|
|
||||||
|
class Custom_01 // configuration for 1Rnd_Leaflets_Custom_01_F
|
||||||
|
{
|
||||||
|
text = "Leaflet text"; // text shown when previewing the leaflet full-screen. Ideally should be localized, so even player who cannot read the image can get the information
|
||||||
|
texture = "images\leaflets\leaflet_custom_01.paa"; // leaflet texture shown when previewing the leaflet full-screen
|
||||||
|
};
|
||||||
|
|
||||||
|
class Custom_02 // configuration for 1Rnd_Leaflets_Custom_02_F
|
||||||
|
{
|
||||||
|
text = "Leaflet text"; // text shown when previewing the leaflet full-screen. Ideally should be localized, so even player who cannot read the image can get the information
|
||||||
|
texture = "images\leaflets\leaflet_custom_02.paa"; // leaflet texture shown when previewing the leaflet full-screen
|
||||||
|
};
|
||||||
|
|
||||||
|
class Custom_03 // configuration for 1Rnd_Leaflets_Custom_03_F
|
||||||
|
{
|
||||||
|
text = "Leaflet text"; // text shown when previewing the leaflet full-screen. Ideally should be localized, so even player who cannot read the image can get the information
|
||||||
|
texture = "images\leaflets\leaflet_custom_03.paa"; // leaflet texture shown when previewing the leaflet full-screen
|
||||||
|
};
|
||||||
|
|
||||||
|
class Custom_04 // configuration for 1Rnd_Leaflets_Custom_04_F
|
||||||
|
{
|
||||||
|
text = "Leaflet text"; // text shown when previewing the leaflet full-screen. Ideally should be localized, so even player who cannot read the image can get the information
|
||||||
|
texture = "images\leaflets\leaflet_custom_04.paa"; // leaflet texture shown when previewing the leaflet full-screen
|
||||||
|
};
|
||||||
|
|
||||||
|
class Custom_05 // configuration for 1Rnd_Leaflets_Custom_05_F
|
||||||
|
{
|
||||||
|
text = "Leaflet text"; // text shown when previewing the leaflet full-screen. Ideally should be localized, so even player who cannot read the image can get the information
|
||||||
|
texture = "images\leaflets\leaflet_custom_05.paa"; // leaflet texture shown when previewing the leaflet full-screen
|
||||||
|
};
|
||||||
|
|
||||||
|
class Custom_06 // configuration for 1Rnd_Leaflets_Custom_06_F
|
||||||
|
{
|
||||||
|
text = "Leaflet text"; // text shown when previewing the leaflet full-screen. Ideally should be localized, so even player who cannot read the image can get the information
|
||||||
|
texture = "images\leaflets\leaflet_custom_06.paa"; // leaflet texture shown when previewing the leaflet full-screen
|
||||||
|
};
|
||||||
11
custom_scripts.hpp
Normal file
11
custom_scripts.hpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// This file's contents will be included in the mission's CfgFunctions section, and serves to give you a place to define custom functions from files you've placed in /scripts.
|
||||||
|
|
||||||
|
class milsim_scripts {
|
||||||
|
class functions {
|
||||||
|
file = "scripts";
|
||||||
|
// Add your custom functions here, like so:
|
||||||
|
// class init {postInit = 1;}; // refers to scripts/fn_init.sqf. postInit=1 means it will be run on each machine when they're done loading the mission.
|
||||||
|
// class customFunction1 {}; // refers to the file scripts/fn_customFunction1.sqf, and is called as milsim_scripts_fnc_customFunction1
|
||||||
|
// class customFunction2 {}; // refers to the file scripts/fn_customFunction2.sqf, and is called as milsim_scripts_fnc_customFunction2
|
||||||
|
};
|
||||||
|
};
|
||||||
8
custom_sounds.hpp
Normal file
8
custom_sounds.hpp
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
// EXAMPLE
|
||||||
|
// class uncon_alarm
|
||||||
|
// {
|
||||||
|
// name = "uncon_alarm";
|
||||||
|
// sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range
|
||||||
|
// titles[]={};
|
||||||
|
// };
|
||||||
@@ -1,22 +1,74 @@
|
|||||||
// Lists approved fixed-wing and rotary vehicle types that mission makers can use in their missions.
|
// Lists approved fixed-wing and rotary vehicle types that mission makers can use in their missions.
|
||||||
|
|
||||||
class ApprovedAssets {
|
class ApprovedAssets {
|
||||||
// Fixed-wing aircraft
|
// APC
|
||||||
class USAF_A10 {callsign = "Ares";};
|
class rhsusf_stryker_m1126_m2_d {callsign = "Katana"; category = "APC";};
|
||||||
class RHSGREF_A29B_HIDF {callsign = "Odyssey";};
|
class rhsusf_stryker_m1126_mk19_d {callsign = "Katana"; category = "APC";};
|
||||||
class USAF_C130J {callsign = "Hercules";};
|
class rhsusf_stryker_m1127_m2_wd {callsign = "Katana"; category = "APC";};
|
||||||
// Rotary aircraft
|
class rhsusf_stryker_m1132_m2_wd {callsign = "Katana"; category = "APC";};
|
||||||
class RHS_MELB_MH6M {callsign = "Apollo";};
|
class rhsusf_stryker_m1134_wd {callsign = "Katana"; category = "APC";};
|
||||||
class RHS_MELB_AH6M {callsign = "Artemis";};
|
class B_APC_Wheeled_01_cannon_F {callsign = "Rapier"; category = "APC";};
|
||||||
class RHS_MELB_H6M {callsign = "Icarus";};
|
class B_APC_Tracked_01_CRV_F {callsign = "DuctTape"; category = "APC";};
|
||||||
class RHS_CH_47F {callsign = "Achilles";};
|
// Rotary
|
||||||
class ej_MH60MDAP4 {callsign = "Hades";};
|
class TF373_SOAR_MH47G_No_Rear_Guns {callsign = "Achilles"; category = "Rotary";};
|
||||||
class RHS_UH60M {callsign = "Griffin";};
|
class TF373_SOAR_MH47G_No_Rear_Guns_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
||||||
class RHS_UH60M_MEV2 {callsign = "Dustoff";};
|
class TF373_SOAR_MH47G {callsign = "Achilles"; category = "Rotary";};
|
||||||
class B_T_VTOL_01_INFANTRY_F {callsign = "Pegasus";};
|
class TF373_SOAR_MH47G_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
||||||
class B_T_VTOL_01_ARMED_F {callsign = "Spartan";};
|
class RHS_CH_47F_10 {callsign = "Achilles"; category = "Rotary";};
|
||||||
class RHS_AH64D {callsign = "Orion";};
|
class RHS_MELB_AH6M {callsign = "Artemis"; category = "Rotary";};
|
||||||
class RHS_AH1Z {callsign = "Athena";};
|
class RHS_MELB_MH6M {callsign = "Apollo"; category = "Rotary";};
|
||||||
class RHS_UH1Y {callsign = "Homer";};
|
class RHS_MELB_H6M {callsign = "Icarus"; category = "Rotary";};
|
||||||
class rhsusf_CH53E_USMC {callsign = "Atlas";};
|
class RHS_UH60M {callsign = "Griffin"; category = "Rotary";};
|
||||||
|
class RHS_UH60M2 {callsign = "Griffin"; category = "Rotary";};
|
||||||
|
class RHS_UH60M_MEV {callsign = "Dustoff"; category = "Rotary";};
|
||||||
|
class ej_MH60MDAP {callsign = "Hades"; category = "Rotary";};
|
||||||
|
class ej_MH60MDAP16H {callsign = "Hades"; category = "Rotary";};
|
||||||
|
class ej_MH60MDAP8H {callsign = "Hades"; category = "Rotary";};
|
||||||
|
class ej_MH60MDAP4 {callsign = "Hades"; category = "Rotary";};
|
||||||
|
class RHS_AH64DGrey {callsign = "Orion"; category = "Rotary";};
|
||||||
|
// Air
|
||||||
|
// Truck
|
||||||
|
class rhsusf_M1078A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";};
|
||||||
|
class rhsusf_M1084A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";};
|
||||||
|
class rhsusf_M1078A1P2_B_WD_CP_fmtv_usarmy {callsign = ""; category = "Truck";};
|
||||||
|
// Boats
|
||||||
|
class rhsusf_mkvsoc {callsign = "Poseidon"; category = "Boats";};
|
||||||
|
class B_Boat_Armed_01_minigun_F {callsign = "Neptune"; category = "Boats";};
|
||||||
|
// MRAP
|
||||||
|
class rhsusf_M1238A1_M2_socom_d {callsign = "Tanto"; category = "MRAP";};
|
||||||
|
class rhsusf_M1238A1_Mk19_socom_d {callsign = "Tanto"; category = "MRAP";};
|
||||||
|
class rhsusf_M1239_M2_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
||||||
|
class rhsusf_M1239_MK19_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
||||||
|
class rhsusf_m1245_m2crows_socom_d {callsign = "Dagger"; category = "MRAP";};
|
||||||
|
class rhsusf_m1245_mk19crows_socom_d {callsign = "Dagger"; category = "MRAP";};
|
||||||
|
class rhsusf_M1239_M2_Deploy_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
||||||
|
// TiltRotor
|
||||||
|
class B_T_VTOL_01_infantry_F {callsign = "Pegasus"; category = "TiltRotor";};
|
||||||
|
class B_T_VTOL_01_armed_F {callsign = "Chimera"; category = "TiltRotor";};
|
||||||
|
// Water
|
||||||
|
// Ground Vehicle
|
||||||
|
// Cars
|
||||||
|
class rhsusf_m1165a1_gmv_m134d_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
||||||
|
class rhsusf_m1165a1_gmv_m2_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
||||||
|
class rhsusf_m1165a1_gmv_mk19_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
||||||
|
class rhsusf_mrzr4_d {callsign = ""; category = "Cars";};
|
||||||
|
class UK3CB_B_M1030_NATO {callsign = ""; category = "Cars";};
|
||||||
|
class B_T_LSV_01_AT_F {callsign = ""; category = "Cars";};
|
||||||
|
class B_T_LSV_01_armed_F {callsign = ""; category = "Cars";};
|
||||||
|
class C_Quadbike_01_F {callsign = ""; category = "Cars";};
|
||||||
|
// Fixed-Wing
|
||||||
|
class B_Plane_CAS_01_dynamicLoadout_F {callsign = "Ares"; category = "Fixed-Wing";};
|
||||||
|
class RHS_A10 {callsign = "Ares"; category = "Fixed-Wing";};
|
||||||
|
class USAF_AC130U {callsign = "Odin"; category = "Fixed-Wing";};
|
||||||
|
class USAF_C130J {callsign = "Hercules"; category = "Fixed-Wing";};
|
||||||
|
class B_Plane_Fighter_01_F {callsign = "Xerxes"; category = "Fixed-Wing";};
|
||||||
|
// Artillery
|
||||||
|
class rhsusf_M142_usarmy_WD {callsign = "Halberd"; category = "Artillery";};
|
||||||
|
class UK3CB_B_M270_MLRS_HE_DES {callsign = "Halberd"; category = "Artillery";};
|
||||||
|
class rhsusf_m109d_usarmy {callsign = "Glaive"; category = "Artillery";};
|
||||||
|
class RHS_M119_D {callsign = "Mailman"; category = "Artillery";};
|
||||||
|
class B_Mortar_01_F {callsign = "Hammer"; category = "Artillery";};
|
||||||
|
// Armor
|
||||||
|
class B_AFV_Wheeled_01_cannon_F {callsign = "Gladius"; category = "Armor";};
|
||||||
|
class B_AFV_Wheeled_01_up_cannon_F {callsign = "Gladius"; category = "Armor";};
|
||||||
};
|
};
|
||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
|
|
||||||
// Define the callsigns for the Battalion
|
// Define the callsigns for the Battalion
|
||||||
#define COMMAND_CALLSIGN SPARTAN
|
#define COMMAND_CALLSIGN POWERLINE
|
||||||
#define RRC_CALLSIGN TIGER
|
//#define RRC_CALLSIGN TIGER
|
||||||
#define MEDIC_CALLSIGN LIFELINE
|
//#define MEDIC_CALLSIGN LIFELINE
|
||||||
#define ALPHA_CALLSIGN BLACKJACK
|
#define ALPHA_CALLSIGN KINGPIN
|
||||||
#define ECHO_CALLSIGN FIREBRAND
|
#define ECHO_CALLSIGN WARLORD
|
||||||
#define WPN_CALLSIGN BLACKFOOT
|
#define WPN_CALLSIGN BLACKFOOT
|
||||||
|
|
||||||
// Define the frequencies for the Battalion
|
// Define the frequencies for the Battalion
|
||||||
@@ -73,26 +73,26 @@ class BattalionInfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class RRC { // WIP
|
// class RRC { // WIP
|
||||||
callsign = RRC_CALLSIGN;
|
// callsign = RRC_CALLSIGN;
|
||||||
shortDescription = "RRC";
|
// shortDescription = "RRC";
|
||||||
textColor = LVL2_TEXT_COLOR;
|
// textColor = LVL2_TEXT_COLOR;
|
||||||
frequencies[] = {
|
// frequencies[] = {
|
||||||
{"Contact", {}, {FREQ_BATTALION}},
|
// {"Contact", {}, {FREQ_BATTALION}},
|
||||||
{"Actual", {}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_CAS}}
|
// {"Actual", {}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_CAS}}
|
||||||
};
|
// };
|
||||||
};
|
// };
|
||||||
|
|
||||||
class BattalionMedical { // WIP
|
// class BattalionMedical { // WIP
|
||||||
callsign = MEDIC_CALLSIGN;
|
// callsign = MEDIC_CALLSIGN;
|
||||||
shortDescription = "Battalion Medical";
|
// shortDescription = "Battalion Medical";
|
||||||
textColor = LVL2_TEXT_COLOR;
|
// textColor = LVL2_TEXT_COLOR;
|
||||||
frequencies[] = {
|
// frequencies[] = {
|
||||||
{"Contact", {FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION}},
|
// {"Contact", {FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION}},
|
||||||
{"Actual", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_LOGISTICS}},
|
// {"Actual", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_LOGISTICS}},
|
||||||
{"General", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {}}
|
// {"General", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {}}
|
||||||
};
|
// };
|
||||||
};
|
// };
|
||||||
|
|
||||||
class WeaponsSquad { // WIP
|
class WeaponsSquad { // WIP
|
||||||
callsign = WPN_CALLSIGN;
|
callsign = WPN_CALLSIGN;
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ class DisallowedEquipment {
|
|||||||
label = "BLACKLISTED WEAPON OR ITEM";
|
label = "BLACKLISTED WEAPON OR ITEM";
|
||||||
description = "Items that NO member is allowed to use.";
|
description = "Items that NO member is allowed to use.";
|
||||||
items[] = {
|
items[] = {
|
||||||
"17BN_ANPVS14", // NVG AN/PVS-14
|
//"17BN_ANPVS14", // NVG AN/PVS-14
|
||||||
"ej_PVS15D", // NVG AN/PVS-15
|
//"ej_PVS15D", // NVG AN/PVS-15
|
||||||
"ej_VPS15", // NVG AN/PVS-15
|
//"ej_PVS15", // NVG AN/PVS-15
|
||||||
"LMG_Mk200_black_F", //Mk200 Series
|
"LMG_Mk200_black_F", //Mk200 Series
|
||||||
"LMG_Mk200_F", //Mk200 Series
|
"LMG_Mk200_F", //Mk200 Series
|
||||||
"rhs_weap_g36c", // G36 Series
|
"rhs_weap_g36c", // G36 Series
|
||||||
@@ -34,11 +34,6 @@ class DisallowedEquipment {
|
|||||||
"rhs_weap_m14_wd", // M14 Series
|
"rhs_weap_m14_wd", // M14 Series
|
||||||
"rhs_weap_m14_weap_m14ebrri", // M14 Series
|
"rhs_weap_m14_weap_m14ebrri", // M14 Series
|
||||||
"rhs_weap_m14", // M14 Series
|
"rhs_weap_m14", // M14 Series
|
||||||
"rhs_weap_m16a4_carryhandle_M203", // M16 Series
|
|
||||||
"rhs_weap_m16a4_carryhandle", // M16 Series
|
|
||||||
"rhs_weap_m16a4_imod_M203", // M16 Series
|
|
||||||
"rhs_weap_m16a4_imod", // M16 Series
|
|
||||||
"rhs_weap_m16a4", // M16 Series
|
|
||||||
"rhs_weap_m27iar_grip", // M27 Series
|
"rhs_weap_m27iar_grip", // M27 Series
|
||||||
"rhs_weap_m27iar", // M27 Series
|
"rhs_weap_m27iar", // M27 Series
|
||||||
"rhsusf_ANPVS_14", // NVG AN/PVS-14
|
"rhsusf_ANPVS_14", // NVG AN/PVS-14
|
||||||
@@ -100,14 +95,8 @@ class DisallowedEquipment {
|
|||||||
"UK3CB_M14DMR_Railed_BLK", // M14 Series
|
"UK3CB_M14DMR_Railed_BLK", // M14 Series
|
||||||
"UK3CB_M14DMR_Railed", // M14 Series
|
"UK3CB_M14DMR_Railed", // M14 Series
|
||||||
"UK3CB_M14DMR", // M14 Series
|
"UK3CB_M14DMR", // M14 Series
|
||||||
"UK3CB_M16_Carbine", // M16 Series
|
//"USP_PVS_14", // NVG AN/PVS-14
|
||||||
"UK3CB_M16A1_LSW", // M16 Series
|
//"USP_PVS_15" // NVG AN/PVS-15
|
||||||
"UK3CB_M16A1", // M16 Series
|
|
||||||
"UK3CB_M16A2_UGL", // M16 Series
|
|
||||||
"UK3CB_M16A2", // M16 Series
|
|
||||||
"UK3CB_M16A3", // M16 Series
|
|
||||||
"USP_PVS_14", // NVG AN/PVS-14
|
|
||||||
"USP_PVS_15" // NVG AN/PVS-15
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -132,10 +121,9 @@ class DisallowedEquipment {
|
|||||||
"optic_lrps_tna_F", //Nightforce Series Optic
|
"optic_lrps_tna_F", //Nightforce Series Optic
|
||||||
"optic_lrps", //Nightforce Series Optic
|
"optic_lrps", //Nightforce Series Optic
|
||||||
"optic_Nightstalker", // Thermal Optic
|
"optic_Nightstalker", // Thermal Optic
|
||||||
"optic_tws_mg", // Thermal Optic
|
|
||||||
"optic_tws", // Thermal Optic
|
|
||||||
"rhsusf_acc_anpas13gv1", // Thermal Optic
|
"rhsusf_acc_anpas13gv1", // Thermal Optic
|
||||||
"rhsusf_acc_anpvs27", // Thermal Optic
|
"rhsusf_acc_anpvs27", // Thermal Optic
|
||||||
|
"optic_tws_mg", // Thermal Optic
|
||||||
"Tier1_ANPVS10_Tan", // Thermal Optic
|
"Tier1_ANPVS10_Tan", // Thermal Optic
|
||||||
"Tier1_ATACR18_ADM_Black_Vanilla", //Nightforce Series Optic
|
"Tier1_ATACR18_ADM_Black_Vanilla", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_ADM_Black", //Nightforce Series Optic
|
"Tier1_ATACR18_ADM_Black", //Nightforce Series Optic
|
||||||
@@ -152,14 +140,18 @@ class DisallowedEquipment {
|
|||||||
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_Geissele_Docter_Black", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Black", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_Geissele_Docter_Desert_Vanilla", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Desert_Vanilla", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_Geissele_Docter_Desert" //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Desert", //Nightforce Series Optic
|
||||||
|
"sps_black_hornet_01_Static_F", // Black Hornet Drone Mod
|
||||||
|
"MRH_TacticalDisplay", //MRH Satellite Display Tablet
|
||||||
|
"MRH_FoldedSatcomAntenna" //MRH Satellite Satcom
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class tabbedItems { // Items that are allowed for individuals with Ranger Tab
|
class tabbedItems { // Items that are allowed for individuals with Ranger Tab
|
||||||
label = "TABBED WEAPON";
|
label = "TABBED ITEM";
|
||||||
description = "Items that are allowed for individuals with Ranger Tab.";
|
description = "Items that are allowed for individuals with Ranger Tab.";
|
||||||
items[] = {
|
items[] = {
|
||||||
|
"optic_tws", // Thermal Optic
|
||||||
"arifle_MX_black_F", // MX Series
|
"arifle_MX_black_F", // MX Series
|
||||||
"arifle_MX_F", // MX Series
|
"arifle_MX_F", // MX Series
|
||||||
"arifle_MX_GL_black_F", // MX 3GL Series
|
"arifle_MX_GL_black_F", // MX 3GL Series
|
||||||
@@ -208,7 +200,105 @@ class DisallowedEquipment {
|
|||||||
"Tier1_SR25_ec_tan", // SR-25 Series
|
"Tier1_SR25_ec_tan", // SR-25 Series
|
||||||
"Tier1_SR25_ec", // SR-25 Series
|
"Tier1_SR25_ec", // SR-25 Series
|
||||||
"Tier1_SR25_tan", // SR-25 Series
|
"Tier1_SR25_tan", // SR-25 Series
|
||||||
"Tier1_SR25" // SR-25 Series
|
"Tier1_SR25", // SR-25 Series
|
||||||
|
"rhsusf_weap_MP7A2", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_aor1", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_desert", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_folded", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_folded_aor1", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_folded_winter", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_folded_desert", //MP7 Series
|
||||||
|
"rhsusf_weap_MP7A2_winter", //MP7 Series
|
||||||
|
"UK3CB_MP510", //MP5 Series
|
||||||
|
"UK3CB_MP5A2", //MP5 Series
|
||||||
|
"UK3CB_MP5A3", //MP5 Series
|
||||||
|
"UK3CB_MP5A4", //MP5 Series
|
||||||
|
"UK3CB_MP5K", //MP5 Series
|
||||||
|
"UK3CB_MP5K_PDW", //MP5 Series
|
||||||
|
"UK3CB_MP5N", //MP5 Series
|
||||||
|
"UK3CB_MP5N_UGL", //MP5 Series
|
||||||
|
"UK3CB_MP5SD5", //MP5 Series
|
||||||
|
"UK3CB_MP5SD6", //MP5 Series
|
||||||
|
"SMG_03C_black", //P90 Series
|
||||||
|
"SMG_03C_camo", //P90 Series
|
||||||
|
"SMG_03C_hex", //P90 Series
|
||||||
|
"SMG_03C_khaki", //P90 Series
|
||||||
|
"SMG_03C_TR_black", //P90 Series
|
||||||
|
"SMG_03C_TR_camo", //P90 Series
|
||||||
|
"SMG_03C_TR_hex", //P90 Series
|
||||||
|
"SMG_03C_TR_khaki", //P90 Series
|
||||||
|
"UK3CB_P90C_black", //P90 Series
|
||||||
|
"UK3CB_P90C_camo", //P90 Series
|
||||||
|
"UK3CB_P90C_hex", //P90 Series
|
||||||
|
"UK3CB_P90C_khaki", //P90 Series
|
||||||
|
"UK3CB_P90C_TR_black", //P90 Series
|
||||||
|
"UK3CB_P90C_TR_camo", //P90 Series
|
||||||
|
"UK3CB_P90C_TR_hex", //P90 Series
|
||||||
|
"UK3CB_P90C_TR_khaki", //P90 Series
|
||||||
|
"UK3CB_P90_black", //P90 Series
|
||||||
|
"UK3CB_P90_camo", //P90 Series
|
||||||
|
"UK3CB_P90_hex", //P90 Series
|
||||||
|
"UK3CB_P90_khaki", //P90 Series
|
||||||
|
"UK3CB_P90_TR_black", //P90 Series
|
||||||
|
"UK3CB_P90_TR_camo", //P90 Series
|
||||||
|
"UK3CB_P90_TR_hex", //P90 Series
|
||||||
|
"UK3CB_P90_TR_khaki", //P90 Series
|
||||||
|
"UK3CB_M16_Carbine", //M16 Series
|
||||||
|
"UK3CB_M16_Carbine_eotech_552", //M16 Series
|
||||||
|
"UK3CB_M16_Carbine_sup", //M16 Series
|
||||||
|
"UK3CB_M16A1", //M16 Series
|
||||||
|
"UK3CB_M16A1_LSW", //M16 Series
|
||||||
|
"UK3CB_M16A2", //M16 Series
|
||||||
|
"UK3CB_M16A2_sup", //M16 Series
|
||||||
|
"UK3CB_M16A2_UGL", //M16 Series
|
||||||
|
"UK3CB_M16A2_UGL_eotech_552", //M16 Series
|
||||||
|
"UK3CB_M16A2_UGL_sup", //M16 Series
|
||||||
|
"UK3CB_M16A3", //M16 Series
|
||||||
|
"UK3CB_M16A3_eotech_552", //M16 Series
|
||||||
|
"UK3CB_M16A3_eotech_552_sup", //M16 Series
|
||||||
|
"UK3CB_M16A3_sup", //M16 Series
|
||||||
|
"UK3CB_M16A3_UGL", //M16 Series
|
||||||
|
"rhs_weap_m16a4", //M16 Series
|
||||||
|
"rhs_weap_m16a4_grip", //M16 Series
|
||||||
|
"rhs_weap_m16a4_grip_acog", //M16 Series
|
||||||
|
"rhs_weap_m16a4_grip2", //M16 Series
|
||||||
|
"rhs_weap_m16a4_grip3", //M16 Series
|
||||||
|
"rhs_weap_m16a4_bipod", //M16 Series
|
||||||
|
"rhs_weap_m16a4_acog_usmc", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle_bipod", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle_grip", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle_M203", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle_M203_grip", //M16 Series
|
||||||
|
"rhs_weap_m16a4_m203_acog_usmc", //M16 Series
|
||||||
|
"uk3cb_weap_m16a4_m203s_eotech_552_anpeq15_sup", //M16 Series
|
||||||
|
"rhs_weap_m16a4_imod", //M16 Series
|
||||||
|
"rhs_weap_m16a4_imod_grip", //M16 Series
|
||||||
|
"rhs_weap_m16a4_imod_grip2", //M16 Series
|
||||||
|
"rhs_weap_m16a4_imod_grip3", //M16 Series
|
||||||
|
"rhs_weap_m16a4_imod_M203", //M16 Series
|
||||||
|
"rhs_weap_m16a4_imod_M203_grip", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle_grip2", //M16 Series
|
||||||
|
"rhs_weap_m16a4_carryhandle_grip3", //M16 Series
|
||||||
|
"rhs_weap_m16a4_grip_acog_usmc", //M16 Series
|
||||||
|
"rhs_weap_m16a4_grip_acog2_usmc", //M16 Series
|
||||||
|
"rhs_weap_m32", //M32/MGL Series
|
||||||
|
"rhs_weap_m32_usmc", //M32/MGL Series
|
||||||
|
"G3_Multicam_Tee_WARLORD", //Tabbed T-Shirt
|
||||||
|
"G3_M81_Tee_WARLORD", //Tabbed T-Shirt
|
||||||
|
"G3_TGR_Tee_WARLORD", //Tabbed T-Shirt
|
||||||
|
"G3_Multicam_Tee_BLK", //Tabbed T-Shirt
|
||||||
|
"G3_M81_Tee_BLK", //Tabbed T-Shirt
|
||||||
|
"G3_TGR_Tee_BLK", //Tabbed T-Shirt
|
||||||
|
"G3_Multicam_Tee_Tan", //Tabbed T-Shirt
|
||||||
|
"G3_M81_Tee_Tan", //Tabbed T-Shirt
|
||||||
|
"G3_TGR_Tee_Tan", //Tabbed T-Shirt
|
||||||
|
"G3_Multicam_Tee_Gray", //Tabbed T-Shirt
|
||||||
|
"G3_M81_Tee_Gray", //Tabbed T-Shirt
|
||||||
|
"G3_TGR_Tee_Gray", //Tabbed T-Shirt
|
||||||
|
"G3_Multicam_Tee_Green", //Tabbed T-Shirt
|
||||||
|
"G3_M81_Tee_Green", //Tabbed T-Shirt
|
||||||
|
"G3_TGR_Tee_Green" //Tabbed T-Shirt
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,31 +20,25 @@ class SupplyCrates {
|
|||||||
{"ACE_40mm_Flare_ir",12},
|
{"ACE_40mm_Flare_ir",12},
|
||||||
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
||||||
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
||||||
{"SmokeShell",12},
|
{"SmokeShell",24},
|
||||||
{"rhs_mag_m67",12},
|
{"ACE_M84",24},
|
||||||
|
{"rhs_mag_m67",24},
|
||||||
{"1Rnd_Smoke_Grenade_shell",24},
|
{"1Rnd_Smoke_Grenade_shell",24},
|
||||||
{"1Rnd_SmokeRed_Grenade_shell",24},
|
{"1Rnd_SmokeRed_Grenade_shell",24},
|
||||||
{"1Rnd_SmokeGreen_Grenade_shell",24},
|
{"1Rnd_SmokeGreen_Grenade_shell",24},
|
||||||
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
||||||
{"Tier1_30Rnd_556x45_M856A1_EMag",25},
|
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||||
{"Tier1_30Rnd_556x45_Mk318Mod0_EMag",75},
|
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",75},
|
||||||
{"ACE_30Rnd_65_Creedmor_mag",25},
|
|
||||||
{"SMA_30Rnd_762x35_BLK_EPR",25},
|
|
||||||
{"Tier1_30Rnd_762x35_300BLK_SMK_PMAG",25},
|
|
||||||
{"SMA_30Rnd_68x43_SPC_FMJ",25},
|
|
||||||
{"SMA_30Rnd_68x43_SPC_FMJ_Tracer",25},
|
|
||||||
{"SMA_20Rnd_762x51mm_M80A1_EPR",25},
|
|
||||||
{"SMA_20Rnd_762x51mm_M80A1_EPR_Tracer",25},
|
|
||||||
{"SMA_20Rnd_762x51mm_Mk316_Mod_0_Special_Long_Range",25},
|
|
||||||
{"SMA_20Rnd_762x51mm_Mk316_Mod_0_Special_Long_Range_Tracer",25},
|
|
||||||
{"Tier1_250Rnd_762x51_Belt_M993_AP",15},
|
{"Tier1_250Rnd_762x51_Belt_M993_AP",15},
|
||||||
{"ACE_20Rnd_762x51_Mag_Tracer",25},
|
{"ACE_20Rnd_762x51_Mag_Tracer",25},
|
||||||
{"ACE_20Rnd_762x51_M993_AP_Mag",25},
|
{"ACE_20Rnd_762x51_M993_AP_Mag",25},
|
||||||
{"rhsusf_20Rnd_762x51_SR25_m993_Mag",25},
|
{"rhsusf_20Rnd_762x51_SR25_m993_Mag",25},
|
||||||
{"Tier1_20Rnd_762x51_M993_SR25_Mag",25},
|
{"Tier1_20Rnd_762x51_M993_SR25_Mag",25},
|
||||||
{"Tier1_20Rnd_65x48_Creedmoor_SR25_Mag",25},
|
{"KAR_20Rnd_Fury_blk",25},
|
||||||
{"rhssaf_30rnd_556x45_EPR_G36", 25},
|
{"rhsusf_m112_mag",25},
|
||||||
{"DemoCharge_Remote_Mag",16}
|
{"JCA_20Rnd_762x51_PMAG",25},
|
||||||
|
{"JCA_20Rnd_762x51_Tracer_Red_PMAG",25},
|
||||||
|
{"KAR_100Rnd_Fury_blk",25},
|
||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
@@ -56,16 +50,19 @@ class SupplyCrates {
|
|||||||
icon = "\A3\ui_f\data\map\vehicleicons\iconCrateWpns_ca.paa";
|
icon = "\A3\ui_f\data\map\vehicleicons\iconCrateWpns_ca.paa";
|
||||||
|
|
||||||
backpacks[] = {};
|
backpacks[] = {};
|
||||||
weapons[] = {};
|
weapons[] = {
|
||||||
|
{"launch_MRAWS_green_F",2}
|
||||||
|
};
|
||||||
magazines[] = {
|
magazines[] = {
|
||||||
{"MRAWS_HEAT_F",35},
|
{"MRAWS_HEAT_F",35},
|
||||||
{"MRAWS_HE_F",15},
|
{"MRAWS_HE_F",15},
|
||||||
{"Tier1_250Rnd_762x51_Belt_M993_AP",50},
|
{"Tier1_250Rnd_762x51_Belt_M993_AP",50},
|
||||||
{"Tier1_30Rnd_556x45_M856A1_EMag",25},
|
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||||
{"Tier1_30Rnd_556x45_Mk318Mod0_EMag",50},
|
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",50},
|
||||||
{"Titan_AA",10},
|
{"Titan_AA",10},
|
||||||
{"Titan_AT",10},
|
{"Titan_AT",10},
|
||||||
{"200Rnd_65x39_cased_Box_Tracer_Red",50}
|
{"200Rnd_65x39_cased_Box_Tracer_Red",50},
|
||||||
|
{"KAR_100Rnd_Fury_RT_blk",50}
|
||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
@@ -86,6 +83,7 @@ class SupplyCrates {
|
|||||||
{"ACE_splint",48},
|
{"ACE_splint",48},
|
||||||
{"ACE_morphine",50},
|
{"ACE_morphine",50},
|
||||||
{"ACE_epinephrine",50},
|
{"ACE_epinephrine",50},
|
||||||
|
{"ACE_painkillers",20},
|
||||||
{"ACE_bloodIV",75},
|
{"ACE_bloodIV",75},
|
||||||
{"ACE_bloodIV_500",50},
|
{"ACE_bloodIV_500",50},
|
||||||
{"ACE_bloodIV_250",25},
|
{"ACE_bloodIV_250",25},
|
||||||
@@ -136,6 +134,42 @@ class SupplyCrates {
|
|||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SquadUtility {
|
||||||
|
boxClass = "Box_Syndicate_Ammo_F";
|
||||||
|
displayName = "Squad Utility Supply Crate";
|
||||||
|
tooltip = "A crate containing Flairs, Smokes, Breaching Charges";
|
||||||
|
icon = "\A3\ui_f\data\map\vehicleicons\iconCrateAmmo_ca.paa";
|
||||||
|
|
||||||
|
backpacks[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
magazines[] = {};
|
||||||
|
items[] = {
|
||||||
|
{"ACE_Chemlight_HiYellow",20},
|
||||||
|
{"ACE_Chemlight_HiBlue",20},
|
||||||
|
{"ACE_Chemlight_HiGreen",20},
|
||||||
|
{"ACE_Chemlight_HiRed",20},
|
||||||
|
{"ACE_Chemlight_UltraHiOrange",20},
|
||||||
|
{"ACE_HandFlare_Yellow",20},
|
||||||
|
{"ACE_HandFlare_White",20},
|
||||||
|
{"ACE_HandFlare_Red",20},
|
||||||
|
{"ACE_HandFlare_Green",20},
|
||||||
|
{"ACE_Chemlight_IR",20},
|
||||||
|
{"ACE_IR_Strobe_Item",20},
|
||||||
|
{"SmokeShellYellow",20},
|
||||||
|
{"SmokeShellBlue",20},
|
||||||
|
{"SmokeShellPurple",20},
|
||||||
|
{"SmokeShellOrange",20},
|
||||||
|
{"SmokeShellGreen",20},
|
||||||
|
{"SmokeShellRed",20},
|
||||||
|
{"tsp_popperCharge_auto_mag",10},
|
||||||
|
{"tsp_frameCharge_mag",20},
|
||||||
|
{"tsp_stickCharge_auto_mag",10},
|
||||||
|
{"ACE_CableTie",25},
|
||||||
|
{"DemoCharge_Remote_Mag",15},
|
||||||
|
{"TFAR_anprc152",3},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
class MortarMk6Resupply {
|
class MortarMk6Resupply {
|
||||||
boxClass = "Box_NATO_WpsSpecial_F";
|
boxClass = "Box_NATO_WpsSpecial_F";
|
||||||
displayName = "Mortar MK6 Supply Crate";
|
displayName = "Mortar MK6 Supply Crate";
|
||||||
@@ -168,13 +202,40 @@ class SupplyCrates {
|
|||||||
icon = "\A3\ui_f\data\igui\cfg\simpleTasks\types\scout_ca.paa";
|
icon = "\A3\ui_f\data\igui\cfg\simpleTasks\types\scout_ca.paa";
|
||||||
|
|
||||||
backpacks[] = {};
|
backpacks[] = {};
|
||||||
weapons[] = {};
|
weapons[] = {
|
||||||
|
{"rhs_weap_M136",2},
|
||||||
|
{"twc_2inch_bag",3}
|
||||||
|
};
|
||||||
magazines[] = {
|
magazines[] = {
|
||||||
{"twc_2inch_he_1rnd",70},
|
{"twc_2inch_he_1rnd",70},
|
||||||
{"twc_2inch_smoke_1rnd",15},
|
{"twc_2inch_smoke_1rnd",15},
|
||||||
{"twc_2inch_illum_1rnd",15},
|
{"twc_2inch_illum_1rnd",15},
|
||||||
{"Tier1_30Rnd_556x45_Mk318Mod0_EMag",20}
|
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",20}
|
||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ResupplyTire {
|
||||||
|
boxClass = "ACE_Wheel";
|
||||||
|
displayName = "Vehicle Tire";
|
||||||
|
tooltip = "A single tire for replacement";
|
||||||
|
icon = "A3\ui_f\data\igui\cfg\simpletasks\types\repair_ca.paa";
|
||||||
|
|
||||||
|
backpacks[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
magazines[] = {};
|
||||||
|
items[] = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
class ResupplyTrack {
|
||||||
|
boxClass = "ACE_Track";
|
||||||
|
displayName = "Vehicle Track";
|
||||||
|
tooltip = "A single track for replacement";
|
||||||
|
icon = "z\ace\addons\repair\ui\patch_ca.paa";
|
||||||
|
|
||||||
|
backpacks[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
magazines[] = {};
|
||||||
|
items[] = {};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
@@ -84,31 +84,160 @@ class VehicleFlags {
|
|||||||
actionID = "flag_simpleshape";
|
actionID = "flag_simpleshape";
|
||||||
actionTitle = "Simple Shapes";
|
actionTitle = "Simple Shapes";
|
||||||
|
|
||||||
|
class Blue {
|
||||||
|
actionID = "flags_simpleshape_blue";
|
||||||
|
actionTitle = "Blue";
|
||||||
|
|
||||||
|
class BlueCircle {
|
||||||
|
actionID = "flag_simpleshape_bluecircle";
|
||||||
|
actionTitle = "Blue Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
||||||
|
};
|
||||||
|
class BlueOctagon {
|
||||||
|
actionID = "flag_simpleshape_blueoctagon";
|
||||||
|
actionTitle = "Blue Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_blueoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class BluePentagon {
|
||||||
|
actionID = "flag_simpleshape_bluepentagon";
|
||||||
|
actionTitle = "Blue Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluepentagon_co.paa";
|
||||||
|
};
|
||||||
|
class BlueSquare {
|
||||||
|
actionID = "flag_simpleshape_bluesquare";
|
||||||
|
actionTitle = "Blue Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluesquare_co.paa";
|
||||||
|
};
|
||||||
|
class BlueTriangle {
|
||||||
|
actionID = "flag_simpleshape_bluetriangle";
|
||||||
|
actionTitle = "Blue Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_bluetriangle_co.paa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Green {
|
||||||
|
actionID = "flags_simpleshape_green";
|
||||||
|
actionTitle = "Green";
|
||||||
|
|
||||||
|
class GreenCircle {
|
||||||
|
actionID = "flag_simpleshape_greencircle";
|
||||||
|
actionTitle = "Green Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greencircle_co.paa";
|
||||||
|
};
|
||||||
class GreenOctagon {
|
class GreenOctagon {
|
||||||
actionID = "flag_simpleshape_greenoctagon";
|
actionID = "flag_simpleshape_greenoctagon";
|
||||||
actionTitle = "Green Octagon";
|
actionTitle = "Green Octagon";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
||||||
};
|
};
|
||||||
class BlueCircle {
|
class GreenPentagon {
|
||||||
actionID = "flag_simpleshape_bluecircle";
|
actionID = "flag_simpleshape_greenpentagon";
|
||||||
actionTitle = "Blue Circle";
|
actionTitle = "Green Pentagon";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_greenpentagon_co.paa";
|
||||||
|
};
|
||||||
|
class GreenSquare {
|
||||||
|
actionID = "flag_simpleshape_greensquare";
|
||||||
|
actionTitle = "Green Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greensquare_co.paa";
|
||||||
|
};
|
||||||
|
class GreenTriangle {
|
||||||
|
actionID = "flag_simpleshape_greentriangle";
|
||||||
|
actionTitle = "Green Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_greentriangle_co.paa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Orange {
|
||||||
|
actionID = "flags_simpleshape_orange";
|
||||||
|
actionTitle = "Orange";
|
||||||
|
|
||||||
|
class OrangeCircle {
|
||||||
|
actionID = "flag_simpleshape_orangecircle";
|
||||||
|
actionTitle = "Orange Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangecircle_co.paa";
|
||||||
|
};
|
||||||
|
class OrangeOctagon {
|
||||||
|
actionID = "flag_simpleshape_orangeoctagon";
|
||||||
|
actionTitle = "Orange Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangeoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class OrangePentagon {
|
||||||
|
actionID = "flag_simpleshape_orangepentagon";
|
||||||
|
actionTitle = "Orange Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangepentagon_co.paa";
|
||||||
};
|
};
|
||||||
class OrangeSquare {
|
class OrangeSquare {
|
||||||
actionID = "flag_simpleshape_orangesquare";
|
actionID = "flag_simpleshape_orangesquare";
|
||||||
actionTitle = "Orange Square";
|
actionTitle = "Orange Square";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
||||||
};
|
};
|
||||||
|
class OrangeTriangle {
|
||||||
|
actionID = "flag_simpleshape_orangetriangle";
|
||||||
|
actionTitle = "Orange Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_orangetriangle_co.paa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Pink {
|
||||||
|
actionID = "flags_simpleshape_pink";
|
||||||
|
actionTitle = "Pink";
|
||||||
|
|
||||||
|
class PinkCircle {
|
||||||
|
actionID = "flag_simpleshape_pinkcircle";
|
||||||
|
actionTitle = "Pink Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinkcircle_co.paa";
|
||||||
|
};
|
||||||
|
class PinkOctagon {
|
||||||
|
actionID = "flag_simpleshape_pinkoctagon";
|
||||||
|
actionTitle = "Pink Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinkoctagon_co.paa";
|
||||||
|
};
|
||||||
|
class PinkPentagon {
|
||||||
|
actionID = "flag_simpleshape_pinkpentagon";
|
||||||
|
actionTitle = "Pink Pentagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinkpentagon_co.paa";
|
||||||
|
};
|
||||||
|
class PinkSquare {
|
||||||
|
actionID = "flag_simpleshape_pinksquare";
|
||||||
|
actionTitle = "Pink Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_pinksquare_co.paa";
|
||||||
|
};
|
||||||
class PinkTriangle {
|
class PinkTriangle {
|
||||||
actionID = "flag_simpleshape_pinktriangle";
|
actionID = "flag_simpleshape_pinktriangle";
|
||||||
actionTitle = "Pink Triangle";
|
actionTitle = "Pink Triangle";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Red {
|
||||||
|
actionID = "flags_simpleshape_red";
|
||||||
|
actionTitle = "Red";
|
||||||
|
|
||||||
|
class RedCircle {
|
||||||
|
actionID = "flag_simpleshape_redcircle";
|
||||||
|
actionTitle = "Red Circle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redcircle_co.paa";
|
||||||
|
};
|
||||||
|
class RedOctagon {
|
||||||
|
actionID = "flag_simpleshape_redoctagon";
|
||||||
|
actionTitle = "Red Octagon";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redoctagon_co.paa";
|
||||||
|
};
|
||||||
class RedPentagon {
|
class RedPentagon {
|
||||||
actionID = "flag_simpleshape_redpentagon";
|
actionID = "flag_simpleshape_redpentagon";
|
||||||
actionTitle = "Red Pentagon";
|
actionTitle = "Red Pentagon";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
||||||
};
|
};
|
||||||
|
class RedSquare {
|
||||||
|
actionID = "flag_simpleshape_redsquare";
|
||||||
|
actionTitle = "Red Square";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redsquare_co.paa";
|
||||||
|
};
|
||||||
|
class RedTriangle {
|
||||||
|
actionID = "flag_simpleshape_redtriangle";
|
||||||
|
actionTitle = "Red Triangle";
|
||||||
|
texture = "textures\simple_shape\flag_simpleshape_redtriangle_co.paa";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class Miscellaneous {
|
class Miscellaneous {
|
||||||
@@ -119,6 +248,11 @@ class VehicleFlags {
|
|||||||
actionTitle = "17th Emblem";
|
actionTitle = "17th Emblem";
|
||||||
texture = "textures\flags_misc\flag_17th_emblem_co.paa";
|
texture = "textures\flags_misc\flag_17th_emblem_co.paa";
|
||||||
};
|
};
|
||||||
|
class WarlordEmblem {
|
||||||
|
actionID = "flag_17th_warlord";
|
||||||
|
actionTitle = "Warlord Emblem";
|
||||||
|
texture = "textures\flags_misc\flag_17th_warlord_co.paa";
|
||||||
|
};
|
||||||
class RedCross {
|
class RedCross {
|
||||||
actionID = "flag_redcross";
|
actionID = "flag_redcross";
|
||||||
actionTitle = "Red Cross";
|
actionTitle = "Red Cross";
|
||||||
|
|||||||
@@ -89,21 +89,20 @@ minPlayerDistance = 500;
|
|||||||
|
|
||||||
//-------------------------------------------BASE SETTINGS---------------------------------------------------------------//
|
//-------------------------------------------BASE SETTINGS---------------------------------------------------------------//
|
||||||
|
|
||||||
class Params
|
class Params {};
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// CfgFunctions
|
|
||||||
class CfgFunctions {
|
class CfgFunctions {
|
||||||
#include "framework\CfgFunctions.hpp"
|
#include "framework\CfgFunctions.hpp"
|
||||||
|
#include "custom_scripts.hpp"
|
||||||
};
|
};
|
||||||
|
|
||||||
class CfgSounds {
|
class CfgSounds {
|
||||||
#include "framework\emp\CfgSounds.hpp"
|
#include "custom_sounds.hpp"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CfgLeaflets {
|
||||||
|
#include "custom_leaflets.hpp"
|
||||||
|
};
|
||||||
|
|
||||||
class CfgDebriefingSections {
|
class CfgDebriefingSections {
|
||||||
class acex_killTracker {
|
class acex_killTracker {
|
||||||
|
|||||||
@@ -5,9 +5,10 @@ class DOUBLES(PREFIX,init) {
|
|||||||
file = "framework\init\functions";
|
file = "framework\init\functions";
|
||||||
class initServer { postInit = 1;};
|
class initServer { postInit = 1;};
|
||||||
class initClient { postInit = 1;};
|
class initClient { postInit = 1;};
|
||||||
class setDefaults { postInit = 1; };
|
class setDefaults {};
|
||||||
class addAARChatHandler { postInit = 1; };
|
class addAARChatHandler {};
|
||||||
class addRespawnChatHandler { postInit = 1; };
|
class addRespawnChatHandler {};
|
||||||
|
class checkMissionSettings {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -22,10 +23,17 @@ class PREFIX {
|
|||||||
class DOUBLES(PREFIX,client) {
|
class DOUBLES(PREFIX,client) {
|
||||||
class functions {
|
class functions {
|
||||||
file = "framework\client\functions";
|
file = "framework\client\functions";
|
||||||
class bindEmptyGroupGarbageCleanup { postInit = 1; };
|
class initClient {};
|
||||||
class bindEventHandlers { postInit = 1; };
|
class addDraw3DPFH {};
|
||||||
class bindVehicleActions { postInit = 1; };
|
class addGetNearMenPFH {};
|
||||||
class addZenModules {postInit = 1;};
|
class addMicroDAGRWaypoints {};
|
||||||
|
class addZenModules {};
|
||||||
|
class bindEventHandlers {};
|
||||||
|
class bindVehicleActions {};
|
||||||
|
class clearPFHCode {};
|
||||||
|
class logRespawnButtonUse {};
|
||||||
|
class registerPFHCode {};
|
||||||
|
class staticLineProtection {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -33,44 +41,22 @@ class DOUBLES(PREFIX,common) {
|
|||||||
class functions {
|
class functions {
|
||||||
file = "framework\common\functions";
|
file = "framework\common\functions";
|
||||||
class addCBASettings { preInit = 1; };
|
class addCBASettings { preInit = 1; };
|
||||||
class logMissionInfo {};
|
|
||||||
class addPlayerInfoToArray {};
|
class addPlayerInfoToArray {};
|
||||||
|
class checkPlayerInventory {};
|
||||||
class createOrUpdateDiaryRecord {};
|
class createOrUpdateDiaryRecord {};
|
||||||
|
class draw3DIconStatus {};
|
||||||
class getApprovedAssetsCfg {};
|
class getApprovedAssetsCfg {};
|
||||||
class getBattalionCfg {};
|
class getBattalionCfg {};
|
||||||
class getNameOfBase {};
|
class getNameOfBase {};
|
||||||
class getNearestBase {};
|
class getNearestBase {};
|
||||||
class log {};
|
class log {};
|
||||||
class checkPlayerInventory {};
|
class logMissionInfo {};
|
||||||
class logSettingChanged {};
|
class logSettingChanged {};
|
||||||
class padString {};
|
class padString {};
|
||||||
class recurseSubclasses {};
|
class recurseSubclasses {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class DOUBLES(PREFIX,emp) {
|
|
||||||
class functions {
|
|
||||||
file = "framework\emp\functions";
|
|
||||||
// class addCBASettings {preInit=1;};
|
|
||||||
class init {};
|
|
||||||
class addACEActions {};
|
|
||||||
|
|
||||||
class applyLocalObjectEffects {};
|
|
||||||
class applyLocalGroupEffects {};
|
|
||||||
class applyGlobalObjectEffects {};
|
|
||||||
class applyServerObjectEffects {};
|
|
||||||
|
|
||||||
class deploy {};
|
|
||||||
class getObjectsAndGroupsToAffect {};
|
|
||||||
class playLocalEffects {};
|
|
||||||
class playLocalEffectsForObject {};
|
|
||||||
|
|
||||||
class isItemElectronic {};
|
|
||||||
class removeUnitElectricInventoryItems {};
|
|
||||||
class removeVehicleElectricInventoryItems {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class DOUBLES(PREFIX,fbcb2_assets) {
|
class DOUBLES(PREFIX,fbcb2_assets) {
|
||||||
class functions {
|
class functions {
|
||||||
file = "framework\fbcb2_assets\functions";
|
file = "framework\fbcb2_assets\functions";
|
||||||
@@ -126,13 +112,15 @@ class DOUBLES(PREFIX,performance) {
|
|||||||
class functions {
|
class functions {
|
||||||
file = "framework\performance\functions";
|
file = "framework\performance\functions";
|
||||||
class addCBASettings {preInit=1;};
|
class addCBASettings {preInit=1;};
|
||||||
class addDNI_PlayerFPS { postInit = 1; };
|
class addDNI_PlayerFPS {postInit = 1;};
|
||||||
|
|
||||||
// PFHs managed in addCBASettings onChange code
|
// PFHs managed in addCBASettings onChange code
|
||||||
class addClientStatsPFH {};
|
class addClientStatsPFH {};
|
||||||
class calculateClientStats {};
|
class calculateClientStats {};
|
||||||
class addServerStatsPFH {};
|
class addServerStatsPFH {};
|
||||||
class calculateServerStats {};
|
class calculateServerStats {};
|
||||||
|
class addEmptyGroupCleanupPFH {};
|
||||||
|
class addDeadUnitCleanupPFH {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -175,8 +163,7 @@ class DOUBLES(PREFIX,triageIcons) {
|
|||||||
file = "framework\triageIcons\functions";
|
file = "framework\triageIcons\functions";
|
||||||
class addCBASettings {preInit=1;};
|
class addCBASettings {preInit=1;};
|
||||||
class initClient {};
|
class initClient {};
|
||||||
class addDrawIconsPFH {};
|
class draw3D {};
|
||||||
class addGetEntitiesPFH {};
|
|
||||||
class updateColors {};
|
class updateColors {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -185,7 +172,11 @@ class DOUBLES(PREFIX,vehicleFlags) {
|
|||||||
class functions {
|
class functions {
|
||||||
file = "framework\vehicleFlags\functions";
|
file = "framework\vehicleFlags\functions";
|
||||||
class initClient {};
|
class initClient {};
|
||||||
|
class addFlagActions {};
|
||||||
|
class draw3D {};
|
||||||
class getActionsFlagCategories {};
|
class getActionsFlagCategories {};
|
||||||
|
class compileFlagAction {};
|
||||||
|
class compileFlagCategoryAction {};
|
||||||
class getVehicleFlagsCfg {};
|
class getVehicleFlagsCfg {};
|
||||||
class isClassExcluded {};
|
class isClassExcluded {};
|
||||||
};
|
};
|
||||||
|
|||||||
10
framework/client/functions/fn_addDraw3DPFH.sqf
Normal file
10
framework/client/functions/fn_addDraw3DPFH.sqf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
if (!isNil QGVAR(draw3DPFH)) then {
|
||||||
|
[GVAR(draw3DPFH)] call CBA_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
// add pfh that processes queued code
|
||||||
|
GVAR(draw3DPFH) = [{
|
||||||
|
{call _x; true;} count (localNamespace getVariable [QGVAR(pfhCode), []]);
|
||||||
|
}, 0] call CBA_fnc_addPerFrameHandler;
|
||||||
17
framework/client/functions/fn_addGetNearMenPFH.sqf
Normal file
17
framework/client/functions/fn_addGetNearMenPFH.sqf
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
// subroutine to gather nearest 50 units every 5 seconds and store in GVAR(nearMen)
|
||||||
|
// cleanup
|
||||||
|
if (!isNil QGVAR(getNearMenPFH)) then {
|
||||||
|
[GVAR(getNearMenPFH)] call CBA_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
// add pfh
|
||||||
|
GVAR(getNearMenPFH) = [{
|
||||||
|
localNamespace setVariable [
|
||||||
|
QGVAR(nearMen),
|
||||||
|
(nearestObjects [player,["Man"],50,false]) select {
|
||||||
|
!isNull _x &&
|
||||||
|
player isNotEqualTo _x
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}, 1] call CBA_fnc_addPerFrameHandler;
|
||||||
76
framework/client/functions/fn_addMicroDAGRWaypoints.sqf
Normal file
76
framework/client/functions/fn_addMicroDAGRWaypoints.sqf
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
// adds default base locations to players' microDAGR as waypoints
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
[{!isNull player}, {
|
||||||
|
|
||||||
|
// add base locations (respawn modules)
|
||||||
|
{
|
||||||
|
private _wpName = [_x] call EFUNC(common,getNameOfBase);
|
||||||
|
private _posASL = getPosASL _x;
|
||||||
|
[_wpName, _posASL] call ace_microdagr_fnc_deviceAddWaypoint;
|
||||||
|
} forEach GVARMAIN(baseObjects);
|
||||||
|
|
||||||
|
// add custom waypoints from mission_settings.hpp
|
||||||
|
private _customWaypoints = [missionConfigFile >> "custom_microdagr_waypoints", "ARRAY", []] call CBA_fnc_getConfigEntry;
|
||||||
|
{
|
||||||
|
_x params [
|
||||||
|
["_wpName", ""],
|
||||||
|
["_pos", [0, 0, 0], [[], ""]],
|
||||||
|
["_object", "", [""]]
|
||||||
|
];
|
||||||
|
private _realPos = nil;
|
||||||
|
// if pos was provided, process
|
||||||
|
if (count _pos >= 2) then {
|
||||||
|
switch (typeName _pos) do {
|
||||||
|
case "ARRAY": {
|
||||||
|
// pos is provided as an array
|
||||||
|
_realPos = _pos select [0, 2];
|
||||||
|
_realPos set [2, getTerrainHeightASL _realPos];
|
||||||
|
};
|
||||||
|
case "STRING": {
|
||||||
|
// pos is provided as a string
|
||||||
|
_realPos = [_pos, true] call ACE_common_fnc_getMapPosFromGrid;
|
||||||
|
_realPos set [2, getTerrainHeightASL _realPos];
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
[
|
||||||
|
LEVEL_WARNING,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
format["Invalid position for custom microDAGR waypoint: %1", _wpName],
|
||||||
|
[["name", _wpName], ["pos", _pos], ["object", _object]]] call EFUNC(common,log);
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
// if object was provided, process and override any pos
|
||||||
|
if (count _object > 0) then {
|
||||||
|
// object is provided as a string variable name
|
||||||
|
private _realObject = missionNamespace getVariable _object;
|
||||||
|
if (isNull _realObject) then {
|
||||||
|
[
|
||||||
|
LEVEL_WARNING,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
format["Invalid object for custom microDAGR waypoint: %1", _wpName],
|
||||||
|
[["name", _wpName], ["pos", _pos], ["object", _object]]] call EFUNC(common,log);
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
_realPos = getPosASL (missionNamespace getVariable _object);
|
||||||
|
};
|
||||||
|
if (isNil "_realPos") then {
|
||||||
|
[
|
||||||
|
LEVEL_WARNING,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
format["Invalid waypoint position for custom microDAGR waypoint: %1", _wpName],
|
||||||
|
[["name", _wpName], ["pos", _pos], ["object", _object]]] call EFUNC(common,log);
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
[_wpName, _realPos] call ace_microdagr_fnc_deviceAddWaypoint;
|
||||||
|
true;
|
||||||
|
} count _customWaypoints;
|
||||||
|
}] call CBA_fnc_waitUntilAndExecute;
|
||||||
|
|
||||||
|
nil;
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
[
|
|
||||||
LEVEL_INFO,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Initializing empty group deletion PFH",
|
|
||||||
[]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
|
|
||||||
_emptyGroupPFH = [
|
|
||||||
{
|
|
||||||
{
|
|
||||||
if (local _x) then {
|
|
||||||
if ((count units _x) == 0) then {
|
|
||||||
deleteGroup _x;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
} forEach allGroups;
|
|
||||||
},
|
|
||||||
300,
|
|
||||||
[],
|
|
||||||
{
|
|
||||||
[
|
|
||||||
LEVEL_INFO,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Empty group deletion PFH loaded",
|
|
||||||
[]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
},
|
|
||||||
{ [
|
|
||||||
LEVEL_INFO,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Empty group deletion PFH unloaded",
|
|
||||||
[]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
},
|
|
||||||
{ true },
|
|
||||||
{ false },
|
|
||||||
[]
|
|
||||||
] call CBA_fnc_createPerFrameHandlerObject;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2,23 +2,6 @@
|
|||||||
|
|
||||||
if ( !hasInterface ) exitWith {};
|
if ( !hasInterface ) exitWith {};
|
||||||
|
|
||||||
player addEventHandler["Respawn",
|
|
||||||
{
|
|
||||||
params ["_unit", "_corpse"];
|
|
||||||
private _killer = _corpse getVariable ["ace_medical_causeOfDeath", "#scripted"];
|
|
||||||
if (_killer == "respawn_button") then {
|
|
||||||
[
|
|
||||||
LEVEL_INFO,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"RESPAWNED WHILE UNCONSCIOUS",
|
|
||||||
[_unit] call EFUNC(common,addPlayerInfoToArray)
|
|
||||||
] remoteExec [QEFUNC(common,log), 2];
|
|
||||||
// format["%1 was unconscious then clicked the respawn button", name _unit] remoteExec["systemChat", 0];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
params ["_unit", "_object", "_cost"];
|
params ["_unit", "_object", "_cost"];
|
||||||
@@ -32,14 +15,17 @@ addMissionEventHandler ["HandleChatMessage",
|
|||||||
{
|
{
|
||||||
params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType"];
|
params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType"];
|
||||||
|
|
||||||
if ( missionNamespace getVariable ["milsim_sideChat", false] ) exitWith{ false };
|
|
||||||
|
|
||||||
if (_channel != 1) exitWith { false };
|
|
||||||
|
|
||||||
if ( ( admin _owner ) != 0 ) exitWith { false };
|
if ( ( admin _owner ) != 0 ) exitWith { false };
|
||||||
|
|
||||||
if ( !isNull ( getAssignedCuratorLogic _person ) ) exitWith { false };
|
if ( !isNull ( getAssignedCuratorLogic _person ) ) exitWith { false };
|
||||||
|
|
||||||
|
if ( (missionNamespace getVariable ["milsim_globalChat", false] ) && ( _channel == 0 ) ) exitWith{ false };
|
||||||
|
if ( (missionNamespace getVariable ["milsim_sideChat", false] ) && ( _channel == 1 ) ) exitWith{ false };
|
||||||
|
if ( (missionNamespace getVariable ["milsim_commandChat", false] && ( _channel == 2 ) ) ) exitWith{ false };
|
||||||
|
if ( (missionNamespace getVariable ["milsim_groupChat", false] ) && ( _channel == 3 ) ) exitWith{ false };
|
||||||
|
if ( (missionNamespace getVariable ["milsim_vehicleChat", false] && ( _channel == 4 ) ) ) exitWith{ false };
|
||||||
|
if ( (missionNamespace getVariable ["milsim_directChat", false] ) && ( _channel == 5 ) ) exitWith{ false };
|
||||||
|
|
||||||
true;
|
true;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -29,39 +29,6 @@ _unflip =
|
|||||||
["LandVehicle", 0, ["ACE_MainActions"], _unflip, true] call ace_interact_menu_fnc_addActionToClass;
|
["LandVehicle", 0, ["ACE_MainActions"], _unflip, true] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
|
|
||||||
_patchTire =
|
|
||||||
[
|
|
||||||
"patchTire",
|
|
||||||
"Patch Tire",
|
|
||||||
"\a3\ui_f\data\IGUI\Cfg\Actions\repair_ca.paa",
|
|
||||||
{
|
|
||||||
[_player, "AinvPknlMstpSnonWnonDr_medic5", 0] call ace_common_fnc_doAnimation;
|
|
||||||
|
|
||||||
[
|
|
||||||
30,
|
|
||||||
[_player, _target],
|
|
||||||
{
|
|
||||||
params ["_args"];
|
|
||||||
_args params ["_player", "_target"];
|
|
||||||
hint "Tire Patched";
|
|
||||||
_target setDamage 0.2;
|
|
||||||
_target setVariable["milsim_ace_repair_wheel_canPatch", false];
|
|
||||||
},
|
|
||||||
{
|
|
||||||
params ["_args"];
|
|
||||||
_args params ["_player", "_target"];
|
|
||||||
hint "Stopped repair";
|
|
||||||
[_player, "", 0] call ace_common_fnc_doAnimation;
|
|
||||||
},
|
|
||||||
"Patching"
|
|
||||||
] call ace_common_fnc_progressBar
|
|
||||||
},
|
|
||||||
{ ( alive _target ) && ( [_player, "ToolKit"] call ace_common_fnc_hasItem ) && ( damage _target > 0.2 ) && ( _target getVariable["milsim_ace_repair_wheel_canPatch", true] ) }
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
["ACE_Wheel", 0, ["ACE_MainActions"], _patchTire, true] call ace_interact_menu_fnc_addActionToClass;
|
|
||||||
|
|
||||||
|
|
||||||
diag_log text "[MILSIM] (client) vehicle actions bound";
|
diag_log text "[MILSIM] (client) vehicle actions bound";
|
||||||
|
|
||||||
nil;
|
nil;
|
||||||
5
framework/client/functions/fn_clearPFHCode.sqf
Normal file
5
framework/client/functions/fn_clearPFHCode.sqf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
localNamespace setVariable [QGVAR(pfhCode), []];
|
||||||
|
|
||||||
|
count [];
|
||||||
32
framework/client/functions/fn_initClient.sqf
Normal file
32
framework/client/functions/fn_initClient.sqf
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
call FUNC(addMicroDAGRWaypoints);
|
||||||
|
call FUNC(addZenModules);
|
||||||
|
call FUNC(bindEventHandlers);
|
||||||
|
call FUNC(bindVehicleActions);
|
||||||
|
|
||||||
|
// add core getNearMenPFH handler
|
||||||
|
localNamespace setVariable [QGVAR(nearMen), []];
|
||||||
|
call FUNC(addGetNearMenPFH);
|
||||||
|
// add core draw3dPFH handler
|
||||||
|
localNamespace setVariable [QGVAR(pfhCode), []];
|
||||||
|
call FUNC(addDraw3DPFH);
|
||||||
|
|
||||||
|
// add listener that tracks using the respawn button while unconscious
|
||||||
|
call FUNC(logRespawnButtonUse);
|
||||||
|
// add conditional eject-from-vehicle handler to apply temp invincibility when static line jumping
|
||||||
|
call FUNC(staticLineProtection);
|
||||||
|
|
||||||
|
[
|
||||||
|
LEVEL_DEBUG,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"initClient complete",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
localNamespace setVariable [QGVAR(complete), true];
|
||||||
|
|
||||||
|
nil;
|
||||||
57
framework/client/functions/fn_logRespawnButtonUse.sqf
Normal file
57
framework/client/functions/fn_logRespawnButtonUse.sqf
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if ( !hasInterface ) exitWith {};
|
||||||
|
|
||||||
|
["ace_killed", {
|
||||||
|
params ["_unit", "_causeOfDeath", "_killer", "_instigator"];
|
||||||
|
|
||||||
|
if (not (local _unit)) exitWith {};
|
||||||
|
|
||||||
|
private _causeOfDeath = _unit getVariable ["ace_medical_causeOfDeath", "#scripted"];
|
||||||
|
private _triageLevel = _unit call ace_medical_treatment_fnc_getTriageStatus;
|
||||||
|
|
||||||
|
if (_causeOfDeath != "respawn_button") exitWith {};
|
||||||
|
private _timeWentUnconscious = _unit getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
||||||
|
private _durationSpentUnconscious = -1;
|
||||||
|
if (_timeWentUnconscious isEqualTo -1) exitWith {};
|
||||||
|
|
||||||
|
_durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"RESPAWNED WHILE UNCONSCIOUS",
|
||||||
|
[_unit, [
|
||||||
|
["durationSpentUnconscious", _durationSpentUnconscious],
|
||||||
|
["triageLevel", _triageLevel#1]
|
||||||
|
]] call EFUNC(common,addPlayerInfoToArray)
|
||||||
|
] remoteExec [QEFUNC(common,log), 2];
|
||||||
|
// format["%1 was unconscious then clicked the respawn button", name _unit] remoteExec["systemChat", 0];
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
|
|
||||||
|
["ace_medical_knockOut", { // local event for module & epi event
|
||||||
|
// systemChat format["ace_medical_knockOut: %1", _this];
|
||||||
|
private _unit = _this;
|
||||||
|
if (not (local _unit)) exitWith {};
|
||||||
|
_this setVariable [QGVARMAIN(lastTimeKnockedOut), diag_tickTime];
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
|
["ace_medical_WakeUp", { // local event for module & epi event
|
||||||
|
// systemChat format["ace_medical_WakeUp: %1", _this];
|
||||||
|
private _unit = _this;
|
||||||
|
if (not (local _unit)) exitWith {};
|
||||||
|
_this setVariable [QGVARMAIN(lastTimeKnockedOut), nil];
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
|
|
||||||
|
["ace_unconscious", { // used when applying damage
|
||||||
|
params ["_unit", "_isUnconscious"];
|
||||||
|
if (not (local _unit)) exitWith {};
|
||||||
|
|
||||||
|
if (_isUnconscious && isNil {_unit getVariable QGVARMAIN(lastTimeKnockedOut)}) then {
|
||||||
|
// systemChat format["%1 is unconscious", _unit];
|
||||||
|
_unit setVariable [QGVARMAIN(lastTimeKnockedOut), diag_tickTime];
|
||||||
|
} else {
|
||||||
|
// systemChat format["%1 is conscious", _unit];
|
||||||
|
_unit setVariable [QGVARMAIN(lastTimeKnockedOut), nil];
|
||||||
|
};
|
||||||
|
}] call CBA_fnc_addEventHandler;
|
||||||
9
framework/client/functions/fn_registerPFHCode.sqf
Normal file
9
framework/client/functions/fn_registerPFHCode.sqf
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
params [["_code", {}, [{}]]];
|
||||||
|
|
||||||
|
private _pfhCode = localNamespace getVariable [QGVAR(pfhCode), []];
|
||||||
|
_pfhCode pushBack _code;
|
||||||
|
localNamespace setVariable [QGVAR(pfhCode), _pfhCode];
|
||||||
|
|
||||||
|
count _pfhCode;
|
||||||
40
framework/client/functions/fn_staticLineProtection.sqf
Normal file
40
framework/client/functions/fn_staticLineProtection.sqf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if ( !hasInterface ) exitWith {};
|
||||||
|
|
||||||
|
// Add GetOutMan event handler to grant temporary invincibility to players ejecting from vehicles
|
||||||
|
// Only for players who have "hooked up" using VS static line
|
||||||
|
// and are ejecting from a plane or helicopter above 100m
|
||||||
|
player addEventHandler ["GetOutMan", {
|
||||||
|
params ["_unit", "_role", "_vehicle", "_turret", "_isEject"];
|
||||||
|
if (!isEject) exitWith {};
|
||||||
|
if (isNil {_unit getVariable "VS_Jump"}) exitWith {};
|
||||||
|
if (
|
||||||
|
not (_vehicle isKindOf "Plane" || _vehicle isKindOf "Helicopter") ||
|
||||||
|
((getPosATL _vehicle)#2) < 100
|
||||||
|
) exitWith {};
|
||||||
|
|
||||||
|
// disable damage for the unit to avoid collision damage
|
||||||
|
_unit allowDamage false;
|
||||||
|
// tested - vehicle _unit is the _unit, as this EH runs when they have left the vehicle
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
{!isNull (objectParent _this)}, // condition - wait until player re-enters vehicle (chute)
|
||||||
|
{
|
||||||
|
// if they enter a chute within 5 seconds, disable chute damage
|
||||||
|
(vehicle _this) allowDamage false;
|
||||||
|
// then wait X seconds and re-enable damage for both
|
||||||
|
[{
|
||||||
|
_this allowDamage true;
|
||||||
|
(vehicle _this) allowDamage true;
|
||||||
|
}, _this, 5] call CBA_fnc_waitAndExecute;
|
||||||
|
},
|
||||||
|
_unit, // args
|
||||||
|
2, // timeout
|
||||||
|
{ // run on timeout, if for some reason they don't enter a chute
|
||||||
|
// re-enable damage for unit
|
||||||
|
_this allowDamage true;
|
||||||
|
}
|
||||||
|
] call CBA_fnc_waitUntilAndExecute;
|
||||||
|
}];
|
||||||
@@ -1,15 +1,33 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
// Global Chat
|
||||||
|
//---------------------
|
||||||
|
[
|
||||||
|
QGVARMAIN(globalChat),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Global Chat Text Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true, // default value
|
||||||
|
true, // requires restart
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVARMAIN(globalChat),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
//---------------------
|
//---------------------
|
||||||
// Side Chat
|
// Side Chat
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
[
|
[
|
||||||
QGVARMAIN(sideChat),
|
QGVARMAIN(sideChat),
|
||||||
"CHECKBOX",
|
"CHECKBOX",
|
||||||
"Side Chat Text Enabled",
|
"Side Chat Text Enabled",
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
false, // default value
|
true, // default value
|
||||||
true, // requires restart
|
true, // requires restart
|
||||||
{
|
{
|
||||||
params ["_value"];
|
params ["_value"];
|
||||||
@@ -20,7 +38,92 @@
|
|||||||
}
|
}
|
||||||
] call CBA_fnc_addSetting;
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
// Command Chat
|
||||||
|
//---------------------
|
||||||
|
[
|
||||||
|
QGVARMAIN(commandChat),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Command Chat Text Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true, // default value
|
||||||
|
true, // requires restart
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVARMAIN(commandChat),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
// Group Chat
|
||||||
|
//---------------------
|
||||||
|
[
|
||||||
|
QGVARMAIN(groupChat),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Group Chat Text Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true, // default value
|
||||||
|
true, // requires restart
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVARMAIN(groupChat),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
// Vehicle Chat
|
||||||
|
//---------------------
|
||||||
|
[
|
||||||
|
QGVARMAIN(vehicleChat),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Vehicle Chat Text Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true, // default value
|
||||||
|
true, // requires restart
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVARMAIN(vehicleChat),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
// Vehicle Chat
|
||||||
|
//---------------------
|
||||||
|
[
|
||||||
|
QGVARMAIN(directChat),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Direct Chat Text Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true, // default value
|
||||||
|
true, // requires restart
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVARMAIN(directChat),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
|
||||||
|
[QGVARMAIN(globalChat), false] call CBA_settings_fnc_set;
|
||||||
[QGVARMAIN(sideChat), false] call CBA_settings_fnc_set;
|
[QGVARMAIN(sideChat), false] call CBA_settings_fnc_set;
|
||||||
|
[QGVARMAIN(commandChat), false] call CBA_settings_fnc_set;
|
||||||
|
[QGVARMAIN(groupChat), false] call CBA_settings_fnc_set;
|
||||||
|
[QGVARMAIN(vehicleChat), false] call CBA_settings_fnc_set;
|
||||||
|
[QGVARMAIN(directChat), false] call CBA_settings_fnc_set;
|
||||||
|
|
||||||
diag_log text "[MILSIM] (settings) Custom CBA settings initialized";
|
diag_log text "[MILSIM] (settings) Custom CBA settings initialized";
|
||||||
|
|
||||||
|
|||||||
54
framework/common/functions/fn_draw3DIconStatus.sqf
Normal file
54
framework/common/functions/fn_draw3DIconStatus.sqf
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
params [
|
||||||
|
["_drawTargets", [], [[]]],
|
||||||
|
["_icon", "", [""]],
|
||||||
|
["_text", "", [""]],
|
||||||
|
["_color", [], [[]]]
|
||||||
|
];
|
||||||
|
|
||||||
|
if (count _drawTargets isEqualTo 0) exitWith {};
|
||||||
|
|
||||||
|
_cameraPos = positionCameraToWorld [0,0,0];
|
||||||
|
_cameraPosASL = AGLToASL _cameraPos;
|
||||||
|
|
||||||
|
{
|
||||||
|
_target = _x;
|
||||||
|
_visible = [objNull, "VIEW"] checkVisibility [_cameraPosASL, eyePos _target];
|
||||||
|
|
||||||
|
if ( _visible isEqualTo 0 ) exitWith {};
|
||||||
|
|
||||||
|
_objectPos = (_target modelToWorldVisual (_target selectionPosition "pilot"));
|
||||||
|
_distance = (visiblePosition _target) vectorDiff _cameraPos;
|
||||||
|
|
||||||
|
_scale = 0;
|
||||||
|
_heightOffset = 0;
|
||||||
|
_heightScaling = 0.012;
|
||||||
|
|
||||||
|
if ( _icon isNotEqualTo "") then {
|
||||||
|
_heightOffset = 0.065;
|
||||||
|
_scale = 1;
|
||||||
|
_heightScaling = 0.075;
|
||||||
|
};
|
||||||
|
|
||||||
|
_drawPos = _objectPos vectorAdd [0, 0, (0.18 + _heightOffset) + (vectorMagnitude _distance * _heightScaling)];
|
||||||
|
|
||||||
|
drawIcon3D [
|
||||||
|
_icon,
|
||||||
|
_color,
|
||||||
|
_drawPos,
|
||||||
|
_scale,
|
||||||
|
_scale,
|
||||||
|
0,
|
||||||
|
_text,
|
||||||
|
2,
|
||||||
|
0.025
|
||||||
|
];
|
||||||
|
|
||||||
|
true;
|
||||||
|
} count _drawTargets;
|
||||||
|
|
||||||
|
nil
|
||||||
|
|
||||||
@@ -24,19 +24,10 @@ if (_logLevel < DEBUG_MODE) exitWith {};
|
|||||||
private _hash = createHashMapFromArray _data;
|
private _hash = createHashMapFromArray _data;
|
||||||
|
|
||||||
// Replace square brackets with round brackets to avoid parsing issues.
|
// Replace square brackets with round brackets to avoid parsing issues.
|
||||||
_message regexReplace ['(\[)', "("];
|
[_message, "]", ")"] call CBA_fnc_replace;
|
||||||
_message regexReplace ['(\])', ")"];
|
[_message, "[", "("] call CBA_fnc_replace;
|
||||||
|
|
||||||
private _levelText = switch (_logLevel) do {
|
|
||||||
case (_logLevel isEqualTo -1) : {"TRACE"};
|
|
||||||
case (_logLevel isEqualTo 0) : {"DEBUG"};
|
|
||||||
case (_logLevel isEqualTo 1) : {"INFO"};
|
|
||||||
case (_logLevel isEqualTo 2) : {"WARN"};
|
|
||||||
case (_logLevel isEqualTo 3) : {"ERROR"};
|
|
||||||
default {"INFO"};
|
|
||||||
};
|
|
||||||
|
|
||||||
private _json = [_hash] call CBA_fnc_encodeJSON;
|
private _json = [_hash] call CBA_fnc_encodeJSON;
|
||||||
_log = format ["[%1] [%2] [%3] [%4] [%5] :: %6", QUOTE(PREFIX), _component, _fnc_scriptNameParent, _levelText, _message, _json];
|
private _log = format ["[%1] [%2] [%3] [%4] :: %5", QUOTE(PREFIX), _component, _fnc_scriptNameParent, _message, _json];
|
||||||
|
|
||||||
diag_log text _log;
|
diag_log text _log;
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#include "script_component.hpp"
|
|
||||||
|
|
||||||
class GVAR(sound_zap1) {
|
|
||||||
name = QGVAR(sound_zap1);
|
|
||||||
sound[] = {"framework\emp\sounds\zap1.wss", db+10, 1};
|
|
||||||
titles[] = {};
|
|
||||||
};
|
|
||||||
class GVAR(sound_zap2) {
|
|
||||||
name = QGVAR(sound_zap2);
|
|
||||||
sound[] = {"framework\emp\sounds\zap2.wss", db+10, 1};
|
|
||||||
titles[] = {};
|
|
||||||
};
|
|
||||||
class GVAR(sound_zap3) {
|
|
||||||
name = QGVAR(sound_zap3);
|
|
||||||
sound[] = {"framework\emp\sounds\zap3.wss", db+10, 1};
|
|
||||||
titles[] = {};
|
|
||||||
};
|
|
||||||
class GVAR(sound_zap4) {
|
|
||||||
name = QGVAR(sound_zap4);
|
|
||||||
sound[] = {"framework\emp\sounds\zap4.wss", db+10, 1};
|
|
||||||
titles[] = {};
|
|
||||||
};
|
|
||||||
class GVAR(sound_electric_explsion_impact_large) {
|
|
||||||
name = QGVAR(sound_electric_explsion_impact_large);
|
|
||||||
sound[] = {"framework\emp\sounds\electric_explsion_impact_large.wss", db+750, 1};
|
|
||||||
titles[] = {};
|
|
||||||
};
|
|
||||||
class GVAR(sound_echo3) {
|
|
||||||
name = QGVAR(sound_echo3);
|
|
||||||
sound[] = {"framework\emp\sounds\echo3.wss", db+500, 1};
|
|
||||||
titles[] = {1,""};
|
|
||||||
};
|
|
||||||
class GVAR(sound_ecou) {
|
|
||||||
name = QGVAR(sound_ecou);
|
|
||||||
sound[] = {"framework\emp\sounds\ecou.wss", db+100, 1};
|
|
||||||
titles[] = {1,""};
|
|
||||||
};
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
|
||||||
|
|
||||||
private _rootAction = [
|
|
||||||
QGVAR(action_deploy),
|
|
||||||
"Deploy EMP Device",
|
|
||||||
"",
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
true;
|
|
||||||
},
|
|
||||||
{true},
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
private _childActions = [];
|
|
||||||
{
|
|
||||||
private _radius = _x;
|
|
||||||
private _action = [
|
|
||||||
format["%1_%2", QGVAR(action_deploy), _radius],
|
|
||||||
format["Deploy EMP Device (%1m)", _radius],
|
|
||||||
"",
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_params params ["_radius"];
|
|
||||||
[GVAR(empDevice1), _radius] call FUNC(deploy);
|
|
||||||
},
|
|
||||||
{!isNull (missionNamespace getVariable [QGVAR(empDevice1), objNull]);},
|
|
||||||
nil,
|
|
||||||
[_radius]
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
_childActions pushBack [_action, [], _target];
|
|
||||||
false
|
|
||||||
} count [100,500,3000];
|
|
||||||
_childActions;
|
|
||||||
}
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
["CAManBase", 1, ["ACE_SelfActions"], _rootAction, true] call ace_interact_menu_fnc_addActionToClass;
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// Executed on all machines - global argument, local effect
|
|
||||||
// The effects must be applied on all machines
|
|
||||||
|
|
||||||
params [["_object", objNull, [objNull]]];
|
|
||||||
if (isNull _object) exitWith {};
|
|
||||||
|
|
||||||
_object setHitPointDamage ["hitturret",1];
|
|
||||||
_object setHitPointDamage ["hitcomturret",1];
|
|
||||||
_object setHitPointDamage ["hitcomgun",1];
|
|
||||||
_object setHitPointDamage ["#light_hitpoint",1];
|
|
||||||
_object setHitPointDamage ["HitBatteries",1];
|
|
||||||
_object setHitPointDamage ["HitLight",1];
|
|
||||||
_object setHitPointDamage ["#light_l",1];
|
|
||||||
_object setHitPointDamage ["#light_r",1];
|
|
||||||
_object setHitPointDamage ["#light_l_flare",1];
|
|
||||||
_object setHitPointDamage ["#light_r_flare",1];
|
|
||||||
_object setHitPointDamage ["light_l",1];
|
|
||||||
_object setHitPointDamage ["light_r",1];
|
|
||||||
_object setHitPointDamage ["light_l2",1];
|
|
||||||
_object setHitPointDamage ["light_r2",1];
|
|
||||||
_object setHitPointDamage ["hitEngine",1];
|
|
||||||
_object setHitPointDamage ["hitengine",1];
|
|
||||||
_object setHitPointDamage ["hitengine1",1];
|
|
||||||
_object setHitPointDamage ["hitengine2",1];
|
|
||||||
_object setHitPointDamage ["hitengine3",1];
|
|
||||||
_object setHitPointDamage ["HitEngine2",1];
|
|
||||||
_object setHitPointDamage ["HitAvionics",1];
|
|
||||||
_object setHitPointDamage ["HitHRotor",1];
|
|
||||||
_object setHitPointDamage ["HitVRotor",1];
|
|
||||||
_object setHitPointDamage ["HitHydraulics",1];
|
|
||||||
_object setHitPointDamage ["HitHStabilizerL1",1];
|
|
||||||
_object setHitPointDamage ["HitHStabilizerR1",1];
|
|
||||||
_object setHitPointDamage ["HitVStabilizer1",1];
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
params [["_group", grpNull, [grpNull]]];
|
|
||||||
if (isNull _group) exitWith {};
|
|
||||||
if !(local _group) exitWith {};
|
|
||||||
|
|
||||||
//set gunlight status
|
|
||||||
_group enableGunLights "forceOff";
|
|
||||||
_group enableIRLasers true;
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// Executed on all clients, only continue if object is local.
|
|
||||||
// Local argument, global effect (the object owner broadcasts new state)
|
|
||||||
|
|
||||||
params [["_object", objNull, [objNull]]];
|
|
||||||
if (isNull _object) exitWith {};
|
|
||||||
if !(local _object) exitWith {};
|
|
||||||
|
|
||||||
_object disableAI "LIGHTS";
|
|
||||||
_object setPilotLight false;
|
|
||||||
_object setCollisionLight false;
|
|
||||||
|
|
||||||
if (_object isKindOf "CAManBase") then {
|
|
||||||
[_object] call FUNC(removeUnitElectricInventoryItems);
|
|
||||||
} else {
|
|
||||||
[_object] call FUNC(removeVehicleElectricInventoryItems);
|
|
||||||
};
|
|
||||||
|
|
||||||
[{ // once flicker effects are done, permanently disable lights
|
|
||||||
private _flickerHandle = _object getVariable QGVAR(flickerHandle);
|
|
||||||
!isNil "_flickerHandle" && {scriptDone _flickerHandle}
|
|
||||||
}, {
|
|
||||||
_object setHit ["light_1_hitpoint", 0.97]; //all possible light hitpoints
|
|
||||||
_object setHit ["light_2_hitpoint", 0.97]; //no lights escape this
|
|
||||||
_object setHit ["light_3_hitpoint", 0.97];
|
|
||||||
_object setHit ["light_4_hitpoint", 0.97];
|
|
||||||
}] call CBA_fnc_waitUntilAndExecute;
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// Executed on server only, global argument and global effect
|
|
||||||
// The server makes the change and broadcasts new state to all clients
|
|
||||||
|
|
||||||
if (!isServer) exitWith {};
|
|
||||||
|
|
||||||
params [["_object", objNull, [objNull]]];
|
|
||||||
if (isNull _object) exitWith {};
|
|
||||||
|
|
||||||
_object disableTIEquipment true;
|
|
||||||
_object disableNVGEquipment true;
|
|
||||||
_object setVariable ["A3TI_Disable", true, true];
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// This function is used to deploy an EMP device and trigger the EMP effects on all machines
|
|
||||||
// The EMP effect is triggered by the global event "QGVAR(event_empDeployed)"
|
|
||||||
// This function should be called on the server
|
|
||||||
|
|
||||||
if (!isServer) exitWith {};
|
|
||||||
|
|
||||||
//get center and radius
|
|
||||||
params [["_origin", objNull, [[], objNull]],["_radius",1500, [300]]];
|
|
||||||
|
|
||||||
if (_origin isEqualType []) then {
|
|
||||||
if (count _origin != 3) exitWith {
|
|
||||||
["Invalid origin position provided (%1)", _origin] call BIS_fnc_error;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_origin isEqualType objNull) then {
|
|
||||||
if (isNull _origin) exitWith {
|
|
||||||
["No origin object or position provided (%1)", _origin] call BIS_fnc_error;
|
|
||||||
};
|
|
||||||
_origin = getPosASL _origin;
|
|
||||||
};
|
|
||||||
|
|
||||||
[QGVAR(event_empDeployedPreCheck), [
|
|
||||||
random 100000,
|
|
||||||
_origin,
|
|
||||||
_radius
|
|
||||||
]] call CBA_fnc_globalEvent;
|
|
||||||
|
|
||||||
true;
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// This function will gather objects to be affected by the EMP blast
|
|
||||||
// It will return an array of objects within the radius of the EMP blast
|
|
||||||
|
|
||||||
params [["_origin", objNull, [[], objNull]],["_radius",1500]];
|
|
||||||
|
|
||||||
if (_origin isEqualType []) then {
|
|
||||||
if (count _origin != 3) exitWith {
|
|
||||||
["Invalid origin position provided (%1)", _origin] call BIS_fnc_error;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_origin isEqualType objNull) then {
|
|
||||||
if (isNull _origin) exitWith {
|
|
||||||
["No origin object or position provided (%1)", _origin] call BIS_fnc_error;
|
|
||||||
};
|
|
||||||
_origin = getPosASL _origin;
|
|
||||||
};
|
|
||||||
|
|
||||||
//search for and return objects
|
|
||||||
private _objectsToAffect = nearestObjects [
|
|
||||||
_origin,
|
|
||||||
[
|
|
||||||
"Car",
|
|
||||||
"Motorcycle",
|
|
||||||
"UAV",
|
|
||||||
"Tank",
|
|
||||||
"Air",
|
|
||||||
"Ship",
|
|
||||||
"StreetLamp",
|
|
||||||
"Lamps_base_F", //These are all the lights' base classes
|
|
||||||
"PowerLines_base_F",
|
|
||||||
"PowerLines_Small_base_F",
|
|
||||||
"Land_TTowerBig_1_F",
|
|
||||||
"Land_TTowerBig_2_F",
|
|
||||||
"Land_fs_roof_F",
|
|
||||||
"Land_NavigLight",
|
|
||||||
"PowerLines_Wires_base_F",
|
|
||||||
"Land_PowerPoleWooden_L_F",
|
|
||||||
"Land_Runway_PAPI",
|
|
||||||
"Land_fs_sign_F",
|
|
||||||
"Land_FuelStation_01_roof_malevil_F",
|
|
||||||
"Land_FuelStation_01_roof_F",
|
|
||||||
"Lamps",
|
|
||||||
"Helicopter",
|
|
||||||
"Plane",
|
|
||||||
"Autonomous",
|
|
||||||
"Armored",
|
|
||||||
"Land_MobileRadar_01_radar_F",
|
|
||||||
"Land_Camping_Light_F",
|
|
||||||
"Land_PowLines_WoodL",
|
|
||||||
"Land_A_GeneralStore_01",
|
|
||||||
"Land_A_GeneralStore_01a",
|
|
||||||
"Land_Mil_Guardhouse",
|
|
||||||
"Land_NAV_Lighthouse",
|
|
||||||
"Land_Mil_House",
|
|
||||||
"Land_LightHouse_F",
|
|
||||||
"Land_Hospital_side2_F"
|
|
||||||
],
|
|
||||||
_radius
|
|
||||||
];
|
|
||||||
|
|
||||||
private _affectedLocalGroups = _objectsToAffect apply {group _x};
|
|
||||||
_affectedLocalGroups = _affectedLocalGroups arrayIntersect _affectedLocalGroups;
|
|
||||||
_affectedLocalGroups = _affectedLocalGroups select {local _x} select {!isPlayer (leader _x)};
|
|
||||||
|
|
||||||
[_objectsToAffect, _affectedLocalGroups];
|
|
||||||
@@ -1,280 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
GVAR(maxBrightDelay) = 3.25;
|
|
||||||
|
|
||||||
GVAR(zapSounds) = createHashMap;
|
|
||||||
{
|
|
||||||
private _cfg = missionConfigFile >> "CfgSounds" >> _x;
|
|
||||||
private _dataArr = getArray(_cfg >> "sound");
|
|
||||||
GVAR(zapSounds) set [_x, createHashMapFromArray [
|
|
||||||
["filename", _dataArr#0],
|
|
||||||
["volume", _dataArr#1],
|
|
||||||
["pitch", _dataArr#2]
|
|
||||||
]];
|
|
||||||
true;
|
|
||||||
} count [QGVAR(sound_zap1),QGVAR(sound_zap2),QGVAR(sound_zap3),QGVAR(sound_zap4)];
|
|
||||||
|
|
||||||
GVAR(echoSounds) = createHashMap;
|
|
||||||
{
|
|
||||||
private _cfg = missionConfigFile >> "CfgSounds" >> _x;
|
|
||||||
private _dataArr = getArray(_cfg >> "sound");
|
|
||||||
GVAR(echoSounds) set [_x, createHashMapFromArray [
|
|
||||||
["filename", _dataArr#0],
|
|
||||||
["volume", _dataArr#1],
|
|
||||||
["pitch", _dataArr#2]
|
|
||||||
]];
|
|
||||||
true;
|
|
||||||
} count [QGVAR(sound_ecou),QGVAR(sound_echo3)];
|
|
||||||
|
|
||||||
|
|
||||||
private _lgExplosionCfg = missionConfigFile >> "CfgSounds" >> QGVAR(sound_electric_explsion_impact_large);
|
|
||||||
private _lgExplosionDataArray = getArray(_lgExplosionCfg >> "sound");
|
|
||||||
GVAR(sound_electric_explsion_impact_large) = createHashMapFromArray [
|
|
||||||
["filename", _lgExplosionDataArray#0],
|
|
||||||
["volume", _lgExplosionDataArray#1],
|
|
||||||
["pitch", _lgExplosionDataArray#2]
|
|
||||||
];
|
|
||||||
|
|
||||||
if (hasInterface) then {
|
|
||||||
call FUNC(addACEActions);
|
|
||||||
};
|
|
||||||
GVAR(activeEMPs) = createHashMap;
|
|
||||||
|
|
||||||
// this precheck is sent to all clients from FUNC(deploy)
|
|
||||||
// machines will precache affected objects and signal they're ready in return
|
|
||||||
[QGVAR(event_empDeployedPreCheck), {
|
|
||||||
params ["_id", "_origin", "_radius"];
|
|
||||||
|
|
||||||
([_origin, _radius] call FUNC(getObjectsAndGroupsToAffect)) params ["_affectedObjects", "_affectedLocalGroups"];
|
|
||||||
GVAR(activeEMPs) set [_id, createHashMapFromArray [
|
|
||||||
["origin", _origin],
|
|
||||||
["radius", _radius],
|
|
||||||
["objects", _affectedObjects],
|
|
||||||
["localGroups", _affectedLocalGroups],
|
|
||||||
["machinesReady", []]
|
|
||||||
]];
|
|
||||||
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"EMP deployed precheck",
|
|
||||||
[
|
|
||||||
["id", _id],
|
|
||||||
["origin", _origin],
|
|
||||||
["radius", _radius],
|
|
||||||
["affectedObjects", count _affectedObjects],
|
|
||||||
["affectedLocalGroups", count _affectedLocalGroups]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
|
|
||||||
// notify the server we're ready to play effects
|
|
||||||
[QGVAR(event_readyForEmpEffects), [_id, clientOwner]] call CBA_fnc_serverEvent;
|
|
||||||
|
|
||||||
if (isServer) then {
|
|
||||||
// on the server, create a waiter for all machines to be ready
|
|
||||||
[{
|
|
||||||
_this params ["_id"];
|
|
||||||
private _empData = GVAR(activeEMPs) get _id;
|
|
||||||
count (_empData get "machinesReady") isEqualTo (count allUsers);
|
|
||||||
}, {
|
|
||||||
// when all machines are ready, play effects
|
|
||||||
_this params ["_id"];
|
|
||||||
private _empData = GVAR(activeEMPs) get _id;
|
|
||||||
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Initiating EMP effects",
|
|
||||||
[
|
|
||||||
["id", _id],
|
|
||||||
["readyCount", count (_empData get "machinesReady")],
|
|
||||||
["allUsers", count allUsers]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
|
|
||||||
[QGVAR(event_initiateEMPEffects), [_id]] call CBA_fnc_globalEvent;
|
|
||||||
}, [_id]] call CBA_fnc_waitUntilAndExecute;
|
|
||||||
};
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
|
|
||||||
// when a machine is ready to play effects, they'll trigger this on the server
|
|
||||||
if (isServer) then {
|
|
||||||
[QGVAR(event_readyForEmpEffects), {
|
|
||||||
params ["_id", "_machineID"];
|
|
||||||
private _empData = GVAR(activeEMPs) get _id;
|
|
||||||
private _machinesReady = _empData get "machinesReady";
|
|
||||||
if (!(_machineID in _machinesReady)) then {
|
|
||||||
_machinesReady pushBack _machineID;
|
|
||||||
_empData set ["machinesReady", _machinesReady];
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Machine ready for EMP effects",
|
|
||||||
[
|
|
||||||
["id", _id],
|
|
||||||
["machineID", _machineID],
|
|
||||||
["readyCount", count _machinesReady]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
};
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
// when all machines are ready, the server will trigger this on all machines to start effects
|
|
||||||
[QGVAR(event_initiateEMPEffects), {
|
|
||||||
params ["_id"];
|
|
||||||
private _empData = GVAR(activeEMPs) get _id;
|
|
||||||
private _origin = _empData get "origin";
|
|
||||||
private _affectedObjects = _empData get "objects";
|
|
||||||
private _affectedLocalGroups = _empData get "localGroups";
|
|
||||||
|
|
||||||
if (hasInterface) then {
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Initiating EMP effects",
|
|
||||||
[
|
|
||||||
["id", _id],
|
|
||||||
["origin", _origin],
|
|
||||||
["affectedObjects", count _affectedObjects],
|
|
||||||
["affectedLocalGroups", count _affectedLocalGroups]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
|
|
||||||
[_origin] call FUNC(playLocalEffects);
|
|
||||||
|
|
||||||
// when emp effects reach max brightness, execute object effects
|
|
||||||
[{
|
|
||||||
params ["_affectedObjects", "_affectedLocalGroups"];
|
|
||||||
private _countLocalObjectEffectsPlayed = { // play effects on this machine
|
|
||||||
try {
|
|
||||||
[_x] call FUNC(playLocalEffectsForObject);
|
|
||||||
} catch {
|
|
||||||
[
|
|
||||||
LEVEL_WARNING,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Failed to play local EMP effects for object",
|
|
||||||
[
|
|
||||||
["object", typeOf _x],
|
|
||||||
["error", _exception]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
};
|
|
||||||
true;
|
|
||||||
} count _affectedObjects;
|
|
||||||
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Played EMP effects",
|
|
||||||
[
|
|
||||||
["localObjectEffectsPlayed", _countLocalObjectEffectsPlayed]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
}, [_affectedObjects, _affectedLocalGroups], GVAR(maxBrightDelay)] call CBA_fnc_waitAndExecute;
|
|
||||||
};
|
|
||||||
|
|
||||||
// around peak brightness
|
|
||||||
[{
|
|
||||||
params ["_affectedObjects", "_affectedLocalGroups"];
|
|
||||||
|
|
||||||
private _countLocalObjectEffectsApplied = { // apply affects to objects owned by this machine, start propagation to other machines
|
|
||||||
try {
|
|
||||||
[_x] call FUNC(applyLocalObjectEffects);
|
|
||||||
} catch {
|
|
||||||
[
|
|
||||||
LEVEL_WARNING,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Failed to apply local EMP effects for object",
|
|
||||||
[
|
|
||||||
["object", typeOf _x],
|
|
||||||
["error", _exception]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
};
|
|
||||||
true;
|
|
||||||
} count (_affectedObjects select {local _x});
|
|
||||||
private _countLocalGroupEffectsApplied = { // apply affects to groups owned by this machine, start propagation to other machines
|
|
||||||
try {
|
|
||||||
[_x] call FUNC(applyLocalGroupEffects);
|
|
||||||
} catch {
|
|
||||||
[
|
|
||||||
LEVEL_WARNING,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Failed to apply local EMP effects for group",
|
|
||||||
[
|
|
||||||
["group", _x],
|
|
||||||
["error", _exception]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
};
|
|
||||||
true;
|
|
||||||
} count _affectedLocalGroups;
|
|
||||||
|
|
||||||
if (isServer) then {
|
|
||||||
private _countServerObjectEffectsApplied = {
|
|
||||||
try {
|
|
||||||
[_x] call FUNC(applyServerObjectEffects);
|
|
||||||
} catch {
|
|
||||||
[
|
|
||||||
LEVEL_WARNING,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Failed to apply server EMP effects for object",
|
|
||||||
[
|
|
||||||
["object", typeOf _x],
|
|
||||||
["error", _exception]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
};
|
|
||||||
true;
|
|
||||||
} count _affectedObjects;
|
|
||||||
};
|
|
||||||
|
|
||||||
private _countGlobalObjectEffectsApplied = {
|
|
||||||
try {
|
|
||||||
[_x] call FUNC(applyGlobalObjectEffects);
|
|
||||||
} catch {
|
|
||||||
[
|
|
||||||
LEVEL_WARNING,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Failed to apply global EMP effects for object",
|
|
||||||
[
|
|
||||||
["object", typeOf _x],
|
|
||||||
["error", _exception]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
};
|
|
||||||
true;
|
|
||||||
} count _affectedObjects;
|
|
||||||
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"Applied EMP effects",
|
|
||||||
[
|
|
||||||
["localObjectEffects", _countLocalObjectEffectsApplied],
|
|
||||||
["localGroupEffects", _countLocalGroupEffectsApplied],
|
|
||||||
["serverObjectEffects", _countServerObjectEffectsApplied],
|
|
||||||
["globalObjectEffects", _countGlobalObjectEffectsApplied]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
}, [_affectedObjects, _affectedLocalGroups], GVAR(maxBrightDelay)] call CBA_fnc_waitAndExecute;
|
|
||||||
|
|
||||||
|
|
||||||
// clear EMP data after 30 seconds
|
|
||||||
[{
|
|
||||||
params ["_id"];
|
|
||||||
private _empData = GVAR(activeEMPs) get _id;
|
|
||||||
[
|
|
||||||
LEVEL_DEBUG,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"EMP effects finished",
|
|
||||||
[
|
|
||||||
["id", _id],
|
|
||||||
["affectedObjects", count (_empData get "objects")],
|
|
||||||
["affectedLocalGroups", count (_empData get "localGroups")]
|
|
||||||
]
|
|
||||||
] call EFUNC(common,log);
|
|
||||||
GVAR(activeEMPs) deleteAt _id;
|
|
||||||
}, [_id], 30] call CBA_fnc_waitAndExecute;
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
params [
|
|
||||||
["_itemClassname", "", [""]]
|
|
||||||
];
|
|
||||||
|
|
||||||
if (_itemClassname isEqualTo "") exitWith {
|
|
||||||
["Param _itemClassname is empty", ""] call BIS_fnc_error;
|
|
||||||
false
|
|
||||||
};
|
|
||||||
|
|
||||||
private _isTFARRadio = if (isClass (configFile >> "CfgPatches" >> "tfar_core")) then {_itemClassname call TFAR_fnc_isRadio} else {false};
|
|
||||||
if (_isTFARRadio) exitWith {true};
|
|
||||||
|
|
||||||
private _matchedSpecificClassnames = {(toLower _x) in (toLower _className)} count [
|
|
||||||
"ACE_microDAGR",
|
|
||||||
"Vector21",
|
|
||||||
"MineDetector",
|
|
||||||
"GPS"
|
|
||||||
];
|
|
||||||
|
|
||||||
if (_matchedSpecificClassnames > 0) exitWith {true};
|
|
||||||
|
|
||||||
// find items with NVG or TI capabilities
|
|
||||||
private _cfg = _className call CBA_fnc_getItemConfig;
|
|
||||||
private _modes = getArray(configfile >> "CfgWeapons" >> _className >> "visionMode");
|
|
||||||
private _subModes = [configfile >> "CfgWeapons" >> _className >> "ItemInfo" >> "OpticsModes", 1] call BIS_fnc_returnChildren;
|
|
||||||
{
|
|
||||||
_modes append getArray( _x >> "visionMode" );
|
|
||||||
} forEach _subModes;
|
|
||||||
|
|
||||||
private _hasTI = "ti" in (_modes apply { toLower _x });
|
|
||||||
private _hasNVG = "nvg" in (_modes apply { toLower _x });
|
|
||||||
|
|
||||||
if (_hasTI || _hasNVG) exitWith {true};
|
|
||||||
|
|
||||||
|
|
||||||
false;
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// Executed on all machines with an interface
|
|
||||||
// This plays the effects of the EMP itself going off
|
|
||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
|
||||||
|
|
||||||
params [["_origin", [], [[]]]];
|
|
||||||
if (count _origin isEqualTo 0) exitWith {};
|
|
||||||
|
|
||||||
private _e_static3 = "#particlesource" createVehicleLocal (ASLToAGL _origin);
|
|
||||||
_e_static3 setParticleCircle [0, [0, 0, 0]];
|
|
||||||
_e_static3 setParticleRandom [0.2, [0,0,0], [0.175, 0.175, 0.175], 0.25, 0.15, [0, 0, 0, 1], 1, 0];
|
|
||||||
_e_static3 setParticleParams [["\A3\data_f\blesk1", 1, 0, 1], "", "SpaceObject", 1, 0.75, [0, 0, 1], [0, 0, 0], 0, 10, 7.9,0, [0, 0.2], [[1, 1, 0.1, 1], [1, 1, 1, 1]], [0.01], 1, 0, "", "", objNull,0,false,-1,[[100,100,100,1],[1,1,1,1]]];
|
|
||||||
_e_static3 setDropInterval 0.15;
|
|
||||||
|
|
||||||
private _ripple2 = "#particlesource" createVehicleLocal (ASLToAGL _origin);
|
|
||||||
_ripple2 setParticleCircle [0,[0,0,0]];
|
|
||||||
_ripple2 setParticleRandom [0.1,[0,0,0],[0,0,0],25,1,[0,0,0,0.1],0,0];
|
|
||||||
_ripple2 setParticleParams [["\A3\data_f\ParticleEffects\Universal\Refract.p3d",1,0,1], "", "Billboard", 1, 1, [0, 0, 1], [0, 0, 0],0,10,7.9,0, [5,0], [[1, 1, 1, 1], [1, 1, 1, 1]], [0.05], 1, 0, "", "", objNull];
|
|
||||||
_ripple2 setDropInterval 0.05;
|
|
||||||
|
|
||||||
private _light_emp = "#lightpoint" createVehiclelocal (ASLToAGL _origin);
|
|
||||||
// _light_emp lightAttachObject [objNull, [0,0,0.5]];
|
|
||||||
_light_emp setLightAmbient [0.1,0.1,1];
|
|
||||||
_light_emp setLightColor [0.1,0.1,1];
|
|
||||||
_light_emp setLightBrightness 0;
|
|
||||||
_light_emp setLightUseFlare true;
|
|
||||||
_light_emp setLightFlareSize 1;
|
|
||||||
_light_emp setLightFlareMaxDistance 2500;
|
|
||||||
_light_emp setLightDayLight true;
|
|
||||||
_light_emp setLightAttenuation [5,1,1,1,5,1000];
|
|
||||||
_brit = 0;
|
|
||||||
|
|
||||||
|
|
||||||
private _explSoundData = GVAR(sound_electric_explsion_impact_large);
|
|
||||||
// local only, last param
|
|
||||||
playSound3D [_explSoundData get "filename", nil, false, _origin, _explSoundData get "volume", _explSoundData get "pitch", 3500, 0, true];
|
|
||||||
|
|
||||||
[_light_emp, _brit, _ripple2] spawn {
|
|
||||||
params ["_light_emp", "_brit", "_ripple2"];
|
|
||||||
while {_brit < 6.5} do {
|
|
||||||
// takes ~1.73 seconds to reach full brightness
|
|
||||||
_light_emp setLightBrightness _brit;
|
|
||||||
_brit = _brit+0.02; //timing for next stage
|
|
||||||
sleep 0.01;
|
|
||||||
};
|
|
||||||
deleteVehicle _ripple2;
|
|
||||||
};
|
|
||||||
|
|
||||||
[{
|
|
||||||
params ["_origin", "_light_emp"];
|
|
||||||
private _e_static2 = "#particlesource" createVehicleLocal (ASLToAGL _origin);
|
|
||||||
_e_static2 setParticleCircle [0, [0, 0, 0]];
|
|
||||||
_e_static2 setParticleRandom [0.2, [0,0,0], [0, 0, 0], 0.25, 1.05, [0, 0, 0, 1], 1, 0];
|
|
||||||
_e_static2 setParticleParams [["\A3\data_f\blesk1", 1, 0, 1], "", "SpaceObject", 1, 0.75, [0, 0, 0], [0, 0, 1], 0, 10, 7.9,0, [0,0.5], [[1, 1, 0.1, 1], [1, 1, 1, 1]], [0.08], 1, 0, "", "", objNull,0,false,-1,[[100,100,100,1],[0,0,1,0.01]]];
|
|
||||||
_e_static2 setDropInterval 0.05;
|
|
||||||
|
|
||||||
private _wave = "#particlesource" createVehicleLocal (ASLToAGL _origin);
|
|
||||||
_wave setParticleCircle [0,[0,0,0]];
|
|
||||||
_wave setParticleRandom [0,[0,0,0],[0,0,0],10,0.25,[0,0,0,0.1],0,0];
|
|
||||||
_wave setParticleParams [["\A3\data_f\kouleSvetlo",1,0,1], "", "Billboard", 1, 3, [0, 0, 1], [0, 0, 0],0,10,7.9,0, [0,75], [[0,0,1,1],[0,0,0.25,0]], [0.01], 1, 0, "", "", objNull,0,false,-1,[[0,0,3,0.75],[0,0,1,0.01]]];
|
|
||||||
_wave setDropInterval 30;
|
|
||||||
|
|
||||||
private _ripple = "#particlesource" createVehicleLocal (ASLToAGL _origin);
|
|
||||||
_ripple setParticleCircle [0,[0,0,0]];
|
|
||||||
_ripple setParticleRandom [0,[0,0,0],[0,0,0],0,0.25,[0,0,0,0.1],0,0];
|
|
||||||
_ripple setParticleParams [["\A3\data_f\ParticleEffects\Universal\Refract.p3d",1,0,1], "", "Billboard", 1, 1.5, [0, 0, 1], [0, 0, 0],0,10,7.9,0, [0,500], [[1, 1, 1, 1], [1, 1, 1, 1]], [0.05], 1, 0, "", "", objNull];
|
|
||||||
_ripple setDropInterval 10;
|
|
||||||
|
|
||||||
[{deleteVehicle _this}, _ripple, 0.65] call CBA_fnc_waitAndExecute;
|
|
||||||
|
|
||||||
[{
|
|
||||||
params ["_e_static2", "_e_static3", "_brit", "_light_emp", "_wave"];
|
|
||||||
{
|
|
||||||
deleteVehicle _x;
|
|
||||||
} forEach [_e_static2, _e_static3];
|
|
||||||
|
|
||||||
[_light_emp, _brit, _wave] spawn {
|
|
||||||
params ["_light_emp", "_brit", "_wave"];
|
|
||||||
while {_brit > 0} do {
|
|
||||||
_light_emp setLightBrightness _brit;
|
|
||||||
_brit = _brit-2;
|
|
||||||
sleep 0.01;
|
|
||||||
};
|
|
||||||
deleteVehicle _light_emp;
|
|
||||||
deleteVehicle _wave;
|
|
||||||
};
|
|
||||||
}, [[_e_static2, _e_static3, 6.5, _light_emp, _wave]], 0.85] call CBA_fnc_waitAndExecute;
|
|
||||||
}, [_origin, _light_emp], GVAR(maxBrightDelay)] call CBA_fnc_waitAndExecute;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[{
|
|
||||||
params ["_origin"];
|
|
||||||
private _echosound = selectRandom (keys GVAR(echoSounds));
|
|
||||||
private _echoSoundData = GVAR(echoSounds) get _echosound;
|
|
||||||
// local only, last param
|
|
||||||
playSound3D [_echoSoundData get "filename", nil, false, _origin, _echoSoundData get "volume", _echoSoundData get "pitch", 4000, 0, true];
|
|
||||||
}, [_origin], GVAR(maxBrightDelay) + 0.65 + 2] call CBA_fnc_waitAndExecute;
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// executed on all clients with an interface
|
|
||||||
// flickers lights for light props/streetlamps and plays a spark sound
|
|
||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
|
||||||
|
|
||||||
params [["_object", objNull, [objNull]]];
|
|
||||||
if (isNull _object) exitWith {};
|
|
||||||
|
|
||||||
// flicker the lights
|
|
||||||
private _flickerHandle = [_object] spawn {
|
|
||||||
params ["_object"];
|
|
||||||
for "_i" from 1 to 3 do {
|
|
||||||
_object switchLight "OFF";
|
|
||||||
sleep (random 0.3);
|
|
||||||
_object switchLight "ON";
|
|
||||||
sleep (random 0.3);
|
|
||||||
};
|
|
||||||
// always finish by shutting off
|
|
||||||
_object switchLight "OFF";
|
|
||||||
};
|
|
||||||
|
|
||||||
_object setVariable [QGVAR(flickerHandle), _flickerHandle];
|
|
||||||
|
|
||||||
[{scriptDone (_this getVariable QGVAR(flickerHandle));}, {
|
|
||||||
private _object = _this;
|
|
||||||
|
|
||||||
// sound
|
|
||||||
// private _spark_sound = selectRandom (keys GVAR(zapSounds));
|
|
||||||
// private _sparkSoundData = GVAR(zapSounds) get _spark_sound;
|
|
||||||
// playSound3D [_sparkSoundData get "filename", _object, false, getPosASL _object, _sparkSoundData get "volume", _sparkSoundData get "pitch", 75, 0, true];
|
|
||||||
|
|
||||||
// // particle effect, large blue spark
|
|
||||||
// private _e_static = "#particlesource" createVehicleLocal (getPosATL _object);
|
|
||||||
// _e_static setParticleCircle [1, [0, 0, 0]];
|
|
||||||
// _e_static setParticleRandom [0.2, [1.5,1.5,0], [0.175, 0.175, 0], 0.15, 0.2, [0, 0, 0, 1], 1, 0];
|
|
||||||
// _e_static setParticleParams [["\A3\data_f\blesk1", 1, 0, 1], "", "SpaceObject", 1, 0.05, [0, 0, 0], [0, 0, 0], 0, 10, 7.9,0, [0.01, 0.02, 0.01], [[1, 1, 0.1, 1], [1, 1, 1, 1]], [0.025], 1, 0, "", "", _object,0,false,-1,[[100,100,100,1],[0,0,1,0.01]]];
|
|
||||||
// _e_static setDropInterval 0.025;
|
|
||||||
|
|
||||||
// [{deleteVehicle _this;}, _e_static, 1] call CBA_fnc_waitAndExecute;
|
|
||||||
|
|
||||||
|
|
||||||
// play additional spark
|
|
||||||
_bbr = boundingBoxReal vehicle _object;
|
|
||||||
_p1 = _bbr select 0;
|
|
||||||
_p2 = _bbr select 1;
|
|
||||||
_maxHeight = abs ((_p2 select 2) - (_p1 select 2));
|
|
||||||
|
|
||||||
//_spark_poz_rel = [getPos _lamp select 0,getPos _lamp select 1,_maxHeight-0.5];
|
|
||||||
private _spark_poz_rel = (_maxHeight/2)-0.45;
|
|
||||||
|
|
||||||
private _spark_type = ["white","orange"] call BIS_fnc_selectRandom;
|
|
||||||
private _drop = 0.001+(random 0.05);
|
|
||||||
private _scantei_spark = "#particlesource" createVehicleLocal (getPosATL _object);
|
|
||||||
|
|
||||||
if (_spark_type=="orange") then
|
|
||||||
{
|
|
||||||
_scantei_spark setParticleCircle [0, [0, 0, 0]];
|
|
||||||
_scantei_spark setParticleRandom [1, [0.1, 0.1, 0.1], [0, 0, 0], 0, 0.25, [0, 0, 0, 0], 0, 0];
|
|
||||||
_scantei_spark setParticleParams [["\A3\data_f\proxies\muzzle_flash\muzzle_flash_silencer.p3d", 1, 0, 1], "", "SpaceObject", 1, 1, [0, 0,_spark_poz_rel], [0, 0, 0], 0, 15, 7.9, 0, [0.5,0.5,0.05], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0]], [0.08], 1, 0, "", "", _object,0,true,0.3,[[1,1,1,1]]];
|
|
||||||
_scantei_spark setDropInterval _drop;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
//hint "alb";
|
|
||||||
_scantei_spark setParticleCircle [0, [0, 0, 0]];
|
|
||||||
_scantei_spark setParticleRandom [1, [0.05, 0.05, 0.1], [5, 5, 3], 0, 0.0025, [0, 0, 0, 0], 0, 0];
|
|
||||||
_scantei_spark setParticleParams [["\A3\data_f\proxies\muzzle_flash\muzzle_flash_silencer.p3d", 1, 0, 1], "", "SpaceObject", 1, 1, [0, 0,_spark_poz_rel], [0, 0, 0], 0, 20, 7.9, 0, [0.5,0.5,0.05], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0]], [0.08], 1, 0, "", "", _object,0,true,0.3,[[5,5,3,1]]];
|
|
||||||
_scantei_spark setDropInterval 0.001;
|
|
||||||
};
|
|
||||||
|
|
||||||
private _spark_sound = selectRandom (keys GVAR(zapSounds));
|
|
||||||
private _sparkSoundData = GVAR(zapSounds) get _spark_sound;
|
|
||||||
playSound3D [_sparkSoundData get "filename", _object, false, getPosASL _object, _sparkSoundData get "volume", _sparkSoundData get "pitch", 75, 0, true];
|
|
||||||
|
|
||||||
[{deleteVehicle _this;}, _scantei_spark, 0.4 + (random 0.7)] call CBA_fnc_waitAndExecute;
|
|
||||||
}, _object] call CBA_fnc_waitUntilAndExecute;
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// Executed where object is local and removes electronics from inventory
|
|
||||||
|
|
||||||
params [["_object", objNull, [objNull]]];
|
|
||||||
if (isNull _object) exitWith {};
|
|
||||||
if (not (_object isKindOf "CAManBase")) exitWith {["Param _object is not a unit", _object] call BIS_fnc_error};
|
|
||||||
|
|
||||||
// process unit inventory
|
|
||||||
{
|
|
||||||
_object unassignItem _x;
|
|
||||||
_object removeItem _x;
|
|
||||||
} forEach ((items _object) + (assignedItems _object)) select {[_x] call FUNC(isItemElectronic)};
|
|
||||||
|
|
||||||
// replace backpack radio with base and restore items
|
|
||||||
if (isClass (configFile >> "CfgPatches" >> "tfar_core")) then {
|
|
||||||
private _backpackRadio = _object call TFAR_fnc_backpackLR;
|
|
||||||
if (!isNil "_backpackRadio") then {
|
|
||||||
_backpackRadio params ["_actualBackpack", "settings"];
|
|
||||||
private _baseBackpack = _actualBackpack call BIS_fnc_basicBackpack;
|
|
||||||
private _backpackItems = backpackItems _object;
|
|
||||||
|
|
||||||
removeBackpack _object;
|
|
||||||
_object addBackpack _baseBackpack;
|
|
||||||
|
|
||||||
{
|
|
||||||
_object addItemToBackpack _x;
|
|
||||||
} forEach _backpackItems;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
//for player units
|
|
||||||
if (isPlayer _object) then {
|
|
||||||
_object action ["IRLaserOff", _object];
|
|
||||||
_object action ["nvGogglesOff", _object];
|
|
||||||
};
|
|
||||||
|
|
||||||
// remove flashlights/pointers on weapons
|
|
||||||
private _primaryFlashlightOrPointer = (primaryWeaponItems _object)#1;
|
|
||||||
if (_primaryFlashlightOrPointer != "") then {
|
|
||||||
_object removePrimaryWeaponItem _primaryFlashlightOrPointer;
|
|
||||||
_object removeItem _primaryFlashlightOrPointer;
|
|
||||||
};
|
|
||||||
private _secondaryFlashlightOrPointer = (secondaryWeaponItems _object)#1;
|
|
||||||
if (_secondaryFlashlightOrPointer != "") then {
|
|
||||||
_object removeSecondaryWeaponItem _secondaryFlashlightOrPointer;
|
|
||||||
_object removeItem _secondaryFlashlightOrPointer;
|
|
||||||
};
|
|
||||||
private _handgunFlashlightOrPointer = (handgunItems _object)#1;
|
|
||||||
if (_handgunFlashlightOrPointer != "") then {
|
|
||||||
_object removeHandgunItem _handgunFlashlightOrPointer;
|
|
||||||
_object removeItem _handgunFlashlightOrPointer;
|
|
||||||
};
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// Executed where object is local and removes electronics from inventory
|
|
||||||
|
|
||||||
params [["_object", objNull, [objNull]]];
|
|
||||||
if (isNull _object) exitWith {};
|
|
||||||
if (_object isKindOf "CAManBase") exitWith {["Param _object is not a vehicle: %1", _object] call BIS_fnc_error};
|
|
||||||
|
|
||||||
|
|
||||||
// get all items in vehicle that are electronic
|
|
||||||
private _vehicleItems = itemCargo _object;
|
|
||||||
// filter array to identify electronic items
|
|
||||||
_vehicleItems = _vehicleItems select {[_x] call FUNC(isItemElectronic)};
|
|
||||||
{
|
|
||||||
// remove item from vehicle
|
|
||||||
_object addItemCargoGlobal [_x, -1];
|
|
||||||
true;
|
|
||||||
} count _vehicleItems;
|
|
||||||
|
|
||||||
{ // forEach everyContainer _object - process vests, uniforms, backpacks in a vehicle
|
|
||||||
_x params ["_containerClass", "_containerObject"];
|
|
||||||
private _subItemsOfContainer = itemCargo _containerObject;
|
|
||||||
// filter array to identify electronic items
|
|
||||||
_subItemsOfContainer = _subItemsOfContainer select {[_x] call FUNC(isItemElectronic)};
|
|
||||||
{
|
|
||||||
// remove item from container
|
|
||||||
_subContainer addItemCargoGlobal [_x, -1];
|
|
||||||
true;
|
|
||||||
} count _subItemsOfContainer;
|
|
||||||
} forEach (everyContainer _object);
|
|
||||||
|
|
||||||
|
|
||||||
// vehicle is now empty of electronics
|
|
||||||
// built-in vehicle radios cannot be removed and are left in place
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
# EMP Module
|
|
||||||
|
|
||||||
Adapted from:
|
|
||||||
|
|
||||||
- KE_EB EMP Mission Script (unknown author, found by Sherman)
|
|
||||||
- EMP Systems (Murphy, Wenza) on [Steam Workshop](https://steamcommunity.com/sharedfiles/filedetails/?id=2225040619)
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#define COMPONENT emp
|
|
||||||
#define COMPONENT_BEAUTIFIED EMP
|
|
||||||
#include "../script_mod.hpp"
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,7 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
[
|
[
|
||||||
"saveaar",
|
"saveaar",
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,17 +1,27 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
[
|
[
|
||||||
"respawn",
|
"respawn",
|
||||||
{
|
{
|
||||||
_clientID = _thisArgs select 0;
|
_clientID = _thisArgs select 0;
|
||||||
player setDamage 1;
|
player setDamage 1;
|
||||||
|
|
||||||
|
private _timeWentUnconscious = player getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
||||||
|
private _durationSpentUnconscious = -1;
|
||||||
|
if (_timeWentUnconscious > - 1) then {
|
||||||
|
_durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
||||||
|
};
|
||||||
|
|
||||||
// log to server RPT
|
// log to server RPT
|
||||||
[
|
[
|
||||||
LEVEL_INFO,
|
LEVEL_INFO,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"CHAT COMMAND RESPAWN",
|
"CHAT COMMAND RESPAWN",
|
||||||
[player] call EFUNC(common,addPlayerInfoToArray)
|
[player, [
|
||||||
|
["durationSpentUnconscious", _durationSpentUnconscious]
|
||||||
|
]] call EFUNC(common,addPlayerInfoToArray)
|
||||||
] remoteExec [QEFUNC(common,log), 2];
|
] remoteExec [QEFUNC(common,log), 2];
|
||||||
|
|
||||||
// systemChat to all remote machines
|
// systemChat to all remote machines
|
||||||
|
|||||||
41
framework/init/functions/fn_checkMissionSettings.sqf
Normal file
41
framework/init/functions/fn_checkMissionSettings.sqf
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface || !is3DENPreview) exitWith {};
|
||||||
|
|
||||||
|
private _warningText = [];
|
||||||
|
|
||||||
|
if (getText(missionConfigFile >> "author") in ["MISSION AUTHOR", ""]) then {
|
||||||
|
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\author</t> is blank or default!";
|
||||||
|
};
|
||||||
|
if (getText(missionConfigFile >> "onLoadName") in ["THIS APPEARS ON TOP OF THE LOADING SCREEN IMAGE", ""]) then {
|
||||||
|
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\onLoadName</t> is blank or default!";
|
||||||
|
};
|
||||||
|
|
||||||
|
if (getText(missionConfigFile >> "briefingName") in ["THIS IS THE NAME ON THE #MISSIONS LIST", ""]) then {
|
||||||
|
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\briefingName</t> is blank or default!";
|
||||||
|
};
|
||||||
|
if (getText(missionConfigFile >> "overviewText") in ["THIS IS WHERE YOU DESCRIBE THE MISSION IN THE #MISSION LIST", ""]) then {
|
||||||
|
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\overviewText</t> is blank or default!";
|
||||||
|
};
|
||||||
|
|
||||||
|
if (getText(missionConfigFile >> "missionSeries") in ["MY SERIES NAME", ""]) then {
|
||||||
|
_warningText pushBack "<t font='EtelkaMonospacePro' size='0.7'>mission_settings\missionSeries</t> is blank or default!";
|
||||||
|
};
|
||||||
|
|
||||||
|
if (count GVARMAIN(baseObjects) isEqualTo 0) then {
|
||||||
|
_warningText pushBack "No respawn points placed!";
|
||||||
|
};
|
||||||
|
|
||||||
|
if (count _warningText > 0) then {
|
||||||
|
[{
|
||||||
|
if (isNull (call BIS_fnc_displayMission)) exitWith {};
|
||||||
|
|
||||||
|
(_this#0) spawn {
|
||||||
|
[_this joinString "<br/>", "Issues found!", true, false] call BIS_fnc_guiMessage;
|
||||||
|
};
|
||||||
|
[_this#1] call CBA_fnc_removePerFrameHandler;
|
||||||
|
|
||||||
|
}, 1, _warningText] call CBA_fnc_addPerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
nil;
|
||||||
@@ -1,12 +1,17 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
if ( !hasInterface ) exitWith {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
// make sure the server has finished init
|
// make sure the server has finished init
|
||||||
waitUntil {!isNil QGVARMAIN(complete)};
|
waitUntil {!isNil QGVARMAIN(complete)};
|
||||||
|
|
||||||
["InitializePlayer", [player, true]] call BIS_fnc_dynamicGroups;
|
["InitializePlayer", [player, true]] call BIS_fnc_dynamicGroups;
|
||||||
|
|
||||||
|
// run primary init functions
|
||||||
|
call FUNC(addAARChatHandler);
|
||||||
|
call FUNC(addRespawnChatHandler);
|
||||||
|
call FUNC(setDefaults);
|
||||||
|
|
||||||
// Initialize a holder for managing local diary records
|
// Initialize a holder for managing local diary records
|
||||||
// store records in format:
|
// store records in format:
|
||||||
// [subject, [
|
// [subject, [
|
||||||
@@ -16,7 +21,7 @@ EGVAR(common,diaryRecords) = createHashMap;
|
|||||||
|
|
||||||
|
|
||||||
// initialize other modules
|
// initialize other modules
|
||||||
call EFUNC(emp,init);
|
call EFUNC(client,initClient);
|
||||||
call EFUNC(mapcopy,initClient);
|
call EFUNC(mapcopy,initClient);
|
||||||
call EFUNC(reinsert,initClient);
|
call EFUNC(reinsert,initClient);
|
||||||
call EFUNC(resupply,initClient);
|
call EFUNC(resupply,initClient);
|
||||||
@@ -27,6 +32,8 @@ call EFUNC(fbcb2_main,initClient);
|
|||||||
call EFUNC(fbcb2_assets,initClient);
|
call EFUNC(fbcb2_assets,initClient);
|
||||||
|
|
||||||
|
|
||||||
|
call FUNC(checkMissionSettings);
|
||||||
|
|
||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
|
|||||||
@@ -13,7 +13,44 @@ publicVariable QGVARMAIN(baseObjects);
|
|||||||
call EFUNC(common,logMissionInfo);
|
call EFUNC(common,logMissionInfo);
|
||||||
call EFUNC(fbcb2_assets,initServer);
|
call EFUNC(fbcb2_assets,initServer);
|
||||||
call EFUNC(reinsert,initServer);
|
call EFUNC(reinsert,initServer);
|
||||||
call EFUNC(emp,init);
|
|
||||||
|
// globally disable zeus lightning bolt functionality
|
||||||
|
_curators = allMissionObjects "ModuleCurator_F";
|
||||||
|
{
|
||||||
|
_x removeCuratorAddons ["CuratorOnly_Modules_F_Curator_Lightning"];
|
||||||
|
_x removeCuratorAddons ["A3_Modules_F_Curator_Lightning"];
|
||||||
|
} foreach _curators;
|
||||||
|
|
||||||
|
// add dead unit time marking for custom garbage cleanup function
|
||||||
|
addMissionEventHandler ["EntityKilled", {
|
||||||
|
params ["_unit", "_killer", "_instigator", "_useEffects"];
|
||||||
|
|
||||||
|
if not (_unit isKindOf "CAManBase") exitWith {};
|
||||||
|
|
||||||
|
_unit setVariable["milsim_death_time", time];
|
||||||
|
|
||||||
|
_unit addEventHandler ["Deleted", {
|
||||||
|
params ["_entity"];
|
||||||
|
_remainsCollector = _entity getVariable["milsim_garbage_collected", false];
|
||||||
|
_decayTime = time - (_entity getVariable ["milsim_death_time", time]);
|
||||||
|
|
||||||
|
_i = allUsers select { (getUserInfo _x)#1 isEqualTo _ownerId;};
|
||||||
|
_owner = if ( _i isEqualTo []) then [ { "server" }, { (getUserInfo (_i#0))#3 }];
|
||||||
|
|
||||||
|
diag_log format["isServer: %5, deleted object owned by: %1 via remainsCollector: %2 after %3 seconds of type: %4", _owner, str (not _remainsCollector), _decayTime, _entity, isServer];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
|
// add zeus deletion logging to curator objects
|
||||||
|
{
|
||||||
|
_x addEventHandler ["CuratorObjectDeleted", {
|
||||||
|
params ["_curator", "_entity"];
|
||||||
|
|
||||||
|
_decayTime = time - (_entity getVariable ["milsim_death_time", time]);
|
||||||
|
diag_log format["deleted object: %1 via curator: %2 after %3 seconds", _entity, name _curator, _decayTime];
|
||||||
|
}];
|
||||||
|
} foreach _curators;
|
||||||
|
|
||||||
// declare init complete to other modules
|
// declare init complete to other modules
|
||||||
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
enableSaving[false, false];
|
enableSaving[false, false];
|
||||||
|
|
||||||
enableRadio false;
|
enableRadio false;
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ private _mapCopyAction =
|
|||||||
"\a3\ui_f\data\igui\cfg\actions\talk_ca.paa",
|
"\a3\ui_f\data\igui\cfg\actions\talk_ca.paa",
|
||||||
{
|
{
|
||||||
params ["_target", "_player", "_params"];
|
params ["_target", "_player", "_params"];
|
||||||
|
if (!isPlayer _target) exitWith {
|
||||||
|
format["%1 is not a player", name _target] call CBA_fnc_notify;
|
||||||
|
};
|
||||||
format["Copying map markers from %1", name _target] call CBA_fnc_notify;
|
format["Copying map markers from %1", name _target] call CBA_fnc_notify;
|
||||||
[QGVAR(mapCopyRequest), _this, _target] call CBA_fnc_targetEvent;
|
[QGVAR(mapCopyRequest), _this, _target] call CBA_fnc_targetEvent;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,53 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
//---------------------
|
||||||
|
// Garbage Collection
|
||||||
|
//---------------------
|
||||||
|
|
||||||
|
[
|
||||||
|
QGVAR(emptyGroupCleanup_enable),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Empty Group Cleanup Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVAR(emptyGroupCleanup_enable),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
|
||||||
|
if (!isNull (missionNamespace getVariable [QGVAR(emptyGroupCleanupPFH), locationNull])) then {
|
||||||
|
deleteLocation GVAR(emptyGroupCleanupPFH);
|
||||||
|
};
|
||||||
|
|
||||||
|
call FUNC(addEmptyGroupCleanupPFH);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
[
|
||||||
|
QGVAR(deadUnitCleanup_enable),
|
||||||
|
"CHECKBOX",
|
||||||
|
"Dead Unit Cleanup Enabled",
|
||||||
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
params ["_value"];
|
||||||
|
[
|
||||||
|
QGVAR(deadUnitCleanup_enable),
|
||||||
|
_value
|
||||||
|
] call EFUNC(common,logSettingChanged);
|
||||||
|
|
||||||
|
if (!isNull (missionNamespace getVariable [QGVAR(deadUnitCleanupPFH), locationNull])) then {
|
||||||
|
deleteLocation GVAR(deadUnitCleanupPFH);
|
||||||
|
};
|
||||||
|
|
||||||
|
call FUNC(addDeadUnitCleanupPFH);
|
||||||
|
}
|
||||||
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
//---------------------
|
//---------------------
|
||||||
// Server CPS
|
// Server CPS
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|||||||
55
framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf
Normal file
55
framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"Initializing dead unit deletion PFH",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
GVAR(deadUnitCleanupPFH) = [
|
||||||
|
{
|
||||||
|
_maxTime = getMissionConfigValue ["corpseRemovalMaxTime", 300] * 1.5;
|
||||||
|
_maxDead = getMissionConfigValue ["corpseLimit", 80];
|
||||||
|
|
||||||
|
// _dead = allDead select { (_x isKindOf "CAManBase") and ( ( (time - (_x getVariable ["milsim_death_time", time] ) ) > (_maxTime * 1.5) ) ) };
|
||||||
|
// _dead = _dead apply { [ (time - (_x getVariable ["milsim_death_time", time] ) ), _x ] };
|
||||||
|
|
||||||
|
_dead = [];
|
||||||
|
{
|
||||||
|
if not (_x isKindOf "CAManBase") then { continue };
|
||||||
|
if not (isInRemainsCollector _x) then { continue };
|
||||||
|
_dead pushBack [time - (_x getVariable ["milsim_death_time", time] ), _x];
|
||||||
|
} forEach allDead;
|
||||||
|
|
||||||
|
_dead sort false;
|
||||||
|
_toDelete = 0 max ( (count _dead ) - _maxDead );
|
||||||
|
_dead = _dead select [0, _toDelete];
|
||||||
|
{
|
||||||
|
_unit = _x#1;
|
||||||
|
_unit setVariable ["milsim_garbage_collected", true];
|
||||||
|
deleteVehicle (_unit);
|
||||||
|
} foreach _dead;
|
||||||
|
},
|
||||||
|
450,
|
||||||
|
[],
|
||||||
|
{ // on creation
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"dead unit deletion PFH loaded",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
},
|
||||||
|
{ // on deletion
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"dead unit deletion PFH unloaded",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
},
|
||||||
|
{ (missionNamespace getVariable [QGVAR(deadUnitCleanup_enable), false]) },
|
||||||
|
{ false },
|
||||||
|
[]
|
||||||
|
] call CBA_fnc_createPerFrameHandlerObject;
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"Initializing empty group deletion PFH",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
|
||||||
|
GVAR(emptyGroupCleanupPFH) = [
|
||||||
|
{
|
||||||
|
{
|
||||||
|
if ((count units _x) == 0) then {
|
||||||
|
if (local _x) then {
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"DELETING EMPTY GROUP",
|
||||||
|
[
|
||||||
|
["groupId", groupId _x],
|
||||||
|
["netId", netId _x]
|
||||||
|
]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
deleteGroup _x;
|
||||||
|
} else {
|
||||||
|
if (isServer) then {
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"NON LOCAL EMPTY GROUP",
|
||||||
|
[
|
||||||
|
["groupId", groupId _x],
|
||||||
|
["groupOwner", groupOwner _x]
|
||||||
|
]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
} else {
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"EMPTY REMOTE GROUP",
|
||||||
|
[
|
||||||
|
["groupId", groupId _x]
|
||||||
|
]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} forEach allGroups;
|
||||||
|
},
|
||||||
|
300,
|
||||||
|
[],
|
||||||
|
{ // on creation
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"Empty group deletion PFH loaded",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
},
|
||||||
|
{ // on deletion
|
||||||
|
[
|
||||||
|
LEVEL_INFO,
|
||||||
|
QUOTE(COMPONENT),
|
||||||
|
"Empty group deletion PFH unloaded",
|
||||||
|
[]
|
||||||
|
] call EFUNC(common,log);
|
||||||
|
},
|
||||||
|
{ (missionNamespace getVariable [QGVAR(emptyGroupCleanup_enable), false]) },
|
||||||
|
{ not (missionNamespace getVariable [QGVAR(emptyGroupCleanup_enable), false]) },
|
||||||
|
[]
|
||||||
|
] call CBA_fnc_createPerFrameHandlerObject;
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
// log to RPT
|
// log to RPT
|
||||||
[
|
[
|
||||||
|
|
||||||
{_this call EFUNC(common,log);},
|
{_this remoteExec [QEFUNC(common,log), 2]},
|
||||||
[
|
[
|
||||||
LEVEL_INFO,
|
LEVEL_INFO,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
private _rawCPS = _counter / (diag_frameNo - _frameNo);
|
private _rawCPS = _counter / (diag_frameNo - _frameNo);
|
||||||
missionNamespace setVariable [QGVAR(server_raw_cps), _rawCPS];
|
missionNamespace setVariable [QGVAR(server_raw_cps), _rawCPS];
|
||||||
publicVariable QGVAR(server_raw_cps);
|
|
||||||
|
|
||||||
// with suspension
|
// with suspension
|
||||||
private _counter = 0;
|
private _counter = 0;
|
||||||
@@ -26,7 +25,6 @@
|
|||||||
|
|
||||||
private _serverCPS = _counter / (diag_frameNo - _frameNo);
|
private _serverCPS = _counter / (diag_frameNo - _frameNo);
|
||||||
missionNamespace setVariable [QGVAR(server_cps), _counter / (diag_frameNo - _frameNo)];
|
missionNamespace setVariable [QGVAR(server_cps), _counter / (diag_frameNo - _frameNo)];
|
||||||
publicVariable QGVAR(server_cps);
|
|
||||||
|
|
||||||
// log to RPT
|
// log to RPT
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []];
|
|||||||
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
||||||
|
|
||||||
// add actions to pilot classes, and don't apply to child classes
|
// add actions to pilot classes, and don't apply to child classes
|
||||||
[["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
// [["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ if (isNil "_items") exitWith {
|
|||||||
[_box,1] call ace_cargo_fnc_setSize;
|
[_box,1] call ace_cargo_fnc_setSize;
|
||||||
|
|
||||||
// ignore weight restrictions for carry/drag
|
// ignore weight restrictions for carry/drag
|
||||||
_box setVariable ["ace_ignoreWeightCarry", true, true];
|
_box setVariable ["ace_dragging_ignoreWeightCarry", true, true];
|
||||||
|
|
||||||
// Return the box
|
// Return the box
|
||||||
_box;
|
_box;
|
||||||
@@ -6,9 +6,9 @@
|
|||||||
#define VERSION_STR MAJOR.MINOR.PATCHLVL
|
#define VERSION_STR MAJOR.MINOR.PATCHLVL
|
||||||
#define VERSION_AR MAJOR,MINOR,PATCHLVL
|
#define VERSION_AR MAJOR,MINOR,PATCHLVL
|
||||||
|
|
||||||
#define DEBUG_MODE -1 // TRACE
|
// #define DEBUG_MODE -1 // TRACE
|
||||||
// #define DEBUG_MODE 0 // DEBUG
|
// #define DEBUG_MODE 0 // DEBUG
|
||||||
// #define DEBUG_MODE 1 // INFO
|
#define DEBUG_MODE 1 // INFO
|
||||||
// #define DEBUG_MODE 2 // WARNING
|
// #define DEBUG_MODE 2 // WARNING
|
||||||
// #define DEBUG_MODE 3 // ERROR
|
// #define DEBUG_MODE 3 // ERROR
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#define MAJOR 4
|
#define MAJOR 4
|
||||||
#define MINOR 0
|
#define MINOR 2
|
||||||
#define PATCHLVL 0
|
#define PATCHLVL 3
|
||||||
#define BUILD 0
|
#define BUILD 0
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
// subroutine to gather nearest 50 units every 5 seconds and store in GVAR(drawTargets)
|
|
||||||
// cleanup
|
|
||||||
if (!isNil QGVAR(getEntitiesPFH)) then {
|
|
||||||
[GVAR(getEntitiesPFH)] call CBA_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
// add pfh
|
|
||||||
GVAR(getEntitiesPFH) = [{
|
|
||||||
GVAR(drawTargets) = (
|
|
||||||
(allUnits + allDeadMen) select {
|
|
||||||
_x isKindOf "CAManBase" &&
|
|
||||||
player distance _x < 50 &&
|
|
||||||
!isNull _x &&
|
|
||||||
player isNotEqualTo _x
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}, 10] call CBA_fnc_addPerFrameHandler;
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
milsim_fnc_addMedicalOverlayPFH
|
milsim_triageIcons_fnc_draw3D
|
||||||
|
|
||||||
Author: IndigoFox
|
Author: IndigoFox
|
||||||
|
|
||||||
@@ -14,29 +14,19 @@ Description:
|
|||||||
|
|
||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
// Per-frame handler to draw icons
|
|
||||||
// cleanup
|
// adds codeblock to common array to be processed per frame
|
||||||
if (!isNil QGVAR(drawIconsPfh)) then {
|
private _code = {
|
||||||
[GVAR(drawIconsPfh)] call CBA_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
// add pfh
|
|
||||||
GVAR(drawIconsPfh) = [{
|
|
||||||
// if disabled, skip processing
|
// if disabled, skip processing
|
||||||
if (!GVAR(setting_enabled)) exitWith {false};
|
if (!GVAR(setting_enabled)) exitWith {false};
|
||||||
// if no targets, skip processing
|
|
||||||
if (count GVAR(drawTargets) == 0) exitWith {false};
|
|
||||||
// if the player doesn't have medical perms, skip processing
|
// if the player doesn't have medical perms, skip processing
|
||||||
if !([player] call ace_medical_treatment_fnc_isMedic) exitWith {false};
|
if !([player] call ace_medical_treatment_fnc_isMedic) exitWith {false};
|
||||||
|
|
||||||
{
|
{
|
||||||
private _unit = _x;
|
private _unit = _x;
|
||||||
// distance within X meters
|
|
||||||
if (player distance _unit > GVAR(setting_drawRange)) then {continue};
|
|
||||||
// check unit not null, not conscious, and not in a vehicle
|
|
||||||
if (
|
|
||||||
!(_unit getVariable ["ACE_isUnconscious", false]) ||
|
|
||||||
!isNull (objectParent _unit)
|
|
||||||
) then {continue};
|
|
||||||
|
|
||||||
// color based on triage level
|
// color based on triage level
|
||||||
private _triageLevel = _unit getVariable ["ace_medical_triageLevel", 4];
|
private _triageLevel = _unit getVariable ["ace_medical_triageLevel", 4];
|
||||||
@@ -57,6 +47,17 @@ GVAR(drawIconsPfh) = [{
|
|||||||
true // outline
|
true // outline
|
||||||
// further params optional, omitted
|
// further params optional, omitted
|
||||||
];
|
];
|
||||||
} forEach GVAR(drawTargets);
|
|
||||||
}, 0, []] call CBA_fnc_addPerFrameHandler;
|
|
||||||
|
|
||||||
|
true;
|
||||||
|
} count (
|
||||||
|
(localNamespace getVariable [QEGVAR(client,nearMen), []]) select {
|
||||||
|
// is unconscious and is NOT in vehicle and is within draw range
|
||||||
|
(_x getVariable ["ACE_isUnconscious", false]) &&
|
||||||
|
isNull (objectParent _x) &&
|
||||||
|
player distance _x <= GVAR(setting_drawRange)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// add codeblock to common array
|
||||||
|
[_code] call EFUNC(client,registerPFHCode);
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
// List of units to draw icons for
|
if (!hasInterface) exitWith {};
|
||||||
GVAR(drawTargets) = [];
|
|
||||||
|
call FUNC(draw3D);
|
||||||
|
|
||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
|
|||||||
103
framework/vehicleFlags/functions/fn_addFlagActions.sqf
Normal file
103
framework/vehicleFlags/functions/fn_addFlagActions.sqf
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
||||||
|
|
||||||
|
if (!isClass _vehicleFlagsCfg) exitWith {
|
||||||
|
["WARNING: Vehicle Flags: Vehicle Flags config not found. Vehicle Flags will not be available."] call BIS_fnc_error;
|
||||||
|
};
|
||||||
|
|
||||||
|
private _baseClassesToApplyActionsFor =
|
||||||
|
(_vehicleFlagsCfg >> "baseClassesToApplyActionsFor") call BIS_fnc_getCfgDataArray;
|
||||||
|
private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_returnChildren;
|
||||||
|
|
||||||
|
{ // forEach _baseClassesToApplyActionsFor
|
||||||
|
private _parentClass = _x;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// create the root action
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
private _rootActionID = QGVAR(SetVehicleFlagAction);
|
||||||
|
private _flagRootAction = [
|
||||||
|
_rootActionID, // id
|
||||||
|
"Set Vehicle Flag", // displayed title
|
||||||
|
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
// set broadcasted variable of self to indicate we're looking at flags
|
||||||
|
_player setVariable [QGVAR(inFlagMenu), true, true];
|
||||||
|
[{_this setVariable [QGVAR(inFlagMenu), false, true];}, _player, 3] call CBA_fnc_waitAndExecute;
|
||||||
|
true
|
||||||
|
}, // statement
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
// _params params ["_parentActionID", "_flagCategories"];
|
||||||
|
|
||||||
|
// check if vehicle is excluded
|
||||||
|
private _excluded = [typeOf _target] call FUNC(isClassExcluded);
|
||||||
|
if (_excluded || !alive _target) exitWith {false};
|
||||||
|
|
||||||
|
true;
|
||||||
|
}, // condition
|
||||||
|
{
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// create the flag category actions (with nested flag actions)
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
_params params ["_rootActionID"];
|
||||||
|
|
||||||
|
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
||||||
|
if (isNull _vehicleFlagsCfg) exitWith {[]};
|
||||||
|
private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_returnChildren;
|
||||||
|
|
||||||
|
// return category child actions with individual flag actions nested as children
|
||||||
|
[_rootActionID, _flagCategoryCfgs] call FUNC(getActionsFlagCategories);
|
||||||
|
|
||||||
|
}, // child code
|
||||||
|
[_rootActionID], // params
|
||||||
|
nil, // position
|
||||||
|
4, // distance
|
||||||
|
[false, false, false, true, false], // other params - run on hover is true
|
||||||
|
nil // modifier function code
|
||||||
|
] call ace_interact_menu_fnc_createAction;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// add root action to add flags
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
[
|
||||||
|
_parentClass, // parent classname
|
||||||
|
0, // action 0 or self-action 1
|
||||||
|
["ACE_MainActions"], // parent
|
||||||
|
_flagRootAction, // action
|
||||||
|
true // apply to child classes
|
||||||
|
] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// add action to remove flag under the root action
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// create action
|
||||||
|
private _removeFlagAction = [
|
||||||
|
_rootActionID + "_removeflag", // id
|
||||||
|
"Remove Flag", // displayed title
|
||||||
|
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
_target forceFlagTexture "";
|
||||||
|
}, // statement
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
alive _target && getForcedFlagTexture _target != "";
|
||||||
|
}, // condition
|
||||||
|
nil // child code
|
||||||
|
] call ace_interact_menu_fnc_createAction;
|
||||||
|
|
||||||
|
// add the action to the vehicle
|
||||||
|
// in this class event handler, this#0 will be the vehicle
|
||||||
|
[
|
||||||
|
_parentClass, // parent classname
|
||||||
|
0, // action 0 or self-action 1
|
||||||
|
["ACE_MainActions", _rootActionID], // parent
|
||||||
|
_removeFlagAction, // action
|
||||||
|
true // apply to child classes
|
||||||
|
] call ace_interact_menu_fnc_addActionToClass;
|
||||||
|
|
||||||
|
} forEach _baseClassesToApplyActionsFor;
|
||||||
40
framework/vehicleFlags/functions/fn_compileFlagAction.sqf
Normal file
40
framework/vehicleFlags/functions/fn_compileFlagAction.sqf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
params ["_target", "_player", "_params", "_flagOptionCfg"];
|
||||||
|
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||||
|
|
||||||
|
private _flagOptionID = getText(_flagOptionCfg >> "actionID");
|
||||||
|
private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle");
|
||||||
|
private _flagOptionTexture = getText(_flagOptionCfg >> "texture");
|
||||||
|
|
||||||
|
// if the texture doesn't exist at the config path, skip this flag option
|
||||||
|
if (not (fileExists _flagOptionTexture)) then {
|
||||||
|
diag_log format ["WARN: Flag option texture not found: %1", _flagOptionTexture];
|
||||||
|
continue
|
||||||
|
};
|
||||||
|
|
||||||
|
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
|
||||||
|
|
||||||
|
private _newFlagOption = [
|
||||||
|
|
||||||
|
_rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id
|
||||||
|
_flagOptionTitle, // displayed title
|
||||||
|
_flagOptionTexture, // flag icon
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
_params params ["_flagOptionTexture"];
|
||||||
|
_target forceFlagTexture _flagOptionTexture;
|
||||||
|
}, // statement
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
alive _target;
|
||||||
|
// true;
|
||||||
|
}, // condition
|
||||||
|
nil, // child code
|
||||||
|
[_flagOptionTexture], // params
|
||||||
|
nil, // position
|
||||||
|
4, // distance
|
||||||
|
[false, false, false, false, false] // other params
|
||||||
|
] call ace_interact_menu_fnc_createAction;
|
||||||
|
|
||||||
|
_newFlagOption;
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
||||||
|
|
||||||
|
params ["_rootActionID", "_flagCategoryCfg"];
|
||||||
|
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
||||||
|
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
||||||
|
|
||||||
|
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
||||||
|
|
||||||
|
private _flagCategoryAction = [
|
||||||
|
_rootActionID + "_" + _flagCategoryActionID, // id
|
||||||
|
_flagCategoryTitle, // displayed title
|
||||||
|
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
||||||
|
{true}, // statement
|
||||||
|
{
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
alive _target;
|
||||||
|
// true;
|
||||||
|
}, // condition
|
||||||
|
{
|
||||||
|
// generate child code under category
|
||||||
|
// this is the level where actual flag options will be displayed
|
||||||
|
params ["_target", "_player", "_params"];
|
||||||
|
// these params are passed from the parent action
|
||||||
|
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||||
|
|
||||||
|
private _individualFlagActions = [];
|
||||||
|
{ // forEach _flagSubclassesCfgs; // we'll generate flag options for each category
|
||||||
|
private _flagOptionCfg = _x;
|
||||||
|
|
||||||
|
// generate flag option for this flag option
|
||||||
|
private _newFlagOption = [
|
||||||
|
_target,
|
||||||
|
_player,
|
||||||
|
_params,
|
||||||
|
_flagOptionCfg
|
||||||
|
] call FUNC(compileFlagAction);
|
||||||
|
|
||||||
|
// add flag option to category subactions
|
||||||
|
_individualFlagActions pushBack [_newFlagOption, [], _target];
|
||||||
|
} forEach _flagSubclassesCfgs;
|
||||||
|
|
||||||
|
// return the generated flag options to the category as child actions
|
||||||
|
_individualFlagActions;
|
||||||
|
}, // child code
|
||||||
|
[_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params
|
||||||
|
nil, // position
|
||||||
|
4, // distance
|
||||||
|
[false, false, false, false, false], // other params
|
||||||
|
nil // modifier function code
|
||||||
|
] call ace_interact_menu_fnc_createAction;
|
||||||
|
|
||||||
|
_flagCategoryAction;
|
||||||
24
framework/vehicleFlags/functions/fn_draw3D.sqf
Normal file
24
framework/vehicleFlags/functions/fn_draw3D.sqf
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
// we'll use this to display status if nearby players are in the flag menu
|
||||||
|
|
||||||
|
// adds codeblock to common array to be processed per frame
|
||||||
|
private _code = {
|
||||||
|
private _unitsToDraw = (localNamespace getVariable [QEGVAR(client,nearMen), []]) select {
|
||||||
|
(_x getVariable [QGVAR(inFlagMenu), false]) && {
|
||||||
|
// distance within X meters
|
||||||
|
player distance _x <= 15 ||
|
||||||
|
// check unit not in a vehicle
|
||||||
|
isNull (objectParent _x)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
[
|
||||||
|
_unitsToDraw,
|
||||||
|
"",
|
||||||
|
"Setting vehicle flag...",
|
||||||
|
[0.9, 0.9, 0.9, 1]
|
||||||
|
] call EFUNC(common,draw3dIconStatus);
|
||||||
|
};
|
||||||
|
|
||||||
|
// add codeblock to common array
|
||||||
|
[_code] call EFUNC(client,registerPFHCode);
|
||||||
@@ -5,86 +5,25 @@
|
|||||||
0: STRING - Parent action ID
|
0: STRING - Parent action ID
|
||||||
1: ARRAY - Flag category configs
|
1: ARRAY - Flag category configs
|
||||||
*/
|
*/
|
||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
params ["_rootActionID", "_flagCategoryCfgs"];
|
params ["_rootActionID", "_flagCategoryCfgs"];
|
||||||
|
|
||||||
private _allCategoryActions = [];
|
private _allCategoryActions = [];
|
||||||
|
|
||||||
{
|
{
|
||||||
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
_flagCategoryActions = [];
|
||||||
|
if (configName _x == "SimpleShapes") then {
|
||||||
private _flagCategoryCfg = _x;
|
|
||||||
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
|
||||||
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
|
||||||
|
|
||||||
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
|
||||||
|
|
||||||
private _flagCategoryAction = [
|
|
||||||
_rootActionID + "_" + _flagCategoryActionID, // id
|
|
||||||
_flagCategoryTitle, // displayed title
|
|
||||||
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
|
||||||
{true}, // statement
|
|
||||||
{
|
{
|
||||||
params ["_target", "_player", "_params"];
|
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||||
alive _target;
|
} forEach (_x call BIS_fnc_returnChildren);
|
||||||
// true;
|
} else {
|
||||||
}, // condition
|
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||||
{
|
};
|
||||||
// generate child code under category
|
|
||||||
// this is the level where actual flag options will be displayed
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
|
||||||
|
|
||||||
private _individualFlagActions = [];
|
|
||||||
{ // forEach _flagSubclassesCfgs;
|
|
||||||
private _flagOptionCfg = _x;
|
|
||||||
private _flagOptionID = getText(_flagOptionCfg >> "actionID");
|
|
||||||
private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle");
|
|
||||||
private _flagOptionTexture = getText(_flagOptionCfg >> "texture");
|
|
||||||
|
|
||||||
// if the texture doesn't exist at the config path, skip this flag option
|
|
||||||
if (not (fileExists _flagOptionTexture)) then {continue};
|
|
||||||
|
|
||||||
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
|
|
||||||
|
|
||||||
private _newFlagOption = [
|
|
||||||
|
|
||||||
_rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id
|
|
||||||
_flagOptionTitle, // displayed title
|
|
||||||
_flagOptionTexture, // flag icon
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_params params ["_flagOptionTexture"];
|
|
||||||
_target forceFlagTexture _flagOptionTexture;
|
|
||||||
}, // statement
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
alive _target;
|
|
||||||
// true;
|
|
||||||
}, // condition
|
|
||||||
nil, // child code
|
|
||||||
[_flagOptionTexture], // params
|
|
||||||
nil, // position
|
|
||||||
4, // distance
|
|
||||||
[false, false, false, false, false] // other params
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
// add flag option to category subactions
|
|
||||||
_individualFlagActions pushBack [_newFlagOption, [], _target];
|
|
||||||
} forEach _flagSubclassesCfgs;
|
|
||||||
|
|
||||||
// return the generated flag options to the category as child actions
|
|
||||||
_individualFlagActions;
|
|
||||||
}, // child code
|
|
||||||
[_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params
|
|
||||||
nil, // position
|
|
||||||
4, // distance
|
|
||||||
[false, false, false, false, false], // other params
|
|
||||||
nil // modifier function code
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
// add category to all category actions array
|
// add category to all category actions array
|
||||||
_allCategoryActions pushBack [_flagCategoryAction, [], _target];
|
{
|
||||||
|
_allCategoryActions pushBack [_x, [], _target];
|
||||||
|
} forEach _flagCategoryActions;
|
||||||
} forEach _flagCategoryCfgs;
|
} forEach _flagCategoryCfgs;
|
||||||
|
|
||||||
_allCategoryActions;
|
_allCategoryActions;
|
||||||
@@ -2,101 +2,8 @@
|
|||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
call FUNC(addFlagActions);
|
||||||
|
call FUNC(draw3D);
|
||||||
if (!isClass _vehicleFlagsCfg) exitWith {
|
|
||||||
["WARNING: Vehicle Flags: Vehicle Flags config not found. Vehicle Flags will not be available."] call BIS_fnc_error;
|
|
||||||
};
|
|
||||||
|
|
||||||
private _baseClassesToApplyActionsFor =
|
|
||||||
(_vehicleFlagsCfg >> "baseClassesToApplyActionsFor") call BIS_fnc_getCfgDataArray;
|
|
||||||
private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_returnChildren;
|
|
||||||
|
|
||||||
{ // forEach _baseClassesToApplyActionsFor
|
|
||||||
private _parentClass = _x;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
// create the root action
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
private _rootActionID = QGVAR(SetVehicleFlagAction);
|
|
||||||
private _flagRootAction = [
|
|
||||||
_rootActionID, // id
|
|
||||||
"Set Vehicle Flag", // displayed title
|
|
||||||
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon
|
|
||||||
{true}, // statement
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
// _params params ["_parentActionID", "_flagCategories"];
|
|
||||||
|
|
||||||
// check if vehicle is excluded
|
|
||||||
private _excluded = [typeOf _target] call FUNC(isClassExcluded);
|
|
||||||
if (_excluded || !alive _target) exitWith {false};
|
|
||||||
|
|
||||||
true;
|
|
||||||
}, // condition
|
|
||||||
{
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
// create the flag category actions (with nested flag actions)
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_params params ["_rootActionID"];
|
|
||||||
|
|
||||||
private _vehicleFlagsCfg = call FUNC(getVehicleFlagsCfg);
|
|
||||||
if (isNull _vehicleFlagsCfg) exitWith {[]};
|
|
||||||
private _flagCategoryCfgs = (_vehicleFlagsCfg >> "FlagCategories") call BIS_fnc_returnChildren;
|
|
||||||
|
|
||||||
// return category child actions with individual flag actions nested as children
|
|
||||||
[_rootActionID, _flagCategoryCfgs] call FUNC(getActionsFlagCategories);
|
|
||||||
|
|
||||||
}, // child code
|
|
||||||
[_rootActionID], // params
|
|
||||||
nil, // position
|
|
||||||
4, // distance
|
|
||||||
[false, false, false, false, false], // other params
|
|
||||||
nil // modifier function code
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
// add root action to add flags
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
[
|
|
||||||
_parentClass, // parent classname
|
|
||||||
0, // action 0 or self-action 1
|
|
||||||
["ACE_MainActions"], // parent
|
|
||||||
_flagRootAction, // action
|
|
||||||
true // apply to child classes
|
|
||||||
] call ace_interact_menu_fnc_addActionToClass;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
// add action to remove flag under the root action
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
// create action
|
|
||||||
private _removeFlagAction = [
|
|
||||||
_rootActionID + "_removeflag", // id
|
|
||||||
"Remove Flag", // displayed title
|
|
||||||
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
_target forceFlagTexture "";
|
|
||||||
}, // statement
|
|
||||||
{
|
|
||||||
params ["_target", "_player", "_params"];
|
|
||||||
alive _target && getForcedFlagTexture _target != "";
|
|
||||||
}, // condition
|
|
||||||
nil // child code
|
|
||||||
] call ace_interact_menu_fnc_createAction;
|
|
||||||
|
|
||||||
// add the action to the vehicle
|
|
||||||
// in this class event handler, this#0 will be the vehicle
|
|
||||||
[
|
|
||||||
_parentClass, // parent classname
|
|
||||||
0, // action 0 or self-action 1
|
|
||||||
["ACE_MainActions", _rootActionID], // parent
|
|
||||||
_removeFlagAction, // action
|
|
||||||
true // apply to child classes
|
|
||||||
] call ace_interact_menu_fnc_addActionToClass;
|
|
||||||
|
|
||||||
} forEach _baseClassesToApplyActionsFor;
|
|
||||||
|
|
||||||
[
|
[
|
||||||
LEVEL_DEBUG,
|
LEVEL_DEBUG,
|
||||||
|
|||||||
2
images/leaflets/.gitkeep
Normal file
2
images/leaflets/.gitkeep
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
BIN
images/leaflets/leaflet_template.jpg
Normal file
BIN
images/leaflets/leaflet_template.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 306 KiB |
@@ -1,4 +1,4 @@
|
|||||||
author = "MISSION AUTHOR";
|
author = "MISSION AUTHOR";
|
||||||
onLoadName = "THIS APPEARS ON TOP OF THE LOADING SCREEN IMAGE";
|
onLoadName = "THIS APPEARS ON TOP OF THE LOADING SCREEN IMAGE";
|
||||||
loadScreen = "mission.jpg";
|
loadScreen = "mission.jpg";
|
||||||
onLoadMission = "THIS APPEARS BELOW THE LOADING SCREEN IMAGE";
|
onLoadMission = "THIS APPEARS BELOW THE LOADING SCREEN IMAGE";
|
||||||
@@ -9,8 +9,28 @@ overviewText = "THIS IS WHERE YOU DESCRIBE THE MISSION IN THE #MISSION LIST";
|
|||||||
// The name for the series of missions of your campaign. Used for organizational and search purposes
|
// The name for the series of missions of your campaign. Used for organizational and search purposes
|
||||||
missionSeries = "MY SERIES NAME";
|
missionSeries = "MY SERIES NAME";
|
||||||
|
|
||||||
// activate via #ace-fortify west base 2000
|
// What kind of mission is this? (Use only one)
|
||||||
|
missionGroup = "17thSaturdayOp";
|
||||||
|
// missionGroup = "17thFridayOp";
|
||||||
|
// missionGroup = "17thWednesdayOp";
|
||||||
|
// missionGroup = "17thFTX";
|
||||||
|
// missionGroup = "17thTraining";
|
||||||
|
|
||||||
|
|
||||||
|
// Add waypoints to players' MicroDAGR devices
|
||||||
|
// respawn locations (bases) are added by default, don't put them here
|
||||||
|
custom_microdagr_waypoints[] = {
|
||||||
|
// the first element is the waypoint name
|
||||||
|
// the second element is the position of the waypoint - you may use a string for map grid (up to 10 digit) or an array for {X, Y} coordinates
|
||||||
|
// the third element is optional - provide the variable name of an object if you want to use its initial position instead
|
||||||
|
// {"WAYPOINT NAME", {POSITION <[x,y]>}, OBJECT <objNull>},
|
||||||
|
// EXAMPLES:
|
||||||
|
// {"KAVALA HOSPITAL", {1234.56, 7890.12}, ""},
|
||||||
|
// {"CAMP TEMPEST", "03421460, ""},
|
||||||
|
// {"MY CUSTOM OBJECT", {}, "myCustomObject"}
|
||||||
|
};
|
||||||
|
|
||||||
|
// activate via #ace-fortify west base 2000
|
||||||
class ACEX_Fortify_Presets {
|
class ACEX_Fortify_Presets {
|
||||||
class base {
|
class base {
|
||||||
displayName = "Ken Custom";
|
displayName = "Ken Custom";
|
||||||
|
|||||||
BIN
textures/flags_misc/flag_17th_warlord_co.paa
Normal file
BIN
textures/flags_misc/flag_17th_warlord_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_blueoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_blueoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluepentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluepentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluesquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluesquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluetriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluetriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greencircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greencircle_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greenpentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greenpentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greensquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greensquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greentriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greentriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangecircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangecircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangepentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangepentagon_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangetriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangetriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkcircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkcircle_co.paa
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user