//Tweaked by Rarek [AW] to enable role assignment
//TO-DO: Make selected value check show status before assigning role
disableserialization;
_unit = [_this,0,objnull,[objnull]] call bis_fnc_param;
_respawnDelay = [_this,3,0,[0]] call bis_fnc_param;
if (!alive _unit) then {
if (playerrespawntime < 1 || !isplayer _unit) exitwith {};
if (simulationenabled _unit) then {
if (playerrespawntime < 3) then {setplayerrespawntime (playerrespawntime + 3);};
sleep 1.9;
cutText ["","black out",0.5];
sleep 1;
cutText ["","black in"];
};
///////////////////////////////////////////////////////////////////////////////////////////
//--- onPlayerKilled
///////////////////////////////////////////////////////////////////////////////////////////
[
"Select Loadout",
{
scriptname "BIS_fnc_respawnMenuInventory";
_fnc_scriptName = "BIS_fnc_respawnMenuInventory";
disableserialization;
_mode = _this select 0;
_ctrlListBackground = _this select 1;
_ctrlList = _this select 2;
_ctrlContentBackground = _this select 3;
_ctrlContentGroup = _this select 4;
_ctrlContent = _this select 5;
_ctrlMap = _this select 6;
switch _mode do {
case "init": {
_ctrlMap ctrlsetfade 1;
_ctrlMap ctrlcommit 0;
BIS_fnc_respawnMenuPosition_inventories = [];
};
case "select": {
if (lbsize _ctrlList == 0) exitwith {};
_selected = _ctrlList lbdata lbcursel _ctrlList;
if (_selected == missionnamespace getvariable ["BIS_fnc_respawnMenuInventory_selected",""]) exitwith {};
if (_selected == "") then {
_text = " ? ????
";
_ctrlContent ctrlsetstructuredtext parsetext (_text + _text + _text + _text + _text);
_ctrlContent call bis_fnc_ctrlFitToTextHeight;
} else {
_varName = "BIS_fnc_respawnMenuInventory_" + _selected;
_var = missionnamespace getvariable _varName;
if !(isnil {_var}) then {
_text = _var select 2;
_ctrlContent ctrlsetstructuredtext _text;
_ctrlContent call bis_fnc_ctrlFitToTextHeight;
};
};
BIS_fnc_respawnMenuInventory_selected = _selected;
};
case "update": {
_selected = _ctrlList lbdata lbcursel _ctrlList;
if (_selected == "") then {_selected = missionnamespace getvariable ["BIS_fnc_respawnMenuInventory_selected",""];};
_respawnInventories = player call bis_fnc_getRespawnInventories;
//--- Exit if the array didn't change
if (str _respawnInventories == str (missionnamespace getvariable ["BIS_fnc_respawnMenuPosition_inventories",[]])) exitwith {};
BIS_fnc_respawnMenuPosition_inventories = _respawnInventories;
if (count _respawnInventories > 0) then {
lbclear _ctrlList;
if (count _respawnInventories > 1) then {
_lbAdd = _ctrlList lbAdd format ["<%1>",localize "STR_A3_BIS_fnc_respawnMenuInventory_random"];
_ctrlList lbsetdata [_lbAdd,""];
};
_cursel = 0;
{
_cfg = missionconfigfile >> "cfgrespawninventory" >> _x;
if (isclass _cfg) then {
_varName = "BIS_fnc_respawnMenuInventory_" + _x;
_var = missionnamespace getvariable _varName;
if (isnil {_var}) then {
//--- Create loadout preview
_displayName = gettext (_cfg >> "displayName");
_icon = gettext (_cfg >> "icon");
//--- Get CfgVehicles class
_vehicle = gettext (_cfg >> "vehicle");
if (_vehicle != "") then {
_cfg = configfile >> "cfgvehicles" >> _vehicle;
if (_displayName == "") then {_displayName = _cfg call bis_fnc_displayName;};
if (_icon == "") then {_icon = gettext (_cfg >> "icon");};
};
//--- Load icon
_icon = _icon call bis_fnc_textureVehicleIcon;
if (_icon == "") then {_icon = "#(argb,8,8,3)color(0,0,0,0)";};
//--- Parse description
_cfgWeapons = configfile >> "CfgWeapons";
_cfgMagazines = configfile >> "CfgMagazines";
_cfgVehicles = configfile >> "CfgVehicles";
_cfgGoggles = configfile >> "CfgGoggles";
_itemData = {
_itemCfg = _this select 0;
_itemCount = _this select 1;
if (isclass _itemCfg) then {
_itemName = _itemCfg call bis_fnc_displayName;
_picture = gettext (_itemCfg >> "picture");
_text = _text + format [
"
%2%3
",
_picture,
_itemName,
_itemCount
];
};
};
_drawCategory = {
_text = _text + "
";
};
_weaponData = {
_cfgWeapon = _cfgWeapons >> (_this select 0);
if (isclass _cfgWeapon) then {
[_cfgWeapon,1] call _itemData;
{
[_cfgWeapons >> _x,1] call _itemData;
} foreach (_this select 1);
{
_magazineID = _magazineTypes find (tolower _x);
if (_magazineID >= 0) then {
[_cfgMagazines >> _x,_magazineCounts select _magazineID] call _itemData;
_magazineTypes set [_magazineID,""];
};
} foreach getarray (_cfgWeapon >> "magazines");
[] call _drawCategory;
};
};
_filterArray = {
_input = _this select 0;
_outputTypes = _this select 1;
_outputCounts = _this select 2;
while {count _input > 0} do {
_item = _input select 0;
_outputTypes set [count _outputTypes,tolower _item];
_outputCounts set [count _outputCounts,{_item == _x} count _input];
_input = _input - [_item];
};
_input
};
_text = "";
_previewObject = (typeof player) createvehiclelocal [10,10,10];
[_previewObject,_cfg] call bis_fnc_loadInventory;
_magazines = getarray (_cfg >> "magazines");
_magazineTypes = [];
_magazineCounts = [];
[_magazines,_magazineTypes,_magazineCounts] call _filterArray;
[primaryweapon _previewObject,primaryweaponitems _previewObject] call _weaponData;
[secondaryweapon _previewObject,secondaryweaponitems _previewObject] call _weaponData;
[handgunweapon _previewObject,handgunitems _previewObject] call _weaponData;
{
[_cfgMagazines >> _x,_magazineCounts select _foreachindex] call _itemData;
} foreach _magazineTypes;
[] call _drawCategory;
[_cfgWeapons >> uniform _previewObject,1] call _itemData;
[_cfgWeapons >> vest _previewObject,1] call _itemData;
[_cfgVehicles >> backpack _previewObject,1] call _itemData;
[_cfgWeapons >> headgear _previewObject,1] call _itemData;
[_cfgGoggles >> goggles _previewObject,1] call _itemData;
[] call _drawCategory;
_assignedItems = assignedItems _previewObject;
_assignedItems = _assignedItems - [headgear _previewObject,goggles _previewObject];
_assignedItemsTypes = [];
_assignedItemsCounts = [];
[_assignedItems,_assignedItemsTypes,_assignedItemsCounts] call _filterArray;
{
[_cfgWeapons >> _x,_assignedItemsCounts select _foreachindex] call _itemData;
} foreach _assignedItemsTypes;
_items = items _previewObject;
_items = _items - _magazines;
_itemsTypes = [];
_itemsCounts = [];
[_items,_itemsTypes,_itemsCounts] call _filterArray;
{
[_cfgWeapons >> _x,_itemsCounts select _foreachindex] call _itemData;
} foreach _itemsTypes;
_var = [_displayName,_icon,parsetext _text];
missionnamespace setvariable [_varName,_var];
};
_displayName = _var select 0;
_icon = _var select 1;
_lbAdd = _ctrlList lbadd _displayName;
_ctrlList lbsetpicture [_lbAdd,_icon];
_ctrlList lbsetdata [_lbAdd,_x];
if (_x == _selected) then {_cursel = _lbAdd;};
};
} foreach _respawnInventories;
if (_cursel != lbcursel _ctrlList) then {
BIS_fnc_respawnMenuInventory_selected = "";
_ctrlList lbsetcursel _cursel;
};
} else {
["No respawn inventories found"] call bis_fnc_error;
};
};
};
}
] call bis_fnc_showRespawnMenu;
} else {
///////////////////////////////////////////////////////////////////////////////////////////
//--- onPlayerRespawn
///////////////////////////////////////////////////////////////////////////////////////////
//--- Player - assign selected inventory
_selected = if (isplayer _unit) then {missionnamespace getvariable ["BIS_fnc_respawnMenuInventory_selected",""]} else {""};
if (_selected == "") then {
_respawnInventories = (_unit call bis_fnc_getRespawnInventories);
_selected = if (count _respawnInventories > 0) then {
_respawnInventories call bis_fnc_selectrandom
} else {
["No respawn inventories found"] call bis_fnc_error;
""
};
};
_cfg = missionconfigfile >> "cfgrespawninventory" >> _selected;
if (isclass _cfg) then {
_vehicle = gettext (_cfg >> "vehicle");
if (_vehicle != "") then {_cfg = _vehicle;};
[_unit,_cfg] call bis_fnc_loadInventory;
if (vehicle _unit == _unit) then {_unit switchmove "";};
_unit setVariable ["role", _selected, true];
};
//--- Reset the respawn delay
if (isplayer _unit) then {
setplayerrespawntime _respawnDelay;
};
};