Compare commits
67 Commits
1bdbdd1273
...
4.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
| 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
|
|||
|
4fb0ea9a15
|
|||
|
|
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: |
|
run: |
|
||||||
$headers = @{
|
$headers = @{
|
||||||
"accept" = "application/json"
|
"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
|
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/tags/testing-release" -Method Delete -Headers $headers
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
$headers = @{
|
$headers = @{
|
||||||
"accept" = "application/json"
|
"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
|
Invoke-WebRequest -Uri "${{ gitea.api_url }}/repos/${{ gitea.repository }}/tags/testing-release" -Method Delete -Headers $headers
|
||||||
|
|
||||||
@@ -57,12 +57,12 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
$headers = @{
|
$headers = @{
|
||||||
"accept" = "application/json"
|
"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 }}`"}"
|
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
|
- 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:
|
with:
|
||||||
tag_name: 'testing-release'
|
tag_name: 'testing-release'
|
||||||
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
|
||||||
30
CHANGELOG.md
30
CHANGELOG.md
@@ -4,6 +4,36 @@ 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.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.
|
||||||
|
|||||||
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
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
#define COMMAND_CALLSIGN SPARTAN
|
#define COMMAND_CALLSIGN SPARTAN
|
||||||
#define RRC_CALLSIGN TIGER
|
#define RRC_CALLSIGN TIGER
|
||||||
#define MEDIC_CALLSIGN LIFELINE
|
#define MEDIC_CALLSIGN LIFELINE
|
||||||
#define ALPHA_CALLSIGN BLACKJACK
|
#define ALPHA_CALLSIGN ROGUE
|
||||||
#define ECHO_CALLSIGN FIREBRAND
|
#define ECHO_CALLSIGN FIREBRAND
|
||||||
#define WPN_CALLSIGN BLACKFOOT
|
#define WPN_CALLSIGN BLACKFOOT
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class DisallowedEquipment {
|
|||||||
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,12 +95,6 @@ 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
|
|
||||||
"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_14", // NVG AN/PVS-14
|
||||||
"USP_PVS_15" // NVG AN/PVS-15
|
"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
|
||||||
@@ -160,6 +148,7 @@ class DisallowedEquipment {
|
|||||||
label = "TABBED WEAPON";
|
label = "TABBED WEAPON";
|
||||||
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 +197,90 @@ 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
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -21,18 +21,14 @@ class SupplyCrates {
|
|||||||
{"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",12},
|
||||||
{"rhs_mag_m67",12},
|
{"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},
|
{"Tier1_30Rnd_556x45_M856A1_EMag",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},
|
{"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",25},
|
||||||
{"SMA_20Rnd_762x51mm_M80A1_EPR_Tracer",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",25},
|
||||||
@@ -42,8 +38,6 @@ class SupplyCrates {
|
|||||||
{"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},
|
|
||||||
{"rhssaf_30rnd_556x45_EPR_G36", 25},
|
|
||||||
{"DemoCharge_Remote_Mag",16}
|
{"DemoCharge_Remote_Mag",16}
|
||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
@@ -56,13 +50,15 @@ 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},
|
{"Tier1_30Rnd_556x45_M856A1_EMag",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}
|
||||||
@@ -168,12 +164,15 @@ 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[] = {};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -89,17 +89,16 @@ 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 CfgLeaflets {
|
||||||
|
#include "custom_leaflets.hpp"
|
||||||
|
};
|
||||||
|
|
||||||
class CfgDebriefingSections {
|
class CfgDebriefingSections {
|
||||||
class acex_killTracker {
|
class acex_killTracker {
|
||||||
|
|||||||
@@ -24,11 +24,16 @@ class DOUBLES(PREFIX,client) {
|
|||||||
class functions {
|
class functions {
|
||||||
file = "framework\client\functions";
|
file = "framework\client\functions";
|
||||||
class initClient {};
|
class initClient {};
|
||||||
|
class addDraw3DPFH {};
|
||||||
|
class addGetNearMenPFH {};
|
||||||
class addMicroDAGRWaypoints {};
|
class addMicroDAGRWaypoints {};
|
||||||
class addZenModules {};
|
class addZenModules {};
|
||||||
class bindEventHandlers {};
|
class bindEventHandlers {};
|
||||||
class bindUnconsciousListener {};
|
|
||||||
class bindVehicleActions {};
|
class bindVehicleActions {};
|
||||||
|
class clearPFHCode {};
|
||||||
|
class logRespawnButtonUse {};
|
||||||
|
class registerPFHCode {};
|
||||||
|
class staticLineProtection {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -36,15 +41,16 @@ 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 {};
|
||||||
@@ -156,8 +162,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 {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -166,6 +171,8 @@ 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 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;
|
||||||
@@ -23,11 +23,27 @@ if (!hasInterface) exitWith {};
|
|||||||
];
|
];
|
||||||
private _realPos = nil;
|
private _realPos = nil;
|
||||||
// if pos was provided, process
|
// if pos was provided, process
|
||||||
if (count _pos > 0) then {
|
if (count _pos >= 2) then {
|
||||||
if (typeName _pos == "STRING") then {
|
switch (typeName _pos) do {
|
||||||
_realPos = [_pos, true] call ACE_common_fnc_getMapPosFromGrid;
|
case "ARRAY": {
|
||||||
_realPos set [2, getTerrainHeightASL _realPos];
|
// pos is provided as an array
|
||||||
} else {_realPos = _pos;};
|
_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 object was provided, process and override any pos
|
||||||
if (count _object > 0) then {
|
if (count _object > 0) then {
|
||||||
@@ -53,7 +69,8 @@ if (!hasInterface) exitWith {};
|
|||||||
};
|
};
|
||||||
|
|
||||||
[_wpName, _realPos] call ace_microdagr_fnc_deviceAddWaypoint;
|
[_wpName, _realPos] call ace_microdagr_fnc_deviceAddWaypoint;
|
||||||
} forEach _customWaypoints;
|
true;
|
||||||
|
} count _customWaypoints;
|
||||||
}] call CBA_fnc_waitUntilAndExecute;
|
}] call CBA_fnc_waitUntilAndExecute;
|
||||||
|
|
||||||
nil;
|
nil;
|
||||||
@@ -2,32 +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 {
|
|
||||||
private _timeWentUnconscious = _unit getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
|
||||||
private _durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
|
||||||
[
|
|
||||||
LEVEL_INFO,
|
|
||||||
QUOTE(COMPONENT),
|
|
||||||
"RESPAWNED WHILE UNCONSCIOUS",
|
|
||||||
[_unit, [[
|
|
||||||
"durationSpentUnconscious",
|
|
||||||
(if (_timeWentUnconscious > - 1) then {
|
|
||||||
_durationSpentUnconscious
|
|
||||||
} else {
|
|
||||||
-1
|
|
||||||
})
|
|
||||||
]]] 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"];
|
||||||
|
|||||||
@@ -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];
|
|
||||||
}] 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];
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
@@ -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 [];
|
||||||
@@ -8,8 +8,17 @@ call FUNC(addZenModules);
|
|||||||
call FUNC(bindEventHandlers);
|
call FUNC(bindEventHandlers);
|
||||||
call FUNC(bindVehicleActions);
|
call FUNC(bindVehicleActions);
|
||||||
|
|
||||||
// add listener that tracks when the player goes unconscious and saves a variable with time
|
// add core getNearMenPFH handler
|
||||||
call FUNC(bindUnconsciousListener);
|
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,
|
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;
|
||||||
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;
|
||||||
|
}];
|
||||||
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,10 +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 _json = [_hash] call CBA_fnc_encodeJSON;
|
private _json = [_hash] call CBA_fnc_encodeJSON;
|
||||||
_log = format ["[%1] [%2] [%3] [%4] :: %5", QUOTE(PREFIX), _component, _fnc_scriptNameParent, _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;
|
||||||
@@ -9,21 +9,19 @@ if (!hasInterface) exitWith {};
|
|||||||
player setDamage 1;
|
player setDamage 1;
|
||||||
|
|
||||||
private _timeWentUnconscious = player getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
private _timeWentUnconscious = player getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
||||||
private _durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
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, [[
|
[player, [
|
||||||
"durationSpentUnconscious",
|
["durationSpentUnconscious", _durationSpentUnconscious]
|
||||||
(if (_timeWentUnconscious > - 1) then {
|
]] call EFUNC(common,addPlayerInfoToArray)
|
||||||
_durationSpentUnconscious
|
|
||||||
} else {
|
|
||||||
-1
|
|
||||||
})
|
|
||||||
]]] call EFUNC(common,addPlayerInfoToArray)
|
|
||||||
] remoteExec [QEFUNC(common,log), 2];
|
] remoteExec [QEFUNC(common,log), 2];
|
||||||
|
|
||||||
// systemChat to all remote machines
|
// systemChat to all remote machines
|
||||||
|
|||||||
@@ -2,13 +2,6 @@
|
|||||||
|
|
||||||
if (!hasInterface) exitWith {};
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
["milsim_logText", {
|
|
||||||
params [["_strArray", [""], [[]]]];
|
|
||||||
{
|
|
||||||
diag_log text _x;
|
|
||||||
} forEach _strArray;
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
|
|
||||||
// make sure the server has finished init
|
// make sure the server has finished init
|
||||||
waitUntil {!isNil QGVARMAIN(complete)};
|
waitUntil {!isNil QGVARMAIN(complete)};
|
||||||
|
|
||||||
@@ -18,8 +11,6 @@ waitUntil {!isNil QGVARMAIN(complete)};
|
|||||||
call FUNC(addAARChatHandler);
|
call FUNC(addAARChatHandler);
|
||||||
call FUNC(addRespawnChatHandler);
|
call FUNC(addRespawnChatHandler);
|
||||||
call FUNC(setDefaults);
|
call FUNC(setDefaults);
|
||||||
call FUNC(checkMissionSettings);
|
|
||||||
|
|
||||||
|
|
||||||
// Initialize a holder for managing local diary records
|
// Initialize a holder for managing local diary records
|
||||||
// store records in format:
|
// store records in format:
|
||||||
|
|||||||
@@ -9,21 +9,18 @@ publicVariable QGVARMAIN(baseObjects);
|
|||||||
// Initializes the Dynamic Groups framework and groups
|
// Initializes the Dynamic Groups framework and groups
|
||||||
["Initialize", [true]] call BIS_fnc_dynamicGroups;
|
["Initialize", [true]] call BIS_fnc_dynamicGroups;
|
||||||
|
|
||||||
if (isDedicated) then {
|
|
||||||
["milsim_logText", {
|
|
||||||
params [["_strArray", [""], [[]]]];
|
|
||||||
{
|
|
||||||
diag_log text _x;
|
|
||||||
} forEach _strArray;
|
|
||||||
}] call CBA_fnc_addEventHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// initialize other modules
|
// initialize other modules
|
||||||
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);
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
|
||||||
// declare init complete to other modules
|
// declare init complete to other modules
|
||||||
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -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,30 +14,20 @@ 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];
|
||||||
if (_triageLevel == -1) then {continue};
|
if (_triageLevel == -1) then {continue};
|
||||||
@@ -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;
|
||||||
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);
|
||||||
@@ -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,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
|
// The name for the series of missions of your campaign. Used for organizational and search purposes
|
||||||
missionSeries = "MY SERIES NAME";
|
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
|
// Add waypoints to players' MicroDAGR devices
|
||||||
// respawn locations (bases) are added by default, don't put them here
|
// respawn locations (bases) are added by default, don't put them here
|
||||||
|
|||||||
Reference in New Issue
Block a user