From e06e7a2a51b1424480db4592554f803f7f74afcc Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 1 Apr 2015 18:48:46 +0200 Subject: [PATCH 01/10] Added a function that will add the passed item to the unit or place it in a ground holder if the unit has no space. --- addons/common/XEH_preInit.sqf | 1 + .../common/functions/fnc_addToInventory.sqf | 64 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 addons/common/functions/fnc_addToInventory.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 2a20c69bcb..46271c8d7f 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -11,6 +11,7 @@ PREP(addLineToDebugDraw); PREP(addMapMarkerCreatedEventHandler); PREP(addScrollWheelEventHandler); PREP(addSetting); +PREP(addToInventory); PREP(adminKick); PREP(ambientBrightness); PREP(applyForceWalkStatus); diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf new file mode 100644 index 0000000000..4ead75ef54 --- /dev/null +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -0,0 +1,64 @@ +/* + * Author: Garth 'L-H' de Wet + * Adds an item,weapon,magazine to the unit's inventory + * or places it in a weaponHolder if no space. + * + * Arguments: + * 0: Unit (OBJECT) + * 1: Classname (String) + * 2: Type (String) + * + * Return Value: + * Array: + * 0: Added to player (Bool) + * 1: weaponholder (OBJECT) + * + * Public: Yes + */ +#include "script_component.hpp" + +EXPLODE_3_PVT(_this,_unit,_classname,_type); +private "_addedToPlayer"; +_addedToPlayer = true; + +switch (_type) do { + case "weapon": { + if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; + if (_unit canAdd _classname) then { + _unit addWeaponGlobal _classname; + } else { + _addedToPlayer = false; + _pos = _unit modelToWorld [0,1,0.05]; + _unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"]; + _unit addWeaponCargoGlobal [_classname,1]; + _unit setPosATL _pos; + }; + }; + case "magazine": { + if (!isClass(ConfigFile >> "CfgMagazines" >> _classname)) exitWith {}; + if (_unit canAdd _classname) then { + _unit addMagazineGlobal _classname; + } else { + _addedToPlayer = false; + _pos = _unit modelToWorld [0,1,0.05]; + _unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"]; + _unit addMagazineCargoGlobal [_classname, 1]; + _unit setPosATL _pos; + }; + }; + case "item": { + if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; + if (_unit canAdd _classname) then { + _unit addItem _classname; + } else { + _addedToPlayer = false; + _pos = _unit modelToWorld [0,1,0.05]; + _unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"]; + _unit addItemCargoGlobal [_classname,1]; + _unit setPosATL _pos; + }; + }; + default {diag_log format ["ACE: Incorrect item type passed to %1, passed: %2",QFUNC(AddToInventory),_type];}; +}; + +[_addedToPlayer,_unit] From 46284622b30c240ae0e72810f86431998043fdb5 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:20:24 -0700 Subject: [PATCH 02/10] Optional container variable for adding item to a specific container (vest/backpack/uniform) --- .../common/functions/fnc_addToInventory.sqf | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 4ead75ef54..7353b0d5b4 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -7,6 +7,7 @@ * 0: Unit (OBJECT) * 1: Classname (String) * 2: Type (String) + * 3: Container (String, Optional) * * Return Value: * Array: @@ -19,12 +20,32 @@ EXPLODE_3_PVT(_this,_unit,_classname,_type); private "_addedToPlayer"; +private "_container"; +private "_canAdd"; + +_canAdd = false; _addedToPlayer = true; +if((count _this) > 3) then { + _container = _this select 4; +} else { + _container = nil; +}; + +if(!isNil "_container" && _type != "weapon") then { + switch (_container) do { + case "vest": { _canAdd = _unit canAddItemToVest _classname; }; + case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; + case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; + }; +} else { + _canAdd = _unit canAdd _classname; +}; + switch (_type) do { case "weapon": { if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; - if (_unit canAdd _classname) then { + if (_canAdd) then { _unit addWeaponGlobal _classname; } else { _addedToPlayer = false; @@ -36,7 +57,7 @@ switch (_type) do { }; case "magazine": { if (!isClass(ConfigFile >> "CfgMagazines" >> _classname)) exitWith {}; - if (_unit canAdd _classname) then { + if (_canAdd) then { _unit addMagazineGlobal _classname; } else { _addedToPlayer = false; @@ -48,7 +69,7 @@ switch (_type) do { }; case "item": { if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; - if (_unit canAdd _classname) then { + if (_canAdd) then { _unit addItem _classname; } else { _addedToPlayer = false; From 37bbbc607f61d998292103bc37eb2438d4c6af95 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:20:58 -0700 Subject: [PATCH 03/10] derp. --- addons/common/functions/fnc_addToInventory.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 7353b0d5b4..61bb654148 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -27,7 +27,7 @@ _canAdd = false; _addedToPlayer = true; if((count _this) > 3) then { - _container = _this select 4; + _container = _this select 3; } else { _container = nil; }; From c3f915a0acec0bb90bd04459a722dc817cb89e05 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:22:27 -0700 Subject: [PATCH 04/10] tabs because --- addons/common/functions/fnc_addToInventory.sqf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 61bb654148..099fa420da 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -27,19 +27,19 @@ _canAdd = false; _addedToPlayer = true; if((count _this) > 3) then { - _container = _this select 3; + _container = _this select 3; } else { - _container = nil; + _container = nil; }; if(!isNil "_container" && _type != "weapon") then { - switch (_container) do { - case "vest": { _canAdd = _unit canAddItemToVest _classname; }; - case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; - case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; - }; + switch (_container) do { + case "vest": { _canAdd = _unit canAddItemToVest _classname; }; + case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; + case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; + }; } else { - _canAdd = _unit canAdd _classname; + _canAdd = _unit canAdd _classname; }; switch (_type) do { From ec6fb6fcb828a1b83d7367b2fd3f4eb7d941f682 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:34:16 -0700 Subject: [PATCH 05/10] containerize. --- .../common/functions/fnc_addToInventory.sqf | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 099fa420da..98f61d6661 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -46,7 +46,12 @@ switch (_type) do { case "weapon": { if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; if (_canAdd) then { - _unit addWeaponGlobal _classname; + switch (_container) do { + case "vest": { (vestContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; + case "backpack": { (backpackContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; + case "uniform": { (uniformContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; + default { _unit addWeaponGlobal _classname; }; + }; } else { _addedToPlayer = false; _pos = _unit modelToWorld [0,1,0.05]; @@ -58,7 +63,12 @@ switch (_type) do { case "magazine": { if (!isClass(ConfigFile >> "CfgMagazines" >> _classname)) exitWith {}; if (_canAdd) then { - _unit addMagazineGlobal _classname; + switch (_container) do { + case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; + case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; + case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; + default { _unit addMagazineGlobal _classname; }; + }; } else { _addedToPlayer = false; _pos = _unit modelToWorld [0,1,0.05]; @@ -70,7 +80,12 @@ switch (_type) do { case "item": { if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; if (_canAdd) then { - _unit addItem _classname; + switch (_container) do { + case "vest": { _unit addItemToVest _classname; }; + case "backpack": { _unit addItemToBackpack _classname; }; + case "uniform": { _unit addItemToUniform _classname; }; + default { _unit addItem _classname; }; + }; } else { _addedToPlayer = false; _pos = _unit modelToWorld [0,1,0.05]; From de920e8874a1a473885c731070d2811c70e70acf Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:34:38 -0700 Subject: [PATCH 06/10] Final cleanup. --- .../common/functions/fnc_addToInventory.sqf | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 98f61d6661..ce9f12edb8 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -47,11 +47,11 @@ switch (_type) do { if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; if (_canAdd) then { switch (_container) do { - case "vest": { (vestContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; - case "backpack": { (backpackContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; - case "uniform": { (uniformContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; - default { _unit addWeaponGlobal _classname; }; - }; + case "vest": { (vestContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; + case "backpack": { (backpackContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; + case "uniform": { (uniformContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; + default { _unit addWeaponGlobal _classname; }; + }; } else { _addedToPlayer = false; _pos = _unit modelToWorld [0,1,0.05]; @@ -64,11 +64,11 @@ switch (_type) do { if (!isClass(ConfigFile >> "CfgMagazines" >> _classname)) exitWith {}; if (_canAdd) then { switch (_container) do { - case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - default { _unit addMagazineGlobal _classname; }; - }; + case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; + case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; + case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; + default { _unit addMagazineGlobal _classname; }; + }; } else { _addedToPlayer = false; _pos = _unit modelToWorld [0,1,0.05]; @@ -81,11 +81,11 @@ switch (_type) do { if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; if (_canAdd) then { switch (_container) do { - case "vest": { _unit addItemToVest _classname; }; - case "backpack": { _unit addItemToBackpack _classname; }; - case "uniform": { _unit addItemToUniform _classname; }; - default { _unit addItem _classname; }; - }; + case "vest": { _unit addItemToVest _classname; }; + case "backpack": { _unit addItemToBackpack _classname; }; + case "uniform": { _unit addItemToUniform _classname; }; + default { _unit addItem _classname; }; + }; } else { _addedToPlayer = false; _pos = _unit modelToWorld [0,1,0.05]; From 46a761a1c835c299b6c3a6583ebe8d91d6bb0c61 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:35:22 -0700 Subject: [PATCH 07/10] canAdditem works on weapons. --- addons/common/functions/fnc_addToInventory.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index ce9f12edb8..e306820e5e 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -32,7 +32,7 @@ if((count _this) > 3) then { _container = nil; }; -if(!isNil "_container" && _type != "weapon") then { +if(!isNil "_container") then { switch (_container) do { case "vest": { _canAdd = _unit canAddItemToVest _classname; }; case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; From bd1f69d8a2aeae3a2251549863a653e986786d31 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 10:37:47 -0700 Subject: [PATCH 08/10] assign container --- addons/common/functions/fnc_addToInventory.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index e306820e5e..f9ed13d9d8 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -39,6 +39,7 @@ if(!isNil "_container") then { case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; }; } else { + _container = ""; _canAdd = _unit canAdd _classname; }; From cc27ff63d64bca038ad9ca5cb9f24dbf70c858b2 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 1 Apr 2015 16:51:34 -0700 Subject: [PATCH 09/10] finalized. works for weapons/mags/items. Optional container also works. --- addons/common/functions/fnc_addToInventory.sqf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index f9ed13d9d8..4e088525fc 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -6,8 +6,7 @@ * Arguments: * 0: Unit (OBJECT) * 1: Classname (String) - * 2: Type (String) - * 3: Container (String, Optional) + * 2: Container (String, Optional) uniform, vest, backpack * * Return Value: * Array: @@ -16,22 +15,26 @@ * * Public: Yes */ +//#define DEBUG_MODE_FULL #include "script_component.hpp" -EXPLODE_3_PVT(_this,_unit,_classname,_type); +EXPLODE_2_PVT(_this,_unit,_classname); private "_addedToPlayer"; private "_container"; private "_canAdd"; +private "_type"; _canAdd = false; _addedToPlayer = true; -if((count _this) > 3) then { - _container = _this select 3; +if((count _this) > 2) then { + _container = _this select 2; } else { _container = nil; }; +_type = [_classname] call EFUNC(common,getItemType); + if(!isNil "_container") then { switch (_container) do { case "vest": { _canAdd = _unit canAddItemToVest _classname; }; @@ -43,9 +46,8 @@ if(!isNil "_container") then { _canAdd = _unit canAdd _classname; }; -switch (_type) do { +switch ((_type select 0)) do { case "weapon": { - if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; if (_canAdd) then { switch (_container) do { case "vest": { (vestContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; @@ -62,7 +64,6 @@ switch (_type) do { }; }; case "magazine": { - if (!isClass(ConfigFile >> "CfgMagazines" >> _classname)) exitWith {}; if (_canAdd) then { switch (_container) do { case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; @@ -79,7 +80,6 @@ switch (_type) do { }; }; case "item": { - if (!isClass(ConfigFile >> "CfgWeapons" >> _classname)) exitWith {}; if (_canAdd) then { switch (_container) do { case "vest": { _unit addItemToVest _classname; }; From ec59397e4f76598f54cf3f3fa6630c2e88ed2bbf Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 2 Apr 2015 11:15:24 -0500 Subject: [PATCH 10/10] Fix playerTurretChanged event --- addons/common/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 962c91ec0e..f09dae0eb3 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -156,7 +156,7 @@ GVAR(OldPlayerWeapon) = currentWeapon ACE_player; }; // "playerTurretChanged" event - [ACE_player] call FUNC(getTurretIndex); + _newPlayerTurret = [ACE_player] call FUNC(getTurretIndex); if !(_newPlayerTurret isEqualTo GVAR(OldPlayerTurret)) then { // Raise ACE event locally GVAR(OldPlayerTurret) = _newPlayerTurret;