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 + -- GARRISON MANAGEMENT -- -- GARNISONSVERWALTUNG -- @@ -255,6 +263,14 @@ Move to aft deck Zum Achterdeck bewegen + + 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. +