diff --git a/.vscode/settings.json b/.vscode/settings.json
index f0ae34b27..f9dbda403 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -22,6 +22,8 @@
"KPLIB_param_aceResupply",
"KPLIB_param_ammoInfluence",
"KPLIB_param_arsenalType",
+ "KPLIB_param_captiveIntel",
+ "KPLIB_param_captiveIntelRandom",
"KPLIB_param_clearVehicleCargo",
"KPLIB_param_commanderZeusMode",
"KPLIB_param_copyDistance",
@@ -66,6 +68,7 @@
"KPLIB_param_sectorActRange",
"KPLIB_param_sectorCap",
"KPLIB_param_sectorCapRange",
+ "KPLIB_param_sectorCapRatio",
"KPLIB_param_stamina",
"KPLIB_param_subCommanderZeusMode",
"KPLIB_param_timeMulti",
diff --git a/Missionframework/KPLIB_functions.hpp b/Missionframework/KPLIB_functions.hpp
index 26a062a8b..4a78770fe 100644
--- a/Missionframework/KPLIB_functions.hpp
+++ b/Missionframework/KPLIB_functions.hpp
@@ -4,7 +4,7 @@
File: KPLIB_functions.hpp
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-16
- Last Update: 2019-06-22
+ Last Update: 2019-09-10
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Description:
@@ -30,5 +30,6 @@ class KPLIB {
#include "modules\24_enemy\functions.hpp"
#include "modules\26_cratefiller\functions.hpp"
#include "modules\27_mission\functions.hpp"
+ #include "modules\28_captive\functions.hpp"
#include "modules\90_missions\functions.hpp"
};
diff --git a/Missionframework/modules/01_common/fnc/fn_common_addAction.sqf b/Missionframework/modules/01_common/fnc/fn_common_addAction.sqf
index b2f9ed9f9..c50b90b04 100644
--- a/Missionframework/modules/01_common/fnc/fn_common_addAction.sqf
+++ b/Missionframework/modules/01_common/fnc/fn_common_addAction.sqf
@@ -4,7 +4,7 @@
File: fn_common_addAction.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-12-05
- Last Update: 2019-03-30
+ Last Update: 2019-09-28
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Public: Yes
@@ -13,27 +13,32 @@
This should be used if adding an action to an object to ensure the localization is correct.
Parameter(s):
- _target - Object to add the action to [OBJECT, defaults to objNull]
- _string - Stringtable string key for the action [STRING, defaults to ""]
- _args - Array of all other arguments for addAction without the title [ARRAY, defaults to []]
- _color - Hex code of desired color e.g. #FF8000. Optional. [STRING, defaults to ""]
+ _target - Object to add the action to [OBJECT, defaults to objNull]
+ _string - Stringtable string key or string/variable array for the action [STRING/ARRAY, defaults to ""]
+ _args - Array of all other arguments for addAction without the title [ARRAY, defaults to []]
+ _color - Hex code of desired color e.g. #FF8000. Optional. [STRING, defaults to ""]
Returns:
- Action added [BOOL]
+ Action ID [NUMBER]
*/
params [
["_target", objNull, [objNull]],
- ["_string", "", [""]],
+ ["_string", "", ["", []]],
["_args", [], [[]], []],
["_color", "", [""]]
];
// Leave if there are parameters missing
-if (isNull _target || _string isEqualTo "" || _args isEqualTo []) exitWith {false};
-
-// Localize local to clients language
-_string = localize _string;
+if (isNull _target || _string isEqualTo "" || _args isEqualTo []) exitWith {-1};
+
+// Check if given string is string key or formatted text
+if (_string isEqualType "") then {
+ // Localize local to clients language
+ _string = localize _string;
+} else {
+ _string = format [localize (_string select 0), _string select 1];
+};
// Add color, if provided
if !(_color isEqualTo "") then {
@@ -45,6 +50,4 @@ private _actionArray = [_string];
_actionArray append _args;
// Add action to target
-_target addAction _actionArray;
-
-true
+_target addAction _actionArray
diff --git a/Missionframework/modules/02_core/fnc/fn_core_handleSector.sqf b/Missionframework/modules/02_core/fnc/fn_core_handleSector.sqf
index fd081a4ae..7682a66eb 100644
--- a/Missionframework/modules/02_core/fnc/fn_core_handleSector.sqf
+++ b/Missionframework/modules/02_core/fnc/fn_core_handleSector.sqf
@@ -4,7 +4,7 @@
File: fn_core_handleSector.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-05-06
- Last Update: 2019-04-22
+ Last Update: 2019-09-29
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Public: No
@@ -28,11 +28,18 @@ private _handler = [
// Per Tick
_this getVariable "params" params ["_sector", "_sectorPos"];
- // If there are no enemy units in two times the capture range and friendly units are in capture range
+ // If the enemy units within capture range are outnumbered and there are no enemy tanks
// capture the sector
+ // ToDo: optimize
if (
- !([_sectorPos, 2 * KPLIB_param_sectorCapRange, [KPLIB_preset_sideE]] call KPLIB_fnc_core_areUnitsNear)
- && {[_sectorPos, KPLIB_param_sectorCapRange] call KPLIB_fnc_core_areUnitsNear}
+ (
+ ({side _x isEqualTo KPLIB_preset_sideF} count (_sectorPos nearEntities ["AllVehicles", KPLIB_param_sectorCapRange])) >
+ ({side _x isEqualTo KPLIB_preset_sideE} count (_sectorPos nearEntities ["AllVehicles", KPLIB_param_sectorCapRange * 1.5]))
+ * KPLIB_param_sectorCapRatio
+ ) && {
+ ({side _x isEqualTo KPLIB_preset_sideE} count (_sectorPos nearEntities ["Tank", KPLIB_param_sectorCapRange * 1.5]))
+ isEqualTo 0
+ }
) then {
[format ["Sector %1 (%2) captured", markerText _sector, _sector], "CORE", true] call KPLIB_fnc_common_log;
diff --git a/Missionframework/modules/02_core/fnc/fn_core_settings.sqf b/Missionframework/modules/02_core/fnc/fn_core_settings.sqf
index 7fd8c2cf4..be2283b95 100644
--- a/Missionframework/modules/02_core/fnc/fn_core_settings.sqf
+++ b/Missionframework/modules/02_core/fnc/fn_core_settings.sqf
@@ -4,7 +4,7 @@
File: fn_core_settings.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-11-11
- Last Update: 2019-06-15
+ Last Update: 2019-09-10
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Public: No
@@ -61,6 +61,19 @@
{}
] call CBA_Settings_fnc_init;
+// KPLIB_param_sectorCapRatio
+// Ratio of enemy units to friendly units, which is needed to capture a sector.
+// Default: 1.5
+[
+ "KPLIB_param_sectorCapRatio",
+ "SLIDER",
+ [localize "STR_KPLIB_SETTINGS_SECTOR_SECRATIO", localize "STR_KPLIB_SETTINGS_SECTOR_SECRATIO_TT"],
+ localize "STR_KPLIB_SETTINGS_SECTOR",
+ [1, 10, 1.5, 1],
+ 1,
+ {}
+] call CBA_Settings_fnc_init;
+
/*
----- BI REVIVE SETTINGS -----
diff --git a/Missionframework/modules/02_core/fnc/fn_core_setupPlayerActions.sqf b/Missionframework/modules/02_core/fnc/fn_core_setupPlayerActions.sqf
index 8d4ac3437..6acc17b8d 100644
--- a/Missionframework/modules/02_core/fnc/fn_core_setupPlayerActions.sqf
+++ b/Missionframework/modules/02_core/fnc/fn_core_setupPlayerActions.sqf
@@ -4,7 +4,7 @@
File: fn_common_setupPlayerActions.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-05-28
- Last Update: 2019-04-22
+ Last Update: 2019-09-12
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Public: No
@@ -19,7 +19,7 @@
*/
// Actions avalible LOCALLY to player
-if(hasInterface) then {
+if (hasInterface) then {
// FOB redeploy action
private _fobRedeployCondition = '_target isEqualTo _originalTarget && !(_originalTarget getVariable ["KPLIB_fob", ""] isEqualTo "")';
private _actionArray = [localize "STR_KPLIB_ACTION_REDEPLOY", {["KPLIB_respawn_requested", _this] call CBA_fnc_localEvent}, nil, -801, false, true, "", _fobRedeployCondition, 10];
diff --git a/Missionframework/modules/15_build/README.md b/Missionframework/modules/15_build/README.md
index fab408e10..a126bef70 100644
--- a/Missionframework/modules/15_build/README.md
+++ b/Missionframework/modules/15_build/README.md
@@ -99,3 +99,6 @@ Furthermore it handles the saving/loading of all objects which are buildable/spa
### Scripts
No scripts will be started by this module
+
+### Implemented permissions
+* Build menu
diff --git a/Missionframework/modules/16_garrison/README.md b/Missionframework/modules/16_garrison/README.md
index 2f24ad524..252f823fc 100644
--- a/Missionframework/modules/16_garrison/README.md
+++ b/Missionframework/modules/16_garrison/README.md
@@ -50,3 +50,6 @@ It'll also provide functions to change garrison data and a garrison management d
### Scripts
No scripts will be started by this module
+
+### Implemented permissions
+* Garrison management
diff --git a/Missionframework/modules/16_garrison/fnc/fn_garrison_changeOwner.sqf b/Missionframework/modules/16_garrison/fnc/fn_garrison_changeOwner.sqf
index 18b7a0980..339bf2fd3 100644
--- a/Missionframework/modules/16_garrison/fnc/fn_garrison_changeOwner.sqf
+++ b/Missionframework/modules/16_garrison/fnc/fn_garrison_changeOwner.sqf
@@ -4,7 +4,7 @@
File: fn_garrison_changeOwner.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-10-23
- Last Update: 2019-03-30
+ Last Update: 2019-09-28
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Public: Yes
diff --git a/Missionframework/modules/16_garrison/fnc/fn_garrison_despawn.sqf b/Missionframework/modules/16_garrison/fnc/fn_garrison_despawn.sqf
index cf76fd858..08593af71 100644
--- a/Missionframework/modules/16_garrison/fnc/fn_garrison_despawn.sqf
+++ b/Missionframework/modules/16_garrison/fnc/fn_garrison_despawn.sqf
@@ -4,7 +4,7 @@
File: fn_garrison_despawn.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-10-20
- Last Update: 2019-05-04
+ Last Update: 2019-09-29
License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
Public: No
@@ -40,7 +40,7 @@ private _heavyVeh = [];
deleteVehicle _x;
_infantry = _infantry + 1;
};
-} forEach (_activeGarrisonRef select 2);
+} forEach ((_activeGarrisonRef select 2) select {!(_x getVariable ["KPLIB_captured", false])});
/* !NOTE!
With the current despawn checks for the vehicles, the vehicle won't be deleted if it's a wreck or the crew bailed out due to damage.
@@ -54,7 +54,10 @@ private _heavyVeh = [];
if (!((crew _x) isEqualTo []) && !(_x in (KPLIB_preset_vehTransPlE + KPLIB_preset_vehLightUnarmedPlE))) then {
_vehicle = _x;
_lightVeh pushBack (typeOf _x);
- {_handledCrew pushBack _x; _vehicle deleteVehicleCrew _x;} forEach (crew _x);
+ {
+ _handledCrew pushBack _x;
+ _vehicle deleteVehicleCrew _x;
+ } forEach ((crew _x) select {!(_x getVariable ["KPLIB_captured", false])});
};
deleteVehicle _x;
};
@@ -65,7 +68,10 @@ private _heavyVeh = [];
if ((alive _x) && !((crew _x) isEqualTo []) && !(_x getVariable ["KPLIB_captured", false])) then {
_vehicle = _x;
_heavyVeh pushBack (typeOf _x);
- {_handledCrew pushBack _x; _vehicle deleteVehicleCrew _x;} forEach (crew _x);
+ {
+ _handledCrew pushBack _x;
+ _vehicle deleteVehicleCrew _x;
+ } forEach ((crew _x) select {!(_x getVariable ["KPLIB_captured", false])});
deleteVehicle _vehicle;
};
} forEach (_activeGarrisonRef select 4);
@@ -76,7 +82,7 @@ private _heavyVeh = [];
deleteVehicle _x;
_infantry = _infantry + 1;
};
-} forEach (_activeGarrisonRef select 5);
+} forEach ((_activeGarrisonRef select 5) select {!(_x getVariable ["KPLIB_captured", false])});
// Update persistent garrison data
if ((_activeGarrisonRef select 1) isEqualTo (_persistentGarrisonRef select 1)) then {
diff --git a/Missionframework/modules/26_cratefiller/README.md b/Missionframework/modules/26_cratefiller/README.md
index f3c81c0d2..373c65eb9 100644
--- a/Missionframework/modules/26_cratefiller/README.md
+++ b/Missionframework/modules/26_cratefiller/README.md
@@ -116,3 +116,6 @@ Calls KPLIB_fnc_cratefiller_presets to process the new white- and blacklist
### Scripts
No scripts will be started by this module
+
+### Implemented permissions
+* Cratefiller
diff --git a/Missionframework/modules/27_mission/README.md b/Missionframework/modules/27_mission/README.md
index b7775ec0d..e3277c17e 100644
--- a/Missionframework/modules/27_mission/README.md
+++ b/Missionframework/modules/27_mission/README.md
@@ -89,3 +89,6 @@ Processes a mission start or abort dependent on the passed arguments
### Scripts
No scripts will be started by this module
+
+### Implemented permissions
+* Mission dialog
diff --git a/Missionframework/modules/28_captive/README.md b/Missionframework/modules/28_captive/README.md
new file mode 100644
index 000000000..e090ff0b1
--- /dev/null
+++ b/Missionframework/modules/28_captive/README.md
@@ -0,0 +1,108 @@
+# KP Liberation Module Description
+
+## Captive Module
+This module handles the prisoners of war.
+It'll check for remaining soldiers on sector capture and ensure that they'll surrender and can get handled through interactions.
+
+### Dependencies
+* Common
+
+### Consumed events
+**KPLIB_sector_captured** (server side)
+Calls KPLIB_fnc_captive_checkSector to search and handle remaining units
+
+**KPLIB_captive_arrested** (server side)
+Plays the arrest moves for captives to ensure that the moves are handled at the correct locality
+
+**ace_captiveStatusChanged** (server side)
+Calls KPLIB_fnc_captive_setAceCaptive to handle the ace captive system and integrate the lib stuff to the captives
+
+**KPLIB_captive_load** (global)
+Move the captive into the vehicle cargo
+
+**KPLIB_captive_unload** (global)
+Move the captive out of the vehicle cargo
+
+**KPLIB_captive_loaded** (client side)
+Handles the captive load, to ensure that the actions get applied and remove accordingly
+
+**KPLIB_captive_unloaded** (client side)
+Removes the unload action from the vehicle
+
+### Emitted events
+**KPLIB_captive_surrendered** (global)
+Emitted when a unit surrenders
+
+**KPLIB_captive_arrested** (global)
+Emitted when a surrendered unit gets arrested
+
+**KPLIB_captive_load** (target event)
+Emitted when a captive should get loaded
+
+**KPLIB_captive_loaded** (global)
+Emitted when a captive gets loaded
+
+**KPLIB_captive_unload** (target event)
+Emitted when a captive should get unloaded
+
+**KPLIB_captive_unloaded** (global)
+Emitted when a captive gets unloaded
+
+**KPLIB_captive_interrogated** (global)
+Emitted when a captive gets interrogated
+
+### Functions
+* KPLIB_fnc_captive_addCaptiveAction
+
+ *Adds all needed actions to a surrendered unit.*
+
+* KPLIB_fnc_captive_checkSector
+
+ *Checks the given sector for remaining enemys and let them surrender.*
+
+* KPLIB_fnc_captive_escort
+
+ *ttach a captive to the escorting player.*
+
+* KPLIB_fnc_captive_interrogate
+
+ *Interrogates the unit, adds intel and deletes it.*
+
+* KPLIB_fnc_captive_loadCaptive
+
+ *Loads given unit into the nearest vehicle cargo seat.*
+
+* KPLIB_fnc_captive_postInit
+
+ *Module post initialization.*
+
+* KPLIB_fnc_captive_preInit
+
+ *Module pre initialization.*
+
+* KPLIB_fnc_captive_setAceCaptive
+
+ *Checks for ACE handcuffed units and rebinds them into the Liberation captive system.*
+
+* KPLIB_fnc_captive_setCaptive
+
+ *Sets an unit into captive mode.*
+
+* KPLIB_fnc_captive_setSurrender
+
+ *Given unit surrenders.*
+
+* KPLIB_fnc_captive_settings
+
+ *CBA Settings initialization for this module*
+
+* KPLIB_fnc_captive_stopEscort
+
+ *Detach a captive from the escorting player.*
+
+* KPLIB_fnc_captive_unloadCaptive
+
+ *Unloads the give unit and removes the action from the vehicle.*
+
+### Scripts
+No scripts will be started by this module
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_addCaptiveActions.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_addCaptiveActions.sqf
new file mode 100644
index 000000000..ce947e244
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_addCaptiveActions.sqf
@@ -0,0 +1,66 @@
+/*
+ KPLIB_fnc_captive_addCaptiveAction
+
+ File: fn_captive_addCaptiveAction.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-11
+ Last Update: 2019-09-25
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Adds all needed actions to a surrendered unit.
+
+ Parameter(s):
+ _unit - Unit to apply the actions [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit) exitWith {
+ false
+};
+
+if !(KPLIB_ace_enabled) then {
+ // Add arrest action
+ [
+ _unit,
+ ["STR_KPLIB_ACTION_ARREST", name _unit],
+ [{[_this select 0] call KPLIB_fnc_captive_setCaptive;}, nil, -800, false, true, "", "(_target getVariable [""KPLIB_surrender"", false]) && !(_target getVariable [""KPLIB_captive"", false])", 10]
+ ] remoteExecCall ["KPLIB_fnc_common_addAction", 0, _unit];
+
+ // Add escort action
+ [
+ _unit,
+ ["STR_KPLIB_ACTION_ESCORT", name _unit],
+ [{[_this select 0, _this select 1] call KPLIB_fnc_captive_escort;}, nil, -800, false, true, "", "_target getVariable [""KPLIB_captive"", false] && !(_this getVariable [""KPLIB_captive_isEscorting"", false])", 10]
+ ] remoteExecCall ["KPLIB_fnc_common_addAction", 0, _unit];
+
+ // Add move in vehicle action
+ [_unit, {
+ private _id = [
+ _this,
+ ["STR_KPLIB_ACTION_LOADCAPTIVE", name _this],
+ [{[_this select 0] call KPLIB_fnc_captive_loadCaptive;}, nil, -800, false, true, "", "_target getVariable [""KPLIB_captive"", false] && ({(_x emptyPositions ""cargo"") > 0} count (_target nearEntities [[""LandVehicle"", ""Air""], 5])) > 0", 10]
+ ] call KPLIB_fnc_common_addAction;
+
+ // Store the load action to switch the locality when escorting
+ _this setVariable ["KPLIB_captive_loadID", _id];
+ }] remoteExecCall ["call", 0, _unit];
+
+};
+
+// Add interrogate action near FOB
+[
+ _unit,
+ ["STR_KPLIB_ACTION_INTERROGATE", name _unit],
+ [{[_this select 0] call KPLIB_fnc_captive_interrogate;}, nil, -800, false, true, "", "!((nearestObjects [_target ,[KPLIB_preset_fobBuildingF], 25]) isEqualTo [])", 10]
+] remoteExecCall ["KPLIB_fnc_common_addAction", 0, _unit];
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_checkSector.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_checkSector.sqf
new file mode 100644
index 000000000..3521832bc
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_checkSector.sqf
@@ -0,0 +1,37 @@
+/*
+ KPLIB_fnc_captive_checkSector
+
+ File: fn_captive_checkSector.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-10
+ Last Update: 2019-09-28
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Checks the given sector for remaining enemys and lets them surrender.
+
+ Parameter(s):
+ _sector - Sector marker [STRING, defaults to ""]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_sector", "", [""]]
+];
+
+// Exit if no sector is given
+if (_sector isEqualTo "") exitWith {
+ false
+};
+
+private _sectorPos = getMarkerPos _sector;
+
+// Check the sector for remaining units
+{
+ [_x] call KPLIB_fnc_captive_setSurrender;
+} forEach ((_sectorPos nearEntities ["Man", KPLIB_param_sectorCapRange * 2]) select {side _x isEqualTo KPLIB_preset_sideE});
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_escort.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_escort.sqf
new file mode 100644
index 000000000..901beea9e
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_escort.sqf
@@ -0,0 +1,58 @@
+/*
+ KPLIB_fnc_captive_escort
+
+ File: fn_captive_escort.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-21
+ Last Update: 2019-09-24
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Attach a captive to the escorting player.
+
+ Parameter(s):
+ _unit - Unit which will be escorted [OBJECT, defaults to objNull]
+ _escort - Escorting player [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]],
+ ["_escort", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit || isNull _escort) exitWith {
+ false
+};
+
+// Set variable on escort
+_escort setVariable ["KPLIB_captive_isEscorting", true, true];
+_escort setVariable ["KPLIB_captive_escorting", _unit, true];
+
+// Attach the captive to the player
+_unit attachTo [_escort, [0, 1, 0]];
+
+// Switch the load action from unit to player
+_unit removeAction (_unit getVariable ["KPLIB_captive_loadID", 9000]);
+private _id = [
+ _escort,
+ ["STR_KPLIB_ACTION_LOADCAPTIVE", name _unit],
+ [{[_this select 3] call KPLIB_fnc_captive_loadCaptive;}, _unit, -800, false, true, "", "({(_x emptyPositions ""cargo"") > 0} count (_target nearEntities [[""LandVehicle"", ""Air""], 5])) > 0", 10]
+] call KPLIB_fnc_common_addAction;
+_unit setVariable ["KPLIB_captive_loadID", _id];
+
+// Add the action to release the captive
+private _id = [
+ _escort,
+ ["STR_KPLIB_ACTION_STOPESCORT", name _unit],
+ [{[_this select 0, _this select 2] call KPLIB_fnc_captive_stopEscort;}, nil, -800, false, true, "","", 10]
+] call KPLIB_fnc_common_addAction;
+
+// Write the id into the player
+_escort setVariable ["KPLIB_stopEscort_id", _id];
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_interrogate.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_interrogate.sqf
new file mode 100644
index 000000000..5c2685de0
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_interrogate.sqf
@@ -0,0 +1,45 @@
+/*
+ KPLIB_fnc_captive_interrogate
+
+ File: fn_captive_interrogate.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-25
+ Last Update: 2019-09-25
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Interrogates the unit, adds intel and deletes it.
+
+ Parameter(s):
+ _unit - Unit to load in vehicle [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit) exitWith {
+ false
+};
+
+// Calculate the intel gain
+private _intel = KPLIB_param_captiveIntel;
+if !(KPLIB_param_captiveIntelRandom isEqualTo 0) then {
+ _intel = _intel + ((round (random (KPLIB_param_captiveIntelRandom * 2))) - KPLIB_param_captiveIntelRandom);
+};
+
+// Add the intel
+[_intel] call KPLIB_fnc_resources_addIntel;
+
+// Delete the unit
+deleteVehicle _unit;
+
+// Emit global event
+["KPLIB_captive_interrogated", [_unit]] call CBA_fnc_globalEvent;
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_loadCaptive.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_loadCaptive.sqf
new file mode 100644
index 000000000..ecb3f1a63
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_loadCaptive.sqf
@@ -0,0 +1,57 @@
+/*
+ KPLIB_fnc_captive_loadCaptive
+
+ File: fn_captive_loadCaptive.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-22
+ Last Update: 2019-09-24
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Loads given unit into the nearest vehicle cargo seat.
+
+ Parameter(s):
+ _unit - Unit to load in vehicle [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit) exitWith {
+ false
+};
+
+// Get the nearest vehicle
+private _vehicle = ((_unit nearEntities [["LandVehicle", "Air"], 5]) select {(_x emptyPositions "cargo") > 0}) select 0;
+
+// Check if the unit is getting escorted
+if !(isNull attachedTo _unit) then {
+ detach _unit;
+
+ // Set variable on escorting unit
+ player setVariable ["KPLIB_captive_isEscorting", false, true];
+ player setVariable ["KPLIB_captive_escorting", objNull, true];
+
+ // Switch the load action from player to unitAddons
+ player removeAction (_unit getVariable ["KPLIB_captive_loadID", 9000]);
+ private _id = [
+ _unit,
+ ["STR_KPLIB_ACTION_LOADCAPTIVE", name _unit],
+ [{[_this select 0] call KPLIB_fnc_captive_loadCaptive;}, nil, -800, false, true, "", "_target getVariable [""KPLIB_captive"", false] && ({(_x emptyPositions ""cargo"") > 0} count (_target nearEntities [[""LandVehicle"", ""Air""], 5])) > 0", 10]
+ ] call KPLIB_fnc_common_addAction;
+ _unit setVariable ["KPLIB_captive_loadID", _id];
+};
+
+// Emit target event to move the unit into the vehicle
+["KPLIB_captive_load", [_unit, _vehicle], _unit] call CBA_fnc_targetEvent;
+
+// Emit global event
+["KPLIB_captive_loaded", [_unit, _vehicle]] call CBA_fnc_globalEvent;
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_postInit.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_postInit.sqf
new file mode 100644
index 000000000..f2f6617cd
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_postInit.sqf
@@ -0,0 +1,41 @@
+/*
+ KPLIB_fnc_captive_postInit
+
+ File: fn_captive_postInit.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-10
+ Last Update: 2019-09-10
+ 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.
+ Basically it starts/initializes the module functionality to make all provided features usable.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Module postInit finished [BOOL]
+*/
+
+if (isServer) then {["Module initializing...", "POST] [CAPTIVE", true] call KPLIB_fnc_common_log;};
+
+// Server section (dedicated and player hosted)
+if (isServer) then {
+
+};
+
+// HC section
+if (!hasInterface && !isDedicated) then {
+
+};
+
+// Player section
+if (hasInterface) then {
+
+};
+
+if (isServer) then {["Module initialized", "POST] [CAPTIVE", true] call KPLIB_fnc_common_log;};
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_preInit.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_preInit.sqf
new file mode 100644
index 000000000..73438beeb
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_preInit.sqf
@@ -0,0 +1,124 @@
+/*
+ KPLIB_fnc_captive_preInit
+
+ File: fn_captive_preInit.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-10
+ Last Update: 2019-09-29
+ 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.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Module preInit finished [BOOL]
+*/
+
+if (isServer) then {
+ ["Module initializing...", "PRE] [CAPTIVE", true] call KPLIB_fnc_common_log;
+
+/*
+ ----- Module Initialization -----
+*/
+
+ // Process CBA Settings
+ [] call KPLIB_fnc_captive_settings;
+
+ // Units surrender on sector capture
+ ["KPLIB_sector_captured", {[_this select 0] call KPLIB_fnc_captive_checkSector;}] call CBA_fnc_addEventHandler;
+
+ // Unit animation on arrest
+ ["KPLIB_captive_arrested", {
+ _this select 0 playMoveNow "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon";
+ _this select 0 playMove "AmovPercMstpSnonWnonDnon_EaseIn";
+ }] call CBA_fnc_addEventHandler;
+
+ // Check for handcuffed enemys
+ ["ace_captiveStatusChanged", {[_this select 0, _this select 1, _this select 2] call KPLIB_fnc_captive_setAceCaptive}] call CBA_fnc_addEventHandler;
+
+};
+
+// Add load captive EH
+["KPLIB_captive_load", {
+ params [
+ ["_unit", objNull, [objNull]],
+ ["_vehicle", objNull, [objNull]]
+ ];
+ // Move unit in vehicle cargo
+ _unit moveInCargo _vehicle;
+}] call CBA_fnc_addEventHandler;
+
+// Add unload captive EH
+["KPLIB_captive_unload", {
+ params [
+ ["_unit", objNull, [objNull]],
+ ["_vehicle", objNull, [objNull]]
+ ];
+ // Unload the unit
+ moveOut _unit;
+ _unit switchMove "AmovPercMstpSnonWnonDnon_EaseIn";
+}] call CBA_fnc_addEventHandler;
+
+// Emit lib captive event on ace event to ensure compatibilty
+["ace_captives_moveInCaptive", {
+ params [
+ ["_unit", objNull, [objNull]],
+ ["_vehicle", objNull, [objNull]]
+ ];
+ // Emit global event
+ ["KPLIB_captive_loaded", [_unit, _vehicle]] call CBA_fnc_globalEvent;
+}] call CBA_fnc_addEventHandler;
+
+// Emit lib captive event on ace event to ensure compatibilty
+["ace_captives_moveOutCaptive", {
+ params [
+ ["_unit", objNull, [objNull]]
+ ];
+ // Emit global event
+ ["KPLIB_captive_unloaded", [_unit]] call CBA_fnc_globalEvent;
+}] call CBA_fnc_addEventHandler;
+
+
+// Player section
+if (hasInterface) then {
+
+ // Add EH for the captive unload action
+ ["KPLIB_captive_loaded", {
+ params [
+ ["_unit", objNull, [objNull]],
+ ["_vehicle", objNull, [objNull]]
+ ];
+ // Exit the function on missing vehicle, due to an emitted event through ace
+ if (isNull _vehicle) exitWith {};
+ // Remove the stop escort action if available
+ player removeAction (player getVariable ["KPLIB_stopEscort_id", 9000]);
+
+ // Add the unload action to the vehicle
+ private _id = [
+ _vehicle,
+ ["STR_KPLIB_ACTION_UNLOADCAPTIVE", name _unit],
+ [{[_this select 3, _this select 0] call KPLIB_fnc_captive_unloadCaptive;}, _unit, -800, false, true, "", "", 10]
+ ] call KPLIB_fnc_common_addAction;
+
+ // Save id in unit
+ _unit setVariable ["KPLIB_captive_unloadID", _id]
+ }] call CBA_fnc_addEventHandler;
+
+ // Add EH to remove the unload action
+ ["KPLIB_captive_unloaded", {
+ params [
+ ["_unit", objNull, [objNull]],
+ ["_vehicle", objNull, [objNull]]
+ ];
+ // Remove the unload action from the vehicle
+ _vehicle removeAction (_unit getVariable ["KPLIB_captive_unloadID", 9000]);
+ }] call CBA_fnc_addEventHandler;
+};
+
+if (isServer) then {["Module initialized", "PRE] [CAPTIVE", true] call KPLIB_fnc_common_log;};
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_setAceCaptive.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_setAceCaptive.sqf
new file mode 100644
index 000000000..1af8475a1
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_setAceCaptive.sqf
@@ -0,0 +1,45 @@
+/*
+ KPLIB_fnc_captive_setAceCaptive
+
+ File: fn_captive_setAceCaptive.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-11
+ Last Update: 2019-09-28
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Checks for ACE handcuffed units and rebinds them into the Liberation captive system.
+
+ Parameter(s):
+ _unit - Unit to set in captive mode [OBJECT, defaults to objNull]
+ _state - State of captive [BOOLEAN, defaults to false]
+ _reason - Reason of the activated event [STRING, defaults to ""]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]],
+ ["_state", false, [false]],
+ ["_reason", "", [""]]
+];
+
+// Exit on missing object
+if (isNull _unit) exitWith {
+ false
+};
+
+if (_reason isEqualTo "SetHandcuffed" && _state) then {
+ // Set variable on unit
+ _unit setVariable ["KPLIB_captive", true];
+
+ // Apply the actions on the unit
+ [_unit] call KPLIB_fnc_captive_addCaptiveActions;
+};
+
+// Emit global event
+["KPLIB_captive_arrested", [_unit]] call CBA_fnc_globalEvent;
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_setCaptive.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_setCaptive.sqf
new file mode 100644
index 000000000..8df751790
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_setCaptive.sqf
@@ -0,0 +1,36 @@
+/*
+ KPLIB_fnc_captive_setCaptive
+
+ File: fn_captive_setCaptive.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-11
+ Last Update: 2019-09-26
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Sets an unit into captive mode.
+
+ Parameter(s):
+ _unit - Unit to set in captive mode [OBJECT, defaults to objNull]
+
+ Returns:
+ Unit set into captive mode [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit) exitWith {
+ false
+};
+
+// Set variable on unit
+_unit setVariable ["KPLIB_captive", true, true];
+
+// Emit global event
+["KPLIB_captive_arrested", [_unit]] call CBA_fnc_globalEvent;
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_setSurrender.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_setSurrender.sqf
new file mode 100644
index 000000000..bbfbfe0c2
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_setSurrender.sqf
@@ -0,0 +1,71 @@
+/*
+ KPLIB_fnc_captive_setSurrender
+
+ File: fn_captive_setSurrender.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-11
+ Last Update: 2019-09-25
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Given unit surrenders.
+
+ Parameter(s):
+ _unit - Unit to set in surrender [OBJECT, defaults to objNull]
+
+ Returns:
+ Unit surrendered [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit) exitWith {
+ false
+};
+
+if !(vehicle _unit isEqualTo _unit) then {
+ moveOut _unit;
+};
+
+// Set variable on unit
+_unit setVariable ["KPLIB_surrender", true, true];
+_unit setVariable ["KPLIB_captured", true, true];
+
+// Remove some equipment of the unit
+removeAllWeapons _unit;
+removeHeadgear _unit;
+removeBackpack _unit;
+_unit setUnitPos "UP";
+if (KPLIB_ace_enabled) then {
+ [_unit, true] call ACE_captives_fnc_setSurrendered;
+} else {
+ _unit disableAI "ANIM";
+ _unit disableAI "MOVE";
+ _unit playMove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
+ _unit setCaptive true;
+ _unit setBehaviour "CARELESS";
+
+ // Apply the actions on the unit
+ [_unit] call KPLIB_fnc_captive_addCaptiveActions;
+};
+
+// Add a killed EH to the unit, to ensure that all actions will be removed
+_unit addMPEventHandler ["MPKilled", {
+ // Remove all actions of the unit
+ removeAllActions (_this select 0);
+
+ // Remove the unload action from the vehicle if the unit is in a vehicle
+ private _vehicle = objectParent (_this select 0);
+ if !(isNull _vehicle) then {
+ _vehicle removeAction ((_this select 0) getVariable ["KPLIB_captive_unloadID", 9000]);
+ };
+}];
+
+// Emit global event
+["KPLIB_captive_surrendered", [_unit]] call CBA_fnc_globalEvent;
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_settings.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_settings.sqf
new file mode 100644
index 000000000..c6d09c2f4
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_settings.sqf
@@ -0,0 +1,47 @@
+/*
+ KPLIB_fnc_captive_settings
+
+ File: fn_captive_settings.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-12
+ Last Update: 2019-09-28
+ 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.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+// KPLIB_param_captiveIntel
+// Amount of intel which will be granted on interrogation.
+// Default: 10
+[
+ "KPLIB_param_captiveIntel",
+ "SLIDER",
+ [localize "STR_KPLIB_SETTINGS_CAPTIVE_INTELVALUE", localize "STR_KPLIB_SETTINGS_CAPTIVE_INTELVALUE_TT"],
+ localize "STR_KPLIB_SETTINGS_CAPTIVE",
+ [1, 100, 10, 1],
+ 1,
+ {}
+] call CBA_Settings_fnc_init;
+
+// KPLIB_param_captiveIntelRandom
+// Amount of random intel modifier on interrogation.
+// Default: 5
+[
+ "KPLIB_param_captiveIntelRandom",
+ "SLIDER",
+ [localize "STR_KPLIB_SETTINGS_CAPTIVE_INTELRANDOM", localize "STR_KPLIB_SETTINGS_CAPTIVE_INTELRANDOM_TT"],
+ localize "STR_KPLIB_SETTINGS_CAPTIVE",
+ [0, 100, 5, 1],
+ 1,
+ {}
+] call CBA_Settings_fnc_init;
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_stopEscort.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_stopEscort.sqf
new file mode 100644
index 000000000..4dae8ca9e
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_stopEscort.sqf
@@ -0,0 +1,54 @@
+/*
+ KPLIB_fnc_captive_stopEscort
+
+ File: fn_captive_stopEscort.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-21
+ Last Update: 2019-09-26
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Detach a captive from the escorting player.
+
+ Parameter(s):
+ _escort - Escorting player [OBJECT, defaults to objNull]
+ _id - ID of the action [NUMBER, defaults to 0.068117098106117110107]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_escort", objNull, [objNull]],
+ ["_id", 0.068117098106117110107, [0]]
+];
+
+// Exit on missing object
+if (isNull _escort || _id isEqualTo 0.068117098106117110107) exitWith {
+ false
+};
+
+// Get the captive
+private _unit = _escort getVariable ["KPLIB_captive_escorting", objNull];
+
+// Set variable on escort
+_escort setVariable ["KPLIB_captive_isEscorting", false, true];
+_escort setVariable ["KPLIB_captive_escorting", objNull, true];
+
+// Detach the captive from the player
+detach _unit;
+
+// Remove the action
+player removeAction _id;
+
+// Switch the load action from player to unitAddons
+player removeAction (_unit getVariable ["KPLIB_captive_loadID", 9000]);
+_id = [
+ _unit,
+ ["STR_KPLIB_ACTION_LOADCAPTIVE", name _unit],
+ [{[_this select 0] call KPLIB_fnc_captive_loadCaptive;}, nil, -800, false, true, "", "_target getVariable [""KPLIB_captive"", false] && ({(_x emptyPositions ""cargo"") > 0} count (_target nearEntities [[""LandVehicle"", ""Air""], 5])) > 0", 10]
+] call KPLIB_fnc_common_addAction;
+_unit setVariable ["KPLIB_captive_loadID", _id];
+
+true
diff --git a/Missionframework/modules/28_captive/fnc/fn_captive_unloadCaptive.sqf b/Missionframework/modules/28_captive/fnc/fn_captive_unloadCaptive.sqf
new file mode 100644
index 000000000..2fbe5e406
--- /dev/null
+++ b/Missionframework/modules/28_captive/fnc/fn_captive_unloadCaptive.sqf
@@ -0,0 +1,38 @@
+/*
+ KPLIB_fnc_captive_unloadCaptive
+
+ File: fn_captive_unloadCaptive.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-22
+ Last Update: 2019-09-24
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Unloads the give unit and removes the action from the vehicle.
+
+ Parameter(s):
+ _unit - Unit to load in vehicle [OBJECT, defaults to objNull]
+ _vehicle - Vehicle which carries the unit [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_unit", objNull, [objNull]],
+ ["_vehicle", objNull, [objNull]]
+];
+
+// Exit on missing object
+if (isNull _unit || isNull _vehicle) exitWith {
+ false
+};
+
+// Emit target event to move the unit out of the vehicle
+["KPLIB_captive_unload", [_unit, _vehicle], _unit] call CBA_fnc_targetEvent;
+
+// Emit global event
+["KPLIB_captive_unloaded", [_unit, _vehicle]] call CBA_fnc_globalEvent;
+
+true
diff --git a/Missionframework/modules/28_captive/functions.hpp b/Missionframework/modules/28_captive/functions.hpp
new file mode 100644
index 000000000..c858a8222
--- /dev/null
+++ b/Missionframework/modules/28_captive/functions.hpp
@@ -0,0 +1,61 @@
+/*
+ KP LIBERATION MODULE FUNCTIONS
+
+ File: functions.hpp
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2019-09-10
+ Last Update: 2019-09-26
+ License: GNU General Public License v3.0 - https://www.gnu.org/licenses/gpl-3.0.html
+ Public: No
+
+ Description:
+ Defines for all functions, which are brought by this module.
+*/
+
+class captive {
+ file = "modules\28_captive\fnc";
+
+ // Adds all needed actions to a surrendered unit
+ class captive_addCaptiveActions {};
+
+ // Checks the given sector for remaining enemys and sets them into captive mode
+ class captive_checkSector {};
+
+ // Attach a captive to the escorting player
+ class captive_escort {};
+
+ // Interrogates the unit, adds intel and deletes it
+ class captive_interrogate {};
+
+ // Loads given unit into the nearest vehicle cargo seat
+ class captive_loadCaptive {};
+
+ // Module post initialization
+ class captive_postInit {
+ postInit = 1;
+ };
+
+ // Module pre initialization
+ class captive_preInit {
+ preInit = 1;
+ };
+
+ // Checks for ACE handcuffed units and rebinds them into the Liberation captive system
+ class captive_setAceCaptive {};
+
+ // Sets an unit into captive mode
+ class captive_setCaptive {};
+
+ // Given unit surrenders
+ class captive_setSurrender {};
+
+ // CBA Settings for this module
+ class captive_settings {};
+
+ // Detach a captive from the escorting player
+ class captive_stopEscort {};
+
+ // Unloads the give unit and removes the action from the vehicle
+ class captive_unloadCaptive {};
+
+};
diff --git a/Missionframework/modules/README.md b/Missionframework/modules/README.md
index c25938020..cbbafd011 100644
--- a/Missionframework/modules/README.md
+++ b/Missionframework/modules/README.md
@@ -45,6 +45,7 @@ With these additions the intended complexity comes into the mission. It is highl
25 Friendly Commander Managing Dialog
26 Cratefiller
27 Mission handling
+28 Prisoners of war
```
### TBA
Mod specific compatibility modules
diff --git a/Missionframework/stringtable.xml b/Missionframework/stringtable.xml
index 42cec14fd..26cb9dc10 100644
--- a/Missionframework/stringtable.xml
+++ b/Missionframework/stringtable.xml
@@ -203,6 +203,10 @@
-- 管理員選單 --
-- Admin Menü --
+
+ Arrest %1
+ %1 festnehmen
+
-- ARSENAL --
-- 軍火庫 --
@@ -247,6 +251,10 @@
-- RANDOM FOB DEPLOYMENT --
-- ZUFÄLLIGE FOB PLATZIERUNG --
+
+ Escort %1
+ %1 eskortieren
+
+
+ Interrogate %1
+ %1 verhören
+
+
+ Load %1
+ %1 einladen
+
- LOAD CRATE -
- 裝載貨物 -
@@ -313,6 +329,10 @@
- ORDENAR E CLASSIFICAR -
- SIRALA VE DÜZENLE -
+
+ Stop escorting %1
+ %1 loslassen
+
- STORE CRATE -
- 倉儲貨物 -
@@ -324,6 +344,10 @@
- CAJA DE ALMACENAJE -
- KUTUYU DEPOLA -
+
+ Unload %1
+ %1 ausladen
+
- UNLOAD CRATES -
- 卸載貨物 -
@@ -1664,6 +1688,14 @@
在戰區中心半徑公尺內的單位可進行佔領
Radius in Metern vom Sektor aus, in dem sich eine Einheit befinden muss, um den Sektor zu erobern.
+
+ Sector Capture Unit Ratio
+ Einheitenverhältnis zur Sektoreroberung
+
+
+ Ratio of friendly to enemy units, which is needed to capture a sector.
+ Verhältnis von freundlichen zu feindlichen Kräften, welches benötigt wird um einen Sektor zu erobern.
+
@@ -1900,6 +1932,29 @@
Defines the mission abortion refund in percentage.
Definiert die Rückerstattung in Prozent.
+
+
+
+
+ KPLIB - Captives
+ KPLIB - Gefangene
+
+
+ Intel gain through interrogation
+ Informationszuwachs bei einem Verhör
+
+
+ Amount of intel gained through interrogation.
+ Menge an Informationen, die bei einem Verhör gewonnen werden.
+
+
+ Intel randomization range
+ Zufallsbereich für den Informationszuwachs
+
+
+ Randomization range for intel gain through interrogation. E.g. a value of 5 will grant you 5 - 15 intel for a base value of 10.
+ Zufallsbereich für den Informationszuwachs bei einem Verhör. Mit einem Wert von 5 liegt der effektive Zuwachs, bei einem Ausgangswert von 10, zwischen 5 und 15.
+