Logistic convoy ambush and guerilla basics

This commit is contained in:
Christian 2017-10-04 13:53:02 +02:00
parent 1e766d27e6
commit 746615afc2
26 changed files with 443 additions and 84 deletions

View File

@ -96,6 +96,9 @@ KP_liberation_civinfo_chance = 75; // Civil Informant spawn c
KP_liberation_civinfo_intel = 5; // Civil Informant intel amount
KP_liberation_civinfo_duration = 1200; // Civil Informant staytime until despawning (seconds)
KP_liberation_convoy_ambush_chance = 4; // Chance that a logistic convoy will be ambushed, when civil reputation is low
KP_liberation_convoy_ambush_duration = 1800; // Duration of the convoy ambush event (seconds)
/* - Default arsenal blacklist method.
Useless if you're using anything other than "kp_liberation_arsenal = 0;" above. A whitelisted arsenal is always more performance friendly then a blacklisted arsenal.
REMEMBER: All static turret and UAV bags should be defined here, to stop players from exploiting free resources via the virtual arsenal. */

View File

@ -17,6 +17,7 @@ crewman_classname = "UK3CB_BAF_Crewman_MTP"; // This defines the crew for
pilot_classname = "UK3CB_BAF_HeliPilot_Army_MTP"; // This defines the pilot for helicopters. Default is "B_Helipilot_F".
KP_liberation_little_bird_classname = "UK3CB_BAF_Wildcat_AH1_TRN_8A_MTP"; // These are the little birds which spawn on the Freedom or at Chimera base. Default is "B_Heli_Light_01_F".
KP_liberation_boat_classname = "B_Boat_Transport_01_F"; // These are the boats which spawn at the stern of the Freedom. Default is "B_Boat_Transport_01_F".
KP_liberation_truck_classname = "rhsusf_M977A4_BKIT_usarmy_wd"; // These are the trucks which are used in the logistic convoy system. Default is "B_Truck_01_transport_F".
KP_liberation_small_storage_building = "ContainmentArea_02_sand_F"; // A small storage area for resources. Default is "ContainmentArea_02_sand_F".
KP_liberation_large_storage_building = "ContainmentArea_01_sand_F"; // A large storage area for resources. Default is "ContainmentArea_01_sand_F".
KP_liberation_recycle_building = "Land_CarService_F"; // The building defined to unlock FOB recycling functionality. Default is "Land_CarService_F".
@ -474,6 +475,24 @@ opfor_air = [
"RHS_Su25SM_KH29_vvsc" //Su-25 (KH29)
];
/* - Guerilla forces
classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout (except the uniform) of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [
"I_G_Soldier_AR_F",
"I_G_engineer_F",
"I_G_officer_F",
"I_G_medic_F",
"I_G_Soldier_F",
"I_G_Soldier_LAT_F",
"I_G_Soldier_M_F",
"I_G_Soldier_SL_F"
];
KP_liberation_guerilla_vehicles = [
"I_G_Offroad_01_armed_F"
];
/* - Other various mission classnames.
Civilian classnames. */
civilians = [

View File

@ -17,6 +17,7 @@ crewman_classname = "B_T_crew_F"; // This defines the crew for vehicles
pilot_classname = "B_T_Helipilot_F"; // This defines the pilot for helicopters. Default is "B_Helipilot_F".
KP_liberation_little_bird_classname = "B_Heli_Light_01_F"; // These are the little birds which spawn on the Freedom or at Chimera base. Default is "B_Heli_Light_01_F".
KP_liberation_boat_classname = "B_Boat_Transport_01_F"; // These are the boats which spawn at the stern of the Freedom. Default is "B_Boat_Transport_01_F".
KP_liberation_truck_classname = "B_T_Truck_01_transport_F"; // These are the trucks which are used in the logistic convoy system. Default is "B_Truck_01_transport_F".
KP_liberation_small_storage_building = "ContainmentArea_02_sand_F"; // A small storage area for resources. Default is "ContainmentArea_02_sand_F".
KP_liberation_large_storage_building = "ContainmentArea_01_sand_F"; // A large storage area for resources. Default is "ContainmentArea_01_sand_F".
KP_liberation_recycle_building = "Land_CarService_F"; // The building defined to unlock FOB recycling functionality. Default is "Land_CarService_F".
@ -400,24 +401,24 @@ opfor_flag = "Flag_CSAT_F"; //CSAT Flag
Therefore, adding the same value twice or three times means they are more likely to be chosen more often.
Militia infantry. Lightweight soldier classnames the game will pick from randomly as sector defenders. */
militia_squad = [
"O_G_Soldier_TL_F", //Team Leader
"O_G_Soldier_SL_F", //Squad Leader
"O_G_Soldier_lite_F", //Rifleman (Lite)
"O_G_Soldier_F", //Rifleman
"O_G_Soldier_F", //Rifleman
"O_G_Soldier_LAT_F", //Rifleman (AT)
"O_G_Soldier_GL_F", //Grenadier
"O_G_Soldier_AR_F", //Autorifleman
"O_G_Soldier_AR_F", //Autorifleman
"O_G_Soldier_M_F", //Marksman
"O_G_medic_F", //Medic
"O_G_engineer_F", //Engineer
"O_G_Soldier_exp_F" //Explosives Specialist
"O_soldierU_TL_F", //Team Leader
"O_SoldierU_SL_F", //Squad Leader
"O_soldierU_F", //Rifleman (Lite)
"O_soldierU_F", //Rifleman
"O_soldierU_F", //Rifleman
"O_soldierU_LAT_F", //Rifleman (AT)
"O_SoldierU_GL_F", //Grenadier
"O_soldierU_AR_F", //Autorifleman
"O_soldierU_AR_F", //Autorifleman
"O_soldierU_M_F", //Marksman
"O_soldierU_medic_F", //Medic
"O_engineer_U_F", //Engineer
"O_soldierU_exp_F" //Explosives Specialist
];
// Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders.
militia_vehicles = [
"O_G_Offroad_01_armed_F" //Offroad (HMG)
"O_T_LSV_02_armed_F" //Qilin (armed)
];
// All enemy vehicles that can spawn as sector defenders and patrols at high enemy combat readiness (aggression levels)
@ -499,6 +500,21 @@ opfor_air = [
"O_Plane_Fighter_02_F" //To-201 Shikra
];
/* - Guerilla forces
classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout (except the uniform) of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [
"I_C_Soldier_Bandit_1_F",
"I_C_Soldier_Bandit_2_F",
"I_C_Soldier_Bandit_3_F",
"I_C_Soldier_Bandit_4_F",
"I_C_Soldier_Bandit_5_F"
];
KP_liberation_guerilla_vehicles = [
"I_G_Offroad_01_armed_F"
];
/* - Other various mission classnames.
Civilian classnames. */
civilians = [

View File

@ -17,6 +17,7 @@ crewman_classname = "B_crew_F"; // This defines the crew for vehicles.
pilot_classname = "B_Helipilot_F"; // This defines the pilot for helicopters. Default is "B_Helipilot_F".
KP_liberation_little_bird_classname = "B_Heli_Light_01_F"; // These are the little birds which spawn on the Freedom or at Chimera base. Default is "B_Heli_Light_01_F".
KP_liberation_boat_classname = "B_Boat_Transport_01_F"; // These are the boats which spawn at the stern of the Freedom. Default is "B_Boat_Transport_01_F".
KP_liberation_truck_classname = "B_Truck_01_transport_F"; // These are the trucks which are used in the logistic convoy system. Default is "B_Truck_01_transport_F".
KP_liberation_small_storage_building = "ContainmentArea_02_sand_F"; // A small storage area for resources. Default is "ContainmentArea_02_sand_F".
KP_liberation_large_storage_building = "ContainmentArea_01_sand_F"; // A large storage area for resources. Default is "ContainmentArea_01_sand_F".
KP_liberation_recycle_building = "Land_CarService_F"; // The building defined to unlock FOB recycling functionality. Default is "Land_CarService_F".
@ -406,24 +407,24 @@ opfor_flag = "Flag_CSAT_F"; //CSAT Flag
Therefore, adding the same value twice or three times means they are more likely to be chosen more often.
Militia infantry. Lightweight soldier classnames the game will pick from randomly as sector defenders. */
militia_squad = [
"O_G_Soldier_TL_F", //Team Leader
"O_G_Soldier_SL_F", //Squad Leader
"O_G_Soldier_lite_F", //Rifleman (Lite)
"O_G_Soldier_F", //Rifleman
"O_G_Soldier_F", //Rifleman
"O_G_Soldier_LAT_F", //Rifleman (AT)
"O_G_Soldier_GL_F", //Grenadier
"O_G_Soldier_AR_F", //Autorifleman
"O_G_Soldier_AR_F", //Autorifleman
"O_G_Soldier_M_F", //Marksman
"O_G_medic_F", //Medic
"O_G_engineer_F", //Engineer
"O_G_Soldier_exp_F" //Explosives Specialist
"O_soldierU_TL_F", //Team Leader
"O_SoldierU_SL_F", //Squad Leader
"O_soldierU_F", //Rifleman (Lite)
"O_soldierU_F", //Rifleman
"O_soldierU_F", //Rifleman
"O_soldierU_LAT_F", //Rifleman (AT)
"O_SoldierU_GL_F", //Grenadier
"O_soldierU_AR_F", //Autorifleman
"O_soldierU_AR_F", //Autorifleman
"O_soldierU_M_F", //Marksman
"O_soldierU_medic_F", //Medic
"O_engineer_U_F", //Engineer
"O_soldierU_exp_F" //Explosives Specialist
];
// Militia vehicles. Lightweight vehicle classnames the game will pick from randomly as sector defenders.
militia_vehicles = [
"O_G_Offroad_01_armed_F" //Offroad (HMG)
"O_LSV_02_armed_F" //Qilin (armed)
];
// All enemy vehicles that can spawn as sector defenders and patrols at high enemy combat readiness (aggression levels).
@ -499,6 +500,24 @@ opfor_air = [
"O_Plane_Fighter_02_F" //To-201 Shikra
];
/* - Guerilla forces
classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout (except the uniform) of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [
"I_G_Soldier_AR_F",
"I_G_engineer_F",
"I_G_officer_F",
"I_G_medic_F",
"I_G_Soldier_F",
"I_G_Soldier_LAT_F",
"I_G_Soldier_M_F",
"I_G_Soldier_SL_F"
];
KP_liberation_guerilla_vehicles = [
"I_G_Offroad_01_armed_F"
];
/* - Other various mission classnames.
Civilian classnames. */
civilians = [

View File

@ -17,6 +17,7 @@ crewman_classname = "rhsusf_army_ucp_combatcrewman"; // This defines the cre
pilot_classname = "rhsusf_army_ucp_helipilot"; // This defines the pilot for helicopters. Default is "B_Helipilot_F".
KP_liberation_little_bird_classname = "RHS_MELB_MH6M"; // These are the little birds which spawn on the Freedom or at Chimera base. Default is "B_Heli_Light_01_F".
KP_liberation_boat_classname = "B_Boat_Transport_01_F"; // These are the boats which spawn at the stern of the Freedom. Default is "B_Boat_Transport_01_F".
KP_liberation_truck_classname = "rhsusf_M977A4_BKIT_usarmy_wd"; // These are the trucks which are used in the logistic convoy system. Default is "B_Truck_01_transport_F".
KP_liberation_small_storage_building = "ContainmentArea_02_sand_F"; // A small storage area for resources. Default is "ContainmentArea_02_sand_F".
KP_liberation_large_storage_building = "ContainmentArea_01_sand_F"; // A large storage area for resources. Default is "ContainmentArea_01_sand_F".
KP_liberation_recycle_building = "Land_CarService_F"; // The building defined to unlock FOB recycling functionality. Default is "Land_CarService_F".
@ -465,6 +466,24 @@ opfor_air = [
"RHS_Su25SM_KH29_vvsc" //Su-25 (KH29)
];
/* - Guerilla forces
classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout (except the uniform) of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [
"I_G_Soldier_AR_F",
"I_G_engineer_F",
"I_G_officer_F",
"I_G_medic_F",
"I_G_Soldier_F",
"I_G_Soldier_LAT_F",
"I_G_Soldier_M_F",
"I_G_Soldier_SL_F"
];
KP_liberation_guerilla_vehicles = [
"I_G_Offroad_01_armed_F"
];
/* - Other various mission classnames.
Civilian classnames. */
civilians = [

View File

@ -17,6 +17,7 @@ crewman_classname = "BWA3_Crew_Fleck"; // This defines the crew for vehi
pilot_classname = "rhsusf_army_ucp_helipilot"; // This defines the pilot for helicopters. Default is "B_Helipilot_F".
KP_liberation_little_bird_classname = "RHS_MELB_MH6M"; // These are the little birds which spawn on the Freedom or at Chimera base. Default is "B_Heli_Light_01_F".
KP_liberation_boat_classname = "B_Boat_Transport_01_F"; // These are the boats which spawn at the stern of the Freedom. Default is "B_Boat_Transport_01_F".
KP_liberation_truck_classname = "rhsusf_M977A4_BKIT_usarmy_wd"; // These are the trucks which are used in the logistic convoy system. Default is "B_Truck_01_transport_F".
KP_liberation_small_storage_building = "ContainmentArea_02_sand_F"; // A small storage area for resources. Default is "ContainmentArea_02_sand_F".
KP_liberation_large_storage_building = "ContainmentArea_01_sand_F"; // A large storage area for resources. Default is "ContainmentArea_01_sand_F".
KP_liberation_recycle_building = "Land_CarService_F"; // The building defined to unlock FOB recycling functionality. Default is "Land_CarService_F".
@ -486,6 +487,24 @@ civilians = [
"C_man_w_worker_F"
];
/* - Guerilla forces
classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout (except the uniform) of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [
"I_G_Soldier_AR_F",
"I_G_engineer_F",
"I_G_officer_F",
"I_G_medic_F",
"I_G_Soldier_F",
"I_G_Soldier_LAT_F",
"I_G_Soldier_M_F",
"I_G_Soldier_SL_F"
];
KP_liberation_guerilla_vehicles = [
"I_G_Offroad_01_armed_F"
];
// Civilian vehicle classnames.
civilian_vehicles = [
"C_Quadbike_01_F",

View File

@ -17,6 +17,7 @@ crewman_classname = "rhsusf_army_ocp_combatcrewman"; // This defines the cre
pilot_classname = "rhsusf_army_ocp_helipilot"; // This defines the pilot for helicopters. Default is "B_Helipilot_F".
KP_liberation_little_bird_classname = "RHS_MELB_MH6M"; // These are the little birds which spawn on the Freedom or at Chimera base. Default is "B_Heli_Light_01_F".
KP_liberation_boat_classname = "B_Boat_Transport_01_F"; // These are the boats which spawn at the stern of the Freedom. Default is "B_Boat_Transport_01_F".
KP_liberation_truck_classname = "rhsusf_M977A4_BKIT_usarmy_d"; // These are the trucks which are used in the logistic convoy system. Default is "B_Truck_01_transport_F".
KP_liberation_small_storage_building = "ContainmentArea_02_sand_F"; // A small storage area for resources. Default is "ContainmentArea_02_sand_F".
KP_liberation_large_storage_building = "ContainmentArea_01_sand_F"; // A large storage area for resources. Default is "ContainmentArea_01_sand_F".
KP_liberation_recycle_building = "Land_CarService_F"; // The building defined to unlock FOB recycling functionality. Default is "Land_CarService_F".
@ -462,6 +463,21 @@ opfor_air = [
"RHS_Su25SM_KH29_vvsc" //Su-25 (KH29)
];
/* - Guerilla forces
classnames of the guerilla faction which is friendly or hostile, depending on the civil reputation
Standard loadout (except the uniform) of the units will be replaced with a scripted one, which depends on the guerilla strength, after spawn */
KP_liberation_guerilla_units = [
"I_C_Soldier_Bandit_1_F",
"I_C_Soldier_Bandit_2_F",
"I_C_Soldier_Bandit_3_F",
"I_C_Soldier_Bandit_4_F",
"I_C_Soldier_Bandit_5_F"
];
KP_liberation_guerilla_vehicles = [
"I_G_Offroad_01_armed_F"
];
/* - Other various mission classnames.
Civilian classnames. */
civilians = [

Binary file not shown.

View File

@ -0,0 +1,24 @@
if (isDedicated) exitWith {};
params ["_notif_id", ["_pos", getpos player]];
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] asymm_notifications called on: %1 - Parameters: [%2, %3] ", debug_source, _notif_id, _pos];_text remoteExec ["diag_log",2];};
switch (_notif_id) do {
case 0: {
["lib_asymm_convoy_ambush", [markertext ([10000, _pos] call F_getNearestSector)]] call BIS_fnc_showNotification;
private _ambush_marker = createMarkerLocal ["asymm_ambushmarker", _pos];
_ambush_marker setMarkerDirLocal (random 360);
_ambush_marker setMarkerColorLocal "ColorIndependent";
_ambush_marker setMarkerTypeLocal "hd_ambush";
};
case 1: {
["lib_asymm_convoy_ambush_success"] call BIS_fnc_showNotification;
deleteMarkerLocal "asymm_ambushmarker";
};
case 2: {
["lib_asymm_convoy_ambush_fail"] call BIS_fnc_showNotification;
deleteMarkerLocal "asymm_ambushmarker";
};
default {private _text = format ["[KP LIBERATION] [ERROR] asymm_notifications.sqf -> no valid value for _notif_id: %1", _notif_id];_text remoteExec ["diag_log",2];};
};

View File

@ -7,7 +7,7 @@ if (KP_liberation_civinfo_debug > 0) then {private _text = format ["[KP LIBERATI
switch (_notif_id) do {
case 0: {
["lib_civ_informant_start", [markertext ([10000, _pos] call F_getNearestSector)]] call BIS_fnc_showNotification;
_informant_marker = createMarkerLocal ["informantmarker", _pos];
private _informant_marker = createMarkerLocal ["informantmarker", _pos];
_informant_marker setMarkerColorLocal "ColorCIV";
_informant_marker setMarkerTypeLocal "hd_unknown";
};

View File

@ -0,0 +1,144 @@
params ["_convoy"];
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1: spawning ambush", (_convoy select 0)];};
private _pos = [0,0,0];
switch ((_convoy select 7)) do {
case 2: {_pos = (_convoy select 3) getPos [(_convoy select 8) * 400, (_convoy select 3) getDir (_convoy select 2)]};
case 4: {_pos = (_convoy select 2) getPos [(_convoy select 8) * 400, (_convoy select 2) getDir (_convoy select 3)]};
default {diag_log format ["[KP LIBERATION] [ERROR] Logistic convoy %1 ambush: convoy is not travelling", (_convoy select 0)];};
};
if (_pos isEqualTo [0,0,0]) exitWith {diag_log format ["[KP LIBERATION] [ERROR] Logistic convoy %1 ambush: no position", (_convoy select 0)];};
private _roadObj = [_pos, 400, []] call BIS_fnc_nearestRoad;
if (isNull _roadObj) exitWith {
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: no road near current convoy position", (_convoy select 0)];};
KP_liberation_convoy_ambush_check = 1;
};
KP_liberation_convoy_ambush_check = 2;
KP_liberation_convoy_ambush_inProgress = true;
[0, getPos _roadObj] remoteExec ["asymm_notifications"];
private _vehicleArray = [];
for "_i" from 1 to (_convoy select 1) do {
private _veh = createVehicle [KP_liberation_truck_classname, getPos _roadObj, [], 50, "NONE"];
_veh setDir (getDir _roadObj);
{
private _damage = random 0.6;
if ((_x find "Wheel") != -1) then {
_damage = _damage + 0.6;
} else {
_damage = _damage + 0.3;
};
if (_damage > 1) then {_damage = 1.0};
_veh setHitPointDamage [_x, _damage];
} forEach ((getAllHitPointsDamage _veh) select 0);
_vehicleArray pushBack _veh;
private _driver = createVehicle [crewman_classname, getPos _veh, [], 12, "NONE"];
_driver setDamage 1;
};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: truck spawning done", (_convoy select 0)];};
private _supplies = (_convoy select 6) select 0;
private _ammo = (_convoy select 6) select 1;
private _fuel = (_convoy select 6) select 2;
private _crateArray = [];
while {_supplies > 0} do {
private _crate = createVehicle [KP_liberation_supply_crate, getPos _roadObj, [], 50, "NONE"];
[_crate, 500] remoteExec ["F_setMass",_crate];
if ((floor (_supplies / 100)) > 0) then {
_crate setVariable ["KP_liberation_crate_value", 100, true];
_supplies = _supplies - 100;
} else {
_crate setVariable ["KP_liberation_crate_value", _supplies, true];
_supplies = 0;
};
_crateArray pushBack [_crate];
};
while {_ammo > 0} do {
private _crate = createVehicle [KP_liberation_ammo_crate, getPos _roadObj, [], 50, "NONE"];
[_crate, 500] remoteExec ["F_setMass",_crate];
if ((floor (_ammo / 100)) > 0) then {
_crate setVariable ["KP_liberation_crate_value", 100, true];
_ammo = _ammo - 100;
} else {
_crate setVariable ["KP_liberation_crate_value", _ammo, true];
_ammo = 0;
};
_crateArray pushBack [_crate];
};
while {_fuel > 0} do {
private _crate = createVehicle [KP_liberation_fuel_crate, getPos _roadObj, [], 50, "NONE"];
[_crate, 500] remoteExec ["F_setMass",_crate];
if ((floor (_fuel / 100)) > 0) then {
_crate setVariable ["KP_liberation_crate_value", 100, true];
_fuel = _fuel - 100;
} else {
_crate setVariable ["KP_liberation_crate_value", _fuel, true];
_fuel = 0;
};
_crateArray pushBack [_crate];
};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: resource spawning done", (_convoy select 0)];};
private _grp = createGroup GRLIB_side_resistance;
for "_i" from 1 to (4 + (random (round ((KP_liberation_civ_rep * -1) / 25))) + (random (round (KP_liberation_guerilla_strength / 25)))) do {
// GUERILLA -> Need adjusting after loadouts are finished
private _unit = _grp createUnit [selectRandom KP_liberation_guerilla_units, getPos _roadObj, [], 50, "NONE"];
[_unit] call (selectRandom [loadout_crewman, loadout_rifleman, loadout_autorifleman, loadout_rifleman_light, loadout_marksman]);
};
private _waypoint = _grp addWaypoint [getPos _roadObj, 150];
_waypoint setWaypointType "SAD";
_waypoint setWaypointCompletionRadius 10;
_waypoint = _grp addWaypoint [getPos _roadObj, 150];
_waypoint setWaypointType "SAD";
_waypoint setWaypointCompletionRadius 10;
_waypoint = _grp addWaypoint [getPos _roadObj, 150];
_waypoint setWaypointType "SAD";
_waypoint setWaypointCompletionRadius 10;
_waypoint = _grp addWaypoint [getPos _roadObj, 150];
_waypoint setWaypointType "CYCLE";
_waypoint setWaypointCompletionRadius 10;
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: guerillas spawning done", (_convoy select 0)];};
private _waitingTime = KP_liberation_convoy_ambush_duration;
while {(({alive _x} count (units _grp)) > 0) && (_waitingTime > 0)} do {
uiSleep 1;
private _player_near = false;
{
if (((_x distance _roadObj) < 250) && (alive _x)) exitWith {_player_near = true};
} foreach allPlayers;
if !(_player_near) then {
_waitingTime = _waitingTime - 1;
};
};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: ambush finished", (_convoy select 0)];};
KP_liberation_convoy_ambush_inProgress = false;
if ((_waitingTime <= 0) && (({alive _x} count (units _grp)) > 0)) then {
[2] remoteExec ["asymm_notifications"];
{deleteVehicle _x;} forEach (units _grp);
{
if ((typeOf (_x select 0)) == KP_liberation_ammo_crate) then {
KP_liberation_guerilla_strength = KP_liberation_guerilla_strength + 4;
} else {
KP_liberation_guerilla_strength = KP_liberation_guerilla_strength + 2;
};
deleteVehicle (_x select 0);
} forEach _crateArray;
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: guerillas escaped", (_convoy select 0)];};
} else {
[1] remoteExec ["asymm_notifications"];
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1 ambush: guerillas defeated", (_convoy select 0)];};
};

View File

@ -2,11 +2,11 @@ params ["_sector", "_count"];
if (_count <= 0) exitWith {};
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf for %1 spawned on: %2", markerText _sector, debug_source];_text remoteExec ["diag_log",2];};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf for %1 spawned on: %2", markerText _sector, debug_source];};
waitUntil {sleep 1; _sector in KP_liberation_asymmetric_sectors};
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> spawning IED %1 at %2", _count, markerText _sector];_text remoteExec ["diag_log",2];};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> spawning IED %1 at %2", _count, markerText _sector];};
private _activation_radius_infantry = 6.66;
private _activation_radius_vehicles = 10;
@ -28,7 +28,7 @@ if (!(isnull _roadobj)) then {
_ied_obj = createMine [_ied_type, [_roadpos, _spread, random (360)] call BIS_fnc_relPos, [], 0];
_ied_obj setdir (random 360);
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> IED %1 spawned at %2", _count, markerText _sector];_text remoteExec ["diag_log",2];_ied_marker = createMarker [str _ied_obj, getPos _ied_obj];_ied_marker setMarkerColor "ColorRed";_ied_marker setMarkerType "hd_dot";_ied_marker setMarkerText "IED";};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> IED %1 spawned at %2", _count, markerText _sector];};
while {(_sector in KP_liberation_asymmetric_sectors) && (mineActive _ied_obj) && !_goes_boom} do {
_nearinfantry = [(getpos _ied_obj) nearEntities ["Man", _activation_radius_infantry] , {side _x == GRLIB_side_friendly}] call BIS_fnc_conditionalSelect;
@ -41,10 +41,10 @@ if (!(isnull _roadobj)) then {
sleep 1;
};
} else {
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> _roadobj is Null for IED %1 at %2", _count, markerText _sector];_text remoteExec ["diag_log",2];};
if (KP_liberation_asymmetric_debug > 0) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> _roadobj is Null for IED %1 at %2", _count, markerText _sector];};
};
if ((KP_liberation_asymmetric_debug > 0) && !(isNull _roadobj)) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> exited IED %1 loop at %2", _count, markerText _sector];_text remoteExec ["diag_log",2];deleteMarker _ied_marker;};
if ((KP_liberation_asymmetric_debug > 0) && !(isNull _roadobj)) then {diag_log format ["[KP LIBERATION] [ASYMMETRIC] manage_asymIED.sqf -> exited IED %1 loop at %2", _count, markerText _sector];};
sleep 1800;

View File

@ -2,5 +2,6 @@ params ["_informant"];
if (isServer && alive _informant) then {
resources_intel = resources_intel + KP_liberation_civinfo_intel;
[2, false] spawn F_cr_changeCR;
[1] remoteExec ["civinfo_notifications"];
};

View File

@ -13,21 +13,22 @@ if (KP_liberation_civ_rep > 100) then {KP_liberation_civ_rep = 100;};
if (KP_liberation_civ_rep <= -25) then {
GRLIB_side_resistance setFriend [GRLIB_side_enemy, 1];
GRLIB_side_enemy setFriend [GRLIB_side_enemy, 1];
GRLIB_side_enemy setFriend [GRLIB_side_resistance, 1];
GRLIB_side_resistance setFriend [GRLIB_side_friendly, 0];
GRLIB_side_friendly setFriend [GRLIB_side_friendly, 0];
GRLIB_side_friendly setFriend [GRLIB_side_resistance, 0];
};
if (KP_liberation_civ_rep > -25 && KP_liberation_civ_rep < 25) then {
GRLIB_side_resistance setFriend [GRLIB_side_enemy, 1];
GRLIB_side_enemy setFriend [GRLIB_side_enemy, 1];
GRLIB_side_enemy setFriend [GRLIB_side_resistance, 1];
GRLIB_side_resistance setFriend [GRLIB_side_friendly, 1];
GRLIB_side_friendly setFriend [GRLIB_side_friendly, 1];
GRLIB_side_friendly setFriend [GRLIB_side_resistance, 1];
};
if (KP_liberation_civ_rep >= 25) then {
GRLIB_side_resistance setFriend [GRLIB_side_friendly, 1];
GRLIB_side_friendly setFriend [GRLIB_side_friendly, 1];
GRLIB_side_friendly setFriend [GRLIB_side_resistance, 1];
GRLIB_side_resistance setFriend [GRLIB_side_enemy, 0];
GRLIB_side_enemy setFriend [GRLIB_side_enemy, 0];
GRLIB_side_enemy setFriend [GRLIB_side_resistance, 0];
};
if (KP_liberation_civrep_debug > 0) then {private _text = format ["[KP LIBERATION] [CIVREP] changeCR finished on: %1 - New value: %2", debug_source, KP_liberation_civ_rep];_text remoteExec ["diag_log",2];};
if (KP_liberation_civrep_debug > 0) then {private _text = format ["[KP LIBERATION] [CIVREP] %1 getFriend %2: %3 - %1 getFriend %4: %5", GRLIB_side_resistance, GRLIB_side_enemy, (GRLIB_side_resistance getFriend GRLIB_side_enemy), GRLIB_side_friendly, (GRLIB_side_resistance getFriend GRLIB_side_friendly)];_text remoteExec ["diag_log",2];};

View File

@ -1,6 +1,6 @@
params ["_sector"];
if (KP_liberation_civrep_debug > 0) then {private _text = format ["[KP LIBERATION] [CIVREP] getBuildings called on: %1 - Sector: %2", debug_source, _sector];_text remoteExec ["diag_log",2];};
if (KP_liberation_civrep_debug > 0) then {private _text = format ["[KP LIBERATION] [CIVREP] getBuildings called on: %1 - Sector: %2", debug_source, markerText _sector];_text remoteExec ["diag_log",2];};
private _return = 0;

View File

@ -10,4 +10,11 @@ KP_liberation_cr_sectorbuildings = [];
KP_liberation_cr_sectorbuildings pushBack [_x, [_x] call F_cr_getBuildings];
} forEach sectors_bigtown;
if (KP_liberation_civrep_debug > 0) then {private _text = format ["[KP LIBERATION] [CIVREP] init_buildings.sqf finished on: %1 - List of sector buildings: %2", debug_source, KP_liberation_cr_sectorbuildings];_text remoteExec ["diag_log",2];};
sleep 1;
if (KP_liberation_civrep_debug > 0) then {
diag_log format ["[KP LIBERATION] [CIVREP] init_buildings.sqf finished on: %1 - List of sector buildings:", debug_source];
{
diag_log format ["[KP LIBERATION] [CIVREP] %1: %2", markerText (_x select 0), (_x select 1)];
} forEach KP_liberation_cr_sectorbuildings;
};

View File

@ -58,6 +58,7 @@ resources_intel = 0;
GRLIB_player_scores = [];
KP_liberation_civ_rep = 0;
KP_liberation_production_markers = [];
KP_liberation_guerilla_strength = 25;
no_kill_handler_classnames = [FOB_typename, huron_typename];
_classnames_to_save = [FOB_typename, huron_typename];
@ -150,12 +151,35 @@ if ( !isNil "greuh_liberation_savegame" ) then {
if (count greuh_liberation_savegame > 15) then {
KP_liberation_civ_rep = greuh_liberation_savegame select 15;
if (KP_liberation_civ_rep <= -25) then {
GRLIB_side_resistance setFriend [GRLIB_side_enemy, 1];
GRLIB_side_enemy setFriend [GRLIB_side_resistance, 1];
GRLIB_side_resistance setFriend [GRLIB_side_friendly, 0];
GRLIB_side_friendly setFriend [GRLIB_side_resistance, 0];
};
if (KP_liberation_civ_rep > -25 && KP_liberation_civ_rep < 25) then {
GRLIB_side_resistance setFriend [GRLIB_side_enemy, 1];
GRLIB_side_enemy setFriend [GRLIB_side_resistance, 1];
GRLIB_side_resistance setFriend [GRLIB_side_friendly, 1];
GRLIB_side_friendly setFriend [GRLIB_side_resistance, 1];
};
if (KP_liberation_civ_rep >= 25) then {
GRLIB_side_resistance setFriend [GRLIB_side_friendly, 1];
GRLIB_side_friendly setFriend [GRLIB_side_resistance, 1];
GRLIB_side_resistance setFriend [GRLIB_side_enemy, 0];
GRLIB_side_enemy setFriend [GRLIB_side_resistance, 0];
};
if (KP_liberation_civrep_debug > 0) then {private _text = format ["[KP LIBERATION] [CIVREP] %1 getFriend %2: %3 - %1 getFriend %4: %5", GRLIB_side_resistance, GRLIB_side_enemy, (GRLIB_side_resistance getFriend GRLIB_side_enemy), GRLIB_side_friendly, (GRLIB_side_resistance getFriend GRLIB_side_friendly)];_text remoteExec ["diag_log",2];};
};
if (count greuh_liberation_savegame > 16) then {
KP_liberation_production_markers = greuh_liberation_savegame select 16;
};
if (count greuh_liberation_savegame > 17) then {
KP_liberation_guerilla_strength = greuh_liberation_savegame select 17;
};
setDate [ 2045, 6, 6, time_of_day, 0];
if (KP_liberation_savegame_debug > 0) then {private _text = format ["[KP LIBERATION] [SAVE] Loaded savegame: %1", greuh_liberation_savegame];_text remoteExec ["diag_log",2];};
@ -643,7 +667,7 @@ while { true } do {
greuh_liberation_savegame = [blufor_sectors, GRLIB_all_fobs, buildings_to_save, time_of_day, round combat_readiness, KP_liberation_storages,
KP_liberation_production, KP_liberation_logistics, _stats, [round infantry_weight, round armor_weight, round air_weight], GRLIB_vehicle_to_military_base_links,
GRLIB_permissions, ai_groups, resources_intel, GRLIB_player_scores, KP_liberation_civ_rep, KP_liberation_production_markers];
GRLIB_permissions, ai_groups, resources_intel, GRLIB_player_scores, KP_liberation_civ_rep, KP_liberation_production_markers, KP_liberation_guerilla_strength];
profileNamespace setVariable [GRLIB_save_key, greuh_liberation_savegame];
saveProfileNamespace;

View File

@ -38,6 +38,9 @@ manage_one_sector = compileFinal preprocessFileLineNumbers "scripts\server\secto
wait_to_spawn_sector = compileFinal preprocessFileLineNumbers "scripts\server\sector\wait_to_spawn_sector.sqf";
manage_asymIED = compileFinal preprocessFileLineNumbers "scripts\server\asymmetric\ied\manage_asymIED.sqf";
// Asymmetric
logistic_convoy_ambush = compileFinal preprocessFileLineNumbers "scripts\server\asymmetric\convoy\logistic_convoy_ambush.sqf";
// Arty Monitor
// Arty Supp deactivated for now
/*arty_monitor = compileFinal preprocessFileLineNumbers "scripts\server\game\arty_monitor.sqf";

View File

@ -2,8 +2,6 @@ if (!isServer) exitWith {};
params ["_index", "_dest_a", "_ress_a", "_dest_b", "_ress_b", "_clientID"];
private ["_time"];
logiError = 0;
if ((_ress_a isEqualTo [0,0,0]) && (_ress_b isEqualTo [0,0,0])) then {
@ -31,7 +29,7 @@ if (_dest_a isEqualTo _dest_b) then {
if (logiError == 1) exitWith {(localize "STR_LOGISTIC_SAVE_ERROR") remoteExec ["hint",_clientID]; _clientID publicVariableClient "logiError";};
_time = ceil (((ceil ((_ress_a select 0) / 100)) + (ceil ((_ress_a select 1) / 100)) + (ceil ((_ress_a select 2) / 100))) / 3);
private _time = ceil (((ceil ((_ress_a select 0) / 100)) + (ceil ((_ress_a select 1) / 100)) + (ceil ((_ress_a select 2) / 100))) / 3);
if (_time > ((KP_liberation_logistics select _index) select 1)) then {
_time = ((KP_liberation_logistics select _index) select 1);

View File

@ -3,6 +3,9 @@ waitUntil {!isNil "KP_liberation_logistics"};
if (KP_liberation_logistic_debug > 0) then {private _text = format ["[KP LIBERATION] [LOGISTIC] Logistic management started on: %1", debug_source];_text remoteExec ["diag_log",2];};
KP_liberation_convoy_ambush_inProgress = false;
KP_liberation_convoy_ambush_check = 0;
while {GRLIB_endgame == 0} do {
if (((count allPlayers) > 0) && ((count KP_liberation_logistics) > 0)) then {
@ -139,7 +142,6 @@ while {GRLIB_endgame == 0} do {
if (KP_liberation_logistic_debug > 0) then {private _text = format ["[KP LIBERATION] [LOGISTIC] Logistic Group Update: %1", _x];_text remoteExec ["diag_log",2];};
} else {
_x set [9,1];
if (KP_liberation_logistic_debug > 0) then {private _text = format ["[KP LIBERATION] [LOGISTIC] Logistic Group Update: %1", _x];_text remoteExec ["diag_log",2];};
};
if (((_x select 9) == 1) && !((_x select _locRes) isEqualTo [0,0,0])) then {
@ -326,7 +328,35 @@ while {GRLIB_endgame == 0} do {
case 2;
case 4: {
if ((_x select 8) > 1) then {
_x set [8,((_x select 8) - 1)];
if (((_x select 8) <= ((ceil (((_x select 2) distance2D (_x select 3)) / 400)) - 3)) && ((_x select 8) >= 3) && !((_x select 6) isEqualTo [0,0,0]) && !KP_liberation_convoy_ambush_inProgress && (KP_liberation_civ_rep <= -25)) then {
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1: ambush possible - current ETA: %2", (_x select 0), (_x select 8)];_text remoteExec ["diag_log",2];};
private _dice = round (random 100);
if (_dice <= (KP_liberation_convoy_ambush_chance + (round ((KP_liberation_civ_rep * -1) / 25)))) then {
private _convoy = +_x;
sleep 0.1;
[_convoy] spawn logistic_convoy_ambush;
waitUntil {sleep 0.1; KP_liberation_convoy_ambush_check != 0};
if (KP_liberation_convoy_ambush_check == 2) then {
_x set [1,0];
_x set [2,[0,0,0]];
_x set [3,[0,0,0]];
_x set [4,[0,0,0]];
_x set [5,[0,0,0]];
_x set [6,[0,0,0]];
_x set [7,0];
_x set [8,-1];
} else {
_x set [8,((_x select 8) - 1)];
KP_liberation_convoy_ambush_check = 0;
}
} else {
if (KP_liberation_asymmetric_debug > 0) then {private _text = format ["[KP LIBERATION] [ASYMMETRIC] Logistic convoy %1: no ambush - Chance: %2 - Dice: %3", (_x select 0), (KP_liberation_convoy_ambush_chance + (round ((KP_liberation_civ_rep * -1) / 25))), _dice];_text remoteExec ["diag_log",2];};
_x set [8,((_x select 8) - 1)];
};
} else {
_x set [8,((_x select 8) - 1)];
};
if (KP_liberation_logistic_debug > 0) then {private _text = format ["[KP LIBERATION] [LOGISTIC] Logistic Group Update: %1", _x];_text remoteExec ["diag_log",2];};

View File

@ -34,14 +34,6 @@ _idxposit = 0;
_nextunit setpos (_buildingpositions select (_position_indexes select _idxposit));
_nextunit setdir (random 360);
[ _nextunit, _sector ] spawn building_defence_ai;
if ( _infsquad == "militia" ) then {
if ( (typeof _nextunit) in original_resistance ) then {
[ _nextunit ] spawn (selectRandom militia_standard_squad);
if ( random 100 < 40 ) then {
_nextunit addPrimaryWeaponItem "acc_flashlight";
};
};
};
_idxposit = _idxposit + 1;

View File

@ -20,20 +20,6 @@ _grp = createGroup GRLIB_side_enemy;
sleep 0.1;
} foreach _squadies_to_spawn;
if ( _sector in sectors_capture ) then {
_unitidx = 0;
{
if ( (typeof _x) in original_resistance ) then {
[ _x ] spawn ( militia_standard_squad select _unitidx );
if ( random 100 < 40 ) then {
_x addPrimaryWeaponItem "acc_flashlight";
};
};
_unitidx = _unitidx + 1;
if ( _unitidx > 9 ) then { _unitidx = 0 };
} foreach (units _grp);
};
if (KP_liberation_debug) then {private _text = format ["[KP LIBERATION] [DEBUG] Spawning regular squad done at %1 - Owner: %2", time, debug_source];_text remoteExec ["diag_log",2];};
_grp;

View File

@ -36,6 +36,8 @@ civinfo_notifications = compileFinal preprocessFileLineNumbers "scripts\client\c
civinfo_escort = compileFinal preprocessFileLineNumbers "scripts\client\civinformant\civinfo_escort.sqf";
civinfo_delivered = compileFinal preprocessFileLineNumbers "scripts\server\civinformant\civinfo_delivered.sqf";
asymm_notifications = compileFinal preprocessFileLineNumbers "scripts\client\asymmetric\asymm_notifications.sqf";
[] spawn compileFinal preprocessFileLineNumbers "scripts\shared\scan_skill.sqf";
[] spawn compileFinal preprocessFileLineNumbers "scripts\shared\diagnostics.sqf";
if (!KP_liberation_ace) then {[] spawn compileFinal preprocessFileLineNumbers "scripts\shared\manage_weather.sqf";};

View File

@ -4284,7 +4284,7 @@
<German>Automatischer Server Restart nach (Stunden)</German>
</Key>
<Key ID="STR_PARAMS_DEBUGOPTIONS">
<Original>== DEBUG MESSAGE SETTINGS ==</Original>
<Original>== DEBUG MESSAGES ==</Original>
<German>== DEBUG NACHRICHTEN ==</German>
</Key>
<Key ID="STR_PARAMS_DEBUG_CIVINFO">
@ -4323,5 +4323,21 @@
<Original>Logistic</Original>
<German>Logistik</German>
</Key>
<Key ID="STR_NOTIFICATION_ASYMMCONVOYAMBUSH_TITLE">
<Original>Logistic Convoy Ambush</Original>
<German>Logistikkonvoi Überfall</German>
</Key>
<Key ID="STR_NOTIFICATION_ASYMMCONVOYAMBUSH_TEXT">
<Original>Guerilla forces attacking our convoy near %1.</Original>
<German>Guerillakräfte greifen unseren Konvoi nahe %1 an.</German>
</Key>
<Key ID="STR_NOTIFICATION_ASYMMCONVOYAMBUSH_SUCCESS">
<Original>The ambush was successfully repulsed.</Original>
<German>Der Hinterhalt konnte erfolgreich zurückgeschlagen werden.</German>
</Key>
<Key ID="STR_NOTIFICATION_ASYMMCONVOYAMBUSH_FAIL">
<Original>The guerilla forces excaped with the convoy resources.</Original>
<German>Die Guerillakräfte konnten mit den Konvoiressourcen verschwinden.</German>
</Key>
</Package>
</Project>

View File

@ -160,4 +160,20 @@ class CfgNotifications {
class lib_civ_informant_death : lib_intel {
description = $STR_NOTIFICATION_CIV_INFORMANT_DEATH;
};
class lib_asymm_convoy_ambush : lib_default_notification {
title = $STR_NOTIFICATION_ASYMMCONVOYAMBUSH_TITLE;
description = $STR_NOTIFICATION_ASYMMCONVOYAMBUSH_TEXT;
iconPicture = "res\notif\ui_notif_camb.paa";
color[] = {1, 0, 0, 1};
sound = "taskCreated";
};
class lib_asymm_convoy_ambush_success : lib_asymm_convoy_ambush {
description = $STR_NOTIFICATION_ASYMMCONVOYAMBUSH_SUCCESS;
sound = "taskSucceeded";
};
class lib_asymm_convoy_ambush_fail : lib_asymm_convoy_ambush {
description = $STR_NOTIFICATION_ASYMMCONVOYAMBUSH_FAIL;
color[] = {1, 0, 0, 1};
sound = "taskFailed";
};
};

View File

@ -162,23 +162,27 @@ class Missions
### 0.96 (in Development)
* Added: BI Support System functionality. (Currently deactivated, as there are still issues in MP)
* Added: Parameter for access to the Support System -> Disabled, Commander, Whitelist, Everyone. (Currently deactivated, as there are still issues in MP)
* Added: BI Artillery support for artillery vehicles and mortars (if built manned or AI ordered to get in as crew). (Currently deactivated, as there are still issues in MP)
* Added: Chinese Simplified localization. Thanks to [nercon](https://github.com/nercon)
* Added: Parameter for access to the Support System -> Disabled, Commander, Whitelist, Everyone.
* Added: BI Artillery support for artillery vehicles and mortars (if built manned or AI ordered to get in as crew).
* Added: Players can request artillery support from players (generates task).
* Added: Civil Reputation.
* Added: Config variables for the civil reputation.
* Added: Reputation penalty for killing civilians.
* Added: Reputation penalty for seizing civil vehicles.
* Added: Players can request artillery support from players (generates task). (Currently deactivated, as there are still issues in MP)
* Added: Reputation penalty for destroyed/damaged civil buildings.
* Added: Mission parameter to choose building penalty for damaged or only destroyed buildings.
* Added: Reputation gain for liberated sectors.
* Added: Config variables in `kp_liberation_config.sqf`.
* Added: Reputation penalty for killing civilians.
* Added: Reputation penalty for seizing civil vehicles.
* Added: Reputation penalty for destroyed/damaged civil buildings.
* Added: Mission parameter to choose building penalty for damaged or only destroyed buildings.
* Added: Reputation gain for liberated sectors.
* Added: Civil informant.
* Added: If you've a good reputation, a civil informant can rarely spawn at blufor sectors.
* Added: Intel increase, if you capture the informant and bring him back to a FOB.
* Added: Asymmetric Threats.
* Added: Possibility of IEDs in blufor sectors, if you have a bad civil reputation.
* Added: Own logistic convoys can be ambushed by guerilla forces.
* Added: Value for guerilla strength which will be affected by the events connected to guerilla forces.
* Added: Chinese Simplified localization. Thanks to [nercon](https://github.com/nercon)
* Added: Automatic server restart script for dedicated servers. Thanks to [k4s0](https://github.com/k4s0)
* Added: Settings in the mission parameters for particular debug messages.
* Added: Civil informant can rarely spawn in blufor sectors, when reputation is high enough.
* Added: Factory map markers now indicate which production facilities are available there.
* Added: Asymmetric Threats.
* Added: Possibility of IEDs in blufor sectors, if you have a bad civil reputation.
* Removed: Liberation skill handling of AI units, as BI do this good enough now concerning wounds, etc.
* Removed: Vehicle explosion chance script for convoy ambush.
* Tweaked: Terrain alignment will be persistent during repeat building of objects (like walls). Thanks to [veteran29](https://github.com/veteran29)