Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
a2c3a5ab1c
|
|||
|
a4a8303e08
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,5 +2,3 @@
|
|||||||
# Notepad++ backups #
|
# Notepad++ backups #
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
|
||||||
.vscode/
|
|
||||||
|
|||||||
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.
66
CHANGELOG.md
66
CHANGELOG.md
@@ -4,72 +4,6 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [4.2.4] - 2025-11-09
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Campaign Callsigns
|
|
||||||
- Supply Crate contents
|
|
||||||
|
|
||||||
## [4.2.3] - 2025-05-24
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Warlord Vehicle Flag
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Campaign Callsigns
|
|
||||||
- Equipment Changes
|
|
||||||
- Supply Crate contents
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Update chat logic handler for new cba settings
|
|
||||||
|
|
||||||
## [4.2.2] - 2024-12-23
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- CBA settings to allow disabling of remaining text chat channels
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Log triage level on player respawn
|
|
||||||
- Campaign Callsigns
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Equipment typos
|
|
||||||
|
|
||||||
## [4.2.1] - 2024-06-23
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Allowed Equipment Definition typo
|
|
||||||
|
|
||||||
## [4.2.0] - 2024-06-20
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Custom remainsCollector script to replace and supplement the built in arma remainsCollector function
|
|
||||||
- New Resupply Boxes
|
|
||||||
- Ability to spawn spare tires and tracks at the arsenal and via Zeus module
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- Split vehicle flags into colors and shapes for additional options
|
|
||||||
- Battalion Callsigns
|
|
||||||
- Allowed Equipment Definitions
|
|
||||||
- Resupply Box Contents
|
|
||||||
- Fixed incorrect ace carry variable setting
|
|
||||||
|
|
||||||
### Removed
|
|
||||||
|
|
||||||
- SMA mod references
|
|
||||||
- Extraneous server performance calculation broadcast to all clients
|
|
||||||
- Ability for pilots to check re-insertion queue
|
|
||||||
|
|
||||||
## [4.1.2] - 2024-04-25
|
## [4.1.2] - 2024-04-25
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
|
|
||||||
// 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,74 +1,22 @@
|
|||||||
// Lists approved fixed-wing and rotary vehicle types that mission makers can use in their missions.
|
// Lists approved fixed-wing and rotary vehicle types that mission makers can use in their missions.
|
||||||
|
|
||||||
class ApprovedAssets {
|
class ApprovedAssets {
|
||||||
// APC
|
// Fixed-wing aircraft
|
||||||
class rhsusf_stryker_m1126_m2_d {callsign = "Katana"; category = "APC";};
|
class USAF_A10 {callsign = "Ares";};
|
||||||
class rhsusf_stryker_m1126_mk19_d {callsign = "Katana"; category = "APC";};
|
class RHSGREF_A29B_HIDF {callsign = "Odyssey";};
|
||||||
class rhsusf_stryker_m1127_m2_wd {callsign = "Katana"; category = "APC";};
|
class USAF_C130J {callsign = "Hercules";};
|
||||||
class rhsusf_stryker_m1132_m2_wd {callsign = "Katana"; category = "APC";};
|
// Rotary aircraft
|
||||||
class rhsusf_stryker_m1134_wd {callsign = "Katana"; category = "APC";};
|
class RHS_MELB_MH6M {callsign = "Apollo";};
|
||||||
class B_APC_Wheeled_01_cannon_F {callsign = "Rapier"; category = "APC";};
|
class RHS_MELB_AH6M {callsign = "Artemis";};
|
||||||
class B_APC_Tracked_01_CRV_F {callsign = "DuctTape"; category = "APC";};
|
class RHS_MELB_H6M {callsign = "Icarus";};
|
||||||
// Rotary
|
class RHS_CH_47F {callsign = "Achilles";};
|
||||||
class TF373_SOAR_MH47G_No_Rear_Guns {callsign = "Achilles"; category = "Rotary";};
|
class ej_MH60MDAP4 {callsign = "Hades";};
|
||||||
class TF373_SOAR_MH47G_No_Rear_Guns_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
class RHS_UH60M {callsign = "Griffin";};
|
||||||
class TF373_SOAR_MH47G {callsign = "Achilles"; category = "Rotary";};
|
class RHS_UH60M_MEV2 {callsign = "Dustoff";};
|
||||||
class TF373_SOAR_MH47G_EasyActions {callsign = "Achilles"; category = "Rotary";};
|
class B_T_VTOL_01_INFANTRY_F {callsign = "Pegasus";};
|
||||||
class RHS_CH_47F_10 {callsign = "Achilles"; category = "Rotary";};
|
class B_T_VTOL_01_ARMED_F {callsign = "Spartan";};
|
||||||
class RHS_MELB_AH6M {callsign = "Artemis"; category = "Rotary";};
|
class RHS_AH64D {callsign = "Orion";};
|
||||||
class RHS_MELB_MH6M {callsign = "Apollo"; category = "Rotary";};
|
class RHS_AH1Z {callsign = "Athena";};
|
||||||
class RHS_MELB_H6M {callsign = "Icarus"; category = "Rotary";};
|
class RHS_UH1Y {callsign = "Homer";};
|
||||||
class RHS_UH60M {callsign = "Griffin"; category = "Rotary";};
|
class rhsusf_CH53E_USMC {callsign = "Atlas";};
|
||||||
class RHS_UH60M2 {callsign = "Griffin"; category = "Rotary";};
|
|
||||||
class RHS_UH60M_MEV {callsign = "Dustoff"; category = "Rotary";};
|
|
||||||
class ej_MH60MDAP {callsign = "Hades"; category = "Rotary";};
|
|
||||||
class ej_MH60MDAP16H {callsign = "Hades"; category = "Rotary";};
|
|
||||||
class ej_MH60MDAP8H {callsign = "Hades"; category = "Rotary";};
|
|
||||||
class ej_MH60MDAP4 {callsign = "Hades"; category = "Rotary";};
|
|
||||||
class RHS_AH64DGrey {callsign = "Orion"; category = "Rotary";};
|
|
||||||
// Air
|
|
||||||
// Truck
|
|
||||||
class rhsusf_M1078A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";};
|
|
||||||
class rhsusf_M1084A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";};
|
|
||||||
class rhsusf_M1078A1P2_B_WD_CP_fmtv_usarmy {callsign = ""; category = "Truck";};
|
|
||||||
// Boats
|
|
||||||
class rhsusf_mkvsoc {callsign = "Poseidon"; category = "Boats";};
|
|
||||||
class B_Boat_Armed_01_minigun_F {callsign = "Neptune"; category = "Boats";};
|
|
||||||
// MRAP
|
|
||||||
class rhsusf_M1238A1_M2_socom_d {callsign = "Tanto"; category = "MRAP";};
|
|
||||||
class rhsusf_M1238A1_Mk19_socom_d {callsign = "Tanto"; category = "MRAP";};
|
|
||||||
class rhsusf_M1239_M2_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
|
||||||
class rhsusf_M1239_MK19_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
|
||||||
class rhsusf_m1245_m2crows_socom_d {callsign = "Dagger"; category = "MRAP";};
|
|
||||||
class rhsusf_m1245_mk19crows_socom_d {callsign = "Dagger"; category = "MRAP";};
|
|
||||||
class rhsusf_M1239_M2_Deploy_socom_d {callsign = "DuctTape"; category = "MRAP";};
|
|
||||||
// TiltRotor
|
|
||||||
class B_T_VTOL_01_infantry_F {callsign = "Pegasus"; category = "TiltRotor";};
|
|
||||||
class B_T_VTOL_01_armed_F {callsign = "Chimera"; category = "TiltRotor";};
|
|
||||||
// Water
|
|
||||||
// Ground Vehicle
|
|
||||||
// Cars
|
|
||||||
class rhsusf_m1165a1_gmv_m134d_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
|
||||||
class rhsusf_m1165a1_gmv_m2_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
|
||||||
class rhsusf_m1165a1_gmv_mk19_m240_socom_d {callsign = "Dagger"; category = "Cars";};
|
|
||||||
class rhsusf_mrzr4_d {callsign = ""; category = "Cars";};
|
|
||||||
class UK3CB_B_M1030_NATO {callsign = ""; category = "Cars";};
|
|
||||||
class B_T_LSV_01_AT_F {callsign = ""; category = "Cars";};
|
|
||||||
class B_T_LSV_01_armed_F {callsign = ""; category = "Cars";};
|
|
||||||
class C_Quadbike_01_F {callsign = ""; category = "Cars";};
|
|
||||||
// Fixed-Wing
|
|
||||||
class B_Plane_CAS_01_dynamicLoadout_F {callsign = "Ares"; category = "Fixed-Wing";};
|
|
||||||
class RHS_A10 {callsign = "Ares"; category = "Fixed-Wing";};
|
|
||||||
class USAF_AC130U {callsign = "Odin"; category = "Fixed-Wing";};
|
|
||||||
class USAF_C130J {callsign = "Hercules"; category = "Fixed-Wing";};
|
|
||||||
class B_Plane_Fighter_01_F {callsign = "Xerxes"; category = "Fixed-Wing";};
|
|
||||||
// Artillery
|
|
||||||
class rhsusf_M142_usarmy_WD {callsign = "Halberd"; category = "Artillery";};
|
|
||||||
class UK3CB_B_M270_MLRS_HE_DES {callsign = "Halberd"; category = "Artillery";};
|
|
||||||
class rhsusf_m109d_usarmy {callsign = "Glaive"; category = "Artillery";};
|
|
||||||
class RHS_M119_D {callsign = "Mailman"; category = "Artillery";};
|
|
||||||
class B_Mortar_01_F {callsign = "Hammer"; category = "Artillery";};
|
|
||||||
// Armor
|
|
||||||
class B_AFV_Wheeled_01_cannon_F {callsign = "Gladius"; category = "Armor";};
|
|
||||||
class B_AFV_Wheeled_01_up_cannon_F {callsign = "Gladius"; category = "Armor";};
|
|
||||||
};
|
};
|
||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
|
|
||||||
// Define the callsigns for the Battalion
|
// Define the callsigns for the Battalion
|
||||||
#define COMMAND_CALLSIGN ONI
|
#define COMMAND_CALLSIGN SPARTAN
|
||||||
//#define RRC_CALLSIGN TIGER
|
#define RRC_CALLSIGN TIGER
|
||||||
//#define MEDIC_CALLSIGN LIFELINE
|
#define MEDIC_CALLSIGN LIFELINE
|
||||||
#define ALPHA_CALLSIGN GLACIER
|
#define ALPHA_CALLSIGN ROGUE
|
||||||
#define ECHO_CALLSIGN WARLORD
|
#define ECHO_CALLSIGN FIREBRAND
|
||||||
#define WPN_CALLSIGN BLACKFOOT
|
#define WPN_CALLSIGN BLACKFOOT
|
||||||
|
|
||||||
// Define the frequencies for the Battalion
|
// Define the frequencies for the Battalion
|
||||||
@@ -73,26 +73,26 @@ class BattalionInfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// class RRC { // WIP
|
class RRC { // WIP
|
||||||
// callsign = RRC_CALLSIGN;
|
callsign = RRC_CALLSIGN;
|
||||||
// shortDescription = "RRC";
|
shortDescription = "RRC";
|
||||||
// textColor = LVL2_TEXT_COLOR;
|
textColor = LVL2_TEXT_COLOR;
|
||||||
// frequencies[] = {
|
frequencies[] = {
|
||||||
// {"Contact", {}, {FREQ_BATTALION}},
|
{"Contact", {}, {FREQ_BATTALION}},
|
||||||
// {"Actual", {}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_CAS}}
|
{"Actual", {}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_CAS}}
|
||||||
// };
|
};
|
||||||
// };
|
};
|
||||||
|
|
||||||
// class BattalionMedical { // WIP
|
class BattalionMedical { // WIP
|
||||||
// callsign = MEDIC_CALLSIGN;
|
callsign = MEDIC_CALLSIGN;
|
||||||
// shortDescription = "Battalion Medical";
|
shortDescription = "Battalion Medical";
|
||||||
// textColor = LVL2_TEXT_COLOR;
|
textColor = LVL2_TEXT_COLOR;
|
||||||
// frequencies[] = {
|
frequencies[] = {
|
||||||
// {"Contact", {FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION}},
|
{"Contact", {FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION}},
|
||||||
// {"Actual", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_LOGISTICS}},
|
{"Actual", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {FREQ_BATTALION, FREQ_ECHO_FLIGHT_LOGISTICS}},
|
||||||
// {"General", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {}}
|
{"General", {FREQ_BATTALION_MEDICAL_INTERCOM, FREQ_ALL_MEDICAL_SR}, {}}
|
||||||
// };
|
};
|
||||||
// };
|
};
|
||||||
|
|
||||||
class WeaponsSquad { // WIP
|
class WeaponsSquad { // WIP
|
||||||
callsign = WPN_CALLSIGN;
|
callsign = WPN_CALLSIGN;
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ class DisallowedEquipment {
|
|||||||
label = "BLACKLISTED WEAPON OR ITEM";
|
label = "BLACKLISTED WEAPON OR ITEM";
|
||||||
description = "Items that NO member is allowed to use.";
|
description = "Items that NO member is allowed to use.";
|
||||||
items[] = {
|
items[] = {
|
||||||
//"17BN_ANPVS14", // NVG AN/PVS-14
|
"17BN_ANPVS14", // NVG AN/PVS-14
|
||||||
//"ej_PVS15D", // NVG AN/PVS-15
|
"ej_PVS15D", // NVG AN/PVS-15
|
||||||
//"ej_PVS15", // NVG AN/PVS-15
|
"ej_PVS15", // NVG AN/PVS-15
|
||||||
"LMG_Mk200_black_F", //Mk200 Series
|
"LMG_Mk200_black_F", //Mk200 Series
|
||||||
"LMG_Mk200_F", //Mk200 Series
|
"LMG_Mk200_F", //Mk200 Series
|
||||||
"rhs_weap_g36c", // G36 Series
|
"rhs_weap_g36c", // G36 Series
|
||||||
@@ -95,8 +95,8 @@ class DisallowedEquipment {
|
|||||||
"UK3CB_M14DMR_Railed_BLK", // M14 Series
|
"UK3CB_M14DMR_Railed_BLK", // M14 Series
|
||||||
"UK3CB_M14DMR_Railed", // M14 Series
|
"UK3CB_M14DMR_Railed", // M14 Series
|
||||||
"UK3CB_M14DMR", // M14 Series
|
"UK3CB_M14DMR", // M14 Series
|
||||||
//"USP_PVS_14", // NVG AN/PVS-14
|
"USP_PVS_14", // NVG AN/PVS-14
|
||||||
//"USP_PVS_15" // NVG AN/PVS-15
|
"USP_PVS_15" // NVG AN/PVS-15
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -140,15 +140,12 @@ class DisallowedEquipment {
|
|||||||
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_Geissele_Docter_Black", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Black", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_Geissele_Docter_Desert_Vanilla", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Desert_Vanilla", //Nightforce Series Optic
|
||||||
"Tier1_ATACR18_Geissele_Docter_Desert", //Nightforce Series Optic
|
"Tier1_ATACR18_Geissele_Docter_Desert" //Nightforce Series Optic
|
||||||
"sps_black_hornet_01_Static_F", // Black Hornet Drone Mod
|
|
||||||
"MRH_TacticalDisplay", //MRH Satellite Display Tablet
|
|
||||||
"MRH_FoldedSatcomAntenna" //MRH Satellite Satcom
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class tabbedItems { // Items that are allowed for individuals with Ranger Tab
|
class tabbedItems { // Items that are allowed for individuals with Ranger Tab
|
||||||
label = "TABBED ITEM";
|
label = "TABBED WEAPON";
|
||||||
description = "Items that are allowed for individuals with Ranger Tab.";
|
description = "Items that are allowed for individuals with Ranger Tab.";
|
||||||
items[] = {
|
items[] = {
|
||||||
"optic_tws", // Thermal Optic
|
"optic_tws", // Thermal Optic
|
||||||
@@ -283,22 +280,7 @@ class DisallowedEquipment {
|
|||||||
"rhs_weap_m16a4_grip_acog_usmc", //M16 Series
|
"rhs_weap_m16a4_grip_acog_usmc", //M16 Series
|
||||||
"rhs_weap_m16a4_grip_acog2_usmc", //M16 Series
|
"rhs_weap_m16a4_grip_acog2_usmc", //M16 Series
|
||||||
"rhs_weap_m32", //M32/MGL Series
|
"rhs_weap_m32", //M32/MGL Series
|
||||||
"rhs_weap_m32_usmc", //M32/MGL Series
|
"rhs_weap_m32_usmc" //M32/MGL Series
|
||||||
"G3_Multicam_Tee_WARLORD", //Tabbed T-Shirt
|
|
||||||
"G3_M81_Tee_WARLORD", //Tabbed T-Shirt
|
|
||||||
"G3_TGR_Tee_WARLORD", //Tabbed T-Shirt
|
|
||||||
"G3_Multicam_Tee_BLK", //Tabbed T-Shirt
|
|
||||||
"G3_M81_Tee_BLK", //Tabbed T-Shirt
|
|
||||||
"G3_TGR_Tee_BLK", //Tabbed T-Shirt
|
|
||||||
"G3_Multicam_Tee_Tan", //Tabbed T-Shirt
|
|
||||||
"G3_M81_Tee_Tan", //Tabbed T-Shirt
|
|
||||||
"G3_TGR_Tee_Tan", //Tabbed T-Shirt
|
|
||||||
"G3_Multicam_Tee_Gray", //Tabbed T-Shirt
|
|
||||||
"G3_M81_Tee_Gray", //Tabbed T-Shirt
|
|
||||||
"G3_TGR_Tee_Gray", //Tabbed T-Shirt
|
|
||||||
"G3_Multicam_Tee_Green", //Tabbed T-Shirt
|
|
||||||
"G3_M81_Tee_Green", //Tabbed T-Shirt
|
|
||||||
"G3_TGR_Tee_Green" //Tabbed T-Shirt
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ class SupplyCrates {
|
|||||||
weapons[] = {
|
weapons[] = {
|
||||||
{"rhs_weap_M136",4},
|
{"rhs_weap_M136",4},
|
||||||
{"rhs_weap_M136_hp",4},
|
{"rhs_weap_M136_hp",4},
|
||||||
//{"rhs_weap_m72a7",2}
|
{"rhs_weap_m72a7",2}
|
||||||
{"JPSP_weap_m72ecmk1",2}
|
|
||||||
};
|
};
|
||||||
magazines[] = {
|
magazines[] = {
|
||||||
{"1Rnd_SmokePurple_Grenade_shell",12},
|
{"1Rnd_SmokePurple_Grenade_shell",12},
|
||||||
@@ -21,8 +20,7 @@ class SupplyCrates {
|
|||||||
{"ACE_40mm_Flare_ir",12},
|
{"ACE_40mm_Flare_ir",12},
|
||||||
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
{"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25},
|
||||||
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
{"rhsusf_20Rnd_762x51_m993_Mag",25},
|
||||||
{"SmokeShell",24},
|
{"SmokeShell",12},
|
||||||
{"ACE_M84",24},
|
|
||||||
{"rhs_mag_m67",24},
|
{"rhs_mag_m67",24},
|
||||||
{"1Rnd_Smoke_Grenade_shell",24},
|
{"1Rnd_Smoke_Grenade_shell",24},
|
||||||
{"1Rnd_SmokeRed_Grenade_shell",24},
|
{"1Rnd_SmokeRed_Grenade_shell",24},
|
||||||
@@ -30,16 +28,17 @@ class SupplyCrates {
|
|||||||
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
||||||
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",75},
|
{"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},
|
{"Tier1_250Rnd_762x51_Belt_M993_AP",15},
|
||||||
{"ACE_20Rnd_762x51_Mag_Tracer",25},
|
{"ACE_20Rnd_762x51_Mag_Tracer",25},
|
||||||
{"ACE_20Rnd_762x51_M993_AP_Mag",25},
|
{"ACE_20Rnd_762x51_M993_AP_Mag",25},
|
||||||
{"rhsusf_20Rnd_762x51_SR25_m993_Mag",25},
|
{"rhsusf_20Rnd_762x51_SR25_m993_Mag",25},
|
||||||
{"Tier1_20Rnd_762x51_M993_SR25_Mag",25},
|
{"Tier1_20Rnd_762x51_M993_SR25_Mag",25},
|
||||||
{"KAR_20Rnd_Fury_blk",25},
|
{"DemoCharge_Remote_Mag",16}
|
||||||
{"rhsusf_m112_mag",25},
|
|
||||||
{"JCA_20Rnd_762x51_PMAG",25},
|
|
||||||
{"JCA_20Rnd_762x51_Tracer_Red_PMAG",25},
|
|
||||||
{"KAR_100Rnd_Fury_blk",25},
|
|
||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
@@ -62,8 +61,7 @@ class SupplyCrates {
|
|||||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",50},
|
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",50},
|
||||||
{"Titan_AA",10},
|
{"Titan_AA",10},
|
||||||
{"Titan_AT",10},
|
{"Titan_AT",10},
|
||||||
{"200Rnd_65x39_cased_Box_Tracer_Red",50},
|
{"200Rnd_65x39_cased_Box_Tracer_Red",50}
|
||||||
{"KAR_100Rnd_Fury_RT_blk",50}
|
|
||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
@@ -84,7 +82,6 @@ class SupplyCrates {
|
|||||||
{"ACE_splint",48},
|
{"ACE_splint",48},
|
||||||
{"ACE_morphine",50},
|
{"ACE_morphine",50},
|
||||||
{"ACE_epinephrine",50},
|
{"ACE_epinephrine",50},
|
||||||
{"ACE_painkillers",20},
|
|
||||||
{"ACE_bloodIV",75},
|
{"ACE_bloodIV",75},
|
||||||
{"ACE_bloodIV_500",50},
|
{"ACE_bloodIV_500",50},
|
||||||
{"ACE_bloodIV_250",25},
|
{"ACE_bloodIV_250",25},
|
||||||
@@ -135,42 +132,6 @@ class SupplyCrates {
|
|||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
class SquadUtility {
|
|
||||||
boxClass = "Box_Syndicate_Ammo_F";
|
|
||||||
displayName = "Squad Utility Supply Crate";
|
|
||||||
tooltip = "A crate containing Flairs, Smokes, Breaching Charges";
|
|
||||||
icon = "\A3\ui_f\data\map\vehicleicons\iconCrateAmmo_ca.paa";
|
|
||||||
|
|
||||||
backpacks[] = {};
|
|
||||||
weapons[] = {};
|
|
||||||
magazines[] = {};
|
|
||||||
items[] = {
|
|
||||||
{"ACE_Chemlight_HiYellow",20},
|
|
||||||
{"ACE_Chemlight_HiBlue",20},
|
|
||||||
{"ACE_Chemlight_HiGreen",20},
|
|
||||||
{"ACE_Chemlight_HiRed",20},
|
|
||||||
{"ACE_Chemlight_UltraHiOrange",20},
|
|
||||||
{"ACE_HandFlare_Yellow",20},
|
|
||||||
{"ACE_HandFlare_White",20},
|
|
||||||
{"ACE_HandFlare_Red",20},
|
|
||||||
{"ACE_HandFlare_Green",20},
|
|
||||||
{"ACE_Chemlight_IR",20},
|
|
||||||
{"ACE_IR_Strobe_Item",20},
|
|
||||||
{"SmokeShellYellow",20},
|
|
||||||
{"SmokeShellBlue",20},
|
|
||||||
{"SmokeShellPurple",20},
|
|
||||||
{"SmokeShellOrange",20},
|
|
||||||
{"SmokeShellGreen",20},
|
|
||||||
{"SmokeShellRed",20},
|
|
||||||
{"tsp_popperCharge_auto_mag",10},
|
|
||||||
{"tsp_frameCharge_mag",20},
|
|
||||||
{"tsp_stickCharge_auto_mag",10},
|
|
||||||
{"ACE_CableTie",25},
|
|
||||||
{"DemoCharge_Remote_Mag",15},
|
|
||||||
{"TFAR_anprc152",3},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class MortarMk6Resupply {
|
class MortarMk6Resupply {
|
||||||
boxClass = "Box_NATO_WpsSpecial_F";
|
boxClass = "Box_NATO_WpsSpecial_F";
|
||||||
displayName = "Mortar MK6 Supply Crate";
|
displayName = "Mortar MK6 Supply Crate";
|
||||||
@@ -215,28 +176,4 @@ class SupplyCrates {
|
|||||||
};
|
};
|
||||||
items[] = {};
|
items[] = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
class ResupplyTire {
|
|
||||||
boxClass = "ACE_Wheel";
|
|
||||||
displayName = "Vehicle Tire";
|
|
||||||
tooltip = "A single tire for replacement";
|
|
||||||
icon = "A3\ui_f\data\igui\cfg\simpletasks\types\repair_ca.paa";
|
|
||||||
|
|
||||||
backpacks[] = {};
|
|
||||||
weapons[] = {};
|
|
||||||
magazines[] = {};
|
|
||||||
items[] = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
class ResupplyTrack {
|
|
||||||
boxClass = "ACE_Track";
|
|
||||||
displayName = "Vehicle Track";
|
|
||||||
tooltip = "A single track for replacement";
|
|
||||||
icon = "z\ace\addons\repair\ui\patch_ca.paa";
|
|
||||||
|
|
||||||
backpacks[] = {};
|
|
||||||
weapons[] = {};
|
|
||||||
magazines[] = {};
|
|
||||||
items[] = {};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
@@ -84,160 +84,31 @@ class VehicleFlags {
|
|||||||
actionID = "flag_simpleshape";
|
actionID = "flag_simpleshape";
|
||||||
actionTitle = "Simple Shapes";
|
actionTitle = "Simple Shapes";
|
||||||
|
|
||||||
class Blue {
|
|
||||||
actionID = "flags_simpleshape_blue";
|
|
||||||
actionTitle = "Blue";
|
|
||||||
|
|
||||||
class BlueCircle {
|
|
||||||
actionID = "flag_simpleshape_bluecircle";
|
|
||||||
actionTitle = "Blue Circle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
|
||||||
};
|
|
||||||
class BlueOctagon {
|
|
||||||
actionID = "flag_simpleshape_blueoctagon";
|
|
||||||
actionTitle = "Blue Octagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_blueoctagon_co.paa";
|
|
||||||
};
|
|
||||||
class BluePentagon {
|
|
||||||
actionID = "flag_simpleshape_bluepentagon";
|
|
||||||
actionTitle = "Blue Pentagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_bluepentagon_co.paa";
|
|
||||||
};
|
|
||||||
class BlueSquare {
|
|
||||||
actionID = "flag_simpleshape_bluesquare";
|
|
||||||
actionTitle = "Blue Square";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_bluesquare_co.paa";
|
|
||||||
};
|
|
||||||
class BlueTriangle {
|
|
||||||
actionID = "flag_simpleshape_bluetriangle";
|
|
||||||
actionTitle = "Blue Triangle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_bluetriangle_co.paa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class Green {
|
|
||||||
actionID = "flags_simpleshape_green";
|
|
||||||
actionTitle = "Green";
|
|
||||||
|
|
||||||
class GreenCircle {
|
|
||||||
actionID = "flag_simpleshape_greencircle";
|
|
||||||
actionTitle = "Green Circle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greencircle_co.paa";
|
|
||||||
};
|
|
||||||
class GreenOctagon {
|
class GreenOctagon {
|
||||||
actionID = "flag_simpleshape_greenoctagon";
|
actionID = "flag_simpleshape_greenoctagon";
|
||||||
actionTitle = "Green Octagon";
|
actionTitle = "Green Octagon";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa";
|
||||||
};
|
};
|
||||||
class GreenPentagon {
|
class BlueCircle {
|
||||||
actionID = "flag_simpleshape_greenpentagon";
|
actionID = "flag_simpleshape_bluecircle";
|
||||||
actionTitle = "Green Pentagon";
|
actionTitle = "Blue Circle";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greenpentagon_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa";
|
||||||
};
|
|
||||||
class GreenSquare {
|
|
||||||
actionID = "flag_simpleshape_greensquare";
|
|
||||||
actionTitle = "Green Square";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greensquare_co.paa";
|
|
||||||
};
|
|
||||||
class GreenTriangle {
|
|
||||||
actionID = "flag_simpleshape_greentriangle";
|
|
||||||
actionTitle = "Green Triangle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_greentriangle_co.paa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class Orange {
|
|
||||||
actionID = "flags_simpleshape_orange";
|
|
||||||
actionTitle = "Orange";
|
|
||||||
|
|
||||||
class OrangeCircle {
|
|
||||||
actionID = "flag_simpleshape_orangecircle";
|
|
||||||
actionTitle = "Orange Circle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangecircle_co.paa";
|
|
||||||
};
|
|
||||||
class OrangeOctagon {
|
|
||||||
actionID = "flag_simpleshape_orangeoctagon";
|
|
||||||
actionTitle = "Orange Octagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangeoctagon_co.paa";
|
|
||||||
};
|
|
||||||
class OrangePentagon {
|
|
||||||
actionID = "flag_simpleshape_orangepentagon";
|
|
||||||
actionTitle = "Orange Pentagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangepentagon_co.paa";
|
|
||||||
};
|
};
|
||||||
class OrangeSquare {
|
class OrangeSquare {
|
||||||
actionID = "flag_simpleshape_orangesquare";
|
actionID = "flag_simpleshape_orangesquare";
|
||||||
actionTitle = "Orange Square";
|
actionTitle = "Orange Square";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa";
|
||||||
};
|
};
|
||||||
class OrangeTriangle {
|
|
||||||
actionID = "flag_simpleshape_orangetriangle";
|
|
||||||
actionTitle = "Orange Triangle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_orangetriangle_co.paa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class Pink {
|
|
||||||
actionID = "flags_simpleshape_pink";
|
|
||||||
actionTitle = "Pink";
|
|
||||||
|
|
||||||
class PinkCircle {
|
|
||||||
actionID = "flag_simpleshape_pinkcircle";
|
|
||||||
actionTitle = "Pink Circle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinkcircle_co.paa";
|
|
||||||
};
|
|
||||||
class PinkOctagon {
|
|
||||||
actionID = "flag_simpleshape_pinkoctagon";
|
|
||||||
actionTitle = "Pink Octagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinkoctagon_co.paa";
|
|
||||||
};
|
|
||||||
class PinkPentagon {
|
|
||||||
actionID = "flag_simpleshape_pinkpentagon";
|
|
||||||
actionTitle = "Pink Pentagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinkpentagon_co.paa";
|
|
||||||
};
|
|
||||||
class PinkSquare {
|
|
||||||
actionID = "flag_simpleshape_pinksquare";
|
|
||||||
actionTitle = "Pink Square";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinksquare_co.paa";
|
|
||||||
};
|
|
||||||
class PinkTriangle {
|
class PinkTriangle {
|
||||||
actionID = "flag_simpleshape_pinktriangle";
|
actionID = "flag_simpleshape_pinktriangle";
|
||||||
actionTitle = "Pink Triangle";
|
actionTitle = "Pink Triangle";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa";
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
class Red {
|
|
||||||
actionID = "flags_simpleshape_red";
|
|
||||||
actionTitle = "Red";
|
|
||||||
|
|
||||||
class RedCircle {
|
|
||||||
actionID = "flag_simpleshape_redcircle";
|
|
||||||
actionTitle = "Red Circle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redcircle_co.paa";
|
|
||||||
};
|
|
||||||
class RedOctagon {
|
|
||||||
actionID = "flag_simpleshape_redoctagon";
|
|
||||||
actionTitle = "Red Octagon";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redoctagon_co.paa";
|
|
||||||
};
|
|
||||||
class RedPentagon {
|
class RedPentagon {
|
||||||
actionID = "flag_simpleshape_redpentagon";
|
actionID = "flag_simpleshape_redpentagon";
|
||||||
actionTitle = "Red Pentagon";
|
actionTitle = "Red Pentagon";
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa";
|
||||||
};
|
};
|
||||||
class RedSquare {
|
|
||||||
actionID = "flag_simpleshape_redsquare";
|
|
||||||
actionTitle = "Red Square";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redsquare_co.paa";
|
|
||||||
};
|
|
||||||
class RedTriangle {
|
|
||||||
actionID = "flag_simpleshape_redtriangle";
|
|
||||||
actionTitle = "Red Triangle";
|
|
||||||
texture = "textures\simple_shape\flag_simpleshape_redtriangle_co.paa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Miscellaneous {
|
class Miscellaneous {
|
||||||
@@ -248,11 +119,6 @@ class VehicleFlags {
|
|||||||
actionTitle = "17th Emblem";
|
actionTitle = "17th Emblem";
|
||||||
texture = "textures\flags_misc\flag_17th_emblem_co.paa";
|
texture = "textures\flags_misc\flag_17th_emblem_co.paa";
|
||||||
};
|
};
|
||||||
class WarlordEmblem {
|
|
||||||
actionID = "flag_17th_warlord";
|
|
||||||
actionTitle = "Warlord Emblem";
|
|
||||||
texture = "textures\flags_misc\flag_17th_warlord_co.paa";
|
|
||||||
};
|
|
||||||
class RedCross {
|
class RedCross {
|
||||||
actionID = "flag_redcross";
|
actionID = "flag_redcross";
|
||||||
actionTitle = "Red Cross";
|
actionTitle = "Red Cross";
|
||||||
|
|||||||
@@ -94,10 +94,11 @@ class Params {};
|
|||||||
class CfgFunctions {
|
class CfgFunctions {
|
||||||
#include "framework\CfgFunctions.hpp"
|
#include "framework\CfgFunctions.hpp"
|
||||||
#include "custom_scripts.hpp"
|
#include "custom_scripts.hpp"
|
||||||
|
#include "AJ_CBRN_V2\CfgFunctions.hpp"
|
||||||
};
|
};
|
||||||
|
|
||||||
class CfgSounds {
|
class CfgSounds {
|
||||||
#include "custom_sounds.hpp"
|
#include "AJ_CBRN_V2\CfgSounds.hpp"
|
||||||
};
|
};
|
||||||
|
|
||||||
class CfgLeaflets {
|
class CfgLeaflets {
|
||||||
|
|||||||
@@ -175,8 +175,6 @@ class DOUBLES(PREFIX,vehicleFlags) {
|
|||||||
class addFlagActions {};
|
class addFlagActions {};
|
||||||
class draw3D {};
|
class draw3D {};
|
||||||
class getActionsFlagCategories {};
|
class getActionsFlagCategories {};
|
||||||
class compileFlagAction {};
|
|
||||||
class compileFlagCategoryAction {};
|
|
||||||
class getVehicleFlagsCfg {};
|
class getVehicleFlagsCfg {};
|
||||||
class isClassExcluded {};
|
class isClassExcluded {};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,17 +15,14 @@ addMissionEventHandler ["HandleChatMessage",
|
|||||||
{
|
{
|
||||||
params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType"];
|
params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType"];
|
||||||
|
|
||||||
|
if ( missionNamespace getVariable ["milsim_sideChat", false] ) exitWith{ false };
|
||||||
|
|
||||||
|
if (_channel != 1) exitWith { false };
|
||||||
|
|
||||||
if ( ( admin _owner ) != 0 ) exitWith { false };
|
if ( ( admin _owner ) != 0 ) exitWith { false };
|
||||||
|
|
||||||
if ( !isNull ( getAssignedCuratorLogic _person ) ) exitWith { false };
|
if ( !isNull ( getAssignedCuratorLogic _person ) ) exitWith { false };
|
||||||
|
|
||||||
if ( (missionNamespace getVariable ["milsim_globalChat", false] ) && ( _channel == 0 ) ) exitWith{ false };
|
|
||||||
if ( (missionNamespace getVariable ["milsim_sideChat", false] ) && ( _channel == 1 ) ) exitWith{ false };
|
|
||||||
if ( (missionNamespace getVariable ["milsim_commandChat", false] && ( _channel == 2 ) ) ) exitWith{ false };
|
|
||||||
if ( (missionNamespace getVariable ["milsim_groupChat", false] ) && ( _channel == 3 ) ) exitWith{ false };
|
|
||||||
if ( (missionNamespace getVariable ["milsim_vehicleChat", false] && ( _channel == 4 ) ) ) exitWith{ false };
|
|
||||||
if ( (missionNamespace getVariable ["milsim_directChat", false] ) && ( _channel == 5 ) ) exitWith{ false };
|
|
||||||
|
|
||||||
true;
|
true;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ if ( !hasInterface ) exitWith {};
|
|||||||
if (not (local _unit)) exitWith {};
|
if (not (local _unit)) exitWith {};
|
||||||
|
|
||||||
private _causeOfDeath = _unit getVariable ["ace_medical_causeOfDeath", "#scripted"];
|
private _causeOfDeath = _unit getVariable ["ace_medical_causeOfDeath", "#scripted"];
|
||||||
private _triageLevel = _unit call ace_medical_treatment_fnc_getTriageStatus;
|
|
||||||
|
|
||||||
if (_causeOfDeath != "respawn_button") exitWith {};
|
if (_causeOfDeath != "respawn_button") exitWith {};
|
||||||
private _timeWentUnconscious = _unit getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
private _timeWentUnconscious = _unit getVariable [QGVARMAIN(lastTimeKnockedOut), -1];
|
||||||
@@ -16,13 +15,13 @@ if ( !hasInterface ) exitWith {};
|
|||||||
if (_timeWentUnconscious isEqualTo -1) exitWith {};
|
if (_timeWentUnconscious isEqualTo -1) exitWith {};
|
||||||
|
|
||||||
_durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
_durationSpentUnconscious = diag_tickTime - _timeWentUnconscious;
|
||||||
|
|
||||||
[
|
[
|
||||||
LEVEL_INFO,
|
LEVEL_INFO,
|
||||||
QUOTE(COMPONENT),
|
QUOTE(COMPONENT),
|
||||||
"RESPAWNED WHILE UNCONSCIOUS",
|
"RESPAWNED WHILE UNCONSCIOUS",
|
||||||
[_unit, [
|
[_unit, [
|
||||||
["durationSpentUnconscious", _durationSpentUnconscious],
|
["durationSpentUnconscious", _durationSpentUnconscious]
|
||||||
["triageLevel", _triageLevel#1]
|
|
||||||
]] call EFUNC(common,addPlayerInfoToArray)
|
]] call EFUNC(common,addPlayerInfoToArray)
|
||||||
] remoteExec [QEFUNC(common,log), 2];
|
] remoteExec [QEFUNC(common,log), 2];
|
||||||
// format["%1 was unconscious then clicked the respawn button", name _unit] remoteExec["systemChat", 0];
|
// format["%1 was unconscious then clicked the respawn button", name _unit] remoteExec["systemChat", 0];
|
||||||
|
|||||||
@@ -1,33 +1,15 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
//---------------------
|
|
||||||
// Global Chat
|
|
||||||
//---------------------
|
|
||||||
[
|
|
||||||
QGVARMAIN(globalChat),
|
|
||||||
"CHECKBOX",
|
|
||||||
"Global Chat Text Enabled",
|
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
|
||||||
true, // default value
|
|
||||||
true, // requires restart
|
|
||||||
{
|
|
||||||
params ["_value"];
|
|
||||||
[
|
|
||||||
QGVARMAIN(globalChat),
|
|
||||||
_value
|
|
||||||
] call EFUNC(common,logSettingChanged);
|
|
||||||
}
|
|
||||||
] call CBA_fnc_addSetting;
|
|
||||||
|
|
||||||
//---------------------
|
//---------------------
|
||||||
// Side Chat
|
// Side Chat
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
[
|
[
|
||||||
QGVARMAIN(sideChat),
|
QGVARMAIN(sideChat),
|
||||||
"CHECKBOX",
|
"CHECKBOX",
|
||||||
"Side Chat Text Enabled",
|
"Side Chat Text Enabled",
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
||||||
true, // default value
|
false, // default value
|
||||||
true, // requires restart
|
true, // requires restart
|
||||||
{
|
{
|
||||||
params ["_value"];
|
params ["_value"];
|
||||||
@@ -38,92 +20,7 @@
|
|||||||
}
|
}
|
||||||
] call CBA_fnc_addSetting;
|
] call CBA_fnc_addSetting;
|
||||||
|
|
||||||
|
|
||||||
//---------------------
|
|
||||||
// Command Chat
|
|
||||||
//---------------------
|
|
||||||
[
|
|
||||||
QGVARMAIN(commandChat),
|
|
||||||
"CHECKBOX",
|
|
||||||
"Command Chat Text Enabled",
|
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
|
||||||
true, // default value
|
|
||||||
true, // requires restart
|
|
||||||
{
|
|
||||||
params ["_value"];
|
|
||||||
[
|
|
||||||
QGVARMAIN(commandChat),
|
|
||||||
_value
|
|
||||||
] call EFUNC(common,logSettingChanged);
|
|
||||||
}
|
|
||||||
] call CBA_fnc_addSetting;
|
|
||||||
|
|
||||||
//---------------------
|
|
||||||
// Group Chat
|
|
||||||
//---------------------
|
|
||||||
[
|
|
||||||
QGVARMAIN(groupChat),
|
|
||||||
"CHECKBOX",
|
|
||||||
"Group Chat Text Enabled",
|
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
|
||||||
true, // default value
|
|
||||||
true, // requires restart
|
|
||||||
{
|
|
||||||
params ["_value"];
|
|
||||||
[
|
|
||||||
QGVARMAIN(groupChat),
|
|
||||||
_value
|
|
||||||
] call EFUNC(common,logSettingChanged);
|
|
||||||
}
|
|
||||||
] call CBA_fnc_addSetting;
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------
|
|
||||||
// Vehicle Chat
|
|
||||||
//---------------------
|
|
||||||
[
|
|
||||||
QGVARMAIN(vehicleChat),
|
|
||||||
"CHECKBOX",
|
|
||||||
"Vehicle Chat Text Enabled",
|
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
|
||||||
true, // default value
|
|
||||||
true, // requires restart
|
|
||||||
{
|
|
||||||
params ["_value"];
|
|
||||||
[
|
|
||||||
QGVARMAIN(vehicleChat),
|
|
||||||
_value
|
|
||||||
] call EFUNC(common,logSettingChanged);
|
|
||||||
}
|
|
||||||
] call CBA_fnc_addSetting;
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------
|
|
||||||
// Vehicle Chat
|
|
||||||
//---------------------
|
|
||||||
[
|
|
||||||
QGVARMAIN(directChat),
|
|
||||||
"CHECKBOX",
|
|
||||||
"Direct Chat Text Enabled",
|
|
||||||
[QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)],
|
|
||||||
true, // default value
|
|
||||||
true, // requires restart
|
|
||||||
{
|
|
||||||
params ["_value"];
|
|
||||||
[
|
|
||||||
QGVARMAIN(directChat),
|
|
||||||
_value
|
|
||||||
] call EFUNC(common,logSettingChanged);
|
|
||||||
}
|
|
||||||
] call CBA_fnc_addSetting;
|
|
||||||
|
|
||||||
|
|
||||||
[QGVARMAIN(globalChat), false] call CBA_settings_fnc_set;
|
|
||||||
[QGVARMAIN(sideChat), false] call CBA_settings_fnc_set;
|
[QGVARMAIN(sideChat), false] call CBA_settings_fnc_set;
|
||||||
[QGVARMAIN(commandChat), false] call CBA_settings_fnc_set;
|
|
||||||
[QGVARMAIN(groupChat), false] call CBA_settings_fnc_set;
|
|
||||||
[QGVARMAIN(vehicleChat), false] call CBA_settings_fnc_set;
|
|
||||||
[QGVARMAIN(directChat), false] call CBA_settings_fnc_set;
|
|
||||||
|
|
||||||
diag_log text "[MILSIM] (settings) Custom CBA settings initialized";
|
diag_log text "[MILSIM] (settings) Custom CBA settings initialized";
|
||||||
|
|
||||||
|
|||||||
@@ -27,31 +27,17 @@ addMissionEventHandler ["EntityKilled", {
|
|||||||
|
|
||||||
if not (_unit isKindOf "CAManBase") exitWith {};
|
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 setVariable["milsim_death_time", time];
|
||||||
|
// _unit addEventHandler ["Deleted", {
|
||||||
_unit addEventHandler ["Deleted", {
|
// params ["_entity"];
|
||||||
params ["_entity"];
|
// isGC = _entity getVariable["milsim_garbage_collected", false];
|
||||||
_remainsCollector = _entity getVariable["milsim_garbage_collected", false];
|
// format["%1 from was deleted by custom gc: %2", _entity, str isGC ] remoteExec ["systemChat"];
|
||||||
_decayTime = time - (_entity getVariable ["milsim_death_time", time]);
|
// }];
|
||||||
|
|
||||||
_i = allUsers select { (getUserInfo _x)#1 isEqualTo _ownerId;};
|
|
||||||
_owner = if ( _i isEqualTo []) then [ { "server" }, { (getUserInfo (_i#0))#3 }];
|
|
||||||
|
|
||||||
diag_log format["isServer: %5, deleted object owned by: %1 via remainsCollector: %2 after %3 seconds of type: %4", _owner, str (not _remainsCollector), _decayTime, _entity, isServer];
|
|
||||||
}];
|
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
|
||||||
// add zeus deletion logging to curator objects
|
|
||||||
{
|
|
||||||
_x addEventHandler ["CuratorObjectDeleted", {
|
|
||||||
params ["_curator", "_entity"];
|
|
||||||
|
|
||||||
_decayTime = time - (_entity getVariable ["milsim_death_time", time]);
|
|
||||||
diag_log format["deleted object: %1 via curator: %2 after %3 seconds", _entity, name _curator, _decayTime];
|
|
||||||
}];
|
|
||||||
} foreach _curators;
|
|
||||||
|
|
||||||
// declare init complete to other modules
|
// declare init complete to other modules
|
||||||
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ GVAR(deadUnitCleanupPFH) = [
|
|||||||
_dead = _dead select [0, _toDelete];
|
_dead = _dead select [0, _toDelete];
|
||||||
{
|
{
|
||||||
_unit = _x#1;
|
_unit = _x#1;
|
||||||
_unit setVariable ["milsim_garbage_collected", true];
|
// _unit setVariable ["milsim_garbage_collected", true];
|
||||||
deleteVehicle (_unit);
|
deleteVehicle (_unit);
|
||||||
} foreach _dead;
|
} foreach _dead;
|
||||||
},
|
},
|
||||||
450,
|
180,
|
||||||
[],
|
[],
|
||||||
{ // on creation
|
{ // on creation
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []];
|
|||||||
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime];
|
||||||
|
|
||||||
// add actions to pilot classes, and don't apply to child classes
|
// add actions to pilot classes, and don't apply to child classes
|
||||||
// [["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
[["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction);
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#define MAJOR 4
|
#define MAJOR 4
|
||||||
#define MINOR 2
|
#define MINOR 1
|
||||||
#define PATCHLVL 4
|
#define PATCHLVL 2
|
||||||
#define BUILD 0
|
#define BUILD 0
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
#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;
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
#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,25 +5,86 @@
|
|||||||
0: STRING - Parent action ID
|
0: STRING - Parent action ID
|
||||||
1: ARRAY - Flag category configs
|
1: ARRAY - Flag category configs
|
||||||
*/
|
*/
|
||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
params ["_rootActionID", "_flagCategoryCfgs"];
|
params ["_rootActionID", "_flagCategoryCfgs"];
|
||||||
|
|
||||||
private _allCategoryActions = [];
|
private _allCategoryActions = [];
|
||||||
|
|
||||||
{
|
{
|
||||||
_flagCategoryActions = [];
|
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
|
||||||
if (configName _x == "SimpleShapes") then {
|
|
||||||
|
private _flagCategoryCfg = _x;
|
||||||
|
private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID");
|
||||||
|
private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle");
|
||||||
|
|
||||||
|
private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren;
|
||||||
|
|
||||||
|
private _flagCategoryAction = [
|
||||||
|
_rootActionID + "_" + _flagCategoryActionID, // id
|
||||||
|
_flagCategoryTitle, // displayed title
|
||||||
|
getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option
|
||||||
|
{true}, // statement
|
||||||
{
|
{
|
||||||
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
params ["_target", "_player", "_params"];
|
||||||
} forEach (_x call BIS_fnc_returnChildren);
|
alive _target;
|
||||||
} else {
|
// true;
|
||||||
_flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction));
|
}, // 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;
|
||||||
|
|
||||||
// add category to all category actions array
|
// add category to all category actions array
|
||||||
{
|
_allCategoryActions pushBack [_flagCategoryAction, [], _target];
|
||||||
_allCategoryActions pushBack [_x, [], _target];
|
|
||||||
} forEach _flagCategoryActions;
|
|
||||||
} forEach _flagCategoryCfgs;
|
} forEach _flagCategoryCfgs;
|
||||||
|
|
||||||
_allCategoryActions;
|
_allCategoryActions;
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user