Compare commits
61 Commits
f3c95322e9
...
aj_cbrn
| Author | SHA1 | Date | |
|---|---|---|---|
|
a2c3a5ab1c
|
|||
|
a4a8303e08
|
|||
|
|
db7bdf1ecd | ||
|
|
0f8783ffa9 | ||
|
|
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
|
|||
|
|
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
|
||||
18
AJ_CBRN_V2/CfgFunctions.hpp
Normal file
18
AJ_CBRN_V2/CfgFunctions.hpp
Normal file
@@ -0,0 +1,18 @@
|
||||
class AJDJ
|
||||
{
|
||||
class CBRN
|
||||
{
|
||||
file = "AJ_CBRN_V2\functions";
|
||||
class zenModules{ postInit = 1; };
|
||||
class createArea{};
|
||||
class chemicalParticleLoop{};
|
||||
class chemicalDamage{};
|
||||
class getProtectionLevel{};
|
||||
class equipMask{};
|
||||
class chemicalInitClient{};
|
||||
class chemicalDetector{};
|
||||
class unconAlarm{};
|
||||
class chemicalAlarm{};
|
||||
class deleteArea{};
|
||||
};
|
||||
};
|
||||
13
AJ_CBRN_V2/CfgSounds.hpp
Normal file
13
AJ_CBRN_V2/CfgSounds.hpp
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
class chemical_alarm
|
||||
{
|
||||
name = "chemical_alarm";
|
||||
sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_2.ogg", 0.9, 1, 3}; //directory, volume, pitch, range
|
||||
titles[]={};
|
||||
};
|
||||
class uncon_alarm
|
||||
{
|
||||
name = "uncon_alarm";
|
||||
sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range
|
||||
titles[]={};
|
||||
};
|
||||
2
AJ_CBRN_V2/config.hpp
Normal file
2
AJ_CBRN_V2/config.hpp
Normal file
@@ -0,0 +1,2 @@
|
||||
#include "CfgFunctions.hpp"
|
||||
#include "CfgSounds.hpp"
|
||||
12
AJ_CBRN_V2/functions/fn_chemicalAlarm.sqf
Normal file
12
AJ_CBRN_V2/functions/fn_chemicalAlarm.sqf
Normal file
@@ -0,0 +1,12 @@
|
||||
//chemical detector audible warning of lethal levels of contamianation
|
||||
//gets triggered when activating chemical trigger
|
||||
//turns off when exiting the chemical trigger
|
||||
|
||||
while { true } do {
|
||||
|
||||
if ("ChemicalDetector_01_watch_F" in (assignedItems player)) then {
|
||||
// play the sound
|
||||
playSound "chemical_alarm";
|
||||
};
|
||||
sleep 5;
|
||||
};
|
||||
39
AJ_CBRN_V2/functions/fn_chemicalDamage.sqf
Normal file
39
AJ_CBRN_V2/functions/fn_chemicalDamage.sqf
Normal file
@@ -0,0 +1,39 @@
|
||||
if (!hasInterface) exitWith {};
|
||||
waitUntil {
|
||||
!isNull player
|
||||
};
|
||||
|
||||
params ["_trg"];
|
||||
|
||||
// start the alarm audio script (includes checking for device)
|
||||
private _alarmHandle = ([] spawn AJDJ_fnc_chemicalAlarm);
|
||||
|
||||
// main loop for doing hurty things when in chemical area
|
||||
while { player inArea _trg } do {
|
||||
// check for player protection level
|
||||
private _protectionLevel = call AJDJ_fnc_getProtectionLevel;
|
||||
|
||||
//if the player does not have full protection
|
||||
if !(_protectionLevel == 2) then {
|
||||
//if the player does not have mask protection
|
||||
if (_protectionLevel == 1) then {
|
||||
|
||||
sleep 5.0;
|
||||
|
||||
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
|
||||
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
|
||||
} else {
|
||||
|
||||
// deal the damage
|
||||
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
|
||||
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
|
||||
|
||||
// deal it again for extra speedy killing
|
||||
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
|
||||
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
|
||||
};
|
||||
};
|
||||
sleep 5;
|
||||
};
|
||||
|
||||
terminate _alarmHandle;
|
||||
80
AJ_CBRN_V2/functions/fn_chemicalDetector.sqf
Normal file
80
AJ_CBRN_V2/functions/fn_chemicalDetector.sqf
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
Chemical Detector script by Ajdj100
|
||||
Version 1.0.0
|
||||
|
||||
Adds functionality to the chemical detector
|
||||
|
||||
call this script from initPlayerLocal.sqf (example on line 16).
|
||||
|
||||
|
||||
Parameters:
|
||||
0: Array of objects - the sources of contamination. (Required)
|
||||
1: Number - the radius of contamination around the source object(s) in meters. (optional, defaults to 50m)
|
||||
|
||||
|
||||
initPlayerLocal.sqf Example:
|
||||
chemDetector = [[Chemical1], 250] execVM "chemicalDetector.sqf"; (Creates a contamination zone 250m around the location of the Chemical1 object)
|
||||
*/
|
||||
|
||||
// if not a real gamer, exit
|
||||
if (!hasInterface) exitWith {};
|
||||
waitUntil {
|
||||
!isNull player;
|
||||
};
|
||||
|
||||
while { true } do {
|
||||
// get all chemical areas
|
||||
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
|
||||
|
||||
// if there are chemical sources present, and the player has a chemical detector
|
||||
if (!(_sources isEqualTo []) && ("ChemicalDetector_01_watch_F" in (assignedItems player))) then {
|
||||
// sort based on distance to chemical source, including radius of chemical
|
||||
private _sortedSources =+ [_sources, [], {
|
||||
(_x distance player) - (_x getVariable "radius")
|
||||
}] call BIS_fnc_sortBy;
|
||||
|
||||
// selects nearest source of chemical
|
||||
private _source = (_sortedSources select 0);
|
||||
|
||||
// global threat variable (for use in audio functions)
|
||||
private _threat = (10 - ((player distance _source) - (_source getVariable "radius")))/3 min 9.99 max 0 toFixed 2;
|
||||
|
||||
// do some stuff for the display
|
||||
"ChemicalDetector" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
|
||||
|
||||
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
|
||||
if !(isNull _ui) then {
|
||||
private _obj = _ui displayCtrl 101;
|
||||
_obj ctrlAnimateModel ["Threat_Level_Source", parseNumber _threat, true];
|
||||
};
|
||||
|
||||
// if the player is in a chemical zone
|
||||
if ((parseNumber _threat) > 3) then {
|
||||
// if the player is knocked out
|
||||
if ((player getVariable "ACE_isUnconscious")) then {
|
||||
//wait 20 seconds to detect uncon
|
||||
sleep 20;
|
||||
// loop until the player wakes up
|
||||
// if !(player getVariable "ACE_isUnconscious") exitWith {
|
||||
// systemChat "DEBUG unit woke up before alarm";
|
||||
// };
|
||||
waitUntil {
|
||||
sleep 1;
|
||||
[player] remoteExecCall ["AJDJ_fnc_unconAlarm", 0]; //THIS HAS A BUG, IT WONT TURN OFF AFTER ESCAPING THE GAS.
|
||||
!(player getVariable "ACE_isUnconscious"); //THIS NEEDS TO BE SPAWNED AS A SEPERATE
|
||||
};
|
||||
};
|
||||
};
|
||||
} else { //default for if there are no chemical sources present
|
||||
|
||||
"ChemicalDetector" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
|
||||
|
||||
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
|
||||
if !(isNull _ui) then {
|
||||
private _obj = _ui displayCtrl 101;
|
||||
_obj ctrlAnimateModel ["Threat_Level_Source", 0.00, true];
|
||||
};
|
||||
};
|
||||
|
||||
sleep 0.5;
|
||||
};
|
||||
17
AJ_CBRN_V2/functions/fn_chemicalInitClient.sqf
Normal file
17
AJ_CBRN_V2/functions/fn_chemicalInitClient.sqf
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
CBRN Script client side initialization Ajdj100
|
||||
Version 0.1.0
|
||||
|
||||
Adds functionality to a few things for the client
|
||||
Call this script from initPlayerLocal.sqf (example on line 10).
|
||||
|
||||
initPlayerLocal.sqf Example:
|
||||
|
||||
call AJDJ_fnc_chemicalInitClient;
|
||||
*/
|
||||
|
||||
|
||||
aceMask = ["EquipMask","Put on Gas Mask","",{call AJDJ_fnc_equipMask},{true}] call ace_interact_menu_fnc_createAction;
|
||||
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], aceMask] call ace_interact_menu_fnc_addActionToObject;
|
||||
|
||||
call AJDJ_fnc_chemicalDetector;
|
||||
58
AJ_CBRN_V2/functions/fn_chemicalParticleLoop.sqf
Normal file
58
AJ_CBRN_V2/functions/fn_chemicalParticleLoop.sqf
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
spawns the visible component of the chemical area
|
||||
|
||||
returns the particle source for use in deletion
|
||||
*/
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
params ["_location", "_radius"];
|
||||
|
||||
_location set [2, 0];
|
||||
|
||||
private _pSource = ("#particlesource" createVehicleLocal _location);
|
||||
_pSource setParticleParams
|
||||
[
|
||||
["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 0, 8],
|
||||
"", "Billboard", 1, 10, // animationName, type, timerPeriod, lifeTime
|
||||
[0,0,-1000], // position relative to referenceObject
|
||||
[0, 0, 0], // velocity
|
||||
0, 0.005, 0.003925, 0.1, [5, 5], // rotation, weight, volume, rubbing, size
|
||||
[[0.6, 0.6, 0.2, 0], [0.6, 0.6, 0.2, 0.7], [0.6, 0.6, 0.2, 0]], // colors
|
||||
[1], // animationPhase
|
||||
0, 0, // randomDirectionPeriod, randomDirectionIntensity
|
||||
"", "", // onTimer, beforeDestroy
|
||||
_pSource, // referenceObject
|
||||
0, false, // angle, bounces
|
||||
-1, [], // bounceOnSurface, emissiveColor
|
||||
[0, 1, 0]// vectorDir - CANNOT be [0, 0, 0]
|
||||
];
|
||||
|
||||
_pSource setDropInterval (0.5/_radius);
|
||||
_pSource setParticleCircle [(_radius/2), [0,1,0]];
|
||||
/*
|
||||
lifeTime,
|
||||
position,
|
||||
moveVelocity,
|
||||
rotationVelocity,
|
||||
size,
|
||||
color,
|
||||
directionPeriod,
|
||||
directionIntensity,
|
||||
angle,
|
||||
bounceOnSurface
|
||||
*/
|
||||
_pSource setParticleRandom
|
||||
[
|
||||
0,
|
||||
[(_radius/2), (_radius/2), 1],
|
||||
[0, 0, 0.5],
|
||||
4,
|
||||
1,
|
||||
[0, 0, 0, 0],
|
||||
0,
|
||||
0
|
||||
];
|
||||
|
||||
//return the particle source
|
||||
_pSource;
|
||||
44
AJ_CBRN_V2/functions/fn_createArea.sqf
Normal file
44
AJ_CBRN_V2/functions/fn_createArea.sqf
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
creates a new contamination area
|
||||
|
||||
Params:
|
||||
0: Position array OR Object - The source of the contamination
|
||||
1: Radius - the radius of contamination around the object
|
||||
|
||||
Location can be either a position array [x,y,z] or an object
|
||||
[location, radius] call AJDJ_fnc_createArea;
|
||||
*/
|
||||
|
||||
params ["_location", "_radius"];
|
||||
|
||||
//init temp for emitter object
|
||||
private _emitterObject = _location;
|
||||
|
||||
if ("OBJECT" isEqualTo typeName _location) then {
|
||||
_location = getPos _location;
|
||||
} else {
|
||||
_emitterObject = ("Land_GarbageBarrel_02_F" createVehicle _location);
|
||||
};
|
||||
|
||||
//create trigger to control area
|
||||
private _trg = createTrigger ["EmptyDetector", _location, false];
|
||||
_trg setTriggerArea [_radius, _radius, 0, false, (_radius/2)];
|
||||
_trg setTriggerActivation ["ANYPLAYER", "PRESENT", true];
|
||||
_trg setTriggerStatements ["this", "[thisTrigger] spawn AJDJ_fnc_chemicalDamage", ""];
|
||||
|
||||
//start loop for particle effects
|
||||
private _pSource = [_location, _radius, _emitterObject] call AJDJ_fnc_chemicalParticleLoop;
|
||||
|
||||
|
||||
//bind variables
|
||||
_trg setVariable ["pSource", _pSource]; //particle source
|
||||
_trg setVariable ["radius", _radius]; //area of effect (for chemical detector use);
|
||||
|
||||
systemChat str _emitterObject;
|
||||
//store trigger in barrel for deletion
|
||||
_emitterObject setVariable ["trigger", _trg];
|
||||
|
||||
|
||||
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
|
||||
_sources pushBack _trg;
|
||||
missionNamespace setVariable ["chemicalSources", _sources];
|
||||
18
AJ_CBRN_V2/functions/fn_deleteArea.sqf
Normal file
18
AJ_CBRN_V2/functions/fn_deleteArea.sqf
Normal file
@@ -0,0 +1,18 @@
|
||||
params["_target"];
|
||||
|
||||
if (_target isEqualTo objNull) exitWith {};
|
||||
|
||||
private _trg = (_target getVariable "trigger");
|
||||
|
||||
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
|
||||
_sources deleteAt (_sources find _trg);
|
||||
missionNamespace setVariable ["chemicalSources", _sources];
|
||||
|
||||
// delete the particle emitter
|
||||
deleteVehicle (_trg getVariable "pSource");
|
||||
|
||||
// set the trigger area to 0 (removes the area of effect)
|
||||
// _trg setTriggerArea [0, 0, 0, false, 0];
|
||||
|
||||
deleteVehicle _trg;
|
||||
deleteVehicle _target;
|
||||
43
AJ_CBRN_V2/functions/fn_equipMask.sqf
Normal file
43
AJ_CBRN_V2/functions/fn_equipMask.sqf
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
Gasmask equipping script by Ajdj100
|
||||
Version 0.1.0
|
||||
|
||||
Script to allow players to equip gasmasks via ACE self interact if they are holding one in their inventory.
|
||||
|
||||
PASTE THE FOLLOWING INTO initPlayerLocal.sqf TO INITIALIZE:
|
||||
|
||||
aceMask = ["EquipMask","Put on Gas Mask","",{execVM "scripts\aceGasmask.sqf"},{true}] call ace_interact_menu_fnc_createAction;
|
||||
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], aceMask] call ace_interact_menu_fnc_addActionToObject;
|
||||
*/
|
||||
|
||||
|
||||
//if not a player, exit
|
||||
if (!hasInterface) exitwith {};
|
||||
|
||||
// init lists of masks
|
||||
private _allowedGoggles = [
|
||||
"G_AirPurifyingRespirator_01_F",
|
||||
"G_AirPurifyingRespirator_02_black_F",
|
||||
"G_AirPurifyingRespirator_02_olive_F",
|
||||
"G_AirPurifyingRespirator_02_sand_F"
|
||||
];
|
||||
|
||||
private _items = items player;
|
||||
|
||||
private _availableGoggles = (_items arrayIntersect _allowedGoggles);
|
||||
|
||||
//if the player has a gasmask in their inventory
|
||||
if !(_availableGoggles isEqualTo []) then {
|
||||
|
||||
//temporarily stores faceware
|
||||
private _tempGoggles = goggles player;
|
||||
|
||||
//Swaps mask with current facewear
|
||||
player addGoggles (_availableGoggles select 0);
|
||||
player removeItem (_availableGoggles select 0);
|
||||
player addItem _tempGoggles;
|
||||
|
||||
hint "Added mask"; //debug message
|
||||
} else {
|
||||
hint "No mask in inventory"
|
||||
};
|
||||
51
AJ_CBRN_V2/functions/fn_getProtectionLevel.sqf
Normal file
51
AJ_CBRN_V2/functions/fn_getProtectionLevel.sqf
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
returns protection level of local player
|
||||
*/
|
||||
|
||||
// init lists of protective equiptment
|
||||
private _allowedGoggles = [
|
||||
"G_AirPurifyingRespirator_01_F",
|
||||
"G_AirPurifyingRespirator_02_black_F",
|
||||
"G_AirPurifyingRespirator_02_olive_F",
|
||||
"G_AirPurifyingRespirator_02_sand_F",
|
||||
"G_RegulatorMask_F"
|
||||
];
|
||||
private _allowedUniforms = [
|
||||
"U_B_CBRN_Suit_01_MTP_F",
|
||||
"U_B_CBRN_Suit_01_Tropic_F",
|
||||
"U_B_CBRN_Suit_01_Blue_F",
|
||||
"U_B_CBRN_Suit_01_White_F",
|
||||
"U_B_CBRN_Suit_01_Wdl_F",
|
||||
"U_I_CBRN_Suit_01_AAF_F",
|
||||
"U_I_E_CBRN_Suit_01_EAF_F"
|
||||
];
|
||||
private _allowedVehicles = [
|
||||
"rhsusf_m1a2sep1wd_usarmy",
|
||||
"rhsusf_m1a2sep1tuskiwd_usarmy",
|
||||
"rhsusf_m1a2sep1tuskiiwd_usarmy",
|
||||
"rhsusf_m1a2sep2wd_usarmy",
|
||||
"RHS_M2A3_BUSKIII_wd",
|
||||
"B_APC_Wheeled_01_cannon_F"
|
||||
];
|
||||
|
||||
//init protection level variable
|
||||
private _protectionLevel = 0;
|
||||
|
||||
// if they are wearing a mask
|
||||
if (goggles player in _allowedGoggles) then {
|
||||
// if they are wearing the suit
|
||||
if (uniform player in _allowedUniforms) then {
|
||||
_protectionLevel = 2;
|
||||
} else {
|
||||
_protectionLevel = 1;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// if the player is in a protected vehicle
|
||||
if (typeOf objectParent player in _allowedVehicles) then {
|
||||
_protectionLevel = 2
|
||||
};
|
||||
|
||||
//return
|
||||
_protectionLevel;
|
||||
8
AJ_CBRN_V2/functions/fn_unconAlarm.sqf
Normal file
8
AJ_CBRN_V2/functions/fn_unconAlarm.sqf
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
Script to handle the audio alert for going unconsious in gas
|
||||
By Ajdj100
|
||||
|
||||
version 0.1.0
|
||||
*/
|
||||
params ["_unit"];
|
||||
_unit say3D "uncon_alarm";
|
||||
27
AJ_CBRN_V2/functions/fn_zenModules.sqf
Normal file
27
AJ_CBRN_V2/functions/fn_zenModules.sqf
Normal file
@@ -0,0 +1,27 @@
|
||||
["CBRN", "Create Chemical Area",
|
||||
{
|
||||
params ["_position", "_attachedObj"];
|
||||
|
||||
["Chemical Area Option",
|
||||
[[ "SLIDER:RADIUS", "Radius", [0, 500, 50, 0, _position, [1,0,0,1]]]],
|
||||
{
|
||||
params ["_dialog", "_args"];
|
||||
_args params ["_position"];
|
||||
_dialog params ["_radius"];
|
||||
|
||||
[_position, _radius] remoteExec ["AJDJ_fnc_createArea", 0, true];
|
||||
},
|
||||
{},
|
||||
[_position, _attachedObj]
|
||||
] call zen_dialog_fnc_create;
|
||||
}
|
||||
] call zen_custom_modules_fnc_register;
|
||||
|
||||
|
||||
["CBRN", "Delete Chemical Area",
|
||||
{
|
||||
params ["_position", "_attachedObj"];
|
||||
|
||||
[_attachedObj] remoteExec ["AJDJ_fnc_deleteArea", 0, true];
|
||||
}
|
||||
] call zen_custom_modules_fnc_register;
|
||||
43
AJ_CBRN_V2/readme.md
Normal file
43
AJ_CBRN_V2/readme.md
Normal file
@@ -0,0 +1,43 @@
|
||||
### How to add to mission:
|
||||
|
||||
Drag the AJ_CBRN_V2 folder into your mission folder and add the following line into class CfgFunctions in description.ext:
|
||||
|
||||
#include "AJ_CBRN_V2\CfgFunctions.hpp"
|
||||
|
||||
Add the following line into CfgSounds in description.ext:
|
||||
|
||||
#include "AJ_CBRN_V2\CfgSounds.hpp"
|
||||
|
||||
lastly, add the following line to initPlayerLocal.sqf:
|
||||
|
||||
call AJDJ_fnc_chemicalInitClient;
|
||||
|
||||
|
||||
### How to use:
|
||||
|
||||
to create and delete a chemical area in zeus, use the modules under the CBRN tab.
|
||||
|
||||
to create a chemical area in editor or through script, use the following line:
|
||||
|
||||
[location, radius] call AJDJ_fnc_createArea;
|
||||
|
||||
location can be either an object, or an array of coordinates. Examples below:
|
||||
|
||||
[myObject, 40] call AJDJ_fnc_createArea;
|
||||
|
||||
[[6113.79,8642.26,0], 10] call AJDJ_fnc_createArea;
|
||||
|
||||
to delete an area through script, use the following line:
|
||||
|
||||
[object] call ["AJDJ_fnc_deleteArea", 0, true];
|
||||
|
||||
|
||||
[IMPORTANT] note that these must be executed globally to function correctly. When using the init field of an object, it will automatically run globally
|
||||
If you are working in an sqf, you will have to use remoteExec
|
||||
|
||||
|
||||
currently all the CBRN equiptment from the contact DLC is supported. It is possible to add your own gear to this, but it involves editing a number of
|
||||
arrays across a number of sqf's. In future I will make it easier to customize what gear provides protection.
|
||||
|
||||
|
||||
Please reach out to me if you have any issues or suggestions at @ajdj100 on discord.
|
||||
BIN
AJ_CBRN_V2/sounds/AJ_Warning_1.ogg
Normal file
BIN
AJ_CBRN_V2/sounds/AJ_Warning_1.ogg
Normal file
Binary file not shown.
BIN
AJ_CBRN_V2/sounds/AJ_Warning_2.ogg
Normal file
BIN
AJ_CBRN_V2/sounds/AJ_Warning_2.ogg
Normal file
Binary file not shown.
38
CHANGELOG.md
38
CHANGELOG.md
@@ -4,6 +4,44 @@ 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.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
|
||||
@@ -7,7 +7,7 @@
|
||||
#define COMMAND_CALLSIGN SPARTAN
|
||||
#define RRC_CALLSIGN TIGER
|
||||
#define MEDIC_CALLSIGN LIFELINE
|
||||
#define ALPHA_CALLSIGN BLACKJACK
|
||||
#define ALPHA_CALLSIGN ROGUE
|
||||
#define ECHO_CALLSIGN FIREBRAND
|
||||
#define WPN_CALLSIGN BLACKFOOT
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -160,6 +148,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 +197,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
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -21,18 +21,14 @@ class SupplyCrates {
|
||||
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
||||
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
||||
{"SmokeShell",12},
|
||||
{"rhs_mag_m67",12},
|
||||
{"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},
|
||||
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",75},
|
||||
{"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},
|
||||
@@ -42,8 +38,6 @@ class SupplyCrates {
|
||||
{"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}
|
||||
};
|
||||
items[] = {};
|
||||
@@ -56,13 +50,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}
|
||||
@@ -168,12 +164,15 @@ 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[] = {};
|
||||
};
|
||||
|
||||
@@ -94,6 +94,11 @@ class Params {};
|
||||
class CfgFunctions {
|
||||
#include "framework\CfgFunctions.hpp"
|
||||
#include "custom_scripts.hpp"
|
||||
#include "AJ_CBRN_V2\CfgFunctions.hpp"
|
||||
};
|
||||
|
||||
class CfgSounds {
|
||||
#include "AJ_CBRN_V2\CfgSounds.hpp"
|
||||
};
|
||||
|
||||
class CfgLeaflets {
|
||||
|
||||
@@ -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 {};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -2,31 +2,6 @@
|
||||
|
||||
if ( !hasInterface ) exitWith {};
|
||||
|
||||
["ace_killed", {
|
||||
params ["_unit", "_causeOfDeath", "_killer", "_instigator"];
|
||||
|
||||
if (!local _unit) exitWith {};
|
||||
|
||||
if (_causeOfDeath == "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];
|
||||
};
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
|
||||
[
|
||||
{
|
||||
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,30 @@ 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 {};
|
||||
|
||||
if not (isInRemainsCollector _unit) exitWith {};
|
||||
|
||||
// format["%1 from group %2 died at %3", _unit, group _unit, [datetime] call BIS_fnc_timeToString] remoteExec ["systemChat"];
|
||||
_unit setVariable["milsim_death_time", time];
|
||||
// _unit addEventHandler ["Deleted", {
|
||||
// params ["_entity"];
|
||||
// isGC = _entity getVariable["milsim_garbage_collected", false];
|
||||
// format["%1 from was deleted by custom gc: %2", _entity, str isGC ] remoteExec ["systemChat"];
|
||||
// }];
|
||||
}];
|
||||
|
||||
// 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;
|
||||
},
|
||||
180,
|
||||
[],
|
||||
{ // 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
|
||||
[
|
||||
|
||||
@@ -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 1
|
||||
#define PATCHLVL 2
|
||||
#define BUILD 0
|
||||
|
||||
@@ -10,11 +10,11 @@ overviewText = "THIS IS WHERE YOU DESCRIBE THE MISSION IN THE #MISSION LIST";
|
||||
missionSeries = "MY SERIES NAME";
|
||||
|
||||
// What kind of mission is this? (Use only one)
|
||||
missionGroup = "Saturday Op";
|
||||
// missionGroup = "Friday Op";
|
||||
// missionGroup = "Wednesday Op";
|
||||
// missionGroup = "FTX";
|
||||
// missionGroup = "Training";
|
||||
missionGroup = "17thSaturdayOp";
|
||||
// missionGroup = "17thFridayOp";
|
||||
// missionGroup = "17thWednesdayOp";
|
||||
// missionGroup = "17thFTX";
|
||||
// missionGroup = "17thTraining";
|
||||
|
||||
|
||||
// Add waypoints to players' MicroDAGR devices
|
||||
|
||||
Reference in New Issue
Block a user