Compare commits
50 Commits
aj_cbrn
...
22c1f1a21a
| Author | SHA1 | Date | |
|---|---|---|---|
| 22c1f1a21a | |||
|
|
3f4d4147a3 | ||
| 840652f853 | |||
| 05936d9213 | |||
| 84ab6a1ca7 | |||
| 175988efe6 | |||
| 69aed97ce3 | |||
|
|
071a056dc8 | ||
|
|
c31e5cf9ac | ||
| 5cf3ea5c1f | |||
| 38d03353b3 | |||
| ca478ab08d | |||
| f6703e7dd4 | |||
|
|
ea64f8e63c | ||
| 3308cdc5ba | |||
| a35c39721e | |||
| dba0a0e57c | |||
| 888a688f56 | |||
| c94f660682 | |||
|
|
7e93ebfbfd | ||
|
|
e0c8f3c952 | ||
|
|
d200f83375 | ||
| 51c5da44ce | |||
| 0f5569c5ba | |||
|
|
448fad1ee0 | ||
|
|
2210dc1a70 | ||
|
|
7e5e7e26af | ||
|
|
7c6130891a | ||
|
|
eee4ac1b83 | ||
| faf84a0bf2 | |||
| 68d793a519 | |||
| 2e67e0e932 | |||
| 04546e49f7 | |||
| 8cfebeef10 | |||
| 8c6c1f6a62 | |||
|
1fea46355a
|
|||
|
de91b61fcc
|
|||
| fedc6f1432 | |||
| b34928c0c3 | |||
| 2d9e5aabef | |||
| 87ebbae31c | |||
| 408228f07b | |||
| 736e90e305 | |||
| f17fff8363 | |||
| 64bc303893 | |||
| 80247a01d0 | |||
|
7c8cd6104b
|
|||
|
7322799b78
|
|||
| 8f89283ceb | |||
| af7600ac16 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,3 +2,5 @@
|
||||
# Notepad++ backups #
|
||||
*.bak
|
||||
|
||||
|
||||
.vscode/
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
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{};
|
||||
};
|
||||
};
|
||||
@@ -1,13 +0,0 @@
|
||||
|
||||
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[]={};
|
||||
};
|
||||
@@ -1,2 +0,0 @@
|
||||
#include "CfgFunctions.hpp"
|
||||
#include "CfgSounds.hpp"
|
||||
@@ -1,12 +0,0 @@
|
||||
//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;
|
||||
};
|
||||
@@ -1,39 +0,0 @@
|
||||
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;
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
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;
|
||||
};
|
||||
@@ -1,17 +0,0 @@
|
||||
/*
|
||||
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;
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
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;
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
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];
|
||||
@@ -1,18 +0,0 @@
|
||||
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;
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
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"
|
||||
};
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
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;
|
||||
@@ -1,8 +0,0 @@
|
||||
/*
|
||||
Script to handle the audio alert for going unconsious in gas
|
||||
By Ajdj100
|
||||
|
||||
version 0.1.0
|
||||
*/
|
||||
params ["_unit"];
|
||||
_unit say3D "uncon_alarm";
|
||||
@@ -1,27 +0,0 @@
|
||||
["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;
|
||||
@@ -1,43 +0,0 @@
|
||||
### 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.
|
||||
Binary file not shown.
Binary file not shown.
43
CHANGELOG.md
43
CHANGELOG.md
@@ -4,6 +4,49 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [4.2.2] - 2024-12-23
|
||||
|
||||
### Added
|
||||
|
||||
- CBA settings to allow disabling of remaining text chat channels
|
||||
|
||||
### Changed
|
||||
|
||||
- Log triage level on player respawn
|
||||
- Campaign Callsigns
|
||||
|
||||
### Fixed
|
||||
|
||||
- Equipment typos
|
||||
|
||||
## [4.2.1] - 2024-06-23
|
||||
|
||||
### Changed
|
||||
|
||||
- Allowed Equipment Definition typo
|
||||
|
||||
## [4.2.0] - 2024-06-20
|
||||
|
||||
### Added
|
||||
|
||||
- Custom remainsCollector script to replace and supplement the built in arma remainsCollector function
|
||||
- New Resupply Boxes
|
||||
- Ability to spawn spare tires and tracks at the arsenal and via Zeus module
|
||||
|
||||
### Changed
|
||||
|
||||
- Split vehicle flags into colors and shapes for additional options
|
||||
- Battalion Callsigns
|
||||
- Allowed Equipment Definitions
|
||||
- Resupply Box Contents
|
||||
- Fixed incorrect ace carry variable setting
|
||||
|
||||
### Removed
|
||||
|
||||
- SMA mod references
|
||||
- Extraneous server performance calculation broadcast to all clients
|
||||
- Ability for pilots to check re-insertion queue
|
||||
|
||||
## [4.1.2] - 2024-04-25
|
||||
|
||||
### Changed
|
||||
|
||||
8
custom_sounds.hpp
Normal file
8
custom_sounds.hpp
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
// EXAMPLE
|
||||
// class uncon_alarm
|
||||
// {
|
||||
// name = "uncon_alarm";
|
||||
// sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range
|
||||
// titles[]={};
|
||||
// };
|
||||
@@ -1,22 +1,74 @@
|
||||
// Lists approved fixed-wing and rotary vehicle types that mission makers can use in their missions.
|
||||
|
||||
class ApprovedAssets {
|
||||
// Fixed-wing aircraft
|
||||
class USAF_A10 {callsign = "Ares";};
|
||||
class RHSGREF_A29B_HIDF {callsign = "Odyssey";};
|
||||
class USAF_C130J {callsign = "Hercules";};
|
||||
// Rotary aircraft
|
||||
class RHS_MELB_MH6M {callsign = "Apollo";};
|
||||
class RHS_MELB_AH6M {callsign = "Artemis";};
|
||||
class RHS_MELB_H6M {callsign = "Icarus";};
|
||||
class RHS_CH_47F {callsign = "Achilles";};
|
||||
class ej_MH60MDAP4 {callsign = "Hades";};
|
||||
class RHS_UH60M {callsign = "Griffin";};
|
||||
class RHS_UH60M_MEV2 {callsign = "Dustoff";};
|
||||
class B_T_VTOL_01_INFANTRY_F {callsign = "Pegasus";};
|
||||
class B_T_VTOL_01_ARMED_F {callsign = "Spartan";};
|
||||
class RHS_AH64D {callsign = "Orion";};
|
||||
class RHS_AH1Z {callsign = "Athena";};
|
||||
class RHS_UH1Y {callsign = "Homer";};
|
||||
class rhsusf_CH53E_USMC {callsign = "Atlas";};
|
||||
// APC
|
||||
class rhsusf_stryker_m1126_m2_d {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1126_mk19_d {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1127_m2_wd {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1132_m2_wd {callsign = "Katana"; category = "APC";};
|
||||
class rhsusf_stryker_m1134_wd {callsign = "Katana"; category = "APC";};
|
||||
class B_APC_Wheeled_01_cannon_F {callsign = "Rapier"; category = "APC";};
|
||||
class B_APC_Tracked_01_CRV_F {callsign = "DuctTape"; category = "APC";};
|
||||
// Rotary
|
||||
class TF373_SOAR_MH47G_No_Rear_Guns {callsign = "Achilles"; category = "Rotary";};
|
||||
class TF373_SOAR_MH47G_No_Rear_Guns_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
||||
class TF373_SOAR_MH47G {callsign = "Achilles"; category = "Rotary";};
|
||||
class TF373_SOAR_MH47G_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
||||
class RHS_CH_47F_10 {callsign = "Achilles"; category = "Rotary";};
|
||||
class RHS_MELB_AH6M {callsign = "Artemis"; category = "Rotary";};
|
||||
class RHS_MELB_MH6M {callsign = "Apollo"; category = "Rotary";};
|
||||
class RHS_MELB_H6M {callsign = "Icarus"; category = "Rotary";};
|
||||
class RHS_UH60M {callsign = "Griffin"; category = "Rotary";};
|
||||
class RHS_UH60M2 {callsign = "Griffin"; category = "Rotary";};
|
||||
class RHS_UH60M_MEV {callsign = "Dustoff"; category = "Rotary";};
|
||||
class ej_MH60MDAP {callsign = "Hades"; category = "Rotary";};
|
||||
class ej_MH60MDAP16H {callsign = "Hades"; category = "Rotary";};
|
||||
class ej_MH60MDAP8H {callsign = "Hades"; category = "Rotary";};
|
||||
class ej_MH60MDAP4 {callsign = "Hades"; category = "Rotary";};
|
||||
class RHS_AH64DGrey {callsign = "Orion"; category = "Rotary";};
|
||||
// Air
|
||||
// Truck
|
||||
class rhsusf_M1078A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";};
|
||||
class rhsusf_M1084A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";};
|
||||
class rhsusf_M1078A1P2_B_WD_CP_fmtv_usarmy {callsign = ""; category = "Truck";};
|
||||
// Boats
|
||||
class rhsusf_mkvsoc {callsign = "Poseidon"; category = "Boats";};
|
||||
class B_Boat_Armed_01_minigun_F {callsign = "Neptune"; category = "Boats";};
|
||||
// MRAP
|
||||
class rhsusf_M1238A1_M2_socom_d {callsign = "Tanto"; category = "MRAP";};
|
||||
class rhsusf_M1238A1_Mk19_socom_d {callsign = "Tanto"; category = "MRAP";};
|
||||
class rhsusf_M1239_M2_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
||||
class rhsusf_M1239_MK19_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
||||
class rhsusf_m1245_m2crows_socom_d {callsign = "Dagger"; category = "MRAP";};
|
||||
class rhsusf_m1245_mk19crows_socom_d {callsign = "Dagger"; category = "MRAP";};
|
||||
class rhsusf_M1239_M2_Deploy_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
||||
// TiltRotor
|
||||
class B_T_VTOL_01_infantry_F {callsign = "Pegasus"; category = "TiltRotor";};
|
||||
class B_T_VTOL_01_armed_F {callsign = "Chimera"; category = "TiltRotor";};
|
||||
// Water
|
||||
// Ground Vehicle
|
||||
// Cars
|
||||
class rhsusf_m1165a1_gmv_m134d_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
||||
class rhsusf_m1165a1_gmv_m2_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
||||
class rhsusf_m1165a1_gmv_mk19_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
||||
class rhsusf_mrzr4_d {callsign = ""; category = "Cars";};
|
||||
class UK3CB_B_M1030_NATO {callsign = ""; category = "Cars";};
|
||||
class B_T_LSV_01_AT_F {callsign = ""; category = "Cars";};
|
||||
class B_T_LSV_01_armed_F {callsign = ""; category = "Cars";};
|
||||
class C_Quadbike_01_F {callsign = ""; category = "Cars";};
|
||||
// Fixed-Wing
|
||||
class B_Plane_CAS_01_dynamicLoadout_F {callsign = "Ares"; category = "Fixed-Wing";};
|
||||
class RHS_A10 {callsign = "Ares"; category = "Fixed-Wing";};
|
||||
class USAF_AC130U {callsign = "Odin"; category = "Fixed-Wing";};
|
||||
class USAF_C130J {callsign = "Hercules"; category = "Fixed-Wing";};
|
||||
class B_Plane_Fighter_01_F {callsign = "Xerxes"; category = "Fixed-Wing";};
|
||||
// Artillery
|
||||
class rhsusf_M142_usarmy_WD {callsign = "Halberd"; category = "Artillery";};
|
||||
class UK3CB_B_M270_MLRS_HE_DES {callsign = "Halberd"; category = "Artillery";};
|
||||
class rhsusf_m109d_usarmy {callsign = "Glaive"; category = "Artillery";};
|
||||
class RHS_M119_D {callsign = "Mailman"; category = "Artillery";};
|
||||
class B_Mortar_01_F {callsign = "Hammer"; category = "Artillery";};
|
||||
// Armor
|
||||
class B_AFV_Wheeled_01_cannon_F {callsign = "Gladius"; category = "Armor";};
|
||||
class B_AFV_Wheeled_01_up_cannon_F {callsign = "Gladius"; category = "Armor";};
|
||||
};
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
|
||||
// Define the callsigns for the Battalion
|
||||
#define COMMAND_CALLSIGN SPARTAN
|
||||
#define RRC_CALLSIGN TIGER
|
||||
#define MEDIC_CALLSIGN LIFELINE
|
||||
#define ALPHA_CALLSIGN ROGUE
|
||||
#define ECHO_CALLSIGN FIREBRAND
|
||||
#define COMMAND_CALLSIGN POWERLINE
|
||||
//#define RRC_CALLSIGN TIGER
|
||||
//#define MEDIC_CALLSIGN LIFELINE
|
||||
#define ALPHA_CALLSIGN KINGPIN
|
||||
#define ECHO_CALLSIGN WARLORD
|
||||
#define WPN_CALLSIGN BLACKFOOT
|
||||
|
||||
// Define the frequencies for the Battalion
|
||||
@@ -73,26 +73,26 @@ class BattalionInfo {
|
||||
};
|
||||
|
||||
|
||||
class RRC { // WIP
|
||||
callsign = RRC_CALLSIGN;
|
||||
shortDescription = "RRC";
|
||||
textColor = LVL2_TEXT_COLOR;
|
||||
frequencies[] = {
|
||||
{"Contact", {}, {FREQ_BATTALION}},
|
||||
{"Actual", {}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_CAS}}
|
||||
};
|
||||
};
|
||||
// class RRC { // WIP
|
||||
// callsign = RRC_CALLSIGN;
|
||||
// shortDescription = "RRC";
|
||||
// textColor = LVL2_TEXT_COLOR;
|
||||
// frequencies[] = {
|
||||
// {"Contact", {}, {FREQ_BATTALION}},
|
||||
// {"Actual", {}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_CAS}}
|
||||
// };
|
||||
// };
|
||||
|
||||
class BattalionMedical { // WIP
|
||||
callsign = MEDIC_CALLSIGN;
|
||||
shortDescription = "Battalion Medical";
|
||||
textColor = LVL2_TEXT_COLOR;
|
||||
frequencies[] = {
|
||||
{"Contact", {FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION}},
|
||||
{"Actual", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_LOGISTICS}},
|
||||
{"General", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {}}
|
||||
};
|
||||
};
|
||||
// class BattalionMedical { // WIP
|
||||
// callsign = MEDIC_CALLSIGN;
|
||||
// shortDescription = "Battalion Medical";
|
||||
// textColor = LVL2_TEXT_COLOR;
|
||||
// frequencies[] = {
|
||||
// {"Contact", {FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION}},
|
||||
// {"Actual", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_LOGISTICS}},
|
||||
// {"General", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {}}
|
||||
// };
|
||||
// };
|
||||
|
||||
class WeaponsSquad { // WIP
|
||||
callsign = WPN_CALLSIGN;
|
||||
|
||||
@@ -11,9 +11,9 @@ class DisallowedEquipment {
|
||||
label = "BLACKLISTED WEAPON OR ITEM";
|
||||
description = "Items that NO member is allowed to use.";
|
||||
items[] = {
|
||||
"17BN_ANPVS14", // NVG AN/PVS-14
|
||||
"ej_PVS15D", // NVG AN/PVS-15
|
||||
"ej_PVS15", // NVG AN/PVS-15
|
||||
//"17BN_ANPVS14", // NVG AN/PVS-14
|
||||
//"ej_PVS15D", // 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
|
||||
@@ -95,8 +95,8 @@ class DisallowedEquipment {
|
||||
"UK3CB_M14DMR_Railed_BLK", // M14 Series
|
||||
"UK3CB_M14DMR_Railed", // M14 Series
|
||||
"UK3CB_M14DMR", // M14 Series
|
||||
"USP_PVS_14", // NVG AN/PVS-14
|
||||
"USP_PVS_15" // NVG AN/PVS-15
|
||||
//"USP_PVS_14", // NVG AN/PVS-14
|
||||
//"USP_PVS_15" // NVG AN/PVS-15
|
||||
};
|
||||
};
|
||||
|
||||
@@ -140,7 +140,10 @@ class DisallowedEquipment {
|
||||
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Black", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert_Vanilla", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert" //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert", //Nightforce Series Optic
|
||||
"sps_black_hornet_01_Static_F", // Black Hornet Drone Mod
|
||||
"MRH_TacticalDisplay", //MRH Satellite Display Tablet
|
||||
"MRH_FoldedSatcomAntenna" //MRH Satellite Satcom
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -20,7 +20,8 @@ class SupplyCrates {
|
||||
{"ACE_40mm_Flare_ir",12},
|
||||
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
||||
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
||||
{"SmokeShell",12},
|
||||
{"SmokeShell",24},
|
||||
{"ACE_M84",24},
|
||||
{"rhs_mag_m67",24},
|
||||
{"1Rnd_Smoke_Grenade_shell",24},
|
||||
{"1Rnd_SmokeRed_Grenade_shell",24},
|
||||
@@ -28,17 +29,16 @@ class SupplyCrates {
|
||||
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
||||
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",75},
|
||||
{"SMA_30Rnd_762x35_BLK_EPR",25},
|
||||
{"SMA_20Rnd_762x51mm_M80A1_EPR",25},
|
||||
{"SMA_20Rnd_762x51mm_M80A1_EPR_Tracer",25},
|
||||
{"SMA_20Rnd_762x51mm_Mk316_Mod_0_Special_Long_Range",25},
|
||||
{"SMA_20Rnd_762x51mm_Mk316_Mod_0_Special_Long_Range_Tracer",25},
|
||||
{"Tier1_250Rnd_762x51_Belt_M993_AP",15},
|
||||
{"ACE_20Rnd_762x51_Mag_Tracer",25},
|
||||
{"ACE_20Rnd_762x51_M993_AP_Mag",25},
|
||||
{"rhsusf_20Rnd_762x51_SR25_m993_Mag",25},
|
||||
{"Tier1_20Rnd_762x51_M993_SR25_Mag",25},
|
||||
{"DemoCharge_Remote_Mag",16}
|
||||
{"KAR_20Rnd_Fury_blk",25},
|
||||
{"rhsusf_m112_mag",25},
|
||||
{"JCA_20Rnd_762x51_PMAG",25},
|
||||
{"JCA_20Rnd_762x51_Tracer_Red_PMAG",25},
|
||||
{"KAR_100Rnd_Fury_blk",25},
|
||||
};
|
||||
items[] = {};
|
||||
};
|
||||
@@ -61,7 +61,8 @@ class SupplyCrates {
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",50},
|
||||
{"Titan_AA",10},
|
||||
{"Titan_AT",10},
|
||||
{"200Rnd_65x39_cased_Box_Tracer_Red",50}
|
||||
{"200Rnd_65x39_cased_Box_Tracer_Red",50},
|
||||
{"KAR_100Rnd_Fury_RT_blk",50}
|
||||
};
|
||||
items[] = {};
|
||||
};
|
||||
@@ -82,6 +83,7 @@ class SupplyCrates {
|
||||
{"ACE_splint",48},
|
||||
{"ACE_morphine",50},
|
||||
{"ACE_epinephrine",50},
|
||||
{"ACE_painkillers",20},
|
||||
{"ACE_bloodIV",75},
|
||||
{"ACE_bloodIV_500",50},
|
||||
{"ACE_bloodIV_250",25},
|
||||
@@ -132,6 +134,42 @@ class SupplyCrates {
|
||||
items[] = {};
|
||||
};
|
||||
|
||||
class SquadUtility {
|
||||
boxClass = "Box_Syndicate_Ammo_F";
|
||||
displayName = "Squad Utility Supply Crate";
|
||||
tooltip = "A crate containing Flairs, Smokes, Breaching Charges";
|
||||
icon = "\A3\ui_f\data\map\vehicleicons\iconCrateAmmo_ca.paa";
|
||||
|
||||
backpacks[] = {};
|
||||
weapons[] = {};
|
||||
magazines[] = {};
|
||||
items[] = {
|
||||
{"ACE_Chemlight_HiYellow",20},
|
||||
{"ACE_Chemlight_HiBlue",20},
|
||||
{"ACE_Chemlight_HiGreen",20},
|
||||
{"ACE_Chemlight_HiRed",20},
|
||||
{"ACE_Chemlight_UltraHiOrange",20},
|
||||
{"ACE_HandFlare_Yellow",20},
|
||||
{"ACE_HandFlare_White",20},
|
||||
{"ACE_HandFlare_Red",20},
|
||||
{"ACE_HandFlare_Green",20},
|
||||
{"ACE_Chemlight_IR",20},
|
||||
{"ACE_IR_Strobe_Item",20},
|
||||
{"SmokeShellYellow",20},
|
||||
{"SmokeShellBlue",20},
|
||||
{"SmokeShellPurple",20},
|
||||
{"SmokeShellOrange",20},
|
||||
{"SmokeShellGreen",20},
|
||||
{"SmokeShellRed",20},
|
||||
{"tsp_popperCharge_auto_mag",10},
|
||||
{"tsp_frameCharge_mag",20},
|
||||
{"tsp_stickCharge_auto_mag",10},
|
||||
{"ACE_CableTie",25},
|
||||
{"DemoCharge_Remote_Mag",15},
|
||||
{"TFAR_anprc152",3},
|
||||
};
|
||||
};
|
||||
|
||||
class MortarMk6Resupply {
|
||||
boxClass = "Box_NATO_WpsSpecial_F";
|
||||
displayName = "Mortar MK6 Supply Crate";
|
||||
@@ -176,4 +214,28 @@ class SupplyCrates {
|
||||
};
|
||||
items[] = {};
|
||||
};
|
||||
|
||||
class ResupplyTire {
|
||||
boxClass = "ACE_Wheel";
|
||||
displayName = "Vehicle Tire";
|
||||
tooltip = "A single tire for replacement";
|
||||
icon = "A3\ui_f\data\igui\cfg\simpletasks\types\repair_ca.paa";
|
||||
|
||||
backpacks[] = {};
|
||||
weapons[] = {};
|
||||
magazines[] = {};
|
||||
items[] = {};
|
||||
};
|
||||
|
||||
class ResupplyTrack {
|
||||
boxClass = "ACE_Track";
|
||||
displayName = "Vehicle Track";
|
||||
tooltip = "A single track for replacement";
|
||||
icon = "z\ace\addons\repair\ui\patch_ca.paa";
|
||||
|
||||
backpacks[] = {};
|
||||
weapons[] = {};
|
||||
magazines[] = {};
|
||||
items[] = {};
|
||||
};
|
||||
};
|
||||
@@ -84,30 +84,159 @@ class VehicleFlags {
|
||||
actionID = "flag_simpleshape";
|
||||
actionTitle = "Simple Shapes";
|
||||
|
||||
class GreenOctagon {
|
||||
actionID = "flag_simpleshape_greenoctagon";
|
||||
actionTitle = "Green Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
||||
class Blue {
|
||||
actionID = "flags_simpleshape_blue";
|
||||
actionTitle = "Blue";
|
||||
|
||||
class BlueCircle {
|
||||
actionID = "flag_simpleshape_bluecircle";
|
||||
actionTitle = "Blue Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
||||
};
|
||||
class BlueOctagon {
|
||||
actionID = "flag_simpleshape_blueoctagon";
|
||||
actionTitle = "Blue Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_blueoctagon_co.paa";
|
||||
};
|
||||
class BluePentagon {
|
||||
actionID = "flag_simpleshape_bluepentagon";
|
||||
actionTitle = "Blue Pentagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_bluepentagon_co.paa";
|
||||
};
|
||||
class BlueSquare {
|
||||
actionID = "flag_simpleshape_bluesquare";
|
||||
actionTitle = "Blue Square";
|
||||
texture = "textures\simple_shape\flag_simpleshape_bluesquare_co.paa";
|
||||
};
|
||||
class BlueTriangle {
|
||||
actionID = "flag_simpleshape_bluetriangle";
|
||||
actionTitle = "Blue Triangle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_bluetriangle_co.paa";
|
||||
};
|
||||
};
|
||||
class BlueCircle {
|
||||
actionID = "flag_simpleshape_bluecircle";
|
||||
actionTitle = "Blue Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
||||
|
||||
class Green {
|
||||
actionID = "flags_simpleshape_green";
|
||||
actionTitle = "Green";
|
||||
|
||||
class GreenCircle {
|
||||
actionID = "flag_simpleshape_greencircle";
|
||||
actionTitle = "Green Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greencircle_co.paa";
|
||||
};
|
||||
class GreenOctagon {
|
||||
actionID = "flag_simpleshape_greenoctagon";
|
||||
actionTitle = "Green Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
||||
};
|
||||
class GreenPentagon {
|
||||
actionID = "flag_simpleshape_greenpentagon";
|
||||
actionTitle = "Green Pentagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greenpentagon_co.paa";
|
||||
};
|
||||
class GreenSquare {
|
||||
actionID = "flag_simpleshape_greensquare";
|
||||
actionTitle = "Green Square";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greensquare_co.paa";
|
||||
};
|
||||
class GreenTriangle {
|
||||
actionID = "flag_simpleshape_greentriangle";
|
||||
actionTitle = "Green Triangle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_greentriangle_co.paa";
|
||||
};
|
||||
};
|
||||
class OrangeSquare {
|
||||
actionID = "flag_simpleshape_orangesquare";
|
||||
actionTitle = "Orange Square";
|
||||
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
||||
|
||||
class Orange {
|
||||
actionID = "flags_simpleshape_orange";
|
||||
actionTitle = "Orange";
|
||||
|
||||
class OrangeCircle {
|
||||
actionID = "flag_simpleshape_orangecircle";
|
||||
actionTitle = "Orange Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_orangecircle_co.paa";
|
||||
};
|
||||
class OrangeOctagon {
|
||||
actionID = "flag_simpleshape_orangeoctagon";
|
||||
actionTitle = "Orange Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_orangeoctagon_co.paa";
|
||||
};
|
||||
class OrangePentagon {
|
||||
actionID = "flag_simpleshape_orangepentagon";
|
||||
actionTitle = "Orange Pentagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_orangepentagon_co.paa";
|
||||
};
|
||||
class OrangeSquare {
|
||||
actionID = "flag_simpleshape_orangesquare";
|
||||
actionTitle = "Orange Square";
|
||||
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
||||
};
|
||||
class OrangeTriangle {
|
||||
actionID = "flag_simpleshape_orangetriangle";
|
||||
actionTitle = "Orange Triangle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_orangetriangle_co.paa";
|
||||
};
|
||||
};
|
||||
class PinkTriangle {
|
||||
actionID = "flag_simpleshape_pinktriangle";
|
||||
actionTitle = "Pink Triangle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
||||
|
||||
class Pink {
|
||||
actionID = "flags_simpleshape_pink";
|
||||
actionTitle = "Pink";
|
||||
|
||||
class PinkCircle {
|
||||
actionID = "flag_simpleshape_pinkcircle";
|
||||
actionTitle = "Pink Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_pinkcircle_co.paa";
|
||||
};
|
||||
class PinkOctagon {
|
||||
actionID = "flag_simpleshape_pinkoctagon";
|
||||
actionTitle = "Pink Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_pinkoctagon_co.paa";
|
||||
};
|
||||
class PinkPentagon {
|
||||
actionID = "flag_simpleshape_pinkpentagon";
|
||||
actionTitle = "Pink Pentagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_pinkpentagon_co.paa";
|
||||
};
|
||||
class PinkSquare {
|
||||
actionID = "flag_simpleshape_pinksquare";
|
||||
actionTitle = "Pink Square";
|
||||
texture = "textures\simple_shape\flag_simpleshape_pinksquare_co.paa";
|
||||
};
|
||||
class PinkTriangle {
|
||||
actionID = "flag_simpleshape_pinktriangle";
|
||||
actionTitle = "Pink Triangle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
||||
};
|
||||
};
|
||||
class RedPentagon {
|
||||
actionID = "flag_simpleshape_redpentagon";
|
||||
actionTitle = "Red Pentagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
||||
|
||||
class Red {
|
||||
actionID = "flags_simpleshape_red";
|
||||
actionTitle = "Red";
|
||||
|
||||
class RedCircle {
|
||||
actionID = "flag_simpleshape_redcircle";
|
||||
actionTitle = "Red Circle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_redcircle_co.paa";
|
||||
};
|
||||
class RedOctagon {
|
||||
actionID = "flag_simpleshape_redoctagon";
|
||||
actionTitle = "Red Octagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_redoctagon_co.paa";
|
||||
};
|
||||
class RedPentagon {
|
||||
actionID = "flag_simpleshape_redpentagon";
|
||||
actionTitle = "Red Pentagon";
|
||||
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
||||
};
|
||||
class RedSquare {
|
||||
actionID = "flag_simpleshape_redsquare";
|
||||
actionTitle = "Red Square";
|
||||
texture = "textures\simple_shape\flag_simpleshape_redsquare_co.paa";
|
||||
};
|
||||
class RedTriangle {
|
||||
actionID = "flag_simpleshape_redtriangle";
|
||||
actionTitle = "Red Triangle";
|
||||
texture = "textures\simple_shape\flag_simpleshape_redtriangle_co.paa";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -119,6 +248,11 @@ class VehicleFlags {
|
||||
actionTitle = "17th Emblem";
|
||||
texture = "textures\flags_misc\flag_17th_emblem_co.paa";
|
||||
};
|
||||
class WarlordEmblem {
|
||||
actionID = "flag_17th_warlord";
|
||||
actionTitle = "Warlord Emblem";
|
||||
texture = "textures\flags_misc\flag_17th_warlord_co.paa";
|
||||
};
|
||||
class RedCross {
|
||||
actionID = "flag_redcross";
|
||||
actionTitle = "Red Cross";
|
||||
|
||||
@@ -94,11 +94,10 @@ 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"
|
||||
#include "custom_sounds.hpp"
|
||||
};
|
||||
|
||||
class CfgLeaflets {
|
||||
|
||||
@@ -175,6 +175,8 @@ class DOUBLES(PREFIX,vehicleFlags) {
|
||||
class addFlagActions {};
|
||||
class draw3D {};
|
||||
class getActionsFlagCategories {};
|
||||
class compileFlagAction {};
|
||||
class compileFlagCategoryAction {};
|
||||
class getVehicleFlagsCfg {};
|
||||
class isClassExcluded {};
|
||||
};
|
||||
|
||||
@@ -15,7 +15,13 @@ addMissionEventHandler ["HandleChatMessage",
|
||||
{
|
||||
params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType"];
|
||||
|
||||
if ( missionNamespace getVariable ["milsim_globalChat", false] ) exitWith{ false };
|
||||
if ( missionNamespace getVariable ["milsim_sideChat", false] ) exitWith{ false };
|
||||
if ( missionNamespace getVariable ["milsim_commandChat", false] ) exitWith{ false };
|
||||
if ( missionNamespace getVariable ["milsim_groupChat", false] ) exitWith{ false };
|
||||
if ( missionNamespace getVariable ["milsim_vehicleChat", false] ) exitWith{ false };
|
||||
if ( missionNamespace getVariable ["milsim_directChat", false] ) exitWith{ false };
|
||||
|
||||
|
||||
if (_channel != 1) exitWith { false };
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ if ( !hasInterface ) exitWith {};
|
||||
if (not (local _unit)) exitWith {};
|
||||
|
||||
private _causeOfDeath = _unit getVariable ["ace_medical_causeOfDeath", "#scripted"];
|
||||
private _triageLevel = _unit call ace_medical_treatment_fnc_getTriageStatus;
|
||||
|
||||
if (_causeOfDeath != "respawn_button") exitWith {};
|
||||
private _timeWentUnconscious = _unit getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
||||
@@ -15,13 +16,13 @@ if ( !hasInterface ) exitWith {};
|
||||
if (_timeWentUnconscious isEqualTo -1) exitWith {};
|
||||
|
||||
_durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
||||
|
||||
[
|
||||
LEVEL_INFO,
|
||||
QUOTE(COMPONENT),
|
||||
"RESPAWNED WHILE UNCONSCIOUS",
|
||||
[_unit, [
|
||||
["durationSpentUnconscious", _durationSpentUnconscious]
|
||||
["durationSpentUnconscious", _durationSpentUnconscious],
|
||||
["triageLevel", _triageLevel#1]
|
||||
]] call EFUNC(common,addPlayerInfoToArray)
|
||||
] remoteExec [QEFUNC(common,log), 2];
|
||||
// format["%1 was unconscious then clicked the respawn button", name _unit] remoteExec["systemChat", 0];
|
||||
|
||||
@@ -1,15 +1,33 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
//---------------------
|
||||
// Global Chat
|
||||
//---------------------
|
||||
[
|
||||
QGVARMAIN(globalChat),
|
||||
"CHECKBOX",
|
||||
"Global Chat Text Enabled",
|
||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||
true, // default value
|
||||
true, // requires restart
|
||||
{
|
||||
params ["_value"];
|
||||
[
|
||||
QGVARMAIN(globalChat),
|
||||
_value
|
||||
] call EFUNC(common,logSettingChanged);
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
//---------------------
|
||||
// Side Chat
|
||||
//---------------------
|
||||
|
||||
[
|
||||
QGVARMAIN(sideChat),
|
||||
"CHECKBOX",
|
||||
"Side Chat Text Enabled",
|
||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||
false, // default value
|
||||
true, // default value
|
||||
true, // requires restart
|
||||
{
|
||||
params ["_value"];
|
||||
@@ -20,7 +38,92 @@
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
|
||||
//---------------------
|
||||
// Command Chat
|
||||
//---------------------
|
||||
[
|
||||
QGVARMAIN(commandChat),
|
||||
"CHECKBOX",
|
||||
"Command Chat Text Enabled",
|
||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||
true, // default value
|
||||
true, // requires restart
|
||||
{
|
||||
params ["_value"];
|
||||
[
|
||||
QGVARMAIN(commandChat),
|
||||
_value
|
||||
] call EFUNC(common,logSettingChanged);
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
//---------------------
|
||||
// Group Chat
|
||||
//---------------------
|
||||
[
|
||||
QGVARMAIN(groupChat),
|
||||
"CHECKBOX",
|
||||
"Group Chat Text Enabled",
|
||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||
true, // default value
|
||||
true, // requires restart
|
||||
{
|
||||
params ["_value"];
|
||||
[
|
||||
QGVARMAIN(groupChat),
|
||||
_value
|
||||
] call EFUNC(common,logSettingChanged);
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
|
||||
//---------------------
|
||||
// Vehicle Chat
|
||||
//---------------------
|
||||
[
|
||||
QGVARMAIN(vehicleChat),
|
||||
"CHECKBOX",
|
||||
"Vehicle Chat Text Enabled",
|
||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||
true, // default value
|
||||
true, // requires restart
|
||||
{
|
||||
params ["_value"];
|
||||
[
|
||||
QGVARMAIN(vehicleChat),
|
||||
_value
|
||||
] call EFUNC(common,logSettingChanged);
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
|
||||
//---------------------
|
||||
// Vehicle Chat
|
||||
//---------------------
|
||||
[
|
||||
QGVARMAIN(directChat),
|
||||
"CHECKBOX",
|
||||
"Direct Chat Text Enabled",
|
||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||
true, // default value
|
||||
true, // requires restart
|
||||
{
|
||||
params ["_value"];
|
||||
[
|
||||
QGVARMAIN(directChat),
|
||||
_value
|
||||
] call EFUNC(common,logSettingChanged);
|
||||
}
|
||||
] call CBA_fnc_addSetting;
|
||||
|
||||
|
||||
[QGVARMAIN(globalChat), false] call CBA_settings_fnc_set;
|
||||
[QGVARMAIN(sideChat), false] call CBA_settings_fnc_set;
|
||||
[QGVARMAIN(commandChat), false] call CBA_settings_fnc_set;
|
||||
[QGVARMAIN(groupChat), false] call CBA_settings_fnc_set;
|
||||
[QGVARMAIN(vehicleChat), false] call CBA_settings_fnc_set;
|
||||
[QGVARMAIN(directChat), false] call CBA_settings_fnc_set;
|
||||
|
||||
diag_log text "[MILSIM] (settings) Custom CBA settings initialized";
|
||||
|
||||
|
||||
@@ -27,17 +27,31 @@ addMissionEventHandler ["EntityKilled", {
|
||||
|
||||
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"];
|
||||
// }];
|
||||
|
||||
_unit addEventHandler ["Deleted", {
|
||||
params ["_entity"];
|
||||
_remainsCollector = _entity getVariable["milsim_garbage_collected", false];
|
||||
_decayTime = time - (_entity getVariable ["milsim_death_time", time]);
|
||||
|
||||
_i = allUsers select { (getUserInfo _x)#1 isEqualTo _ownerId;};
|
||||
_owner = if ( _i isEqualTo []) then [ { "server" }, { (getUserInfo (_i#0))#3 }];
|
||||
|
||||
diag_log format["isServer: %5, deleted object owned by: %1 via remainsCollector: %2 after %3 seconds of type: %4", _owner, str (not _remainsCollector), _decayTime, _entity, isServer];
|
||||
}];
|
||||
}];
|
||||
|
||||
|
||||
// add zeus deletion logging to curator objects
|
||||
{
|
||||
_x addEventHandler ["CuratorObjectDeleted", {
|
||||
params ["_curator", "_entity"];
|
||||
|
||||
_decayTime = time - (_entity getVariable ["milsim_death_time", time]);
|
||||
diag_log format["deleted object: %1 via curator: %2 after %3 seconds", _entity, name _curator, _decayTime];
|
||||
}];
|
||||
} foreach _curators;
|
||||
|
||||
// declare init complete to other modules
|
||||
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
||||
|
||||
|
||||
@@ -27,11 +27,11 @@ GVAR(deadUnitCleanupPFH) = [
|
||||
_dead = _dead select [0, _toDelete];
|
||||
{
|
||||
_unit = _x#1;
|
||||
// _unit setVariable ["milsim_garbage_collected", true];
|
||||
_unit setVariable ["milsim_garbage_collected", true];
|
||||
deleteVehicle (_unit);
|
||||
} foreach _dead;
|
||||
},
|
||||
180,
|
||||
450,
|
||||
[],
|
||||
{ // on creation
|
||||
[
|
||||
|
||||
@@ -14,7 +14,7 @@ localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []];
|
||||
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
||||
|
||||
// add actions to pilot classes, and don't apply to child classes
|
||||
[["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
||||
// [["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define MAJOR 4
|
||||
#define MINOR 1
|
||||
#define MINOR 2
|
||||
#define PATCHLVL 2
|
||||
#define BUILD 0
|
||||
|
||||
40
framework/vehicleFlags/functions/fn_compileFlagAction.sqf
Normal file
40
framework/vehicleFlags/functions/fn_compileFlagAction.sqf
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
params ["_target", "_player", "_params", "_flagOptionCfg"];
|
||||
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||
|
||||
private _flagOptionID = getText(_flagOptionCfg >> "actionID");
|
||||
private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle");
|
||||
private _flagOptionTexture = getText(_flagOptionCfg >> "texture");
|
||||
|
||||
// if the texture doesn't exist at the config path, skip this flag option
|
||||
if (not (fileExists _flagOptionTexture)) then {
|
||||
diag_log format ["WARN: Flag option texture not found: %1", _flagOptionTexture];
|
||||
continue
|
||||
};
|
||||
|
||||
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
|
||||
|
||||
private _newFlagOption = [
|
||||
|
||||
_rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id
|
||||
_flagOptionTitle, // displayed title
|
||||
_flagOptionTexture, // flag icon
|
||||
{
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_flagOptionTexture"];
|
||||
_target forceFlagTexture _flagOptionTexture;
|
||||
}, // statement
|
||||
{
|
||||
params ["_target", "_player", "_params"];
|
||||
alive _target;
|
||||
// true;
|
||||
}, // condition
|
||||
nil, // child code
|
||||
[_flagOptionTexture], // params
|
||||
nil, // position
|
||||
4, // distance
|
||||
[false, false, false, false, false] // other params
|
||||
] call ace_interact_menu_fnc_createAction;
|
||||
|
||||
_newFlagOption;
|
||||
@@ -0,0 +1,54 @@
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
||||
|
||||
params ["_rootActionID", "_flagCategoryCfg"];
|
||||
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
||||
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
||||
|
||||
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
||||
|
||||
private _flagCategoryAction = [
|
||||
_rootActionID + "_" + _flagCategoryActionID, // id
|
||||
_flagCategoryTitle, // displayed title
|
||||
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
||||
{true}, // statement
|
||||
{
|
||||
params ["_target", "_player", "_params"];
|
||||
alive _target;
|
||||
// true;
|
||||
}, // condition
|
||||
{
|
||||
// generate child code under category
|
||||
// this is the level where actual flag options will be displayed
|
||||
params ["_target", "_player", "_params"];
|
||||
// these params are passed from the parent action
|
||||
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||
|
||||
private _individualFlagActions = [];
|
||||
{ // forEach _flagSubclassesCfgs; // we'll generate flag options for each category
|
||||
private _flagOptionCfg = _x;
|
||||
|
||||
// generate flag option for this flag option
|
||||
private _newFlagOption = [
|
||||
_target,
|
||||
_player,
|
||||
_params,
|
||||
_flagOptionCfg
|
||||
] call FUNC(compileFlagAction);
|
||||
|
||||
// add flag option to category subactions
|
||||
_individualFlagActions pushBack [_newFlagOption, [], _target];
|
||||
} forEach _flagSubclassesCfgs;
|
||||
|
||||
// return the generated flag options to the category as child actions
|
||||
_individualFlagActions;
|
||||
}, // child code
|
||||
[_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params
|
||||
nil, // position
|
||||
4, // distance
|
||||
[false, false, false, false, false], // other params
|
||||
nil // modifier function code
|
||||
] call ace_interact_menu_fnc_createAction;
|
||||
|
||||
_flagCategoryAction;
|
||||
@@ -5,86 +5,25 @@
|
||||
0: STRING - Parent action ID
|
||||
1: ARRAY - Flag category configs
|
||||
*/
|
||||
#include "..\script_component.hpp"
|
||||
|
||||
params ["_rootActionID", "_flagCategoryCfgs"];
|
||||
|
||||
private _allCategoryActions = [];
|
||||
|
||||
{
|
||||
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
||||
|
||||
private _flagCategoryCfg = _x;
|
||||
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
||||
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
||||
|
||||
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
||||
|
||||
private _flagCategoryAction = [
|
||||
_rootActionID + "_" + _flagCategoryActionID, // id
|
||||
_flagCategoryTitle, // displayed title
|
||||
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
||||
{true}, // statement
|
||||
_flagCategoryActions = [];
|
||||
if (configName _x == "SimpleShapes") then {
|
||||
{
|
||||
params ["_target", "_player", "_params"];
|
||||
alive _target;
|
||||
// true;
|
||||
}, // condition
|
||||
{
|
||||
// generate child code under category
|
||||
// this is the level where actual flag options will be displayed
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"];
|
||||
|
||||
private _individualFlagActions = [];
|
||||
{ // forEach _flagSubclassesCfgs;
|
||||
private _flagOptionCfg = _x;
|
||||
private _flagOptionID = getText(_flagOptionCfg >> "actionID");
|
||||
private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle");
|
||||
private _flagOptionTexture = getText(_flagOptionCfg >> "texture");
|
||||
|
||||
// if the texture doesn't exist at the config path, skip this flag option
|
||||
if (not (fileExists _flagOptionTexture)) then {continue};
|
||||
|
||||
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
|
||||
|
||||
private _newFlagOption = [
|
||||
|
||||
_rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id
|
||||
_flagOptionTitle, // displayed title
|
||||
_flagOptionTexture, // flag icon
|
||||
{
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_flagOptionTexture"];
|
||||
_target forceFlagTexture _flagOptionTexture;
|
||||
}, // statement
|
||||
{
|
||||
params ["_target", "_player", "_params"];
|
||||
alive _target;
|
||||
// true;
|
||||
}, // condition
|
||||
nil, // child code
|
||||
[_flagOptionTexture], // params
|
||||
nil, // position
|
||||
4, // distance
|
||||
[false, false, false, false, false] // other params
|
||||
] call ace_interact_menu_fnc_createAction;
|
||||
|
||||
// add flag option to category subactions
|
||||
_individualFlagActions pushBack [_newFlagOption, [], _target];
|
||||
} forEach _flagSubclassesCfgs;
|
||||
|
||||
// return the generated flag options to the category as child actions
|
||||
_individualFlagActions;
|
||||
}, // child code
|
||||
[_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params
|
||||
nil, // position
|
||||
4, // distance
|
||||
[false, false, false, false, false], // other params
|
||||
nil // modifier function code
|
||||
] call ace_interact_menu_fnc_createAction;
|
||||
|
||||
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||
} forEach (_x call BIS_fnc_returnChildren);
|
||||
} else {
|
||||
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
||||
};
|
||||
// add category to all category actions array
|
||||
_allCategoryActions pushBack [_flagCategoryAction, [], _target];
|
||||
{
|
||||
_allCategoryActions pushBack [_x, [], _target];
|
||||
} forEach _flagCategoryActions;
|
||||
} forEach _flagCategoryCfgs;
|
||||
|
||||
_allCategoryActions;
|
||||
BIN
textures/flags_misc/flag_17th_warlord_co.paa
Normal file
BIN
textures/flags_misc/flag_17th_warlord_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_blueoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_blueoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluepentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluepentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluesquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluesquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_bluetriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_bluetriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greencircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greencircle_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greenpentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greenpentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greensquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greensquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_greentriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_greentriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangecircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangecircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangepentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangepentagon_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_orangetriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_orangetriangle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkcircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkcircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_pinksquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_pinksquare_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redcircle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redcircle_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redoctagon_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redoctagon_co.paa
Normal file
Binary file not shown.
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redsquare_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redsquare_co.paa
Normal file
Binary file not shown.
BIN
textures/simple_shape/flag_simpleshape_redtriangle_co.paa
Normal file
BIN
textures/simple_shape/flag_simpleshape_redtriangle_co.paa
Normal file
Binary file not shown.
Reference in New Issue
Block a user