diff --git a/.vscode/settings.json b/.vscode/settings.json
index a62c4f043..24a7fdc39 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -11,6 +11,7 @@
"_thisType",
"BIS_fnc_reviveInit",
"CBA_Settings_fnc_init",
+ "CBA_fnc_compatibleMagazines",
"CBA_fnc_notify",
"KPLIB_eden_boxspawn",
"KPLIB_eden_potatospawn",
@@ -21,6 +22,7 @@
"KPLIB_param_aceResupply",
"KPLIB_param_ammoInfluence",
"KPLIB_param_arsenalType",
+ "KPLIB_param_cratefiller",
"KPLIB_param_clearVehicleCargo",
"KPLIB_param_commanderZeusMode",
"KPLIB_param_copyDistance",
diff --git a/Missionframework/KPGUI/KPGUI_classes.hpp b/Missionframework/KPGUI/KPGUI_classes.hpp
index db0aff1bc..ce1d7cda3 100644
--- a/Missionframework/KPGUI/KPGUI_classes.hpp
+++ b/Missionframework/KPGUI/KPGUI_classes.hpp
@@ -4,8 +4,7 @@
File: KPGUI_classes.hpp
Author: Wyqer - https://github.com/KillahPotatoes
Date: 2018-09-13
- Last Update: 2019-03-31
-
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -582,6 +581,16 @@ class KPGUI_PRE_EditBox {
canModify = 1;
};
+// Progress bar
+class KPGUI_PRE_ProgressBar
+{
+ type = 8;
+ style = 0;
+ colorFrame[] = {1,1,1,1};
+ colorBar[] = KP_COLOR_PLAYERDEFINE;
+ texture = "";
+};
+
// MapControl
class KPGUI_PRE_MapControl {
deletable = 0;
@@ -1103,6 +1112,38 @@ class KPGUI_PRE_DialogButton_LeftPanel: KPGUI_PRE_Button {
w = KP_GETWPLAIN(KP_WIDTH_VAL_LP,1);
};
+/*
+ --- Small sized classes ---
+*/
+
+// Title bar
+class KPGUI_PRE_DialogTitleS: KPGUI_PRE_Title {
+ x = KP_GETX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,1);
+ y = safeZoneY + safeZoneH * KP_Y_VAL_S;
+ w = KP_GETWPLAIN(KP_WIDTH_VAL_S,1);
+};
+
+// Cross symbol
+class KPGUI_PRE_DialogCrossS: KPGUI_PRE_CloseCross {
+ x = safeZoneX + safeZoneW * (KP_X_VAL_S + KP_WIDTH_VAL_S - 0.02)
+ y = KP_GETY_CROSS(KP_Y_VAL_S);
+};
+
+// Background
+class KPGUI_PRE_DialogBackgroundS: KPGUI_PRE_Background {
+ x = KP_GETX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,1);
+ y = KP_GETY_AREA(KP_Y_VAL_S);
+ w = KP_GETWPLAIN(KP_WIDTH_VAL_S,1);
+ h = safeZoneH * KP_HEIGHT_VAL_S;
+};
+
+// Button
+class KPGUI_PRE_DialogButtonS: KPGUI_PRE_Button {
+ x = KP_GETX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,1);
+ y = KP_GETY_BELOW(KP_Y_VAL_S,KP_HEIGHT_VAL_S);
+ w = KP_GETWPLAIN(KP_WIDTH_VAL_S,1);
+};
+
/*
--- Other classes ---
*/
diff --git a/Missionframework/KPGUI/KPGUI_defines.hpp b/Missionframework/KPGUI/KPGUI_defines.hpp
index e714a548a..9e9e2c038 100644
--- a/Missionframework/KPGUI/KPGUI_defines.hpp
+++ b/Missionframework/KPGUI/KPGUI_defines.hpp
@@ -4,7 +4,7 @@
File: KPGUI_defines.hpp
Author: Wyqer - https://github.com/KillahPotatoes
Date: 2018-07-10
- Last Update: 2018-12-14
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -141,3 +141,14 @@
#define KP_WIDTH_VAL_LP 0.2
#define KP_HEIGHT_VAL_LP (1 - 2 * KP_Y_VAL_LP - KP_HEIGTH_TITLE - KP_HEIGTH_BUTTON - 2 * KP_SPACING_Y)
+
+/*
+ --- Small dialog components ---
+ (X from 0.3 - 0.7, Y from 0.05 - 0.8)
+*/
+
+#define KP_X_VAL_S 0.3
+#define KP_Y_VAL_S 0.05
+
+#define KP_WIDTH_VAL_S 0.4
+#define KP_HEIGHT_VAL_S (0.75 - KP_HEIGTH_TITLE - KP_HEIGTH_BUTTON - 2 * KP_SPACING_Y)
diff --git a/Missionframework/KPGUI/res/icon_help.paa b/Missionframework/KPGUI/res/icon_help.paa
new file mode 100644
index 000000000..adafde4e7
Binary files /dev/null and b/Missionframework/KPGUI/res/icon_help.paa differ
diff --git a/Missionframework/KPGUI/res/icon_recyclebin.paa b/Missionframework/KPGUI/res/icon_recyclebin.paa
new file mode 100644
index 000000000..9de3d9126
Binary files /dev/null and b/Missionframework/KPGUI/res/icon_recyclebin.paa differ
diff --git a/Missionframework/KPLIB_functions.hpp b/Missionframework/KPLIB_functions.hpp
index 7a56ed979..d7ad85f23 100644
--- a/Missionframework/KPLIB_functions.hpp
+++ b/Missionframework/KPLIB_functions.hpp
@@ -4,8 +4,7 @@
File: KPLIB_functions.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-16
- Last Update: 2019-03-30
-
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -29,4 +28,5 @@ class KPLIB {
#include "modules\16_garrison\functions.hpp"
#include "modules\23_logistic\functions.hpp"
#include "modules\24_enemy\functions.hpp"
+ #include "modules\26_cratefiller\functions.hpp"
};
diff --git a/Missionframework/KPLIB_ui.hpp b/Missionframework/KPLIB_ui.hpp
index 2696863f7..755219476 100644
--- a/Missionframework/KPLIB_ui.hpp
+++ b/Missionframework/KPLIB_ui.hpp
@@ -4,7 +4,7 @@
File: KPLIB_ui.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-16
- Last Update: 2019-03-30
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -24,3 +24,4 @@
#include "modules\15_build\ui.hpp"
#include "modules\16_garrison\ui.hpp"
#include "modules\23_logistic\ui.hpp"
+#include "modules\26_cratefiller\ui.hpp"
diff --git a/Missionframework/modules/01_common/README.md b/Missionframework/modules/01_common/README.md
index dd38b3ef5..c2ee7d68e 100644
--- a/Missionframework/modules/01_common/README.md
+++ b/Missionframework/modules/01_common/README.md
@@ -8,6 +8,15 @@ Furthermore it provides functions which are often used and are not specifically
This module uses no data or functions from other modules.
### Functions
+
+* KPLIB_fnc_common_addAction
+
+ *Adds given action local to given object.*
+
+* KPLIB_fnc_common_cameraCircleTarget
+
+ *Let a camera circle around a given target with given params.*
+
* KPLIB_fnc_common_clearVehicleCargo
*Clears vehicle cargo.*
diff --git a/Missionframework/modules/01_common/fnc/fn_common_cameraCircleTarget.sqf b/Missionframework/modules/01_common/fnc/fn_common_cameraCircleTarget.sqf
new file mode 100644
index 000000000..bcbbe7e19
--- /dev/null
+++ b/Missionframework/modules/01_common/fnc/fn_common_cameraCircleTarget.sqf
@@ -0,0 +1,51 @@
+/*
+ KPLIB_fnc_common_cameraCircleTarget
+
+ File: fn_common_cameraCircleTarget.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-03-18
+ Last Update: 2019-03-31
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: Yes
+
+ Description:
+ Let a camera circle around a given target with given params.
+
+ Parameter(s):
+ _camera - Camera object [OBJECT, defaults to objNull]
+ _target - Target object [OBJECT, defaults to objNull]
+ _steps - Steps to do [NUMBER, defaults to 0]
+ _duration - Duration of a full circle [NUMBER, defaults to 0]
+ _step - Step count [NUMBER, defaults to 0]
+ _commitTime - Commit time [NUMBER, defaults to 0]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_camera", objNull, [objNull]],
+ ["_target", objNull, [objNull]],
+ ["_steps", 36, [0]],
+ ["_duration", 30, [0]],
+ ["_step", 0, [0]],
+ ["_commitTime", 0, [0]]
+];
+
+if (isNull _camera || {!camCommitted _camera}) exitWith {};
+
+if (_step isEqualTo 0) then {
+ _commitTime = _duration / _steps;
+};
+
+_camera camSetPos ((_target getRelPos [15, _step * 10]) vectorAdd [0, 0, 5]);
+_camera camCommit _commitTime;
+
+_step = _step + 1;
+[
+ {camCommitted (_this select 0)},
+ {[_this select 0, _this select 1, _this select 2, _this select 3, _this select 4, _this select 5] call KPLIB_fnc_common_cameraCircleTarget},
+ [_camera, _target, _steps, _duration, _step, _commitTime]
+] call CBA_fnc_waitUntilAndExecute;
+
+true
diff --git a/Missionframework/modules/01_common/functions.hpp b/Missionframework/modules/01_common/functions.hpp
index 185b0f9d7..2f3e077bd 100644
--- a/Missionframework/modules/01_common/functions.hpp
+++ b/Missionframework/modules/01_common/functions.hpp
@@ -17,6 +17,9 @@ class common {
// Adds action to object with correct localized title
class common_addAction {};
+ // Let a camera circle around a given target with given params
+ class common_cameraCircleTarget {};
+
// Clears vehicle cargo
class common_clearVehicleCargo {};
diff --git a/Missionframework/modules/10_resources/fnc/fn_res_refund.sqf b/Missionframework/modules/10_resources/fnc/fn_res_refund.sqf
new file mode 100644
index 000000000..aae3364c9
--- /dev/null
+++ b/Missionframework/modules/10_resources/fnc/fn_res_refund.sqf
@@ -0,0 +1,79 @@
+/*
+ KPLIB_fnc_res_refund
+
+ File: fn_res_refund.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-03-31
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Refunds given amount of resources to the provided location.
+
+ Parameter(s):
+ _location - Sector or FOB marker where the resources should be refunded [STRING, defaults to ""]
+ _supplies - Amount of supplies to refund [NUMBER, defaults to 0]
+ _ammo - Amount of ammo to refund [NUMBER, defaults to 0]
+ _fuel - Amount of fuel to refund [NUMBER, defaults to 0]
+
+ Returns:
+ Refund successful [BOOL]
+*/
+
+params [
+ ["_location", "", [""]],
+ ["_supplies", 0, [0]],
+ ["_ammo", 0, [0]],
+ ["_fuel", 0, [0]]
+];
+
+// Exit if no location is given
+if (_location isEqualTo "") exitWith {false};
+
+// Get all storage areas in the vicinity of the marker
+private _storages = nearestObjects [markerPos _location, KPLIB_res_storageClasses, KPLIB_param_fobRange];
+
+// Check if the location even has the needed space
+private _supplyCrates = ceil (_supplies / KPLIB_param_crateVolume);
+private _ammoCrates = ceil (_ammo / KPLIB_param_crateVolume);
+private _fuelCrates = ceil (_fuel / KPLIB_param_crateVolume);
+private _crateCount = _supplyCrates + _ammoCrates + _fuelCrates;
+private _crateCapacity = 0;
+{
+ _crateCapacity = _crateCapacity + ([_x] call KPLIB_fnc_res_getStorageSpace);
+} forEach _storages;
+
+if (_crateCapacity < _crateCount) exitWith {
+ false
+};
+
+// Add resources based on given amount
+private _storage = objNull;
+private _crate = objNull;
+
+while {_supplies > 0 || _ammo > 0 || _fuel > 0} do {
+ _storage = _storages select (_storages findIf {([_x] call KPLIB_fnc_res_getStorageSpace) > 0});
+ switch (true) do {
+ case (_supplies > 0): {
+ _crate = ["Supply", getPosATL _storage, (_supplies min KPLIB_param_crateVolume)] call KPLIB_fnc_res_createCrate;
+ _supplies = _supplies - KPLIB_param_crateVolume;
+ };
+ case (_ammo > 0): {
+ _crate = ["Ammo", getPosATL _storage, (_ammo min KPLIB_param_crateVolume)] call KPLIB_fnc_res_createCrate;
+ _ammo = _ammo - KPLIB_param_crateVolume;
+ };
+ case (_fuel > 0): {
+ _crate = ["Fuel", getPosATL _storage, (_fuel min KPLIB_param_crateVolume)] call KPLIB_fnc_res_createCrate;
+
+ _fuel = _fuel - KPLIB_param_crateVolume;
+ };
+ };
+ [_crate] call KPLIB_fnc_res_storeCrate;
+};
+
+// Reorder the crates on all storages to close the possible gaps
+{
+ [_x] call KPLIB_fnc_res_stackNsort;
+} forEach _storages;
+
+true
diff --git a/Missionframework/modules/10_resources/functions.hpp b/Missionframework/modules/10_resources/functions.hpp
index 0d01071f3..119ebb5d8 100644
--- a/Missionframework/modules/10_resources/functions.hpp
+++ b/Missionframework/modules/10_resources/functions.hpp
@@ -4,7 +4,7 @@
File: functions.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-12-13
- Last Update: 2019-02-16
+ Last Update: 2019-03-31
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -69,6 +69,9 @@ class res {
// Push crate
class res_pushCrate {};
+ // Refunds given amount of resources to the provided location
+ class res_refund {};
+
// Saves module specific data for the save
class res_saveData {};
diff --git a/Missionframework/modules/11_permission/README.md b/Missionframework/modules/11_permission/README.md
index 5a7e72d36..02eaed689 100644
--- a/Missionframework/modules/11_permission/README.md
+++ b/Missionframework/modules/11_permission/README.md
@@ -64,21 +64,27 @@ EMitted when a new permission handler is registered
*Module pre initialization.*
* KPLIB_fnc_permission_registerPlayer
+
*Checks if the player is already registered to the permission system.*
* KPLIB_fnc_permission_resetToDefault
+
*Resets all permissions to default.*
* KPLIB_fnc_permission_saveData
+
*Fetches data which is bound to this module and send it to the global save data array.*
* KPLIB_fnc_permission_setupPermissionControls
+
*Reads the player permissions and applies them to the dialog controls.*
* KPLIB_fnc_permission_setupplayerActions
+
*Initialization of actions availible to players.*
* KPLIB_fnc_permission_syncClients
+
*Receive client variables and send them to all clients.*
### Scripts
diff --git a/Missionframework/modules/11_permission/fnc/fn_permission_postInit.sqf b/Missionframework/modules/11_permission/fnc/fn_permission_postInit.sqf
index 90597a2a1..31784c90a 100644
--- a/Missionframework/modules/11_permission/fnc/fn_permission_postInit.sqf
+++ b/Missionframework/modules/11_permission/fnc/fn_permission_postInit.sqf
@@ -4,7 +4,7 @@
File: fn_permission_postInit.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-12-07
- Last Update: 2019-03-16
+ Last Update: 2019-04-06
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -74,6 +74,16 @@ if (isServer) then {
"STR_KPLIB_PERMISSION_GROUPLOGISTICS"
] call KPLIB_fnc_permission_addPermissionHandler;
+ // Cratefiller
+ [
+ "Cratefiller",
+ {},
+ "STR_KPLIB_PERMISSION_CRATEFILLER",
+ false,
+ "LogisticStation",
+ "STR_KPLIB_PERMISSION_GROUPLOGISTICS"
+ ] call KPLIB_fnc_permission_addPermissionHandler;
+
// Vehicle permissions
// Add Light Vehicle Permission
[
diff --git a/Missionframework/modules/12_arsenal/fnc/fn_arsenal_fillArsenal.sqf b/Missionframework/modules/12_arsenal/fnc/fn_arsenal_fillArsenal.sqf
index dc0ae2d2f..9c6580bd2 100644
--- a/Missionframework/modules/12_arsenal/fnc/fn_arsenal_fillArsenal.sqf
+++ b/Missionframework/modules/12_arsenal/fnc/fn_arsenal_fillArsenal.sqf
@@ -4,7 +4,7 @@
File: fn_init_fillArsenal.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-27
- Last Update: 2019-01-07
+ Last Update: 2019-04-07
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -41,7 +41,7 @@ private _configClasses = [];
_configClasses append (
"
_type = (configName _x) call BIS_fnc_itemType;
- (getNumber (_x >> 'scope') == 2) &&
+ (getNumber (_x >> 'scope') isEqualTo 2) &&
((_type select 0) != '') &&
((_type select 0) != 'VehicleWeapon')
" configClasses _x
@@ -101,11 +101,11 @@ if !(_goodItems isEqualTo true) then {
{
_type = _x call BIS_fnc_itemType;
switch (_type select 0) do {
- case "Weapon": {if ((_x call BIS_fnc_baseWeapon) == _x) then {_weapons pushBack _x;};};
+ case "Weapon": {if ((_x call BIS_fnc_baseWeapon) isEqualTo _x) then {_weapons pushBack _x;};};
case "Mine";
case "Magazine": {_magazines pushBack _x};
case "Item";
- case "Equipment": {if ((_type select 1) == "Backpack") then {_backpacks pushBack _x} else {_items pushBack _x};};
+ case "Equipment": {if ((_type select 1) isEqualTo "Backpack") then {_backpacks pushBack _x} else {_items pushBack _x};};
};
} forEach _goodItems;
@@ -135,4 +135,7 @@ publicVariable "KPLIB_preset_arsenal_whitelist";
// Send updated blacklist to clients
publicVariable "KPLIB_preset_arsenal_blacklist";
+// Emit arsenal filled event
+["KPLIB_arsenal_newLists", []] call CBA_fnc_serverEvent;
+
true
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_addActions.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_addActions.sqf
index fcd6ec7c7..c56a5eed4 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_addActions.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_addActions.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_addActions.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-16
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Adds all actions to the spawned logistic building.
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_addMenu.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_addMenu.sqf
index 368ea50b5..b3708c2c5 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_addMenu.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_addMenu.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_addMenu.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-17
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Adds a new menu to the logistic main menu.
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_calcCosts.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_calcCosts.sqf
index e24dcc940..21a369045 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_calcCosts.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_calcCosts.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_calcCosts.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-02-23
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Calculates the costs of the resupply action.
@@ -28,7 +29,12 @@ private _resupplyButton = _dialog displayCtrl 68747;
// Read the controls
private _costs = parseNumber (ctrlText _ctrlCosts);
-private _count = sliderPosition _ctrlSlider;
+private _count = round (sliderPosition _ctrlSlider);
+
+// Prepare resource check
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+private _res = [_nearFOB] call KPLIB_fnc_res_getResTotal;
+private _check = false;
// Fill the controls
_index = lbCurSel _ctrlCargo;
@@ -37,29 +43,47 @@ if !(KPLIB_param_aceResupply) then {
case "AMMO": {
_ctrlTotalCosts ctrlSetText str (_costs * _count);
_ctrlSliderValue ctrlSetText str _count;
+ _check = ((_res select 1) >= (_costs * _count));
};
case "FUEL": {
_ctrlTotalCosts ctrlSetText str (_costs * _count);
_ctrlSliderValue ctrlSetText str _count;
+ _check = ((_res select 2) >= (_costs * _count));
};
};
} else {
switch (_ctrlCargo lbData _index) do {
case "AMMO": {
+ _count = (ceil (_count / 100)) * 100;
_ctrlTotalCosts ctrlSetText str (_costs * (_count / 100));
_ctrlSliderValue ctrlSetText str _count;
+ _check = ((_res select 1) >= (_costs * (_count / 100)));
};
case "FUEL": {
+ _count = (ceil (_count / 1000)) * 1000;
_ctrlTotalCosts ctrlSetText str (_costs * (_count / 1000));
_ctrlSliderValue ctrlSetText str _count;
+ _check = ((_res select 2) >= (_costs * (_count / 1000)));
};
};
};
+//Check if the resupply selection is 0
if !(_count isEqualTo 0) then {
_resupplyButton ctrlEnable true;
} else {
_resupplyButton ctrlEnable false;
};
+// Final check if enough resources available
+if !(_check) then {
+ _resupplyButton ctrlEnable false;
+ [
+ ["a3\3den\data\controlsgroups\tutorial\close_ca.paa", 1, [1,0,0]],
+ [localize "STR_KPLIB_HINT_NOTENOUGHRESOURCES"]
+ ] call CBA_fnc_notify;
+} else {
+ _resupplyButton ctrlEnable true;
+};
+
true
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_openDialog.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_openDialog.sqf
index 5f2eaaa5f..5cad73487 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_openDialog.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_openDialog.sqf
@@ -5,8 +5,9 @@
File: fn_logistic_openDialog.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-16
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Opens the logistic main dialog.
@@ -39,7 +40,7 @@ if !(_menus isEqualTo []) then {
_tempCtrl = _dialog ctrlCreate ["KPGUI_PRE_DialogButtonC", 68741 + _forEachIndex];
_tempCtrl ctrlSetPosition [
KP_GETX(KP_X_VAL_C,KP_WIDTH_VAL_C,0,1),
- safeZoneY + safeZoneH * (KP_Y_VAL_C + (_forEachIndex + 1) * KP_HEIGTH_TITLE + (_forEachIndex + 2) * KP_SPACING_Y),
+ safeZoneY + safeZoneH * (KP_Y_VAL_C + KP_HEIGTH_TITLE + _forEachIndex * KP_HEIGTH_BUTTON + (_forEachIndex + 1) * KP_SPACING_Y),
KP_GETWPLAIN(KP_WIDTH_VAL_C,1),
safeZoneH * KP_HEIGTH_BUTTON
];
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_openRecycleDialog.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_openRecycleDialog.sqf
index c13ac23ec..9fe9301e6 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_openRecycleDialog.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_openRecycleDialog.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_openRecycleDialog.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-25
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Opens the logistic recycle dialog.
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_openResupplyDialog.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_openResupplyDialog.sqf
index 98ed10380..06becd445 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_openResupplyDialog.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_openResupplyDialog.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_openResupplyDialog.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-02-21
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Opens the logistic resupply dialog.
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_postInit.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_postInit.sqf
index e55a5c9f5..5b71d05c1 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_postInit.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_postInit.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_postInit.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-16
- Last Update: 2019-03-17
+ Last Update: 2019-04-06
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
The postInit function of a module takes care of starting/executing the modules functions or scripts.
@@ -53,6 +54,22 @@ if (isServer) then {
"STR_KPLIB_LOGISTIC_RESUPPLY"
] call KPLIB_fnc_logistic_addMenu;
+ [
+ "Cratefiller",
+ {
+ if ([player, "Cratefiller"] call KPLIB_fnc_permission_getPermission && KPLIB_param_cratefiller) then {
+ closeDialog 0;
+ [] call KPLIB_fnc_cratefiller_openDialog;
+ } else {
+ [
+ ["a3\3den\data\controlsgroups\tutorial\close_ca.paa", 1, [1,0,0]],
+ [localize "STR_KPLIB_HINT_NOPERMISSION"]
+ ] call CBA_fnc_notify;
+ };
+ },
+ "STR_KPLIB_LOGISTIC_CRATEFILLER"
+ ] call KPLIB_fnc_logistic_addMenu;
+
private _vehicles = [];
{
_vehicles append (missionNamespace getVariable [format ["KPLIB_preset_%1F", _x], ""]);
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_preInit.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_preInit.sqf
index a68bfc09f..5dd0c755a 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_preInit.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_preInit.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_preInit.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-16
- Last Update: 2019-02-24
+ Last Update: 2019-04-06
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
The preInit function defines global variables, adds event handlers and set some vital settings which are used in this module.
@@ -20,6 +21,10 @@
if (isServer) then {
diag_log format ["[KP LIBERATION] [%1] [PRE] [LOGISTIC] Module initializing...", diag_tickTime];
+/*
+ ----- Module Initialization -----
+*/
+
// Adding actions to spawned logi buildings
["KPLIB_vehicle_spawned", {[_this select 0] call KPLIB_fnc_logistic_addActions;}] call CBA_fnc_addEventHandler;
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_recycleTarget.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_recycleTarget.sqf
index 8b71662f6..38ff3ff21 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_recycleTarget.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_recycleTarget.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_recycleTarget.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-31
- Last Update: 2019-02-24
+ Last Update: 2019-04-04
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Recycles the selected vehicle.
@@ -20,25 +21,86 @@
// Dialog controls
private _dialog = findDisplay 7580232;
private _ctrlVehicleList = _dialog displayCtrl 68740;
-private _ctrlSupply = _dialog displayCtrl 68741;
-private _ctrlAmmo = _dialog displayCtrl 68742;
-private _ctrlFuel = _dialog displayCtrl 68743;
-private _recycleButton = _dialog displayCtrl 68745;
+private _ctrlSupplyValue = _dialog displayCtrl 68742;
+private _ctrlAmmoValue = _dialog displayCtrl 68744;
+private _ctrlFuelValue = _dialog displayCtrl 68746;
+private _recycleButton = _dialog displayCtrl 68747;
// Read controls
private _index = lbCurSel _ctrlVehicleList;
private _vehicleId = _ctrlVehicleList lbData _index;
+private _supplyValue = parseNumber (ctrlText _ctrlSupplyValue);
+private _ammoValue = parseNumber (ctrlText _ctrlAmmoValue);
+private _fuelValue = parseNumber (ctrlText _ctrlFuelValue);
// Get the target vehicle
private _vehicle = objectFromNetId _vehicleId;
+private _type = typeOf _vehicle;
+private _vehicles = KPLIB_logistic_data getVariable ["Vehicles", []];
+private _vehicleIndex = _vehicles findIf {_x select 0 isEqualTo _type};
+private _damage = 1;
+private _ammo = 1;
+private _fuel = 1;
+
+// Check for the influence params
+if (KPLIB_param_damageInfluence) then {
+ _damage = (1 - damage _vehicle);
+};
+
+if (KPLIB_param_ammoInfluence) then {
+ private _ammoState = {_x select 2 != 0} count magazinesAllTurrets _vehicle;
+ if (_ammoState > 0) then {
+ private _ammoMax = count magazinesAllTurrets _vehicle;
+ _ammo = _ammoState / _ammoMax;
+ } else {
+ _ammo = 0;
+ };
+};
+
+if (KPLIB_param_fuelInfluence) then {
+ _fuel = fuel _vehicle;
+};
+
+// Check if the Vehicle state has changed and exit
+private _supplyValueCheck = 0;
+private _ammoValueCheck = 0;
+private _fuelValueCheck = 0;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+
+if !(_vehicleIndex isEqualTo -1) then {
+ private _vehicleArray = _vehicles select _vehicleIndex;
+ _supplyValueCheck = (round ((_vehicleArray select 1) * (KPLIB_param_recycleFactor / 100) * _damage));
+ _ammoValueCheck = (round ((_vehicleArray select 2) * (KPLIB_param_recycleFactor / 100) * _ammo));
+ _fuelValueCheck = (round ((_vehicleArray select 3) * (KPLIB_param_recycleFactor / 100) * _fuel));
+} else {
+ _supplyValueCheck = (KPLIB_param_refundSupply * _damage);
+ _ammoValueCheck = (KPLIB_param_refundAmmo * _ammo);
+ _fuelValueCheck = (KPLIB_param_refundFuel * _fuel);
+};
+
+if (
+ !(_supplyValue isEqualTo _supplyValueCheck) ||
+ !(_ammoValue isEqualTo _ammoValueCheck) ||
+ !(_fuelValue isEqualTo _fuelValueCheck) ||
+ (((getMarkerPos _nearFOB) distance2D _vehicle) > KPLIB_param_fobRange)
+) exitWith {
+ _recycleButton ctrlEnable false;
+ [
+ ["a3\3den\data\controlsgroups\tutorial\close_ca.paa", 1, [1,0,0]],
+ [localize "STR_KPLIB_HINT_VEHICLECHANGES"]
+ ] call CBA_fnc_notify;
+};
+
+// Pay the refund
+private _storage = objNull;
+private _crate = objNull;
+private _storages = [getMarkerPos _nearFOB, KPLIB_param_fobRange] call KPLIB_fnc_res_getStorages;
+
+[_nearFOB, _supplyValue, _ammoValue, _fuelValue] remoteExecCall ["KPLIB_fnc_res_refund", 2];
// Delete the vehicle
deleteVehicle _vehicle;
-/* TODO:
-- Implement Resource refund
-*/
-
[7580232, 68740] call KPLIB_fnc_logistic_refreshTargets;
true
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_refreshTargets.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_refreshTargets.sqf
index 72e25c214..7d7bd5530 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_refreshTargets.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_refreshTargets.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_refreshTargets.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-25
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Refreshes the vehicle list for the given dialog.
@@ -30,7 +31,7 @@ private _ctrlVehicleList = _dialog displayCtrl _ctrlId;
lbClear _ctrlVehicleList;
// Get all FOB vehicles
-private _nearFOB = [player] call KPLIB_fnc_common_getPlayerFob;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
private _vehicles = (getMarkerPos _nearFOB) nearEntities [["LandVehicle", "Air", "Ship"], KPLIB_param_fobRange];
private _cfg = configFile >> "CfgVehicles";
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_resupplyTarget.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_resupplyTarget.sqf
index 81be10c46..1371eeab1 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_resupplyTarget.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_resupplyTarget.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_resupplyTarget.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-02-24
- Last Update: 2019-02-24
+ Last Update: 2019-04-04
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Resupplies the given vehicle.
@@ -21,9 +22,11 @@
private _dialog = findDisplay 7580233;
private _ctrlVehicleList = _dialog displayCtrl 68740;
private _ctrlCargo = _dialog displayCtrl 68741;
-private _ctrlCosts = _dialog displayCtrl 68743;
+private _ctrlCargoStateValue = _dialog displayCtrl 68742;
private _ctrlSliderValue = _dialog displayCtrl 68745;
private _ctrlTotalCosts = _dialog displayCtrl 68746;
+private _resupplyButton = _dialog displayCtrl 68747;
+
private _cfgVeh = configFile >> "CfgVehicles";
private _cfgMag = configFile >> "CfgMagazines";
@@ -31,47 +34,120 @@ private _cfgMag = configFile >> "CfgMagazines";
// Read controls
private _index = lbCurSel _ctrlVehicleList;
private _vehicleId = _ctrlVehicleList lbData _index;
+private _costs = parseNumber (ctrlText _ctrlTotalCosts);
// Get the target vehicle
private _vehicle = objectFromNetId _vehicleId;
private _type = typeOf _vehicle;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+
+// Check if the Vehicle state has changed and exit
+private _cargo = ctrlText _ctrlCargoStateValue;
+private _cargoCheck = "";
+private _ammoMax = 0;
+private _ammoState = 0;
+private _fuelMax = 0;
+private _fuelState = 0;
+
+if !(KPLIB_param_aceResupply) then {
+ switch (_ctrlCargo lbData _index) do {
+ case "AMMO": {
+ _ammoMax = count magazinesAllTurrets _vehicle;
+ _ammoState = {_x select 2 isEqualTo (getNumber (_cfgMag >> (_x select 0) >> "count"))} count magazinesAllTurrets _vehicle;
+ _cargoCheck = format [localize "STR_KPLIB_DIALOG_RESUPPLY_AMMOSTATE", _ammoState, _ammoMax];
+ };
+ case "FUEL": {
+ _fuelMax = getNumber (_cfgVeh >> _type >> "fuelCapacity");
+ _fuelState = _fuelMax * (fuel _vehicle);
+ _cargoCheck = format [localize "STR_KPLIB_DIALOG_RESUPPLY_FUELSTATE", _fuelState toFixed 2, _fuelMax toFixed 2];
+ };
+ };
+} else {
+ switch (_ctrlCargo lbData _index) do {
+ case "AMMO": {
+ _ammoMax = getNumber (_cfgVeh >> _type >> "ace_rearm_defaultSupply");
+ if (_ammoMax isEqualTo 0) then {
+ _ammoState = 0;
+ } else {
+ _ammoState = _vehicle getVariable ["ace_rearm_currentSupply", 0];
+ };
+ _cargoCheck = format [localize "STR_KPLIB_DIALOG_RESUPPLY_AMMOSTATEACE", _ammoState, _ammoMax];
+ };
+ case "FUEL": {
+ _fuelMax = getNumber (_cfgVeh >> _type >> "ace_refuel_fuelCargo");
+ if (_fuelMax isEqualTo 0) then {
+ _fuelState = 0;
+ } else {
+ _fuelState = _vehicle getVariable ["ace_refuel_currentFuelCargo", 0];
+ };
+ _cargoCheck = format [localize "STR_KPLIB_DIALOG_RESUPPLY_FUELSTATEACE", _fuelState, _fuelMax];
+ };
+ };
+};
+
+if (
+ !(_cargo isEqualTo _cargoCheck) ||
+ (((getMarkerPos _nearFOB) distance2D _vehicle) > KPLIB_param_fobRange)
+) exitWith {
+ _resupplyButton ctrlEnable false;
+ [
+ ["a3\3den\data\controlsgroups\tutorial\close_ca.paa", 1, [1,0,0]],
+ [localize "STR_KPLIB_HINT_VEHICLECHANGES"]
+ ] call CBA_fnc_notify;
+};
// Do the resupply
_index = lbCurSel _ctrlCargo;
+private _addValue = parseNumber ctrlText _ctrlSliderValue;
if !(KPLIB_param_aceResupply) then {
switch (_ctrlCargo lbData _index) do {
case "AMMO": {
- _vehicle setVehicleAmmo 1;
+ _ammoMax = count magazinesAllTurrets _vehicle;
+ _ammoState = {_x select 2 isEqualTo (getNumber (_cfgMag >> (_x select 0) >> "count"))} count magazinesAllTurrets _vehicle;
+ private _newAmmoState = ((_ammoState + _addValue) / _ammoMax);
+ if (_newAmmoState > 1) then {
+ _newAmmoState = 1;
+ };
+ _vehicle setVehicleAmmo _newAmmoState;
+ [_nearFOB, 0, _costs, 0] call KPLIB_fnc_res_pay;
};
case "FUEL": {
private _fuelMax = getNumber (_cfgVeh >> _type >> "fuelCapacity");
private _fuelState = _fuelMax * (fuel _vehicle);
- private _addValue = parseNumber ctrlText _ctrlSliderValue;
- private _newFuelState = ((_fuelState + _addValue) /_fuelMax);
+ private _newFuelState = ((_fuelState + _addValue) / _fuelMax);
if (_newFuelState > 1) then {
_newFuelState = 1;
};
_vehicle setFuel _newFuelState;
+ [_nearFOB, 0, 0, _costs] call KPLIB_fnc_res_pay;
};
};
} else {
switch (_ctrlCargo lbData _index) do {
case "AMMO": {
private _ammoMax = getNumber (_cfgVeh >> _type >> "ace_rearm_defaultSupply");
- private _ammoState = [_vehicle] call ace_rearm_fnc_getSupplyCount;
- private _addValue = parseNumber ctrlText _ctrlSliderValue;
- [_vehicle, _ammoState + _addValue] call ace_rearm_fnc_setSupplyCount;
+ private _ammoState = _vehicle getVariable ["ace_rearm_currentSupply", 0];
+ if ((_ammoState + _addValue) > _ammoMax) then {
+ _vehicle setVariable ["ace_rearm_currentSupply", _ammoMax];
+ } else {
+ _vehicle setVariable ["ace_rearm_currentSupply", _ammoState + _addValue];
+ };
+ [_nearFOB, 0, _costs, 0] call KPLIB_fnc_res_pay;
};
case "FUEL": {
private _fuelMax = getNumber (_cfgVeh >> _type >> "ace_refuel_fuelCargo");
- private _fuelState = [_vehicle] call ace_refuel_fnc_getFuel;
- private _addValue = parseNumber ctrlText _ctrlSliderValue;
- [_vehicle, _fuelState + _addValue] call ace_refuel_fnc_setFuel;
+ private _fuelState = _vehicle getVariable ["ace_refuel_currentFuelCargo", 0];
+ if ((_fuelState + _addValue) > _fuelMax) then {
+ _vehicle setVariable ["ace_refuel_currentFuelCargo", _fuelMax];
+ } else {
+ _vehicle setVariable ["ace_refuel_currentFuelCargo", _fuelState + _addValue];
+ };
+ [_nearFOB, 0, 0, _costs] call KPLIB_fnc_res_pay;
};
};
};
-[] spawn KPLIB_fnc_logistic_selectResupplyTarget;
+[] call KPLIB_fnc_logistic_selectResupplyTarget;
true
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_selectRecycleTarget.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_selectRecycleTarget.sqf
index 148893bcb..1ca582418 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_selectRecycleTarget.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_selectRecycleTarget.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_selectRecycleTarget.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-27
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Selects the vehicle from the combo cox and fills the dialog.
@@ -71,11 +72,18 @@ if (KPLIB_param_fuelInfluence) then {
};
// Fill the controls
+private _supplyValue = 0;
+private _ammoValue = 0;
+private _fuelValue = 0;
+
if !(_vehicleIndex isEqualTo -1) then {
private _vehicleArray = _vehicles select _vehicleIndex;
- _ctrlSupplyValue ctrlSetText str (round ((_vehicleArray select 1) * (KPLIB_param_recycleFactor / 100) * _damage));
- _ctrlAmmoValue ctrlSetText str (round ((_vehicleArray select 2) * (KPLIB_param_recycleFactor / 100) * _ammo));
- _ctrlFuelValue ctrlSetText str (round ((_vehicleArray select 3) * (KPLIB_param_recycleFactor / 100) * _fuel));
+ _supplyValue = (round ((_vehicleArray select 1) * (KPLIB_param_recycleFactor / 100) * _damage));
+ _ctrlSupplyValue ctrlSetText str _supplyValue;
+ _ammoValue = (round ((_vehicleArray select 2) * (KPLIB_param_recycleFactor / 100) * _ammo));
+ _ctrlAmmoValue ctrlSetText str _ammoValue;
+ _fuelValue = (round ((_vehicleArray select 3) * (KPLIB_param_recycleFactor / 100) * _fuel));
+ _ctrlFuelValue ctrlSetText str _fuelValue;
} else {
_ctrlSupplyValue ctrlSetText str (KPLIB_param_refundSupply * _damage);
_ctrlAmmoValue ctrlSetText str (KPLIB_param_refundAmmo * _ammo);
@@ -86,11 +94,28 @@ _ctrlSupplyFactor ctrlSetText str (round (_damage * 100)) + " %";
_ctrlAmmoFactor ctrlSetText str (round (_ammo * 100)) + " %";
_ctrlFuelFactor ctrlSetText str (round (_fuel * 100)) + " %";
-/* TODO:
-- Implement check for empty cargo space
-*/
-
-_recycleButton ctrlEnable true;
+// Check if there's enough empty storage capacity
+private _supplyCrates = ceil (_supplyValue / KPLIB_param_crateVolume);
+private _ammoCrates = ceil (_ammoValue / KPLIB_param_crateVolume);
+private _fuelCrates = ceil (_fuelValue / KPLIB_param_crateVolume);
+private _crateCount = _supplyCrates + _ammoCrates + _fuelCrates;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+private _storages = [getMarkerPos _nearFOB, KPLIB_param_fobRange] call KPLIB_fnc_res_getStorages;
+private _crateCapacity = 0;
+
+{
+ _crateCapacity = _crateCapacity + ([_x] call KPLIB_fnc_res_getStorageSpace);
+} forEach _storages;
+
+if (_crateCapacity < _crateCount) then {
+ _recycleButton ctrlEnable false;
+ [
+ ["a3\3den\data\controlsgroups\tutorial\close_ca.paa", 1, [1,0,0]],
+ [localize "STR_KPLIB_HINT_NOTENOUGHSTORAGE"]
+ ] call CBA_fnc_notify;
+} else {
+ _recycleButton ctrlEnable true;
+};
// Spawn camera object
camUseNVG false;
@@ -100,16 +125,9 @@ _cam cameraEffect ["internal", "front", "rtt"];
KPLIB_logistic_activeCam = _cam;
_cam camSetTarget _vehicle;
_cam camSetFov 0.5;
-_cam camCommit 0;
-_cam camSetPos ((_vehicle getRelPos [15, 0]) vectorAdd [0, 0, 5]);
+_cam camSetPos ((_vehicle getRelPos [15, 0]) vectorAdd [0, 0, 90]);
_cam camCommit 0;
-while {(lbCurSel _ctrlVehicleList) isEqualTo _index || !dialog} do {
- for "_i" from 1 to 36 do {
- _cam camSetPos ((_vehicle getRelPos [15, _i * 10]) vectorAdd [0, 0, 5]);
- _cam camCommit 30/36;
- waitUntil {camCommitted _cam};
- };
-};
+[_cam, _vehicle, 36, 60] call KPLIB_fnc_common_cameraCircleTarget;
true
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_selectResupplyTarget.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_selectResupplyTarget.sqf
index 7e78f2209..844044653 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_selectResupplyTarget.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_selectResupplyTarget.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_selectResupplyTarget.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-02-23
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
Selects the vehicle from the combo cox and fills the dialog.
@@ -58,23 +59,36 @@ private _ammoState = 0;
private _fuelMax = 0;
private _fuelState = 0;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+private _res = [_nearFOB] call KPLIB_fnc_res_getResTotal;
+
if !(KPLIB_param_aceResupply) then {
switch (_ctrlCargo lbData _index) do {
case "AMMO": {
+ _ctrlSlider ctrlEnable true;
_ammoMax = count magazinesAllTurrets _vehicle;
_ammoState = {_x select 2 isEqualTo (getNumber (_cfgMag >> (_x select 0) >> "count"))} count magazinesAllTurrets _vehicle;
- _ctrlCargoStateValue ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_AMMOSTATE", _ammoMax - _ammoState, _ammoMax];
+ _ctrlCargoStateValue ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_AMMOSTATE", _ammoState, _ammoMax];
_ctrlCosts ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_COSTSAMMO", str KPLIB_param_resupplyMagCost];
- _ctrlTotalCosts ctrlSetText str ((_ammoMax - _ammoState) * KPLIB_param_resupplyMagCost);
- _resupplyButton ctrlEnable true;
+ if ((ceil (_ammoMax - _ammoState)) > (floor ((_res select 1) / KPLIB_param_resupplyMagCost))) then {
+ _ctrlSlider sliderSetRange [0, floor ((_res select 1) / KPLIB_param_resupplyMagCost)];
+ } else {
+ _ctrlSlider sliderSetRange [0, ceil (_ammoMax - _ammoState)];
+ };
+ _ctrlSlider sliderSetPosition 0;
+ _ctrlSlider sliderSetSpeed [1, 1];
};
case "FUEL": {
_ctrlSlider ctrlEnable true;
_fuelMax = getNumber (_cfgVeh >> _type >> "fuelCapacity");
_fuelState = _fuelMax * (fuel _vehicle);
- _ctrlCargoStateValue ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_FUELSTATE", _fuelState toFixed 2, _fuelMax];
+ _ctrlCargoStateValue ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_FUELSTATE", _fuelState toFixed 2, _fuelMax toFixed 2];
_ctrlCosts ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_COSTSFUEL", str KPLIB_param_resupplyGallCost];
- _ctrlSlider sliderSetRange [0, ceil (_fuelMax - _fuelState)];
+ if ((ceil (_fuelMax - _fuelState)) > (floor ((_res select 2) / KPLIB_param_resupplyGallCost))) then {
+ _ctrlSlider sliderSetRange [0, floor ((_res select 2) / KPLIB_param_resupplyGallCost)];
+ } else {
+ _ctrlSlider sliderSetRange [0, ceil (_fuelMax - _fuelState)];
+ };
_ctrlSlider sliderSetPosition 0;
_ctrlSlider sliderSetSpeed [1, 1];
};
@@ -87,13 +101,17 @@ if !(KPLIB_param_aceResupply) then {
if (_ammoMax isEqualTo 0) then {
_ammoState = 0;
} else {
- _ammoState = [_vehicle] call ace_rearm_fnc_getSupplyCount;
+ _ammoState = _vehicle getVariable ["ace_rearm_currentSupply", 0];
};
_ctrlCargoStateValue ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_AMMOSTATEACE", _ammoState, _ammoMax];
_ctrlCosts ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_COSTSAMMOACE", str KPLIB_param_resupplyAmmoCost];
- _ctrlSlider sliderSetRange [0, ceil (_ammoMax - _ammoState)];
+ if (((ceil (_ammoMax - _ammoState)) / 100) > (floor ((_res select 1) / KPLIB_param_resupplyAmmoCost))) then {
+ _ctrlSlider sliderSetRange [0, (floor ((_res select 1) / KPLIB_param_resupplyAmmoCost)) * 100];
+ } else {
+ _ctrlSlider sliderSetRange [0, ceil (_ammoMax - _ammoState)];
+ };
_ctrlSlider sliderSetPosition 0;
- _ctrlSlider sliderSetSpeed [100, 100];
+ _ctrlSlider sliderSetSpeed [10, 10];
};
case "FUEL": {
_ctrlSlider ctrlEnable true;
@@ -101,39 +119,45 @@ if !(KPLIB_param_aceResupply) then {
if (_fuelMax isEqualTo 0) then {
_fuelState = 0;
} else {
- _fuelState = [_vehicle] call ace_refuel_fnc_getFuel;
+ _fuelState = _vehicle getVariable ["ace_refuel_currentFuelCargo", 0];
};
_ctrlCargoStateValue ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_FUELSTATEACE", _fuelState, _fuelMax];
_ctrlCosts ctrlSetText format [localize "STR_KPLIB_DIALOG_RESUPPLY_COSTSFUELACE", str KPLIB_param_resupplyFuelCost];
- _ctrlSlider sliderSetRange [0, ceil (_fuelMax - _fuelState)];
+ if (((ceil (_fuelMax - _fuelState)) / 1000) > (floor ((_res select 2) / KPLIB_param_resupplyFuelCost))) then {
+ _ctrlSlider sliderSetRange [0, (floor ((_res select 2) / KPLIB_param_resupplyFuelCost)) * 1000];
+ } else {
+ _ctrlSlider sliderSetRange [0, ceil (_fuelMax - _fuelState)];
+ };
_ctrlSlider sliderSetPosition 0;
- _ctrlSlider sliderSetSpeed [1000, 1000];
+ _ctrlSlider sliderSetSpeed [100, 100];
};
};
};
-/* TODO:
-- Implement check for resources
-*/
-
// Spawn camera object
-camUseNVG false;
-showCinemaBorder false;
-private _cam = "camera" camCreate (getpos _vehicle);
-_cam cameraEffect ["internal", "front", "rtt"];
-KPLIB_logistic_activeCam = _cam;
-_cam camSetTarget _vehicle;
-_cam camSetFov 0.5;
-_cam camCommit 0;
-_cam camSetPos ((_vehicle getRelPos [15, 0]) vectorAdd [0, 0, 5]);
-_cam camCommit 0;
-
-private _index = lbCurSel _ctrlVehicleList;
-while {(lbCurSel _ctrlVehicleList) isEqualTo _index || !dialog} do {
- for "_i" from 1 to 36 do {
- _cam camSetPos ((_vehicle getRelPos [15, _i * 10]) vectorAdd [0, 0, 5]);
- _cam camCommit 30/36;
- waitUntil {camCommitted _cam};
+if (isNull KPLIB_logistic_activeCam) then {
+ camUseNVG false;
+ showCinemaBorder false;
+ private _cam = "camera" camCreate (getpos _vehicle);
+ _cam cameraEffect ["internal", "front", "rtt"];
+ KPLIB_logistic_activeCam = _cam;
+ _cam camSetTarget _vehicle;
+ _cam camSetFov 0.5;
+ _cam camSetPos ((_vehicle getRelPos [15, 0]) vectorAdd [0, 0, 90]);
+ _cam camCommit 0;
+ [_cam, _vehicle, 36, 60] call KPLIB_fnc_common_cameraCircleTarget;
+} else {
+ if !(_vehicle isEqualTo (camTarget KPLIB_logistic_activeCam)) then {
+ camUseNVG false;
+ showCinemaBorder false;
+ private _cam = "camera" camCreate (getpos _vehicle);
+ _cam cameraEffect ["internal", "front", "rtt"];
+ KPLIB_logistic_activeCam = _cam;
+ _cam camSetTarget _vehicle;
+ _cam camSetFov 0.5;
+ _cam camSetPos ((_vehicle getRelPos [15, 0]) vectorAdd [0, 0, 90]);
+ _cam camCommit 0;
+ [_cam, _vehicle, 36, 60] call KPLIB_fnc_common_cameraCircleTarget;
};
};
diff --git a/Missionframework/modules/23_logistic/fnc/fn_logistic_settings.sqf b/Missionframework/modules/23_logistic/fnc/fn_logistic_settings.sqf
index e9e502c55..5a70c1e0c 100644
--- a/Missionframework/modules/23_logistic/fnc/fn_logistic_settings.sqf
+++ b/Missionframework/modules/23_logistic/fnc/fn_logistic_settings.sqf
@@ -4,8 +4,9 @@
File: fn_logistic_settings.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-28
- Last Update: 2019-02-24
+ Last Update: 2019-04-03
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
Description:
CBA Settings initialization for this module.
diff --git a/Missionframework/modules/23_logistic/ui/KPLIB_logisticMain.hpp b/Missionframework/modules/23_logistic/ui/KPLIB_logisticMain.hpp
index bb0c8a1ae..14fe8f918 100644
--- a/Missionframework/modules/23_logistic/ui/KPLIB_logisticMain.hpp
+++ b/Missionframework/modules/23_logistic/ui/KPLIB_logisticMain.hpp
@@ -4,7 +4,7 @@
File: KPLIB_logisticMain.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-16
- Last Update: 2019-01-16
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -21,6 +21,7 @@ class KPLIB_logisticMain {
class KPLIB_DialogTitle: KPGUI_PRE_DialogTitleC {
text = "$STR_KPLIB_DIALOG_LOGISTICMAIN_TITLE";
};
+
};
class controls {
diff --git a/Missionframework/modules/23_logistic/ui/KPLIB_recycle.hpp b/Missionframework/modules/23_logistic/ui/KPLIB_recycle.hpp
index d5724dde2..527c491a8 100644
--- a/Missionframework/modules/23_logistic/ui/KPLIB_recycle.hpp
+++ b/Missionframework/modules/23_logistic/ui/KPLIB_recycle.hpp
@@ -4,7 +4,7 @@
File: KPLIB_recycle.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-01-22
- Last Update: 2019-02-24
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -23,6 +23,7 @@ class KPLIB_recycle {
};
class KPLIB_DialogArea: KPGUI_PRE_DialogBackgroundC {};
+
};
class controls {
@@ -34,7 +35,7 @@ class KPLIB_recycle {
w = KP_GETW(KP_WIDTH_VAL_C,(12/11));
h = KP_GETH(KP_HEIGHT_VAL_C,24);
tooltip = "$STR_KPLIB_DIALOG_RECYCLE_VEHICLE_TT";
- onLBSelChanged = "KPLIB_logistic_activeCam cameraEffect [""terminate"",""back""]; camDestroy KPLIB_logistic_activeCam; [] spawn KPLIB_fnc_logistic_selectRecycleTarget";
+ onLBSelChanged = "KPLIB_logistic_activeCam cameraEffect [""terminate"",""back""]; camDestroy KPLIB_logistic_activeCam; [] call KPLIB_fnc_logistic_selectRecycleTarget";
};
class KPLIB_RefreshVehicles: KPGUI_PRE_CloseCross {
diff --git a/Missionframework/modules/23_logistic/ui/KPLIB_resupply.hpp b/Missionframework/modules/23_logistic/ui/KPLIB_resupply.hpp
index 792c6e1f0..0a57d5416 100644
--- a/Missionframework/modules/23_logistic/ui/KPLIB_resupply.hpp
+++ b/Missionframework/modules/23_logistic/ui/KPLIB_resupply.hpp
@@ -4,7 +4,7 @@
File: KPLIB_resupply.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-02-21
- Last Update: 2019-02-24
+ Last Update: 2019-04-05
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -23,6 +23,7 @@ class KPLIB_resupply {
};
class KPLIB_DialogArea: KPGUI_PRE_DialogBackgroundC {};
+
};
class controls {
@@ -34,7 +35,7 @@ class KPLIB_resupply {
w = KP_GETW(KP_WIDTH_VAL_C,(12/11));
h = KP_GETH(KP_HEIGHT_VAL_C,24);
tooltip = "$STR_KPLIB_DIALOG_RESUPPLY_VEHICLE_TT";
- onLBSelChanged = "KPLIB_logistic_activeCam cameraEffect [""terminate"",""back""]; camDestroy KPLIB_logistic_activeCam; [] spawn KPLIB_fnc_logistic_selectResupplyTarget";
+ onLBSelChanged = "KPLIB_logistic_activeCam cameraEffect [""terminate"",""back""]; camDestroy KPLIB_logistic_activeCam; [] call KPLIB_fnc_logistic_selectResupplyTarget";
};
class KPLIB_RefreshVehicles: KPGUI_PRE_CloseCross {
@@ -52,7 +53,7 @@ class KPLIB_resupply {
y = KP_GETCY(KP_Y_VAL_C,KP_HEIGHT_VAL_C,5,48);
w = KP_GETW(KP_WIDTH_VAL_C,1);
tooltip = "$STR_KPLIB_DIALOG_RESUPPLY_CARGO_TT";
- onLBSelChanged = "KPLIB_logistic_activeCam cameraEffect [""terminate"",""back""]; camDestroy KPLIB_logistic_activeCam; [] spawn KPLIB_fnc_logistic_selectResupplyTarget";
+ onLBSelChanged = "[] call KPLIB_fnc_logistic_selectResupplyTarget";
};
class KPLIB_TextCargoState: KPGUI_PRE_Text {
diff --git a/Missionframework/modules/26_cratefiller/README.md b/Missionframework/modules/26_cratefiller/README.md
new file mode 100644
index 000000000..00dcb874c
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/README.md
@@ -0,0 +1,14 @@
+# KP Liberation Module Description
+
+## Example Module
+This is an example module description.
+Used as template for new modules. Make sure to replace the `example` everywhere accordingly.
+
+### Dependencies
+* None
+
+### Functions
+
+
+### Scripts
+No scripts will be started by this module
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_addEquipment.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_addEquipment.sqf
new file mode 100644
index 000000000..2daaac44b
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_addEquipment.sqf
@@ -0,0 +1,69 @@
+/*
+ KPLIB_fnc_cratefiller_addEquipment
+
+ File: fn_cratefiller_addEquipment.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Adds the given amount of the selected item to the inventory.
+
+ Parameter(s):
+ _amount - Amount of the equipment which will be added [NUMBER, defaults to 0]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_amount", 0, [0]]
+];
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlEquipment = _dialog displayCtrl 75812;
+
+// Read controls
+private _index = lbCurSel _ctrlEquipment;
+
+// Check for empty selection
+if (_index isEqualTo -1) exitWith {};
+
+// Get the storage object
+private _storage = [] call KPLIB_fnc_cratefiller_getStorage;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+
+// Check if the storage is in range
+if ((_storage distance2D (getMarkerPos _nearFOB)) > KPLIB_param_fobRange) exitWith {
+ [localize "STR_KPLIB_HINT_RANGE"] call CBA_fnc_notify;
+ [] remoteExecCall ["KPLIB_fnc_cratefiller_getNearStorages", (allPlayers - entities "HeadlessClient_F")];
+};
+
+// Item selection
+private _item = _ctrlEquipment lbData _index;
+
+// Check for enough inventory capacity
+if (!(_storage canAdd [_item, _amount])) exitWith {
+ [localize "STR_KPLIB_HINT_FULL"] call CBA_fnc_notify;
+};
+
+// Add the given item
+if (_item isKindOf "Bag_Base") then {
+ _storage addBackpackCargoGlobal [_item, _amount];
+} else {
+ _storage addItemCargoGlobal [_item, _amount];
+};
+
+[] remoteExecCall ["KPLIB_fnc_cratefiller_showInventory", (allPlayers - entities "HeadlessClient_F")];
+
+private _config = [_item] call KPLIB_fnc_cratefiller_getConfigPath;
+private _name = (getText (configFile >> _config >> _item >> "displayName"));
+private _picture = (getText (configFile >> _config >> _item >> "picture"));
+[
+ [_picture, 2],
+ [format [localize "STR_KPLIB_HINT_ADDED", _name, _amount]]
+] call CBA_fnc_notify;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_createEquipmentList.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_createEquipmentList.sqf
new file mode 100644
index 000000000..3d42fe1e1
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_createEquipmentList.sqf
@@ -0,0 +1,118 @@
+/*
+ KPLIB_fnc_cratefiller_createEquipmentList
+
+ File: fn_cratefiller_createEquipmentList.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-06
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Changes the shown equipment category.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlCat = _dialog displayCtrl 75810;
+private _ctrlWeapon = _dialog displayCtrl 75811;
+private _ctrlEquipment = _dialog displayCtrl 75812;
+
+// Clear the lists
+lbClear _ctrlWeapon;
+lbClear _ctrlEquipment;
+
+// Hide controls
+_ctrlWeapon ctrlShow false;
+
+// Read controls
+private _catIndex = lbCurSel _ctrlCat;
+
+// Check for empty selection
+if (_catIndex isEqualTo -1) exitWith {};
+
+private _index = 0;
+private _config = "";
+
+switch (_catIndex) do {
+
+ // Weapons
+ case 0 : {
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["weapons", []]);
+ };
+
+ // Magazines
+ case 1 : {
+ _ctrlWeapon ctrlShow true;
+ {
+ _index = _ctrlWeapon lbAdd (_x select 0);
+ _ctrlWeapon lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlWeapon lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["weapons", []]);
+ };
+
+ // Attachments
+ case 2 : {
+ _ctrlWeapon ctrlShow true;
+ {
+ _index = _ctrlWeapon lbAdd (_x select 0);
+ _ctrlWeapon lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlWeapon lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["weapons", []]);
+ };
+
+ // Grenades
+ case 3 : {
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["grenades", []]);
+ };
+
+ // Explosives
+ case 4 : {
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["explosives", []]);
+ };
+
+ // Items
+ case 5 : {
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["items", []]);
+ };
+
+ // Backpacks
+ case 6 : {
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach (KPLIB_cratefiller_data getVariable ["backpacks", []]);
+ };
+
+};
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_createSubList.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_createSubList.sqf
new file mode 100644
index 000000000..a39f9b760
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_createSubList.sqf
@@ -0,0 +1,82 @@
+/*
+ KPLIB_fnc_cratefiller_createSubList
+
+ File: fn_cratefiller_createSubList.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Creates a list with valueable magazines or attachments.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlCat = _dialog displayCtrl 75810;
+private _ctrlWeapon = _dialog displayCtrl 75811;
+private _ctrlEquipment = _dialog displayCtrl 75812;
+
+// Clear the lists
+lbClear _ctrlEquipment;
+
+// Read controls
+private _catIndex = lbCurSel _ctrlCat;
+private _weaponIndex = lbCurSel _ctrlWeapon;
+
+// Check for empty selection
+if (_weaponIndex isEqualTo -1) exitWith {};
+
+// Weapon selection
+private _weaponType = _ctrlWeapon lbData _weaponIndex;
+
+private _config = "";
+
+switch (_catIndex) do {
+
+ // Magazines
+ case 1 : {
+ // Get compatible magazines
+ private _glType = (getArray (configfile >> "CfgWeapons" >> _weaponType >> "muzzles")) select 1;
+ private _magazines = [_weaponType] call CBA_fnc_compatibleMagazines;
+ _magazines append ([configfile >> "CfgWeapons" >> _weaponType >> _glType] call CBA_fnc_compatibleMagazines);
+ _magazines = _magazines - KPLIB_preset_arsenal_blacklist;
+ private _sortedMagazines = [_magazines] call KPLIB_fnc_cratefiller_sortList;
+
+ private _index = 0;
+
+ // Fill controls
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach _sortedMagazines;
+ };
+
+ // Attachments
+ case 2 : {
+ // Get compatible attachments
+ private _attachments = [_weaponType] call BIS_fnc_compatibleItems;
+ _attachments = _attachments - KPLIB_preset_arsenal_blacklist;
+ private _sortedAttachments = [_attachments] call KPLIB_fnc_cratefiller_sortList;
+
+ private _index = 0;
+
+ // Fill controls
+ {
+ _index = _ctrlEquipment lbAdd (_x select 0);
+ _ctrlEquipment lbSetData [_index , _x select 1];
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlEquipment lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+ } forEach _sortedAttachments;
+ };
+};
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_deletePreset.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_deletePreset.sqf
new file mode 100644
index 000000000..283b29336
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_deletePreset.sqf
@@ -0,0 +1,44 @@
+/*
+ KPLIB_fnc_cratefiller_deletePreset
+
+ File: fn_cratefiller_deletePreset.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-07
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Deletes the selected preset.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlImport = _dialog displayCtrl 75821;
+
+// Read the import name
+private _index = lbCurSel _ctrlImport;
+private _importName = _ctrlImport lbText _index;
+
+// Check for empty selection
+if (_index isEqualTo -1) exitWith {
+ [localize "STR_KPLIB_HINT_SELECTION"] call CBA_fnc_notify;
+};
+
+// Read the presets from profileNamespace
+private _import = profileNamespace getVariable ["KPLIB_cratefiller_preset", []];
+
+_import deleteAt (_import findIf {(_x select 0) isEqualTo _importName});
+
+// Save the inventory into profileNamespace
+profileNamespace setVariable ["KPLIB_cratefiller_preset", _import];
+saveProfileNamespace;
+
+[] call KPLIB_fnc_cratefiller_showPresets;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_export.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_export.sqf
new file mode 100644
index 000000000..c19f06fcd
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_export.sqf
@@ -0,0 +1,53 @@
+/*
+ KPLIB_fnc_cratefiller_export
+
+ File: fn_cratefiller_export.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-07
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Exports the active inventory.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlExport = _dialog displayCtrl 75820;
+
+// Read the presets from profileNamespace
+private _preset = profileNamespace getVariable ["KPLIB_cratefiller_preset", []];
+
+// Read the export name
+private _exportName = ctrlText _ctrlExport;
+_ctrlExport ctrlSetText "";
+
+// Check if the name is empty
+if (_exportName isEqualTo "") exitWith {
+ [localize "STR_KPLIB_HINT_NAME"] call CBA_fnc_notify;
+};
+
+// Check if the variable is empty
+if !(_preset isEqualTo []) then {
+ // Check if the exportname already exists
+ _preset deleteAt (_preset findIf {(_x select 0) isEqualTo _exportName});
+};
+
+// Get the storage inventory
+private _inventory = [] call KPLIB_fnc_cratefiller_getInventory;
+
+// Save the inventory into profileNamespace
+_preset pushBack [_exportName, +_inventory];
+
+profileNamespace setVariable ["KPLIB_cratefiller_preset", _preset];
+saveProfileNamespace;
+
+[] call KPLIB_fnc_cratefiller_showPresets;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getConfigPath.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getConfigPath.sqf
new file mode 100644
index 000000000..2c61463f5
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getConfigPath.sqf
@@ -0,0 +1,32 @@
+/*
+ KPLIB_fnc_cratefiller_getConfigPath
+
+ File: fn_cratefiller_getConfigPath.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-05
+ Last Update: 2019-04-06
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Gets the config path / type of the given classname.
+
+ Parameter(s):
+ _classname - Classname which should be checked [STRING, defaults to ""]
+
+ Returns:
+ Config path [STRING]
+*/
+
+params [
+ ["_classname", "", [""]]
+];
+
+// find configclass
+switch true do
+{
+ case (isClass (configFile >> "CfgMagazines" >> _classname)): {"CfgMagazines"};
+ case (isClass (configFile >> "CfgWeapons" >> _classname)): {"CfgWeapons"};
+ case (isClass (configFile >> "CfgVehicles" >> _classname)): {"CfgVehicles"};
+ case (isClass (configFile >> "CfgGlasses" >> _classname)): {"CfgGlasses"};
+ default {""};
+};
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getInventory.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getInventory.sqf
new file mode 100644
index 000000000..42d0bf2b9
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getInventory.sqf
@@ -0,0 +1,65 @@
+/*
+ KPLIB_fnc_cratefiller_getInventory
+
+ File: fn_cratefiller_getInventory.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Gets all inventory items of the storage.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Inventory of the active storage [ARRAY]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+
+// Get the storage object
+private _storage = [] call KPLIB_fnc_cratefiller_getStorage;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+
+// Check for an active storage
+private _cargo = [];
+if (isNull _storage) exitWith {
+ _cargo
+};
+
+// Get all cargo
+private _item = getItemCargo _storage;
+private _weapon = getWeaponCargo _storage;
+private _magazine = getMagazineCargo _storage;
+private _backpack = getBackpackCargo _storage;
+
+_cargo = _item;
+(_cargo select 0) append (_weapon select 0);
+(_cargo select 1) append (_weapon select 1);
+(_cargo select 0) append (_magazine select 0);
+(_cargo select 1) append (_magazine select 1);
+(_cargo select 0) append (_backpack select 0);
+(_cargo select 1) append (_backpack select 1);
+
+// Count the variable index
+private _count = count (_cargo select 0);
+
+private _config = "";
+
+// Adapt the cargo
+private _finalCargo = [];
+for "_i" from 0 to (_count - 1) do {
+ _config = [(_cargo select 0) select _i] call KPLIB_fnc_cratefiller_getConfigPath;
+ _finalCargo pushBack [
+ (getText (configFile >> _config >> ((_cargo select 0) select _i) >> "displayName")),
+ (_cargo select 0) select _i,
+ (_cargo select 1) select _i
+ ];
+};
+
+_finalCargo sort true;
+
+_finalCargo
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getNearStorages.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getNearStorages.sqf
new file mode 100644
index 000000000..e5884709f
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getNearStorages.sqf
@@ -0,0 +1,69 @@
+/*
+ KPLIB_fnc_cratefiller_getNearStorages
+
+ File: fn_cratefiller_getNearStorages.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Scans the fob for possible storages.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlStorage = _dialog displayCtrl 75802;
+
+// Clear the lists
+lbClear _ctrlStorage;
+
+// Get near objects and check for storage capacity
+private _type = objNull;
+private _config = "";
+private _number= 0;
+private _index = 0;
+private _picture = "";
+private _storages = [];
+private _blacklist = [
+ KPLIB_preset_crateSupplyE,
+ KPLIB_preset_crateSupplyF,
+ KPLIB_preset_crateAmmoE,
+ KPLIB_preset_crateAmmoF,
+ KPLIB_preset_crateFuelE,
+ KPLIB_preset_crateFuelF,
+ KPLIB_logistic_building
+];
+
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+{
+ _type = typeOf _x;
+ if (_type isEqualTo "GroundWeaponHolder") exitWith {};
+ _config = [_type] call KPLIB_fnc_cratefiller_getConfigPath;
+ _number = getNumber (configfile >> _config >> _type >> "maximumLoad");
+ if (_number > 0) then {
+ _storages pushBack _x;
+ };
+} forEach (((getMarkerPos _nearFOB) nearObjects KPLIB_param_fobRange) select {!(typeOf _x in _blacklist)});
+
+// Fill the list
+{
+ _type = typeOf _x;
+ _config = [_type] call KPLIB_fnc_cratefiller_getConfigPath;
+ _index = _ctrlStorage lbAdd format ["%1m - %2", round ((getMarkerPos _nearFOB) distance2D _x), getText (configFile >> _config >> _type >> "displayName")];
+ _ctrlStorage lbSetData [_index, netId _x];
+ _picture = getText (configFile >> _config >> _type >> "picture");
+ if (_picture isEqualTo "pictureThing") then {
+ _ctrlStorage lbSetPicture [_index, "KPGUI\res\icon_help.paa"];
+ } else {
+ _ctrlStorage lbSetPicture [_index, _picture];
+ };
+} forEach _storages;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getStorage.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getStorage.sqf
new file mode 100644
index 000000000..93805eb97
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_getStorage.sqf
@@ -0,0 +1,35 @@
+/*
+ KPLIB_fnc_cratefiller_getStorage
+
+ File: fn_cratefiller_getStorage.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-06
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Returns the active storage.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Active Storage [OBJECT]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlStorage = _dialog displayCtrl 75802;
+
+// Read controls
+private _storageIndex = lbCurSel _ctrlStorage;
+
+// Check for empty variable
+if (_storageIndex isEqualTo -1) exitWith {
+ objNull
+};
+
+// Get the storage object
+private _storage = objectFromNetId (_ctrlStorage lbData _storageIndex);
+
+_storage
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_import.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_import.sqf
new file mode 100644
index 000000000..4314d33d4
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_import.sqf
@@ -0,0 +1,51 @@
+/*
+ KPLIB_fnc_cratefiller_import
+
+ File: fn_cratefiller_import.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-07
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Imports the selected inventory.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlImport = _dialog displayCtrl 75821;
+
+// Get the storage object
+private _storage = [] call KPLIB_fnc_cratefiller_getStorage;
+
+// Check if there's an active storage
+if (isNull _storage) exitWith {
+ [localize "STR_KPLIB_HINT_NOSTORAGE"] call CBA_fnc_notify;
+};
+
+// Read the import name
+private _index = lbCurSel _ctrlImport;
+private _importName = _ctrlImport lbText _index;
+
+// Check for empty selection
+if (_index isEqualTo -1) exitWith {
+ [localize "STR_KPLIB_HINT_SELECTION"] call CBA_fnc_notify;
+};
+
+// Get the storage inventory
+private _inventory = [] call KPLIB_fnc_cratefiller_getInventory;
+
+// Read the presets from profileNamespace
+private _import = profileNamespace getVariable ["KPLIB_cratefiller_preset", []];
+private _index = _import findIf {(_x select 0) isEqualTo _importName};
+_inventory append ((_import select _index) select 1);
+
+[_inventory] call KPLIB_fnc_cratefiller_setInventory;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_openDialog.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_openDialog.sqf
new file mode 100644
index 000000000..2a4577fb2
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_openDialog.sqf
@@ -0,0 +1,44 @@
+/*
+ KPLIB_fnc_cratefiller_openDialog
+
+ File: fn_cratefiller_openDialog.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Opens the cratefiller dialog.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Create dialog
+createDialog "KPLIB_cratefiller";
+disableSerialization;
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlCat = _dialog displayCtrl 75810;
+private _ctrlWeapon = _dialog displayCtrl 75811;
+
+// Hide controls
+_ctrlWeapon ctrlShow false;
+
+// Reset variables
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTWEAPONS";
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTMAGAZINES";
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTATTACHMENTS";
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTGRENADES";
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTEXPLOSIVES";
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTVARIOUS";
+_ctrlCat lbAdd localize "STR_KPLIB_DIALOG_CRATEFILLER_LISTBACKPACKS";
+
+[] call KPLIB_fnc_cratefiller_showPresets;
+[] call KPLIB_fnc_cratefiller_getNearStorages;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_postInit.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_postInit.sqf
new file mode 100644
index 000000000..5d404d8ee
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_postInit.sqf
@@ -0,0 +1,34 @@
+/*
+ KPLIB_fnc_cratefiller_postInit
+
+ File: fn_cratefiller_postInit.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-05
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ The postInit function of a module takes care of starting/executing the modules functions or scripts.
+ Basically it starts/initializes the module functionality to make all provided features usable.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Module postInit finished [BOOL]
+*/
+
+if (isServer) then {diag_log format ["[KP LIBERATION] [%1] [POST] [CRATEFILLER] Module initializing...", diag_tickTime];};
+
+// Server section (dedicated and player hosted)
+if (isServer) then {
+ // create cratefiller presets on startup
+ [] call KPLIB_fnc_cratefiller_presets;
+
+ // Register arsenal filled event handler
+ ["KPLIB_arsenal_newLists", {[] call KPLIB_fnc_cratefiller_presets;}] call CBA_fnc_addEventHandler;
+};
+
+if (isServer) then {diag_log format ["[KP LIBERATION] [%1] [POST] [CRATEFILLER] Module initialized", diag_tickTime];};
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_preInit.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_preInit.sqf
new file mode 100644
index 000000000..cf8091e3a
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_preInit.sqf
@@ -0,0 +1,37 @@
+/*
+ KPLIB_fnc_example_preInit
+
+ File: fn_example_preInit.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-02-02
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ The preInit function defines global variables, adds event handlers and set some vital settings which are used in this module.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Module preInit finished [BOOL]
+*/
+
+if (isServer) then {
+ diag_log format ["[KP LIBERATION] [%1] [PRE] [CRATEFILLER] Module initializing...", diag_tickTime];
+
+/*
+ ----- Module Initialization -----
+*/
+
+ KPLIB_cratefiller_data = true call CBA_fnc_createNamespace;
+ publicVariable "KPLIB_cratefiller_data";
+
+};
+
+// Process CBA Settings
+[] call KPLIB_fnc_cratefiller_settings;
+
+if (isServer) then {diag_log format ["[KP LIBERATION] [%1] [PRE] [CRATEFILLER] Module initialized", diag_tickTime];};
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_presets.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_presets.sqf
new file mode 100644
index 000000000..e5ba239a7
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_presets.sqf
@@ -0,0 +1,63 @@
+/*
+ KPLIB_fnc_cratefiller_presets
+
+ File: fn_cratefiller_presets.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Creates the different categories of the whitelisted items.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Define variables
+private _weapons = [];
+private _grenades = [];
+private _explosives = [];
+private _items = [];
+private _backpacks = [];
+private _classNames = KPLIB_preset_arsenal_whitelist;
+private _type = [];
+private _specialItems = [];
+
+// Search for special items with wrong config entrys
+{
+ if (_x isKindOf ["CBA_MiscItem", configfile >> "CfgWeapons"]) then {_specialItems pushBack _x};
+} forEach _classNames;
+
+// Sort all classnames into the different categories
+{
+ _type = _x call BIS_fnc_itemType;
+ switch (_type select 0) do {
+ case "Weapon": {if ((_type select 1) isEqualTo "UnknownWeapon") then {_items pushBack _x} else {if ((_x call BIS_fnc_baseWeapon) isEqualTo _x) then {_weapons pushBack _x;};};};
+ case "Mine": {_explosives pushBack _x};
+ case "Magazine": {if ((((_type select 1) isEqualTo "Grenade") || ((_type select 1) isEqualTo "SmokeShell")) && !((getNumber (configFile >> "CfgMagazines" >> _x >> "type")) isEqualTo 16)) then {_grenades pushBack _x}};
+ case "Equipment": {if ((_type select 1) isEqualTo "Backpack") then {_backpacks pushBack _x}};
+ case "Item": {
+ switch (_type select 1) do {
+ case "AccessoryMuzzle" : {};
+ case "AccessoryPointer" : {};
+ case "AccessorySights" : {};
+ case "AccessoryBipod" : {};
+ default {_items pushBack _x};
+ };
+ };
+ };
+} forEach (_classnames arrayIntersect _classnames);
+
+_items append _specialItems;
+
+KPLIB_cratefiller_data setVariable ["weapons", [_weapons] call KPLIB_fnc_cratefiller_sortList, true];
+KPLIB_cratefiller_data setVariable ["grenades", [_grenades] call KPLIB_fnc_cratefiller_sortList, true];
+KPLIB_cratefiller_data setVariable ["explosives", [_explosives] call KPLIB_fnc_cratefiller_sortList, true];
+KPLIB_cratefiller_data setVariable ["items", [_items] call KPLIB_fnc_cratefiller_sortList, true];
+KPLIB_cratefiller_data setVariable ["backpacks", [_backpacks] call KPLIB_fnc_cratefiller_sortList, true];
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_removeEquipment.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_removeEquipment.sqf
new file mode 100644
index 000000000..31c3cfeb2
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_removeEquipment.sqf
@@ -0,0 +1,80 @@
+/*
+ KPLIB_fnc_cratefiller_removeEquipment
+
+ File: fn_cratefiller_removeEquipment.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Removes the given amount of the selected item from the storage.
+
+ Parameter(s):
+ _amount - Amount of the equipment which will be removed [NUMBER, defaults to 0]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_amount", 0, [0]]
+];
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlInventory = _dialog displayCtrl 75822;
+
+// Read controls
+private _index = lbCurSel _ctrlInventory;
+
+// Get the storage object
+private _storage = [] call KPLIB_fnc_cratefiller_getStorage;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+
+// Get the storage inventory
+private _inventory = [] call KPLIB_fnc_cratefiller_getInventory;
+
+// Check for empty selection
+if (_index isEqualTo -1) exitWith {
+ [localize "STR_KPLIB_HINT_SELECTION"] call CBA_fnc_notify;
+};
+
+// Check if the storage is in range
+if ((_storage distance2D (getMarkerPos _nearFOB)) > KPLIB_param_fobRange) exitWith {
+ [localize "STR_KPLIB_HINT_RANGE"] call CBA_fnc_notify;
+ [] remoteExecCall ["KPLIB_fnc_cratefiller_getNearStorages", (allPlayers - entities "HeadlessClient_F")];
+};
+
+// Check for inventory clear
+if (_amount isEqualTo 0) exitWith {
+ _inventory = [];
+ [_inventory] call KPLIB_fnc_cratefiller_setInventory;
+ [localize "STR_KPLIB_HINT_CLEARFULL"] call CBA_fnc_notify;
+};
+
+// Item selection
+private _item = ((_inventory select _index) select 1);
+
+// New item amount
+private _modify = (((_inventory select _index) select 2) - _amount);
+
+// Check if the amount is negative
+if (_modify < 0) then {
+ _modify = 0;
+};
+
+// Modify array
+(_inventory select _index) set [2, _modify];
+
+[_inventory] call KPLIB_fnc_cratefiller_setInventory;
+
+private _config = [_item] call KPLIB_fnc_cratefiller_getConfigPath;
+private _name = (getText (configFile >> _config >> _item >> "displayName"));
+private _picture = (getText (configFile >> _config >> _item >> "picture"));
+[
+ [_picture, 2],
+ [format [localize "STR_KPLIB_HINT_UNLOAD", _name, _amount]]
+] call CBA_fnc_notify;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_setInventory.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_setInventory.sqf
new file mode 100644
index 000000000..05b14669b
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_setInventory.sqf
@@ -0,0 +1,67 @@
+/*
+ KPLIB_fnc_cratefiller_setInventory
+
+ File: fn_cratefiller_setInventory.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Adds the items to the active storage.
+
+ Parameter(s):
+ _inventory - Inventory data which should be applied to the active storage [ARRAY, defaults to []]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_inventory", [], [[]]]
+];
+// Get the storage object
+private _storage = [] call KPLIB_fnc_cratefiller_getStorage;
+private _nearFOB = [] call KPLIB_fnc_common_getPlayerFob;
+
+// Check if the storage is in range
+if ((_storage distance2D (getMarkerPos _nearFOB)) > KPLIB_param_fobRange) exitWith {
+ [localize "STR_KPLIB_HINT_RANGE"] call CBA_fnc_notify;
+ [] remoteExecCall ["KPLIB_fnc_cratefiller_getNearStorages", (allPlayers - entities "HeadlessClient_F")];
+};
+
+// Check if the storage will be empty
+if (count _inventory isEqualTo 0) exitWith {
+ clearWeaponCargoGlobal _storage;
+ clearMagazineCargoGlobal _storage;
+ clearItemCargoGlobal _storage;
+ clearBackpackCargoGlobal _storage;
+ [] remoteExecCall ["KPLIB_fnc_cratefiller_showInventory", (allPlayers - entities "HeadlessClient_F")];
+};
+
+// Clear the storage
+clearWeaponCargoGlobal _storage;
+clearMagazineCargoGlobal _storage;
+clearItemCargoGlobal _storage;
+clearBackpackCargoGlobal _storage;
+
+// Count the variable index
+private _count = count _inventory;
+private _item = "";
+private _amount = 0;
+
+// Adapt the cargo into KPCF variable
+for "_i" from 0 to (_count-1) do {
+ _item = (_inventory select _i) select 1;
+ _amount = (_inventory select _i) select 2;
+ if (!(_storage canAdd [_item, _amount])) exitWith {};
+ if (((_inventory select _i) select 1) isKindOf "Bag_Base") then {
+ _storage addBackpackCargoGlobal [_item, _amount];
+ } else {
+ _storage addItemCargoGlobal [_item, _amount];
+ };
+};
+
+[] remoteExecCall ["KPLIB_fnc_cratefiller_showInventory", (allPlayers - entities "HeadlessClient_F")];
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_settings.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_settings.sqf
new file mode 100644
index 000000000..e44b9cc0a
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_settings.sqf
@@ -0,0 +1,37 @@
+/*
+ KPLIB_fnc_cratefiller_settings
+
+ File: fn_cratefiller_settings.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-05
+ Last Update: 2019-04-06
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ CBA Settings initialization for this module
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+/*
+ ----- CRATEFILLER SETTINGS -----
+*/
+
+// KPLIB_param_cratefiller
+// Enables/Disables the cratefiller.
+// Default: true
+[
+ "KPLIB_param_cratefiller",
+ "CHECKBOX",
+ [localize "STR_KPLIB_SETTINGS_CRATEFILLER_ACTIVATE", localize "STR_KPLIB_SETTINGS_CRATEFILLER_ACTIVATE_TT"],
+ localize "STR_KPLIB_SETTINGS_CRATEFILLER",
+ true,
+ 1,
+ {}
+] call CBA_Settings_fnc_init;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_showInventory.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_showInventory.sqf
new file mode 100644
index 000000000..702e871d5
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_showInventory.sqf
@@ -0,0 +1,78 @@
+/*
+ KPLIB_fnc_cratefiller_showInventory
+
+ File: fn_cratefiller_showInventory.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Displays the items of the active storage.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlInventory = _dialog displayCtrl 75822;
+private _ctlrProgress = _dialog displayCtrl 75823;
+
+// Check if dialog is open
+if (isNull _dialog) exitWith {};
+
+// Reset variables
+lbClear _ctrlInventory;
+
+private _config = "";
+private _type = "";
+private _itemMass = 0;
+private _index = 0;
+
+// Get the active storage
+private _storage = [] call KPLIB_fnc_cratefiller_getStorage;
+
+// Get the storage inventory
+private _inventory = [] call KPLIB_fnc_cratefiller_getInventory;
+
+// Fill the controls
+{
+ _index = _ctrlInventory lbAdd (format ["%1x %2", str (_x select 2), _x select 0]);
+ _config = [_x select 1] call KPLIB_fnc_cratefiller_getConfigPath;
+ _ctrlInventory lbSetPicture [_index, getText (configFile >> _config >> (_x select 1) >> "picture")];
+} forEach _inventory;
+
+private _load = 0;
+
+// Check for an active storage
+if (isNull _storage) exitWith {
+ _ctlrProgress progressSetPosition 0;
+};
+
+// Get the mass of each item
+{
+ _type = (_x select 1);
+ _config = [_type] call KPLIB_fnc_cratefiller_getConfigPath;
+ if (_config isEqualTo "CfgWeapons") then {
+ _itemMass = getNumber (configfile >> _config >> _type >> "WeaponSlotsInfo" >> "mass");
+ if (_itemMass isEqualTo 0) then {
+ _itemMass = getNumber (configfile >> _config >> _type >> "ItemInfo" >> "mass");
+ };
+ } else {
+ _itemMass = getNumber (configFile >> _config >> _type >> "mass");
+ };
+ _load = _load + (_itemMass * (_x select 2));
+} forEach _inventory;
+
+_type = typeOf _storage;
+_config = [_type] call KPLIB_fnc_cratefiller_getConfigPath;
+private _maxLoad = getNumber (configFile >> _config >> _type >> "maximumLoad");
+private _loadFactor = _load / _maxLoad;
+
+_ctlrProgress progressSetPosition _loadFactor;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_showPresets.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_showPresets.sqf
new file mode 100644
index 000000000..0c0cf7b9f
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_showPresets.sqf
@@ -0,0 +1,35 @@
+/*
+ KPLIB_fnc_cratefiller_showPresets
+
+ File: fn_cratefiller_showPresets.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-06
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Reads all saved presets and lists them.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// Dialog controls
+private _dialog = findDisplay 758026;
+private _ctrlImport = _dialog displayCtrl 75821;
+
+// Reset variables
+lbClear _ctrlImport;
+
+// Read the presets from profileNamespace
+private _import = profileNamespace getVariable ["KPLIB_cratefiller_preset", []];
+
+// Fill controls
+{
+ _ctrlImport lbAdd (_x select 0);
+} forEach _import;
+
+true
diff --git a/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_sortList.sqf b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_sortList.sqf
new file mode 100644
index 000000000..efa4dc6e4
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/fnc/fn_cratefiller_sortList.sqf
@@ -0,0 +1,40 @@
+/*
+ KPLIB_fnc_cratefiller_sortList
+
+ File: fn_cratefiller_sortList.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-06
+ Last Update: 2019-04-06
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Sorts the displaynames of the given item array.
+
+ Parameter(s):
+ _list - Array of elements which should be sorted [ARRAY, defaults to []]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_list", [], [[]]]
+];
+
+private _config = "";
+private _sortedList = [];
+
+{
+ _config = [_x] call KPLIB_fnc_cratefiller_getConfigPath;
+ if ((getText (configFile >> _config >> _x >> "displayName")) isEqualTo "") then {
+ } else {
+ _sortedList pushBack [
+ (getText (configFile >> _config >> _x >> "displayName")),
+ _x
+ ];
+ };
+} forEach _list;
+
+_sortedList sort true;
+
+_sortedList
diff --git a/Missionframework/modules/26_cratefiller/functions.hpp b/Missionframework/modules/26_cratefiller/functions.hpp
new file mode 100644
index 000000000..22b7cb40b
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/functions.hpp
@@ -0,0 +1,80 @@
+/*
+ KP LIBERATION MODULE FUNCTIONS
+
+ File: functions.hpp
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-05
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Defines for all functions, which are brought by this module.
+*/
+
+class cratefiller {
+ file = "modules\26_cratefiller\fnc";
+
+ // Adds the given amount of the selected item to the inventory
+ class cratefiller_addEquipment {};
+
+ // Changes the shown equipment category
+ class cratefiller_createEquipmentList {};
+
+ // Creates a list with valueable magazines or attachments
+ class cratefiller_createSubList {};
+
+ // Deletes the selected preset
+ class cratefiller_deletePreset {};
+
+ // Exports the active inventory
+ class cratefiller_export {};
+
+ // Gets all inventory items of the storage
+ class cratefiller_getInventory {};
+
+ // Gets the config path / type of the given classname
+ class cratefiller_getConfigPath {};
+
+ // Scans the fob for possible storages
+ class cratefiller_getNearStorages {};
+
+ // Returns the active storage
+ class cratefiller_getStorage {};
+
+ // Imports the selected inventory
+ class cratefiller_import {};
+
+ // Opens the cratefiller dialog
+ class cratefiller_openDialog {};
+
+ // Module post initialization
+ class cratefiller_postInit {
+ postInit = 1;
+ };
+
+ // Module pre initialization
+ class cratefiller_preInit {
+ preInit = 1;
+ };
+
+ // Creates the different categories of the whitelisted items
+ class cratefiller_presets {};
+
+ // Removes the given amount of the selected item from the storage
+ class cratefiller_removeEquipment {};
+
+ // Adds the items to the active storage
+ class cratefiller_setInventory {};
+
+ // CBA Settings for this module
+ class cratefiller_settings {};
+
+ // Displays the items of the active storage
+ class cratefiller_showInventory {};
+
+ // Reads all saved presets and lists them
+ class cratefiller_showPresets {};
+
+ // Sorts the displaynames of the given item array
+ class cratefiller_sortList {};
+};
diff --git a/Missionframework/modules/26_cratefiller/ui.hpp b/Missionframework/modules/26_cratefiller/ui.hpp
new file mode 100644
index 000000000..250f348a9
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/ui.hpp
@@ -0,0 +1,14 @@
+/*
+ KP LIBERATION MODULE UI FILE
+
+ File: ui.hpp
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-05
+ Last Update: 2019-04-05
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Initializes the ui defines, dialogs and elements which are brought by this module.
+*/
+
+#include "ui\KPLIB_cratefiller.hpp"
diff --git a/Missionframework/modules/26_cratefiller/ui/KPLIB_cratefiller.hpp b/Missionframework/modules/26_cratefiller/ui/KPLIB_cratefiller.hpp
new file mode 100644
index 000000000..da08ea0b2
--- /dev/null
+++ b/Missionframework/modules/26_cratefiller/ui/KPLIB_cratefiller.hpp
@@ -0,0 +1,226 @@
+/*
+ KP Liberation cratefiller dialog
+
+ File: KPLIB_cratefiller.hpp
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-04-05
+ Last Update: 2019-04-07
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+
+ Description:
+ Just a placeholder file for the example module.
+*/
+
+
+class KPLIB_cratefiller {
+ idd = 758026;
+ movingEnable = 0;
+
+ class controlsBackground {
+
+ class KPLIB_DialogTitle: KPGUI_PRE_DialogTitleS {
+ text = "$STR_KPLIB_DIALOG_CRATEFILLER_TITLE";
+ };
+
+ class KPLIB_DialogArea: KPGUI_PRE_DialogBackgroundS {};
+
+ // Crates
+
+ class KPLIB_TransportTitle: KPGUI_PRE_InlineTitle {
+ text = "$STR_KPLIB_DIALOG_CRATEFILLER_TITLETRANSPORT";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,1,2);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,0,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,2);
+ h = KP_GETH(KP_HEIGHT_VAL_S,16);
+ };
+
+ // Equipment
+
+ class KP_EquipmentTitle: KPLIB_TransportTitle {
+ text = "$STR_KPLIB_DIALOG_CRATEFILLER_TITLEEQUIPMENT";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,2);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,0,48);
+ };
+
+ // Inventory
+
+ class KP_InventoryTitle: KPLIB_TransportTitle {
+ text = "$STR_KPLIB_DIALOG_CRATEFILLER_TITLEINVENTORY";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,5,48);
+ };
+
+ };
+
+ class controls {
+
+ // Crates
+
+ class KPLIB_ComboCargo: KPGUI_PRE_Combo {
+ idc = 75802;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,1,2);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,3,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,(24/11));
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_INVENTORY_TT";
+ onLBSelChanged = "[] call KPLIB_fnc_cratefiller_showInventory";
+ };
+
+ class KPLIB_RefreshCargo: KPGUI_PRE_CloseCross {
+ text = "KPGUI\res\icon_refresh.paa";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,23,24);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,3,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,24);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_REFRESH_TT";
+ action = "[] call KPLIB_fnc_cratefiller_getNearStorages";
+ };
+
+ // Equipment
+
+ class KPLIB_ComboEquipment: KPGUI_PRE_Combo {
+ idc = 75810;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,1);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,3,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,2);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_CATEGORY_TT";
+ onLBSelChanged = "[] call KPLIB_fnc_cratefiller_createEquipmentList";
+ };
+
+ class KPLIB_ComboWeapons: KPLIB_ComboEquipment {
+ idc = 75811;
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,5,48);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_WEAPONSELECTION_TT";
+ onLBSelChanged = "[] call KPLIB_fnc_cratefiller_createSubList";
+ };
+
+ class KPLIB_EquipmentList: KPGUI_PRE_ListBox {
+ idc = 75812;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,1);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,8,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,(16/7));
+ h = KP_GETH(KP_HEIGHT_VAL_S,(48/38));
+ };
+
+ class KPLIB_ButtonAddEquipment: KPGUI_PRE_InlineButton {
+ text = "+ 1";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,7,16);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,16,96);
+ w = KP_GETW(KP_WIDTH_VAL_S,16);
+ h = KP_GETH(KP_HEIGHT_VAL_S,(96/19));
+ onButtonClick = "[1] call KPLIB_fnc_cratefiller_addEquipment";
+ };
+
+ class KPLIB_ButtonAddEquipment5: KPLIB_ButtonAddEquipment {
+ text = "+ 5";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,35,96);
+ onButtonClick = "[5] call KPLIB_fnc_cratefiller_addEquipment";
+ };
+
+ class KPLIB_ButtonAddEquipment10: KPLIB_ButtonAddEquipment {
+ text = "+ 10";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,54,96);
+ onButtonClick = "[10] call KPLIB_fnc_cratefiller_addEquipment";
+ };
+
+ class KPLIB_ButtonAddEquipment20: KPLIB_ButtonAddEquipment {
+ text = "+ 20";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,73,96);
+ onButtonClick = "[20] call KPLIB_fnc_cratefiller_addEquipment";
+ };
+
+ // Inventory
+
+ class KPLIB_ExportName: KPGUI_PRE_EditBox {
+ idc = 75820;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,2,4);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,8,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,4);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_EXPORT_TT";
+ };
+
+ class KPLIB_ImportName: KPGUI_PRE_Combo {
+ idc = 75821;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,3,4);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,8,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,4);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_IMPORT_TT";
+ };
+
+ class KPLIB_ButtonExport: KPGUI_PRE_InlineButton {
+ text = "Export";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,2,4);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,10,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,4);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ onButtonClick = "[] call KPLIB_fnc_cratefiller_export";
+ };
+
+ class KPLIB_ButtonImport: KPLIB_ButtonExport {
+ text = "Import";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,3,4);
+ w = KP_GETW(KP_WIDTH_VAL_S,(24/5));
+ onButtonClick = "[] call KPLIB_fnc_cratefiller_import";
+ };
+
+ class KPLIB_DeletePreset: KPGUI_PRE_CloseCross {
+ text = "KPGUI\res\icon_recyclebin.paa";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,23,24);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,10,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,24);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_DELETE_TT";
+ action = "[] call KPLIB_fnc_cratefiller_deletePreset";
+ };
+
+ class KPLIB_InventoryList: KPGUI_PRE_ListBox {
+ idc = 75822;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,8,16);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,12,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,(16/7));
+ h = KP_GETH(KP_HEIGHT_VAL_S,(48/34));
+ };
+
+ class KPLIB_ButtonRemoveEquipment: KPGUI_PRE_InlineButton {
+ text = "- 1";
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,15,16);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,24,96);
+ w = KP_GETW(KP_WIDTH_VAL_S,16);
+ h = KP_GETH(KP_HEIGHT_VAL_S,(96/17));
+ onButtonClick = "[1] call KPLIB_fnc_cratefiller_removeEquipment";
+ };
+
+ class KPLIB_ButtonRemoveEquipment5: KPLIB_ButtonRemoveEquipment {
+ text = "- 5";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,41,96);
+ onButtonClick = "[5] call KPLIB_fnc_cratefiller_removeEquipment";
+ };
+
+ class KPLIB_ButtonRemoveEquipment10: KPLIB_ButtonRemoveEquipment {
+ text = "- 10";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,58,96);
+ onButtonClick = "[10] call KPLIB_fnc_cratefiller_removeEquipment";
+ };
+
+ class KPLIB_ButtonRemoveEquipmentClear: KPLIB_ButtonRemoveEquipment {
+ text = "Clear";
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,75,96);
+ onButtonClick = "[0] call KPLIB_fnc_cratefiller_removeEquipment";
+ };
+
+ class KPLIB_ProgressBar : KPGUI_PRE_ProgressBar {
+ idc = 75823;
+ x = KP_GETCX(KP_X_VAL_S,KP_WIDTH_VAL_S,0,1);
+ y = KP_GETCY(KP_Y_VAL_S,KP_HEIGHT_VAL_S,46,48);
+ w = KP_GETW(KP_WIDTH_VAL_S,1);
+ h = KP_GETH(KP_HEIGHT_VAL_S,24);
+ tooltip = "$STR_KPLIB_DIALOG_CRATEFILLER_FILLLEVEL_TT"
+ };
+
+ class KP_DialogCross: KPGUI_PRE_DialogCrossS {};
+
+ };
+
+};
diff --git a/Missionframework/modules/README.md b/Missionframework/modules/README.md
index 3fc6468a7..8713fa207 100644
--- a/Missionframework/modules/README.md
+++ b/Missionframework/modules/README.md
@@ -43,6 +43,7 @@ With these additions the intended complexity comes into the mission. It is highl
23 Logistic
24 Enemy Commander
25 Friendly Commander Managing Dialog
+26 Cratefiller
```
### TBA
Mod specific compatibility modules
diff --git a/Missionframework/stringtable.xml b/Missionframework/stringtable.xml
index b61ac2282..a6de78341 100644
--- a/Missionframework/stringtable.xml
+++ b/Missionframework/stringtable.xml
@@ -897,8 +897,8 @@
Vorratsstand:
- %1 empty or used from %2
- %1 leer oder angebrochen von %2
+ %1 from %2 magazines full
+ %1 von %2 Magazinen voll
%1 from %2 gallons left
@@ -940,6 +940,103 @@
Total costs:
Gesamtkosten:
+
+
+
+ Weapons
+ Waffen
+ Bronie
+
+
+ Magazines
+ Magazine
+ Magazynki
+
+
+ Weapon attachments
+ Waffenzubehör
+ Akcesoria do broni
+
+
+ Grenades
+ Granaten
+ Granaty
+
+
+ Explosives
+ Sprengstoffe
+ Ładunki wybuchowe
+
+
+ Others
+ Sonstiges
+ Inne
+
+
+ Backpacks
+ Rucksäcke
+ Plecaki
+
+
+ KP Cratefiller
+ KP Kistenfüller
+ KP Cratefiller
+
+
+ Transport medium
+ Transportmedium
+ Środek transportu
+
+
+ Equipment
+ Ausrüstung
+ Ekwipunek
+
+
+ Inventory
+ Inventar
+ Ekwipunek
+
+
+ Select an inventory that you want to edit.
+ Wähle einen Laderaum aus, den du bearbeiten möchtest.
+ Wybierz ekwipunek który chcesz edytować.
+
+
+ Search for new inventories.
+ Nach neuem Laderaum suchen.
+ Szukaj nowych ekwipunków.
+
+
+ Choose a category from which you want to stow items.
+ Wähle eine Kategorie aus, von der du Gegenstände verladen willst.
+ Wybierz kategorie z której chcesz pobrać przedmioty.
+
+
+ Choose a weapon to find the right magazines or attachments.
+ Wähle eine Waffe um die passenden Magazine oder Zubehör zu finden.
+ Wybierz broń do której mają być wyszukane magazynki oraz dodatki.
+
+
+ Enter the name of the preset to be exported.
+ Trage den Namen für das zu exportierende Ausrüstungsset ein.
+ Wpisz nazwę szablonu do wyeksportowania.
+
+
+ Select the preset to be imported.
+ Wähle das zu importierende Ausrüstungsset.
+ Wybierz szablon do zaimportowania.
+
+
+ Deletes the selected preset.
+ Löscht das ausgewählte Ausrüstungsset.
+ Usuwa wybrany szablon.
+
+
+ Shows the current cargo space.
+ Zeigt den aktuellen Laderaumstand.
+ Pokazuje aktualny stan załadunku.
+
@@ -1008,6 +1105,58 @@
Mancano ancora %1 minuti al respawn.
Falta(m) %1 minuto(s) de tempo de espera do respawn móvel.
+
+ Not enough storage space left.
+ Nicht genügend freie Lagerplätze vorhanden.
+
+
+ Not enough resources available.
+ Nicht genügend Ressourcen vorhanden.
+
+
+ Vehicle state changed, refresh your selection to try again.
+ Fahrzeugzustand hat sich geändert. Aktualisiere deine Auswahl und versuche es erneut.
+
+
+ Selected transport medium is out of range.
+ Ausgewähltes Transportmedium ist außer Reichweite.
+ Wybrany środek transportu jest poza zasięgiem.
+
+
+ The selected storage doesn't have sufficient space.
+ Der ausgewählte Laderaum hat keinen ausreichenden Platz.
+ Wybrany kontener nie ma dość wolnego miejsca.
+
+
+ %1 was loaded %2 times.
+ %1 wurde %2 mal geladen.
+ %1 zostało załadowane %2 razy.
+
+
+ Incomplete selection.
+ Unvollständige Auswahl.
+ Niepełny wybór.
+
+
+ Invalid name.
+ Ungültiger Name.
+ Nieprawidłowa nazwa.
+
+
+ No storage selected.
+ Kein Laderaum ausgewählt.
+ Nie wybrano skrzyni.
+
+
+ Selected storage is emptied.
+ Ausgewählter Laderaum wurde geleert.
+ Wybrana skrzynia została opróżniona.
+
+
+ %1 was unloaded %2 times.
+ %1 wurde %2 mal entladen.
+ %1 zostało wyładowane %2 razy.
+
@@ -1539,6 +1688,20 @@
Defines the price of 1000 fuel cargo for ACE refuel vehicles.
Definiert die Kosten für 1000 Treibstoffvorrat für ein ACE Tank Fahrzeug.
+
+
+
+ KPLIB - Cratefiller
+ KPLIB - Kistenfüller
+
+
+ Enable Cratefiller
+ Kistenfüller aktivieren
+
+
+ Enables/Disables the Liberation cratefiller.
+ Aktiviert/Deaktiviert den Liberation Kistenfüller.
+
@@ -1683,6 +1846,10 @@
Resupply
Versorgung
+
+ Cratefiller
+ Kistenfüller
+
@@ -1720,6 +1887,10 @@
Resupply
Nachschub
+
+ Cratefiller
+ Kistenfüller
+
-- Miscellaneous --
-- Sonstiges --