mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
Favorites bar - full release
This commit is contained in:
parent
2c99640040
commit
45b6bf1fb2
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
Author: Aaron Clark - EpochMod.com
|
Author: Aaron Clark - EpochMod.com
|
||||||
|
|
||||||
Contributors:
|
Contributors: Raimonds Virtoss
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
Epoch add item with overflow
|
Epoch add item with overflow
|
||||||
@ -20,12 +20,14 @@
|
|||||||
_this select 1: NUMBER - (Optional) Ammo count
|
_this select 1: NUMBER - (Optional) Ammo count
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
BOOL
|
BOOL True: item was dropped nearby
|
||||||
|
False: item was added to inventory
|
||||||
*/
|
*/
|
||||||
//[[[cog import generate_private_arrays ]]]
|
//[[[cog import generate_private_arrays ]]]
|
||||||
private ["_nearByHolder","_wH","_wHPos"];
|
private ["_dropped","_nearByHolder","_wH","_wHPos"];
|
||||||
//[[[end]]]
|
//[[[end]]]
|
||||||
params [["_item","",[""]],["_count",1]];
|
params [["_item","",[""]],["_count",1]];
|
||||||
|
_dropped = false;
|
||||||
for "_i" from 1 to _count do
|
for "_i" from 1 to _count do
|
||||||
{
|
{
|
||||||
if (player canAdd _item) then {
|
if (player canAdd _item) then {
|
||||||
@ -47,6 +49,7 @@ for "_i" from 1 to _count do
|
|||||||
if !(isNull _wh) then {
|
if !(isNull _wh) then {
|
||||||
_wh addItemCargoGlobal [_item,1];
|
_wh addItemCargoGlobal [_item,1];
|
||||||
};
|
};
|
||||||
|
_dropped = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
true
|
_dropped
|
||||||
|
@ -38,6 +38,13 @@ if (_handled) exitWith{ true };
|
|||||||
if !(alive player) exitWith{ false };
|
if !(alive player) exitWith{ false };
|
||||||
|
|
||||||
EPOCH_doRotate = false;
|
EPOCH_doRotate = false;
|
||||||
|
EPOCH_modKeys = [_shift,_ctrl,_alt];
|
||||||
|
'modifier' spawn epoch_favBar_draw;
|
||||||
|
|
||||||
|
//Favorites bar
|
||||||
|
if (_dikCode in [EPOCH_keysfav1,EPOCH_keysfav2,EPOCH_keysfav3,EPOCH_keysfav4,EPOCH_keysfav5]) then {
|
||||||
|
_this call epoch_favBar_action;
|
||||||
|
};
|
||||||
|
|
||||||
// increase vol
|
// increase vol
|
||||||
if (_ctrl && _dikCode == EPOCH_keysVolumeUp) then {
|
if (_ctrl && _dikCode == EPOCH_keysVolumeUp) then {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
Author: Aaron Clark - EpochMod.com
|
Author: Aaron Clark - EpochMod.com
|
||||||
|
|
||||||
Contributors:
|
Contributors: Raymix
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
Key Up EH functions
|
Key Up EH functions
|
||||||
@ -34,6 +34,9 @@ _handled = false;
|
|||||||
_this call Epoch_custom_EH_KeyUp;
|
_this call Epoch_custom_EH_KeyUp;
|
||||||
if (_handled) exitWith{ true };
|
if (_handled) exitWith{ true };
|
||||||
|
|
||||||
|
EPOCH_modKeys = [_shift,_ctrl,_alt];
|
||||||
|
'modifier' spawn epoch_favBar_draw;
|
||||||
|
|
||||||
//Main actions
|
//Main actions
|
||||||
if (_dikCode == EPOCH_keysAction) then {
|
if (_dikCode == EPOCH_keysAction) then {
|
||||||
EPOCH_keysActionPressed = false;
|
EPOCH_keysActionPressed = false;
|
||||||
@ -42,4 +45,5 @@ if (_dikCode == EPOCH_keysAction) then {
|
|||||||
if (_dikCode in(actionKeys "Gear")) then {
|
if (_dikCode in(actionKeys "Gear")) then {
|
||||||
EPOCH_gearKeyPressed = false;
|
EPOCH_gearKeyPressed = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
_handled
|
_handled
|
||||||
|
478
Sources/epoch_code/compile/inventory/EPOCH_equip.sqf
Normal file
478
Sources/epoch_code/compile/inventory/EPOCH_equip.sqf
Normal file
@ -0,0 +1,478 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: Equips or un-equips item (if equipped) instantly. Item has to exist in the inventory.
|
||||||
|
to switch weapons slowly use below in your code:
|
||||||
|
player playAction "reloadMagazine";
|
||||||
|
|
||||||
|
_item - className
|
||||||
|
_drop - drop on ground if inventory full, weapons will be stripped off attachments
|
||||||
|
weapons stripped because attachments can only be added while weapon is equipped.
|
||||||
|
_forceEquip - disables un-equip and forces new item to be equipped at all times
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_equip.sqf
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
[_item, false] call epoch_equip; //don't drop item if inventory full. Does not equip requested item if another item already equipped, instead un-equips existing one.
|
||||||
|
[_item, true,true] call epoch_equip; //drops item if not enough space. Removes existing weapon and equips new one.
|
||||||
|
|
||||||
|
RETURNS:
|
||||||
|
0 - fail, item not provided
|
||||||
|
1 - success
|
||||||
|
2 - success, but item dropped on ground.
|
||||||
|
3 - item not found
|
||||||
|
4 - not enough space
|
||||||
|
5 - accessory not compatible
|
||||||
|
*/
|
||||||
|
private ["_item","_drop","_forceEquip"];
|
||||||
|
params [["_item","",[""]],["_drop",false,[false]],["_forceEquip",false,[false]]];
|
||||||
|
|
||||||
|
_return = 0;
|
||||||
|
if (_item == "") exitWith {_return};
|
||||||
|
_slot = _item call epoch_itemTypeSlot;
|
||||||
|
_loadout = getUnitLoadout player;
|
||||||
|
_loadout params ["_pSlot","_sSlot","_hSlot","_uniform","_vest","_bpack","_helm","_goggles","_bino","_assigned"];
|
||||||
|
_pSlot params ["_pWeapon","_pSilencer","_pLaser","_pOptic","_pMag","_pMag2","_pBipod"];
|
||||||
|
_sSlot params ["_sWeapon","_sSilencer","_sLaser","_sOptic","_sMag","_sBipod"];
|
||||||
|
_hSlot params ["_hWeapon","_hSilencer","_hLaser","_hOptic","_hMag","_hBipod"];
|
||||||
|
_uniformItems = _uniform param [1,[]];
|
||||||
|
_vestItems = _vest param [1,[]];
|
||||||
|
_bPackItems = _bPack param [1,[]];
|
||||||
|
_binoculars = _bino param [0,[]];
|
||||||
|
|
||||||
|
_itemInInventory = _item in ((magazines player) + (items player));
|
||||||
|
|
||||||
|
_fnc_dropItem = {
|
||||||
|
private ["_item","_nearByHolder","_wH","_wHPos"];
|
||||||
|
params [["_item","",[""]],["_count",1]];
|
||||||
|
for "_i" from 1 to _count do
|
||||||
|
{
|
||||||
|
_wH = objNull;
|
||||||
|
if (isNil "_nearByHolder") then {
|
||||||
|
_nearByHolder = nearestObjects [position player,["groundWeaponHolder"],3];
|
||||||
|
};
|
||||||
|
if (_nearByHolder isEqualTo []) then {
|
||||||
|
_wHPos = player modelToWorld [0,1,0];
|
||||||
|
if (surfaceIsWater _wHPos) then {
|
||||||
|
_wHPos = ASLToATL _wHPos;
|
||||||
|
};
|
||||||
|
_wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"];
|
||||||
|
} else {
|
||||||
|
_wH = _nearByHolder select 0;
|
||||||
|
};
|
||||||
|
if !(isNull _wh) then {
|
||||||
|
_wh addItemCargoGlobal [_item,1];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_findItemInContainers = {
|
||||||
|
private "_item";
|
||||||
|
params ["_item"];
|
||||||
|
|
||||||
|
_container = 0;
|
||||||
|
_index = 0;
|
||||||
|
_found = false;
|
||||||
|
{
|
||||||
|
_container = _forEachIndex;
|
||||||
|
if (!isnil "_x") then {
|
||||||
|
{
|
||||||
|
_index = _forEachIndex;
|
||||||
|
_currItem = _x select 0;
|
||||||
|
if (_currItem isEqualType "") then { //if item
|
||||||
|
if (_currItem isEqualTo _item) exitWith {_found = true};
|
||||||
|
} else { //if weapon
|
||||||
|
if ((_currItem select 0) isEqualTo _item) exitWith {_found = true};
|
||||||
|
};
|
||||||
|
if _found exitWith {};
|
||||||
|
} forEach _x;
|
||||||
|
};
|
||||||
|
if _found exitWith {};
|
||||||
|
} forEach [_uniformItems,_vestItems,_bPackItems];
|
||||||
|
|
||||||
|
[_container,_index,_found];
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_moveWeaponFromContainer = {
|
||||||
|
private ["_idx","_container","_sIdx","_dIdx"]; //_dIdx can only be 0, 1 and 2
|
||||||
|
params ["_idx","_dIdx"];
|
||||||
|
_idx params ["_container","_sIdx"];
|
||||||
|
|
||||||
|
//copy old entry
|
||||||
|
_temp = ((_loadout select (_container + 3)) select 1) select _sIdx select 0;
|
||||||
|
//delete old entry
|
||||||
|
((_loadout select (_container + 3)) select 1) deleteAt _sIdx;
|
||||||
|
//add new entry
|
||||||
|
_loadout set [_dIdx,_temp];
|
||||||
|
//save changes
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_MoveWeaponToContainer = {
|
||||||
|
private ["_container","_sIdx"]; //_sIdx can only be 0, 1 and 2
|
||||||
|
params ["_container","_sIdx"];
|
||||||
|
|
||||||
|
/*
|
||||||
|
//Delete this block if no issues.
|
||||||
|
//Commented out because increasing index alone is not enough due to unique attachement placements or ammo size
|
||||||
|
_exists = _item call _fnc_findItemInContainers;
|
||||||
|
_exists params ["_container","_idx","_found"];
|
||||||
|
|
||||||
|
if _found then {
|
||||||
|
_cnt = ((_loadout select (_container + 3)) select 1) select _idx select 1;
|
||||||
|
((_loadout select (_container + 3)) select 1) select _idx set [1,_cnt + 1];
|
||||||
|
} else {
|
||||||
|
((_loadout select (_container + 3)) select 1) append [[_loadout select _sIdx,1]];
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
((_loadout select (_container + 3)) select 1) append [[_loadout select _sIdx,1]]; //cut out from above comment, looks like appending alone works great
|
||||||
|
_loadout set [_sIdx,[]];
|
||||||
|
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_canMoveToContainer = {
|
||||||
|
private "_item";
|
||||||
|
params ["_item"];
|
||||||
|
if (player canAddItemToUniform _item) exitWith {0};
|
||||||
|
if (player canAddItemToVest _item) exitWith {1};
|
||||||
|
if (player canAddItemToBackpack _item) exitWith {2};
|
||||||
|
4
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_dropEquipWeapon = {
|
||||||
|
private ["_equipped","_slot"];
|
||||||
|
params ["_equipped","_slot"];
|
||||||
|
|
||||||
|
if (!_itemInInventory && (_item != _equipped)) exitWith {_return = 3}; //Item not found
|
||||||
|
|
||||||
|
if (_equipped != "") then { //something equipped already
|
||||||
|
if (player canAdd _equipped) then { //can we move it?
|
||||||
|
_container = _equipped call _fnc_canMoveToContainer;
|
||||||
|
|
||||||
|
if (_container != 4) then {
|
||||||
|
[_container,_slot] call _fnc_MoveWeaponToContainer;
|
||||||
|
_return = 1;
|
||||||
|
} else {
|
||||||
|
_return = 4;
|
||||||
|
};
|
||||||
|
} else { //drop it and strip from attachments?
|
||||||
|
if !(_drop) exitWith {_return = 4;}; //drop not allowed
|
||||||
|
/* //Delete this block if no issues with dropping on ground
|
||||||
|
{//Drop equipped items first
|
||||||
|
_x call _fnc_dropItem;
|
||||||
|
player removePrimaryWeaponItem _x;
|
||||||
|
}forEach primaryWeaponItems player;
|
||||||
|
{
|
||||||
|
_x call _fnc_dropItem;
|
||||||
|
}forEach primaryWeaponMagazine player;
|
||||||
|
*/
|
||||||
|
_equipped call _fnc_dropItem;
|
||||||
|
player removeWeaponGlobal _equipped;
|
||||||
|
_return = 2; //success, but dropped
|
||||||
|
};
|
||||||
|
if (_forceEquip && _return != 4) then {//Equip new weapon after old one removed
|
||||||
|
_idx = _item call _fnc_findItemInContainers;
|
||||||
|
[_idx,_slot] call _fnc_moveWeaponFromContainer;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
//Equip weapon
|
||||||
|
_idx = _item call _fnc_findItemInContainers;
|
||||||
|
[_idx,_slot] call _fnc_moveWeaponFromContainer;
|
||||||
|
_return = 1; //success
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_dropAssign= {
|
||||||
|
private ["_equipped"];
|
||||||
|
params ["_equipped"];
|
||||||
|
|
||||||
|
if (!_itemInInventory && (_item != _equipped)) exitWith {_return = 3};
|
||||||
|
|
||||||
|
if (_equipped != "") then {
|
||||||
|
if (player canAdd _equipped) then {
|
||||||
|
_container = _equipped call _fnc_canMoveToContainer;
|
||||||
|
|
||||||
|
if (_container != 4) then {
|
||||||
|
player unassignItem _equipped;
|
||||||
|
_return = 1;
|
||||||
|
} else {
|
||||||
|
_return = 4;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
if !(_drop) exitWith {_return = 4;};
|
||||||
|
_equipped call _fnc_dropItem;
|
||||||
|
player removeItem _equipped;
|
||||||
|
_return = 2;
|
||||||
|
};
|
||||||
|
if (_forceEquip && _return != 4) then {
|
||||||
|
player assignItem _item;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
player assignItem _item;
|
||||||
|
_return = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_fnc_MoveShellToContainer = {
|
||||||
|
private ["_container"];
|
||||||
|
params ["_container"];
|
||||||
|
|
||||||
|
_temp = _loadout select 0 select 5;
|
||||||
|
_temp2 = [(_temp select 0), 1, (_temp select 1)];
|
||||||
|
if ((_temp select 1) > 0) then { //only move if ammo not empty, delete otherwise
|
||||||
|
((_loadout select (_container + 3)) select 1) append [_temp2]; //cut out from above comment, looks like appending alone works great
|
||||||
|
};
|
||||||
|
(_loadout select 0) set [5,[]];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_moveShellFromContainer = {
|
||||||
|
private ["_idx","_container","_sIdx"]; //_dIdx can only be 0, 1 and 2
|
||||||
|
params ["_idx"];
|
||||||
|
_idx params ["_container","_sIdx","_found"];
|
||||||
|
|
||||||
|
if (_found) then {
|
||||||
|
_temp = ((_loadout select (_container + 3)) select 1) select _sIdx;
|
||||||
|
|
||||||
|
if ((_temp select 1) > 1) then {
|
||||||
|
_cnt = (((_loadout select (_container + 3)) select 1) select _sIdx) select 1;
|
||||||
|
(((_loadout select (_container + 3)) select 1) select _sIdx) set [1,_cnt - 1];
|
||||||
|
} else {
|
||||||
|
((_loadout select (_container + 3)) select 1) deleteAt _sIdx;
|
||||||
|
};
|
||||||
|
(_loadout select 0) set [5,[_temp select 0,_temp select 2]];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_dropEquipShells = {
|
||||||
|
private ["_equipped"];
|
||||||
|
params ["_equipped"];
|
||||||
|
|
||||||
|
if (!_itemInInventory && (_item != _equipped)) exitWith {_return = 3};
|
||||||
|
|
||||||
|
if (_equipped != "") then {
|
||||||
|
if (player canAdd _equipped) then {
|
||||||
|
_container = _equipped call _fnc_canMoveToContainer;
|
||||||
|
|
||||||
|
if (_container != 4) then {
|
||||||
|
[_container] call _fnc_MoveShellToContainer;
|
||||||
|
_return = 1;
|
||||||
|
} else {
|
||||||
|
_return = 4;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
if !(_drop) exitWith {_return = 4;};
|
||||||
|
_equipped call _fnc_dropItem;
|
||||||
|
(_loadout select 0) set [5,[]];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
_return = 2;
|
||||||
|
};
|
||||||
|
if (_forceEquip && _return != 4) then {
|
||||||
|
_idx = _item call _fnc_findItemInContainers;
|
||||||
|
[_idx,_slot] call _fnc_moveShellFromContainer;
|
||||||
|
player playAction "reloadMagazine";
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
_idx = _item call _fnc_findItemInContainers;
|
||||||
|
[_idx,_slot] call _fnc_moveShellFromContainer;
|
||||||
|
player playAction "reloadMagazine";
|
||||||
|
_return = 1;
|
||||||
|
};
|
||||||
|
_muzzle = (getArray (configFile >> "CfgWeapons" >> (primaryWeapon player) >> "muzzles"));
|
||||||
|
player selectWeapon (_muzzle select 1);
|
||||||
|
};
|
||||||
|
_fnc_findAccessorySlot = {
|
||||||
|
_item = toLower _item;
|
||||||
|
|
||||||
|
private ["_found","_slot","_accessory"];
|
||||||
|
_slot = 0;
|
||||||
|
_accessory = 0;
|
||||||
|
_found = false;
|
||||||
|
{
|
||||||
|
_slot = _foreachIndex;
|
||||||
|
_compatibleMuzzles = getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems");
|
||||||
|
_compatibleCows= getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems");
|
||||||
|
_compatiblePointers = getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems");
|
||||||
|
_compatibleBipods = getArray(configFile >> "CfgWeapons" >> _x >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems");
|
||||||
|
|
||||||
|
for "_i" from 0 to (count _compatibleMuzzles) do {
|
||||||
|
_compatibleMuzzles set [_i,toLower (_compatibleMuzzles select _i)];
|
||||||
|
};
|
||||||
|
for "_i" from 0 to (count _compatibleCows) do {
|
||||||
|
_compatibleCows set [_i,toLower (_compatibleCows select _i)];
|
||||||
|
};
|
||||||
|
for "_i" from 0 to (count _compatiblePointers) do {
|
||||||
|
_compatiblePointers set [_i,toLower (_compatiblePointers select _i)];
|
||||||
|
};
|
||||||
|
for "_i" from 0 to (count _compatibleBipods) do {
|
||||||
|
_compatibleBipods set [_i,toLower (_compatibleBipods select _i)];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_item in _compatibleMuzzles) exitWith {_found = true; _accessory = 1};
|
||||||
|
if (_item in _compatibleCows) exitWith {_found = true; _accessory = 3};
|
||||||
|
if (_item in _compatiblePointers) exitWith {_found = true; _accessory = 2};
|
||||||
|
if (_item in _compatibleBipods) exitWith {_found = true; _accessory = 6};
|
||||||
|
} forEach [(primaryWeapon player),(secondaryWeapon player),(handgunWeapon player)];
|
||||||
|
|
||||||
|
[_found,_slot,_accessory];
|
||||||
|
};
|
||||||
|
|
||||||
|
_fnc_dropEquipAccessories = {
|
||||||
|
|
||||||
|
_properties = call _fnc_findAccessorySlot;
|
||||||
|
_properties params ["_found","_slot","_accessory"];
|
||||||
|
|
||||||
|
if !_found exitWith {_return = 5};
|
||||||
|
|
||||||
|
_itemsPlayer = (primaryWeaponItems player + secondaryWeaponItems player + handgunItems player);
|
||||||
|
for "_i" from 0 to (count _itemsPlayer) do {
|
||||||
|
_itemsPlayer set [_i,toLower (_itemsPlayer select _i)];
|
||||||
|
};
|
||||||
|
|
||||||
|
_itemEquipped = _item in _itemsPlayer;
|
||||||
|
_equipped = (_loadout select _slot) select _accessory;
|
||||||
|
if (!_itemInInventory && !_itemEquipped) exitWith {_return = 3};
|
||||||
|
if (_equipped != "") then {
|
||||||
|
_equipped = (_loadout select _slot) select _accessory;
|
||||||
|
if (player canAdd _equipped) then {
|
||||||
|
(_loadout select _slot) set [_accessory,""];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
player addItem _equipped;
|
||||||
|
_return = 1;
|
||||||
|
} else {
|
||||||
|
if !(_drop) exitWith {_return = 4;};
|
||||||
|
_equipped call _fnc_dropItem;
|
||||||
|
(_loadout select _slot) set [_accessory,""];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
_return = 1;
|
||||||
|
};
|
||||||
|
if (((toLower _equipped) != (toLower _item)) || _forceEquip && _return != 4) then {
|
||||||
|
(_loadout select _slot) set [_accessory,_item];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
(_loadout select _slot) set [_accessory,_item];
|
||||||
|
player setUnitLoadout _loadout;
|
||||||
|
_return = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
player selectWeapon ((_loadout select _slot) select 0);
|
||||||
|
if (!EPOCH_fav_FastWeaponSwitching) then {
|
||||||
|
player playAction "reloadMagazine";
|
||||||
|
};
|
||||||
|
_return
|
||||||
|
/*
|
||||||
|
_slot = primary 0, second 1, hand 2
|
||||||
|
_accessory = silencer 1, laser 2, optics 3
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
//Main
|
||||||
|
switch _slot do {
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
[(primaryWeapon player),0] call _fnc_dropEquipWeapon;
|
||||||
|
};
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
[(secondaryWeapon player),1] call _fnc_dropEquipWeapon;
|
||||||
|
};
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
[(handgunWeapon player),2] call _fnc_dropEquipWeapon;
|
||||||
|
};
|
||||||
|
case 6: //accesories
|
||||||
|
{
|
||||||
|
_item call _fnc_dropEquipAccessories;
|
||||||
|
};
|
||||||
|
case 7: //toolbelt
|
||||||
|
{
|
||||||
|
if (_item in (assignedItems player)) then {
|
||||||
|
switch _item do {
|
||||||
|
case "ItemGPS":
|
||||||
|
{
|
||||||
|
//can't find a way to display it in A3
|
||||||
|
"Use [Right Ctrl] + M to toggle GPS" call epoch_message;
|
||||||
|
};
|
||||||
|
case "ItemMap":
|
||||||
|
{
|
||||||
|
openMap true;
|
||||||
|
};
|
||||||
|
case "ItemCompass":
|
||||||
|
{
|
||||||
|
//can't find a way to display it in A3
|
||||||
|
"Use [K] to toggle Compass" call epoch_message;
|
||||||
|
};
|
||||||
|
case "ItemWatch":
|
||||||
|
{
|
||||||
|
//can't find a way to display it in A3
|
||||||
|
"Use [O] to toggle watch" call epoch_message;
|
||||||
|
};
|
||||||
|
case default
|
||||||
|
{
|
||||||
|
//do stuff with radios here
|
||||||
|
if (_item in ["EpochRadio0","EpochRadio1","EpochRadio2","EpochRadio3","EpochRadio4","EpochRadio5","EpochRadio6","EpochRadio7","EpochRadio8","EpochRadio9"]) then {_item call EPOCH_custom_radioActions};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
_item call _fnc_dropAssign;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case 8: //headgear
|
||||||
|
{
|
||||||
|
(headgear player) call _fnc_dropAssign;
|
||||||
|
};
|
||||||
|
case 9: //hmd
|
||||||
|
{
|
||||||
|
(hmd player) call _fnc_dropAssign;
|
||||||
|
};
|
||||||
|
case 10: //bino
|
||||||
|
{
|
||||||
|
[(binocular player),8] call _fnc_dropEquipWeapon;
|
||||||
|
};
|
||||||
|
case 11: //goggles
|
||||||
|
{
|
||||||
|
(hmd player) call _fnc_dropAssign;
|
||||||
|
};
|
||||||
|
case 12: //mines
|
||||||
|
{
|
||||||
|
if (_itemInInventory) then {
|
||||||
|
_allMuzzles = getArray (configFile >> "CfgWeapons" >> "Put" >> "Muzzles");
|
||||||
|
|
||||||
|
_muzzle = "";
|
||||||
|
_found = false;
|
||||||
|
{
|
||||||
|
_mags = getArray (configFile >> "CfgWeapons" >> "Put" >> _x >> "magazines");
|
||||||
|
_muzzle = _x;
|
||||||
|
{
|
||||||
|
if (_x isEqualTo _item) exitWith {_found = true};
|
||||||
|
} forEach _mags;
|
||||||
|
if (_found) exitWith {};
|
||||||
|
} forEach _allMuzzles;
|
||||||
|
|
||||||
|
player playActionNow "PutDown";
|
||||||
|
player selectWeapon _muzzle;
|
||||||
|
player fire [_muzzle, _muzzle, _item];
|
||||||
|
player setWeaponReloadingTime [player, _muzzle, 0];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case 16: //Grenade launcher shells.
|
||||||
|
{
|
||||||
|
_equipped = (primaryWeaponMagazine player) param [1,""];
|
||||||
|
_equipped call _fnc_dropEquipShells;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_return
|
@ -28,6 +28,8 @@ private ["_bar","_bar_compare","_color","_colorCompare","_container","_display",
|
|||||||
//[[[end]]]
|
//[[[end]]]
|
||||||
disableSerialization;
|
disableSerialization;
|
||||||
|
|
||||||
|
[] spawn epoch_favBar_inventory;
|
||||||
|
|
||||||
EPOCH_InteractedItem = [];
|
EPOCH_InteractedItem = [];
|
||||||
params ["_unit","_targetContainer","_secondaryContainer"];
|
params ["_unit","_targetContainer","_secondaryContainer"];
|
||||||
EPOCH_targetContainer = _targetContainer;
|
EPOCH_targetContainer = _targetContainer;
|
||||||
|
75
Sources/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf
Normal file
75
Sources/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: Determines which gear slot item goes into
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_itemTypeSlot.sqf
|
||||||
|
|
||||||
|
Usage: _item call epoch_itemTypeSlot;
|
||||||
|
|
||||||
|
Returns: [INT]
|
||||||
|
0 - unknown
|
||||||
|
1 - Epoch items
|
||||||
|
2 - Magazines/Ammo
|
||||||
|
3 - Primary slot
|
||||||
|
4 - Secondary slot
|
||||||
|
5 - Handgun slot
|
||||||
|
6 - Weapon attachments
|
||||||
|
7 - assigned Items (use assignItem)
|
||||||
|
8 - Headgear (assignItem works)
|
||||||
|
9 - NVGoggles (assignItem works)
|
||||||
|
10 - Binocular (assignItem doesn't work)
|
||||||
|
11 - goggles (assignItem works)
|
||||||
|
12 - Mines
|
||||||
|
13 - Vests
|
||||||
|
14 - Uniforms
|
||||||
|
15 - Backpack
|
||||||
|
16 - smoke shells
|
||||||
|
17 - Grenades
|
||||||
|
17 - Unsure about these, modify script as required, but don't change existing structure
|
||||||
|
*/
|
||||||
|
private ["_item"];
|
||||||
|
params [["_item","",[""]]];
|
||||||
|
if (_item == "") exitWith {false};
|
||||||
|
|
||||||
|
(_item call BIS_fnc_itemType) params ["_cat","_type"]; //For missing types go to https://community.bistudio.com/wiki/BIS_fnc_itemType
|
||||||
|
|
||||||
|
if (_type == "UnknownMagazine") exitWith {1};
|
||||||
|
if (_type in ["Bullet","ShotgunShell","Flare"]) exitWith {2}; //Ammo
|
||||||
|
if (_type in ["MachineGun","AssaultRifle","SniperRifle","Rifle","SubmachineGun"]) exitWith {3}; //Primary Epoch
|
||||||
|
if (_type == "Throw") exitWith {4}; //secondary epoch
|
||||||
|
if (_type == "Handgun") exitWith {5}; //handgun epoch
|
||||||
|
if (_type in ["AccessoryMuzzle","AccessoryPointer","AccessorySights","AccessoryBipod"]) exitWith {6}; //accessories
|
||||||
|
if (_type in ["Compass","GPS","Map","Radio","Watch"]) exitWith {7}; //assignItem works
|
||||||
|
if (_type == "Headgear") exitWith {8}; //assignItem works
|
||||||
|
if (_type == "NVGoggles") exitWith {9}; //assignItem works
|
||||||
|
if (_type == "Binocular") exitWith {10}; //assignItem doesn't work
|
||||||
|
if (_type == "Glasses") exitWith {11}; //assignItem doesn't work
|
||||||
|
if (_cat == "Mine") exitWith {12};
|
||||||
|
if (_type == "Vest") exitWith {13};
|
||||||
|
if (_type == "Uniform") exitWith {14};
|
||||||
|
if (_type == "Backpack") exitWith {15};
|
||||||
|
if (_type in ["Shell","SmokeShell"]) exitWith {16}; //Smoke shells for GL
|
||||||
|
if (_type == "Grenade") exitWith {17};
|
||||||
|
|
||||||
|
//unsure
|
||||||
|
if (_type in ["Magazine","Shotgun","FirstAidKit","LaserDesignator","Medikit","MineDetector","Toolkit","VehicleWeapon","Unknown","UnknownEquipment","UnknownWeapon"]) exitWith {18};
|
||||||
|
|
||||||
|
0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -35,6 +35,11 @@ _keyMap =
|
|||||||
|
|
||||||
["Volume + (ctrl)","EPOCH_keysVolumeUp",0x0D],
|
["Volume + (ctrl)","EPOCH_keysVolumeUp",0x0D],
|
||||||
["Volume - (ctrl)","EPOCH_keysVolumeDown",0x0C],
|
["Volume - (ctrl)","EPOCH_keysVolumeDown",0x0C],
|
||||||
|
["Favorite Bar 1", "EPOCH_keysfav1", 0x02],
|
||||||
|
["Favorite Bar 2", "EPOCH_keysfav2", 0x03],
|
||||||
|
["Favorite Bar 3", "EPOCH_keysfav3", 0x04],
|
||||||
|
["Favorite Bar 4", "EPOCH_keysfav4", 0x05],
|
||||||
|
["Favorite Bar 5", "EPOCH_keysfav5", 0x06],
|
||||||
["Build: Mode 1", "EPOCH_keysBuildMode1", 2],
|
["Build: Mode 1", "EPOCH_keysBuildMode1", 2],
|
||||||
// ["Build: Mode 2", "EPOCH_keysBuildMode2", 3],
|
// ["Build: Mode 2", "EPOCH_keysBuildMode2", 3],
|
||||||
// ["Build: Direction", "EPOCH_keysBuildDir", 4],
|
// ["Build: Direction", "EPOCH_keysBuildDir", 4],
|
||||||
|
@ -162,6 +162,9 @@ if (EPOCH_debugMode) then {
|
|||||||
// player to player trade loop
|
// player to player trade loop
|
||||||
call EPOCH_TradeLoop;
|
call EPOCH_TradeLoop;
|
||||||
|
|
||||||
|
//Updates favorites bar
|
||||||
|
call epoch_favBar_refresh;
|
||||||
|
|
||||||
// blank out unused hud elements and prepare for next loop
|
// blank out unused hud elements and prepare for next loop
|
||||||
_hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1];
|
_hudIndex = missionNamespace getVariable [format["EPOCH_dynHUD_%1","topRight"],1];
|
||||||
for "_i" from _hudIndex to 9 do {
|
for "_i" from _hudIndex to 9 do {
|
||||||
|
31
Sources/epoch_code/customs/EPOCH_custom_radioActions.sqf
Normal file
31
Sources/epoch_code/customs/EPOCH_custom_radioActions.sqf
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: Activates code block within switch when certain radio is used from Favorites bar
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf
|
||||||
|
|
||||||
|
Usage: None by default, create your own actions here if you want
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch _this do {
|
||||||
|
case "EpochRadio0":{};
|
||||||
|
case "EpochRadio1":{};
|
||||||
|
case "EpochRadio2":{};
|
||||||
|
case "EpochRadio3":{};
|
||||||
|
case "EpochRadio4":{};
|
||||||
|
case "EpochRadio5":{};
|
||||||
|
case "EpochRadio6":{};
|
||||||
|
case "EpochRadio7":{};
|
||||||
|
case "EpochRadio8":{};
|
||||||
|
case "EpochRadio9":{};
|
||||||
|
default {};
|
||||||
|
};
|
||||||
|
|
||||||
|
true
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: manages actions when user presses favorites key
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_action.sqf
|
||||||
|
|
||||||
|
Usage: none
|
||||||
|
*/
|
||||||
|
private ["_item","_slot"];
|
||||||
|
params ["_dsp","_kee"];
|
||||||
|
|
||||||
|
_tileIdx = switch (_kee) do {
|
||||||
|
case EPOCH_keysfav1:{0};
|
||||||
|
case EPOCH_keysfav2:{1};
|
||||||
|
case EPOCH_keysfav3:{2};
|
||||||
|
case EPOCH_keysfav4:{3};
|
||||||
|
case EPOCH_keysfav5:{4};
|
||||||
|
};
|
||||||
|
|
||||||
|
_item = rmx_var_favBar_current select _tileIdx;
|
||||||
|
_itemHasInteraction = str(missionConfigFile >> "CfgItemInteractions" >> _item) != "";
|
||||||
|
|
||||||
|
if (_itemHasInteraction) then {
|
||||||
|
EPOCH_InteractedItem = ["",_item,""];
|
||||||
|
[] call EPOCH_consumeItem;
|
||||||
|
} else {
|
||||||
|
_slot = _item call epoch_itemTypeSlot;
|
||||||
|
_force = if (_slot in [3,4,5,7,8,10,11,16]) then {true} else {false}; //see how it works with other items, definitely keep true for weapons
|
||||||
|
_errorCode = [_item,EPOCH_fav_DropIfOverflow,_force] call epoch_equip;
|
||||||
|
player selectWeapon _item;
|
||||||
|
|
||||||
|
if (_slot in [3,4,5]) then {
|
||||||
|
_curSlot = _item call epoch_itemTypeSlot;
|
||||||
|
if (_curSlot == _slot && !EPOCH_fav_FastWeaponSwitching && _errorCode in [1,2]) then {player playAction "reloadMagazine";};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_errorCode isEqualTo 2) then {"Not enough space, item dropped on the ground!" call epoch_message;};
|
||||||
|
if (_errorCode isEqualTo 4 && _item != (currentWeapon player)) then {"Not enough space!" call epoch_message;};
|
||||||
|
if (_errorCode isEqualTo 3) then {"Item not found!" call epoch_message;};
|
||||||
|
if (_errorCode isEqualTo 5) then {"No compatible weapon found!" call epoch_message;};
|
||||||
|
};
|
||||||
|
|
||||||
|
true
|
138
Sources/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf
Normal file
138
Sources/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: manages drawing of favbar changes
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_draw.sqf
|
||||||
|
|
||||||
|
Usage: none
|
||||||
|
*/
|
||||||
|
disableSerialization;
|
||||||
|
|
||||||
|
params ["_action","_idx","_bidx","_mod"];
|
||||||
|
|
||||||
|
switch _action do {
|
||||||
|
case "load":
|
||||||
|
{
|
||||||
|
rmx_var_favBar_MNone = profileNamespace getVariable ["rmx_var_favBar_MNone",["","","","",""]];
|
||||||
|
rmx_var_favBar_MCtrl = profileNamespace getVariable ["rmx_var_favBar_MCtrl",["","","","",""]];
|
||||||
|
rmx_var_favBar_MShift = profileNamespace getVariable ["rmx_var_favBar_MShift",["","","","",""]];
|
||||||
|
rmx_var_favBar_MAlt = profileNamespace getVariable ["rmx_var_favBar_MAlt",["","","","",""]];
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MNone;
|
||||||
|
|
||||||
|
waitUntil {uiSleep 0.1; ctrlShown (["fav_equipped", 1] call epoch_getHUDCtrl)};
|
||||||
|
|
||||||
|
_tmp = ctrlPosition (["fav_pic_bg", 1] call epoch_getHUDCtrl);
|
||||||
|
|
||||||
|
for "_i" from 1 to 5 do {
|
||||||
|
_c = (["fav_equipped", _i] call epoch_getHUDCtrl);
|
||||||
|
_c ctrlSetText "#(rgb,8,8,3)color(1,1,1,0.7)";
|
||||||
|
_p = ctrlPosition _c;
|
||||||
|
_p set [2, (_tmp select 2)/10];
|
||||||
|
_p set [3, (_tmp select 3)/10];
|
||||||
|
_c ctrlSetPosition _p;
|
||||||
|
_c ctrlCommit 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
"draw_current" call epoch_favBar_draw;
|
||||||
|
call epoch_favBar_refresh;
|
||||||
|
};
|
||||||
|
case "draw_current":
|
||||||
|
{
|
||||||
|
for "_i" from 0 to 4 do {
|
||||||
|
_c = (["fav_pic", _i+1] call epoch_getHUDCtrl);
|
||||||
|
_c ctrlSetText ((rmx_var_favBar_current select _i) call EPOCH_itemPicture);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case "add":
|
||||||
|
{
|
||||||
|
if (rmx_var_favBar_Item in rmx_var_favBar_current) exitWith {"Item already exists in favorites!" call epoch_message; false}; //if duplicate
|
||||||
|
|
||||||
|
_type = (rmx_var_favBar_Item call BIS_fnc_itemType) select 1;
|
||||||
|
_isBanned = _type in ["BombLauncher", "Cannon", "GrenadeLauncher", "Launcher", "MissileLauncher", "RocketLauncher", "Magazine", "Mortar", "Shotgun","Rocket","Grenade"];
|
||||||
|
_isAmmo = _type == "Bullet" && !(rmx_var_favBar_Item in ["EnergyPack","EnergyPackLg"]);
|
||||||
|
_isChemlight = rmx_var_favBar_Item in ["Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"];
|
||||||
|
|
||||||
|
//if (_type in ["AccessoryMuzzle","AccessoryPointer","AccessorySights","AccessoryBipod"]) exitWith {"Attachments are not supported at the moment!" call epoch_message; false};
|
||||||
|
if (_isBanned || _isAmmo || _isChemlight) exitWith {"Item cannot be added to favorites!" call epoch_message; false}; //Don't allow certain types
|
||||||
|
|
||||||
|
_itemIsWeapon = [rmx_var_favBar_Item, "CfgWeapons"] call EPOCH_fnc_isAny;
|
||||||
|
_itemHasInteraction = str(missionConfigFile >> "CfgItemInteractions" >> rmx_var_favBar_Item) != "";
|
||||||
|
|
||||||
|
if (!_itemIsWeapon && !_itemHasInteraction && rmx_var_favBar_Item == "") exitWith {"Please equip item first and try again!" call epoch_message; false}; //Workaround
|
||||||
|
|
||||||
|
rmx_var_favBar_current set [_idx,rmx_var_favBar_Item];
|
||||||
|
|
||||||
|
switch EPOCH_modKeys do {
|
||||||
|
case [true,false,false]: //shift
|
||||||
|
{
|
||||||
|
rmx_var_favBar_MShift set [_idx,rmx_var_favBar_Item];
|
||||||
|
profileNamespace setVariable ["rmx_var_favBar_MShift",rmx_var_favBar_MShift];
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MShift;
|
||||||
|
};
|
||||||
|
case [false,true,false]: //Ctrl
|
||||||
|
{
|
||||||
|
rmx_var_favBar_MCtrl set [_idx,rmx_var_favBar_Item];
|
||||||
|
profileNamespace setVariable ["rmx_var_favBar_MCtrl",rmx_var_favBar_MCtrl];
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MCtrl;
|
||||||
|
};
|
||||||
|
case [false,false,true]: //Alt
|
||||||
|
{
|
||||||
|
rmx_var_favBar_MAlt set [_idx,rmx_var_favBar_Item];
|
||||||
|
profileNamespace setVariable ["rmx_var_favBar_MAlt",rmx_var_favBar_MAlt];
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MAlt;
|
||||||
|
};
|
||||||
|
default { //Any other combo or no modifier
|
||||||
|
rmx_var_favBar_MNone set [_idx,rmx_var_favBar_Item];
|
||||||
|
profileNamespace setVariable ["rmx_var_favBar_MNone",rmx_var_favBar_MNone];
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MNone;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
//draw current here
|
||||||
|
if !(rmx_var_favBar_Item isEqualTo "") then {
|
||||||
|
_c = (["fav_pic", _idx+1] call epoch_getHUDCtrl);
|
||||||
|
_c ctrlSetText (rmx_var_favBar_Item call EPOCH_itemPicture);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case "remove":
|
||||||
|
{
|
||||||
|
if (_bidx == 1) then { //if right mouse click
|
||||||
|
rmx_var_favBar_current set [_idx,""];
|
||||||
|
_c = (["fav_pic", _idx+1] call epoch_getHUDCtrl);
|
||||||
|
_c ctrlSetText "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
case "modifier":
|
||||||
|
{
|
||||||
|
switch EPOCH_modKeys do {
|
||||||
|
case [true,false,false]: //shift
|
||||||
|
{
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MShift;
|
||||||
|
};
|
||||||
|
case [false,true,false]: //Ctrl
|
||||||
|
{
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MCtrl;
|
||||||
|
};
|
||||||
|
case [false,false,true]: //Alt
|
||||||
|
{
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MAlt;
|
||||||
|
};
|
||||||
|
default { //Any other combo or no modifier
|
||||||
|
rmx_var_favBar_current = rmx_var_favBar_MNone;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
'draw_current' call epoch_favBar_draw;
|
||||||
|
call epoch_favBar_refresh;
|
||||||
|
};
|
||||||
|
default {systemChat "fail"};
|
||||||
|
};
|
||||||
|
|
||||||
|
for "_i" from 1 to 5 do {
|
||||||
|
(["fav_pic_bg", _i] call epoch_getHUDCtrl) ctrlSetText "x\addons\a3_epoch_code\Data\UI\favbar\fav_bg.paa";
|
||||||
|
};
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: no use outside favbar probably. Weapons return display names only, so this hack allows getting their className
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_getGearItem.sqf
|
||||||
|
|
||||||
|
Usage: none
|
||||||
|
|
||||||
|
RETURNS: classname for item in inventory
|
||||||
|
*/
|
||||||
|
(_this select 1 select 0) params ["_dispName","_idx","_className"];
|
||||||
|
_return = "";
|
||||||
|
|
||||||
|
if (_className isEqualTo "") then { //do itemsWithMagazines instead
|
||||||
|
|
||||||
|
{
|
||||||
|
_txt = getText (configFile >> "CfgWeapons" >> _x >> "displayName");
|
||||||
|
if (_txt isEqualTo _dispName) exitWith {_return = _x};
|
||||||
|
} forEach (items player);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
_return = _className;
|
||||||
|
};
|
||||||
|
|
||||||
|
_return
|
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: Returns className of an item or weapon from inventory IDC
|
||||||
|
This function has no practical use outside of Favorite Bar menu due to IDC used as a case
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_getItemByIDC.sqf
|
||||||
|
|
||||||
|
Usage: none
|
||||||
|
*/
|
||||||
|
|
||||||
|
//switch
|
||||||
|
|
||||||
|
_item = switch (_this) do {
|
||||||
|
case 610: //Primary
|
||||||
|
{
|
||||||
|
primaryWeapon player
|
||||||
|
};
|
||||||
|
case 620: //Primary silencer
|
||||||
|
{
|
||||||
|
(primaryWeaponItems player) select 0
|
||||||
|
};
|
||||||
|
case 621: //Primary Optic (TWS)
|
||||||
|
{
|
||||||
|
(primaryWeaponItems player) select 2
|
||||||
|
};
|
||||||
|
case 622: //Primary Flashlight/Laser
|
||||||
|
{
|
||||||
|
(primaryWeaponItems player) select 1
|
||||||
|
};
|
||||||
|
case 641: //Primary bipod
|
||||||
|
{
|
||||||
|
(primaryWeaponItems player) select 3
|
||||||
|
};
|
||||||
|
case 644: //Primary Grenade shell
|
||||||
|
{
|
||||||
|
_ammo = primaryWeaponMagazine player;
|
||||||
|
_cnt = count _ammo;
|
||||||
|
if (_cnt > 0) then {
|
||||||
|
if (_cnt > 1) then {
|
||||||
|
_ammo select 1
|
||||||
|
} else {
|
||||||
|
_ammo select 0
|
||||||
|
};
|
||||||
|
} else {""};
|
||||||
|
};
|
||||||
|
case 623: //Primary Magazine
|
||||||
|
{
|
||||||
|
_ammo = primaryWeaponMagazine player;
|
||||||
|
_cnt = count _ammo;
|
||||||
|
if (_cnt > 0) then {
|
||||||
|
_ammo select 0
|
||||||
|
} else {""};
|
||||||
|
};
|
||||||
|
case 611: //Secondary
|
||||||
|
{
|
||||||
|
secondaryWeapon player
|
||||||
|
};
|
||||||
|
case 624: //Secondary silencer
|
||||||
|
{
|
||||||
|
(secondaryWeaponItems player) select 0
|
||||||
|
};
|
||||||
|
case 625: //Secondary Optic (TWS)
|
||||||
|
{
|
||||||
|
(secondaryWeaponItems player) select 2
|
||||||
|
};
|
||||||
|
case 626: //Secondary Flashlight/Laser
|
||||||
|
{
|
||||||
|
(secondaryWeaponItems player) select 1
|
||||||
|
};
|
||||||
|
case 642: //Secondary bipod
|
||||||
|
{
|
||||||
|
(secondaryWeaponItems player) select 3
|
||||||
|
};
|
||||||
|
case 627: //Secondary Magazine
|
||||||
|
{
|
||||||
|
_ammo = secondaryWeaponMagazine player;
|
||||||
|
_cnt = count _ammo;
|
||||||
|
if (_cnt > 0) then {
|
||||||
|
_ammo select 0
|
||||||
|
} else {""};
|
||||||
|
};
|
||||||
|
case 612: //Handgun
|
||||||
|
{
|
||||||
|
handgunWeapon player
|
||||||
|
};
|
||||||
|
case 628: //Handgun silencer
|
||||||
|
{
|
||||||
|
(handgunItems player) select 0
|
||||||
|
};
|
||||||
|
case 629: //Handgun Optic (TWS)
|
||||||
|
{
|
||||||
|
(handgunItems player) select 2
|
||||||
|
};
|
||||||
|
case 630: //Handgun Flashlight/Laser
|
||||||
|
{
|
||||||
|
(handgunItems player) select 1
|
||||||
|
};
|
||||||
|
case 643: //Handgun bipod
|
||||||
|
{
|
||||||
|
(handgunItems player) select 3
|
||||||
|
};
|
||||||
|
case 631: //Handgun Magazine
|
||||||
|
{
|
||||||
|
_ammo = handgunMagazine player;
|
||||||
|
_cnt = count _ammo;
|
||||||
|
if (_cnt > 0) then {
|
||||||
|
_ammo select 0
|
||||||
|
} else {""};
|
||||||
|
};
|
||||||
|
case 6240: //headgear
|
||||||
|
{
|
||||||
|
headgear player;
|
||||||
|
};
|
||||||
|
case 6216: //goggles
|
||||||
|
{
|
||||||
|
goggles player;
|
||||||
|
};
|
||||||
|
case 6217: //hmd
|
||||||
|
{
|
||||||
|
hmd player;
|
||||||
|
};
|
||||||
|
case 6238: //goggles
|
||||||
|
{
|
||||||
|
binocular player;
|
||||||
|
};
|
||||||
|
default {""};
|
||||||
|
};
|
||||||
|
|
||||||
|
_item
|
104
Sources/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf
Normal file
104
Sources/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: loaded every time Gear menu is opened
|
||||||
|
|
||||||
|
|
||||||
|
Developer's FYI:
|
||||||
|
To increase amount of favorite bars you need to edit:
|
||||||
|
CfgDynamicHUD.hpp - increase array sizes for fav_*, maybe even width/height
|
||||||
|
EPOCH_clientKeyMap.sqf - add keys to keymap array
|
||||||
|
EPOCH_keyDown.sqf - add new keys to dikCode check array
|
||||||
|
epoch_favBar_action.sqf - add tile indexes for new keymaps
|
||||||
|
epoch_favBar_draw.sqf - increase FOR loop accordingly
|
||||||
|
epoch_favBar_refresh.sqf - increase FOR loop accordingly
|
||||||
|
THIS script - increase FOR loop accordingly
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_inventory.sqf
|
||||||
|
|
||||||
|
Usage: none
|
||||||
|
*/
|
||||||
|
//TODO: Maybe - spawn IDC cleanup thread, wait until display closes
|
||||||
|
if !(EPOCH_fav_enableFavoriteBar) exitWith {false};
|
||||||
|
disableSerialization;
|
||||||
|
waitUntil {!isNull findDisplay 602};
|
||||||
|
|
||||||
|
_display = (findDisplay 602);
|
||||||
|
_display displayAddEventHandler ["MouseButtonUp","[] spawn {rmx_var_fav_selected = false}"];
|
||||||
|
rmx_var_fav_selected = false;
|
||||||
|
{
|
||||||
|
_c = _display displayCtrl _x;
|
||||||
|
_c ctrlAddEventHandler ["LBDrag","rmx_var_favBar_Item = (_this call epoch_favBar_getGearItem); rmx_var_fav_selected = true"];
|
||||||
|
} forEach [619,638,633];
|
||||||
|
// call epoch_getGearItem;
|
||||||
|
//(_this select 1 select 0 select 2)
|
||||||
|
{
|
||||||
|
_c = _display displayCtrl _x;
|
||||||
|
_c ctrlAddEventHandler ["MouseButtonDown",(format ["'modifier' spawn epoch_favBar_draw; rmx_var_favBar_Item = %1 call epoch_favBar_getItemByIDC; rmx_var_fav_selected = true",_x])];
|
||||||
|
} forEach [610,620,641,622,621,644,623,611,624,642,626,625,627,612,628,643,630,629,631,6240,6216,6217,6238];
|
||||||
|
|
||||||
|
_gIdx = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
if ((_x select 0) isEqualTo "fav_pic") exitWith {_gIdx = _forEachIndex};
|
||||||
|
} forEach rmx_var_dynamicHUD_groupCTRL;
|
||||||
|
|
||||||
|
_g = _display ctrlCreate ["rmx_rscControlsGroup",125342];
|
||||||
|
_g ctrlSetPosition (ctrlPosition (rmx_var_dynamicHUD_groups select _gIdx));
|
||||||
|
_g ctrlCommit 0;
|
||||||
|
for "_i" from 0 to 4 do {
|
||||||
|
|
||||||
|
_c = _display ctrlCreate ["RscPictureKeepAspect",125342+_i,_g];
|
||||||
|
_c ctrlSetPosition (ctrlPosition (["fav_pic", _i + 1] call epoch_getHUDCtrl));
|
||||||
|
_c ctrlSetText "#(rgb,8,8,3)color(1,1,1,0.1)";
|
||||||
|
_c ctrlCommit 0;
|
||||||
|
_c ctrlSetEventHandler ["MouseButtonUp",format["['remove',%1,(_this select 1)] call epoch_favBar_draw;",_i]];
|
||||||
|
_c ctrlSetEventHandler ["MouseEnter",format ["if (rmx_var_fav_selected) then {['add',%1] call epoch_favBar_draw; rmx_var_fav_dragging = false}",_i]];
|
||||||
|
_c ctrlEnable true;
|
||||||
|
|
||||||
|
_c = _display ctrlCreate ["RscPictureKeepAspect",125342+_i,_g];
|
||||||
|
_c ctrlSetPosition (ctrlPosition (["fav_pic_bg", _i + 1] call epoch_getHUDCtrl));
|
||||||
|
_c ctrlSetText "x\addons\a3_epoch_code\Data\UI\favbar\fav_bg2.paa";
|
||||||
|
_c ctrlSetTextColor [0,0,0,0.5];
|
||||||
|
_c ctrlCommit 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
for "_i" from 1 to 5 do {
|
||||||
|
(["fav_keymap", _i] call epoch_getHUDCtrl) ctrlShow true;
|
||||||
|
(["fav_pic_bg", _i] call epoch_getHUDCtrl) ctrlShow true;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
_crl = _display displayCtrl _x;
|
||||||
|
_c = _display ctrlCreate ["RscText",1253422+_forEachIndex];
|
||||||
|
_c ctrlSetPosition (ctrlPosition _crl);
|
||||||
|
_c ctrlSetText (format ["%2",ctrlClassName _crl, _x]);
|
||||||
|
_c ctrlCommit 0;
|
||||||
|
}foreach [610,620,641,622,621,644,623,611,624,642,626,625,627,612,628,643,630,629,631,6240,6216,6217,6238];
|
||||||
|
*/
|
||||||
|
//Listboxes?
|
||||||
|
//6325,1241
|
||||||
|
//619,638,633
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
Author: Raimonds Virtoss - EpochMod.com
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Description: This is called by event1.sqf every 1 second as well as every time mod key is pressed.
|
||||||
|
|
||||||
|
Licence:
|
||||||
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||||
|
|
||||||
|
Github:
|
||||||
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/favBar/epoch_favBar_refresh.sqf
|
||||||
|
|
||||||
|
Usage: none
|
||||||
|
*/
|
||||||
|
|
||||||
|
if !(EPOCH_fav_enableFavoriteBar) exitWith {false};
|
||||||
|
|
||||||
|
_playerItems = itemsWithMagazines player;
|
||||||
|
_equipped = [primaryWeapon player, secondaryWeapon player, handgunWeapon player, headgear player, goggles player, hmd player, binocular player];
|
||||||
|
_equipped append (primaryWeaponItems player + primaryWeaponMagazine player + secondaryWeaponItems player + secondaryWeaponMagazine player + handgunItems player + handgunMagazine player);
|
||||||
|
_equipped append (assignedItems player);
|
||||||
|
|
||||||
|
_mod = switch EPOCH_modKeys do {
|
||||||
|
case [true,false,false]: {"Shift + "};
|
||||||
|
case [false,true,false]: {"Ctrl + "};
|
||||||
|
case [false,false,true]: {"Alt + "};
|
||||||
|
default {""};
|
||||||
|
};
|
||||||
|
|
||||||
|
for "_i" from 1 to 5 do {
|
||||||
|
_txt = missionNamespace getVariable [format["EPOCH_keysfav%1",_i],"N/A"];
|
||||||
|
(["fav_keymap", _i] call epoch_getHUDCtrl) ctrlSetText (_mod + (_txt call BIS_fnc_keyCode));
|
||||||
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
if (_x != "") then {
|
||||||
|
(["fav_pic_bg", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow true;
|
||||||
|
(["fav_keymap", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow true;
|
||||||
|
|
||||||
|
if (_x in _playerItems) then {
|
||||||
|
(["fav_pic", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlSetTextColor [1,1,1,1];
|
||||||
|
} else {
|
||||||
|
(["fav_pic", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlSetTextColor [1,0,0,1];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_x in _equipped) then {
|
||||||
|
(["fav_pic", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlSetTextColor [1,1,1,1];
|
||||||
|
(["fav_equipped", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow true;
|
||||||
|
} else {
|
||||||
|
(["fav_equipped", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
(["fav_equipped", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false;
|
||||||
|
|
||||||
|
if (isNull findDisplay 602) then {
|
||||||
|
(["fav_pic_bg", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false;
|
||||||
|
(["fav_keymap", _forEachIndex + 1] call epoch_getHUDCtrl) ctrlShow false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}forEach rmx_var_favBar_current;
|
@ -60,6 +60,17 @@ rmx_var_drag_MouseDown = false;
|
|||||||
rmx_var_dynamicHUD_groups = [];
|
rmx_var_dynamicHUD_groups = [];
|
||||||
rmx_var_dynamicHUD_groupCTRL = [];
|
rmx_var_dynamicHUD_groupCTRL = [];
|
||||||
|
|
||||||
|
//Favorites bar
|
||||||
|
rmx_var_favBar_Item = "";
|
||||||
|
EPOCH_modKeys = [false,false,false];
|
||||||
|
|
||||||
|
//If disabled, players will not be able to use favorite bar
|
||||||
|
EPOCH_fav_enableFavoriteBar = true;
|
||||||
|
//If enabled, same slot weapons from favorites bar are equipped instantly, otherwise reload action is played (recommended for immersion)
|
||||||
|
EPOCH_fav_FastWeaponSwitching = false;
|
||||||
|
//If enabled and inventory full, equipped weapon will be dropped on ground in favor for the new selected weapon, otherwise action will fail with message and weapon will not be equipped
|
||||||
|
EPOCH_fav_DropIfOverflow = false;
|
||||||
|
|
||||||
["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler;
|
["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler;
|
||||||
|
|
||||||
// Custom Keys
|
// Custom Keys
|
||||||
@ -76,4 +87,11 @@ call EPOCH_clientInit;
|
|||||||
[] execFSM "epoch_code\system\SPVEH.fsm";
|
[] execFSM "epoch_code\system\SPVEH.fsm";
|
||||||
[] execFSM "epoch_code\system\player_login.fsm";
|
[] execFSM "epoch_code\system\player_login.fsm";
|
||||||
|
|
||||||
|
//Start processing right after Loading screen is done and game has started
|
||||||
|
[] spawn {
|
||||||
|
waitUntil {!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")};
|
||||||
|
'load' call epoch_favBar_draw;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
true
|
true
|
||||||
|
@ -168,6 +168,8 @@ class CfgClientFunctions
|
|||||||
class maxArmorInit {};
|
class maxArmorInit {};
|
||||||
class initUI {};
|
class initUI {};
|
||||||
class refeshUI {};
|
class refeshUI {};
|
||||||
|
class equip {};
|
||||||
|
class itemTypeSlot {};
|
||||||
};
|
};
|
||||||
class servicepoint
|
class servicepoint
|
||||||
{
|
{
|
||||||
@ -192,6 +194,7 @@ class CfgClientFunctions
|
|||||||
class custom_EH_Take {};
|
class custom_EH_Take {};
|
||||||
class custom_KeyMap {};
|
class custom_KeyMap {};
|
||||||
class custom_OnEachFrame {};
|
class custom_OnEachFrame {};
|
||||||
|
class custom_radioActions {};
|
||||||
};
|
};
|
||||||
class messaging
|
class messaging
|
||||||
{
|
{
|
||||||
@ -316,6 +319,15 @@ class CfgClientFunctions
|
|||||||
class gui3DModelPos {};
|
class gui3DModelPos {};
|
||||||
class gui3DModelPosEH {};
|
class gui3DModelPosEH {};
|
||||||
};
|
};
|
||||||
|
class favBar {
|
||||||
|
file = "epoch_code\gui\scripts\favBar";
|
||||||
|
class favBar_draw {};
|
||||||
|
class favBar_refresh {};
|
||||||
|
class favBar_action{};
|
||||||
|
class favBar_getItemByIDC {};
|
||||||
|
class favBar_inventory {};
|
||||||
|
class favBar_getGearItem {};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class rmx_dynamicHUD
|
|||||||
{
|
{
|
||||||
class topRight
|
class topRight
|
||||||
{
|
{
|
||||||
classname = "RscPicture";
|
classname = "RscPictureKeepAspect";
|
||||||
defaultPos = 2;
|
defaultPos = 2;
|
||||||
defaultPopulate = 1;
|
defaultPopulate = 1;
|
||||||
arraySize = 10;
|
arraySize = 10;
|
||||||
@ -56,14 +56,41 @@ class rmx_dynamicHUD
|
|||||||
angle[] = {-5,0.5,0.5,0.5};
|
angle[] = {-5,0.5,0.5,0.5};
|
||||||
scale[] = {1,0.05};
|
scale[] = {1,0.05};
|
||||||
};
|
};
|
||||||
class botcenter
|
class fav_pic_bg
|
||||||
|
{
|
||||||
|
classname = "RscPictureKeepAspect";
|
||||||
|
defaultPos = 7;
|
||||||
|
defaultPopulate = 0;
|
||||||
|
arraySize = 5;
|
||||||
|
width = 4;
|
||||||
|
height = 4;
|
||||||
|
};
|
||||||
|
class fav_pic
|
||||||
|
{
|
||||||
|
classname = "RscPictureKeepAspect";
|
||||||
|
defaultPos = 7;
|
||||||
|
defaultPopulate = 0;
|
||||||
|
arraySize = 5;
|
||||||
|
width = 4;
|
||||||
|
height = 4;
|
||||||
|
};
|
||||||
|
class fav_equipped
|
||||||
{
|
{
|
||||||
classname = "RscPicture";
|
classname = "RscPicture";
|
||||||
defaultPos = 7;
|
defaultPos = 7;
|
||||||
defaultPopulate = 4;
|
defaultPopulate = 0;
|
||||||
arraySize = 9;
|
arraySize = 5;
|
||||||
width = 5;
|
width = 4;
|
||||||
height = 5;
|
height = 4;
|
||||||
|
};
|
||||||
|
class fav_keymap
|
||||||
|
{
|
||||||
|
classname = "fav_keymap";
|
||||||
|
defaultPos = 7;
|
||||||
|
defaultPopulate = 0;
|
||||||
|
arraySize = 5;
|
||||||
|
width = 4;
|
||||||
|
height = 1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user