Compare commits
93 Commits
a20f477ee0
...
comments_i
| Author | SHA1 | Date | |
|---|---|---|---|
| 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
|
|||
|
|
40ee46ea98 | ||
|
|
10ef37cb80 | ||
|
|
74b630bfaa | ||
|
|
e64b29479d | ||
|
|
d25e67182a | ||
|
|
2218898ff7 | ||
|
|
4976aa51b8 | ||
|
|
ddf0fe91d4 | ||
|
|
72bac32219 | ||
|
|
21dbb725ac | ||
|
|
8e10819b92 | ||
|
|
68f35a9b44 | ||
|
|
f11cadbd06 | ||
|
|
a00f6cb0da |
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
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
run: |
|
||||
$headers = @{
|
||||
"accept" = "application/json"
|
||||
"Authorization" = "token ${{secrets.RELEASE_TOKEN}}"
|
||||
"Authorization" = "token ${{ gitea.token }}"
|
||||
}
|
||||
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/tags/testing-release" -Method Delete -Headers $headers
|
||||
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
run: |
|
||||
$headers = @{
|
||||
"accept" = "application/json"
|
||||
"Authorization" = "token ${{secrets.RELEASE_TOKEN}}"
|
||||
"Authorization" = "token ${{ gitea.token }}"
|
||||
}
|
||||
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/tags/testing-release" -Method Delete -Headers $headers
|
||||
|
||||
@@ -57,12 +57,12 @@ jobs:
|
||||
run: |
|
||||
$headers = @{
|
||||
"accept" = "application/json"
|
||||
"Authorization" = "token ${{secrets.RELEASE_TOKEN}}"
|
||||
"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.1.6
|
||||
uses: https://gitea.com/actions/gitea-release-action@v1.3.0
|
||||
with:
|
||||
tag_name: 'testing-release'
|
||||
name: 'testing-release'
|
||||
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 #
|
||||
*.bak
|
||||
|
||||
|
||||
.vscode/
|
||||
|
||||
66
CHANGELOG.md
66
CHANGELOG.md
@@ -4,6 +4,72 @@ 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).
|
||||
|
||||
## [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
|
||||
|
||||
Version 4 marks a massive rewrite due in whole to @IndigoFox by updating the internals of the framework into CBA macros and functions.
|
||||
|
||||
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.
|
||||
|
||||
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:
|
||||
```markdown
|
||||
├── aaFrameworkUtils/
|
||||
```
|
||||
├── defines/
|
||||
├── framework/
|
||||
├── images/
|
||||
@@ -14,13 +13,17 @@ Once copied, the final structure should appear similar to the following:
|
||||
├── sounds/
|
||||
├── textures/
|
||||
├── CHANGELOG.md
|
||||
├── custom_leaflets.hpp
|
||||
├── custom_scripts.hpp
|
||||
├── CHANGELOG.md
|
||||
├── description.ext
|
||||
├── mission_settings.hpp
|
||||
├── mission.jpg
|
||||
├── 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.
|
||||
|
||||
@@ -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 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
|
||||
|
||||
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
|
||||
|
||||
## 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/
|
||||
|
||||
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.
|
||||
- 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
|
||||
};
|
||||
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.
|
||||
|
||||
class ApprovedAssets {
|
||||
// Fixed-wing aircraft
|
||||
class USAF_A10 {callsign = "Ares";};
|
||||
class RHSGREF_A29B_HIDF {callsign = "Odyssey";};
|
||||
class USAF_C130J {callsign = "Hercules";};
|
||||
// Rotary aircraft
|
||||
class RHS_MELB_MH6M {callsign = "Apollo";};
|
||||
class RHS_MELB_AH6M {callsign = "Artemis";};
|
||||
class RHS_MELB_H6M {callsign = "Icarus";};
|
||||
class RHS_CH_47F {callsign = "Achilles";};
|
||||
class ej_MH60MDAP4 {callsign = "Hades";};
|
||||
class RHS_UH60M {callsign = "Griffin";};
|
||||
class RHS_UH60M_MEV2 {callsign = "Dustoff";};
|
||||
class B_T_VTOL_01_INFANTRY_F {callsign = "Pegasus";};
|
||||
class B_T_VTOL_01_ARMED_F {callsign = "Spartan";};
|
||||
class RHS_AH64D {callsign = "Orion";};
|
||||
class RHS_AH1Z {callsign = "Athena";};
|
||||
class RHS_UH1Y {callsign = "Homer";};
|
||||
class rhsusf_CH53E_USMC {callsign = "Atlas";};
|
||||
// APC
|
||||
class rhsusf_stryker_m1126_m2_d {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1126_mk19_d {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1127_m2_wd {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1132_m2_wd {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1134_wd {callsign = "Katana"; category = "APC";};
|
||||
class B_APC_Wheeled_01_cannon_F {callsign = "Rapier"; category = "APC";};
|
||||
class B_APC_Tracked_01_CRV_F {callsign = "DuctTape"; category = "APC";};
|
||||
// Rotary
|
||||
class TF373_SOAR_MH47G_No_Rear_Guns {callsign = "Achilles"; category = "Rotary";};
|
||||
class TF373_SOAR_MH47G_No_Rear_Guns_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
||||
class TF373_SOAR_MH47G {callsign = "Achilles"; category = "Rotary";};
|
||||
class TF373_SOAR_MH47G_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
||||
class RHS_CH_47F_10 {callsign = "Achilles"; category = "Rotary";};
|
||||
class RHS_MELB_AH6M {callsign = "Artemis"; category = "Rotary";};
|
||||
class RHS_MELB_MH6M {callsign = "Apollo"; category = "Rotary";};
|
||||
class RHS_MELB_H6M {callsign = "Icarus"; category = "Rotary";};
|
||||
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 COMMAND_CALLSIGN SPARTAN
|
||||
#define COMMAND_CALLSIGN STORMSURGE
|
||||
#define RRC_CALLSIGN TIGER
|
||||
#define MEDIC_CALLSIGN LIFELINE
|
||||
#define ALPHA_CALLSIGN BLACKJACK
|
||||
#define ECHO_CALLSIGN FIREBRAND
|
||||
#define ALPHA_CALLSIGN SAVAGE
|
||||
#define ECHO_CALLSIGN NIGHTFALL
|
||||
#define WPN_CALLSIGN BLACKFOOT
|
||||
|
||||
// Define the frequencies for the Battalion
|
||||
|
||||
@@ -13,7 +13,7 @@ class DisallowedEquipment {
|
||||
items[] = {
|
||||
"17BN_ANPVS14", // NVG AN/PVS-14
|
||||
"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_F", //Mk200 Series
|
||||
"rhs_weap_g36c", // G36 Series
|
||||
@@ -34,11 +34,6 @@ class DisallowedEquipment {
|
||||
"rhs_weap_m14_wd", // M14 Series
|
||||
"rhs_weap_m14_weap_m14ebrri", // 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", // M27 Series
|
||||
"rhsusf_ANPVS_14", // NVG AN/PVS-14
|
||||
@@ -100,12 +95,6 @@ class DisallowedEquipment {
|
||||
"UK3CB_M14DMR_Railed_BLK", // M14 Series
|
||||
"UK3CB_M14DMR_Railed", // M14 Series
|
||||
"UK3CB_M14DMR", // M14 Series
|
||||
"UK3CB_M16_Carbine", // M16 Series
|
||||
"UK3CB_M16A1_LSW", // M16 Series
|
||||
"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", //Nightforce Series Optic
|
||||
"optic_Nightstalker", // Thermal Optic
|
||||
"optic_tws_mg", // Thermal Optic
|
||||
"optic_tws", // Thermal Optic
|
||||
"rhsusf_acc_anpas13gv1", // Thermal Optic
|
||||
"rhsusf_acc_anpvs27", // Thermal Optic
|
||||
"optic_tws_mg", // Thermal Optic
|
||||
"Tier1_ANPVS10_Tan", // Thermal Optic
|
||||
"Tier1_ATACR18_ADM_Black_Vanilla", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_ADM_Black", //Nightforce Series Optic
|
||||
@@ -152,7 +140,8 @@ class DisallowedEquipment {
|
||||
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //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" //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert", //Nightforce Series Optic
|
||||
"sps_black_hornet_01_Static_F" // Black Hornet Drone Mod
|
||||
};
|
||||
};
|
||||
|
||||
@@ -160,6 +149,7 @@ class DisallowedEquipment {
|
||||
label = "TABBED WEAPON";
|
||||
description = "Items that are allowed for individuals with Ranger Tab.";
|
||||
items[] = {
|
||||
"optic_tws", // Thermal Optic
|
||||
"arifle_MX_black_F", // MX Series
|
||||
"arifle_MX_F", // MX Series
|
||||
"arifle_MX_GL_black_F", // MX 3GL Series
|
||||
@@ -208,7 +198,90 @@ class DisallowedEquipment {
|
||||
"Tier1_SR25_ec_tan", // SR-25 Series
|
||||
"Tier1_SR25_ec", // 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
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -20,31 +20,22 @@ class SupplyCrates {
|
||||
{"ACE_40mm_Flare_ir",12},
|
||||
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
||||
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
||||
{"SmokeShell",12},
|
||||
{"rhs_mag_m67",12},
|
||||
{"SmokeShell",24},
|
||||
{"ACE_M84",24},
|
||||
{"rhs_mag_m67",24},
|
||||
{"1Rnd_Smoke_Grenade_shell",24},
|
||||
{"1Rnd_SmokeRed_Grenade_shell",24},
|
||||
{"1Rnd_SmokeGreen_Grenade_shell",24},
|
||||
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
||||
{"Tier1_30Rnd_556x45_M856A1_EMag",25},
|
||||
{"Tier1_30Rnd_556x45_Mk318Mod0_EMag",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},
|
||||
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",75},
|
||||
{"Tier1_250Rnd_762x51_Belt_M993_AP",15},
|
||||
{"ACE_20Rnd_762x51_Mag_Tracer",25},
|
||||
{"ACE_20Rnd_762x51_M993_AP_Mag",25},
|
||||
{"rhsusf_20Rnd_762x51_SR25_m993_Mag",25},
|
||||
{"Tier1_20Rnd_762x51_M993_SR25_Mag",25},
|
||||
{"Tier1_20Rnd_65x48_Creedmoor_SR25_Mag",25},
|
||||
{"rhssaf_30rnd_556x45_EPR_G36", 25},
|
||||
{"DemoCharge_Remote_Mag",16}
|
||||
{"KAR_20Rnd_Fury_blk",25},
|
||||
{"rhsusf_m112_mag",25},
|
||||
};
|
||||
items[] = {};
|
||||
};
|
||||
@@ -56,13 +47,15 @@ class SupplyCrates {
|
||||
icon = "\A3\ui_f\data\map\vehicleicons\iconCrateWpns_ca.paa";
|
||||
|
||||
backpacks[] = {};
|
||||
weapons[] = {};
|
||||
weapons[] = {
|
||||
{"launch_MRAWS_green_F",2}
|
||||
};
|
||||
magazines[] = {
|
||||
{"MRAWS_HEAT_F",35},
|
||||
{"MRAWS_HE_F",15},
|
||||
{"Tier1_250Rnd_762x51_Belt_M993_AP",50},
|
||||
{"Tier1_30Rnd_556x45_M856A1_EMag",25},
|
||||
{"Tier1_30Rnd_556x45_Mk318Mod0_EMag",50},
|
||||
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",50},
|
||||
{"Titan_AA",10},
|
||||
{"Titan_AT",10},
|
||||
{"200Rnd_65x39_cased_Box_Tracer_Red",50}
|
||||
@@ -86,6 +79,7 @@ class SupplyCrates {
|
||||
{"ACE_splint",48},
|
||||
{"ACE_morphine",50},
|
||||
{"ACE_epinephrine",50},
|
||||
{"ACE_painkillers",20},
|
||||
{"ACE_bloodIV",75},
|
||||
{"ACE_bloodIV_500",50},
|
||||
{"ACE_bloodIV_250",25},
|
||||
@@ -136,6 +130,42 @@ class SupplyCrates {
|
||||
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 {
|
||||
boxClass = "Box_NATO_WpsSpecial_F";
|
||||
displayName = "Mortar MK6 Supply Crate";
|
||||
@@ -168,13 +198,40 @@ class SupplyCrates {
|
||||
icon = "\A3\ui_f\data\igui\cfg\simpleTasks\types\scout_ca.paa";
|
||||
|
||||
backpacks[] = {};
|
||||
weapons[] = {};
|
||||
weapons[] = {
|
||||
{"rhs_weap_M136",2},
|
||||
{"twc_2inch_bag",3}
|
||||
};
|
||||
magazines[] = {
|
||||
{"twc_2inch_he_1rnd",70},
|
||||
{"twc_2inch_smoke_1rnd",15},
|
||||
{"twc_2inch_illum_1rnd",15},
|
||||
{"Tier1_30Rnd_556x45_Mk318Mod0_EMag",20}
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",20}
|
||||
};
|
||||
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";
|
||||
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 {
|
||||
actionID = "flag_simpleshape_greenoctagon";
|
||||
actionTitle = "Green Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
||||
};
|
||||
class BlueCircle {
|
||||
actionID = "flag_simpleshape_bluecircle";
|
||||
actionTitle = "Blue Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
||||
class GreenPentagon {
|
||||
actionID = "flag_simpleshape_greenpentagon";
|
||||
actionTitle = "Green Pentagon";
|
||||
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 {
|
||||
actionID = "flag_simpleshape_orangesquare";
|
||||
actionTitle = "Orange Square";
|
||||
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 {
|
||||
actionID = "flag_simpleshape_pinktriangle";
|
||||
actionTitle = "Pink Triangle";
|
||||
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 {
|
||||
actionID = "flag_simpleshape_redpentagon";
|
||||
actionTitle = "Red Pentagon";
|
||||
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 {
|
||||
|
||||
@@ -89,18 +89,20 @@ minPlayerDistance = 500;
|
||||
|
||||
//-------------------------------------------BASE SETTINGS---------------------------------------------------------------//
|
||||
|
||||
class Params
|
||||
{
|
||||
};
|
||||
class Params {};
|
||||
|
||||
|
||||
// CfgFunctions
|
||||
class CfgFunctions {
|
||||
#include "framework\CfgFunctions.hpp"
|
||||
#include "custom_scripts.hpp"
|
||||
};
|
||||
|
||||
class CfgSounds {
|
||||
#include "custom_sounds.hpp"
|
||||
};
|
||||
|
||||
class CfgLeaflets {
|
||||
#include "custom_leaflets.hpp"
|
||||
};
|
||||
|
||||
class CfgDebriefingSections {
|
||||
class acex_killTracker {
|
||||
|
||||
@@ -24,15 +24,16 @@ class DOUBLES(PREFIX,client) {
|
||||
class functions {
|
||||
file = "framework\client\functions";
|
||||
class initClient {};
|
||||
class addDraw3DPFH {};
|
||||
class addGetNearMenPFH {};
|
||||
class addMicroDAGRWaypoints {};
|
||||
class addZenModules {};
|
||||
class bindEventHandlers {};
|
||||
class bindUnconsciousListener {};
|
||||
class bindVehicleActions {};
|
||||
class addGetNearMenPFH {};
|
||||
class addDraw3DPFH {};
|
||||
class registerPFHCode {};
|
||||
class clearPFHCode {};
|
||||
class logRespawnButtonUse {};
|
||||
class registerPFHCode {};
|
||||
class staticLineProtection {};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -119,6 +120,7 @@ class DOUBLES(PREFIX,performance) {
|
||||
class addServerStatsPFH {};
|
||||
class calculateServerStats {};
|
||||
class addEmptyGroupCleanupPFH {};
|
||||
class addDeadUnitCleanupPFH {};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -173,6 +175,8 @@ class DOUBLES(PREFIX,vehicleFlags) {
|
||||
class addFlagActions {};
|
||||
class draw3D {};
|
||||
class getActionsFlagCategories {};
|
||||
class compileFlagAction {};
|
||||
class compileFlagCategoryAction {};
|
||||
class getVehicleFlagsCfg {};
|
||||
class isClassExcluded {};
|
||||
};
|
||||
|
||||
@@ -2,31 +2,6 @@
|
||||
|
||||
if ( !hasInterface ) exitWith {};
|
||||
|
||||
player addEventHandler["Respawn",
|
||||
{
|
||||
params ["_unit", "_corpse"];
|
||||
private _killer = _corpse getVariable ["ace_medical_causeOfDeath", "#scripted"];
|
||||
if (_killer == "respawn_button") then {
|
||||
private _timeWentUnconscious = _corpse getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
||||
private _durationSpentUnconscious = -1;
|
||||
if (_timeWentUnconscious > -1) then {
|
||||
_durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
||||
};
|
||||
|
||||
[
|
||||
LEVEL_INFO,
|
||||
QUOTE(COMPONENT),
|
||||
"RESPAWNED WHILE UNCONSCIOUS",
|
||||
[_unit, [
|
||||
["durationSpentUnconscious", _durationSpentUnconscious]
|
||||
]] 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"];
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
["ace_medical_knockOut", { // local event that's also used directly by the ACE medical statemachine
|
||||
private _unit = _this;
|
||||
_this setVariable [QGVARMAIN(lastTimeKnockedOut), diag_tickTime, true];
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
["ace_medical_WakeUp", { // local event that's also used directly by the ACE medical statemachine
|
||||
private _unit = _this;
|
||||
_this setVariable [QGVARMAIN(lastTimeKnockedOut), nil, true];
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
@@ -29,39 +29,6 @@ _unflip =
|
||||
["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";
|
||||
|
||||
nil;
|
||||
@@ -8,13 +8,17 @@ 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 when the player goes unconscious and saves a variable with time
|
||||
call FUNC(bindUnconsciousListener);
|
||||
// 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,
|
||||
|
||||
56
framework/client/functions/fn_logRespawnButtonUse.sqf
Normal file
56
framework/client/functions/fn_logRespawnButtonUse.sqf
Normal file
@@ -0,0 +1,56 @@
|
||||
#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"];
|
||||
|
||||
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]
|
||||
]] 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;
|
||||
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;
|
||||
}];
|
||||
@@ -14,6 +14,44 @@ call EFUNC(common,logMissionInfo);
|
||||
call EFUNC(fbcb2_assets,initServer);
|
||||
call EFUNC(reinsert,initServer);
|
||||
|
||||
// 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
|
||||
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
//---------------------
|
||||
// Garbage Collection
|
||||
//---------------------
|
||||
|
||||
[
|
||||
QGVAR(emptyGroupCleanup_enable),
|
||||
"CHECKBOX",
|
||||
@@ -22,6 +26,28 @@
|
||||
}
|
||||
] 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
|
||||
//---------------------
|
||||
|
||||
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;
|
||||
@@ -10,9 +10,39 @@
|
||||
GVAR(emptyGroupCleanupPFH) = [
|
||||
{
|
||||
{
|
||||
if (local _x) then {
|
||||
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;
|
||||
@@ -39,6 +69,3 @@ GVAR(emptyGroupCleanupPFH) = [
|
||||
{ not (missionNamespace getVariable [QGVAR(emptyGroupCleanup_enable), false]) },
|
||||
[]
|
||||
] call CBA_fnc_createPerFrameHandlerObject;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
// log to RPT
|
||||
[
|
||||
|
||||
{_this call EFUNC(common,log);},
|
||||
{_this remoteExec [QEFUNC(common,log), 2]},
|
||||
[
|
||||
LEVEL_INFO,
|
||||
QUOTE(COMPONENT),
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
private _rawCPS = _counter / (diag_frameNo - _frameNo);
|
||||
missionNamespace setVariable [QGVAR(server_raw_cps), _rawCPS];
|
||||
publicVariable QGVAR(server_raw_cps);
|
||||
|
||||
// with suspension
|
||||
private _counter = 0;
|
||||
@@ -26,7 +25,6 @@
|
||||
|
||||
private _serverCPS = _counter / (diag_frameNo - _frameNo);
|
||||
missionNamespace setVariable [QGVAR(server_cps), _counter / (diag_frameNo - _frameNo)];
|
||||
publicVariable QGVAR(server_cps);
|
||||
|
||||
// log to RPT
|
||||
[
|
||||
|
||||
@@ -14,7 +14,7 @@ localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []];
|
||||
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
||||
|
||||
// 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;
|
||||
|
||||
// ignore weight restrictions for carry/drag
|
||||
_box setVariable ["ace_ignoreWeightCarry", true, true];
|
||||
_box setVariable ["ace_dragging_ignoreWeightCarry", true, true];
|
||||
|
||||
// Return the box
|
||||
_box;
|
||||
@@ -1,4 +1,4 @@
|
||||
#define MAJOR 4
|
||||
#define MINOR 0
|
||||
#define PATCHLVL 0
|
||||
#define MINOR 2
|
||||
#define PATCHLVL 1
|
||||
#define BUILD 0
|
||||
|
||||
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;
|
||||
@@ -5,86 +5,25 @@
|
||||
0: STRING - Parent action ID
|
||||
1: ARRAY - Flag category configs
|
||||
*/
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
params ["_rootActionID", "_flagCategoryCfgs"];
|
||||
|
||||
private _allCategoryActions = [];
|
||||
|
||||
{
|
||||
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
||||
|
||||
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
|
||||
_flagCategoryActions = [];
|
||||
if (configName _x == "SimpleShapes") then {
|
||||
{
|
||||
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"];
|
||||
_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;
|
||||
|
||||
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||
} forEach (_x call BIS_fnc_returnChildren);
|
||||
} else {
|
||||
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||
};
|
||||
// add category to all category actions array
|
||||
_allCategoryActions pushBack [_flagCategoryAction, [], _target];
|
||||
{
|
||||
_allCategoryActions pushBack [_x, [], _target];
|
||||
} forEach _flagCategoryActions;
|
||||
} forEach _flagCategoryCfgs;
|
||||
|
||||
_allCategoryActions;
|
||||
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";
|
||||
loadScreen = "mission.jpg";
|
||||
onLoadMission = "THIS APPEARS BELOW THE LOADING SCREEN IMAGE";
|
||||
@@ -9,6 +9,13 @@ 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
|
||||
missionSeries = "MY SERIES NAME";
|
||||
|
||||
// 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
|
||||
|
||||
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.
BIN
textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinksquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinksquare_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redcircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redcircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redoctagon_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redsquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redsquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redtriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redtriangle_co.paa
Normal file
Binary file not shown.
Reference in New Issue
Block a user