/*
AUTHOR: aeroson
NAME: chemlights.sqf
VERSION: 1.2
DOWNLOAD & PARTICIPATE:
https://github.com/aeroson/a3-misc
http://forums.bistudio.com/showthread.php?163206-Group-Manager
CONTRIBUTOR: Rafael09ED
REQUIRES: group_manager.sqf
DESCRIPTION:
Port of chemlights from pokertour's =ATM= Air Drop http://forums.bistudio.com/showthread.php?157793-ATM-Airdrop-A3-Beta
USAGE:
in (client's) init:
0 = [] execVM 'chemlights.sqf';
or if you want to use chemlights from your inventory do:
0 = [true] execVM 'chemlights.sqf';
*/
#define PREFIX aero
#define COMPONENT chemlights
//#define DEBUG_MODE
#define DOUBLES(A,B) ##A##_##B
#define TRIPLES(A,B,C) ##A##_##B##_##C
#define QUOTE(A) #A
#define CONCAT(A,B) A####B
#define GVAR(A) TRIPLES(PREFIX,COMPONENT,A)
#define QGVAR(A) QUOTE(GVAR(A))
#define INC(A) A=(A)+1
#define DEC(A) A=(A)-1
#define ADD(A,B) A=(A)+(B)
#define SUB(A,B) A=(A)-(B)
#define REM(A,B) A=A-[B]
#define PUSH(A,B) A set [count (A),B]
#define EL(A,B) ((A) select (B))
#define PUSH_START(A) A set[count (A),
#define PUSH_END ];
#define THIS(A) EL(this,A)
#define _THIS(A) EL(_this,A)
if(isDedicated) exitWith {}; // is server
waitUntil{!isNil{aero_gm_actions_add}};
GVAR(useInventory)=[_this,0,false] call BIS_fnc_param;
GVAR(attached)=[];
player addEventHandler ["Respawn", {
GVAR(attached)=[];
}];
GVAR(menu_main)={
call aero_gm_actions_remove;
{
if(
(GVAR(useInventory) && ((_x select 2) select 1) in magazines player) ||
!GVAR(useInventory)
) then {
(player addAction _x) call aero_gm_actions_addId;
};
} forEach [
["Attach Red Chemlight ...", { _THIS(3) call GVAR(menu_shoulder); }, ["B40404","Chemlight_red"],5090],
["Attach Green Chemlight ...", { _THIS(3) call GVAR(menu_shoulder); }, ["30fd07","Chemlight_green"],5080],
["Attach Blue Chemlight ...", { _THIS(3) call GVAR(menu_shoulder); }, ["68ccf6","Chemlight_blue"],5070],
["Attach Yellow Chemlight ...", { _THIS(3) call GVAR(menu_shoulder); }, ["fcf018","Chemlight_yellow"],5060],
["Attach IR Strobe ...", { _THIS(3) call GVAR(menu_shoulder); }, ["#ffffff","B_IRStrobe"],5050]
];
if(count GVAR(attached)>0) then {
(player addAction ["Detach chemlights", { _THIS(3) call GVAR(chemlights_detach); },[],3000]) call aero_gm_actions_addId;
};
[] call aero_gm_actions_addBack;
};
GVAR(menu_shoulder)={
[] call aero_gm_actions_remove;
{
(player addAction _x) call aero_gm_actions_addId;
} forEach [
[format["Attach To Left Shoulder",_THIS(0)], { _THIS(3) call GVAR(chemlight_attach); }, [_THIS(1),"LeftShoulder",[-0.02,-0.05,0.04]],5090],
[format["Attach To Right Shoulder",_THIS(0)], { _THIS(3) call GVAR(chemlight_attach); }, [_THIS(1),"RightShoulder",[0.02,-0.05,0.04]],5080],
[format["Attach To Left Hand",_THIS(0)], { _THIS(3) call GVAR(chemlight_attach); }, [_THIS(1),"LeftHand",[0,0,0]],5070],
[format["Attach To Right Hand",_THIS(0)], { _THIS(3) call GVAR(chemlight_attach); }, [_THIS(1),"RightHand",[0,0,0]],5060]
];
[{call GVAR(menu_main);}] call aero_gm_actions_addBack;
};
// default vectorDirUp [[0,0,1],[0,0,1]]
// for chest [[0,0,1],[1,0,0]]
GVAR(chemlight_attach) = {
if(GVAR(useInventory)) then {
player removeMagazine (_this select 0);
};
[] call aero_gm_menu_main;
private["_chemlight"];
_chemlight = (_this select 0) createVehicle [0,0,0];
_chemlight attachTo [player, (_this select 2), (_this select 1)];
PUSH(GVAR(attached),_chemlight)
};
GVAR(chemlights_detach) = {
[] call aero_gm_menu_main;
{
detach _x;
_x setPosATL [-10000,-10000,100000];
Sleep 0.1;
deletevehicle _x;
} forEach GVAR(attached);
GVAR(attached)=[];
};
[
" Chemlights ...",
{ [] call GVAR(menu_main); },
[],
100,
true,
true,
"",
"({_x in ['Chemlight_red','Chemlight_green','Chemlight_blue','Chemlight_yellow','B_IRStrobe']} count magazines player > 0) || count aero_chemlights_attached > 0"
] call aero_gm_actions_add;