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 --