aj_cbrn
This commit is contained in:
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;
|
||||
};
|
||||
Reference in New Issue
Block a user