Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Virtual backpack system #832

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions cScripts/CfgFunctions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class cScripts {
class init_chatCommands {};

class init_eventHandlers {};

class init_virtualBackpacks {};

class init_zenModuels {};
};
Expand Down Expand Up @@ -112,6 +114,12 @@ class cScripts {
class para_equipment {};
class para_backpack {};

// Virtual Backpack
class saveVirtualBackpack {};
class loadVirtualBackpack {};
class swapVirtualBackpack {};
class getVirtualBackpackName {};

// Buttons and options
class addReGear {};
class addHeal {};
Expand Down
4 changes: 4 additions & 0 deletions cScripts/cScripts_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ if (EGVAR(Settings,allowReplaceItem)) then {
// staging
[] call EFUNC(init,staging);

// Virtual Backpack
if (EGVAR(Settings,allowVirtualBackpacks)) then {
[] call EFUNC(init,virtualBackpacks);
};
// messages
[] call EFUNC(init,message);

Expand Down
10 changes: 10 additions & 0 deletions cScripts/cScripts_preInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,16 @@ private _cScriptSettings = "cScripts Mission Settings";


// 9; Other
[ // Virtual Backpack
QEGVAR(Settings,allowVirtualBackpacks),
"CHECKBOX",
["Enable Virtual Backpacks","Allow usage of virtual backpacks"],
[_cScriptSettings, "9; Other"],
false,
true,
{},
true
] call CBA_fnc_addSetting;
[ // Primary Clan Tag
QEGVAR(Settings,primaryClanTag),
"EDITBOX",
Expand Down
98 changes: 98 additions & 0 deletions cScripts/functions/init/fn_init_virtualBackpacks.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#include "..\script_component.hpp";
/*
* Author: CPL.Brostrom.A
* This function handle the virtual backpack system
*
* Example:
* call cScripts_fnc_init_virtualBackpacks
*
* Public: No
*/

if !(GVAR(isPlayer)) exitWith {};

private _condition = { true };
private _virtualBackpackCat = [QEGVAR(Actions,virtualBackpacks), "Backpacks", "", {true}, _condition] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions"], _virtualBackpackCat] call ace_interact_menu_fnc_addActionToObject;

// First Actions
private _condition_Save1 = {
(count (player getVariable [QEGVAR(player,backpack), []]) < 1) &&
{(backpack player != "") &&
{(count (player getVariable [QEGVAR(player,virtualBackpack_1), []]) < 1)}}
};
private _virtualBackpack_1_save = [QEGVAR(Actions,virtualBackpack_1_save),
"Put away backpack", "", {
[player, QEGVAR(player,virtualBackpack_1)] call FUNC(saveVirtualBackpack);
}, _condition_Save1] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", QEGVAR(Actions,virtualBackpacks)], _virtualBackpack_1_save] call ace_interact_menu_fnc_addActionToObject;

private _condition_Load1 = {
(count (player getVariable [QEGVAR(player,backpack), []]) < 1) &&
{(backpack player == "") &&
{(count (player getVariable [QEGVAR(player,virtualBackpack_1), []]) > 1)}}
};
private _virtualBackpack_1_Load = [QEGVAR(Actions,virtualBackpack_1_load),
format ["Take out %1", [player, QEGVAR(player,virtualBackpack_1)] call FUNC(getVirtualBackpackName)], "", {
[player, QEGVAR(player,virtualBackpack_1)] call FUNC(loadVirtualBackpack);
}, _condition_Load1] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", QEGVAR(Actions,virtualBackpacks)], _virtualBackpack_1_Load] call ace_interact_menu_fnc_addActionToObject;

private _condition_Swap1 = {
(count (player getVariable [QEGVAR(player,backpack), []]) < 1) &&
{(backpack player != "") &&
{(count (player getVariable [QEGVAR(player,virtualBackpack_1), []]) > 1)}}
};
private _virtualBackpack_1_Swap = [QEGVAR(Actions,virtualBackpack_1_Swap),
format ["Swap out to %1", [player, QEGVAR(player,virtualBackpack_1)] call FUNC(getVirtualBackpackName)], "", {
[player, QEGVAR(player,virtualBackpack_1)] call FUNC(swapVirtualBackpack);
}, _condition_Swap1] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", QEGVAR(Actions,virtualBackpacks)], _virtualBackpack_1_Swap] call ace_interact_menu_fnc_addActionToObject;

// Second Actions
private _condition_Save2 = {
(count (player getVariable [QEGVAR(player,backpack), []]) < 1) &&
{(backpack player != "") &&
{(count (player getVariable [QEGVAR(player,virtualBackpack_2), []]) < 1)}}
};
private _virtualBackpack_2_save = [QEGVAR(Actions,virtualBackpack_2_save),
"Put away backpack", "", {
[player, QEGVAR(player,virtualBackpack_2)] call FUNC(saveVirtualBackpack);
}, _condition_Save2] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", QEGVAR(Actions,virtualBackpacks)], _virtualBackpack_2_save] call ace_interact_menu_fnc_addActionToObject;

private _condition_Load2 = {
(count (player getVariable [QEGVAR(player,backpack), []]) < 1) &&
{(backpack player == "") &&
{(count (player getVariable [QEGVAR(player,virtualBackpack_2), []]) > 1)}}
};
private _virtualBackpack_2_Load = [QEGVAR(Actions,virtualBackpack_2_load),
format ["Take out %1", [player, QEGVAR(player,virtualBackpack_2)] call FUNC(getVirtualBackpackName)], "", {
[player, QEGVAR(player,virtualBackpack_2)] call FUNC(loadVirtualBackpack);
}, _condition_Load2] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", QEGVAR(Actions,virtualBackpacks)], _virtualBackpack_2_Load] call ace_interact_menu_fnc_addActionToObject;

private _condition_Swap2 = {
(count (player getVariable [QEGVAR(player,backpack), []]) < 1) &&
{(backpack player != "") &&
{(count (player getVariable [QEGVAR(player,virtualBackpack_2), []]) > 1)}}
};
private _virtualBackpack_2_Swap = [QEGVAR(Actions,virtualBackpack_2_Swap),
format ["Swap out to %1", [player, QEGVAR(player,virtualBackpack_2)] call FUNC(getVirtualBackpackName)], "", {
[player, QEGVAR(player,virtualBackpack_2)] call FUNC(swapVirtualBackpack);
}, _condition_Swap2] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", QEGVAR(Actions,virtualBackpacks)], _virtualBackpack_2_Swap] call ace_interact_menu_fnc_addActionToObject;


// Event handlers
["CAManBase", "Respawn", {
params ["_unit"];
if (_unit == player) then {
if (count (player getVariable [QEGVAR(player,virtualBackpack_1), []]) > 1) then {
_unit setVariable [QEGVAR(player,virtualBackpack_1), []];
};
if (count (player getVariable [QEGVAR(player,virtualBackpack_2), []]) > 1) then {
_unit setVariable [QEGVAR(player,virtualBackpack_2), []];
};
};
}] call CBA_fnc_addClassEventHandler;
27 changes: 27 additions & 0 deletions cScripts/functions/systems/fn_getVirtualBackpackName.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include "..\script_component.hpp";
/*
* Author: CPL.Brostrom.A
* This function return the name of the current stored backpack
*
* Arguments:
* 0: player <STRING>
* 1: varname <STRING>
*
* Return Value:
* Backpack <String>
*
* Example:
* [player, "cScripts_player_virtualBackpack_1"] call cScripts_fnc_getVirtualBackpackName
*
*/

params [
["_player", objNull, [objNull]],
["_variableName", "", [""]]
];

private _var = (player getVariable [_variableName, [""]])#0;

if (_var == "") exitWith {"backpack"};

getText (configFile >> "CfgVehicles" >> _var >> "displayName");
39 changes: 39 additions & 0 deletions cScripts/functions/systems/fn_loadVirtualBackpack.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#include "..\script_component.hpp";
/*
* Author: CPL.Brostrom.A
* This function saves a virtual backpack to sertain variable.
*
* Arguments:
* 0: player <STRING>
* 1: varname <STRING>
*
* Return Value:
* True if successfull <BOOL>
*
* Example:
* [player, "cScripts_player_virtualBackpack_1"] call cScripts_fnc_loadVirtualBackpack
*
*/

params [
["_player", objNull, [objNull]],
["_variableName", "", [""]]
];

if ((count (player getVariable [_variableName, []])) < 1) exitWith {false};

private _backpackAndContent = _player getVariable [_variableName, []];
_backpackAndContent params [
["_backpack", ""],
["_cargo", []]
];

_player addBackpack _backpack;

{
_player addItemToBackpack _x;
} forEach _cargo;

_player setVariable [_variableName, []];

true
35 changes: 35 additions & 0 deletions cScripts/functions/systems/fn_saveVirtualBackpack.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include "..\script_component.hpp";
/*
* Author: CPL.Brostrom.A
* This function saves a virtual backpack to sertain variable.
*
* Arguments:
* 0: player <STRING>
* 1: varname <STRING>
*
* Return Value:
* True if successfull <BOOL>
*
* Example:
* [player, "cScripts_player_virtualBackpack_1"] call cScripts_fnc_saveVirtualBackpack
*
*/

params [
["_player", objNull, [objNull]],
["_variableName", "", [""]]
];

if ((count (player getVariable [_variableName, []])) > 1) exitWith {false};

private _backpack = backpack _player call BIS_fnc_basicBackpack;

private _cargo = backpackItems _player;

private _backpackAndContent = [_backpack, _cargo];

removeBackpack _player;

_player setVariable [_variableName, _backpackAndContent];

true
47 changes: 47 additions & 0 deletions cScripts/functions/systems/fn_swapVirtualBackpack.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include "..\script_component.hpp";
/*
* Author: CPL.Brostrom.A
* This function saves and retrive a virtual backpack to sertain variable.
*
* Arguments:
* 0: player <STRING>
* 1: varname <STRING>
*
* Return Value:
* True if successfull <BOOL>
*
* Example:
* [player, "cScripts_player_virtualBackpack_1"] call cScripts_fnc_swapVirtualBackpack
*
*/

params [
["_player", objNull, [objNull]],
["_variableName", "", [""]]
];

if ((count (player getVariable [_variableName, []])) < 1) exitWith {false};

// Obtain current virtual
private _backpack = backpack _player call BIS_fnc_basicBackpack;
private _cargo = backpackItems _player;
private _backpackAndContent = [_backpack, _cargo];

removeBackpack _player;

// Retrived saved
private _backpackAndContentStored = _player getVariable [_variableName, []];
_backpackAndContentStored params [
["_backpack", ""],
["_cargo", []]
];

_player addBackpack _backpack;

{
_player addItemToBackpack _x;
} forEach _cargo;

_player setVariable [_variableName, _backpackAndContent];

true