diff --git a/Missionframework/CfgDebriefing.hpp b/Missionframework/CfgDebriefing.hpp
index a6198ef79..2bf54f597 100644
--- a/Missionframework/CfgDebriefing.hpp
+++ b/Missionframework/CfgDebriefing.hpp
@@ -10,8 +10,14 @@
*/
class End1 {
- title = $STR_SORRY;
+ title = $STR_SORRY;
subtitle = "";
description = $STR_COMMANDER_NOT_AUTHORIZED;
pictureBackground = "";
};
+class End2 {
+ title = $STR_SORRY;
+ subtitle = "";
+ description = $STR_CBA_IS_REQUIRED;
+ pictureBackground = "";
+};
diff --git a/Missionframework/CfgFunctions.hpp b/Missionframework/CfgFunctions.hpp
index 2749daa07..7e209476f 100644
--- a/Missionframework/CfgFunctions.hpp
+++ b/Missionframework/CfgFunctions.hpp
@@ -3,7 +3,9 @@ class KPLIB {
file = "functions";
class addActionsFob {};
+ class addActionsFullHeal {};
class addActionsPlayer {};
+ class addArtyToSupport {};
class addObjectInit {};
class addRopeAttachEh {};
class allowCrewInImmobile {};
@@ -24,6 +26,7 @@ class KPLIB {
class crGetMulti {};
class crGlobalMsg {};
class doSave {};
+ class fullHeal {};
class fillStorage {};
class forceBluforCrew {};
class getAdaptiveVehicle {};
@@ -39,6 +42,7 @@ class KPLIB {
class getLocationName {};
class getMilitaryId {};
class getMobileRespawns {};
+ class getMobileRespawnName {};
class getNearbyPlayers {};
class getNearestBluforObjective {};
class getNearestFob {};
@@ -48,6 +52,7 @@ class KPLIB {
class getOpforCap {};
class getOpforFactor {};
class getOpforSpawnPoint {};
+ class getOpforSpawnPointSAM {};
class getPlayerCount {};
class getResistanceTier {};
class getSaveableParam {};
diff --git a/Missionframework/GREUH/GREUH_config.sqf b/Missionframework/GREUH/GREUH_config.sqf
index 2ab850f45..aaf1b5e09 100644
--- a/Missionframework/GREUH/GREUH_config.sqf
+++ b/Missionframework/GREUH/GREUH_config.sqf
@@ -1,8 +1,8 @@
-// Permettre aux joueurs de modifier leur distance de vue
+// Allow players to change their view distance
GREUH_allow_viewdistance = true;
-// Permettre aux joueurs de modifier la qualité de l environnement
+// llow players to modify the quality of the environment
GREUH_allow_worldquality = true;
-// Permettre aux joueurs de modifier leurs escouades
+// Allow players to modify their squads
GREUH_allow_customsquads = true;
diff --git a/Missionframework/GREUH/Scripts/GREUH_actionmanager.sqf b/Missionframework/GREUH/Scripts/GREUH_actionmanager.sqf
index 77354028e..bb7e005a8 100644
--- a/Missionframework/GREUH/Scripts/GREUH_actionmanager.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_actionmanager.sqf
@@ -1,6 +1,6 @@
_idact = -1;
while { true } do {
- waitUntil{ sleep 0.3; alive player };
- _idact = player addAction ["" + localize "STR_GREUH_EXTENDED_OPTIONS_ACTIONMENU" + "","GREUH\scripts\GREUH_dialog.sqf","",-1000,false,true];
- waitUntil{ sleep 0.3; !alive player};
+ waitUntil{ sleep 0.3; alive player };
+ _idact = player addAction ["" + localize "STR_GREUH_EXTENDED_OPTIONS_ACTIONMENU" + "","GREUH\scripts\GREUH_dialog.sqf","",-1000,false,true];
+ waitUntil{ sleep 0.3; !alive player};
};
\ No newline at end of file
diff --git a/Missionframework/GREUH/Scripts/GREUH_activate.sqf b/Missionframework/GREUH/Scripts/GREUH_activate.sqf
index f72f03d87..f3325e527 100644
--- a/Missionframework/GREUH/Scripts/GREUH_activate.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_activate.sqf
@@ -13,29 +13,29 @@ desired_vehvolume = 100;
greuh_options_profile = profileNamespace getVariable "GREUH_OPTIONS_PROFILE";
if ( !isNil "greuh_options_profile" ) then {
- desiredviewdistance_inf = greuh_options_profile select 0;
- desiredviewdistance_veh = greuh_options_profile select 1;
- desiredviewdistance_obj = greuh_options_profile select 2;
- show_teammates = greuh_options_profile select 3;
- show_platoon = greuh_options_profile select 4;
- if ( count greuh_options_profile > 5 ) then {
- desired_vehvolume = greuh_options_profile select 5;
- if ( isNil "desired_vehvolume" ) then {
- desired_vehvolume = 100;
- };
- };
- if ( count greuh_options_profile > 6 ) then {
- show_nametags = greuh_options_profile select 6;
- if ( isNil "show_nametags" ) then {
- show_nametags = false;
- };
- };
- if ( count greuh_options_profile > 7) then {
- desired_fps = greuh_options_profile select 7;
- if ( isNil "desired_fps" ) then {
- desired_fps = 0;
- };
- };
+ desiredviewdistance_inf = greuh_options_profile select 0;
+ desiredviewdistance_veh = greuh_options_profile select 1;
+ desiredviewdistance_obj = greuh_options_profile select 2;
+ show_teammates = greuh_options_profile select 3;
+ show_platoon = greuh_options_profile select 4;
+ if ( count greuh_options_profile > 5 ) then {
+ desired_vehvolume = greuh_options_profile select 5;
+ if ( isNil "desired_vehvolume" ) then {
+ desired_vehvolume = 100;
+ };
+ };
+ if ( count greuh_options_profile > 6 ) then {
+ show_nametags = greuh_options_profile select 6;
+ if ( isNil "show_nametags" ) then {
+ show_nametags = false;
+ };
+ };
+ if ( count greuh_options_profile > 7) then {
+ desired_fps = greuh_options_profile select 7;
+ if ( isNil "desired_fps" ) then {
+ desired_fps = 0;
+ };
+ };
};
[] call compile preprocessFileLineNumbers "GREUH\GREUH_config.sqf";
diff --git a/Missionframework/GREUH/Scripts/GREUH_cache_units.sqf b/Missionframework/GREUH/Scripts/GREUH_cache_units.sqf
index d7bc22d9c..7698769d2 100644
--- a/Missionframework/GREUH/Scripts/GREUH_cache_units.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_cache_units.sqf
@@ -4,14 +4,14 @@ waitUntil { !isNil "nametags_distance" };
while { true } do {
- _scanned_units = [ allUnits, { ( alive _x ) && ( side group _x == KPLIB_side_player ) } ] call BIS_fnc_conditionalSelect;
- _scanned_units = [ _scanned_units, { (_x == leader group player ) || (_x distance player < nametags_distance) } ] call BIS_fnc_conditionalSelect;
- _scanned_units = [ _scanned_units, { (_x != player) && (( vehicle player ) != ( vehicle _x )) } ] call BIS_fnc_conditionalSelect;
- KPLIB_nametag_units = [] + _scanned_units;
+ _scanned_units = [ allUnits, { ( alive _x ) && ( side group _x == KPLIB_side_player ) } ] call BIS_fnc_conditionalSelect;
+ _scanned_units = [ _scanned_units, { (_x == leader group player ) || (_x distance player < nametags_distance) } ] call BIS_fnc_conditionalSelect;
+ _scanned_units = [ _scanned_units, { (_x != player) && (( vehicle player ) != ( vehicle _x )) } ] call BIS_fnc_conditionalSelect;
+ KPLIB_nametag_units = [] + _scanned_units;
- _scanned_groups = [ allGroups, { ( side _x == side player ) && ( isplayer (leader _x) ) } ] call BIS_fnc_conditionalSelect;
- _scanned_groups = [ _scanned_groups, { ( count units _x > 1 ) || ( count units _x == 1 && leader _x != player ) } ] call BIS_fnc_conditionalSelect;
- KPLIB_overlay_groups = [] + _scanned_groups;
+ _scanned_groups = [ allGroups, { ( side _x == side player ) && ( isplayer (leader _x) ) } ] call BIS_fnc_conditionalSelect;
+ _scanned_groups = [ _scanned_groups, { ( count units _x > 1 ) || ( count units _x == 1 && leader _x != player ) } ] call BIS_fnc_conditionalSelect;
+ KPLIB_overlay_groups = [] + _scanned_groups;
- sleep 1;
+ sleep 1;
};
diff --git a/Missionframework/GREUH/Scripts/GREUH_dialog.sqf b/Missionframework/GREUH/Scripts/GREUH_dialog.sqf
index 773d5bc89..16d5b4be9 100644
--- a/Missionframework/GREUH/Scripts/GREUH_dialog.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_dialog.sqf
@@ -13,99 +13,99 @@ _dialog = createDialog "GREUH_Menu";
waitUntil { dialog };
if ( GREUH_allow_customsquads ) then {
- ctrlShow [501, false];
+ ctrlShow [501, false];
} else {
- ctrlShow [501, true];
- { ctrlShow [_x, false] } foreach _squadcontrols;
+ ctrlShow [501, true];
+ { ctrlShow [_x, false] } foreach _squadcontrols;
};
if ( GREUH_allow_platoonview ) then {
- ctrlShow [601, false];
+ ctrlShow [601, false];
} else {
- ctrlShow [601, true];
- { ctrlShow [_x, false] } foreach _platooncontrols;
+ ctrlShow [601, true];
+ { ctrlShow [_x, false] } foreach _platooncontrols;
};
if ( GREUH_allow_viewdistance ) then {
- ctrlShow [701, false];
- sliderSetRange [712, 1000, 10000];
- sliderSetPosition [712, desiredviewdistance_inf];
- sliderSetSpeed [712, 500, 500];
- sliderSetRange [722, 1000, 10000];
- sliderSetPosition [722, desiredviewdistance_veh];
- sliderSetSpeed [722, 500, 500];
- sliderSetRange [732, 30, 100];
- sliderSetPosition [732, desiredviewdistance_obj];
- sliderSetSpeed [732, 5, 5];
- ctrlSetText [ 960, format ["%1",desired_fps] ];
+ ctrlShow [701, false];
+ sliderSetRange [712, 1000, 10000];
+ sliderSetPosition [712, desiredviewdistance_inf];
+ sliderSetSpeed [712, 500, 500];
+ sliderSetRange [722, 1000, 10000];
+ sliderSetPosition [722, desiredviewdistance_veh];
+ sliderSetSpeed [722, 500, 500];
+ sliderSetRange [732, 30, 100];
+ sliderSetPosition [732, desiredviewdistance_obj];
+ sliderSetSpeed [732, 5, 5];
+ ctrlSetText [ 960, format ["%1",desired_fps] ];
} else {
- ctrlShow [701, true];
- { ctrlShow [_x, false] } foreach _viewcontrols;
+ ctrlShow [701, true];
+ { ctrlShow [_x, false] } foreach _viewcontrols;
};
if ( GREUH_allow_worldquality ) then {
- ctrlShow [801, false];
+ ctrlShow [801, false];
} else {
- ctrlShow [801, true];
- { ctrlShow [_x, false] } foreach _worldcontrols;
+ ctrlShow [801, true];
+ { ctrlShow [_x, false] } foreach _worldcontrols;
};
if ( GREUH_allow_mapmarkers ) then {
- ctrlShow [901, false];
+ ctrlShow [901, false];
} else {
- ctrlShow [901, true];
- { ctrlShow [_x, false] } foreach _markerscontrols;
+ ctrlShow [901, true];
+ { ctrlShow [_x, false] } foreach _markerscontrols;
};
if ( true ) then {
- sliderSetSpeed [ 1102, 5, 5];
- sliderSetRange [ 1102, 0, 100];
- sliderSetPosition [ 1102, desired_vehvolume ];
+ sliderSetSpeed [ 1102, 5, 5];
+ sliderSetRange [ 1102, 0, 100];
+ sliderSetPosition [ 1102, desired_vehvolume ];
};
while { dialog && alive player } do {
- if ( renaming ) then {
- { ctrlEnable [_x, false] } foreach (_allbuttons);
- { ctrlShow [_x, true] } foreach _rename_controls;
- { ctrlShow [_x, false] } foreach _leader_controls;
- } else {
- if ( choosingleader ) then {
- { ctrlEnable [_x, false] } foreach _allbuttons;
- { ctrlShow [_x, false] } foreach _rename_controls;
- { ctrlShow [_x, true] } foreach _leader_controls;
- } else {
- { ctrlEnable [_x, true] } foreach _allbuttons;
- { ctrlShow [_x, false] } foreach (_rename_controls + _leader_controls);
- ctrlEnable [513,(leader (group player) == player)];
- ctrlEnable [514,(leader (group player) == player)];
- };
- };
-
- if ( GREUH_allow_platoonview ) then { ctrlShow [612, show_platoon]; };
- if ( GREUH_allow_mapmarkers ) then { ctrlShow [912, show_teammates]; };
- ctrlShow [ 962, show_nametags ];
-
- if ( GREUH_allow_customsquads ) then {
- lbClear 515;
- {
- _brakets = "";
- if ( _x == group player ) then { _brakets = ">> "; };
- lbAdd [515, format [ "%4%1 - %2 (%3)",groupId _x, name leader _x, count units _x,_brakets ]];
- } foreach groups_list;
- };
-
- if ( GREUH_allow_viewdistance ) then {
- ctrlSetText [713, format [ '%1m' ,round desiredviewdistance_inf]];
- ctrlSetText [723, format [ '%1m' ,round desiredviewdistance_veh]];
- ctrlSetText [733, format [ '%1m' ,round ((desiredviewdistance_obj / 100.0) * desiredviewdistance_inf) ]];
- };
-
- ctrlSetText [ 1103, format [ "%1%2", round (desired_vehvolume), "%" ] ];
-
- desired_fps = parseNumber (ctrlText 960);
-
- uiSleep 0.2;
+ if ( renaming ) then {
+ { ctrlEnable [_x, false] } foreach (_allbuttons);
+ { ctrlShow [_x, true] } foreach _rename_controls;
+ { ctrlShow [_x, false] } foreach _leader_controls;
+ } else {
+ if ( choosingleader ) then {
+ { ctrlEnable [_x, false] } foreach _allbuttons;
+ { ctrlShow [_x, false] } foreach _rename_controls;
+ { ctrlShow [_x, true] } foreach _leader_controls;
+ } else {
+ { ctrlEnable [_x, true] } foreach _allbuttons;
+ { ctrlShow [_x, false] } foreach (_rename_controls + _leader_controls);
+ ctrlEnable [513,(leader (group player) == player)];
+ ctrlEnable [514,(leader (group player) == player)];
+ };
+ };
+
+ if ( GREUH_allow_platoonview ) then { ctrlShow [612, show_platoon]; };
+ if ( GREUH_allow_mapmarkers ) then { ctrlShow [912, show_teammates]; };
+ ctrlShow [ 962, show_nametags ];
+
+ if ( GREUH_allow_customsquads ) then {
+ lbClear 515;
+ {
+ _brakets = "";
+ if ( _x == group player ) then { _brakets = ">> "; };
+ lbAdd [515, format [ "%4%1 - %2 (%3)",groupId _x, name leader _x, count units _x,_brakets ]];
+ } foreach groups_list;
+ };
+
+ if ( GREUH_allow_viewdistance ) then {
+ ctrlSetText [713, format [ '%1m' ,round desiredviewdistance_inf]];
+ ctrlSetText [723, format [ '%1m' ,round desiredviewdistance_veh]];
+ ctrlSetText [733, format [ '%1m' ,round ((desiredviewdistance_obj / 100.0) * desiredviewdistance_inf) ]];
+ };
+
+ ctrlSetText [ 1103, format [ "%1%2", round (desired_vehvolume), "%" ] ];
+
+ desired_fps = parseNumber (ctrlText 960);
+
+ uiSleep 0.2;
};
if (!alive player) then { closeDialog 0 };
diff --git a/Missionframework/GREUH/Scripts/GREUH_dynamic_view_distance.sqf b/Missionframework/GREUH/Scripts/GREUH_dynamic_view_distance.sqf
index 9b61f6b51..b5218a05c 100644
--- a/Missionframework/GREUH/Scripts/GREUH_dynamic_view_distance.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_dynamic_view_distance.sqf
@@ -10,35 +10,35 @@ private _smoothing_margin = 0.1;
while { true } do {
- _corrected_increment = _base_increment * GREUH_view_distance_factor;
+ _corrected_increment = _base_increment * GREUH_view_distance_factor;
- if ( (diag_fps * ( 1 - _smoothing_margin )) < desired_fps ) then {
- _consecutive_fps_too_low = _consecutive_fps_too_low + 1;
- _consecutive_fps_too_fast = 0;
- };
+ if ( (diag_fps * ( 1 - _smoothing_margin )) < desired_fps ) then {
+ _consecutive_fps_too_low = _consecutive_fps_too_low + 1;
+ _consecutive_fps_too_fast = 0;
+ };
- if ( (diag_fps * ( 1 + _smoothing_margin )) > desired_fps ) then {
- _consecutive_fps_too_fast = _consecutive_fps_too_fast + 1;
- _consecutive_fps_too_low = 0;
- };
+ if ( (diag_fps * ( 1 + _smoothing_margin )) > desired_fps ) then {
+ _consecutive_fps_too_fast = _consecutive_fps_too_fast + 1;
+ _consecutive_fps_too_low = 0;
+ };
- if ( GREUH_view_distance_factor > _min_view_distance_factor && _consecutive_fps_too_low >= _consecutive_before_adjust ) then {
- _consecutive_fps_too_low = 0;
- GREUH_view_distance_factor = GREUH_view_distance_factor - _corrected_increment;
- if ( GREUH_view_distance_factor < _min_view_distance_factor ) then {
- GREUH_view_distance_factor = _min_view_distance_factor;
- };
- GREUH_force_adjust_view_distance = true;
- };
+ if ( GREUH_view_distance_factor > _min_view_distance_factor && _consecutive_fps_too_low >= _consecutive_before_adjust ) then {
+ _consecutive_fps_too_low = 0;
+ GREUH_view_distance_factor = GREUH_view_distance_factor - _corrected_increment;
+ if ( GREUH_view_distance_factor < _min_view_distance_factor ) then {
+ GREUH_view_distance_factor = _min_view_distance_factor;
+ };
+ GREUH_force_adjust_view_distance = true;
+ };
- if ( GREUH_view_distance_factor < 1.0 && _consecutive_fps_too_fast >= _consecutive_before_adjust ) then {
- _consecutive_fps_too_fast = 0;
- GREUH_view_distance_factor = GREUH_view_distance_factor + _corrected_increment;
- if ( GREUH_view_distance_factor > 1.0 ) then {
- GREUH_view_distance_factor = 1.0;
- };
- GREUH_force_adjust_view_distance = true;
- };
+ if ( GREUH_view_distance_factor < 1.0 && _consecutive_fps_too_fast >= _consecutive_before_adjust ) then {
+ _consecutive_fps_too_fast = 0;
+ GREUH_view_distance_factor = GREUH_view_distance_factor + _corrected_increment;
+ if ( GREUH_view_distance_factor > 1.0 ) then {
+ GREUH_view_distance_factor = 1.0;
+ };
+ GREUH_force_adjust_view_distance = true;
+ };
- sleep 0.75;
+ sleep 0.75;
};
\ No newline at end of file
diff --git a/Missionframework/GREUH/Scripts/GREUH_platoonoverlay.sqf b/Missionframework/GREUH/Scripts/GREUH_platoonoverlay.sqf
index 0f12e687d..e2a8f3798 100644
--- a/Missionframework/GREUH/Scripts/GREUH_platoonoverlay.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_platoonoverlay.sqf
@@ -15,125 +15,125 @@ waitUntil { !isNil "KPLIB_nametag_units" };
["platoon_overlay", "onEachFrame", {
- if ( show_platoon ) then {
-
- {
- if ( count units _x > 0 ) then {
- _totalx = 0;
- _totaly = 0;
- _totalz = 0;
- _grouppos = [];
- _unitstocount = [];
- {
- if ( _x distance (leader group _x) < 300) then {
- _unitstocount pushback _x;
- _totalx = _totalx + (getpos _x select 0);
- _totaly = _totaly + (getpos _x select 1);
- _totalz = _totalz + (getpos _x select 2);
- };
- } foreach units _x;
-
- if ( count _unitstocount > 0 ) then {
- _totalx = _totalx / (count _unitstocount);
- _totaly = _totaly / (count _unitstocount);
- _totalz = _totalz / (count _unitstocount);
- };
-
- if ( _totalz > 2.1 ) then {
- _grouppos = [_totalx, _totaly, _totalz + 10];
- } else {
- _grouppos = [_totalx, _totaly, 2.1];
- };
- _alpha = 0.5;
- _textalpha = 0;
- _size = 0.8;
-
- _screenpos = worldToScreen _grouppos;
-
- if (count _screenpos != 0) then {
- if ( (abs (((worldToScreen _grouppos) select 0) - 0.5) < 0.06) && (abs (((worldToScreen _grouppos) select 1) - 0.5) < 0.08)) then {
- _alpha = 1;
- _textalpha = 1;
- _size = 1;
- };
- };
-
- _dist = player distance _grouppos;
- _distlabel = "";
- if ( _dist > 200 ) then {
- if ( _dist >= 1000 ) then {
- _distlabel = format [" (%1km)", floor (_dist / 1000)];
- } else {
- _distlabel = format [" (%1m)", (floor (_dist / 100)) * 100];
- };
- };
-
- _color = [0.8,1,0.2,_alpha];
- if ( _x == group player) then { _color = [1,0.9,0.3,_alpha] };
- drawIcon3D [platoon_icon1, _color, _grouppos, _size / 2, _size / 2,0, format ["%1 - %2%3",groupID _x, name (leader _x),_distlabel], 2, 0.03 * _textalpha, "puristaMedium"];
- drawIcon3D [platoon_icon2, _color, _grouppos, _size, _size,0, "", 2, 0.04, "puristaMedium"];
- };
- } foreach KPLIB_overlay_groups;
- };
-
- if ( show_nametags ) then {
- {
- _nextunit = _x;
-
- private _local_nametags_distance = nametags_distance;
- if( _nextunit == leader group player ) then {
- _local_nametags_distance = nametags_distance * 3;
- };
- _alpha = 1;
- if ( _nextunit distance player > (_local_nametags_distance / 2) ) then {
- _alpha = 1 - ((((_nextunit distance player) - (_local_nametags_distance / 2)) * 2) / _local_nametags_distance);
- };
-
- _color = [];
- if ( _nextunit in (units group player)) then {
-
- switch ( _nextunit getVariable [ "KPLIB_squad_color", "MAIN" ] ) do {
- case "BLUE" : { _color = [0.15,0.35,1.0,_alpha] };
- case "RED" : { _color = [0.8,0,0,_alpha] };
- case "YELLOW" : { _color = [0.85,0.85,0,_alpha] };
- case "GREEN" : { _color = [0,0.75,0,_alpha] };
- default { _color = [0.9,0.9,0.9,_alpha] };
- };
-
- } else {
- _color = [0.92,0.7,0.25,_alpha];
- };
-
- _drawicon = soldier_icon;
- if ( _nextunit getVariable [ "FAR_isUnconscious", 0 ] == 1 ) then {
- _drawicon = wounded_icon;
- } else {
- if ( _nextunit == [] call KPLIB_fnc_getCommander ) then {
- _drawicon = commander_icon;
- } else {
- if ( _nextunit == (leader group _nextunit) && (count (units group _nextunit) > 1 ) ) then {
- _drawicon = group_leader_icon;
- } else {
- if ( ( isFormationLeader _nextunit ) && ( count formationMembers _nextunit > 1 ) ) then {
- _drawicon = formation_leader_icon;
- };
- };
- };
- };
-
- _displayname = "";
- if(count (squadParams _nextunit) != 0) then {
- _displayname = "[" + ((squadParams _nextunit select 0) select 0) + "] ";
- };
- _displayname = _displayname + ( name _nextunit );
-
- _height = 2 + ((player distance _nextunit) / (0.75 * _local_nametags_distance));
-
- _iconpos = [ getPosATL _nextunit select 0, getPosATL _nextunit select 1, (getPosATL _nextunit select 2) + _height ];
-
- drawIcon3D [ _drawicon, _color, _iconpos , 0.75, 0.75,0, format [ "%1", _displayname] , 2, 0.032, "puristaMedium"];
-
- } foreach KPLIB_nametag_units;
- };
+ if ( show_platoon ) then {
+
+ {
+ if ( count units _x > 0 ) then {
+ _totalx = 0;
+ _totaly = 0;
+ _totalz = 0;
+ _grouppos = [];
+ _unitstocount = [];
+ {
+ if ( _x distance (leader group _x) < 300) then {
+ _unitstocount pushback _x;
+ _totalx = _totalx + (getpos _x select 0);
+ _totaly = _totaly + (getpos _x select 1);
+ _totalz = _totalz + (getpos _x select 2);
+ };
+ } foreach units _x;
+
+ if ( count _unitstocount > 0 ) then {
+ _totalx = _totalx / (count _unitstocount);
+ _totaly = _totaly / (count _unitstocount);
+ _totalz = _totalz / (count _unitstocount);
+ };
+
+ if ( _totalz > 2.1 ) then {
+ _grouppos = [_totalx, _totaly, _totalz + 10];
+ } else {
+ _grouppos = [_totalx, _totaly, 2.1];
+ };
+ _alpha = 0.5;
+ _textalpha = 0;
+ _size = 0.8;
+
+ _screenpos = worldToScreen _grouppos;
+
+ if (count _screenpos != 0) then {
+ if ( (abs (((worldToScreen _grouppos) select 0) - 0.5) < 0.06) && (abs (((worldToScreen _grouppos) select 1) - 0.5) < 0.08)) then {
+ _alpha = 1;
+ _textalpha = 1;
+ _size = 1;
+ };
+ };
+
+ _dist = player distance _grouppos;
+ _distlabel = "";
+ if ( _dist > 200 ) then {
+ if ( _dist >= 1000 ) then {
+ _distlabel = format [" (%1km)", floor (_dist / 1000)];
+ } else {
+ _distlabel = format [" (%1m)", (floor (_dist / 100)) * 100];
+ };
+ };
+
+ _color = [0.8,1,0.2,_alpha];
+ if ( _x == group player) then { _color = [1,0.9,0.3,_alpha] };
+ drawIcon3D [platoon_icon1, _color, _grouppos, _size / 2, _size / 2,0, format ["%1 - %2%3",groupID _x, name (leader _x),_distlabel], 2, 0.03 * _textalpha, "puristaMedium"];
+ drawIcon3D [platoon_icon2, _color, _grouppos, _size, _size,0, "", 2, 0.04, "puristaMedium"];
+ };
+ } foreach KPLIB_overlay_groups;
+ };
+
+ if ( show_nametags ) then {
+ {
+ _nextunit = _x;
+
+ private _local_nametags_distance = nametags_distance;
+ if( _nextunit == leader group player ) then {
+ _local_nametags_distance = nametags_distance * 3;
+ };
+ _alpha = 1;
+ if ( _nextunit distance player > (_local_nametags_distance / 2) ) then {
+ _alpha = 1 - ((((_nextunit distance player) - (_local_nametags_distance / 2)) * 2) / _local_nametags_distance);
+ };
+
+ _color = [];
+ if ( _nextunit in (units group player)) then {
+
+ switch ( _nextunit getVariable [ "KPLIB_squad_color", "MAIN" ] ) do {
+ case "BLUE" : { _color = [0.15,0.35,1.0,_alpha] };
+ case "RED" : { _color = [0.8,0,0,_alpha] };
+ case "YELLOW" : { _color = [0.85,0.85,0,_alpha] };
+ case "GREEN" : { _color = [0,0.75,0,_alpha] };
+ default { _color = [0.9,0.9,0.9,_alpha] };
+ };
+
+ } else {
+ _color = [0.92,0.7,0.25,_alpha];
+ };
+
+ _drawicon = soldier_icon;
+ if ( _nextunit getVariable [ "FAR_isUnconscious", 0 ] == 1 ) then {
+ _drawicon = wounded_icon;
+ } else {
+ if ( _nextunit == [] call KPLIB_fnc_getCommander ) then {
+ _drawicon = commander_icon;
+ } else {
+ if ( _nextunit == (leader group _nextunit) && (count (units group _nextunit) > 1 ) ) then {
+ _drawicon = group_leader_icon;
+ } else {
+ if ( ( isFormationLeader _nextunit ) && ( count formationMembers _nextunit > 1 ) ) then {
+ _drawicon = formation_leader_icon;
+ };
+ };
+ };
+ };
+
+ _displayname = "";
+ if(count (squadParams _nextunit) != 0) then {
+ _displayname = "[" + ((squadParams _nextunit select 0) select 0) + "] ";
+ };
+ _displayname = _displayname + ( name _nextunit );
+
+ _height = 2 + ((player distance _nextunit) / (0.75 * _local_nametags_distance));
+
+ _iconpos = [ getPosATL _nextunit select 0, getPosATL _nextunit select 1, (getPosATL _nextunit select 2) + _height ];
+
+ drawIcon3D [ _drawicon, _color, _iconpos , 0.75, 0.75,0, format [ "%1", _displayname] , 2, 0.032, "puristaMedium"];
+
+ } foreach KPLIB_nametag_units;
+ };
}] call BIS_fnc_addStackedEventHandler;
diff --git a/Missionframework/GREUH/Scripts/GREUH_playermarkers.sqf b/Missionframework/GREUH/Scripts/GREUH_playermarkers.sqf
index 118469107..05aa0c6e8 100644
--- a/Missionframework/GREUH/Scripts/GREUH_playermarkers.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_playermarkers.sqf
@@ -7,184 +7,184 @@ private _ticks = 0;
private _cfg = configFile >> "cfgVehicles";
if ( side player == KPLIB_side_player ) then {
- _color = KPLIB_color_player;
+ _color = KPLIB_color_player;
} else {
- _color = KPLIB_color_enemy;
+ _color = KPLIB_color_enemy;
};
while { true } do {
- waitUntil { sleep 0.2; show_teammates };
- while { show_teammates } do {
-
- if ( _ticks == 0 ) then {
-
- {
- private _nextmarker = _x select 0;
- private _nextobj = _x select 1;
- if ( (isNull _nextobj) || !(alive _nextobj) ) then {
- deleteMarkerLocal _nextmarker;
- };
- } foreach _marker_objs;
-
- private _playableunits = [];
- if ( count playableUnits > 0 ) then {
- _playableunits = [ playableUnits, { (side (group _x)) == (side (group player)) } ] call BIS_fnc_conditionalSelect;
- } else {
- _playableunits = [ player ];
- };
-
- {
- if ( vehicle _x == _x ) then {
- _marked_players pushbackUnique _x;
- } else {
- _marked_vehicles pushbackUnique (vehicle _x);
- };
- } foreach _playableunits;
-
- {
- if ( alive _x && !(isPlayer _x) ) then {
- if ( vehicle _x == _x ) then {
- _marked_squadmates pushbackUnique _x;
- } else {
- _marked_vehicles pushbackUnique (vehicle _x);
- };
- };
- } foreach (units (group player));
-
- private _stuff_to_unmark = [];
- {
- if ( (vehicle _x != _x) || !(alive _x) ) then {
- _stuff_to_unmark pushback _x;
- _marked_players = _marked_players - [_x];
- };
- } foreach _marked_players;
-
- {
- if ( (vehicle _x != _x) || !(alive _x) ) then {
- _stuff_to_unmark pushback _x;
- _marked_squadmates = _marked_squadmates - [_x];
- };
- } foreach _marked_squadmates;
-
- {
- if ( (count (crew _x) == 0) || !(alive _x) ) then {
- _stuff_to_unmark pushback _x;
- _marked_vehicles = _marked_vehicles - [_x];
- };
- } foreach _marked_vehicles;
-
- {
- private _nextmarker = _x getVariable [ "spotmarker", "" ];
- if ( _nextmarker != "" ) then {
- deleteMarkerLocal _nextmarker;
- _x setVariable [ "spotmarker", "" ];
- };
- } foreach _stuff_to_unmark;
-
- {
- private _nextplayer = _x;
- private _marker = _nextplayer getVariable [ "spotmarker", "" ];
- if ( _marker == "" ) then {
- _marker = ( createMarkerLocal [ format [ "playermarker%1", (allUnits find _x) * (time % 1000) * (floor (random 100)) ], getpos _nextplayer ] );
- _marker_objs pushback [ _marker, _nextplayer ];
- _nextplayer setVariable [ "spotmarker", _marker ];
-
- private _playername = "";
- if( count (squadParams _nextplayer) != 0 ) then {
- _playername = "[" + ((squadParams _nextplayer select 0) select 0) + "] ";
- };
- _playername = _playername + (name _nextplayer);
- _marker setMarkerTextLocal _playername;
-
- _marker setMarkerSizeLocal [ 0.75, 0.75 ];
- _marker setMarkerColorLocal _color;
- };
-
- private _markertype = "mil_start";
- if ( _nextplayer getVariable [ "FAR_isUnconscious", 0 ] == 1 ) then {
- _markertype = "MinefieldAP";
- };
- _marker setMarkerTypeLocal _markertype;
- } foreach _marked_players;
-
- {
- private _nextai = _x;
- private _marker = _nextai getVariable [ "spotmarker", "" ];
-
- if ( _marker == "" ) then {
- _marker = ( createMarkerLocal [ format [ "squadaimarker%1", (allUnits find _x) * (time % 1000) * (floor (random 10000)) ], getpos _nextai ] );
- _marker_objs pushback [ _marker, _nextai ];
- _nextai setVariable [ "spotmarker", _marker ];
- _marker setMarkerTypeLocal "mil_triangle";
- _marker setMarkerSizeLocal [ 0.6, 0.6 ];
- _marker setMarkerColorLocal _color;
- };
-
- _marker setMarkerTextLocal format [ "%1", ( [ _nextai ] call KPLIB_fnc_getUnitPositionId )];
- } foreach _marked_squadmates;
-
- {
- private _nextvehicle = _x;
- private _marker = _nextvehicle getVariable [ "spotmarker", "" ];
- if ( _marker == "" ) then {
- _marker = ( createMarkerLocal [ format [ "vehiclemarker%1", (vehicles find _x) * (time % 1000) * (floor (random 10000)) ], getpos _nextvehicle ] );
- _marker_objs pushback [ _marker, _nextvehicle ];
- _nextvehicle setVariable [ "spotmarker", _marker ];
- _marker setMarkerTypeLocal "mil_arrow2";
- _marker setMarkerSizeLocal [0.75,0.75];
- _marker setMarkerColorLocal _color;
- };
-
- private _datcrew = crew _nextvehicle;
- private _vehiclename = "";
- {
- if (isPlayer _x) then {
- _vehiclename = _vehiclename + (name _x);
- } else {
- _vehiclename = _vehiclename + ( format [ "%1", [ _x ] call KPLIB_fnc_getUnitPositionId ] );
- };
-
- if( (_datcrew find _x) != ((count _datcrew) - 1) ) then {
- _vehiclename = _vehiclename + ",";
- };
- _vehiclename = _vehiclename + " ";
- } foreach _datcrew;
-
- _vehiclename = _vehiclename + "(" + getText (_cfg >> typeOf _nextvehicle >> "displayName") + ")";
- _marker setMarkerTextLocal _vehiclename;
- } foreach _marked_vehicles;
- };
-
- private _markerunits = [] + _marked_players + _marked_squadmates + _marked_vehicles;
- {
- private _nextunit = _x;
- private _marker = _nextunit getVariable [ "spotmarker", "" ];
- if ( _marker != "" ) then {
- _marker setMarkerPosLocal (getPos _nextunit);
- private _mrkdir = getDir _nextunit;
- if ( isPlayer _nextunit ) then {
- if ( _nextunit getVariable [ "FAR_isUnconscious", 0 ] == 1 ) then {
- _mrkdir = 0;
- };
- };
- _marker setMarkerDirLocal _mrkdir;
- };
- } foreach _markerunits;
-
- _ticks = _ticks + 1;
-
- if ( _ticks > 10 ) then {
- _ticks = 0;
- };
- sleep 0.1;
- };
-
- {
- private _nextunit = _x;
- private _marker = _nextunit getVariable [ "spotmarker", "" ];
- if ( _marker != "" ) then {
- deleteMarkerLocal _marker;
- _nextunit setVariable [ "spotmarker", "" ];
- };
- } forEach (allUnits + vehicles);
+ waitUntil { sleep 0.2; show_teammates };
+ while { show_teammates } do {
+
+ if ( _ticks == 0 ) then {
+
+ {
+ private _nextmarker = _x select 0;
+ private _nextobj = _x select 1;
+ if ( (isNull _nextobj) || !(alive _nextobj) ) then {
+ deleteMarkerLocal _nextmarker;
+ };
+ } foreach _marker_objs;
+
+ private _playableunits = [];
+ if ( count playableUnits > 0 ) then {
+ _playableunits = [ playableUnits, { (side (group _x)) == (side (group player)) } ] call BIS_fnc_conditionalSelect;
+ } else {
+ _playableunits = [ player ];
+ };
+
+ {
+ if ( vehicle _x == _x ) then {
+ _marked_players pushbackUnique _x;
+ } else {
+ _marked_vehicles pushbackUnique (vehicle _x);
+ };
+ } foreach _playableunits;
+
+ {
+ if ( alive _x && !(isPlayer _x) ) then {
+ if ( vehicle _x == _x ) then {
+ _marked_squadmates pushbackUnique _x;
+ } else {
+ _marked_vehicles pushbackUnique (vehicle _x);
+ };
+ };
+ } foreach (units (group player));
+
+ private _stuff_to_unmark = [];
+ {
+ if ( (vehicle _x != _x) || !(alive _x) ) then {
+ _stuff_to_unmark pushback _x;
+ _marked_players = _marked_players - [_x];
+ };
+ } foreach _marked_players;
+
+ {
+ if ( (vehicle _x != _x) || !(alive _x) ) then {
+ _stuff_to_unmark pushback _x;
+ _marked_squadmates = _marked_squadmates - [_x];
+ };
+ } foreach _marked_squadmates;
+
+ {
+ if ( (count (crew _x) == 0) || !(alive _x) ) then {
+ _stuff_to_unmark pushback _x;
+ _marked_vehicles = _marked_vehicles - [_x];
+ };
+ } foreach _marked_vehicles;
+
+ {
+ private _nextmarker = _x getVariable [ "spotmarker", "" ];
+ if ( _nextmarker != "" ) then {
+ deleteMarkerLocal _nextmarker;
+ _x setVariable [ "spotmarker", "" ];
+ };
+ } foreach _stuff_to_unmark;
+
+ {
+ private _nextplayer = _x;
+ private _marker = _nextplayer getVariable [ "spotmarker", "" ];
+ if ( _marker == "" ) then {
+ _marker = ( createMarkerLocal [ format [ "playermarker%1", (allUnits find _x) * (time % 1000) * (floor (random 100)) ], getpos _nextplayer ] );
+ _marker_objs pushback [ _marker, _nextplayer ];
+ _nextplayer setVariable [ "spotmarker", _marker ];
+
+ private _playername = "";
+ if( count (squadParams _nextplayer) != 0 ) then {
+ _playername = "[" + ((squadParams _nextplayer select 0) select 0) + "] ";
+ };
+ _playername = _playername + (name _nextplayer);
+ _marker setMarkerTextLocal _playername;
+
+ _marker setMarkerSizeLocal [ 0.75, 0.75 ];
+ _marker setMarkerColorLocal _color;
+ };
+
+ private _markertype = "mil_start";
+ if ( _nextplayer getVariable [ "FAR_isUnconscious", 0 ] == 1 ) then {
+ _markertype = "MinefieldAP";
+ };
+ _marker setMarkerTypeLocal _markertype;
+ } foreach _marked_players;
+
+ {
+ private _nextai = _x;
+ private _marker = _nextai getVariable [ "spotmarker", "" ];
+
+ if ( _marker == "" ) then {
+ _marker = ( createMarkerLocal [ format [ "squadaimarker%1", (allUnits find _x) * (time % 1000) * (floor (random 10000)) ], getpos _nextai ] );
+ _marker_objs pushback [ _marker, _nextai ];
+ _nextai setVariable [ "spotmarker", _marker ];
+ _marker setMarkerTypeLocal "mil_triangle";
+ _marker setMarkerSizeLocal [ 0.6, 0.6 ];
+ _marker setMarkerColorLocal _color;
+ };
+
+ _marker setMarkerTextLocal format [ "%1", ( [ _nextai ] call KPLIB_fnc_getUnitPositionId )];
+ } foreach _marked_squadmates;
+
+ {
+ private _nextvehicle = _x;
+ private _marker = _nextvehicle getVariable [ "spotmarker", "" ];
+ if ( _marker == "" ) then {
+ _marker = ( createMarkerLocal [ format [ "vehiclemarker%1", (vehicles find _x) * (time % 1000) * (floor (random 10000)) ], getpos _nextvehicle ] );
+ _marker_objs pushback [ _marker, _nextvehicle ];
+ _nextvehicle setVariable [ "spotmarker", _marker ];
+ _marker setMarkerTypeLocal "mil_arrow2";
+ _marker setMarkerSizeLocal [0.75,0.75];
+ _marker setMarkerColorLocal _color;
+ };
+
+ private _datcrew = crew _nextvehicle;
+ private _vehiclename = "";
+ {
+ if (isPlayer _x) then {
+ _vehiclename = _vehiclename + (name _x);
+ } else {
+ _vehiclename = _vehiclename + ( format [ "%1", [ _x ] call KPLIB_fnc_getUnitPositionId ] );
+ };
+
+ if( (_datcrew find _x) != ((count _datcrew) - 1) ) then {
+ _vehiclename = _vehiclename + ",";
+ };
+ _vehiclename = _vehiclename + " ";
+ } foreach _datcrew;
+
+ _vehiclename = _vehiclename + "(" + getText (_cfg >> typeOf _nextvehicle >> "displayName") + ")";
+ _marker setMarkerTextLocal _vehiclename;
+ } foreach _marked_vehicles;
+ };
+
+ private _markerunits = [] + _marked_players + _marked_squadmates + _marked_vehicles;
+ {
+ private _nextunit = _x;
+ private _marker = _nextunit getVariable [ "spotmarker", "" ];
+ if ( _marker != "" ) then {
+ _marker setMarkerPosLocal (getPos _nextunit);
+ private _mrkdir = getDir _nextunit;
+ if ( isPlayer _nextunit ) then {
+ if ( _nextunit getVariable [ "FAR_isUnconscious", 0 ] == 1 ) then {
+ _mrkdir = 0;
+ };
+ };
+ _marker setMarkerDirLocal _mrkdir;
+ };
+ } foreach _markerunits;
+
+ _ticks = _ticks + 1;
+
+ if ( _ticks > 10 ) then {
+ _ticks = 0;
+ };
+ sleep 0.1;
+ };
+
+ {
+ private _nextunit = _x;
+ private _marker = _nextunit getVariable [ "spotmarker", "" ];
+ if ( _marker != "" ) then {
+ deleteMarkerLocal _marker;
+ _nextunit setVariable [ "spotmarker", "" ];
+ };
+ } forEach (allUnits + vehicles);
};
diff --git a/Missionframework/GREUH/Scripts/GREUH_squadmanagement.sqf b/Missionframework/GREUH/Scripts/GREUH_squadmanagement.sqf
index b13947b27..2df0588ef 100644
--- a/Missionframework/GREUH/Scripts/GREUH_squadmanagement.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_squadmanagement.sqf
@@ -8,98 +8,98 @@ global_new_leader = [];
while { true } do {
- if ( squadaction != "" ) then {
- _grp = grpNull;
- switch (squadaction) do {
- case "create" : {
- _grp = createGroup [(side player), true];
- [player] join _grp;
- hint "New squad created";
- };
- case "join" : {
- if(lbCurSel 515 != -1) then { _grp = groups_list select (lbCurSel 515); };
- if (!(isNull _grp) && (_grp != group player)) then {
- [player] join _grp;
- hint "Squad joined";
- };
- };
- case "rename" : {
- if ( leader group player == player ) then {
- renaming = true;
- ctrlSetText [527, (groupid (group player))];
- waitUntil { ((squadaction == "") || (squadname != "") || !(dialog) || !(alive player)) };
- if ( alive player && dialog && ( squadname != "" )) then {
- if ( (group player) in global_groups_renamed ) then {
- global_group_ids set [global_groups_renamed find (group player),squadname];
- } else {
- global_group_ids = global_group_ids + [squadname];
- global_groups_renamed = global_groups_renamed + [group player];
- };
- publicVariable "global_group_ids";
- publicVariable "global_groups_renamed";
- };
- squadname = "";
- renaming = false;
- } else {
- hint "Sorry, only the squad leader can rename their squad.";
- };
- };
- case "leader" : {
- if ( leader group player == player ) then {
- choosingleader = true;
- choose_squadleader = -10;
+ if ( squadaction != "" ) then {
+ _grp = grpNull;
+ switch (squadaction) do {
+ case "create" : {
+ _grp = createGroup [(side player), true];
+ [player] join _grp;
+ hint "New squad created";
+ };
+ case "join" : {
+ if(lbCurSel 515 != -1) then { _grp = groups_list select (lbCurSel 515); };
+ if (!(isNull _grp) && (_grp != group player)) then {
+ [player] join _grp;
+ hint "Squad joined";
+ };
+ };
+ case "rename" : {
+ if ( leader group player == player ) then {
+ renaming = true;
+ ctrlSetText [527, (groupid (group player))];
+ waitUntil { ((squadaction == "") || (squadname != "") || !(dialog) || !(alive player)) };
+ if ( alive player && dialog && ( squadname != "" )) then {
+ if ( (group player) in global_groups_renamed ) then {
+ global_group_ids set [global_groups_renamed find (group player),squadname];
+ } else {
+ global_group_ids = global_group_ids + [squadname];
+ global_groups_renamed = global_groups_renamed + [group player];
+ };
+ publicVariable "global_group_ids";
+ publicVariable "global_groups_renamed";
+ };
+ squadname = "";
+ renaming = false;
+ } else {
+ hint "Sorry, only the squad leader can rename their squad.";
+ };
+ };
+ case "leader" : {
+ if ( leader group player == player ) then {
+ choosingleader = true;
+ choose_squadleader = -10;
- _player_group_filtered = [];
- {
- if ( isPlayer _x ) then {
- _player_group_filtered = _player_group_filtered + [_x];
- };
- } foreach (units group player);
+ _player_group_filtered = [];
+ {
+ if ( isPlayer _x ) then {
+ _player_group_filtered = _player_group_filtered + [_x];
+ };
+ } foreach (units group player);
- lbClear 567;
- {
+ lbClear 567;
+ {
- lbAdd [567, name _x ];
- } foreach _player_group_filtered;
+ lbAdd [567, name _x ];
+ } foreach _player_group_filtered;
- _count_units_grp_player = count (units group player);
- waitUntil { ((squadaction == "") || (choose_squadleader >= 0) || !(dialog) || !(alive player) || (_count_units_grp_player != count (units group player))) };
- if ( alive player && dialog && ( choose_squadleader >= 0 )) then {
- global_new_leader = [group player, _player_group_filtered select choose_squadleader];
- publicVariable "global_new_leader";
- };
- choose_squadleader = -10;
- choosingleader = false;
- } else {
- hint "Sorry, only the squad leader can choose a new leader.";
- };
- };
- };
- squadaction = "";
- };
+ _count_units_grp_player = count (units group player);
+ waitUntil { ((squadaction == "") || (choose_squadleader >= 0) || !(dialog) || !(alive player) || (_count_units_grp_player != count (units group player))) };
+ if ( alive player && dialog && ( choose_squadleader >= 0 )) then {
+ global_new_leader = [group player, _player_group_filtered select choose_squadleader];
+ publicVariable "global_new_leader";
+ };
+ choose_squadleader = -10;
+ choosingleader = false;
+ } else {
+ hint "Sorry, only the squad leader can choose a new leader.";
+ };
+ };
+ };
+ squadaction = "";
+ };
- { if ( (isplayer leader _x) && (side _x == side player) && !(_x in groups_list)) then { groups_list = groups_list + [_x] }; } foreach allGroups;
- { if (!(_x in allGroups) || (!isplayer leader _x)) then { groups_list = groups_list - [_x] }; } foreach groups_list;
+ { if ( (isplayer leader _x) && (side _x == side player) && !(_x in groups_list)) then { groups_list = groups_list + [_x] }; } foreach allGroups;
+ { if (!(_x in allGroups) || (!isplayer leader _x)) then { groups_list = groups_list - [_x] }; } foreach groups_list;
- {
- if (count global_groups_renamed != 0) then {
- if (_x in global_groups_renamed) then {
- if (groupid _x != global_group_ids select (global_groups_renamed find _x)) then {
- _x setgroupid [(global_group_ids select (global_groups_renamed find _x))];
- };
- };
- };
- } foreach groups_list;
+ {
+ if (count global_groups_renamed != 0) then {
+ if (_x in global_groups_renamed) then {
+ if (groupid _x != global_group_ids select (global_groups_renamed find _x)) then {
+ _x setgroupid [(global_group_ids select (global_groups_renamed find _x))];
+ };
+ };
+ };
+ } foreach groups_list;
- if ( count global_new_leader != 0 ) then {
- if ( group player == global_new_leader select 0 ) then {
- (global_new_leader select 0) selectLeader (global_new_leader select 1);
- hint format ["%1 is your new squad leader.",name (global_new_leader select 1)];
- global_new_leader = [];
- };
- };
+ if ( count global_new_leader != 0 ) then {
+ if ( group player == global_new_leader select 0 ) then {
+ (global_new_leader select 0) selectLeader (global_new_leader select 1);
+ hint format ["%1 is your new squad leader.",name (global_new_leader select 1)];
+ global_new_leader = [];
+ };
+ };
- sleep 0.5;
+ sleep 0.5;
};
diff --git a/Missionframework/GREUH/Scripts/GREUH_view_distance_management.sqf b/Missionframework/GREUH/Scripts/GREUH_view_distance_management.sqf
index 001ba05ba..9efa18cc0 100644
--- a/Missionframework/GREUH/Scripts/GREUH_view_distance_management.sqf
+++ b/Missionframework/GREUH/Scripts/GREUH_view_distance_management.sqf
@@ -13,46 +13,46 @@ waitUntil { !isNil "GREUH_view_distance_factor" };
waitUntil { !isNil "GREUH_force_adjust_view_distance" };
while { true } do {
- waitUntil { sleep 0.3;
- (round _olddistance_inf != round desiredviewdistance_inf)
- || (round _olddistance_veh != round desiredviewdistance_veh)
- || (round _olddistance_obj != round desiredviewdistance_obj)
- || ( (( vehicle player == player ) && _was_vehicle)
- || (( vehicle player != player ) && !_was_vehicle) )
- || !(alive player)
- || ( round _olddesiredvolume != round desired_vehvolume)
- || GREUH_force_adjust_view_distance };
- waitUntil { alive player };
- GREUH_force_adjust_view_distance = false;
- _olddistance_inf = round desiredviewdistance_inf;
- _olddistance_veh = round desiredviewdistance_veh;
- _olddistance_obj = round desiredviewdistance_obj;
- _olddesiredvolume = desired_vehvolume;
- _was_vehicle = ( vehicle player != player );
-
- if ( _was_vehicle ) then {
-
- _desired_veh = (round desiredviewdistance_veh) * GREUH_view_distance_factor;
- if ( _desired_veh < _min_view_distance ) then {
- _desired_veh = _min_view_distance;
- };
- setViewDistance _desired_veh;
-
- 1 fadeSound ( desired_vehvolume / 100.0 );
- } else {
-
- _desired_inf = (round desiredviewdistance_inf) * GREUH_view_distance_factor;
- if ( _desired_inf < _min_view_distance ) then {
- _desired_inf = _min_view_distance;
- };
- setViewDistance _desired_inf;
-
- 1 fadeSound 1;
- };
-
- _desired_obj = (((desiredviewdistance_obj / 100.0) * desiredviewdistance_inf) * GREUH_view_distance_factor);
- if ( _desired_obj < _min_view_distance) then {
- _desired_obj = _min_view_distance;
- };
- setObjectViewDistance _desired_obj;
+ waitUntil { sleep 0.3;
+ (round _olddistance_inf != round desiredviewdistance_inf)
+ || (round _olddistance_veh != round desiredviewdistance_veh)
+ || (round _olddistance_obj != round desiredviewdistance_obj)
+ || ( (( vehicle player == player ) && _was_vehicle)
+ || (( vehicle player != player ) && !_was_vehicle) )
+ || !(alive player)
+ || ( round _olddesiredvolume != round desired_vehvolume)
+ || GREUH_force_adjust_view_distance };
+ waitUntil { alive player };
+ GREUH_force_adjust_view_distance = false;
+ _olddistance_inf = round desiredviewdistance_inf;
+ _olddistance_veh = round desiredviewdistance_veh;
+ _olddistance_obj = round desiredviewdistance_obj;
+ _olddesiredvolume = desired_vehvolume;
+ _was_vehicle = ( vehicle player != player );
+
+ if ( _was_vehicle ) then {
+
+ _desired_veh = (round desiredviewdistance_veh) * GREUH_view_distance_factor;
+ if ( _desired_veh < _min_view_distance ) then {
+ _desired_veh = _min_view_distance;
+ };
+ setViewDistance _desired_veh;
+
+ 1 fadeSound ( desired_vehvolume / 100.0 );
+ } else {
+
+ _desired_inf = (round desiredviewdistance_inf) * GREUH_view_distance_factor;
+ if ( _desired_inf < _min_view_distance ) then {
+ _desired_inf = _min_view_distance;
+ };
+ setViewDistance _desired_inf;
+
+ 1 fadeSound 1;
+ };
+
+ _desired_obj = (((desiredviewdistance_obj / 100.0) * desiredviewdistance_inf) * GREUH_view_distance_factor);
+ if ( _desired_obj < _min_view_distance) then {
+ _desired_obj = _min_view_distance;
+ };
+ setObjectViewDistance _desired_obj;
};
\ No newline at end of file
diff --git a/Missionframework/GREUH/UI/GREUH_interface.hpp b/Missionframework/GREUH/UI/GREUH_interface.hpp
index 6a1ad6d59..9d314060e 100644
--- a/Missionframework/GREUH/UI/GREUH_interface.hpp
+++ b/Missionframework/GREUH/UI/GREUH_interface.hpp
@@ -81,809 +81,809 @@
#define FontM "puristaMedium"
-#define BORDERSIZE 0.01
+#define BORDERSIZE 0.01
-#define BASE_Y 0.075
+#define BASE_Y 0.075
class RscListBox {
- idc = -1;
- type = 5;
- style = 0 + 0x10;
- font = FontM;
- sizeEx = 0.018 * safezoneH;
- rowHeight = 0.02 * safezoneH;
- color[] = COLOR_LIGHTGRAY;
- colorText[] = COLOR_WHITE;
- colorScrollbar[] = COLOR_BRIGHTGREEN;
- colorSelect[] = COLOR_BRIGHTGREEN;
- colorSelect2[] = COLOR_BRIGHTGREEN;
- colorSelectBackground[] = COLOR_LIGHTGRAY;
- colorSelectBackground2[] = COLOR_LIGHTGRAY;
- colorActive[] = COLOR_BRIGHTGREEN;
- colorDisabled[] = COLOR_GREEN;
- columns[] = {0.1, 0.7, 0.1, 0.1};
- period = 0;
- colorBackground[] = COLOR_GREEN;
- maxHistoryDelay = 1.0;
- autoScrollSpeed = -1;
- autoScrollDelay = 5;
- autoScrollRewind = 0;
- soundSelect[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
- shadow = 2;
+ idc = -1;
+ type = 5;
+ style = 0 + 0x10;
+ font = FontM;
+ sizeEx = 0.018 * safezoneH;
+ rowHeight = 0.02 * safezoneH;
+ color[] = COLOR_LIGHTGRAY;
+ colorText[] = COLOR_WHITE;
+ colorScrollbar[] = COLOR_BRIGHTGREEN;
+ colorSelect[] = COLOR_BRIGHTGREEN;
+ colorSelect2[] = COLOR_BRIGHTGREEN;
+ colorSelectBackground[] = COLOR_LIGHTGRAY;
+ colorSelectBackground2[] = COLOR_LIGHTGRAY;
+ colorActive[] = COLOR_BRIGHTGREEN;
+ colorDisabled[] = COLOR_GREEN;
+ columns[] = {0.1, 0.7, 0.1, 0.1};
+ period = 0;
+ colorBackground[] = COLOR_GREEN;
+ maxHistoryDelay = 1.0;
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ soundSelect[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
+ shadow = 2;
- class ListScrollBar {
- color[] = {1, 1, 1, 0.6};
- colorActive[] = {1, 1, 1, 1};
- colorDisabled[] = {1, 1, 1, 0.3};
- thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
- arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
- arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
- border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
- };
+ class ListScrollBar {
+ color[] = {1, 1, 1, 0.6};
+ colorActive[] = {1, 1, 1, 1};
+ colorDisabled[] = {1, 1, 1, 0.3};
+ thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
+ arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
+ arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
+ border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
+ };
};
class RscCombo {
- idc = -1;
- type = 4;
- style = 1;
- x = 0;
- y = 0;
- w = 0.3;
- h = 0.035;
- colorSelect[] = COLOR_BRIGHTGREEN;
- colorText[] = COLOR_WHITE;
- colorBackground[] = COLOR_GREEN;
- colorSelectBackground[] = COLOR_LIGHTGRAY;
- colorScrollbar[] = COLOR_BRIGHTGREEN;
- arrowEmpty ="\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
- arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
- wholeHeight = 0.45;
- color[] = COLOR_LIGHTGRAY;
- colorActive[] = COLOR_BRIGHTGREEN;
- colorDisabled[] = COLOR_GREEN;
- font = FontM;
- sizeEx = 0.031;
- soundSelect[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
- soundExpand[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
- soundCollapse[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
- maxHistoryDelay = 1.0;
+ idc = -1;
+ type = 4;
+ style = 1;
+ x = 0;
+ y = 0;
+ w = 0.3;
+ h = 0.035;
+ colorSelect[] = COLOR_BRIGHTGREEN;
+ colorText[] = COLOR_WHITE;
+ colorBackground[] = COLOR_GREEN;
+ colorSelectBackground[] = COLOR_LIGHTGRAY;
+ colorScrollbar[] = COLOR_BRIGHTGREEN;
+ arrowEmpty ="\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
+ arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
+ wholeHeight = 0.45;
+ color[] = COLOR_LIGHTGRAY;
+ colorActive[] = COLOR_BRIGHTGREEN;
+ colorDisabled[] = COLOR_GREEN;
+ font = FontM;
+ sizeEx = 0.031;
+ soundSelect[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
+ soundExpand[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
+ soundCollapse[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.09, 1};
+ maxHistoryDelay = 1.0;
- class ComboScrollBar {
- color[] = {1, 1, 1, 0.6};
- colorActive[] = {1, 1, 1, 1};
- colorDisabled[] = {1, 1, 1, 0.3};
- thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
- arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
- arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
- border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
- };
+ class ComboScrollBar {
+ color[] = {1, 1, 1, 0.6};
+ colorActive[] = {1, 1, 1, 1};
+ colorDisabled[] = {1, 1, 1, 0.3};
+ thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
+ arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
+ arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
+ border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
+ };
};
class GREUH_Menu {
- idd = 5565;
- movingEnable = false;
- controlsBackground[] = {};
- controls[] = {"GREUH_OuterBG", "BgPicture", "GREUH_OuterBG_F","GREUH_InnerBG", "GREUH_InnerBG_F","GREUH_Header","GREUH_SquadLabel",
- "GREUH_SquadZone","GREUH_PlatoonLabel","GREUH_ViewDistance","GREUH_WorldQuality",
- "GREUH_Close","GREUH_ButtonWorldVeryLow","GREUH_ButtonWorldLow","GREUH_ButtonWorldNormal","GREUH_ButtonWorldHigh",
- "GREUH_Slider","GREUH_SliderVD","GREUH_LabelMarkers","GREUH_TeammatesYes","GREUH_TeammatesNo","GREUH_LabelPlatoon",
- "GREUH_PlatoonYes","GREUH_PlatoonNo","GREUH_LabelPlatoonActive","GREUH_LabelMarkersActive","GREUH_SquadList",
- "GREUH_ButtonJoin","GREUH_ButtonNew","GREUH_ButtonRename","GREUH_PlatoonZone","GREUH_ViewZone","GREUH_WorldZone",
- "GREUH_MarkersZone","GREUH_Squad_OuterBG","GREUH_Squad_InnerBG","GREUH_Squad_OuterBG_F","GREUH_Squad_InnerBG_F",
- "GREUH_ButtonName_Rename","GREUH_ButtonName_Abort","GREUH_Squad_TextField","GREUH_LabelVD","GREUH_ButtonLeader",
- "GREUH_SliderVeh","GREUH_LabelVDVeh","GREUH_SliderVDVeh","GREUH_SliderObj","GREUH_LabelVDObj","GREUH_SliderVDObj",
- "GREUH_Leader_OuterBG", "GREUH_Leader_InnerBG", "GREUH_Leader_OuterBG_F", "GREUH_Leader_InnerBG_F",
- "GREUH_ButtonLeader_Choose", "GREUH_ButtonLeader_Abort", "GREUH_Squad_Combo", "GREUH_VehSound", "GREUH_SliderVehSound",
- "GREUH_LabelVehSound","GREUH_LabelNametags","GREUH_NametagsActive","GREUH_NametagsYes","GREUH_NametagsNo",
- "GREUH_FPSLabel","GREUH_FPSEdit"};
- objects[] = {};
+ idd = 5565;
+ movingEnable = false;
+ controlsBackground[] = {};
+ controls[] = {"GREUH_OuterBG", "BgPicture", "GREUH_OuterBG_F","GREUH_InnerBG", "GREUH_InnerBG_F","GREUH_Header","GREUH_SquadLabel",
+ "GREUH_SquadZone","GREUH_PlatoonLabel","GREUH_ViewDistance","GREUH_WorldQuality",
+ "GREUH_Close","GREUH_ButtonWorldVeryLow","GREUH_ButtonWorldLow","GREUH_ButtonWorldNormal","GREUH_ButtonWorldHigh",
+ "GREUH_Slider","GREUH_SliderVD","GREUH_LabelMarkers","GREUH_TeammatesYes","GREUH_TeammatesNo","GREUH_LabelPlatoon",
+ "GREUH_PlatoonYes","GREUH_PlatoonNo","GREUH_LabelPlatoonActive","GREUH_LabelMarkersActive","GREUH_SquadList",
+ "GREUH_ButtonJoin","GREUH_ButtonNew","GREUH_ButtonRename","GREUH_PlatoonZone","GREUH_ViewZone","GREUH_WorldZone",
+ "GREUH_MarkersZone","GREUH_Squad_OuterBG","GREUH_Squad_InnerBG","GREUH_Squad_OuterBG_F","GREUH_Squad_InnerBG_F",
+ "GREUH_ButtonName_Rename","GREUH_ButtonName_Abort","GREUH_Squad_TextField","GREUH_LabelVD","GREUH_ButtonLeader",
+ "GREUH_SliderVeh","GREUH_LabelVDVeh","GREUH_SliderVDVeh","GREUH_SliderObj","GREUH_LabelVDObj","GREUH_SliderVDObj",
+ "GREUH_Leader_OuterBG", "GREUH_Leader_InnerBG", "GREUH_Leader_OuterBG_F", "GREUH_Leader_InnerBG_F",
+ "GREUH_ButtonLeader_Choose", "GREUH_ButtonLeader_Abort", "GREUH_Squad_Combo", "GREUH_VehSound", "GREUH_SliderVehSound",
+ "GREUH_LabelVehSound","GREUH_LabelNametags","GREUH_NametagsActive","GREUH_NametagsYes","GREUH_NametagsNo",
+ "GREUH_FPSLabel","GREUH_FPSEdit"};
+ objects[] = {};
- class BgPicture {
- idc = -1;
- type = CT_STATIC;
- style = ST_PICTURE;
- colorText[] = {0.5, 0.4, 0.25, 0.6};
- colorBackground[] = {0, 0, 0, 1};
- font = FontM;
- sizeEx = 0.023;
- moving = false;
- text = "res\camo03.jpg";
- x = (0.15 * safezoneW + safezoneX) - ( 2 * BORDERSIZE);
- y = ((BASE_Y + 0.02) * safezoneH) + safezoneY - (3 * BORDERSIZE);
- w = (0.2 * safezoneW) + (4 * BORDERSIZE);
- h = (0.79 * safezoneH) + (6 * BORDERSIZE);
- };
+ class BgPicture {
+ idc = -1;
+ type = CT_STATIC;
+ style = ST_PICTURE;
+ colorText[] = {0.5, 0.4, 0.25, 0.6};
+ colorBackground[] = {0, 0, 0, 1};
+ font = FontM;
+ sizeEx = 0.023;
+ moving = false;
+ text = "res\camo03.jpg";
+ x = (0.15 * safezoneW + safezoneX) - ( 2 * BORDERSIZE);
+ y = ((BASE_Y + 0.02) * safezoneH) + safezoneY - (3 * BORDERSIZE);
+ w = (0.2 * safezoneW) + (4 * BORDERSIZE);
+ h = (0.79 * safezoneH) + (6 * BORDERSIZE);
+ };
- class GREUH_OuterBG {
- idc = -1;
- type = CT_STATIC;
- style = ST_SINGLE;
- colorText[] = COLOR_BLACK;
- colorBackground[] = COLOR_BROWN;
- font = FontM;
- sizeEx = 0.023;
- x = (0.15 * safezoneW + safezoneX) - ( 2 * BORDERSIZE);
- y = ((BASE_Y + 0.02) * safezoneH) + safezoneY - (3 * BORDERSIZE);
- w = (0.2 * safezoneW) + (4 * BORDERSIZE);
- h = (0.79 * safezoneH) + (6 * BORDERSIZE);
- text = "";
- };
- class GREUH_OuterBG_F : GREUH_OuterBG {
- style = ST_FRAME;
- };
- class GREUH_InnerBG : GREUH_OuterBG {
- colorBackground[] = COLOR_GREEN;
- x = (0.15 * safezoneW + safezoneX) - ( BORDERSIZE);
- y = ((BASE_Y + 0.07) * safezoneH) + safezoneY - (1.5 * BORDERSIZE);
- w = 0.2 * safezoneW + (2 * BORDERSIZE);
- h = 0.74 * safezoneH + (3 * BORDERSIZE);
- };
- class GREUH_InnerBG_F : GREUH_InnerBG {
- style = ST_FRAME;
- };
- class GREUH_StdText {
- idc = -1;
- type = CT_STATIC;
- style = ST_LEFT;
- colorText[] = COLOR_WHITE;
- colorBackground[] = COLOR_NOALPHA;
- font = FontM;
- sizeEx = 0.02 * safezoneH;
- shadow = 2;
- };
- class GREUH_StdHeader : GREUH_StdText {
- style = ST_CENTER;
- sizeEx = 0.03 * safezoneH;
- };
- class GREUH_Header : GREUH_StdHeader {
- x = 0.15 * safezoneW + safezoneX - (BORDERSIZE);
- y = ((BASE_Y + 0.01) * safezoneH) + safezoneY;
- w = 0.2 * safezoneW + ( 2 * BORDERSIZE);
- h = 0.05 * safezoneH - (BORDERSIZE);
- text = $STR_GREUH_EXTENDED_OPTIONS;
- colorBackground[] = COLOR_LIGHTGRAY;
- };
- class GREUH_ButtonGeneric {
- idc = -1;
- type = CT_BUTTON;
- style = ST_CENTER;
- default = false;
- font = FontM;
- sizeEx = 0.018 * safezoneH;
- colorText[] = { 0, 0, 0, 1 };
- colorFocused[] = { 1, 1, 1, 1 };
- colorDisabled[] = { 0.2, 0.2, 0.2, 0.7 };
- colorBackground[] = { 0.8, 0.8, 0.8, 0.8 };
- colorBackgroundDisabled[] = { 0.5, 0.5, 0.5, 0.5 };
- colorBackgroundActive[] = { 1, 1, 1, 1 };
- offsetX = 0.003;
- offsetY = 0.003;
- offsetPressedX = 0.002;
- offsetPressedY = 0.002;
- colorShadow[] = { 0, 0, 0, 0.5 };
- colorBorder[] = { 0, 0, 0, 1 };
- borderSize = 0;
- soundEnter[] = { "", 0, 1 }; // no sound
- soundPush[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.891251, 1};
- soundClick[] = { "", 0, 1 }; // no sound
- soundEscape[] = { "", 0, 1 }; // no sound
- x = 0.15 * safezoneW + safezoneX;
- w = 0.2 * safezoneW; h = 0.03 * safezoneH;
- text = "";
- action = "";
- shadow = 1;
- };
- class GREUH_Label : GREUH_StdHeader {
- x = 0.15 * safezoneW + safezoneX;
- w = 0.2 * safezoneW;
- h = 0.03 * safezoneH;
- sizeEx = 0.02 * safezoneH;
- colorBackground[] = COLOR_LIGHTGREEN;
- };
+ class GREUH_OuterBG {
+ idc = -1;
+ type = CT_STATIC;
+ style = ST_SINGLE;
+ colorText[] = COLOR_BLACK;
+ colorBackground[] = COLOR_BROWN;
+ font = FontM;
+ sizeEx = 0.023;
+ x = (0.15 * safezoneW + safezoneX) - ( 2 * BORDERSIZE);
+ y = ((BASE_Y + 0.02) * safezoneH) + safezoneY - (3 * BORDERSIZE);
+ w = (0.2 * safezoneW) + (4 * BORDERSIZE);
+ h = (0.79 * safezoneH) + (6 * BORDERSIZE);
+ text = "";
+ };
+ class GREUH_OuterBG_F : GREUH_OuterBG {
+ style = ST_FRAME;
+ };
+ class GREUH_InnerBG : GREUH_OuterBG {
+ colorBackground[] = COLOR_GREEN;
+ x = (0.15 * safezoneW + safezoneX) - ( BORDERSIZE);
+ y = ((BASE_Y + 0.07) * safezoneH) + safezoneY - (1.5 * BORDERSIZE);
+ w = 0.2 * safezoneW + (2 * BORDERSIZE);
+ h = 0.74 * safezoneH + (3 * BORDERSIZE);
+ };
+ class GREUH_InnerBG_F : GREUH_InnerBG {
+ style = ST_FRAME;
+ };
+ class GREUH_StdText {
+ idc = -1;
+ type = CT_STATIC;
+ style = ST_LEFT;
+ colorText[] = COLOR_WHITE;
+ colorBackground[] = COLOR_NOALPHA;
+ font = FontM;
+ sizeEx = 0.02 * safezoneH;
+ shadow = 2;
+ };
+ class GREUH_StdHeader : GREUH_StdText {
+ style = ST_CENTER;
+ sizeEx = 0.03 * safezoneH;
+ };
+ class GREUH_Header : GREUH_StdHeader {
+ x = 0.15 * safezoneW + safezoneX - (BORDERSIZE);
+ y = ((BASE_Y + 0.01) * safezoneH) + safezoneY;
+ w = 0.2 * safezoneW + ( 2 * BORDERSIZE);
+ h = 0.05 * safezoneH - (BORDERSIZE);
+ text = $STR_GREUH_EXTENDED_OPTIONS;
+ colorBackground[] = COLOR_LIGHTGRAY;
+ };
+ class GREUH_ButtonGeneric {
+ idc = -1;
+ type = CT_BUTTON;
+ style = ST_CENTER;
+ default = false;
+ font = FontM;
+ sizeEx = 0.018 * safezoneH;
+ colorText[] = { 0, 0, 0, 1 };
+ colorFocused[] = { 1, 1, 1, 1 };
+ colorDisabled[] = { 0.2, 0.2, 0.2, 0.7 };
+ colorBackground[] = { 0.8, 0.8, 0.8, 0.8 };
+ colorBackgroundDisabled[] = { 0.5, 0.5, 0.5, 0.5 };
+ colorBackgroundActive[] = { 1, 1, 1, 1 };
+ offsetX = 0.003;
+ offsetY = 0.003;
+ offsetPressedX = 0.002;
+ offsetPressedY = 0.002;
+ colorShadow[] = { 0, 0, 0, 0.5 };
+ colorBorder[] = { 0, 0, 0, 1 };
+ borderSize = 0;
+ soundEnter[] = { "", 0, 1 }; // no sound
+ soundPush[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.891251, 1};
+ soundClick[] = { "", 0, 1 }; // no sound
+ soundEscape[] = { "", 0, 1 }; // no sound
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.2 * safezoneW; h = 0.03 * safezoneH;
+ text = "";
+ action = "";
+ shadow = 1;
+ };
+ class GREUH_Label : GREUH_StdHeader {
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.2 * safezoneW;
+ h = 0.03 * safezoneH;
+ sizeEx = 0.02 * safezoneH;
+ colorBackground[] = COLOR_LIGHTGREEN;
+ };
- class GREUH_DefaultZone : GREUH_StdText {
- style = ST_CENTER;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.2 * safezoneW;
- colorText[] = COLOR_LIGHTGRAY;
- colorBackground[] = COLOR_RED_DISABLED;
- text = $STR_GREUH_DISABLED;
- };
- class GREUH_RegularLabel : GREUH_Label {
- colorBackground[] = COLOR_NOALPHA;
- style = ST_LEFT;
- };
- class GREUH_Close : GREUH_ButtonGeneric {
- idc = 6677;
- x = 0.335 * safezoneW + safezoneX;
- w = 0.015 * safezoneW; h = 0.02 * safezoneH;
- y = ((BASE_Y + 0.015) * safezoneH) + safezoneY;
- text = "X";
- action = "closeDialog 0";
- };
- class GREUH_SquadZone : GREUH_DefaultZone {
- idc = 501;
- y = ((BASE_Y + 0.11) * safezoneH) + safezoneY;
- h = (0.2 * safezoneH) - (2 * BORDERSIZE);
- };
- class GREUH_SquadLabel : GREUH_Label {
- idc = 510;
- y = ((BASE_Y + 0.07) * safezoneH) + safezoneY;
- text = $STR_GREUH_SQUAD_MANAGEMENT;
- };
- class GREUH_SquadList : RscListBox {
- idc = 515;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.15 * safezoneW;
- y = ((BASE_Y + 0.11) * safezoneH) + safezoneY;
- h = (0.2 * safezoneH) - (2 * BORDERSIZE);
- };
- class GREUH_ButtonSquad : GREUH_ButtonGeneric {
- x = 0.3 * safezoneW + safezoneX + BORDERSIZE;
- w = ((0.2 * safezoneW) / 4) - BORDERSIZE;
- };
- class GREUH_ButtonJoin : GREUH_ButtonSquad {
- idc = 511;
- text = $STR_GREUH_JOIN;
- action = "squadaction = 'join';";
- y = ((BASE_Y + 0.11) * safezoneH) + safezoneY;
- };
- class GREUH_ButtonNew : GREUH_ButtonSquad {
- idc = 512;
- text = $STR_GREUH_CREATE;
- action = "squadaction = 'create';";
- y = ((BASE_Y + 0.15) * safezoneH) + safezoneY;
- };
- class GREUH_ButtonRename : GREUH_ButtonSquad {
- idc = 513;
- text = $STR_GREUH_RENAME;
- action = "squadaction = 'rename';";
- y = ((BASE_Y + 0.19) * safezoneH) + safezoneY;
- };
- class GREUH_ButtonLeader : GREUH_ButtonSquad {
- idc = 514;
- text = $STR_GREUH_LEADER;
- action = "squadaction = 'leader';";
- y = ((BASE_Y + 0.23) * safezoneH) + safezoneY;
- };
- class GREUH_Squad_OuterBG : GREUH_OuterBG {
- idc = 521;
- style = ST_SINGLE;
- x = (0.37 * safezoneW + safezoneX) - (BORDERSIZE);
- y = ((BASE_Y + 0.18) * safezoneH) + safezoneY - (1.5 * BORDERSIZE);
- w = 0.2 * safezoneW + (2 * BORDERSIZE);
- h = 0.05 * safezoneH + (3 * BORDERSIZE);
- };
- class GREUH_Squad_InnerBG : GREUH_OuterBG {
- idc = 522;
- colorBackground[] = COLOR_GREEN;
- x = (0.37 * safezoneW + safezoneX);
- y = ((BASE_Y + 0.18) * safezoneH) + safezoneY;
- w = 0.2 * safezoneW;
- h = 0.05 * safezoneH;
- };
- class GREUH_Squad_OuterBG_F : GREUH_Squad_OuterBG {
- idc = 523;
- style = ST_FRAME;
- };
- class GREUH_Squad_InnerBG_F : GREUH_Squad_InnerBG {
- idc = 524;
- style = ST_FRAME;
- };
- class GREUH_ButtonName : GREUH_ButtonGeneric {
- w = ((0.2 * safezoneW) / 5) - BORDERSIZE;
- y = ((BASE_Y + 0.19) * safezoneH) + safezoneY;
- };
- class GREUH_ButtonName_Rename : GREUH_ButtonName {
- idc = 525;
- x = 0.4875 * safezoneW + safezoneX;
- text = $STR_GREUH_RENAME;
- action = "squadname = ctrlText 527;";
- };
- class GREUH_ButtonName_Abort : GREUH_ButtonName {
- idc = 526;
- x = (0.4875 * safezoneW + safezoneX) + ((0.2 * safezoneW) / 5);
- text = $STR_GREUH_CANCEL;
- action = "squadaction = '';";
- };
- class GREUH_Squad_TextField : GREUH_ButtonName {
- idc = 527;
- type = CT_EDIT;
- style = ST_LEFT;
- x = (0.37 * safezoneW + safezoneX) + BORDERSIZE;
- w = 0.11 * safezoneW;
- text = "";
- action = "";
- colorText[] = COLOR_WHITE;
- colorSelection[] = COLOR_BRIGHTGREEN;
- autocomplete = "";
- };
+ class GREUH_DefaultZone : GREUH_StdText {
+ style = ST_CENTER;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.2 * safezoneW;
+ colorText[] = COLOR_LIGHTGRAY;
+ colorBackground[] = COLOR_RED_DISABLED;
+ text = $STR_GREUH_DISABLED;
+ };
+ class GREUH_RegularLabel : GREUH_Label {
+ colorBackground[] = COLOR_NOALPHA;
+ style = ST_LEFT;
+ };
+ class GREUH_Close : GREUH_ButtonGeneric {
+ idc = 6677;
+ x = 0.335 * safezoneW + safezoneX;
+ w = 0.015 * safezoneW; h = 0.02 * safezoneH;
+ y = ((BASE_Y + 0.015) * safezoneH) + safezoneY;
+ text = "X";
+ action = "closeDialog 0";
+ };
+ class GREUH_SquadZone : GREUH_DefaultZone {
+ idc = 501;
+ y = ((BASE_Y + 0.11) * safezoneH) + safezoneY;
+ h = (0.2 * safezoneH) - (2 * BORDERSIZE);
+ };
+ class GREUH_SquadLabel : GREUH_Label {
+ idc = 510;
+ y = ((BASE_Y + 0.07) * safezoneH) + safezoneY;
+ text = $STR_GREUH_SQUAD_MANAGEMENT;
+ };
+ class GREUH_SquadList : RscListBox {
+ idc = 515;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.15 * safezoneW;
+ y = ((BASE_Y + 0.11) * safezoneH) + safezoneY;
+ h = (0.2 * safezoneH) - (2 * BORDERSIZE);
+ };
+ class GREUH_ButtonSquad : GREUH_ButtonGeneric {
+ x = 0.3 * safezoneW + safezoneX + BORDERSIZE;
+ w = ((0.2 * safezoneW) / 4) - BORDERSIZE;
+ };
+ class GREUH_ButtonJoin : GREUH_ButtonSquad {
+ idc = 511;
+ text = $STR_GREUH_JOIN;
+ action = "squadaction = 'join';";
+ y = ((BASE_Y + 0.11) * safezoneH) + safezoneY;
+ };
+ class GREUH_ButtonNew : GREUH_ButtonSquad {
+ idc = 512;
+ text = $STR_GREUH_CREATE;
+ action = "squadaction = 'create';";
+ y = ((BASE_Y + 0.15) * safezoneH) + safezoneY;
+ };
+ class GREUH_ButtonRename : GREUH_ButtonSquad {
+ idc = 513;
+ text = $STR_GREUH_RENAME;
+ action = "squadaction = 'rename';";
+ y = ((BASE_Y + 0.19) * safezoneH) + safezoneY;
+ };
+ class GREUH_ButtonLeader : GREUH_ButtonSquad {
+ idc = 514;
+ text = $STR_GREUH_LEADER;
+ action = "squadaction = 'leader';";
+ y = ((BASE_Y + 0.23) * safezoneH) + safezoneY;
+ };
+ class GREUH_Squad_OuterBG : GREUH_OuterBG {
+ idc = 521;
+ style = ST_SINGLE;
+ x = (0.37 * safezoneW + safezoneX) - (BORDERSIZE);
+ y = ((BASE_Y + 0.18) * safezoneH) + safezoneY - (1.5 * BORDERSIZE);
+ w = 0.2 * safezoneW + (2 * BORDERSIZE);
+ h = 0.05 * safezoneH + (3 * BORDERSIZE);
+ };
+ class GREUH_Squad_InnerBG : GREUH_OuterBG {
+ idc = 522;
+ colorBackground[] = COLOR_GREEN;
+ x = (0.37 * safezoneW + safezoneX);
+ y = ((BASE_Y + 0.18) * safezoneH) + safezoneY;
+ w = 0.2 * safezoneW;
+ h = 0.05 * safezoneH;
+ };
+ class GREUH_Squad_OuterBG_F : GREUH_Squad_OuterBG {
+ idc = 523;
+ style = ST_FRAME;
+ };
+ class GREUH_Squad_InnerBG_F : GREUH_Squad_InnerBG {
+ idc = 524;
+ style = ST_FRAME;
+ };
+ class GREUH_ButtonName : GREUH_ButtonGeneric {
+ w = ((0.2 * safezoneW) / 5) - BORDERSIZE;
+ y = ((BASE_Y + 0.19) * safezoneH) + safezoneY;
+ };
+ class GREUH_ButtonName_Rename : GREUH_ButtonName {
+ idc = 525;
+ x = 0.4875 * safezoneW + safezoneX;
+ text = $STR_GREUH_RENAME;
+ action = "squadname = ctrlText 527;";
+ };
+ class GREUH_ButtonName_Abort : GREUH_ButtonName {
+ idc = 526;
+ x = (0.4875 * safezoneW + safezoneX) + ((0.2 * safezoneW) / 5);
+ text = $STR_GREUH_CANCEL;
+ action = "squadaction = '';";
+ };
+ class GREUH_Squad_TextField : GREUH_ButtonName {
+ idc = 527;
+ type = CT_EDIT;
+ style = ST_LEFT;
+ x = (0.37 * safezoneW + safezoneX) + BORDERSIZE;
+ w = 0.11 * safezoneW;
+ text = "";
+ action = "";
+ colorText[] = COLOR_WHITE;
+ colorSelection[] = COLOR_BRIGHTGREEN;
+ autocomplete = "";
+ };
- class GREUH_Leader_OuterBG : GREUH_OuterBG {
- idc = 561;
- style = ST_SINGLE;
- x = (0.37 * safezoneW + safezoneX) - (BORDERSIZE);
- y = ((BASE_Y + 0.22) * safezoneH) + safezoneY - (1.5 * BORDERSIZE);
- w = 0.2 * safezoneW + (2 * BORDERSIZE);
- h = 0.05 * safezoneH + (3 * BORDERSIZE);
- };
- class GREUH_Leader_InnerBG : GREUH_OuterBG {
- idc = 562;
- colorBackground[] = COLOR_GREEN;
- x = (0.37 * safezoneW + safezoneX);
- y = ((BASE_Y + 0.22) * safezoneH) + safezoneY;
- w = 0.2 * safezoneW;
- h = 0.05 * safezoneH;
- };
- class GREUH_Leader_OuterBG_F : GREUH_Leader_OuterBG {
- idc = 563;
- style = ST_FRAME;
- };
- class GREUH_Leader_InnerBG_F : GREUH_Leader_InnerBG {
- idc = 564;
- style = ST_FRAME;
- };
- class GREUH_ButtonLeaderGen : GREUH_ButtonGeneric {
- w = ((0.2 * safezoneW) / 5) - BORDERSIZE;
- y = ((BASE_Y + 0.23) * safezoneH) + safezoneY;
- };
- class GREUH_ButtonLeader_Choose : GREUH_ButtonLeaderGen {
- idc = 565;
- x = 0.4875 * safezoneW + safezoneX;
- text = $STR_GREUH_CHOOSE;
- action = "choose_squadleader = lbCurSel 567;";
- };
- class GREUH_ButtonLeader_Abort : GREUH_ButtonLeaderGen {
- idc = 566;
- x = (0.4875 * safezoneW + safezoneX) + ((0.2 * safezoneW) / 5);
- text = $STR_GREUH_CANCEL;
- action = "squadaction = ''";
- };
- class GREUH_Squad_Combo : RscCombo {
- idc = 567;
- x = (0.37 * safezoneW + safezoneX) + BORDERSIZE;
- w = 0.11 * safezoneW;
- y = ((BASE_Y + 0.23) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- };
- class GREUH_PlatoonZone : GREUH_DefaultZone {
- idc = 601;
- y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
- h = (0.04 * safezoneH) - (2 * BORDERSIZE);
- };
- class GREUH_PlatoonLabel : GREUH_Label {
- idc = 610;
- y = ((BASE_Y + 0.31) * safezoneH) + safezoneY;
- text = $STR_GREUH_PLATOON_SQUAD_AWARENESS;
- };
- class GREUH_LabelPlatoon : GREUH_RegularLabel {
- idc = 611;
- y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
- text = $STR_GREUH_SHOW_PLATOON_OVERLAY;
- };
- class GREUH_LabelPlatoonActive : GREUH_RegularLabel {
- idc = 612;
- style = ST_RIGHT;
- colorText[] = COLOR_BRIGHTGREEN;
- text = $STR_GREUH_ACTIVE;
- x = 0.2 * safezoneW + safezoneX;
- w = 0.1 * safezoneW;
- y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
- };
- class GREUH_PlatoonYes : GREUH_ButtonGeneric {
- idc = 613;
- w = ((0.08 * safezoneW) / 4);
- y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
- x = 0.305 * safezoneW + safezoneX;
- text = $STR_GREUH_YES;
- action = "show_platoon = true";
- };
- class GREUH_PlatoonNo : GREUH_ButtonGeneric {
- idc = 614;
- w = ((0.08 * safezoneW) / 4);
- y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
- x = (0.32 + BORDERSIZE) * safezoneW + safezoneX;
- text = $STR_GREUH_NO;
- action = "show_platoon = false";
- };
- class GREUH_ViewZone : GREUH_DefaultZone {
- idc = 701;
- y = ((BASE_Y + 0.51) * safezoneH) + safezoneY;
- h = (0.04 * safezoneH) - (2 * BORDERSIZE);
- };
- class GREUH_ViewDistance : GREUH_Label {
- idc = 711;
- y = ((BASE_Y + 0.47) * safezoneH) + safezoneY;
- text = $STR_GREUH_ADJUST_VIEW_DISTANCE;
- };
- class GREUH_Slider {
- idc = 712;
- type = CT_SLIDER;
- style = SL_HORZ;
- x = 0.19 * safezoneW + safezoneX;
- w = 0.12 * safezoneW;
- y = ((BASE_Y + 0.515) * safezoneH) + safezoneY;
- h = 0.025 * safezoneH;
- text = $STR_GREUH_VIEW_DISTANCE;
- color[] = { 1, 1, 1, 1 };
- coloractive[] = { 1, 1, 1, 1 };
- onSliderPosChanged = "desiredviewdistance_inf = (sliderPosition 712)";
- };
- class GREUH_SliderVD : GREUH_Label {
- idc = 713;
- style = ST_LEFT;
- x = 0.31 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.505) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = "";
- };
- class GREUH_LabelVD : GREUH_Label {
- idc = 714;
- style = ST_LEFT;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.505) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = $STR_GREUH_INFANTRY;
- };
- class GREUH_SliderVeh {
- idc = 722;
- type = CT_SLIDER;
- style = SL_HORZ;
- x = 0.19 * safezoneW + safezoneX;
- w = 0.12 * safezoneW;
- y = ((BASE_Y + 0.545) * safezoneH) + safezoneY;
- h = 0.025 * safezoneH;
- text = $STR_GREUH_VIEW_DISTANCE;
- color[] = { 1, 1, 1, 1 };
- coloractive[] = { 1, 1, 1, 1 };
- onSliderPosChanged = "desiredviewdistance_veh = (sliderPosition 722)";
- };
- class GREUH_SliderVDVeh : GREUH_Label {
- idc = 723;
- style = ST_LEFT;
- x = 0.31 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.535) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = "";
- };
- class GREUH_LabelVDVeh : GREUH_Label {
- idc = 724;
- style = ST_LEFT;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.535) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = $STR_GREUH_VEHICLES;
- };
- class GREUH_SliderObj {
- idc = 732;
- type = CT_SLIDER;
- style = SL_HORZ;
- x = 0.19 * safezoneW + safezoneX;
- w = 0.12 * safezoneW;
- y = ((BASE_Y + 0.575) * safezoneH) + safezoneY;
- h = 0.025 * safezoneH;
- text = $STR_GREUH_VIEW_DISTANCE;
- color[] = { 1, 1, 1, 1 };
- coloractive[] = { 1, 1, 1, 1 };
- onSliderPosChanged = "desiredviewdistance_obj = (sliderPosition 732)";
- };
- class GREUH_SliderVDObj : GREUH_Label {
- idc = 733;
- style = ST_LEFT;
- x = 0.31 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.565) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = "";
- };
- class GREUH_LabelVDObj : GREUH_Label {
- idc = 734;
- style = ST_LEFT;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.565) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = $STR_GREUH_OBJECTS;
- };
- class GREUH_FPSLabel : GREUH_Label {
- idc = 724;
- style = ST_LEFT;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.3 * safezoneW;
- y = ((BASE_Y + 0.61) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- sizeEx = 0.018 * safezoneH;
- text = $STR_GREUH_ADJUST_VIEW_DISTANCE_TO_KEEP_FPS_ABOVE;
- };
- class GREUH_FPSEdit {
- idc = 960;
- type = CT_EDIT;
- style = ST_LEFT + ST_FRAME;
- x = 0.317 * safezoneW + safezoneX;
- w = 0.03 * safezoneW;
- y = ((BASE_Y + 0.61) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = {0,0,0,0};
- colorText[] = {1,1,1,1};
- colorSelection[] = {1,1,1,0.25};
- colorDisabled[] = { 0.2, 0.2, 0.2, 0.7 };
- colorBackgroundDisabled[] = { 0.5, 0.5, 0.5, 0.5 };
- font = FontM;
- sizeEx = 0.02 * safezoneH;
- autocomplete = "";
- text = "";
- shadow = 0;
- };
- class GREUH_WorldZone : GREUH_DefaultZone {
- idc = 801;
- y = ((BASE_Y + 0.7) * safezoneH) + safezoneY;
- h = (0.04 * safezoneH) - (2 * BORDERSIZE);
- };
- class GREUH_WorldQuality : GREUH_Label {
- idc = 810;
- y = ((BASE_Y + 0.66) * safezoneH) + safezoneY;
- text = $STR_GREUH_ADJUST_TERRAIN_DETAILS;
- };
- class GREUH_ButtonWorld : GREUH_ButtonGeneric {
- w = ((0.2 * safezoneW) / 4) - BORDERSIZE;
- y = ((BASE_Y + 0.7) * safezoneH) + safezoneY;
- };
- class GREUH_ButtonWorldVeryLow : GREUH_ButtonWorld {
- idc = 812;
- x = 0.15 * safezoneW + safezoneX;
- text = $STR_GREUH_VERY_LOW;
- action = "setTerrainGrid 50; hint 'Terrain details set to Very Low'";
- };
- class GREUH_ButtonWorldLow : GREUH_ButtonWorld {
- idc = 813;
- x = (0.15 * safezoneW + safezoneX) + (((0.2 * safezoneW) / 4) * 1);
- text = $STR_GREUH_LOW;
- action = "setTerrainGrid 25; hint 'Terrain details set to Low'";
- };
- class GREUH_ButtonWorldNormal : GREUH_ButtonWorld {
- idc = 814;
- x = (0.15 * safezoneW + safezoneX) + (((0.2 * safezoneW) / 4) * 2);
- text = $STR_GREUH_NORMAL;
- action = "setTerrainGrid 12.5; hint 'Terrain details set to Normal'";
- };
- class GREUH_ButtonWorldHigh : GREUH_ButtonWorld {
- idc = 815;
- x = (0.15 * safezoneW + safezoneX) + (((0.2 * safezoneW) / 4) * 3);
- text = $STR_GREUH_HIGH;
- action = "setTerrainGrid 3.125; hint 'Terrain details set to High'";
- };
- class GREUH_MarkersZone : GREUH_DefaultZone {
- idc = 901;
- y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
- h = (0.04 * safezoneH) - (2 * BORDERSIZE);
- };
- class GREUH_LabelNametags : GREUH_RegularLabel {
- idc = 961;
- y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
- text = $STR_GREUH_SHOW_PLAYER_NAMETAGS;
- };
- class GREUH_NametagsActive : GREUH_RegularLabel {
- idc = 962;
- style = ST_RIGHT;
- colorText[] = COLOR_BRIGHTGREEN;
- text = $STR_GREUH_ACTIVE;
- x = 0.2 * safezoneW + safezoneX;
- w = 0.1 * safezoneW;
- y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
- };
- class GREUH_NametagsYes : GREUH_ButtonGeneric {
- idc = 963;
- w = ((0.08 * safezoneW) / 4);
- y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
- x = 0.305 * safezoneW + safezoneX;
- text = $STR_GREUH_YES;
- action = "show_nametags = true";
- };
- class GREUH_NametagsNo : GREUH_ButtonGeneric {
- idc = 964;
- w = ((0.08 * safezoneW) / 4);
- y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
- x = (0.32 + BORDERSIZE) * safezoneW + safezoneX;
- text = $STR_GREUH_NO;
- action = "show_nametags = false";
- };
- class GREUH_LabelMarkers : GREUH_RegularLabel {
- idc = 911;
- y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
- text = $STR_GREUH_SHOW_TEAMMATES_ON_MAP;
- };
- class GREUH_LabelMarkersActive : GREUH_RegularLabel {
- idc = 912;
- style = ST_RIGHT;
- colorText[] = COLOR_BRIGHTGREEN;
- text = $STR_GREUH_ACTIVE;
- x = 0.2 * safezoneW + safezoneX;
- w = 0.1 * safezoneW;
- y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
- };
- class GREUH_TeammatesYes : GREUH_ButtonGeneric {
- idc = 913;
- w = ((0.08 * safezoneW) / 4);
- y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
- x = 0.305 * safezoneW + safezoneX;
- text = $STR_GREUH_YES;
- action = "show_teammates = true";
- };
- class GREUH_TeammatesNo : GREUH_ButtonGeneric {
- idc = 914;
- w = ((0.08 * safezoneW) / 4);
- y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
- x = (0.32 + BORDERSIZE) * safezoneW + safezoneX;
- text = $STR_GREUH_NO;
- action = "show_teammates = false";
- };
+ class GREUH_Leader_OuterBG : GREUH_OuterBG {
+ idc = 561;
+ style = ST_SINGLE;
+ x = (0.37 * safezoneW + safezoneX) - (BORDERSIZE);
+ y = ((BASE_Y + 0.22) * safezoneH) + safezoneY - (1.5 * BORDERSIZE);
+ w = 0.2 * safezoneW + (2 * BORDERSIZE);
+ h = 0.05 * safezoneH + (3 * BORDERSIZE);
+ };
+ class GREUH_Leader_InnerBG : GREUH_OuterBG {
+ idc = 562;
+ colorBackground[] = COLOR_GREEN;
+ x = (0.37 * safezoneW + safezoneX);
+ y = ((BASE_Y + 0.22) * safezoneH) + safezoneY;
+ w = 0.2 * safezoneW;
+ h = 0.05 * safezoneH;
+ };
+ class GREUH_Leader_OuterBG_F : GREUH_Leader_OuterBG {
+ idc = 563;
+ style = ST_FRAME;
+ };
+ class GREUH_Leader_InnerBG_F : GREUH_Leader_InnerBG {
+ idc = 564;
+ style = ST_FRAME;
+ };
+ class GREUH_ButtonLeaderGen : GREUH_ButtonGeneric {
+ w = ((0.2 * safezoneW) / 5) - BORDERSIZE;
+ y = ((BASE_Y + 0.23) * safezoneH) + safezoneY;
+ };
+ class GREUH_ButtonLeader_Choose : GREUH_ButtonLeaderGen {
+ idc = 565;
+ x = 0.4875 * safezoneW + safezoneX;
+ text = $STR_GREUH_CHOOSE;
+ action = "choose_squadleader = lbCurSel 567;";
+ };
+ class GREUH_ButtonLeader_Abort : GREUH_ButtonLeaderGen {
+ idc = 566;
+ x = (0.4875 * safezoneW + safezoneX) + ((0.2 * safezoneW) / 5);
+ text = $STR_GREUH_CANCEL;
+ action = "squadaction = ''";
+ };
+ class GREUH_Squad_Combo : RscCombo {
+ idc = 567;
+ x = (0.37 * safezoneW + safezoneX) + BORDERSIZE;
+ w = 0.11 * safezoneW;
+ y = ((BASE_Y + 0.23) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ };
+ class GREUH_PlatoonZone : GREUH_DefaultZone {
+ idc = 601;
+ y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
+ h = (0.04 * safezoneH) - (2 * BORDERSIZE);
+ };
+ class GREUH_PlatoonLabel : GREUH_Label {
+ idc = 610;
+ y = ((BASE_Y + 0.31) * safezoneH) + safezoneY;
+ text = $STR_GREUH_PLATOON_SQUAD_AWARENESS;
+ };
+ class GREUH_LabelPlatoon : GREUH_RegularLabel {
+ idc = 611;
+ y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
+ text = $STR_GREUH_SHOW_PLATOON_OVERLAY;
+ };
+ class GREUH_LabelPlatoonActive : GREUH_RegularLabel {
+ idc = 612;
+ style = ST_RIGHT;
+ colorText[] = COLOR_BRIGHTGREEN;
+ text = $STR_GREUH_ACTIVE;
+ x = 0.2 * safezoneW + safezoneX;
+ w = 0.1 * safezoneW;
+ y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
+ };
+ class GREUH_PlatoonYes : GREUH_ButtonGeneric {
+ idc = 613;
+ w = ((0.08 * safezoneW) / 4);
+ y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
+ x = 0.305 * safezoneW + safezoneX;
+ text = $STR_GREUH_YES;
+ action = "show_platoon = true";
+ };
+ class GREUH_PlatoonNo : GREUH_ButtonGeneric {
+ idc = 614;
+ w = ((0.08 * safezoneW) / 4);
+ y = ((BASE_Y + 0.35) * safezoneH) + safezoneY;
+ x = (0.32 + BORDERSIZE) * safezoneW + safezoneX;
+ text = $STR_GREUH_NO;
+ action = "show_platoon = false";
+ };
+ class GREUH_ViewZone : GREUH_DefaultZone {
+ idc = 701;
+ y = ((BASE_Y + 0.51) * safezoneH) + safezoneY;
+ h = (0.04 * safezoneH) - (2 * BORDERSIZE);
+ };
+ class GREUH_ViewDistance : GREUH_Label {
+ idc = 711;
+ y = ((BASE_Y + 0.47) * safezoneH) + safezoneY;
+ text = $STR_GREUH_ADJUST_VIEW_DISTANCE;
+ };
+ class GREUH_Slider {
+ idc = 712;
+ type = CT_SLIDER;
+ style = SL_HORZ;
+ x = 0.19 * safezoneW + safezoneX;
+ w = 0.12 * safezoneW;
+ y = ((BASE_Y + 0.515) * safezoneH) + safezoneY;
+ h = 0.025 * safezoneH;
+ text = $STR_GREUH_VIEW_DISTANCE;
+ color[] = { 1, 1, 1, 1 };
+ coloractive[] = { 1, 1, 1, 1 };
+ onSliderPosChanged = "desiredviewdistance_inf = (sliderPosition 712)";
+ };
+ class GREUH_SliderVD : GREUH_Label {
+ idc = 713;
+ style = ST_LEFT;
+ x = 0.31 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.505) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = "";
+ };
+ class GREUH_LabelVD : GREUH_Label {
+ idc = 714;
+ style = ST_LEFT;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.505) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = $STR_GREUH_INFANTRY;
+ };
+ class GREUH_SliderVeh {
+ idc = 722;
+ type = CT_SLIDER;
+ style = SL_HORZ;
+ x = 0.19 * safezoneW + safezoneX;
+ w = 0.12 * safezoneW;
+ y = ((BASE_Y + 0.545) * safezoneH) + safezoneY;
+ h = 0.025 * safezoneH;
+ text = $STR_GREUH_VIEW_DISTANCE;
+ color[] = { 1, 1, 1, 1 };
+ coloractive[] = { 1, 1, 1, 1 };
+ onSliderPosChanged = "desiredviewdistance_veh = (sliderPosition 722)";
+ };
+ class GREUH_SliderVDVeh : GREUH_Label {
+ idc = 723;
+ style = ST_LEFT;
+ x = 0.31 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.535) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = "";
+ };
+ class GREUH_LabelVDVeh : GREUH_Label {
+ idc = 724;
+ style = ST_LEFT;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.535) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = $STR_GREUH_VEHICLES;
+ };
+ class GREUH_SliderObj {
+ idc = 732;
+ type = CT_SLIDER;
+ style = SL_HORZ;
+ x = 0.19 * safezoneW + safezoneX;
+ w = 0.12 * safezoneW;
+ y = ((BASE_Y + 0.575) * safezoneH) + safezoneY;
+ h = 0.025 * safezoneH;
+ text = $STR_GREUH_VIEW_DISTANCE;
+ color[] = { 1, 1, 1, 1 };
+ coloractive[] = { 1, 1, 1, 1 };
+ onSliderPosChanged = "desiredviewdistance_obj = (sliderPosition 732)";
+ };
+ class GREUH_SliderVDObj : GREUH_Label {
+ idc = 733;
+ style = ST_LEFT;
+ x = 0.31 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.565) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = "";
+ };
+ class GREUH_LabelVDObj : GREUH_Label {
+ idc = 734;
+ style = ST_LEFT;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.565) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = $STR_GREUH_OBJECTS;
+ };
+ class GREUH_FPSLabel : GREUH_Label {
+ idc = 724;
+ style = ST_LEFT;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.3 * safezoneW;
+ y = ((BASE_Y + 0.61) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ sizeEx = 0.018 * safezoneH;
+ text = $STR_GREUH_ADJUST_VIEW_DISTANCE_TO_KEEP_FPS_ABOVE;
+ };
+ class GREUH_FPSEdit {
+ idc = 960;
+ type = CT_EDIT;
+ style = ST_LEFT + ST_FRAME;
+ x = 0.317 * safezoneW + safezoneX;
+ w = 0.03 * safezoneW;
+ y = ((BASE_Y + 0.61) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = {0,0,0,0};
+ colorText[] = {1,1,1,1};
+ colorSelection[] = {1,1,1,0.25};
+ colorDisabled[] = { 0.2, 0.2, 0.2, 0.7 };
+ colorBackgroundDisabled[] = { 0.5, 0.5, 0.5, 0.5 };
+ font = FontM;
+ sizeEx = 0.02 * safezoneH;
+ autocomplete = "";
+ text = "";
+ shadow = 0;
+ };
+ class GREUH_WorldZone : GREUH_DefaultZone {
+ idc = 801;
+ y = ((BASE_Y + 0.7) * safezoneH) + safezoneY;
+ h = (0.04 * safezoneH) - (2 * BORDERSIZE);
+ };
+ class GREUH_WorldQuality : GREUH_Label {
+ idc = 810;
+ y = ((BASE_Y + 0.66) * safezoneH) + safezoneY;
+ text = $STR_GREUH_ADJUST_TERRAIN_DETAILS;
+ };
+ class GREUH_ButtonWorld : GREUH_ButtonGeneric {
+ w = ((0.2 * safezoneW) / 4) - BORDERSIZE;
+ y = ((BASE_Y + 0.7) * safezoneH) + safezoneY;
+ };
+ class GREUH_ButtonWorldVeryLow : GREUH_ButtonWorld {
+ idc = 812;
+ x = 0.15 * safezoneW + safezoneX;
+ text = $STR_GREUH_VERY_LOW;
+ action = "setTerrainGrid 50; hint 'Terrain details set to Very Low'";
+ };
+ class GREUH_ButtonWorldLow : GREUH_ButtonWorld {
+ idc = 813;
+ x = (0.15 * safezoneW + safezoneX) + (((0.2 * safezoneW) / 4) * 1);
+ text = $STR_GREUH_LOW;
+ action = "setTerrainGrid 25; hint 'Terrain details set to Low'";
+ };
+ class GREUH_ButtonWorldNormal : GREUH_ButtonWorld {
+ idc = 814;
+ x = (0.15 * safezoneW + safezoneX) + (((0.2 * safezoneW) / 4) * 2);
+ text = $STR_GREUH_NORMAL;
+ action = "setTerrainGrid 12.5; hint 'Terrain details set to Normal'";
+ };
+ class GREUH_ButtonWorldHigh : GREUH_ButtonWorld {
+ idc = 815;
+ x = (0.15 * safezoneW + safezoneX) + (((0.2 * safezoneW) / 4) * 3);
+ text = $STR_GREUH_HIGH;
+ action = "setTerrainGrid 3.125; hint 'Terrain details set to High'";
+ };
+ class GREUH_MarkersZone : GREUH_DefaultZone {
+ idc = 901;
+ y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
+ h = (0.04 * safezoneH) - (2 * BORDERSIZE);
+ };
+ class GREUH_LabelNametags : GREUH_RegularLabel {
+ idc = 961;
+ y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
+ text = $STR_GREUH_SHOW_PLAYER_NAMETAGS;
+ };
+ class GREUH_NametagsActive : GREUH_RegularLabel {
+ idc = 962;
+ style = ST_RIGHT;
+ colorText[] = COLOR_BRIGHTGREEN;
+ text = $STR_GREUH_ACTIVE;
+ x = 0.2 * safezoneW + safezoneX;
+ w = 0.1 * safezoneW;
+ y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
+ };
+ class GREUH_NametagsYes : GREUH_ButtonGeneric {
+ idc = 963;
+ w = ((0.08 * safezoneW) / 4);
+ y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
+ x = 0.305 * safezoneW + safezoneX;
+ text = $STR_GREUH_YES;
+ action = "show_nametags = true";
+ };
+ class GREUH_NametagsNo : GREUH_ButtonGeneric {
+ idc = 964;
+ w = ((0.08 * safezoneW) / 4);
+ y = ((BASE_Y + 0.39) * safezoneH) + safezoneY;
+ x = (0.32 + BORDERSIZE) * safezoneW + safezoneX;
+ text = $STR_GREUH_NO;
+ action = "show_nametags = false";
+ };
+ class GREUH_LabelMarkers : GREUH_RegularLabel {
+ idc = 911;
+ y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
+ text = $STR_GREUH_SHOW_TEAMMATES_ON_MAP;
+ };
+ class GREUH_LabelMarkersActive : GREUH_RegularLabel {
+ idc = 912;
+ style = ST_RIGHT;
+ colorText[] = COLOR_BRIGHTGREEN;
+ text = $STR_GREUH_ACTIVE;
+ x = 0.2 * safezoneW + safezoneX;
+ w = 0.1 * safezoneW;
+ y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
+ };
+ class GREUH_TeammatesYes : GREUH_ButtonGeneric {
+ idc = 913;
+ w = ((0.08 * safezoneW) / 4);
+ y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
+ x = 0.305 * safezoneW + safezoneX;
+ text = $STR_GREUH_YES;
+ action = "show_teammates = true";
+ };
+ class GREUH_TeammatesNo : GREUH_ButtonGeneric {
+ idc = 914;
+ w = ((0.08 * safezoneW) / 4);
+ y = ((BASE_Y + 0.43) * safezoneH) + safezoneY;
+ x = (0.32 + BORDERSIZE) * safezoneW + safezoneX;
+ text = $STR_GREUH_NO;
+ action = "show_teammates = false";
+ };
- class GREUH_VehSound : GREUH_Label {
- idc = 1101;
- y = ((BASE_Y + 0.74) * safezoneH) + safezoneY;
- text = $STR_GREUH_INVEHICLE_SOUND_VOLUME;
- };
- class GREUH_SliderVehSound {
- idc = 1102;
- type = CT_SLIDER;
- style = SL_HORZ;
- x = 0.15 * safezoneW + safezoneX;
- w = 0.16 * safezoneW;
- y = ((BASE_Y + 0.785) * safezoneH) + safezoneY;
- h = 0.025 * safezoneH;
- text = $STR_GREUH_VIEW_DISTANCE;
- color[] = { 1, 1, 1, 1 };
- coloractive[] = { 1, 1, 1, 1 };
- onSliderPosChanged = "desired_vehvolume = (sliderPosition 1102)";
- };
- class GREUH_LabelVehSound : GREUH_Label {
- idc = 1103;
- style = ST_LEFT;
- x = 0.31 * safezoneW + safezoneX;
- w = 0.05 * safezoneW;
- y = ((BASE_Y + 0.775) * safezoneH) + safezoneY;
- h = 0.03 * safezoneH;
- colorBackground[] = COLOR_NOALPHA;
- text = $STR_GREUH_TEST;
- };
+ class GREUH_VehSound : GREUH_Label {
+ idc = 1101;
+ y = ((BASE_Y + 0.74) * safezoneH) + safezoneY;
+ text = $STR_GREUH_INVEHICLE_SOUND_VOLUME;
+ };
+ class GREUH_SliderVehSound {
+ idc = 1102;
+ type = CT_SLIDER;
+ style = SL_HORZ;
+ x = 0.15 * safezoneW + safezoneX;
+ w = 0.16 * safezoneW;
+ y = ((BASE_Y + 0.785) * safezoneH) + safezoneY;
+ h = 0.025 * safezoneH;
+ text = $STR_GREUH_VIEW_DISTANCE;
+ color[] = { 1, 1, 1, 1 };
+ coloractive[] = { 1, 1, 1, 1 };
+ onSliderPosChanged = "desired_vehvolume = (sliderPosition 1102)";
+ };
+ class GREUH_LabelVehSound : GREUH_Label {
+ idc = 1103;
+ style = ST_LEFT;
+ x = 0.31 * safezoneW + safezoneX;
+ w = 0.05 * safezoneW;
+ y = ((BASE_Y + 0.775) * safezoneH) + safezoneY;
+ h = 0.03 * safezoneH;
+ colorBackground[] = COLOR_NOALPHA;
+ text = $STR_GREUH_TEST;
+ };
};
class GreuhButton {
- idc = -1;
- type = CT_BUTTON;
- style = ST_CENTER;
- default = false;
- font = FontM;
- sizeEx = 0.018 * safezoneH;
- colorText[] = { 0, 0, 0, 1 };
- colorFocused[] = { 1, 1, 1, 1 };
- colorDisabled[] = { 0.2, 0.2, 0.2, 0.7 };
- colorBackground[] = { 0.8, 0.8, 0.8, 0.8 };
- colorBackgroundDisabled[] = { 0.5, 0.5, 0.5, 0.5 };
- colorBackgroundActive[] = { 1, 1, 1, 1 };
- offsetX = 0.003;
- offsetY = 0.003;
- offsetPressedX = 0.002;
- offsetPressedY = 0.002;
- colorShadow[] = { 0, 0, 0, 0.5 };
- colorBorder[] = { 0, 0, 0, 1 };
- borderSize = 0;
- soundEnter[] = { "", 0, 1 }; // no sound
- soundPush[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.891251, 1};
- soundClick[] = { "", 0, 1 }; // no sound
- soundEscape[] = { "", 0, 1 }; // no sound
- x = 0.45 * safezoneW + safezoneX;
- y = ((BASE_Y + 0.7) * safezoneH) + safezoneY;
- w = 0.1 * safezoneW;
- h = 0.04 * safezoneH;
- text = "";
- action = "";
- shadow = 1;
+ idc = -1;
+ type = CT_BUTTON;
+ style = ST_CENTER;
+ default = false;
+ font = FontM;
+ sizeEx = 0.018 * safezoneH;
+ colorText[] = { 0, 0, 0, 1 };
+ colorFocused[] = { 1, 1, 1, 1 };
+ colorDisabled[] = { 0.2, 0.2, 0.2, 0.7 };
+ colorBackground[] = { 0.8, 0.8, 0.8, 0.8 };
+ colorBackgroundDisabled[] = { 0.5, 0.5, 0.5, 0.5 };
+ colorBackgroundActive[] = { 1, 1, 1, 1 };
+ offsetX = 0.003;
+ offsetY = 0.003;
+ offsetPressedX = 0.002;
+ offsetPressedY = 0.002;
+ colorShadow[] = { 0, 0, 0, 0.5 };
+ colorBorder[] = { 0, 0, 0, 1 };
+ borderSize = 0;
+ soundEnter[] = { "", 0, 1 }; // no sound
+ soundPush[] = {"\a3\Ui_f\data\Sound\CfgIngameUI\hintExpand", 0.891251, 1};
+ soundClick[] = { "", 0, 1 }; // no sound
+ soundEscape[] = { "", 0, 1 }; // no sound
+ x = 0.45 * safezoneW + safezoneX;
+ y = ((BASE_Y + 0.7) * safezoneH) + safezoneY;
+ w = 0.1 * safezoneW;
+ h = 0.04 * safezoneH;
+ text = "";
+ action = "";
+ shadow = 1;
};
class GREUH_respawn {
- idd = 5566;
- movingEnable = false;
- controlsBackground[] = {"GREUH_BleedoutBar_BG"};
- controls[] = {"GREUH_BleedoutBar","GREUH_BleedoutBar_F","GREUH_Useless","GREUH_Respawn","GREUH_ReviveLabel","GREUH_WoundedLabel", "GREUH_ReplaceAI"};
- objects[] = {};
- class GREUH_Respawn : GreuhButton {
- idc = -1;
- x = 0.45 * safezoneW + safezoneX;
- y = 0.75 * safezoneH + safezoneY;
- w = 0.1 * safezoneW;
- h = 0.04 * safezoneH;
- text = $STR_GREUH_RESPAWN;
- action = "player setDamage 1";
- };
- class GREUH_ReplaceAI : GreuhButton {
- idc = 678;
- x = 0.45 * safezoneW + safezoneX;
- y = 0.8 * safezoneH + safezoneY;
- w = 0.1 * safezoneW;
- h = 0.04 * safezoneH;
- text = $STR_GREUH_REPLACE_NEAREST_AI;
- action = "replace_ai = 1";
- };
- class GREUH_Useless : GREUH_Respawn {
- idc = -1;
- x = -5;
- y = -5;
- w = 0.1;
- h = 0.1;
- text = "";
- action = "";
- };
- class GREUH_ReviveLabel {
- idc = 5567;
- type = CT_STATIC;
- style = ST_CENTER;
- colorText[] = COLOR_WHITE;
- colorBackground[] = COLOR_NOALPHA;
- font = FontM;
- sizeEx = 0.02 * safezoneH;
- shadow = 1;
- x = 0.4 * safezoneW + safezoneX;
- y = 0.7 * safezoneH + safezoneY;
- w = 0.2 * safezoneW;
- h = 0.025 * safezoneH;
- text = "";
- };
- class GREUH_WoundedLabel {
- idc = 4567;
- type = CT_STATIC;
- style = ST_CENTER;
- colorText[] = COLOR_WHITE;
- colorBackground[] = COLOR_NOALPHA;
- font = FontM;
- sizeEx = 0.07 * safezoneH;
- shadow = 1;
- x = 0.3 * safezoneW + safezoneX;
- y = 0.25 * safezoneH + safezoneY;
- w = 0.4 * safezoneW;
- h = 0.07 * safezoneH;
- text = $STR_REVIVE_LABEL;
- };
- class GREUH_BleedoutBar {
- idc = 6699;
- type = CT_STATIC;
- style = ST_SINGLE;
- colorText[] = COLOR_WHITE;
- colorBackground[] = COLOR_BLEEDOUT;
- font = FontM;
- sizeEx = 0.023;
- x = 0.4 * safezoneW + safezoneX;
- y = 0.7 * safezoneH + safezoneY;
- w = 0.2 * safezoneW;
- h = 0.03 * safezoneH;
- text = "";
- };
- class GREUH_BleedoutBar_BG : GREUH_BleedoutBar {
- idc = -1;
- colorBackground[] = COLOR_BLACK_ALPHA;
- x = 0.4 * safezoneW + safezoneX - 0.005;
- y = 0.7 * safezoneH + safezoneY - 0.005;
- w = 0.2 * safezoneW + 0.01;
- h = 0.03 * safezoneH + 0.01;
- };
- class GREUH_BleedoutBar_F : GREUH_BleedoutBar {
- idc = 6698;
- colorText[] = COLOR_WHITE;
- style = ST_FRAME;
- x = 0.4 * safezoneW + safezoneX - 0.005;
- y = 0.7 * safezoneH + safezoneY - 0.005;
- w = 0.2 * safezoneW + 0.01;
- h = 0.03 * safezoneH + 0.01;
- };
+ idd = 5566;
+ movingEnable = false;
+ controlsBackground[] = {"GREUH_BleedoutBar_BG"};
+ controls[] = {"GREUH_BleedoutBar","GREUH_BleedoutBar_F","GREUH_Useless","GREUH_Respawn","GREUH_ReviveLabel","GREUH_WoundedLabel", "GREUH_ReplaceAI"};
+ objects[] = {};
+ class GREUH_Respawn : GreuhButton {
+ idc = -1;
+ x = 0.45 * safezoneW + safezoneX;
+ y = 0.75 * safezoneH + safezoneY;
+ w = 0.1 * safezoneW;
+ h = 0.04 * safezoneH;
+ text = $STR_GREUH_RESPAWN;
+ action = "player setDamage 1";
+ };
+ class GREUH_ReplaceAI : GreuhButton {
+ idc = 678;
+ x = 0.45 * safezoneW + safezoneX;
+ y = 0.8 * safezoneH + safezoneY;
+ w = 0.1 * safezoneW;
+ h = 0.04 * safezoneH;
+ text = $STR_GREUH_REPLACE_NEAREST_AI;
+ action = "replace_ai = 1";
+ };
+ class GREUH_Useless : GREUH_Respawn {
+ idc = -1;
+ x = -5;
+ y = -5;
+ w = 0.1;
+ h = 0.1;
+ text = "";
+ action = "";
+ };
+ class GREUH_ReviveLabel {
+ idc = 5567;
+ type = CT_STATIC;
+ style = ST_CENTER;
+ colorText[] = COLOR_WHITE;
+ colorBackground[] = COLOR_NOALPHA;
+ font = FontM;
+ sizeEx = 0.02 * safezoneH;
+ shadow = 1;
+ x = 0.4 * safezoneW + safezoneX;
+ y = 0.7 * safezoneH + safezoneY;
+ w = 0.2 * safezoneW;
+ h = 0.025 * safezoneH;
+ text = "";
+ };
+ class GREUH_WoundedLabel {
+ idc = 4567;
+ type = CT_STATIC;
+ style = ST_CENTER;
+ colorText[] = COLOR_WHITE;
+ colorBackground[] = COLOR_NOALPHA;
+ font = FontM;
+ sizeEx = 0.07 * safezoneH;
+ shadow = 1;
+ x = 0.3 * safezoneW + safezoneX;
+ y = 0.25 * safezoneH + safezoneY;
+ w = 0.4 * safezoneW;
+ h = 0.07 * safezoneH;
+ text = $STR_REVIVE_LABEL;
+ };
+ class GREUH_BleedoutBar {
+ idc = 6699;
+ type = CT_STATIC;
+ style = ST_SINGLE;
+ colorText[] = COLOR_WHITE;
+ colorBackground[] = COLOR_BLEEDOUT;
+ font = FontM;
+ sizeEx = 0.023;
+ x = 0.4 * safezoneW + safezoneX;
+ y = 0.7 * safezoneH + safezoneY;
+ w = 0.2 * safezoneW;
+ h = 0.03 * safezoneH;
+ text = "";
+ };
+ class GREUH_BleedoutBar_BG : GREUH_BleedoutBar {
+ idc = -1;
+ colorBackground[] = COLOR_BLACK_ALPHA;
+ x = 0.4 * safezoneW + safezoneX - 0.005;
+ y = 0.7 * safezoneH + safezoneY - 0.005;
+ w = 0.2 * safezoneW + 0.01;
+ h = 0.03 * safezoneH + 0.01;
+ };
+ class GREUH_BleedoutBar_F : GREUH_BleedoutBar {
+ idc = 6698;
+ colorText[] = COLOR_WHITE;
+ style = ST_FRAME;
+ x = 0.4 * safezoneW + safezoneX - 0.005;
+ y = 0.7 * safezoneH + safezoneY - 0.005;
+ w = 0.2 * safezoneW + 0.01;
+ h = 0.03 * safezoneH + 0.01;
+ };
};
diff --git a/Missionframework/KPLIB_classnameLists.sqf b/Missionframework/KPLIB_classnameLists.sqf
index aa82f4da9..2b37bfb6d 100644
--- a/Missionframework/KPLIB_classnameLists.sqf
+++ b/Missionframework/KPLIB_classnameLists.sqf
@@ -10,8 +10,27 @@
Check the comments above each variable for details.
*/
+// Vehicle classnames which should be ignored on kp_fuel_consumption.
+kp_fuel_ignore_vehicles = [
+ "JGPT_EU",
+ "HMCS",
+ "HMCS_501",
+ "HMCS_VW1",
+
+ "gm_ge_army_bicycle_01_oli",
+ "C_Cher90s_Civ_Bike",
+ "RDS_MMT_Civ_01",
+ "vn_c_bicycle_01",
+ "vn_c_bicycle_02",
+ "RDS_Old_bike_Civ_01",
+ "rhsgref_hidf_canoe"
+];
+
// Vehicle classnames which also function as ACE medical vehicles.
KPLIB_medical_vehicles = [
+ "PRACS_BMR_AMB",
+ "PRACS_M250_AMB",
+ "PRACS_Sa330_Puma_MED",
"B_T_Truck_01_medical_F",
"B_Truck_01_medical_F",
"C_Van_02_medevac_F",
@@ -33,8 +52,10 @@ KPLIB_medical_vehicles = [
"CUP_O_BMP2_AMB_sla",
"CUP_O_LR_Ambulance_TKA",
"CUP_O_M113_Med_TKA",
+ "gm_gc_airforce_mi2sr",
"gm_gc_army_ural375d_medic_win",
"gm_gc_army_ural375d_medic",
+ "gm_ge_airforce_do28d2_medevac",
"gm_ge_army_u1300l_medic_win_rc",
"gm_ge_army_u1300l_medic",
"I_E_Truck_02_Medical_F",
@@ -42,6 +63,7 @@ KPLIB_medical_vehicles = [
"O_T_Truck_03_medical_ghex_F",
"O_Truck_03_medical_F",
"RHS_UH60M_MEV_d",
+ "rhs_gaz66_ap2_vmf",
"RHS_UH60M_MEV",
"RHS_UH60M_MEV2_d",
"RHS_UH60M_MEV2",
@@ -56,23 +78,66 @@ KPLIB_medical_vehicles = [
"uns_ch47a_medevac",
"uns_H13_medevac_CAV",
"uns_M577_amb",
- "uns_uh1D_med"
+ "uns_uh1D_med",
+ "vn_b_air_uh1d_01_01",
+ "C_Cher90s_Civ_Amb",
+ "vn_b_wheeled_m54_repair_airport"
];
// Building classnames which also function as ACE medical facilities.
KPLIB_medical_facilities = [
+ "B_Slingload_01_Medevac_F",
+ "MASH",
+ "GUE_WarfareBFieldhHospital",
+ "USMC_WarfareBFieldhHospital",
+ "Land_MedicalTent_01_wdl_closed_F",
"Land_Medevac_house_V1_F",
"Land_Medevac_HQ_V1_F",
+ "Land_MedicalTent_01_tropic_closed_F",
+ "Land_PartyTent_01_F",
"LAND_uns_army_med",
"LAND_uns_tent3mash",
+ "Land_tent_east",
+ "CampEast_EP1",
+ "Land_vn_tent_mash_01_01",
+ "Land_vn_tent_mash_01_02",
+ "Land_vn_tent_mash_01_03",
+ "Land_vn_tent_mash_01_04",
+ "Land_vn_tent_mash_01",
+ "Land_vn_tent_mash_02_01",
+ "Land_vn_tent_mash_02_02",
+ "Land_vn_tent_mash_02_03",
+ "Land_vn_tent_mash_02_04",
"uns_mash_main",
"uns_mash",
"US_Tent_2",
"US_Tent_MASH"
];
+// Building classnames which also function as ACE repair facilities.
+KPLIB_repair_facilities = [
+ "Land_RepairDepot_01_green_F",
+ "Land_RepairDepot_01_tan_F",
+ "Land_Workbench_01_F"
+];
+
// Classnames of ACE crates
KPLIB_ace_crates = [
+ "APR_MREBox_GreenTea",
+ "APR_MREBox_Water",
+ "APR_MREBox_IDAP",
+ "APR_MREBox_MRE",
+ "APR_MREBox_JP",
+ "APR_MREBox_ALL",
+
+ "BWA3_box_120mm_Mo_Combo",
+ "BWA3_box_120mm_Mo_HE",
+ "BWA3_box_120mm_Mo_HE_annz",
+ "BWA3_box_120mm_Mo_HE_dpz",
+ "BWA3_box_120mm_Mo_Illum",
+ "BWA3_box_120mm_Mo_Smoke",
+
+ "ACE_Box_82mm_Mo_Combo",
"ACE_Box_82mm_Mo_HE",
"ACE_Box_82mm_Mo_Illum",
"ACE_Box_82mm_Mo_Smoke",
@@ -81,12 +146,18 @@ KPLIB_ace_crates = [
// Everything the AI troups should be able to resupply from.
KPLIB_aiResupplySources = [
+ "cwr3_b_uk_fv620_reammo",
+ "PRACS_M88",
+ "PRACS_M250_Ammo",
+ "PRACS_m548_ammo",
"B_APC_Tracked_01_CRV_F",
"B_Slingload_01_Ammo_F",
"B_T_APC_Tracked_01_CRV_F",
"B_T_Truck_01_ammo_F",
+ "Misc_Cargo1B_military",
"B_Truck_01_ammo_F",
"BW_LKW15T_Ammo_F",
+ "CUP_B_nM1038_Ammo_USA_WDL",
"CUP_B_Kamaz_Reammo_CDF",
"CUP_B_MTVR_Ammo_USA",
"CUP_B_MTVR_Ammo_USMC",
@@ -97,6 +168,7 @@ KPLIB_aiResupplySources = [
"CUP_O_Ural_Reammo_SLA",
"CUP_O_Ural_Reammo_TKA",
"CUP_O_V3S_Rearm_TKA",
+ "B_AFBiH_GAZ66_Ammo",
"gm_gc_army_ural4320_reammo_win",
"gm_gc_army_ural4320_reammo",
"gm_ge_army_kat1_451_reammo_win",
@@ -116,19 +188,33 @@ KPLIB_aiResupplySources = [
"rhsusf_M977A4_AMMO_BKIT_usarmy_wd",
"rhsusf_M977A4_AMMO_usarmy_d",
"rhsusf_M977A4_AMMO_usarmy_wd",
+ "Sparky_Japan_2035_Kamaz_Ammo_JGSDF",
+ "Sparky_JSDF_Overhaul_gac_JGSDF_35t_resupply",
+ "Sparky_JSDF_Overhaul_JSDF_JGSDF_Type87_ASV",
+ "Sparky_JSDF_Overhaul_JSDF_JGSDF_type90_Recovery",
+ "Sparky_JSDF_Overhaul_JSDF_JGSDF_Type99_ASV",
+ "UK3CB_B_MTVR_Reammo_WDL",
+ "UK3CB_LDF_B_T810_Reammo",
"sfp_tgb40_ammo",
"uns_M113_ENG",
"uns_M35A2_ammo",
- "uns_motorpool1_repair"
+ "uns_motorpool1_repair",
+ "vn_b_wheeled_m54_ammo"
];
// Everything that can repair other vehicles.
vehicle_repair_sources = [
+ "cwr3_b_uk_fv620_repair",
+ "PRACS_M88",
+ "PRACS_M250_Repair",
+ "Sparky_JSDF_Overhaul_JSDF_JGSDF_type90_Recovery",
"B_APC_Tracked_01_CRV_F",
+ "rhs_gaz66_repair_vmf",
"B_Slingload_01_Repair_F",
"B_T_APC_Tracked_01_CRV_F",
"B_T_Truck_01_Repair_F",
"B_Truck_01_Repair_F",
+ "RHS_Ural_Repair_MSV_01",
"BW_LKW15T_Repair_F",
"C_Offroad_01_repair_F",
"CUP_B_Kamaz_Repair_CDF",
@@ -162,16 +248,26 @@ vehicle_repair_sources = [
"UNS_Hanger_repair",
"uns_M113_ENG",
"uns_M35A2_repair",
- "uns_motorpool1_repair"
+ "uns_motorpool1_repair",
+ "vn_b_wheeled_m54_repair"
];
// Everything that can rearm other vehicles.
vehicle_rearm_sources = [
+ "cwr3_b_uk_fv620_reammo",
+ "PRACS_M88",
+ "PRACS_M250_Ammo",
+ "PRACS_m548_ammo",
+ "Sparky_JSDF_Overhaul_JSDF_JGSDF_type90_Recovery",
"B_APC_Tracked_01_CRV_F",
+ "rhs_gaz66_ammo_vmf",
+ "B_AFBiH_GAZ66_Ammo",
+ "Misc_Cargo1B_military",
"B_Slingload_01_Ammo_F",
"B_T_APC_Tracked_01_CRV_F",
"B_T_Truck_01_ammo_F",
"B_Truck_01_ammo_F",
+ "RHS_Ural_Ammo_MSV_01",
"BW_LKW15T_Ammo_F",
"CUP_B_Kamaz_Reammo_CDF",
"CUP_B_MTVR_Ammo_USA",
@@ -204,14 +300,23 @@ vehicle_rearm_sources = [
"rhsusf_M977A4_AMMO_usarmy_wd",
"sfp_tgb40_ammo",
"uns_M113_ENG",
- "uns_M35A2_ammo"
+ "uns_M35A2_ammo",
+ "vn_b_wheeled_m54_ammo"
];
// Everything that can refuel other vehicles.
vehicle_refuel_sources = [
+ "cwr3_b_uk_fv620_refuel",
+ "PRACS_M88",
+ "PRACS_M250_fuel",
+ "PRACS_m548_fuel",
+ "B_AFBiH_URAL_Fuel",
+ "Sparky_JSDF_Overhaul_JSDF_JGSDF_type90_Recovery",
"B_APC_Tracked_01_CRV_F",
"B_Slingload_01_Fuel_F",
+ "RHS_Ural_Fuel_MSV_01",
"B_T_APC_Tracked_01_CRV_F",
+ "Land_Ind_TankSmall2",
"B_T_Truck_01_fuel_F",
"B_Truck_01_fuel_F",
"BW_LKW15T_Fuel_F",
@@ -247,40 +352,99 @@ vehicle_refuel_sources = [
"sfp_tgb40_fuel",
"uns_M113_ENG",
"uns_M35A2_fuel",
- "uns_M35A2_fueltanker"
+ "uns_M35A2_fueltanker",
+ "vn_b_wheeled_m54_fuel"
];
// Classnames of boats, so they can be built on water.
boats_names = [
+ "sab_mp_rhib",
+ "sab_mp_migaloo",
"B_Boat_Armed_01_minigun_F",
+ "C_Scooter_Transport_01_F",
"B_Boat_Transport_01_F",
"B_SDV_01_F",
+ "rhsgref_hidf_canoe",
"B_T_Boat_Armed_01_minigun_F",
"B_T_Boat_Transport_01_F",
"CUP_B_LCU1600_USMC",
+ "CUP_B_Frigate_ANZAC",
"CUP_B_MK10_GB",
"CUP_B_RHIB_USMC",
"CUP_B_RHIB2Turret_USMC",
+ "I_C_Boat_Transport_02_F",
+ "rhs_bmk_t",
+ "walker_A3_boat_f",
"CUP_O_LCVP_SLA",
+ "rhsgref_hidf_rhib",
"CUP_O_LCVP_VIV_SLA",
"CUP_O_PBX_SLA",
+ "C_Scooter_Transport_01_F",
"O_Boat_Armed_01_hmg_F",
"O_Boat_Transport_01_F",
"O_T_Boat_Armed_01_hmg_F",
"O_T_Boat_Transport_01_F",
"rhsusf_mkvsoc",
"sfp_gruppbat",
+ "sfp_15_gruppbat",
+ "sfp_svavare2000",
+ "sfp_svavare2000_transport",
"sfp_rbb_norrkoping",
"sfp_strb90_rws",
"sfp_strb90",
"uns_PBR_M10",
"uns_pbr_mk18",
"uns_pbr",
- "UNS_Zodiac_W"
+ "UNS_Zodiac_W",
+ "B_Lifeboat",
+ "vn_b_boat_05_01"
];
// Classnames of artillery vehicles, which should be added to the support module
KPLIB_param_supportModule_artyVeh = [
+ "sfp_robotbil15",
+ "sfp_grkpbv90120",
+ "sfp_grk84",
+ "sfp_fh77",
+
+ "Sparky_Japan_2035_Scorcher_JGSDF",
+ "Sparky_Japan_2035_MLRS_JGSDF",
+
+ "Sparky_JSDF_Overhaul_Type74_105mm_SPG",
+ "Sparky_JSDF_Overhaul_Type75_155mm_SPG",
+ "Sparky_JSDF_Overhaul_Type75_130mm_MLRS",
+ "UK3CB_B_M270_MLRS_Cluster_WDL",
+ "UK3CB_B_M270_MLRS_HE_WDL",
+ "ua_ukr_2s3",
+ "UK3CB_GAF_B_2S1",
+ "APC_Wheeled_01_mortar_base_lxWS",
+
+ "BWA3_Panzerhaubitze2000_Fleck",
+ "BWA3_MRS120_Fleck",
+ "B_Ship_MRLS_01_F",
+ "UK3CB_B_G_Pickup_Rocket",
+ "UK3CB_B_G_Pickup_rocket_arty",
+ "UK3CB_B_G_Hilux_Mortar",
+ "UK3CB_B_G_Hilux_Rocket",
+ "UK3CB_B_G_Hilux_Rocket_Arty",
+ "rhsgref_cdf_b_reg_BM21",
+ "UK3CB_LDF_B_T810_MLRS",
+ "UK3CB_LDF_B_RM70_MG",
+ "UK3CB_MDF_B_MTVR_MLRS",
+
+ "PRACS_M101",
+ "PRACS_M102",
+ "PRACS_M114",
+ "PRACS_M198",
+ "PRACS_M1",
+ "PRACS_M115",
+ "B_TwinMortar_RF",
+ "tbd_2b25_gall",
+ "tbd_2b9_vasilek",
+ "tbd_mt12",
+ "tbd_m119",
+ "tbd_120mm_pm_43",
+
"B_G_Mortar_01_F",
"B_MBT_01_arty_F",
"B_MBT_01_mlrs_F",
@@ -289,6 +453,7 @@ KPLIB_param_supportModule_artyVeh = [
"B_T_MBT_01_arty_F",
"B_T_MBT_01_mlrs_F",
"B_T_Mortar_01_F",
+ "CUP_I_2b14_82mm_AAF",
"CUP_B_2b14_82mm_ACR",
"CUP_B_2b14_82mm_CDF",
"CUP_B_BM21_CDF",
@@ -375,6 +540,7 @@ KPLIB_param_supportModule_artyVeh = [
"RHS_M252_USMC_D",
"RHS_M252_USMC_WD",
"RHS_M252_WD",
+ "rhsgref_cdf_b_reg_d30",
"rhsusf_m109_usarmy",
"rhsusf_m109d_usarmy",
"rhsusf_M142_usarmy_D",
@@ -398,7 +564,9 @@ KPLIB_param_supportModule_artyVeh = [
"uns_M2_60mm_mortar_pvp",
"uns_M2_60mm_mortar",
"uns_M30_107mm_mortar",
- "uns_Type55_mortar"
+ "uns_Type55_mortar",
+ "vn_b_army_static_mortar_m2",
+ "vn_b_army_static_mortar_m29"
];
// Objects which are spawned as intel objects for pickup
@@ -409,22 +577,73 @@ KPLIB_intelObjectClasses = [
// Classnames of buildings inside military sectors, which are valid to hold intel items
KPLIB_intelBuildingClasses = [
+ "Land_A_Office01_EP1",
+ "Land_A_Stationhouse_ep1",
+ "Land_Airport_01_hangar_F",
+ "Land_Airport_02_controlTower_F",
+ "Land_Ammostore2",
+ "Land_Army_hut_int",
+ "Land_Army_hut2_int",
+ "Land_Army_hut3_long_int",
+ "Land_Barrack2",
+ "Land_Barracks_02_F",
+ "Land_Barracks_03_F",
+ "Land_Barracks_04_F",
+ "Land_Barracks_06_F",
+ "Land_Bunker_01_HQ_F",
+ "Land_Bunker_01_tall_F",
"Land_Cargo_House_V1_F",
"Land_Cargo_House_V2_F",
"Land_Cargo_House_V3_F",
"Land_Cargo_HQ_V1_F",
"Land_Cargo_HQ_V2_F",
"Land_Cargo_HQ_V3_F",
+ "Land_Cargo_Tower_V1_No1_F",
+ "Land_Cargo_Tower_V1_No2_F",
+ "Land_Cargo_Tower_V1_No3_F",
+ "Land_Cargo_Tower_V1_No4_F",
+ "Land_Cargo_Tower_V2_F",
+ "Land_ControlTower_01_F",
+ "Land_Garaz_bez_tanku",
+ "Land_Garaz_mala",
+ "Land_GuardHouse_01_F",
+ "Land_GuardHouse_02_F",
+ "Land_Hangar_2",
+ "Land_Hlidac_budka",
+ "Land_House_C_4_EP1",
+ "Land_House_C_5_V3_EP1",
+ "Land_HouseV2_02_Interier",
+ "Land_Hut01",
+ "Land_Hut02",
"Land_i_Barracks_V1_dam_F",
"Land_i_Barracks_V1_F",
"Land_i_Barracks_V2_dam_F",
"Land_i_Barracks_V2_F",
+ "Land_ibr_terminal",
+ "Land_Ind_Workshop01_01",
+ "Land_Ind_Workshop01_02",
+ "Land_Ind_Workshop01_03",
+ "Land_Ind_Workshop01_04",
+ "Land_Ind_Workshop01_L",
+ "Land_MBG_Police_Station",
"Land_Medevac_house_V1_F",
"Land_Medevac_HQ_V1_F",
+ "Land_Mil_Barracks",
+ "Land_Mil_Barracks_i",
+ "Land_Mil_ControlTower",
"Land_MilOffices_V1_F",
+ "Land_Offices_01_V1_F",
+ "Land_PowerStation_01_F",
+ "Land_Radar_01_antenna_base_F",
+ "Land_Radar_01_HQ_F",
"Land_Research_house_V1_F",
"Land_Research_HQ_F",
- "Land_u_Barracks_V2_F"
+ "Land_Shed_Ind02",
+ "Land_Ss_hangar",
+ "Land_tent_east",
+ "Land_TentHangar_V1_F",
+ "Land_u_Barracks_V2_F",
+ "Land_Warehouse_03_F"
];
// Array of radio tower classnames to place at radio tower sectors. If more than one is added, it'll be selected random for each sector on campaign start.
@@ -434,8 +653,15 @@ KPLIB_radioTowerClassnames = [
// Classnames of objects which should be ignored when building
KPLIB_collisionIgnoreObjects = [
- "Land_HelipadSquare_F",
+ "Crater",
+ "Land_ShellCrater_01_decal_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_ShellCrater_02_decal_F",
+ "Land_Hangar_F",
"Land_TentHangar_V1_F",
+ "Land_Airport_01_hangar_F",
+ "Land_ServiceHangar_01_L_F",
+ "Land_ServiceHangar_01_R_F",
"Land_runway_edgelight",
"Land_runway_edgelight_blue_F",
"Land_Flush_Light_green_F",
@@ -452,12 +678,20 @@ KPLIB_collisionIgnoreObjects = [
"Land_PortableLight_double_F",
"Land_HelipadCircle_F",
"Land_HelipadRescue_F",
+ "Land_HelipadSquare_F",
+ "Land_HelipadCivil_F",
+ "Land_HelipadEmpty_F",
+ "Land_JumpTarget_F",
"Helipad",
"LAND_uns_Heli_pad",
"LAND_uns_evac_pad",
- "PortableHelipadLight_01_blue_F",
- "PortableHelipadLight_01_green_F",
+ "Land_vn_b_helipad_01",
+ "Land_PortableHelipadLight_01_F",
"PortableHelipadLight_01_red_F",
+ "PortableHelipadLight_01_green_F",
+ "PortableHelipadLight_01_blue_F",
+ "PortableHelipadLight_01_yellow_F",
+ "PortableHelipadLight_01_white_F",
"Land_BagFence_Round_F",
"Land_BagFence_Short_F",
"Land_BagFence_Long_F",
@@ -467,10 +701,14 @@ KPLIB_collisionIgnoreObjects = [
"Land_Sign_WarningMilAreaSmall_F",
"Land_Sign_WarningMilitaryVehicles_F",
"Land_Razorwire_F",
- "Sign_Sphere100cm_F",
- "Land_ClutterCutter_large_F",
"Land_HighVoltageColumnWire_F",
- "Land_PowerWireBig_left_F",
+ "Land_PowerLine_01_wire_50m_F",
+ "Land_PowerLine_01_wire_50m_main_F",
+ "Land_PowerLine_03_pole_F",
+ "Land_PowerLine_02_pole_junction_A_F",
+ "Land_PowerLine_02_pole_small_F",
+ "Land_PowerWireBig_left_F",
+ "Land_PowerWireBig_direct_F",
"B_HMG_01_F", // Mk30A HMG .50
"B_HMG_01_high_F", // Mk30 HMG .50 (Raised)
"B_HMG_01_A_F", // Mk30 HMG .50 (Autonomous)
@@ -480,7 +718,35 @@ KPLIB_collisionIgnoreObjects = [
"B_static_AT_F", // Static Titan Launcher (AT)
"B_static_AA_F", // Static Titan Launcher (AA)
"B_Mortar_01_F", // Mk6 Mortar
+ "TFAR_Land_Communication_F",
"ACE_friesAnchorBar", // ACE FRIES
"ACE_friesGantryReverse", // ACE FRIES
- "ACE_friesGantry" // ACE FRIES
+ "ACE_friesGantry", // ACE FRIES
+ "ACE_LogicDummy",
+ "ACE_medicalSupplyCrate_advanced",
+ "ACE_Track",
+ "ACE_Wheel",
+ "Land_CanisterFuel_F",
+ "GroundWeaponHolder",
+ "Land_ClutterCutter_large_F",
+ "Land_Can_V2_F",
+ "Sign_Arrow_Blue_F",
+ "Sign_Arrow_Cyan_F",
+ "Sign_Arrow_Direction_Blue_F",
+ "Sign_Arrow_Direction_Cyan_F",
+ "Sign_Arrow_Direction_F",
+ "Sign_Arrow_Direction_Green_F",
+ "Sign_Arrow_Direction_Pink_F",
+ "Sign_Arrow_Direction_Yellow_F",
+ "Sign_Arrow_F",
+ "Sign_Arrow_Green_F",
+ "Sign_Arrow_Large_Blue_F",
+ "Sign_Arrow_Large_Cyan_F",
+ "Sign_Arrow_Large_F",
+ "Sign_Arrow_Large_Green_F",
+ "Sign_Arrow_Large_Pink_F",
+ "Sign_Arrow_Large_Yellow_F",
+ "Sign_Arrow_Pink_F",
+ "Sign_Arrow_Yellow_F",
+ "Sign_Sphere100cm_F"
];
diff --git a/Missionframework/KPLIB_config.sqf b/Missionframework/KPLIB_config.sqf
index bae114c53..c5e682f67 100644
--- a/Missionframework/KPLIB_config.sqf
+++ b/Missionframework/KPLIB_config.sqf
@@ -2,7 +2,7 @@
File: KPLIB_config.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-16
- Last Update: 2020-08-06
+ Last Update: 2023-03-24
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -163,10 +163,10 @@ KPLIB_color_enemyActive = "ColorRED";
*/
// Name of the save data variable inside of the [ServerProfileName].vars.Arma3Profile file.
-KPLIB_save_key = "KP_LIBERATION_" + (toUpper worldName) + "_SAVEGAME";
+KPLIB_save_key = "KP_LIBERATION_" + (toUpperANSI worldName) + "_SAVEGAME";
// Name of the parameter save data variable inside of the [ServerProfileName].vars.Arma3Profile file.
-KPLIB_save_paramKey = "KP_LIBERATION_" + (toUpper worldName) + "_SAVE_PARAMS";
+KPLIB_save_paramKey = "KP_LIBERATION_" + (toUpperANSI worldName) + "_SAVE_PARAMS";
// Interval in seconds for automatic save.
KPLIB_save_interval = 60;
@@ -186,7 +186,14 @@ KPLIB_range_fob = 125;
KPLIB_height_halo = 2500;
// Range to activate a sector.
-KPLIB_range_sectorActivation = 1000;
+KPLIB_range_sectorActivation = 1000;
+KPLIB_range_capitalActivation = 1250;
+KPLIB_range_cityActivation = 1000;
+KPLIB_range_factoryActivation = 750;
+KPLIB_range_militaryActivation = 1500;
+KPLIB_range_towerActivation = 500;
+KPLIB_range_airSpawnActivation = 1500;
+KPLIB_range_pointActivation = 1000;
// Range to capture a sector.
KPLIB_range_sectorCapture = 175;
@@ -194,6 +201,12 @@ KPLIB_range_sectorCapture = 175;
// Radio Tower scanning range.
KPLIB_range_radioTowerScan = 2500;
+// Minimum distance to next FOB.
+KPLIB_distance_fob = 1000;
+
+// Minimum distance to next sector.
+KPLIB_distance_sector = KPLIB_range_sectorCapture + KPLIB_range_fob;
+
/*
------------------------------------------------------------
@@ -260,32 +273,35 @@ KPLIB_cr_wounded_gain = 2;
------------------------------------------------------------
*/
-// Intel price for the secondary missions. [FOB hunting, Convoy ambush, SAR]
-KPLIB_secondary_missions_costs = [15, 10, 8];
+// Intel price for the secondary missions. [FOB hunting, Convoy ambush, SAR, CIV, FUEL, REARM]
+KPLIB_secondary_missions_costs = [15, 10, 8, 8, 8, 8];
// Proportionate reduction of the actual (!) enemy combat readiness for a successful FOB hunt. (e.g. 0.4 -> reduction of 24 by an actual value of 60)
KPLIB_secondary_objective_impact = 0.4;
-// Minimum time until a civil Informant can spawn. (seconds)
-KPLIB_civinfo_min = 5400;
+// The percentage increase received when completing a Humanitarian Aid secondary objective
+KPLIB_secondary_objective_civ_supplies_impact = 10;
+
+// Minimum time until a civil Informant can spawn. (seconds, default 30 min)
+KPLIB_civinfo_min = 1800;
-// Maximum time until a civil Informant spawns. (seconds)
-KPLIB_civinfo_max = 10800;
+// Maximum time until a civil Informant spawns. (seconds, default 60 min)
+KPLIB_civinfo_max = 3600;
// Civil Informant spawn chance. (0-100)
KPLIB_civinfo_chance = 75;
// Intel gain for talking to a civil informant.
-KPLIB_civinfo_intel = 5;
+KPLIB_civinfo_intel = 10;
-// Time until a civil informant will despawn after spawning. (seconds)
-KPLIB_civinfo_duration = 1200;
+// Time until a civil informant will despawn after spawning. (seconds, default 30 min)
+KPLIB_civinfo_duration = 1800;
// Chance (0-100) that the delivered informant will spawn a time critical task
-KPLIB_civinfo_task_chance = 40;
+KPLIB_civinfo_task_chance = 35;
-// Time until the task will despawn if no player is near. (seconds)
-KPLIB_civinfo_task_duration = 900;
+// Time until the task will despawn if no player is near. (seconds, default 30 min)
+KPLIB_civinfo_task_duration = 1800;
/*
@@ -358,11 +374,14 @@ KPLIB_surrender_chance = 80;
// When playing on this map, it'll create a clearance (remove terrain objects) in a 15m radius around the battlegroup/reinforcements spawnpoint.
KPLIB_battlegroup_clearance = [
- "song_bin_tanh"
+ "song_bin_tanh",
+ "khe_sanh",
+ "lingor3",
+ "Cam_Lao_Nam"
];
// Delay after death for wrecks and corpses to be deleted
KPLIB_cleanup_delay = 1200;
-// Fill magazines on loading loadout?
-KP_liberation_fill_mags = true;
+// Automatic refill magazines on redeploy and load arsenal. true means fill.
+KPLIB_fill_mags = true;
diff --git a/Missionframework/KPLIB_objectInits.sqf b/Missionframework/KPLIB_objectInits.sqf
index a72a3ea5b..d79515143 100644
--- a/Missionframework/KPLIB_objectInits.sqf
+++ b/Missionframework/KPLIB_objectInits.sqf
@@ -24,7 +24,7 @@
*/
KPLIB_objectInits = [
- // Set KP logo on white flag
+ // Set logo on white flag
[
["Flag_White_F"],
{_this setFlagTexture "res\flag_kp_co.paa";}
@@ -83,12 +83,32 @@ KPLIB_objectInits = [
[KPLIB_b_smallStorage, KPLIB_b_largeStorage],
{_this setVariable ["KPLIB_storage_type", 0, true];}
],
-
- // Add ACE variables to corresponding building types
+
+ // disable inventory action and ACE rename of resource crates
+ [
+ KPLIB_crates,
+ {
+ _this lockInventory true;
+ if (KPLIB_ace) then {
+ [_this, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];
+ _this setVariable ["ace_cargo_noRename", true];
+ };
+ }
+ ],
+
+ // Add ACE variables to corresponding building/vehicle types
[
- [KPLIB_b_logiStation],
+ KPLIB_repair_facilities + [KPLIB_b_logiStation],
{_this setVariable ["ace_isRepairFacility", 1, true];}
],
+ [
+ vehicle_repair_sources,
+ {_this setVariable ["ace_isRepairVehicle", 1, true];}
+ ],
+ [
+ vehicle_rearm_sources,
+ {_this setVariable ["ace_rearm_isSupplyVehicle", true, true];}
+ ],
[
KPLIB_medical_facilities,
{_this setVariable ["ace_medical_isMedicalFacility", true, true];}
@@ -98,6 +118,20 @@ KPLIB_objectInits = [
{_this setVariable ["ace_medical_isMedicalVehicle", true, true];}
],
+ // Add ACE refuel function to corresponding building/vehicle types when ace fuelCargo config is missing
+ [
+ vehicle_refuel_sources,
+ {
+ [_this] spawn {
+ params ["_fuelTruck"];
+ waitUntil {sleep 0.1; time > 0};
+ if (getNumber (configfile >> "CfgVehicles" >> (typeOf _fuelTruck) >> "ace_refuel_fuelCargo") <= 0) then {
+ [_fuelTruck, 3000] remoteExecCall ["ace_refuel_fnc_makeSource", 0, _fuelTruck];
+ };
+ };
+ }
+ ],
+
// Hide Cover on big GM trucks
[
["gm_ge_army_kat1_454_cargo", "gm_ge_army_kat1_454_cargo_win"],
@@ -114,12 +148,54 @@ KPLIB_objectInits = [
// Add valid vehicles to support module, if system is enabled
[
KPLIB_param_supportModule_artyVeh,
- {if (KPLIB_param_supportModule > 0) then {KPLIB_param_supportModule_arty synchronizeObjectsAdd [_this];};}
+ {
+ if (KPLIB_param_supportModule > 0) then {
+ [_this] spawn {
+ params ["_arty"];
+ waitUntil {sleep 0.1; time > 0};
+ [_arty] remoteExecCall ["KPLIB_fnc_addArtyToSupport", 0, _arty];
+ };
+ };
+ }
+ ],
+
+ // add fullheal action to huron/taru medical container (mobile fullHeal)
+ [
+ ["B_Slingload_01_Medevac_F", "Land_Pod_Heli_Transport_04_medevac_F"],
+ {
+ [_this] spawn {
+ params ["_medvacbox"];
+ waitUntil {sleep 0.1; time > 0};
+ [_medvacbox] remoteExecCall ["KPLIB_fnc_addActionsFullHeal", 0, _medvacbox];
+ };
+ }
+ ],
+
+ // Add KPLQ Radio to static radios
+ [
+ ["Land_FMradio_F", "Land_SurvivalRadio_F", "CUP_radio_b", "Radio", "Radio_Old"],
+ {
+ if (KPLIB_klpq) then {
+ [_this] spawn {
+ params ["_radio"];
+ waitUntil {sleep 0.1; time > 0};
+ [_radio, false] remoteExecCall ["klpq_musicRadio_fnc_addRadio", 0, _radio];
+ };
+ };
+ }
+ ],
+
+ // Set MH47 Probe
+ [
+ ["CUP_B_MH47E_USA"],
+ {
+ [_this,nil,["Hide_Probe",0]] call BIS_fnc_initVehicle;
+ }
],
// Disable autocombat (if set in parameters) and fleeing
[
- ["Man"],
+ ["CAManBase"],
{
if (!(KPLIB_param_autodanger) && {(side _this) isEqualTo KPLIB_side_player}) then {
_this disableAI "AUTOCOMBAT";
diff --git a/Missionframework/KPLIB_transportConfigs.sqf b/Missionframework/KPLIB_transportConfigs.sqf
index c959777aa..32c22edd9 100644
--- a/Missionframework/KPLIB_transportConfigs.sqf
+++ b/Missionframework/KPLIB_transportConfigs.sqf
@@ -2,7 +2,7 @@
File: KPLIB_transportConfigs.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2020-05-10
- Last Update: 2020-05-15
+ Last Update: 2023-03-02
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -14,20 +14,63 @@
// Vehicle transport configs
KPLIB_transportConfigs = [
+ ["PRACS_SLA_URAL_Open", -6.5, [0,0,0.32],[0,-1.8,0.32]],
+ ["PRACS_SLA_Ural_flat_bed", -6.5, [0.73,0,0.32],[-0.73,0,0.32],[0.73,-1.4,0.32],[-0.73,-1.4,0.32],[0.73,-2.8,0.32],[-0.73,-2.8,0.32]],
+ ["PRACS_SLA_MAZ_Transport", -6.5, [0.8,0.8,2.25],[-0.8,0.8,2.25],[0.8,-0.7,2.25],[-0.8,-0.7,2.25],[0.8,-2.2,2.25],[-0.8,-2.2,2.25],[0.8,-3.7,2.25],[-0.8,-3.7,2.25],[0.8,-5.2,2.25],[-0.8,-5.2,2.25]],
+ ["PRACS_m548", -6.5, [0.2,-0.2,-0.35],[0.2,-1.6,-0.35]],
+ ["PRACS_M250", -6.5, [0,-1.0,2.12],[0,-2.5,2.12],[0,-4.0,2.12]],
+ ["PRACS_M250_flat_bed", -6.5, [0.66,-1.0,2.12],[-0.79,-1.0,2.12],[0.66,-2.5,2.12],[-0.79,-2.5,2.12],[0.66,-4.0,2.12],[-0.79,-4.0,2.12]],
+ ["PRACS_M450", -6.5, [0.66,-1.0,2.12],[-0.79,-1.0,2.12],[0.66,-2.5,2.12],[-0.79,-2.5,2.12],[0.66,-4.0,2.12],[-0.79,-4.0,2.12],[0.66,-5.5,2.12],[-0.79,-5.5,2.12],[0.66,-7.0,2.12],[-0.79,-7.0,2.12]],
+ ["rhsusf_mtvr_mk23_d", -6.5, [0,-0.4,0.1],[0,-2.4,0.1]],
+ ["rhsusf_mtvr_mk23_apk_d", -6.5, [0,-0.4,-0.3],[0,-2.4,-0.3]],
+ ["rhsusf_mtvr_mk23_apk_m2_d", -6.5, [0,-0.4,-0.75],[0,-2.4,-0.75]],
+ ["rhsusf_mtvr_mk37_d", -6.5, [0,0.5,0.1],[0,-1.0,0.1],[0,-2.5,0.1]],
+ ["rhsusf_mtvr_mk37_apk_d", -6.5, [0,0.5,-0.3],[0,-1.0,-0.3],[0,-2.5,-0.3]],
+ ["rhsusf_mtvr_mk37_apk_m2_d", -6.5, [0,0.5,-0.75],[0,-1.0,-0.75],[0,-2.5,-0.75]],
+ ["rhsusf_mtvr_mk27_d", -6.5, [0,0.9,0.1],[0,-0.6,0.1],[0,-2.1,0.1],[0,-3.6,0.1]],
+ ["rhsusf_mtvr_mk27_apk_d", -6.5, [0,0.9,-0.3],[0,-0.6,-0.3],[0,-2.1,-0.3],[0,-3.6,-0.3]],
+ ["rhsusf_mtvr_mk27_apk_m2_d", -6.5, [0,0.9,-0.75],[0,-0.6,-0.75],[0,-2.1,-0.75],[0,-3.6,-0.75]],
+ ["rhsusf_mtvr_mk23_wd", -6.5, [0,-0.4,0.1],[0,-2.4,0.1]],
+ ["rhsusf_mtvr_mk23_apk_wd", -6.5, [0,-0.4,-0.3],[0,-2.4,-0.3]],
+ ["rhsusf_mtvr_mk23_apk_m2_wd", -6.5, [0,-0.4,-0.75],[0,-2.4,-0.75]],
+ ["rhsusf_mtvr_mk37_wd", -6.5, [0,0.5,0.1],[0,-1.0,0.1],[0,-2.5,0.1]],
+ ["rhsusf_mtvr_mk37_apk_wd", -6.5, [0,0.5,-0.3],[0,-1.0,-0.3],[0,-2.5,-0.3]],
+ ["rhsusf_mtvr_mk37_apk_m2_wd", -6.5, [0,0.5,-0.75],[0,-1.0,-0.75],[0,-2.5,-0.75]],
+ ["rhsusf_mtvr_mk27_wd", -6.5, [0,0.9,0.1],[0,-0.6,0.1],[0,-2.1,0.1],[0,-3.6,0.1]],
+ ["rhsusf_mtvr_mk27_apk_wd", -6.5, [0,0.9,-0.3],[0,-0.6,-0.3],[0,-2.1,-0.3],[0,-3.6,-0.3]],
+ ["rhsusf_mtvr_mk27_apk_m2_wd", -6.5, [0,0.9,-0.75],[0,-0.6,-0.75],[0,-2.1,-0.75],[0,-3.6,-0.75]],
+ ["rhusf_m1077a1_flatrack_Base", -6.5, [0,2,0.1],[0,0.6,0.1],[0,-0.8,0.1],[0,-2.2,0.1]],
+ ["rhusf_m1077a1_wd", -6.5, [0,2,0.1],[0,0.6,0.1],[0,-0.8,0.1],[0,-2.2,0.1]],
+ ["rhsusf_m871_trailer_wd", -6.5, [-0,4.2,0.65],[0.73,2.8,0.65],[-0.73,2.8,0.65],[0.73,1.4,0.65],[-0.73,1.4,0.65],[0.73,0,0.65],[-0.73,0,0.65],[0.73,-1.4,0.65],[-0.73,-1.4,0.65],[0.73,-2.8,0.65],[-0.73,-2.8,0.65],[-0,4.2,1.68],[0.73,2.8,1.68],[-0.73,2.8,1.68],[0.73,1.4,1.68],[-0.73,1.4,1.68],[0.73,0,1.68],[-0.73,0,1.68],[0.73,-1.4,1.68],[-0.73,-1.4,1.68],[0.73,-2.8,1.68],[-0.73,-2.8,1.68]],
+ ["rhsusf_m870_trailer_wd", -6.5, [0.73,2.9,0.25],[-0.73,2.9,0.25],[0.73,1.5,0.25],[-0.73,1.5,0.25],[0.73,0.1,0.25],[-0.73,0.1,0.25],[0.73,-1.3,0.25],[-0.73,-1.3,0.25],[0.73,-2.7,0.25],[-0.73,-2.7,0.25],[0.73,-4.1,0.25],[-0.73,-4.1,0.25],[0.73,2.9,1.28],[-0.73,2.9,1.28],[0.73,1.5,1.28],[-0.73,1.5,1.28],[0.73,0.1,1.28],[-0.73,0.1,1.28],[0.73,-1.3,1.28],[-0.73,-1.3,1.28],[0.73,-2.7,1.28],[-0.73,-2.7,1.28],[0.73,-4.1,1.28],[-0.73,-4.1,1.28]],
+ ["SX2220", -6.5, [0,0.15,-0.6],[0,-1.35,-0.6],[0,-2.85,-0.6]],
+ ["SX2220_Flat", -6.5, [0,0.15,-0.6],[0,-1.35,-0.6],[0,-2.85,-0.6]],
+ ["SX2316", -6.5, [0,0.5,-0.6],[0,-1.1,-0.6],[0,-2.7,-0.6],[-0,-4.3,-0.6]],
+ ["SX2316_Flat", -6.5, [0,0.5,-0.6],[0,-1.1,-0.6],[0,-2.7,-0.6],[-0,-4.3,-0.6]],
+ ["Sparky_JSDF_Overhaul_JSDF_JGSDF_112T", -6.5, [0,-0.5,1],[0,-2,1]],
+ ["Sparky_JSDF_Overhaul_gac_JGSDF_35t_flatbed", -6.5, [0,0.5,-1],[0,-1,-1],[0,-2.5,-1]],
+ ["Sparky_JSDF_Overhaul_gac_JGSDF_35t_truck", -6.5, [0,0.5,-1],[0,-1,-1],[0,-2.5,-1]],
+ ["Sparky_JSDF_Overhaul_gac_JGSDF_CH47J", -8, [0,-3.535,-1.9], [0,-1.819,-1.9], [0,0.98,-1.9], [0,3.037,-1.9]],
+ ["Sparky_Japan_2035_Kamaz_JGSDF", -6.5, [0,0.3,0.05], [0,-1.3,0.05], [0,-2.9,0.05]],
+ ["Sparky_Japan_2035_Kamaz_Covered_JGSDF", -6.5, [0,0.3,0.05], [0,-1.3,0.05], [0,-2.9,0.05]],
+ ["Sparky_Japan_2035_Kamaz_JGSDF_Desert", -6.5, [0,0.3,0.05], [0,-1.3,0.05], [0,-2.9,0.05]],
+ ["Sparky_Japan_2035_Kamaz_Covered_JGSDF_Desert", -6.5, [0,0.3,0.05], [0,-1.3,0.05], [0,-2.9,0.05]],
+ ["B_FR_H225_MCaracal_01", -6.5, [0,1.5,1.9], [0,0.0,1.9], [0,-1.5,1.9], [0,-2.5,1.9], [0,-4.0,2.2]],
["B_Heli_Transport_03_F", -8, [0,2.2,-1], [0,0.5,-1], [0,-1.2,-1]],
["B_Heli_Transport_03_unarmed_F", -8, [0,2.2,-1], [0,0.5,-1], [0,-1.2,-1]],
- ["B_T_Truck_01_cargo_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
- ["B_T_Truck_01_covered_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
- ["B_T_Truck_01_flatbed_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
- ["B_T_Truck_01_transport_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
["B_T_VTOL_01_infantry_F", -7.5,[0,4.7,-4.88],[0,3,-4.88],[0,1.3,-4.88],[0,-0.4,-4.88],[0,-2.1,-4.88]],
["B_T_VTOL_01_vehicle_F", -7.5,[0,4.7,-4.88],[0,3,-4.88],[0,1.3,-4.88],[0,-0.4,-4.88],[0,-2.1,-4.88]],
- ["B_Truck_01_cargo_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
- ["B_Truck_01_covered_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
- ["B_Truck_01_flatbed_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
- ["B_Truck_01_transport_F", -6.5, [0,-0.4,0.4], [0,-2.1,0.4], [0,-3.8,0.4]],
+ ["B_Truck_01_flatbed_F", -6.5, [0.06,0.45,-0.28], [0.06,-1.0,-0.28], [0.06,-2.45,-0.28], [0.06,-3.9,-0.28]],
+ ["B_T_Truck_01_flatbed_F", -6.5, [0.06,0.45,-0.28], [0.06,-1.0,-0.28], [0.06,-2.45,-0.28], [0.06,-3.9,-0.28]],
+ ["B_Truck_01_cargo_F", -6.5, [0,0.4,0], [0,-1.3,0], [0,-3.0,0]],
+ ["B_T_Truck_01_cargo_F", -6.5, [0,0.4,0], [0,-1.3,0], [0,-3.0,0]],
+ ["B_Truck_01_covered_F", -6.5, [0,-0.4,0], [0,-2.1,0], [0,-3.8,0]],
+ ["B_T_Truck_01_covered_F", -6.5, [0,-0.4,0], [0,-2.1,0], [0,-3.8,0]],
+ ["B_Truck_01_transport_F", -6.5, [0,-0.4,0], [0,-2.1,0], [0,-3.8,0]],
+ ["B_T_Truck_01_transport_F", -6.5, [0,-0.4,0], [0,-2.1,0], [0,-3.8,0]],
["BW_AW101_Trans_Heer_F", -6.5, [0,4.2,-1.45], [0,2.5,-1.45], [0,0.8,-1.45], [0,-0.9,-1.45]],
["BW_LKW7T_Trans_F", -6.5, [0,-0.8,0.4], [0,-2.4,0.4], [0,-4.0,0.4]],
+ ["BWA3_WLP14_Flatbed_Oliv", -6.5, [0.73,2.5,-0.65],[-0.73,2.5,-0.65],[0.73,1.05,-0.65],[-0.73,1.05,-0.65],[0.73,-0.4,-0.65],[-0.73,-0.4,-0.65],[0.73,-1.85,-0.65],[-0.73,-1.85,-0.65]],
["C_IDAP_Van_02_transport_F", -5, [0,-1.75,0]],
["C_IDAP_Van_02_vehicle_F", -5, [0,0.5,0], [0,-1.75,0]],
["C_Offroad_01_F", -6.5, [0,-1.7,0.4]],
@@ -40,6 +83,7 @@ KPLIB_transportConfigs = [
["CUP_B_C130J_Cargo_USMC",-10,[0,0.6,-3.76],[0,-0.9,-3.76],[0,-2.5,-3.76],[0,-4.2,-3.76],[0,2.2,-3.76],[0,3.8,-3.76],[0,5.5,-3.76]],
["CUP_B_CH47F_GB", -8, [0,-3.535,-1.9], [0,-1.819,-1.9], [0,0.98,-1.9], [0,3.037,-1.9]],
["CUP_B_CH47F_USA", -8, [0,-3.535,-1.9], [0,-1.819,-1.9], [0,0.98,-1.9], [0,3.037,-1.9]],
+ ["CUP_B_MH47E_USA", -8, [0,-3.535,1.5], [0,-1.819,1.5], [0,0.98,1.6], [0,3.037,1.7]],
["CUP_B_CH53E_USMC", -8, [0,7.566,-3], [0,5.749,-3], [0,3.847,-3], [0,2,-3], [0,0.338,-3]],
["CUP_B_Kamaz_CDF", -6.5, [0,-0.4,0], [0,-2.6,0]],
["CUP_B_Kamaz_Open_CDF", -6.5, [0.12,0.4,0], [0.12,-1.8,0]],
@@ -49,6 +93,8 @@ KPLIB_transportConfigs = [
["CUP_B_MI6A_CDF", -8, [0,6,-0.6], [0,4.3,-0.6], [0,2.5,-0.6], [0,0.5,-0.6], [0,-1.2,-0.6], [0,-3.1,-0.6]],
["CUP_B_MTVR_USA", -6.5, [-0.009,-0.647,0.112], [-0.054,-2.535,0.112]],
["CUP_B_MTVR_USMC", -6.5, [-0.009,-0.647,0.112], [-0.054,-2.535,0.112]],
+ ["UK3CB_B_MTVR_Closed_WDL", -6.5, [-0.009,-0.647,0.112], [-0.054,-2.535,0.112]],
+ ["UK3CB_B_MTVR_Open_WDL", -6.5, [-0.009,-0.647,0.112], [-0.054,-2.535,0.112]],
["CUP_B_MV22_USMC_RAMPGUN", -8, [0,3.3,-1.6], [0,1,-1.6], [0,-1.3,-1.6]],
["CUP_B_MV22_USMC", -8, [0,3.3,-1.6], [0,1,-1.6], [0,-1.3,-1.6]],
["CUP_B_MV22_VIV_USMC", -8, [0,3.3,-1.6], [0,1,-1.6], [0,-1.3,-1.6]],
@@ -70,8 +116,12 @@ KPLIB_transportConfigs = [
["CUP_O_C130J_Cargo_TKA",-10,[0,0.6,-3.76],[0,-0.9,-3.76],[0,-2.5,-3.76],[0,-4.2,-3.76],[0,2.2,-3.76],[0,3.8,-3.76],[0,5.5,-3.76]],
["CUP_O_Kamaz_Open_RU", -6.5, [0.12,0.4,0], [0.12,-1.8,0]],
["CUP_O_Kamaz_RU", -6.5, [0,-0.4,0], [0,-2.6,0]],
- ["CUP_O_MI6A_CHDKZ", -8, [0,6,-0.6], [0,4.3,-0.6], [0,2.5,-0.6], [0,0.5,-0.6], [0,-1.2,-0.6], [0,-3.1,-0.6]],
- ["CUP_O_MI6A_TKA", -8, [0,6,-0.6], [0,4.3,-0.6], [0,2.5,-0.6], [0,0.5,-0.6], [0,-1.2,-0.6], [0,-3.1,-0.6]],
+ ["CUP_O_MI6A_RU", -11.0, [0,5.5,-0.8], [0,5.5,0.4], [0,4.0,-0.8], [0,4.0,0.4], [0,2.5,-0.8], [0,2.5,0.4], [0,1.0,-0.8], [0,1.0,0.4], [0,-0.5,-0.8], [0,-0.5,0.4], [0,-2.0,-0.8], [0,-2.0,0.4], [0,-3.5,-0.8], [0,-3.5,0.4], [0,-5.0,-0.8], [0,-5.0,0.4]],
+ ["CUP_O_MI6T_RU", -11.0, [0,5.5,-0.8], [0,5.5,0.4], [0,4.0,-0.8], [0,4.0,0.4], [0,2.5,-0.8], [0,2.5,0.4], [0,1.0,-0.8], [0,1.0,0.4], [0,-0.5,-0.8], [0,-0.5,0.4], [0,-2.0,-0.8], [0,-2.0,0.4], [0,-3.5,-0.8], [0,-3.5,0.4], [0,-5.0,-0.8], [0,-5.0,0.4]],
+ ["CUP_O_MI6A_CHDKZ", -11.0, [0,5.5,-0.8], [0,5.5,0.4], [0,4.0,-0.8], [0,4.0,0.4], [0,2.5,-0.8], [0,2.5,0.4], [0,1.0,-0.8], [0,1.0,0.4], [0,-0.5,-0.8], [0,-0.5,0.4], [0,-2.0,-0.8], [0,-2.0,0.4], [0,-3.5,-0.8], [0,-3.5,0.4], [0,-5.0,-0.8], [0,-5.0,0.4]],
+ ["CUP_O_MI6A_TKA", -11.0, [0,5.5,-0.8], [0,5.5,0.4], [0,4.0,-0.8], [0,4.0,0.4], [0,2.5,-0.8], [0,2.5,0.4], [0,1.0,-0.8], [0,1.0,0.4], [0,-0.5,-0.8], [0,-0.5,0.4], [0,-2.0,-0.8], [0,-2.0,0.4], [0,-3.5,-0.8], [0,-3.5,0.4], [0,-5.0,-0.8], [0,-5.0,0.4]],
+ //["CUP_O_MI6A_CHDKZ", -8, [0,6,-0.6], [0,4.3,-0.6], [0,2.5,-0.6], [0,0.5,-0.6], [0,-1.2,-0.6], [0,-3.1,-0.6]],
+ //["CUP_O_MI6A_TKA", -8, [0,6,-0.6], [0,4.3,-0.6], [0,2.5,-0.6], [0,0.5,-0.6], [0,-1.2,-0.6], [0,-3.1,-0.6]],
["CUP_O_Mi8_SLA_1", -6.5, [0,2.7,-1.5], [00,0.6,-1.5]],
["CUP_O_Ural_CHDKZ", -6.5, [0,-0.5,0], [0,-2.5,0]],
["CUP_O_Ural_Open_CHDKZ", -6.5, [0,-0.5,0], [0,-2.5,0]],
@@ -122,6 +172,13 @@ KPLIB_transportConfigs = [
["rhs_kamaz5350_flatbed_vdv", -4.5, [0,0.67,-0.4], [0,-0.88,-0.4], [0,-2.43,-0.4]],
["rhs_kamaz5350_open_vdv", -4.5, [0,0.67,-0.4], [0,-0.88,-0.4], [0,-2.43,-0.4]],
["rhs_kamaz5350_vdv", -4.5, [0,0.67,-0.4], [0,-0.88,-0.4], [0,-2.43,-0.4]],
+ ["rhs_kraz255b1_cargo_open_msv", -6.5, [0,0.25,-0.4],[0,-1.2,-0.3],[0,-2.65,-0.3]],
+ ["rhs_kraz255b1_flatbed_msv", -6.5, [0,0.25,-0.4],[0,-1.2,-0.3],[0,-2.65,-0.3]],
+ ["rhs_zil131_open_msv", -6.5, [0,0,-0.6],[0,-1.7,-0.6]],
+ ["rhs_zil131_flatbed_msv", -6.5, [0,0,-0.6],[0,-1.7,-0.6]],
+ ["CUP_V3S_Open_NAPA", -6.5, [0,0,-0.6],[0,-1.7,-0.6]],
+ ["UK3CB_B_G_V3S_Open", -6.5, [0,0,-0.6],[0,-1.7,-0.6]],
+ ["UK3CB_B_G_V3S_Recovery", -6.5, [-0,0.7,-0.6],[0,-0.9,-0.6],[0,-2.5,-0.6]],
["RHS_Ural_Civ_03", -6.5, [0,-0.2,0.55], [0,-1.4,0.55], [0,-2.55,0.55]],
["RHS_Ural_MSV_01", -6.5, [0,-0.2,0.55], [0,-1.4,0.55], [0,-2.55,0.55]],
["RHS_Ural_Open_Civ_03", -6.5, [0,-0.2,0.55], [0,-1.4,0.55], [0,-2.55,0.55]],
@@ -130,6 +187,8 @@ KPLIB_transportConfigs = [
["RHS_Ural_Open_MSV_01", -6.5, [0,-0.2,0.55], [0,-1.4,0.55], [0,-2.55,0.55]],
["RHS_Ural_Open_VDV_01", -6.5, [0,-0.2,0.55], [0,-1.4,0.55], [0,-2.55,0.55]],
["RHS_Ural_VDV_01", -6.5, [0,-0.2,0.55], [0,-1.4,0.55], [0,-2.55,0.55]],
+ ["rhsusf_CH53E_USMC_GAU21", -11.0, [0,7,-3.2], [0,7,-2.0], [0,5.5,-3.2], [0,5.5,-2.0], [0,4,-3.2], [0,4,-2.0], [0,2.5,-3.2], [0,2.5,-2.0], [0,1.0,-3.2], [0,1.0,-2.0], [0,-0.5,-3.2], [0,-0.5,-2.0]],
+ ["rhsusf_CH53e_USMC_cargo", -11.0, [0,7,-3.2], [0,7,-2.0], [0,5.5,-3.2], [0,5.5,-2.0], [0,4,-3.2], [0,4,-2.0], [0,2.5,-3.2], [0,2.5,-2.0], [0,1.0,-3.2], [0,1.0,-2.0], [0,-0.5,-3.2], [0,-0.5,-2.0]],
["rhsusf_CH53E_USMC_D", -11.0, [0,7,-3.2], [0,7,-2.0], [0,5.5,-3.2], [0,5.5,-2.0], [0,4,-3.2], [0,4,-2.0], [0,2.5,-3.2], [0,2.5,-2.0], [0,1.0,-3.2], [0,1.0,-2.0], [0,-0.5,-3.2], [0,-0.5,-2.0]],
["rhsusf_CH53E_USMC", -11.0, [0,7,-3.2], [0,7,-2.0], [0,5.5,-3.2], [0,5.5,-2.0], [0,4,-3.2], [0,4,-2.0], [0,2.5,-3.2], [0,2.5,-2.0], [0,1.0,-3.2], [0,1.0,-2.0], [0,-0.5,-3.2], [0,-0.5,-2.0]],
["rhsusf_M1078A1P2_B_D_flatbed_fmtv_usarmy", -5.0, [0,-0.2,0.45], [0,-1.9,0.45]],
@@ -163,10 +222,16 @@ KPLIB_transportConfigs = [
["rhsusf_M977A4_BKIT_usarmy_wd", -6.5, [0,0.4,0.8], [0,-1.3,0.8], [0,-3,0.8]],
["rhsusf_M977A4_usarmy_d", -6.5, [0,0.4,0.8], [0,-1.3,0.8], [0,-3,0.8]],
["rhsusf_M977A4_usarmy_wd", -6.5, [0,0.4,0.8], [0,-1.3,0.8], [0,-3,0.8]],
+ ["rhsusf_m998_d_2dr", -4.5, [0,-0.9,-0.2]],
+ ["rhsusf_m998_w_2dr", -4.5, [0,-0.9,-0.2]],
["rhsusf_m998_d_2dr_halftop", -4.5, [0,-0.9,-0.2]],
["rhsusf_m998_w_2dr_halftop", -4.5, [0,-0.9,-0.2]],
["sfp_tgb30", -5, [0.2,-0.1,2], [0.2,-2.1,2]],
["sfp_tgb40", -5, [0.1,-0.7,2], [0.1,-2.7,2]],
+ ["ffp_nh90", -6.5, [0,3.5,-1.2], [0,2,-1.2], [0,0.5,-1.2], [0,-1.0,-1.2],[0,3.5,-0.8], [0,2,-0.8], [0,0.5,-0.8], [0,-1.0,-0.8]],
+ ["ffp_nh90_armed", -6.5, [0,3.5,-1.2], [0,2,-1.2], [0,0.5,-1.2], [0,-1.0,-1.2],[0,3.5,-0.8], [0,2,-0.8], [0,0.5,-0.8], [0,-1.0,-0.8]],
+ ["nh90", -6.5, [0,3.5,-1.2], [0,2,-1.2], [0,0.5,-1.2], [0,-1.0,-1.2],[0,3.5,-0.8], [0,2,-0.8], [0,0.5,-0.8], [0,-1.0,-0.8]],
+ ["nh90armed", -6.5, [0,3.5,-1.2], [0,2,-1.2], [0,0.5,-1.2], [0,-1.0,-1.2],[0,3.5,-0.8], [0,2,-0.8], [0,0.5,-0.8], [0,-1.0,-0.8]],
["UK3CB_BAF_Merlin_HC3_18_DPMT", -7.5, [0.25,3.7,-1.5], [0.25,1.6,-1.5], [0.25,-0.4,-1.5]],
["UK3CB_BAF_Merlin_HC3_32_MTP", -7.5, [0.25,3.7,-1.5], [0.25,1.6,-1.5], [0.25,-0.4,-1.5]],
["UK3CB_BAF_Merlin_HC3_CSAR_MTP", -7.5, [0.25,3.7,-1.5], [0.25,1.6,-1.5], [0.25,-0.4,-1.5]],
@@ -180,8 +245,10 @@ KPLIB_transportConfigs = [
["uns_nvatruck_mg", -5, [0,-1.05,0.8], [0,-2.75,0.8]],
["uns_nvatruck_open", -5, [0,-1.05,0.8], [0,-2.75,0.8]],
["uns_nvatruck", -5, [0,-1.05,0.8], [0,-2.75,0.8]],
- ["USAF_C130J_Cargo",-10,[0,3.6,2.08],[0,2,2.08],[0,0.3,2.08],[0,-1.3,2.08],[0,5.3,2.08],[0,7,2.08]],
- ["USAF_C130J",-10,[0,3.6,2.08],[0,2,2.08],[0,0.3,2.08],[0,-1.3,2.08]],
+ //["USAF_C130J_Cargo",-10,[0,3.6,2.08],[0,2,2.08],[0,0.3,2.08],[0,-1.3,2.08],[0,5.3,2.08],[0,7,2.08]],
+ //["USAF_C130J",-10,[0,3.6,2.08],[0,2,2.08],[0,0.3,2.08],[0,-1.3,2.08]],
+ ["USAF_C130J", -9.5, [-0.8,8.0,-4.0], [0.8,8.0,-4.0], [-0.8,8.0,-2.8], [0.8,8.0,-2.8], [-0.8,6.5,-4.0], [0.8,6.5,-4.0], [-0.8,6.5,-2.8], [0.8,6.5,-2.8], [-0.8,5.0,-4.0], [0.8,5.0,-4.0], [-0.8,5.0,-2.8], [0.8,5.0,-2.8], [-0.8,3.5,-4.0], [0.8,3.5,-4.0], [-0.8,3.5,-2.8], [0.8,3.5,-2.8], [-0.8,2.0,-4.0], [0.8,2.0,-4.0], [-0.8,2.0,-2.8], [0.8,2.0,-2.8], [-0.8,0.5,-4.0], [0.8,0.5,-4.0], [-0.8,0.5,-2.8], [0.8,0.5,-2.8]],
+ ["USAF_C130J_Cargo", -9.5, [-0.8,8.0,-4.0], [0.8,8.0,-4.0], [-0.8,8.0,-2.8], [0.8,8.0,-2.8], [-0.8,6.5,-4.0], [0.8,6.5,-4.0], [-0.8,6.5,-2.8], [0.8,6.5,-2.8], [-0.8,5.0,-4.0], [0.8,5.0,-4.0], [-0.8,5.0,-2.8], [0.8,5.0,-2.8], [-0.8,3.5,-4.0], [0.8,3.5,-4.0], [-0.8,3.5,-2.8], [0.8,3.5,-2.8], [-0.8,2.0,-4.0], [0.8,2.0,-4.0], [-0.8,2.0,-2.8], [0.8,2.0,-2.8], [-0.8,0.5,-4.0], [0.8,0.5,-4.0], [-0.8,0.5,-2.8], [0.8,0.5,-2.8]],
["USAF_C17",-10,[-1.2,14.4,-0.43],[-1.2,12.8,-0.43],[-1.2,11.1,-0.43],[-1.2,9.5,-0.43],[-1.2,7.9,-0.43],[-1.2,6.3,-0.43],[-1.2,4.6,-0.43],[-1.2,3,-0.43],[-1.2,1.4,-0.43],[-1.2,-0.1,-0.43],[-1.2,-1.8,-0.43],[1.2,14.4,-0.43],[1.2,12.8,-0.43],[1.2,11.2,-0.43],[1.2,9.6,-0.43],[1.2,7.9,-0.43],[1.2,6.3,-0.43],[1.2,4.7,-0.43],[1.2,3.1,-0.43],[1.2,1.5,-0.43],[1.2,0,-0.43],[1.2,-1.7,-0.43],[-1.2,14.5,1.22],[-1.2,12.8,1.22],[-1.2,11.2,1.2],[-1.2,9.5,1.22],[-1.2,7.9,1.22],[-1.2,6.3,1.22],[-1.2,4.7,1.22],[-1.2,3,1.22],[-1.2,1.4,1.22],[-1.2,-0.1,1.22],[-1.2,-1.7,1.22],[1.2,14.5,1.22],[1.2,12.8,1.22],[1.2,11.2,1.22],[1.2,9.6,1.22],[1.2,8,1.22],[1.2,6.3,1.22],[1.2,4.7,1.22],[1.2,3.1,1.22],[1.2,1.5,1.22],[1.2,0,1.22],[1.2,-1.6,1.22]]
];
@@ -243,4 +310,4 @@ KPLIB_small_storage_positions = [
[-0.75,-1.79883,0.6],
[0.850586,-1.79883,0.6],
[2.4502,-1.79883,0.6]
-];
+];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/VAM_GUI_classes.hpp b/Missionframework/VAM_GUI/VAM_GUI_classes.hpp
new file mode 100644
index 000000000..84d25b2c2
--- /dev/null
+++ b/Missionframework/VAM_GUI/VAM_GUI_classes.hpp
@@ -0,0 +1,111 @@
+////////////////////////////////////////////////////////
+// GUI EDITOR OUTPUT START (by UNITnormal, v1.063, #Vurive)
+////////////////////////////////////////////////////////
+//missionConfigFile >> "VAM_GUI"
+class VAM_GUI
+{
+ idd = 4900;
+ OnLoad = "[] spawn fnc_VAM_GUI_check;";
+ OnUnload = "[] spawn fnc_VAM_variable_cleaner;";
+ movingEnable = false;
+ controls[] = {"VAM_BG", "VAM_Title", "VAM_Text_Camo" ,"VAM_Text_Comp", "VAM_Confirm", "VAM_Reset", "VAM_List_Camo", "VAM_List_Comp", "VAM_Current_Vehicle_1", "VAM_Current_Vehicle_2"};
+ objects[] = {};
+
+ class VAM_BG: VAM_IGUIBack
+ {
+ idc = -1;
+ x = 0.329375 * safezoneW + safezoneX;
+ y = 0.318 * safezoneH + safezoneY;
+ w = 0.34125 * safezoneW;
+ h = 0.392 * safezoneH;
+ };
+ class VAM_Title: VAM_RscText
+ {
+ idc = -1;
+ text = $STR_VAM_MAIN_MENU_NAME;
+ x = 0.3425 * safezoneW + safezoneX;
+ y = 0.332 * safezoneH + safezoneY;
+ w = 0.144375 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+ class VAM_Text_Camo: VAM_RscText
+ {
+ idc = -1;
+ text = $STR_VAM_CAMOUFLAGE;
+ x = 0.3425 * safezoneW + safezoneX;
+ y = 0.374 * safezoneH + safezoneY;
+ w = 0.065625 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+ class VAM_Text_Comp: VAM_RscText
+ {
+ idc = -1;
+ text = $STR_VAM_COMPONENT;
+ x = 0.506562 * safezoneW + safezoneX;
+ y = 0.374 * safezoneH + safezoneY;
+ w = 0.065625 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+ class VAM_Confirm: VAM_RscButton
+ {
+ idc = 4930;
+ text = $STR_VAM_CONFIRM_MENU;
+ action = "closeDialog 0;";
+ x = 0.611562 * safezoneW + safezoneX;
+ y = 0.332 * safezoneH + safezoneY;
+ w = 0.0459375 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+ class VAM_List_Camo: VAM_RscListbox
+ {
+ idc = 4910;
+ style = LB_TEXTURES;
+ sizeEx = 0.035;
+ x = 0.3425 * safezoneW + safezoneX;
+ y = 0.416 * safezoneH + safezoneY;
+ w = 0.150937 * safezoneW;
+ h = 0.224 * safezoneH;
+ };
+ class VAM_List_Comp: VAM_RscListbox
+ {
+ idc = 4920;
+ style = LB_TEXTURES + LB_MULTI;
+ sizeEx = 0.035;
+ x = 0.506562 * safezoneW + safezoneX;
+ y = 0.416 * safezoneH + safezoneY;
+ w = 0.150937 * safezoneW;
+ h = 0.224 * safezoneH;
+ };
+ class VAM_Reset: VAM_RscButton
+ {
+ idc = 4940;
+ text = $STR_VAM_RESET_VEHICLE;
+ OnButtonClick = "[] spawn fnc_VAM_reset;";
+ x = 0.559062 * safezoneW + safezoneX;
+ y = 0.332 * safezoneH + safezoneY;
+ w = 0.0459375 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+ class VAM_Current_Vehicle_1: VAM_RscText
+ {
+ idc = -1;
+ text = $STR_VAM_CURRENT_VEHICLE;
+ x = 0.3425 * safezoneW + safezoneX;
+ y = 0.654 * safezoneH + safezoneY;
+ w = 0.091875 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+ class VAM_Current_Vehicle_2: VAM_RscText
+ {
+ idc = 4950;
+ sizeEx = 0.03;
+ text = "";
+ x = 0.427812 * safezoneW + safezoneX;
+ y = 0.654 * safezoneH + safezoneY;
+ w = 0.124687 * safezoneW;
+ h = 0.028 * safezoneH;
+ };
+};
+////////////////////////////////////////////////////////
+// GUI EDITOR OUTPUT END
+////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/VAM_GUI_controls.hpp b/Missionframework/VAM_GUI/VAM_GUI_controls.hpp
new file mode 100644
index 000000000..56cfba5ad
--- /dev/null
+++ b/Missionframework/VAM_GUI/VAM_GUI_controls.hpp
@@ -0,0 +1,382 @@
+///////////////////////////////////////////////////////////////////////////
+/// Base Classes
+///////////////////////////////////////////////////////////////////////////
+class VAM_RscText
+{
+ deletable = 0;
+ fade = 0;
+ access = 0;
+ type = 0;
+ idc = -1;
+ colorBackground[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0
+ };
+ colorText[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ text = "";
+ fixedWidth = 0;
+ x = 0;
+ y = 0;
+ h = 0.037;
+ w = 0.3;
+ style = 0;
+ shadow = 1;
+ colorShadow[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.5
+ };
+ font = "RobotoCondensed";
+ SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ linespacing = 1;
+ tooltipColorText[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ tooltipColorBox[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ tooltipColorShade[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.65
+ };
+};
+class VAM_RscListBox
+{
+ deletable = 0;
+ fade = 0;
+ access = 0;
+ type = 5;
+ rowHeight = 0;
+ colorText[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorDisabled[] =
+ {
+ 1,
+ 1,
+ 1,
+ 0.25
+ };
+ colorScrollbar[] =
+ {
+ 1,
+ 0,
+ 0,
+ 0
+ };
+ colorSelect[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ colorSelect2[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ colorSelectBackground[] =
+ {
+ 0.95,
+ 0.95,
+ 0.95,
+ 1
+ };
+ colorSelectBackground2[] =
+ {
+ 1,
+ 1,
+ 1,
+ 0.5
+ };
+ colorBackground[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.3
+ };
+ soundSelect[] =
+ {
+ "\A3\ui_f\data\sound\RscListbox\soundSelect",
+ 0.09,
+ 1
+ };
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
+ arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
+ colorPicture[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorPictureSelected[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorPictureDisabled[] =
+ {
+ 1,
+ 1,
+ 1,
+ 0.25
+ };
+ colorPictureRight[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorPictureRightSelected[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorPictureRightDisabled[] =
+ {
+ 1,
+ 1,
+ 1,
+ 0.25
+ };
+ colorTextRight[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorSelectRight[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ colorSelect2Right[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ tooltipColorText[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ tooltipColorBox[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ tooltipColorShade[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.65
+ };
+ class ListScrollBar
+ {
+ width = 0;
+ height = 0;
+ scrollSpeed = 0.01;
+ arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
+ arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
+ border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
+ thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
+ color[] = {1,1,1,1};
+ };
+ x = 0;
+ y = 0;
+ w = 0.3;
+ h = 0.3;
+ style = 16;
+ font = "RobotoCondensed";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ shadow = 0;
+ colorShadow[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.5
+ };
+ period = 1.2;
+ maxHistoryDelay = 1;
+};
+class VAM_RscButton
+{
+ deletable = 0;
+ fade = 0;
+ access = 0;
+ type = 1;
+ text = "";
+ colorText[] =
+ {
+ 1,
+ 1,
+ 1,
+ 1
+ };
+ colorDisabled[] =
+ {
+ 1,
+ 1,
+ 1,
+ 0.25
+ };
+ colorBackground[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.5
+ };
+ colorBackgroundDisabled[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0.5
+ };
+ colorBackgroundActive[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ colorFocused[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ colorShadow[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0
+ };
+ colorBorder[] =
+ {
+ 0,
+ 0,
+ 0,
+ 1
+ };
+ soundEnter[] =
+ {
+ "\A3\ui_f\data\sound\RscButton\soundEnter",
+ 0.09,
+ 1
+ };
+ soundPush[] =
+ {
+ "\A3\ui_f\data\sound\RscButton\soundPush",
+ 0.09,
+ 1
+ };
+ soundClick[] =
+ {
+ "\A3\ui_f\data\sound\RscButton\soundClick",
+ 0.09,
+ 1
+ };
+ soundEscape[] =
+ {
+ "\A3\ui_f\data\sound\RscButton\soundEscape",
+ 0.09,
+ 1
+ };
+ idc = -1;
+ style = 2;
+ x = 0;
+ y = 0;
+ w = 0.095589;
+ h = 0.039216;
+ shadow = 2;
+ font = "RobotoCondensed";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ url = "";
+ offsetX = 0;
+ offsetY = 0;
+ offsetPressedX = 0;
+ offsetPressedY = 0;
+ borderSize = 0;
+};
+class VAM_IGUIBack
+{
+ type = 0;
+ idc = 124;
+ style = 128;
+ text = "";
+ colorText[] =
+ {
+ 0,
+ 0,
+ 0,
+ 0
+ };
+ font = "RobotoCondensed";
+ sizeEx = 0;
+ shadow = 0;
+ x = 0.1;
+ y = 0.1;
+ w = 0.1;
+ h = 0.1;
+ colorbackground[] =
+ {
+ "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])",
+ "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])",
+ "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])",
+ "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"
+ };
+};
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/VAM_GUI_init.sqf b/Missionframework/VAM_GUI/VAM_GUI_init.sqf
new file mode 100644
index 000000000..8d702d650
--- /dev/null
+++ b/Missionframework/VAM_GUI/VAM_GUI_init.sqf
@@ -0,0 +1,71 @@
+//Vehicle Appearance Manager GUI init
+if (!hasInterface) exitWith {};
+
+//Options
+//Default setting for VAM_condition_check_options is [];. Add option what you want and separate them with comma. Ex. VAM_condition_check_options = [1,2];
+//For example if you change VAM_condition_check_options to [1,2] from [], you can use VAM when you are near objects those are in list OR in certain marker area
+//1 : Activate when player is near vehicles those are in list.
+//2 : Activate when player is in certain marker area. (Marker name should be like "VAM_service_area_0", "VAM_service_area_1". You could have multiple marker area.)
+//3 : Activate when player is near KP Liberation FOB
+VAM_condition_check_options = [1];
+VAM_repair_vehicle_list = [
+ "Land_Workbench_01_F"
+];
+
+//Exception for bug fix and additional cosmetic change. Check out fnc_VAM_GUI_check.sqf.
+VAM_exceptions = [
+ "I_APC_Wheeled_03_cannon_F","B_APC_Wheeled_03_cannon_F",
+ "I_LT_01_AT_F","I_LT_01_scout_F","I_LT_01_AA_F","I_LT_01_cannon_F",
+ "O_APC_Wheeled_02_rcws_F","O_T_APC_Wheeled_02_rcws_ghex_F",
+ "O_APC_Wheeled_02_rcws_v2_F","O_T_APC_Wheeled_02_rcws_v2_ghex_F",
+ "B_Heli_Light_01_dynamicLoadout_F","B_Heli_Light_01_armed_F","B_Heli_Light_01_F",
+ "B_Heli_Attack_01_dynamicLoadout_F","B_Heli_Attack_01_F",
+ "O_Heli_Light_02_dynamicLoadout_F","O_Heli_Light_02_F","O_Heli_Light_02_unarmed_F","O_Heli_Light_02_v2_F",
+ "B_UGV_01_rcws_F","B_T_UGV_01_rcws_olive_F","O_UGV_01_rcws_F","O_T_UGV_01_rcws_ghex_F","I_UGV_01_rcws_F"
+];
+
+//Function preload
+fnc_VAM_GUI_check = compileFinal preprocessFileLineNumbers "VAM_GUI\functions\fnc_VAM_GUI_check.sqf";
+fnc_VAM_action = compileFinal preprocessFileLineNumbers "VAM_GUI\functions\fnc_VAM_action.sqf";
+fnc_VAM_reset = compileFinal preprocessFileLineNumbers "VAM_GUI\functions\fnc_VAM_reset.sqf";
+fnc_VAM_condition_check = compileFinal preprocessFileLineNumbers "VAM_GUI\functions\fnc_VAM_condition_check.sqf";
+fnc_VAM_variable_cleaner = compileFinal preprocessFileLineNumbers "VAM_GUI\functions\fnc_VAM_variable_cleaner.sqf";
+
+//Vehicle Function
+fnc_VAM_common_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\fnc_VAM_common_setup.sqf";
+fnc_VAM_common_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\fnc_VAM_common_camo.sqf";
+fnc_VAM_common_comp = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\fnc_VAM_common_comp.sqf";
+fnc_VAM_common_camo_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\fnc_VAM_common_camo_check.sqf";
+fnc_VAM_common_comp_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\fnc_VAM_common_comp_check.sqf";
+
+fnc_VAM_Gorgon_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Gorgon\fnc_VAM_Gorgon_setup.sqf";
+fnc_VAM_Gorgon_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Gorgon\fnc_VAM_Gorgon_camo.sqf";
+fnc_VAM_Gorgon_camo_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Gorgon\fnc_VAM_Gorgon_camo_check.sqf";
+
+fnc_VAM_Nyx_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Nyx\fnc_VAM_Nyx_setup.sqf";
+fnc_VAM_Nyx_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Nyx\fnc_VAM_Nyx_camo.sqf";
+
+fnc_VAM_Marid_v1_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Marid\fnc_VAM_Marid_v1_setup.sqf";
+fnc_VAM_Marid_v1_comp = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Marid\fnc_VAM_Marid_v1_comp.sqf";
+fnc_VAM_Marid_v1_comp_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Marid\fnc_VAM_Marid_v1_comp_check.sqf";
+fnc_VAM_Marid_v2_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Marid\fnc_VAM_Marid_v2_setup.sqf";
+fnc_VAM_Marid_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Marid\fnc_VAM_Marid_camo.sqf";
+
+fnc_VAM_HBPN_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\HBPN\fnc_VAM_HBPN_setup.sqf";
+fnc_VAM_HBPN_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\HBPN\fnc_VAM_HBPN_camo.sqf";
+fnc_VAM_HBPN_camo_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\HBPN\fnc_VAM_HBPN_camo_check.sqf";
+
+fnc_VAM_Blackfoot_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Blackfoot\fnc_VAM_Blackfoot_setup.sqf";
+fnc_VAM_Blackfoot_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Blackfoot\fnc_VAM_Blackfoot_camo.sqf";
+fnc_VAM_Blackfoot_camo_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Blackfoot\fnc_VAM_Blackfoot_camo_check.sqf";
+
+fnc_VAM_Orca_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Orca\fnc_VAM_Orca_setup.sqf";
+fnc_VAM_Orca_camo = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Orca\fnc_VAM_Orca_camo.sqf";
+fnc_VAM_Orca_camo_check = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\Orca\fnc_VAM_Orca_camo_check.sqf";
+
+fnc_VAM_UGV_rcws_setup = compileFinal preprocessFileLineNumbers "VAM_GUI\vehicles\exceptions\UGV_rcws\fnc_VAM_UGV_rcws_setup.sqf";
+
+if !(count VAM_condition_check_options isEqualTo 0) then {[] spawn fnc_VAM_condition_check;};
+[] spawn fnc_VAM_action;
+
+["----- Vehicle Appearance Manager ready -----", "VAM"] call KPLIB_fnc_log;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/defines.hpp b/Missionframework/VAM_GUI/defines.hpp
new file mode 100644
index 000000000..e4110378f
--- /dev/null
+++ b/Missionframework/VAM_GUI/defines.hpp
@@ -0,0 +1,93 @@
+///////////////////////////////////////////////////////////////////////////
+/// Styles
+///////////////////////////////////////////////////////////////////////////
+
+// Control types
+#define CT_STATIC 0
+#define CT_BUTTON 1
+#define CT_EDIT 2
+#define CT_SLIDER 3
+#define CT_COMBO 4
+#define CT_LISTBOX 5
+#define CT_TOOLBOX 6
+#define CT_CHECKBOXES 7
+#define CT_PROGRESS 8
+#define CT_HTML 9
+#define CT_STATIC_SKEW 10
+#define CT_ACTIVETEXT 11
+#define CT_TREE 12
+#define CT_STRUCTURED_TEXT 13
+#define CT_CONTEXT_MENU 14
+#define CT_CONTROLS_GROUP 15
+#define CT_SHORTCUTBUTTON 16
+#define CT_XKEYDESC 40
+#define CT_XBUTTON 41
+#define CT_XLISTBOX 42
+#define CT_XSLIDER 43
+#define CT_XCOMBO 44
+#define CT_ANIMATED_TEXTURE 45
+#define CT_OBJECT 80
+#define CT_OBJECT_ZOOM 81
+#define CT_OBJECT_CONTAINER 82
+#define CT_OBJECT_CONT_ANIM 83
+#define CT_LINEBREAK 98
+#define CT_USER 99
+#define CT_MAP 100
+#define CT_MAP_MAIN 101
+#define CT_LISTNBOX 102
+#define CT_CHECKBOX 77
+
+// Static styles
+#define ST_POS 0x0F
+#define ST_HPOS 0x03
+#define ST_VPOS 0x0C
+#define ST_LEFT 0x00
+#define ST_RIGHT 0x01
+#define ST_CENTER 0x02
+#define ST_DOWN 0x04
+#define ST_UP 0x08
+#define ST_VCENTER 0x0C
+
+#define ST_TYPE 0xF0
+#define ST_SINGLE 0x00
+#define ST_MULTI 0x10
+#define ST_TITLE_BAR 0x20
+#define ST_PICTURE 0x30
+#define ST_FRAME 0x40
+#define ST_BACKGROUND 0x50
+#define ST_GROUP_BOX 0x60
+#define ST_GROUP_BOX2 0x70
+#define ST_HUD_BACKGROUND 0x80
+#define ST_TILE_PICTURE 0x90
+#define ST_WITH_RECT 0xA0
+#define ST_LINE 0xB0
+
+#define ST_SHADOW 0x100
+#define ST_NO_RECT 0x200
+#define ST_KEEP_ASPECT_RATIO 0x800
+
+#define ST_TITLE ST_TITLE_BAR + ST_CENTER
+
+// Slider styles
+#define SL_DIR 0x400
+#define SL_VERT 0
+#define SL_HORZ 0x400
+
+#define SL_TEXTURES 0x10
+
+// progress bar
+#define ST_VERTICAL 0x01
+#define ST_HORIZONTAL 0
+
+// Listbox styles
+#define LB_TEXTURES 0x10
+#define LB_MULTI 0x20
+
+// Tree styles
+#define TR_SHOWROOT 1
+#define TR_AUTOCOLLAPSE 2
+
+// MessageBox styles
+#define MB_BUTTON_OK 1
+#define MB_BUTTON_CANCEL 2
+#define MB_BUTTON_USER 4
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/functions/fnc_VAM_GUI_check.sqf b/Missionframework/VAM_GUI/functions/fnc_VAM_GUI_check.sqf
new file mode 100644
index 000000000..3f9138288
--- /dev/null
+++ b/Missionframework/VAM_GUI/functions/fnc_VAM_GUI_check.sqf
@@ -0,0 +1,23 @@
+//VAM Check
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _vehicleclass = typeof VAM_targetvehicle;
+private _vehiclename = getText (configFile >> "CfgVehicles" >> _vehicleclass >> "displayName");
+private _currentvehicletext = _VAM_display displayCtrl 4950;
+_currentvehicletext ctrlSetText _vehiclename;
+
+if !(_vehicleclass in VAM_exceptions) exitWith {
+ [] spawn fnc_VAM_common_setup;
+};
+
+Switch (true) do {
+ Case (_vehicleclass in ["I_APC_Wheeled_03_cannon_F","B_APC_Wheeled_03_cannon_F"]) : {[] spawn fnc_VAM_Gorgon_setup;};
+ Case (_vehicleclass in ["I_LT_01_AT_F","I_LT_01_scout_F","I_LT_01_AA_F","I_LT_01_cannon_F"]) : {[] spawn fnc_VAM_Nyx_setup;};
+ Case (_vehicleclass in ["O_APC_Wheeled_02_rcws_F","O_T_APC_Wheeled_02_rcws_ghex_F"]) : {[] spawn fnc_VAM_Marid_v1_setup;};
+ Case (_vehicleclass in ["O_APC_Wheeled_02_rcws_v2_F","O_T_APC_Wheeled_02_rcws_v2_ghex_F"]) : {[] spawn fnc_VAM_Marid_v2_setup;};
+ Case (_vehicleclass in ["B_Heli_Light_01_dynamicLoadout_F","B_Heli_Light_01_armed_F","B_Heli_Light_01_F"]) : {[] spawn fnc_VAM_HBPN_setup;};
+ Case (_vehicleclass in ["B_Heli_Attack_01_dynamicLoadout_F","B_Heli_Attack_01_F"]) : {[] spawn fnc_VAM_Blackfoot_setup;};
+ Case (_vehicleclass in ["O_Heli_Light_02_dynamicLoadout_F","O_Heli_Light_02_F","O_Heli_Light_02_unarmed_F","O_Heli_Light_02_v2_F"]) : {[] spawn fnc_VAM_Orca_setup;};
+ Case (_vehicleclass in ["B_UGV_01_rcws_F","B_T_UGV_01_rcws_olive_F","O_UGV_01_rcws_F","O_T_UGV_01_rcws_ghex_F","I_UGV_01_rcws_F"]) : {[] spawn fnc_VAM_UGV_rcws_setup;};
+ default {};
+};
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/functions/fnc_VAM_action.sqf b/Missionframework/VAM_GUI/functions/fnc_VAM_action.sqf
new file mode 100644
index 000000000..645d86771
--- /dev/null
+++ b/Missionframework/VAM_GUI/functions/fnc_VAM_action.sqf
@@ -0,0 +1,60 @@
+//VAM Action
+disableSerialization;
+VAM_condition_result = true;
+VAM_cursor_condition = false;
+VAM_check_locality = compileFinal "
+ params ['_target', '_caller'];
+ if (!(owner _target isEqualTo _caller) && !(unitIsUAV _target)) then {
+ _target setOwner _caller;
+ };
+ if (!(owner _target isEqualTo _caller) && unitIsUAV _target) then {
+ (group _target) setGroupOwner _caller;
+ };
+";
+VAM_action = compileFinal "
+ player addAction
+ [
+ 'Modify Vehicle',
+ {
+ if (VAM_cursor_condition) then {
+ VAM_targetvehicle = cursorObject;
+ _my_id = clientOwner;
+ [VAM_targetvehicle, _my_id] remoteExec ['VAM_check_locality', 2];
+ } else {
+ VAM_targetvehicle = vehicle player;
+ };
+ 0 = createDialog 'VAM_GUI';
+ },
+ [], 0, false, true, '',
+ 'VAM_condition_result && (VAM_cursor_condition || (!(player isEqualTo vehicle player) && (player isEqualTo driver vehicle player)))',
+ -1
+ ];
+";
+
+[] spawn VAM_action;
+
+player addEventHandler ["Respawn", {[] spawn VAM_action;}];
+
+while {true} do {
+ if (player isEqualTo vehicle player && cursorObject isKindOf "AllVehicles" && player distance cursorObject < 10 && ((crew cursorObject isEqualTo []) || (unitIsUAV cursorObject && !(isUAVConnected cursorObject)))) then {
+ _vehicleclass = typeof cursorObject;
+ _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+ _camo_check = true;
+ if (count _camo_path < 1 && !(_vehicleclass in VAM_exceptions)) then {
+ _camo_check = false;
+ };
+ _comp_path = configProperties [configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources", "!('' isEqualTo getText (_x >> 'DisplayName'))"];
+ _comp_check = true;
+ if (count _comp_path < 1) then {
+ _comp_check = false;
+ };
+ if (_camo_check || _comp_check) then {
+ VAM_cursor_condition = true;
+ } else {
+ VAM_cursor_condition = false;
+ };
+ } else {
+ VAM_cursor_condition = false;
+ };
+ sleep 1;
+};
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/functions/fnc_VAM_condition_check.sqf b/Missionframework/VAM_GUI/functions/fnc_VAM_condition_check.sqf
new file mode 100644
index 000000000..60bd1a5b3
--- /dev/null
+++ b/Missionframework/VAM_GUI/functions/fnc_VAM_condition_check.sqf
@@ -0,0 +1,45 @@
+//Vehicle Appearance Manager Condition Check
+VAM_condition_1 = false;
+VAM_condition_2 = false;
+VAM_condition_3 = false;
+
+while {true} do {
+ if (1 in VAM_condition_check_options) then {
+ private _repair_vehicle_finder = vehicles inAreaArray [getPos player, 10, 10, 0, false, 10] select {(typeof _x) in VAM_repair_vehicle_list};
+ if (count _repair_vehicle_finder > 0 && alive player) then {
+ VAM_condition_1 = true;
+ } else {
+ VAM_condition_1 = false;
+ };
+ };
+ if (2 in VAM_condition_check_options) then {
+ VAM_condition_2 = false;
+ {
+ if (_x find "VAM_service_area_" > -1) then {
+ if !(VAM_condition_2) then {
+ if (player inArea _x && alive player) then {
+ VAM_condition_2 = true;
+ };
+ };
+ };
+ } forEach allMapMarkers;
+ };
+ if (3 in VAM_condition_check_options) then {
+ private _nearfob = [] call KPLIB_fnc_getNearestFob;
+ private _fobdistance = 9999;
+ if (count _nearfob isEqualTo 3) then {
+ _fobdistance = player distance _nearfob;
+ };
+ if ((_fobdistance < KPLIB_range_fob) && (alive player)) then {
+ VAM_condition_3 = true;
+ } else {
+ VAM_condition_3 = false;
+ };
+ };
+ if (VAM_condition_1 or VAM_condition_2 or VAM_condition_3) then {
+ VAM_condition_result = true;
+ } else {
+ VAM_condition_result = false;
+ };
+ sleep 1;
+};
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/functions/fnc_VAM_reset.sqf b/Missionframework/VAM_GUI/functions/fnc_VAM_reset.sqf
new file mode 100644
index 000000000..8331510f2
--- /dev/null
+++ b/Missionframework/VAM_GUI/functions/fnc_VAM_reset.sqf
@@ -0,0 +1,4 @@
+[VAM_targetvehicle, true, [true]] call bis_fnc_initVehicle;
+VAM_check_fnc_delay = false;
+hint localize "STR_VAM_COMPLETE_RESET";
+hint "";
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/functions/fnc_VAM_variable_cleaner.sqf b/Missionframework/VAM_GUI/functions/fnc_VAM_variable_cleaner.sqf
new file mode 100644
index 000000000..15001484d
--- /dev/null
+++ b/Missionframework/VAM_GUI/functions/fnc_VAM_variable_cleaner.sqf
@@ -0,0 +1,10 @@
+uisleep 0.1;
+camo_class_names = nil;
+camo_display_names = nil;
+comp_class_names = nil;
+comp_display_names = nil;
+current_comp = nil;
+VAM_camo_check_complete = nil;
+VAM_comp_check_complete = nil;
+VAM_check_fnc_delay = nil;
+VAM_targetvehicle = nil;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/license.txt b/Missionframework/VAM_GUI/license.txt
new file mode 100644
index 000000000..209e51bc9
--- /dev/null
+++ b/Missionframework/VAM_GUI/license.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 UNIT_normal
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/read_me_EN.txt b/Missionframework/VAM_GUI/read_me_EN.txt
new file mode 100644
index 000000000..9c29f0b23
--- /dev/null
+++ b/Missionframework/VAM_GUI/read_me_EN.txt
@@ -0,0 +1,50 @@
+Vehicle Appearance Manager (GUI) by UNIT_normal
+This allows you to change camouflage and component via GUI.
+VAM supports most of vanilla vehicles even mod vehicles.
+You can apply custom textures by making exceptions.
+
+Known issue
+- Some components are linked each other. It's not VAM's limitation.
+- Some components aren't compatible each other. It's not VAM's limitation.
+- Some vehicles don't have default customizing value. Reset will not work in that case.
+
+Installation
+1. Put VAM folder on your mission folder.
+2. Put stringtable.xml or copy & paste contents to your stringtable.xml.
+3. Add this to init.sqf.
+[] execVM "VAM_GUI\VAM_GUI_init.sqf";
+4. Add this to description.ext.
+#include "VAM_GUI\defines.hpp"
+#include "VAM_GUI\VAM_GUI_controls.hpp"
+#include "VAM_GUI\VAM_GUI_classes.hpp"
+
+Option
+- In VAM_GUI_init.sqf, you can enable multiple check systems.
+
+Changelog
+1.0
+Released
+1.10
+Marid(v1 and v2) fixed. (I suggest you change every v1 to v2)
+1.11
+List text size adjusted
+1.12
+Liberation FOB distance check system is now available
+1.20
+Hidden texture option added for Hummingbird/Pawnee, Blackfoot, Orca
+1.21
+Bug fixed (Error message when user is trying to scroll down below last component with arrow down key.)
+1.22
+Action method changed. UGV RCWS bug fixed. Introducing fnc_VAM_variable_cleaner
+1.3
+Added more condition check options
+1.31, 1.32
+Minor change
+1.40
+Action mechanism changed
+1.41
+Locality problem fixed, some activation conditions has been changed.
+
+Special Thanks
+DCinside ARMA Minor Gallery for testing
+JLD server for on-server testing
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/read_me_KR.txt b/Missionframework/VAM_GUI/read_me_KR.txt
new file mode 100644
index 000000000..e63561bbb
--- /dev/null
+++ b/Missionframework/VAM_GUI/read_me_KR.txt
@@ -0,0 +1,50 @@
+차량 형상 관리자 (GUI) by UNIT_normal
+GUI를 통해 위장과 구성품을 바꿀 수 있습니다.
+VAM은 대부분의 바닐라, 모드 차량들을 지원합니다.
+예외처리를 하여 커스텀 텍스쳐를 적용하는 것이 가능합니다.
+
+알려진 문제들
+- 몇몇 구성품들이 서로 연결되어 있음. BI가 바꾸기 전까지 단독 적용 등은 불가.
+- 몇몇 구성품들은 서로 호환되지 않음. BI가 바꾸기 전까지 동시 적용 등은 불가.
+- 리셋 시 기본 값이 없을 시 변화 없음.
+
+설치
+1. VAM 폴더를 미션폴더에 넣기
+2. stringtable.xml을 넣거나 내용물을 기존에 있던 것에 삽입
+3. init.sqf에 다음 줄 삽입
+[] execVM "VAM_GUI\VAM_GUI_init.sqf";
+4. description.ext에 다음 줄 삽입
+#include "VAM_GUI\defines.hpp"
+#include "VAM_GUI\VAM_GUI_controls.hpp"
+#include "VAM_GUI\VAM_GUI_classes.hpp"
+
+옵션
+- VAM_GUI_init.sqf에서 각종 옵션 활성화 가능
+
+변경내역
+1.0
+공개
+1.10
+마리드 구형과 신형 버그 픽스 (구형은 신형으로 대체하십시오)
+1.11
+리스트 글자 크기 조정
+1.12
+리버레이션 FOB 체크 기능 사용가능
+1.20
+Hummingbird/Pawnee, Blackfoot, Orca 히든 텍스쳐 옵션 추가
+1.21
+구성품 리스트에서 화살표 아래키로 마지막 이하로 내려가려고 할때 나오는 에러 픽스
+1.22
+액션 방법 변경, UGV RCWS 버그 픽스, fnc_VAM_variable_cleaner 추가
+1.3
+컨디션 체크 옵션 추가
+1.31, 1.32
+마이너 체인지
+1.40
+액션 매커니즘 변경
+1.41
+로컬리티 문제 해결, 기타 발동조건 변경
+
+고마운 곳들
+디시인사이드 아르마(ARMA) 마이너 갤러리 (테스트 협조)
+JLD 서버 (서버 상 테스트)
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_camo.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_camo.sqf
new file mode 100644
index 000000000..f28375e03
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_camo.sqf
@@ -0,0 +1,9 @@
+//VAM Blackfoot Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+
+VAM_targetvehicle setObjectTextureGlobal [0, _selected_camo_class_name];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_camo_check.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_camo_check.sqf
new file mode 100644
index 000000000..c9a241952
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_camo_check.sqf
@@ -0,0 +1,16 @@
+//VAM Blackfoot Vehicle Camouflage Check
+disableSerialization;
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _check = getObjectTextures VAM_targetvehicle select 0;
+
+//Check current applied camouflage
+{
+ if (_check isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+} forEach camo_class_names;
+
+VAM_camo_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_setup.sqf
new file mode 100644
index 000000000..ad1cb7d7f
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Blackfoot/fnc_VAM_Blackfoot_setup.sqf
@@ -0,0 +1,82 @@
+//VAM Blackfoot Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+private _textures_names = [
+ "STR_VAM_DARK_GREEN_CAMO",
+ "STR_VAM_GREEN_CAMO"
+];
+private _textures = [
+ "a3\air_f_beta\heli_attack_01\data\heli_attack_01_co.paa",
+ "a3\air_f\heli_light_02\data\heli_light_02_common_co.paa"
+];
+{
+ camo_class_names pushBack _x;
+} forEach _textures;
+{
+ camo_display_names pushBack (localize _x);
+} forEach _textures_names;
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_Blackfoot_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Blackfoot_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_Blackfoot_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_camo.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_camo.sqf
new file mode 100644
index 000000000..5874f9791
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_camo.sqf
@@ -0,0 +1,19 @@
+//VAM Gorgon Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+private _gorgon_blufor = [
+ "a3\armor_f_gamma\apc_wheeled_03\data\apc_wheeled_03_ext_co.paa",
+ "a3\armor_f_gamma\apc_wheeled_03\data\apc_wheeled_03_ext2_co.paa",
+ "a3\armor_f_gamma\apc_wheeled_03\data\rcws30_co.paa",
+ "a3\armor_f_gamma\apc_wheeled_03\data\apc_wheeled_03_ext_alpha_co.paa",
+ "a3\armor_f\data\camonet_nato_desert_co.paa",
+ "a3\armor_f\data\cage_sand_co.paa"];
+if (_selected_camo_class_name isEqualTo localize "STR_VAM_BLUFOR_CAMO") exitWith {
+ [VAM_targetvehicle,["Indep",1],nil,nil] call BIS_fnc_initVehicle;
+ {VAM_targetvehicle setObjectTextureGlobal [_forEachIndex, _x];} forEach _gorgon_blufor;
+};
+[VAM_targetvehicle,[_selected_camo_class_name,1],nil,nil] call BIS_fnc_initVehicle;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_camo_check.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_camo_check.sqf
new file mode 100644
index 000000000..7bd0a4ecd
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_camo_check.sqf
@@ -0,0 +1,35 @@
+//VAM Gorgon Vehicle Camouflage Check
+disableSerialization;
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+
+private _camo_slot = _getvc select 0;
+private _current_camo = _camo_slot select 0;
+private _gorgon_blufor_check = getObjectTextures VAM_targetvehicle;
+private _gorgon_blufor = [
+ "a3\armor_f_gamma\apc_wheeled_03\data\apc_wheeled_03_ext_co.paa",
+ "a3\armor_f_gamma\apc_wheeled_03\data\apc_wheeled_03_ext2_co.paa",
+ "a3\armor_f_gamma\apc_wheeled_03\data\rcws30_co.paa",
+ "a3\armor_f_gamma\apc_wheeled_03\data\apc_wheeled_03_ext_alpha_co.paa",
+ "a3\armor_f\data\camonet_nato_desert_co.paa",
+ "a3\armor_f\data\cage_sand_co.paa"];
+
+//Check current applied camouflage
+if (_gorgon_blufor_check isEqualTo _gorgon_blufor) exitWith {
+ {
+ if (localize "STR_VAM_BLUFOR_CAMO" isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+ } forEach camo_class_names;
+ VAM_camo_check_complete = true;
+};
+{
+ if (_current_camo isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+} forEach camo_class_names;
+
+VAM_camo_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_setup.sqf
new file mode 100644
index 000000000..b2a64d6ef
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Gorgon/fnc_VAM_Gorgon_setup.sqf
@@ -0,0 +1,77 @@
+//VAM Gorgon Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+{_class = configName _x; camo_class_names pushBack _class;} forEach _camo_path;
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources" >> _x >> "DisplayName"); camo_display_names pushBack _name;} forEach camo_class_names;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+camo_class_names pushBack (localize "STR_VAM_BLUFOR_CAMO");
+camo_display_names pushBack (localize "STR_VAM_BLUFOR_CAMO");
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_Gorgon_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Gorgon_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_Gorgon_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_camo.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_camo.sqf
new file mode 100644
index 000000000..8d3f20512
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_camo.sqf
@@ -0,0 +1,9 @@
+//VAM Hummingbird/Pawnee Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+
+VAM_targetvehicle setObjectTextureGlobal [0, _selected_camo_class_name];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_camo_check.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_camo_check.sqf
new file mode 100644
index 000000000..3696f842d
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_camo_check.sqf
@@ -0,0 +1,16 @@
+//VAM Hummingbird/Pawnee Vehicle Camouflage Check
+disableSerialization;
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _check = getObjectTextures VAM_targetvehicle select 0;
+
+//Check current applied camouflage
+{
+ if (_check isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+} forEach camo_class_names;
+
+VAM_camo_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_setup.sqf
new file mode 100644
index 000000000..5a9a0786f
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/HBPN/fnc_VAM_HBPN_setup.sqf
@@ -0,0 +1,84 @@
+//VAM Hummingbird/Pawnee Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+private _textures_names = [
+ "STR_VAM_GREEN_CAMO",
+ "STR_VAM_BLACK_CAMO",
+ "STR_VAM_AAF_CAMO"
+];
+private _textures = [
+ "a3\air_f\heli_light_01\data\heli_light_01_ext_blufor_co.paa",
+ "a3\air_f\heli_light_01\data\heli_light_01_ext_ion_co.paa",
+ "a3\air_f\heli_light_01\data\heli_light_01_ext_indp_co.paa"
+];
+{
+ camo_class_names pushBack _x;
+} forEach _textures;
+{
+ camo_display_names pushBack (localize _x);
+} forEach _textures_names;
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_HBPN_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_HBPN_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_HBPN_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_camo.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_camo.sqf
new file mode 100644
index 000000000..2e169f54c
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_camo.sqf
@@ -0,0 +1,28 @@
+//VAM Marid Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+private _hex = [
+ "a3\armor_f_beta\apc_wheeled_02\data\apc_wheeled_02_ext_01_opfor_co.paa",
+ "a3\armor_f_beta\apc_wheeled_02\data\apc_wheeled_02_ext_02_opfor_co.paa",
+ "a3\data_f\vehicles\turret_opfor_co.paa",
+ "a3\armor_f\data\camonet_csat_hex_desert_co.paa",
+ "a3\armor_f\data\cage_csat_co.paa"
+];
+private _greenhex = [
+ "a3\armor_f_exp\apc_wheeled_02\data\apc_wheeled_02_ext_01_ghex_co.paa",
+ "a3\armor_f_exp\apc_wheeled_02\data\apc_wheeled_02_ext_02_ghex_co.paa",
+ "a3\data_f_exp\vehicles\turret_ghex_co.paa",
+ "a3\armor_f\data\camonet_csat_hex_green_co.paa",
+ "a3\armor_f\data\cage_csat_green_co.paa"
+];
+[VAM_targetvehicle,[_selected_camo_class_name,1],nil,nil] call BIS_fnc_initVehicle;
+if (_selected_camo_class_name isEqualTo "Hex") then {
+ {VAM_targetvehicle setObjectTextureGlobal [_forEachIndex, _x];} forEach _hex;
+};
+if (_selected_camo_class_name isEqualTo "GreenHex") then {
+ {VAM_targetvehicle setObjectTextureGlobal [_forEachIndex, _x];} forEach _greenhex;
+};
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_comp.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_comp.sqf
new file mode 100644
index 000000000..43431a168
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_comp.sqf
@@ -0,0 +1,21 @@
+//VAM Marid v1 Vehicle Comp Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_comp = _VAM_display displayCtrl 4920;
+
+private _list_selection = lbSelection _list_comp select 0;
+if (isNil "_list_selection") exitWith {};
+private _comp_array = current_comp;
+private "_comp_change";
+if (_comp_array select _list_selection isEqualTo 0) then {_comp_change = 1;};
+if (_comp_array select _list_selection isEqualTo 1) then {_comp_change = 0;};
+_comp_array set [_list_selection, _comp_change];
+
+private _comp_array_total = [];
+{
+ _comp_array_total pushBack (comp_class_names select _forEachIndex);
+ _comp_array_total pushBack (_comp_array select _forEachIndex);
+} forEach comp_class_names;
+[VAM_targetvehicle,nil,_comp_array_total,nil] call BIS_fnc_initVehicle;
+
+[] spawn fnc_VAM_Marid_v1_comp_check;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_comp_check.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_comp_check.sqf
new file mode 100644
index 000000000..cc468ed7e
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_comp_check.sqf
@@ -0,0 +1,23 @@
+//VAM Marid v1 Vehicle Component Check
+disableSerialization;
+if (VAM_check_fnc_delay) then {
+ current_comp = [0,0,0,0,0];
+ [VAM_targetvehicle,nil,["showBags",0,"showCanisters",0,"showTools",0,"showCamonetHull",0,"showSLATHull",0],nil] call BIS_fnc_initVehicle;
+};
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_comp = _VAM_display displayCtrl 4920;
+
+//Reset list selection
+{
+ _list_comp lbSetSelected [_forEachIndex, false];
+} forEach current_comp;
+
+//Check current applied components
+{
+ if (_x isEqualTo 1) then {
+ _list_comp lbSetSelected [_forEachIndex, true];
+ };
+} forEach current_comp;
+
+VAM_comp_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_setup.sqf
new file mode 100644
index 000000000..3591468a9
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v1_setup.sqf
@@ -0,0 +1,71 @@
+//VAM Marid v1 Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+{_class = configName _x; camo_class_names pushBack _class;} forEach _camo_path;
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources" >> _x >> "DisplayName"); camo_display_names pushBack _name;} forEach camo_class_names;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+
+//Get all components(animations)
+comp_class_names = ["showBags","showCanisters","showTools","showCamonetHull","showSLATHull"];
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> "O_APC_Wheeled_02_rcws_v2_F" >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+current_comp = [0,0,0,0,0];
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_Marid_v1_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Marid_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Marid_v1_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_common_camo_check; [] spawn fnc_VAM_Marid_v1_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
+
+"NOTICE" hintC localize "STR_VAM_MARID_V1_NOTICE";
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v2_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v2_setup.sqf
new file mode 100644
index 000000000..da5b2d625
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Marid/fnc_VAM_Marid_v2_setup.sqf
@@ -0,0 +1,75 @@
+//VAM Marid v2 Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+{_class = configName _x; camo_class_names pushBack _class;} forEach _camo_path;
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources" >> _x >> "DisplayName"); camo_display_names pushBack _name;} forEach camo_class_names;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Marid_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_common_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Nyx/fnc_VAM_Nyx_camo.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Nyx/fnc_VAM_Nyx_camo.sqf
new file mode 100644
index 000000000..f5dd96f67
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Nyx/fnc_VAM_Nyx_camo.sqf
@@ -0,0 +1,11 @@
+//VAM Nyx Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+[VAM_targetvehicle,[_selected_camo_class_name,1],nil,nil] call BIS_fnc_initVehicle;
+if (_selected_camo_class_name isEqualTo "Indep_Olive") then {
+ VAM_targetvehicle setObjectTextureGlobal [2, "A3\Armor_F\Data\camonet_NATO_Green_CO.paa"];
+};
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Nyx/fnc_VAM_Nyx_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Nyx/fnc_VAM_Nyx_setup.sqf
new file mode 100644
index 000000000..68c949023
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Nyx/fnc_VAM_Nyx_setup.sqf
@@ -0,0 +1,75 @@
+//VAM Nyx Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+{_class = configName _x; camo_class_names pushBack _class;} forEach _camo_path;
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources" >> _x >> "DisplayName"); camo_display_names pushBack _name;} forEach camo_class_names;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Nyx_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_common_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_camo.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_camo.sqf
new file mode 100644
index 000000000..56e911195
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_camo.sqf
@@ -0,0 +1,13 @@
+//VAM Orca Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+private _texture = "a3\air_f\heli_light_02\data\heli_light_02_ext_indp_co.paa";
+if (_selected_camo_class_name isEqualTo localize "STR_VAM_AAF_CAMO") exitWith {
+ [VAM_targetvehicle,["Opfor",1],nil,nil] call BIS_fnc_initVehicle;
+ VAM_targetvehicle setObjectTextureGlobal [0, _texture];
+};
+[VAM_targetvehicle,[_selected_camo_class_name,1],nil,nil] call BIS_fnc_initVehicle;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_camo_check.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_camo_check.sqf
new file mode 100644
index 000000000..5120bfb28
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_camo_check.sqf
@@ -0,0 +1,29 @@
+//VAM Orca Vehicle Camouflage Check
+disableSerialization;
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+
+private _camo_slot = _getvc select 0;
+private _current_camo = _camo_slot select 0;
+private _check = getObjectTextures VAM_targetvehicle select 0;
+private _texture = "a3\air_f\heli_light_02\data\heli_light_02_ext_indp_co.paa";
+
+//Check current applied camouflage
+if (_check isEqualTo _texture) exitWith {
+ {
+ if (localize "STR_VAM_AAF_CAMO" isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+ } forEach camo_class_names;
+ VAM_camo_check_complete = true;
+};
+{
+ if (_current_camo isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+} forEach camo_class_names;
+
+VAM_camo_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_setup.sqf
new file mode 100644
index 000000000..d2665e4c0
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/Orca/fnc_VAM_Orca_setup.sqf
@@ -0,0 +1,77 @@
+//VAM Orca Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+{_class = configName _x; camo_class_names pushBack _class;} forEach _camo_path;
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources" >> _x >> "DisplayName"); camo_display_names pushBack _name;} forEach camo_class_names;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+camo_class_names pushBack (localize "STR_VAM_AAF_CAMO");
+camo_display_names pushBack (localize "STR_VAM_AAF_CAMO");
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_Orca_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_Orca_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_Orca_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/exceptions/UGV_rcws/fnc_VAM_UGV_rcws_setup.sqf b/Missionframework/VAM_GUI/vehicles/exceptions/UGV_rcws/fnc_VAM_UGV_rcws_setup.sqf
new file mode 100644
index 000000000..fc3fa71e9
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/exceptions/UGV_rcws/fnc_VAM_UGV_rcws_setup.sqf
@@ -0,0 +1,76 @@
+//VAM UGV RCWS Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _confirm = _VAM_display displayCtrl 4930;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [
+ "Blufor","GreenHex","IDAP","Indep","Olive","Opfor"
+];
+camo_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources" >> _x >> "DisplayName"); camo_display_names pushBack _name;} forEach camo_class_names;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_common_camo_check; [] spawn fnc_VAM_common_comp_check;}];
+_confirm ctrlAddEventHandler ["ButtonClick", {[] spawn fnc_VAM_variable_cleaner;}];
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_camo.sqf b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_camo.sqf
new file mode 100644
index 000000000..abcfa3aa9
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_camo.sqf
@@ -0,0 +1,8 @@
+//VAM Common Vehicle Camo Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _list_selection = lbCurSel _list_camo;
+private _selected_camo_class_name = camo_class_names select _list_selection;
+[VAM_targetvehicle,[_selected_camo_class_name,1],nil,nil] call BIS_fnc_initVehicle;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_camo_check.sqf b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_camo_check.sqf
new file mode 100644
index 000000000..8e42d678c
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_camo_check.sqf
@@ -0,0 +1,20 @@
+//VAM Common Vehicle Camouflage Check
+disableSerialization;
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+
+private _camo_slot = _getvc select 0;
+private _current_camo = _camo_slot select 0;
+if (isNil "_current_camo") exitWith {VAM_camo_check_complete = true;};
+
+//Check current applied camouflage
+{
+ if (_current_camo isEqualTo _x) then {
+ _list_camo lbSetCurSel _forEachIndex;
+ };
+} forEach camo_class_names;
+
+VAM_camo_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_comp.sqf b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_comp.sqf
new file mode 100644
index 000000000..41f582c58
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_comp.sqf
@@ -0,0 +1,21 @@
+//VAM Common Vehicle Comp Apply
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_comp = _VAM_display displayCtrl 4920;
+
+private _list_selection = lbSelection _list_comp select 0;
+if (isNil "_list_selection") exitWith {};
+private _comp_array = current_comp;
+private "_comp_change";
+if (_comp_array select _list_selection isEqualTo 0) then {_comp_change = 1;};
+if (_comp_array select _list_selection isEqualTo 1) then {_comp_change = 0;};
+_comp_array set [_list_selection, _comp_change];
+
+private _comp_array_total = [];
+{
+ _comp_array_total pushBack (comp_class_names select _forEachIndex);
+ _comp_array_total pushBack (_comp_array select _forEachIndex);
+} forEach comp_class_names;
+[VAM_targetvehicle,nil,_comp_array_total,nil] call BIS_fnc_initVehicle;
+
+[] spawn fnc_VAM_common_comp_check;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_comp_check.sqf b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_comp_check.sqf
new file mode 100644
index 000000000..a078bda11
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_comp_check.sqf
@@ -0,0 +1,25 @@
+//VAM Common Vehicle Component Check
+disableSerialization;
+waitUntil {!(VAM_check_fnc_delay)};
+private _VAM_display = findDisplay 4900;
+private _list_comp = _VAM_display displayCtrl 4920;
+
+current_comp = [];
+{
+ _isOn = VAM_targetvehicle animationPhase _x;
+ current_comp pushBack _isOn;
+} forEach comp_class_names;
+
+//Reset list selection
+{
+ _list_comp lbSetSelected [_forEachIndex, false];
+} forEach current_comp;
+
+//Check current applied components
+{
+ if (_x isEqualTo 1) then {
+ _list_comp lbSetSelected [_forEachIndex, true];
+ };
+} forEach current_comp;
+
+VAM_comp_check_complete = true;
\ No newline at end of file
diff --git a/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_setup.sqf b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_setup.sqf
new file mode 100644
index 000000000..00fe92039
--- /dev/null
+++ b/Missionframework/VAM_GUI/vehicles/fnc_VAM_common_setup.sqf
@@ -0,0 +1,73 @@
+//VAM Common Vehicle GUI Setup
+disableSerialization;
+private _VAM_display = findDisplay 4900;
+private _list_camo = _VAM_display displayCtrl 4910;
+private _list_comp = _VAM_display displayCtrl 4920;
+private _reset = _VAM_display displayCtrl 4940;
+
+private _vehicleclass = typeof VAM_targetvehicle;
+
+//Get all camouflages(texture sets)
+private _camo_path = "true" configClasses (configfile >> "CfgVehicles" >> _vehicleclass >> "TextureSources");
+camo_class_names = [];
+camo_display_names = [];
+{_class = configName _x; camo_class_names pushBack _class;} forEach _camo_path;
+{_name = getText (_x >> "DisplayName"); camo_display_names pushBack _name;} forEach _camo_path;
+{
+ if (_x isEqualTo "") then {
+ camo_display_names set [_forEachIndex, camo_class_names select _forEachIndex];
+ };
+} forEach camo_display_names;
+
+//Get all components(animations)
+private _getvc = [VAM_targetvehicle] call BIS_fnc_getVehicleCustomization;
+private _check_comp = _getvc select 1;
+comp_class_names = [];
+{
+ if (_x isEqualType "STRING") then {
+ comp_class_names pushBack (_check_comp select _forEachIndex);
+ };
+} forEach _check_comp;
+comp_display_names = [];
+{_name = getText (configfile >> "CfgVehicles" >> _vehicleclass >> "AnimationSources" >> _x >> "DisplayName"); comp_display_names pushBack _name;} forEach comp_class_names;
+{
+ if (_x isEqualTo "") then {
+ comp_display_names set [_forEachIndex, comp_class_names select _forEachIndex];
+ };
+} forEach comp_display_names;
+
+//Put camouflages and components in list
+if (camo_class_names isEqualTo []) then {
+ _list_camo lbAdd localize "STR_VAM_NO_CAMOUFLAGE";
+} else {
+ {_list_camo lbAdd _x} forEach camo_display_names;
+};
+if (comp_class_names isEqualTo []) then {
+ _list_comp lbAdd localize "STR_VAM_NO_COMPONENT";
+} else {
+ {_list_comp lbAdd _x} forEach comp_display_names;
+};
+
+//Spawn check functions
+VAM_camo_check_complete = true;
+VAM_comp_check_complete = true;
+VAM_check_fnc_delay = false;
+
+if !(camo_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_camo_check;
+ VAM_camo_check_complete = false;
+};
+if !(comp_class_names isEqualTo []) then {
+ [] spawn fnc_VAM_common_comp_check;
+ VAM_comp_check_complete = false;
+};
+waitUntil {uisleep 0.1; VAM_camo_check_complete && VAM_comp_check_complete};
+
+//Add UIEH
+if !(camo_class_names isEqualTo []) then {
+ _list_camo ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_camo;}];
+};
+if !(comp_class_names isEqualTo []) then {
+ _list_comp ctrlAddEventHandler ["LBSelChanged", {[] spawn fnc_VAM_common_comp;}];
+};
+_reset ctrlAddEventHandler ["ButtonClick", {VAM_check_fnc_delay = true; [] spawn fnc_VAM_common_camo_check; [] spawn fnc_VAM_common_comp_check;}];
\ No newline at end of file
diff --git a/Missionframework/description.ext b/Missionframework/description.ext
index 3eb3d5e27..6f940a12b 100644
--- a/Missionframework/description.ext
+++ b/Missionframework/description.ext
@@ -2,7 +2,7 @@
File: description.ext
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-16
- Last Update: 2020-07-06
+ Last Update: 2023-03-02
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -25,7 +25,7 @@ class Header {
};
// Name of Mission author(s) and contributors. Obviously you can only add and not (!) remove someone.
-author = "[GREUH] Zbug & McKeewa, KP Liberation Dev Team";
+author = $STR_MISSION_AUTHOR;
/*
@@ -40,7 +40,7 @@ briefingName = $STR_MISSION_TITLE;
overviewPicture = "res\lib.paa";
// Text to be displayed below the overviewPicture on the mission selection screen
-overviewText = "github.com/KillahPotatoes";
+overviewText = $STR_MISSION_OVERVIEW;
/*
@@ -56,7 +56,7 @@ onLoadName = $STR_MISSION_TITLE;
loadScreen = "res\lib.paa";
// Displays a message while the mission is loading below the loadScreen picture.
-onLoadMission = "github.com/KillahPotatoes";
+onLoadMission = $STR_MISSION_ONLOAD;
/*
@@ -248,3 +248,24 @@ class CfgTaskDescriptions {
#include "KP\KPGUI\KPGUI_defines.hpp"
#include "KP\KPPLM\ui\KPPLM_dialog.hpp"
+#include "VAM_GUI\defines.hpp"
+#include "VAM_GUI\VAM_GUI_controls.hpp"
+#include "VAM_GUI\VAM_GUI_classes.hpp"
+
+class ACEX_Fortify_Presets {
+ class KPLIB_Fortify {
+ displayName = "KPLIB Fortify";
+ objects[] = {
+ {"Land_BagFence_Round_F", 5},
+ {"Land_BagFence_Short_F", 5},
+ {"Land_BagFence_Long_F", 10},
+ {"Land_Plank_01_4m_F", 10},
+ {"Land_BagBunker_Small_F", 25},
+ {"Land_Razorwire_F", 10},
+ {"RoadBarrier_F", 1},
+ {"RoadCone_F", 1},
+ {"Land_Campfire_F", 1},
+ {"CamoNet_wdl_open_F", 30}
+ };
+ };
+};
\ No newline at end of file
diff --git a/Missionframework/functions/curator/fn_initCuratorHandlers.sqf b/Missionframework/functions/curator/fn_initCuratorHandlers.sqf
index db41bcec0..d8ec22158 100644
--- a/Missionframework/functions/curator/fn_initCuratorHandlers.sqf
+++ b/Missionframework/functions/curator/fn_initCuratorHandlers.sqf
@@ -2,7 +2,7 @@
File: fn_initCuratorHandlers.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2020-08-07
- Last Update: 2020-08-30
+ Last Update: 2023-03-02
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -56,14 +56,14 @@ if (isServer) then {
_zeus setCuratorCoef ["Edit", -1e8];
_zeus setCuratorCoef ["Destroy", -1e8];
_zeus setCuratorCoef ["Delete", 0];
+
+ removeAllCuratorAddons _zeus;
} else {
_zeus setVariable ["Addons", 3, true];
_zeus setVariable ["BIS_fnc_initModules_disableAutoActivation", false];
_zeus setCuratorCoef ["Place", 0];
_zeus setCuratorCoef ["Delete", 0];
-
- removeAllCuratorAddons _zeus;
};
_zeus setVariable ["KPLIB_limited", _limited];
diff --git a/Missionframework/functions/fn_addActionsFob.sqf b/Missionframework/functions/fn_addActionsFob.sqf
index b890075f0..ade62fa5f 100644
--- a/Missionframework/functions/fn_addActionsFob.sqf
+++ b/Missionframework/functions/fn_addActionsFob.sqf
@@ -2,7 +2,7 @@
File: fn_addActionsFob.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2020-04-13
- Last Update: 2020-05-25
+ Last Update: 2024-06-21
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -19,7 +19,7 @@ params [
["_obj", objNull, [objNull]]
];
-if (isNull _object) exitWith {["Null object given"] call BIS_fnc_error; false};
+if (isNull _obj) exitWith {["Null object given"] call BIS_fnc_error; false};
if (isNil "FOB_build_in_progress") then {FOB_build_in_progress = false;};
diff --git a/Missionframework/functions/fn_addActionsFullHeal.sqf b/Missionframework/functions/fn_addActionsFullHeal.sqf
new file mode 100644
index 000000000..f3932695e
--- /dev/null
+++ b/Missionframework/functions/fn_addActionsFullHeal.sqf
@@ -0,0 +1,41 @@
+/*
+ File: fn_addActionsFullHeal.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2023-03-26
+ Last Update: 2023-03-26
+ License: MIT License - http://www.opensource.org/licenses/MIT
+
+ Description:
+ Adds fullHeal action to object.
+
+ Parameter(s):
+ _obj - Object to add fullHeal action to [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_obj", objNull, [objNull]]
+];
+
+if (isNull _obj) exitWith {["Null object given"] call BIS_fnc_error; false};
+
+// Full Heal
+_obj addAction [
+ ["", localize "STR_FULLHEAL_ACTION", "
"] joinString "",
+ {
+ params ["_target", "_caller", "_actionId", "_arguments"];
+ [getpos _target, KPLIB_range_fob * 0.25, _caller] call KPLIB_fnc_fullheal;
+ },
+ nil,
+ -705,
+ false,
+ true,
+ "",
+ "
+ KPLIB_param_fullHeal
+ "
+];
+
+true
diff --git a/Missionframework/functions/fn_addActionsPlayer.sqf b/Missionframework/functions/fn_addActionsPlayer.sqf
index 06b3eea99..447af1165 100644
--- a/Missionframework/functions/fn_addActionsPlayer.sqf
+++ b/Missionframework/functions/fn_addActionsPlayer.sqf
@@ -345,17 +345,18 @@ if (player == ([] call KPLIB_fnc_getCommander)) then {
true,
"",
"
- alive _originalTarget
+ KPLIB_param_zeusCommander
+ && alive _originalTarget
&& {isNull (_originalTarget getVariable ['KPLIB_ownedZeusModule', objNull])}
&& {build_confirmed isEqualTo 0}
"
];
};
-// Create FOB clearance
+// Create small FOB clearance
_player addAction [
["", localize "STR_CLEARANCE_ACTION", ""] joinString "",
- {[player getVariable ["KPLIB_fobPos", [0, 0, 0]], KPLIB_range_fob * 0.9, true] call KPLIB_fnc_createClearanceConfirm;},
+ {[player getVariable ["KPLIB_fobPos", [0, 0, 0]], KPLIB_range_fob * 0.4, true] call KPLIB_fnc_createClearanceConfirm;},
nil,
-850,
false,
@@ -365,6 +366,43 @@ _player addAction [
_originalTarget getVariable ['KPLIB_hasDirectAccess', false]
&& {isNull (objectParent _originalTarget)}
&& {alive _originalTarget}
+ && {_originalTarget getVariable ['KPLIB_fobDist', 99999] < (KPLIB_range_fob * 0.4)}
+ && {build_confirmed isEqualTo 0}
+ "
+];
+
+// Create big FOB clearance
+_player addAction [
+ ["", localize "STR_BIG_CLEARANCE_ACTION", ""] joinString "",
+ {[player getVariable ["KPLIB_fobPos", [0, 0, 0]], KPLIB_range_fob * 0.8, true] call KPLIB_fnc_createClearanceConfirm;},
+ nil,
+ -851,
+ false,
+ true,
+ "",
+ "
+ _originalTarget getVariable ['KPLIB_hasDirectAccess', false]
+ && {isNull (objectParent _originalTarget)}
+ && {alive _originalTarget}
+ && {_originalTarget getVariable ['KPLIB_fobDist', 99999] < (KPLIB_range_fob * 0.8)}
+ && {build_confirmed isEqualTo 0}
+ "
+];
+
+// Time Skip and Clear Fog
+_player addAction [
+ ["", localize "STR_FOB_TW_ACTION_OPEN", ""] joinString "",
+ "scripts\client\actions\control_TimeWeather.sqf",
+ nil,
+ -855,
+ false,
+ true,
+ "",
+ "
+ KPLIB_param_timeweather
+ && _originalTarget getVariable ['KPLIB_hasDirectAccess', false]
+ && {isNull (objectParent _originalTarget)}
+ && {alive _originalTarget}
&& {_originalTarget getVariable ['KPLIB_fobDist', 99999] < (KPLIB_range_fob * 0.8)}
&& {build_confirmed isEqualTo 0}
"
@@ -399,4 +437,23 @@ _player addAction [
}
];
+// Full Heal
+_player addAction [
+ ["", localize "STR_FULLHEAL_ACTION", "
"] joinString "",
+ {[player getVariable ["KPLIB_fobPos", [0, 0, 0]], KPLIB_range_fob * 0.9, player] call KPLIB_fnc_fullheal;},
+ nil,
+ -690,
+ false,
+ true,
+ "",
+ "
+ KPLIB_param_fullHeal
+ && KPLIB_medical_facilities_near
+ && {isNull (objectParent _originalTarget)}
+ && {alive _originalTarget}
+ && {_originalTarget getVariable ['KPLIB_fobDist', 99999] < (KPLIB_range_fob * 0.5)}
+ && {build_confirmed isEqualTo 0}
+ "
+];
+
true
diff --git a/Missionframework/functions/fn_addArtyToSupport.sqf b/Missionframework/functions/fn_addArtyToSupport.sqf
new file mode 100644
index 000000000..4252676f7
--- /dev/null
+++ b/Missionframework/functions/fn_addArtyToSupport.sqf
@@ -0,0 +1,69 @@
+/*
+ File: fn_addArtyToSupport.sqf
+ Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
+ Date: 2023-03-17
+ Last Update: 2023-04-26
+ License: MIT License - http://www.opensource.org/licenses/MIT
+
+ Description:
+ Check and sync to module a arty unit if given unit is player side.
+ if arty is not player side or empty, waitUntil is dead or captured by player.
+
+ Parameter(s):
+ _obj - Object to check and sync to module [OBJECT, defaults to objNull]
+
+ Returns:
+ Function reached the end [BOOL]
+*/
+
+params [
+ ["_obj", objNull, [objNull]]
+];
+
+if (isNull _obj) exitWith {["Null object given"] call BIS_fnc_error; false};
+if (!canSuspend) exitWith {_this spawn KPLIB_fnc_addArtyToSupport};
+
+private _objcrew = crew _obj;
+
+if (!(player in _objcrew) && side _obj == KPLIB_side_player) then {
+ KPLIB_param_supportModule_arty synchronizeObjectsAdd [vehicle _obj];
+ {
+ _x addEventHandler ["Killed", {
+ params ["_unit", "_killer", "_instigator", "_useEffects"];
+ if ((side _unit == KPLIB_side_player) && (_unit != player)) then {
+ KPLIB_param_supportModule_arty synchronizeObjectsRemove [_unit];
+ };
+ }];
+ } forEach _objcrew;
+};
+
+_obj addEventHandler ["GetIn", {
+ params ["_vehicle", "_role", "_unit", "_turret"];
+ if ((side _unit == KPLIB_side_player) && (_unit != player)) then {
+ KPLIB_param_supportModule_arty synchronizeObjectsAdd [vehicle _vehicle];
+ _unit addEventHandler ["Killed", {
+ params ["_unit", "_killer", "_instigator", "_useEffects"];
+ if ((side _unit == KPLIB_side_player) && (_unit != player)) then {
+ KPLIB_param_supportModule_arty synchronizeObjectsRemove [_unit];
+ };
+ }];
+ };
+}];
+
+_obj addEventHandler ["GetOut", {
+ params ["_vehicle", "_role", "_unit", "_turret"];
+ if ((side _unit == KPLIB_side_player) && (_unit != player)) then {
+ KPLIB_param_supportModule_arty synchronizeObjectsRemove [_unit];
+ };
+}];
+
+_obj addEventHandler ["Killed", {
+ params ["_unit", "_killer", "_instigator", "_useEffects"];
+ private _crews = crew _unit;
+ KPLIB_param_supportModule_arty synchronizeObjectsRemove [vehicle _unit];
+ if (!(player in _crews)) then {
+ KPLIB_param_supportModule_arty synchronizeObjectsRemove _crews;
+ };
+}];
+
+true
diff --git a/Missionframework/functions/fn_addObjectInit.sqf b/Missionframework/functions/fn_addObjectInit.sqf
index bcdd87a99..612f29a05 100644
--- a/Missionframework/functions/fn_addObjectInit.sqf
+++ b/Missionframework/functions/fn_addObjectInit.sqf
@@ -38,7 +38,7 @@ if (isNil "_elements") then {
} forEach _classes // return
} else {
// return
- (toLower (typeOf _object)) in (_classes apply {toLower _x})
+ (toLowerANSI (typeOf _object)) in (_classes apply {toLowerANSI _x})
};
};
diff --git a/Missionframework/functions/fn_checkGear.sqf b/Missionframework/functions/fn_checkGear.sqf
index 67419f786..8c8cb1c83 100644
--- a/Missionframework/functions/fn_checkGear.sqf
+++ b/Missionframework/functions/fn_checkGear.sqf
@@ -1,117 +1,46 @@
/*
File: fn_checkGear.sqf
- Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
- Date: 2017-11-22
- Last Update: 2020-05-11
- License: MIT License - http://www.opensource.org/licenses/MIT
-
+ Author: ThomasAngel (Original by KP Liberation Dev Team - https://github.com/KillahPotatoes)
+ Steam: https://steamcommunity.com/id/Thomasangel/
+ Github: https://github.com/rekterakathom
+ Date: 2021-12-27
+ Last Update: 2023-03-02
Description:
+ Completely rewritten version of the original checkGear by KillahPotatoes.
+ Identical functionality.
Checks the players gear for blacklisted items.
Found items are removed from the loadout.
Furthermore a hint with the found items is displayed to the player
while a server log entry is created for the admin.
-
Parameter(s):
- _backpack - Backpack classname of the players current backpack [STRING, defaults to ""]
-
+ -
Returns:
Player checked without findings [BOOL]
*/
-params [
- ["_backpack", "", [""]]
-];
-
private _removedItems = [];
+private _uniqueUnitItems = uniqueUnitItems [player];
+private _allowedItems = KPLIB_arsenalAllowed;
-// Check single item slots
-if !(toLower (headgear player) in KPLIB_arsenalAllowed) then {
- _removedItems pushBack (headgear player);
- removeHeadgear player;
-};
-if !(toLower (goggles player) in KPLIB_arsenalAllowed) then {
- _removedItems pushBack (goggles player);
- removeGoggles player;
-};
-if !(toLower (uniform player) in KPLIB_arsenalAllowed) then {
- _removedItems pushBack (uniform player);
- removeUniform player;
-};
-if !(toLower (vest player) in KPLIB_arsenalAllowed) then {
- _removedItems pushBack (vest player);
- removeVest player;
-};
-if (!(toLower (backpack player) in KPLIB_arsenalAllowed) && ((backpack player) != _backpack)) then {
- _removedItems pushBack (backpack player);
- removeBackpack player;
-};
-
-// Check items
-private _items = assignedItems player;
-_items append ((getItemCargo (uniformContainer player)) select 0);
-_items append ((getItemCargo (vestContainer player)) select 0);
-_items append ((getItemCargo (backpackContainer player)) select 0);
-_items = _items apply {toLower _x};
-{
- _removedItems pushBack _x;
- player unassignItem _x;
- player removeItems _x;
-} forEach (((_items arrayIntersect _items) - KPLIB_arsenalAllowed) select {!([_x] call KPLIB_fnc_isRadio)});
-
-// Check magazines
-_items = ((getMagazineCargo (uniformContainer player)) select 0);
-_items append ((getMagazineCargo (vestContainer player)) select 0);
-_items append ((getMagazineCargo (backpackContainer player)) select 0);
-_items = _items apply {toLower _x};
+// Loop through all units items and remove non-allowed items.
{
- _removedItems pushBack _x;
- player removeMagazines _x;
-} forEach ((_items arrayIntersect _items) - KPLIB_arsenalAllowed);
-
-// Check weapons stored in inventory containers
-{
- if (!isNull _x) then {_removedItems append ([_x] call KPLIB_fnc_checkWeaponCargo);};
-} forEach [uniformContainer player, vestcontainer player, backpackContainer player];
-
-// Check equipped weapons
-_items = (weapons player) apply {toLower ([_x] call BIS_fnc_baseWeapon)};
-{
- _removedItems pushBack _x;
- player removeWeapon _x;
-} forEach (_items - KPLIB_arsenalAllowed);
-
-// Check weapon items of primary weapon
-_items = primaryWeaponItems player;
-_items append primaryWeaponMagazine player;
-_items = _items apply {toLower _x};
-{
- _removedItems pushBack _x;
- player removePrimaryWeaponItem _x;
-} forEach (_items - KPLIB_arsenalAllowed);
-
-// Check weapon items of secondary weapon
-_items = secondaryWeaponItems player;
-_items append secondaryWeaponMagazine player;
-_items = _items apply {toLower _x};
-{
- _removedItems pushBack _x;
- player removeSecondaryWeaponItem _x;
-} forEach (_items - KPLIB_arsenalAllowed);
-
-// Check weapon items of handgun
-_items = handgunItems player;
-_items append handgunMagazine player;
-_items = _items apply {toLower _x};
-{
- _removedItems pushBack _x;
- player removeHandgunItem _x;
-} forEach (_items - KPLIB_arsenalAllowed);
-
-// Remove duplicates and empty strings
-_removedItems = (_removedItems arrayIntersect _removedItems) - [""];
+ private _currentElement = toLowerANSI _x;
+ if !(_currentElement in _allowedItems) then {
+ if (([_x] call KPLIB_fnc_isRadio)) exitWith {};
+ _removedItems pushBack _x;
+ switch _x do {
+ case (headgear player): {removeHeadgear player};
+ case (goggles player): {removeGoggles player};
+ case (uniform player): {removeUniform player};
+ case (vest player): {removeVest player};
+ case (backpack player): {removeBackpack player};
+ default {player removeItems _x}
+ };
+ };
+} forEach _uniqueUnitItems;
// Show hint and log list, if something was found
-if !(_removedItems isEqualTo []) exitWith {
+if (_removedItems isNotEqualTo []) exitWith {
[_removedItems] spawn {
params ["_removedItems"];
[format ["Found %1 at player %2", _removedItems, name player], "BLACKLIST"] remoteExecCall ["KPLIB_fnc_log", 2];
@@ -122,4 +51,4 @@ if !(_removedItems isEqualTo []) exitWith {
false
};
-true
+true
\ No newline at end of file
diff --git a/Missionframework/functions/fn_checkWeaponCargo.sqf b/Missionframework/functions/fn_checkWeaponCargo.sqf
index 319967a73..ef8ee187a 100644
--- a/Missionframework/functions/fn_checkWeaponCargo.sqf
+++ b/Missionframework/functions/fn_checkWeaponCargo.sqf
@@ -39,7 +39,7 @@ clearWeaponCargoGlobal _container;
_weaponNonPreset = _weapon;
};
- if ((toLower ([_x] call BIS_fnc_baseWeapon)) in KPLIB_arsenalAllowed) then {
+ if ((toLowerANSI ([_x] call BIS_fnc_baseWeapon)) in KPLIB_arsenalAllowed) then {
_container addWeaponCargoGlobal [_weaponNonPreset, 1];
// If weapon does not have a non-preset parent, only add attachments that were custom added
@@ -50,32 +50,32 @@ clearWeaponCargoGlobal _container;
_presetAttachments = _components;
};
- if !(toLower _muzzle in _presetAttachments) then {
- if (toLower _muzzle in KPLIB_arsenalAllowed) then {
+ if !(toLowerANSI _muzzle in _presetAttachments) then {
+ if (toLowerANSI _muzzle in KPLIB_arsenalAllowed) then {
_container addItemCargoGlobal [_muzzle, 1];
} else {
_removed pushBack _muzzle;
}
};
- if !(toLower _pointer in _presetAttachments) then {
- if (toLower _pointer in KPLIB_arsenalAllowed) then {
+ if !(toLowerANSI _pointer in _presetAttachments) then {
+ if (toLowerANSI _pointer in KPLIB_arsenalAllowed) then {
_container addItemCargoGlobal [_pointer, 1];
} else {
_removed pushBack _pointer;
}
};
- if !(toLower _optic in _presetAttachments) then {
- if (toLower _optic in KPLIB_arsenalAllowed) then {
+ if !(toLowerANSI _optic in _presetAttachments) then {
+ if (toLowerANSI _optic in KPLIB_arsenalAllowed) then {
_container addItemCargoGlobal [_optic, 1];
} else {
_removed pushBack _optic;
}
};
- if !(toLower _bipod in _presetAttachments) then {
- if (toLower _bipod in KPLIB_arsenalAllowed) then {
+ if !(toLowerANSI _bipod in _presetAttachments) then {
+ if (toLowerANSI _bipod in KPLIB_arsenalAllowed) then {
_container addItemCargoGlobal [_bipod, 1];
} else {
_removed pushBack _bipod;
@@ -84,7 +84,7 @@ clearWeaponCargoGlobal _container;
_magazine params [["_magazineClass", ""], ["_magazineAmmoCount", 0]];
if (_magazineClass != "") then {
- if (toLower _magazineClass in KPLIB_arsenalAllowed) then {
+ if (toLowerANSI _magazineClass in KPLIB_arsenalAllowed) then {
_container addMagazineAmmoCargo [_magazineClass, 1, _magazineAmmoCount];
} else {
_removed pushBack _magazineClass;
@@ -93,7 +93,7 @@ clearWeaponCargoGlobal _container;
_magazineGL params [["_magazineGLClass", ""], ["_magazineGLAmmoCount", 0]];
if (_magazineGLClass != "") then {
- if (toLower _magazineGLClass in KPLIB_arsenalAllowed) then {
+ if (toLowerANSI _magazineGLClass in KPLIB_arsenalAllowed) then {
_container addMagazineAmmoCargo [_magazineGLClass, 1, _magazineGLAmmoCount];
} else {
_removed pushBack _magazineGLClass;
diff --git a/Missionframework/functions/fn_cleanOpforVehicle.sqf b/Missionframework/functions/fn_cleanOpforVehicle.sqf
index f51f4a9d2..2fad1a4c7 100644
--- a/Missionframework/functions/fn_cleanOpforVehicle.sqf
+++ b/Missionframework/functions/fn_cleanOpforVehicle.sqf
@@ -2,7 +2,7 @@
File: fn_cleanOpforVehicle.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-11-25
- Last Update: 2020-04-20
+ Last Update: 2023-03-07
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -22,6 +22,7 @@ params [
if (isNull _veh) exitWith {["Null object given"] call BIS_fnc_error; false};
if !(_veh getVariable ["KPLIB_captured", false]) then {
+ deleteVehicleCrew _veh;
deleteVehicle _veh;
};
diff --git a/Missionframework/functions/fn_crAddAceAction.sqf b/Missionframework/functions/fn_crAddAceAction.sqf
index 5c945ba45..714c92326 100644
--- a/Missionframework/functions/fn_crAddAceAction.sqf
+++ b/Missionframework/functions/fn_crAddAceAction.sqf
@@ -2,7 +2,7 @@
File: fn_crAddAceAction.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
- Last Update: 2020-05-10
+ Last Update: 2023-04-26
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -36,8 +36,13 @@ _civ addAction [
] arrayIntersect (vestItems _caller + uniformItems _caller + backpackItems _caller);
if !(_items isEqualTo []) then {
+ removeAllActions _target;
_caller removeItem (selectRandom _items);
+ _caller playMove "AinvPknlMstpSnonWnonDnon_medic4";
+ sleep 8;
_target setDamage 0;
+ [_caller, _target] call ace_medical_treatment_fnc_fullHeal;
+ _target setVariable ["KPLIB_isHealed", true, true];
} else {
hint localize "STR_CR_ACE_ACTION_FAIL";
sleep 3;
@@ -49,7 +54,7 @@ _civ addAction [
true,
true,
"",
- "(damage _target) >= 0.5",
+ "alive _originalTarget",
3
];
diff --git a/Missionframework/functions/fn_crGlobalMsg.sqf b/Missionframework/functions/fn_crGlobalMsg.sqf
index 29ac88207..9944114e0 100644
--- a/Missionframework/functions/fn_crGlobalMsg.sqf
+++ b/Missionframework/functions/fn_crGlobalMsg.sqf
@@ -24,12 +24,13 @@ params [
if (KPLIB_civrep_debug > 0) then {[format ["globalMsg called on: %1 - Parameters: [%2, %3]", debug_source, _msgType, _data], "CIVREP"] remoteExecCall ["KPLIB_fnc_log", 2];};
switch (_msgType) do {
- case 0: {systemChat localize "STR_CR_VEHICLEMSG";};
+ case 0: {systemChat (format [localize "STR_CR_VEHICLEMSG", (_data select 0)]);};
case 1: {systemChat (format [localize "STR_CR_BUILDINGMSG", (_data select 0)]);};
- case 2: {systemChat (format [localize "STR_CR_KILLMSG", (_data select 0)]);};
- case 3: {systemChat (format [localize "STR_CR_RESISTANCE_KILLMSG", (_data select 0)]);};
- case 4: {systemChat (format [localize "STR_CR_HEALMSG", (_data select 0)]);};
+ case 2: {systemChat (format [localize "STR_CR_KILLMSG", (_data select 0), (_data select 1)]);};
+ case 3: {systemChat (format [localize "STR_CR_RESISTANCE_KILLMSG", (_data select 0), (_data select 1)]);};
+ case 4: {systemChat (format [localize "STR_CR_HEALMSG", (_data select 0), (_data select 1)]);};
case 5: {["lib_asymm_guerilla_incoming", _data] call BIS_fnc_showNotification;};
+ case 6: {systemChat (format [localize "STR_CR_HELPMSG", (_data select 0), (_data select 1)]);};
default {[format ["globalMsg without valid msgType - %1", _msgType], "CIVREP"] remoteExecCall ["KPLIB_fnc_log", 2];};
};
diff --git a/Missionframework/functions/fn_crateFromStorage.sqf b/Missionframework/functions/fn_crateFromStorage.sqf
index 06af19a64..6bef29709 100644
--- a/Missionframework/functions/fn_crateFromStorage.sqf
+++ b/Missionframework/functions/fn_crateFromStorage.sqf
@@ -24,7 +24,7 @@ params [
];
// Validate parameters
-if !((toLower _cratetype) in KPLIB_crates) exitWith {["Invalid craty type given: %1", _cratetype] call BIS_fnc_error; false};
+if !((toLowerANSI _cratetype) in KPLIB_crates) exitWith {["Invalid craty type given: %1", _cratetype] call BIS_fnc_error; false};
if (isNull _storage) exitWith {["Null object given"] call BIS_fnc_error; false};
// Get correct storage positions
@@ -52,8 +52,11 @@ detach _crate;
[_crate, true] call KPLIB_fnc_clearCargo;
_crate setPos _unloadPos;
[_crate, true] remoteExec ["enableRopeAttach"];
-if (KPLIB_ace) then {[_crate, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];};
-
+_crate lockInventory true;
+if (KPLIB_ace) then {
+ [_crate, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];
+ _crate setVariable ["ace_cargo_noRename", true];
+};
// Fill the possible gap in the storage area
reverse _storedCrates;
_i = 0;
diff --git a/Missionframework/functions/fn_createCrate.sqf b/Missionframework/functions/fn_createCrate.sqf
index 4802a2b04..d805915cf 100644
--- a/Missionframework/functions/fn_createCrate.sqf
+++ b/Missionframework/functions/fn_createCrate.sqf
@@ -2,7 +2,7 @@
File: fn_createCrate.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-11
- Last Update: 2020-05-25
+ Last Update: 2023-03-05
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -24,7 +24,7 @@ params [
];
// Check if resource is valid
-if !((toLower _resource) in KPLIB_crates) exitWith {
+if !((toLowerANSI _resource) in KPLIB_crates) exitWith {
["Invalid resource param given: %1", _resource] call BIS_fnc_error;
objNull
};
@@ -34,9 +34,13 @@ private _crate = _resource createVehicle _pos;
_crate setMass 500;
_crate setVariable ["KPLIB_crate_value", _amount, true];
[_crate, true] call KPLIB_fnc_clearCargo;
+_crate lockInventory true;
-// Add ACE carry functionality
-if (KPLIB_ace) then {[_crate, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];};
+// Add ACE carry functionality and disable cargo renaming
+if (KPLIB_ace) then {
+ [_crate, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];
+ _crate setVariable ["ace_cargo_noRename", true];
+};
// Process KP object init
[_crate] call KPLIB_fnc_addObjectInit;
diff --git a/Missionframework/functions/fn_createManagedUnit.sqf b/Missionframework/functions/fn_createManagedUnit.sqf
index 1d744568f..5566c60f8 100644
--- a/Missionframework/functions/fn_createManagedUnit.sqf
+++ b/Missionframework/functions/fn_createManagedUnit.sqf
@@ -38,9 +38,15 @@ isNil {
params ["_unit", "_killer"];
["KPLIB_manageKills", [_unit, _killer]] call CBA_fnc_localEvent;
}];
-
_unit setRank _rank;
+ // Set unit traits here because they are not properly configured in all faction mods.
+ switch _type do {
+ case KPLIB_o_engineer: {_unit setUnitTrait ["Engineer", true]; _unit setUnitTrait ["explosiveSpecialist", true]};
+ case KPLIB_o_medic: {_unit setUnitTrait ["Medic", true]};
+ default {};
+ };
+
// Join to target group to preserve Side
[_unit] joinSilent _group;
deleteGroup _groupTemp;
diff --git a/Missionframework/functions/fn_forceBluforCrew.sqf b/Missionframework/functions/fn_forceBluforCrew.sqf
index bebf29b38..c6c71e781 100644
--- a/Missionframework/functions/fn_forceBluforCrew.sqf
+++ b/Missionframework/functions/fn_forceBluforCrew.sqf
@@ -27,7 +27,7 @@ private _grp = createVehicleCrew _veh;
// If the config crew isn't the correct side, replace it with the crew classnames from the preset
if ((side _grp) != KPLIB_side_player) then {
- {deleteVehicle _x} forEach (units _grp);
+ deleteVehicleCrew _veh;
_grp = createGroup [KPLIB_side_player, true];
while {count units _grp < 3} do {
diff --git a/Missionframework/functions/fn_fullHeal.sqf b/Missionframework/functions/fn_fullHeal.sqf
new file mode 100644
index 000000000..1da84f845
--- /dev/null
+++ b/Missionframework/functions/fn_fullHeal.sqf
@@ -0,0 +1,68 @@
+/*
+ File: fn_fullHeal.sqf
+ Author: KP Liberation APR Dev Team - https://github.com/Apricot-ale/KP-Liberation-APR
+ Date: 2023-03-17
+ Last Update: 2024-06-20
+ License: MIT License - http://www.opensource.org/licenses/MIT
+
+ Description:
+ Fully heal all player side units within a given radius of a center position.
+ If applied, display a hint with the name of caller.
+
+ Parameter(s):
+ _centerPos - Position for the apply heal script area [POSITION, defaults to [0, 0, 0]]
+ _radius - Radius of the apply heal script from the center [NUMBER, defaults to 0]
+ _caller - Caller unit of this function [OBJECT, defaults to objNull]
+
+ Returns:
+ Heal confirmed [BOOL]
+*/
+
+params [
+ ["_centerPos", [0, 0, 0], [[]], [3]],
+ ["_radius", 0, [0]],
+ ["_caller", objNull, [objNull]]
+];
+
+if (_centerPos isEqualTo [0, 0, 0]) exitWith {["Zero position given"] call BIS_fnc_error; false};
+if (_radius isEqualTo 0) exitWith {["Zero radius given"] call BIS_fnc_error; false};
+if (isNull _caller) exitWith {["Null object given"] call BIS_fnc_error; false};
+if (!canSuspend) exitWith {_this spawn KPLIB_fnc_fullHeal;};
+if (KPLIB_param_fullHealCheckEnemies && ([_centerPos, 350, KPLIB_side_enemy ] call KPLIB_fnc_getUnitsCount) > 1 ) exitWith {[localize "STR_FULLHEAL_ENEMIES_NEARBY"] remoteExecCall ["hint", _caller];};
+
+private _targetunits = units KPLIB_side_player select {(alive _x) and (_x distance _centerPos <= _radius)};
+private _healedunits = [];
+private _cooldownunits = [];
+private _acefr = false;
+if (isClass (configfile >> "CfgPatches" >> "ace_field_rations")) then {_acefr = true};
+
+{
+ private _target = _x;
+ private _localtime = serverTime; // MP
+ if (_localtime isEqualTo 0) then {_localtime = time}; // SP
+ private _lastHeal = _target getVariable ["KPLIB_lastHealTime", -6000];
+ private _cooltime = KPLIB_param_fullHealCooldown + _lastHeal;
+ if (_cooltime < _localtime) then {
+ _target setVariable ["KPLIB_lastHealTime", _localtime];
+ if (KPLIB_ace_med) then {[_caller, _target] call ace_medical_treatment_fnc_fullHeal;} else {_target setDamage 0;};
+ if (isPlayer _target) then {
+ if (_acefr) then {_target setVariable ["acex_field_rations_thirst",0,true]; _target setVariable ["acex_field_rations_hunger",0,true];};
+ if (_target isNotEqualTo _caller) then {_healedunits pushBack _target;};
+ };
+ } else {
+ _cooldownunits pushBack _target;
+ private _cooldowntime = (_cooltime - _localtime)/60;
+ if (_target isEqualTo _caller) then {
+ [format [localize "STR_FULLHEAL_COOLDOWN_OWN", round _cooldowntime]] remoteExecCall ["hint", _target];
+ } else {
+ [format [localize "STR_FULLHEAL_COOLDOWN", round _cooldowntime, name _caller]] remoteExecCall ["hint", _target];
+ };
+ };
+} forEach _targetunits;
+
+if (!(_caller in _cooldownunits)) then {[localize "STR_FULLHEAL_DONE"] remoteExecCall ["hint", _caller];};
+[format [localize "STR_FULLHEAL_APPLY", name _caller]] remoteExecCall ["hint", _healedunits];
+sleep 5;
+[""] remoteExecCall ["hintSilent", _targetunits];
+
+true
diff --git a/Missionframework/functions/fn_getFobResources.sqf b/Missionframework/functions/fn_getFobResources.sqf
index 9620be716..3eb14807a 100644
--- a/Missionframework/functions/fn_getFobResources.sqf
+++ b/Missionframework/functions/fn_getFobResources.sqf
@@ -2,7 +2,7 @@
File: fn_getFobResources.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-05-08
- Last Update: 2020-05-10
+ Last Update: 2023-03-18
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -15,7 +15,7 @@
FOB resource data [ARRAY]
*/
-#define NO_RESULT [[0, 0, 0], 0, 0, 0, false, false]
+#define NO_RESULT [[0, 0, 0], 0, 0, 0, false, false, false]
params [
["_fob", [0, 0, 0], [[]], [2, 3]]
diff --git a/Missionframework/functions/fn_getGroupType.sqf b/Missionframework/functions/fn_getGroupType.sqf
index c92ae689b..42f1e8648 100644
--- a/Missionframework/functions/fn_getGroupType.sqf
+++ b/Missionframework/functions/fn_getGroupType.sqf
@@ -2,7 +2,7 @@
File: fn_getGroupType.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-11-25
- Last Update: 2020-04-25
+ Last Update: 2023-04-22
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -36,14 +36,14 @@ private _parent = objNull;
// Exit with infantry, if not as crew in objectParent
if (_vehType isEqualTo "") exitWith {_grpType};
-
+_vehType = toLowerANSI _vehType;
// Otherwise continue to get the type of the vehicle
[] call {
- if ((toLower _vehType) in KPLIB_b_light_classes) exitWith {_grpType = "light";};
- if ((toLower _vehType) in KPLIB_b_heavy_classes) exitWith {_grpType = "heavy";};
- if ((toLower _vehType) in KPLIB_b_air_classes) exitWith {_grpType = "air";};
- if ((toLower _vehType) in KPLIB_b_static_classes) exitWith {_grpType = "static";};
- if ((toLower _vehType) in KPLIB_b_support_classes) exitWith {_grpType = "support";};
+ if (_vehType in KPLIB_b_light_classes) exitWith {_grpType = "light";};
+ if (_vehType in KPLIB_b_heavy_classes) exitWith {_grpType = "heavy";};
+ if (_vehType in KPLIB_b_air_classes) exitWith {_grpType = "air";};
+ if (_vehType in KPLIB_b_static_classes) exitWith {_grpType = "static";};
+ if (_vehType in KPLIB_b_support_classes) exitWith {_grpType = "support";};
if ([_vehType] call KPLIB_fnc_isClassUAV) exitWith {_grpType = "uav";};
};
diff --git a/Missionframework/functions/fn_getMobileRespawnName.sqf b/Missionframework/functions/fn_getMobileRespawnName.sqf
new file mode 100644
index 000000000..ec6fdcbe3
--- /dev/null
+++ b/Missionframework/functions/fn_getMobileRespawnName.sqf
@@ -0,0 +1,32 @@
+/*
+ File: fn_getMobileRespawnName.sqf
+ Author: doxus
+ Date: 2024-04-23
+ Last Update: 2024-04-23
+ License: MIT License - http://www.opensource.org/licenses/MIT
+
+ Description:
+ Gets NATO military name of the given respawn vehicle (assigned per idx)
+
+ Parameter(s):
+ _msp - mobile respawn vehicle object reference (defaults to nil)
+
+ Returns:
+ Mobile respawn name
+*/
+
+
+params [
+ ["_msp", nil]
+];
+
+private _respawn_vehicles = [] call KPLIB_fnc_getMobileRespawns;
+private _name = "VEHICLE_NOT_FOUND";
+
+if (!isNil "_msp") then {
+ private _vehicle_idx = _respawn_vehicles find _msp;
+ if (_vehicle_idx != -1 && _vehicle_idx < count KPLIB_militaryAlphabet) then {
+ _name = KPLIB_militaryAlphabet select _vehicle_idx;
+ };
+};
+_name
diff --git a/Missionframework/functions/fn_getMobileRespawns.sqf b/Missionframework/functions/fn_getMobileRespawns.sqf
index 177431008..fbc846afe 100644
--- a/Missionframework/functions/fn_getMobileRespawns.sqf
+++ b/Missionframework/functions/fn_getMobileRespawns.sqf
@@ -16,12 +16,10 @@
*/
private _respawn_trucks = vehicles select {
- (typeOf _x) in [KPLIB_b_mobileRespawn, KPLIB_b_potato01] &&
+ (typeOf _x) in (KPLIB_b_mobileRespawns + [KPLIB_b_potato01]) &&
{alive _x} &&
{_x distance2d startbase > 500} &&
- {abs (speed _x) < 5} &&
- {(isTouchingGround _x || {5 > ((getPos _x) select 2)})} &&
- {!surfaceIsWater (getPos _x)}
+ {abs (speed _x) < 5}
};
[_respawn_trucks, [], {(getPos _x) select 0}, 'ASCEND'] call BIS_fnc_sortBy
diff --git a/Missionframework/functions/fn_getOpforCap.sqf b/Missionframework/functions/fn_getOpforCap.sqf
index d9fd6cff1..4e1e277a2 100644
--- a/Missionframework/functions/fn_getOpforCap.sqf
+++ b/Missionframework/functions/fn_getOpforCap.sqf
@@ -2,7 +2,7 @@
File: fn_getOpforCap.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
- Last Update: 2020-05-10
+ Last Update: 2023-05-11
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -15,4 +15,4 @@
Total opfor units [NUMBER]
*/
-KPLIB_side_enemy countSide allUnits
+count (units KPLIB_side_enemy)
\ No newline at end of file
diff --git a/Missionframework/functions/fn_getOpforFactor.sqf b/Missionframework/functions/fn_getOpforFactor.sqf
index b5efc89ce..fd0521ffa 100644
--- a/Missionframework/functions/fn_getOpforFactor.sqf
+++ b/Missionframework/functions/fn_getOpforFactor.sqf
@@ -2,7 +2,7 @@
File: fn_getOpforFactor.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-11-25
- Last Update: 2020-05-22
+ Last Update: 2023-05-11
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -17,6 +17,6 @@
if !(KPLIB_param_adaptive) exitWith {1};
-private _bluforcount = (0.2 * (KPLIB_side_player countSide allUnits)) + ([] call KPLIB_fnc_getPlayerCount);
+private _bluforcount = (0.2 * (count (units KPLIB_side_player))) + ([] call KPLIB_fnc_getPlayerCount);
(0.5 + (_bluforcount / 25.0)) min 1
diff --git a/Missionframework/functions/fn_getOpforSpawnPointSAM.sqf b/Missionframework/functions/fn_getOpforSpawnPointSAM.sqf
new file mode 100644
index 000000000..9356c9327
--- /dev/null
+++ b/Missionframework/functions/fn_getOpforSpawnPointSAM.sqf
@@ -0,0 +1,96 @@
+/*
+ File: fn_getOpforSpawnPointSAM.sqf
+ Author: KP Liberation Dev Team
+ Date: 2020-09-29
+ Last Update: 2023-03-02
+ License: MIT License - http://www.opensource.org/licenses/MIT
+ Description:
+ Gets a random opfor spawn point marker name respecting following conditions:
+ * Wasn't used already in the current session (server restart to server restart)
+ * Distance to blufor FOBs and sectors is more than given min distance
+ * Distance to blufor FOBs and sectors is less than given max distance
+ * Distance to an opfor sector is less than 2000m (to avoid strange spawn in blufor territory)
+ * If nearest is set to true, the valid spawn point which is nearest to any blufor sector/FOB is returned
+ * If a position is given, the closest valid spawn point to that position is returned
+ Parameter(s):
+ _min - Minimum distance to any blufor sector or FOB [NUMBER, defaults to 1500]
+ _max - Maximum distance to any blufor sector or FOB [NUMBER, defaults to 100000]
+ _nearest - Provide the nearest spawn point of valid points [BOOL, defaults to false]
+ _pos - Position if the nearest spawn point to this should be selected [POSITION, defaults to [0, 0, 0]]
+ Returns:
+ Opfor spawn point for SAM turret[STRING]
+*/
+
+params [
+ ["_min", 1500, [0]],
+ ["_max", 100000, [0]],
+ ["_nearest", false, [false]],
+ ["_pos", [0, 0, 0], [[]], [2, 3]]
+];
+
+private _possibleSpawns = [];
+
+// Only check for opfor spawn points which aren't used already in the current session
+private _sectorsToCheck = KPLIB_sectors_spawn;
+if (!isNil "KPLIB_usedPositions_SAM") then {
+ _sectorsToCheck = KPLIB_sectors_spawn - KPLIB_usedPositions_SAM;
+};
+
+private ["_valid", "_current", "_distances"];
+{
+ _valid = true;
+ _current = _x;
+
+ // Fetch distances to FOBs
+ _distances = (KPLIB_sectors_fob apply {(markerPos _current) distance2d _x}) select {_x < _max};
+
+ // Fetch distances to blufor sectors
+ _distances append ((KPLIB_sectors_player apply {(markerPos _current) distance2d (markerPos _x)}) select {_x < _max});
+
+ // Invalid, if all sectors and FOBs are further away than given max distance
+ if (_distances isEqualTo []) then {
+ _valid = false;
+ } else {
+ // Invalid, if one sector or FOB is closer than min distance
+ _distances sort true;
+ if ((_distances select 0) < _min) then {
+ _valid = false;
+ };
+ };
+
+ // Make sure that there is an opfor sector in sensible range to spawn
+ if (_valid) then {
+ if ((KPLIB_sectors_all - KPLIB_sectors_player) findIf {((markerPos _current) distance2D (markerPos _x)) < 2000} < 0) then {
+ _valid = false;
+ };
+ };
+
+ // Make sure that there is no blufor unit inside min dist to spawn
+ if (_valid) then {
+ if (([markerpos _current, _min, KPLIB_side_player] call KPLIB_fnc_getUnitsCount) > 0) then {
+ _valid = false;
+ };
+ };
+
+ // Add distance and marker name to possible spawn, if still valid
+ if (_valid) then {
+ _possibleSpawns pushBack [_distances select 0, _current];
+ };
+} forEach _sectorsToCheck;
+
+// Return empty string, if no possible spawn point was found
+if (_possibleSpawns isEqualTo []) exitWith {["No opfor SAM spawn point found", "WARNING"] call KPLIB_fnc_log; ""};
+
+// Return nearest spawn point to a blufor sector/FOB, if selected via parameter
+if (_nearest) exitWith {
+ _possibleSpawns sort true;
+ (_possibleSpawns select 0) select 1
+};
+
+// Return nearest spawn point to given position, if provided
+if !(_pos isEqualTo [0, 0, 0]) exitWith {
+ ([_possibleSpawns apply {_x select 1}, [_pos] , {_input0 distance (markerPos _x)} , "ASCEND"] call BIS_fnc_sortBy) select 0
+};
+
+// Return random spawn point
+(selectRandom _possibleSpawns) select 1;
\ No newline at end of file
diff --git a/Missionframework/functions/fn_getSaveData.sqf b/Missionframework/functions/fn_getSaveData.sqf
index 3147f25f1..30cfc7e95 100644
--- a/Missionframework/functions/fn_getSaveData.sqf
+++ b/Missionframework/functions/fn_getSaveData.sqf
@@ -36,7 +36,7 @@ private ["_fobPos", "_fobObjects", "_grpUnits", "_fobMines"];
{
_fobPos = _x;
_fobObjects = (_fobPos nearObjects (KPLIB_range_fob * 1.2)) select {
- ((toLower (typeof _x)) in KPLIB_classnamesToSave) && // Exclude classnames which are not in the presets
+ ((toLowerANSI (typeof _x)) in KPLIB_classnamesToSave) && // Exclude classnames which are not in the presets
{alive _x} && // Exclude dead or broken objects
{getObjectType _x >= 8} && // Exclude preplaced terrain objects
{speed _x < 5} && // Exclude moving objects (like civilians driving through)
@@ -44,10 +44,10 @@ private ["_fobPos", "_fobObjects", "_grpUnits", "_fobMines"];
{((getpos _x) select 2) < 10} && // Exclude hovering helicopters and the like
{!(_x getVariable ["KPLIB_edenObject", false])} && // Exclude all objects placed via editor in mission.sqm
{!(_x getVariable ["KPLIB_preplaced", false])} && // Exclude preplaced (e.g. little birds from carrier)
- {!((toLower (typeOf _x)) in KPLIB_crates)} // Exclude storage crates (those are handled separately)
+ {!((toLowerANSI (typeOf _x)) in KPLIB_crates)} // Exclude storage crates (those are handled separately)
};
- _allObjects = _allObjects + (_fobObjects select {!((toLower (typeOf _x)) in KPLIB_storageBuildings)});
+ _allObjects = _allObjects + (_fobObjects select {!((toLowerANSI (typeOf _x)) in KPLIB_storageBuildings)});
_allStorages = _allStorages + (_fobObjects select {(_x getVariable ["KPLIB_storage_type",-1]) == 0});
// Process all groups near this FOB
@@ -79,7 +79,7 @@ private ["_savedPos", "_savedVecDir", "_savedVecUp", "_class", "_hasCrew"];
_hasCrew = false;
// Determine if vehicle is crewed
- if ((toLower _class) in KPLIB_b_allVeh_classes) then {
+ if ((toLowerANSI _class) in KPLIB_b_allVeh_classes) then {
if (({!isPlayer _x} count (crew _x) ) > 0) then {
_hasCrew = true;
};
@@ -88,7 +88,7 @@ private ["_savedPos", "_savedVecDir", "_savedVecUp", "_class", "_hasCrew"];
// Only save player side, seized or captured objects
if (
(!(_class in KPLIB_c_vehicles) || {_x getVariable ["KPLIB_seized", false]}) &&
- (!((toLower _class) in KPLIB_o_allVeh_classes) || {_x getVariable ["KPLIB_captured", false]})
+ (!((toLowerANSI _class) in KPLIB_o_allVeh_classes) || {_x getVariable ["KPLIB_captured", false]})
) then {
_objectsToSave pushBack [_class, _savedPos, _savedVecDir, _savedVecUp, _hasCrew];
};
diff --git a/Missionframework/functions/fn_getSaveableParam.sqf b/Missionframework/functions/fn_getSaveableParam.sqf
index 3f29998a8..2754aee12 100644
--- a/Missionframework/functions/fn_getSaveableParam.sqf
+++ b/Missionframework/functions/fn_getSaveableParam.sqf
@@ -2,7 +2,7 @@
File: fn_getSaveableParam.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2018-01-27
- Last Update: 2020-08-06
+ Last Update: 2023-03-03
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -37,7 +37,7 @@ switch (_action) do {
// Save to profileNamespace
case 0: {
_value = [_paramName, _defaultValue] call bis_fnc_getParamValue;
- private _savedParams = profileNamespace getVariable KPLIB_save_paramKey;
+ private _savedParams = parseSimpleArray (str (profileNamespace getVariable KPLIB_save_paramKey));
if(isNil "_savedParams") then {
if (KPLIB_savegame_debug > 0) then {["Param save data is corrupted, creating new.", "PARAM"] call KPLIB_fnc_log;};
@@ -63,7 +63,7 @@ switch (_action) do {
};
// Load from profileNamespace
case 1: {
- private _savedParams = profileNamespace getVariable KPLIB_save_paramKey;
+ private _savedParams = parseSimpleArray (str (profileNamespace getVariable KPLIB_save_paramKey));
if(isNil "_savedParams") then {
if (KPLIB_savegame_debug > 0) then {["Param save data is corrupted, can't load!", "PARAM"] call KPLIB_fnc_log;};
// Fix param save data
diff --git a/Missionframework/functions/fn_getSectorRange.sqf b/Missionframework/functions/fn_getSectorRange.sqf
index 905f40f53..b2a03cc41 100644
--- a/Missionframework/functions/fn_getSectorRange.sqf
+++ b/Missionframework/functions/fn_getSectorRange.sqf
@@ -10,16 +10,29 @@
Parameter(s):
_unitCount - Number of units to take into account [NUMBER, defaults to 0]
+ _sector - Sector from KPLIB_sectors_all
Returns:
Calculated sector size [NUMBER]
*/
params [
- ["_unitCount", 0, [0]]
+ ["_unitCount", 0, [0]],
+ "_sector"
];
+private _activationRange = KPLIB_range_sectorActivation;
-if (_unitCount < (KPLIB_cap_enemySide / 2)) exitWith {KPLIB_range_sectorActivation};
-if (_unitCount <= KPLIB_cap_enemySide) exitWith {KPLIB_range_sectorActivation - (KPLIB_range_sectorActivation * 0.5 * ((_unitCount / KPLIB_cap_enemySide) - 0.5))};
-KPLIB_range_sectorActivation * 0.75
+switch (true) do {
+ case (_sector in KPLIB_sectors_spawn): { _activationRange = KPLIB_range_pointActivation; };
+ case (_sector in KPLIB_sectors_city): { _activationRange = KPLIB_range_cityActivation; };
+ case (_sector in KPLIB_sectors_tower): { _activationRange = KPLIB_range_towerActivation; };
+ case (_sector in KPLIB_sectors_factory): { _activationRange = KPLIB_range_factoryActivation; };
+ case (_sector in KPLIB_sectors_military): { _activationRange = KPLIB_range_militaryActivation; };
+ case (_sector in KPLIB_sectors_capital): { _activationRange = KPLIB_range_capitalActivation; };
+ case (_sector in KPLIB_sectors_airSpawn): { _activationRange = KPLIB_range_airSpawnActivation; };
+};
+
+if (_unitCount < (KPLIB_cap_enemySide / 2)) exitWith {_activationRange};
+if (_unitCount <= KPLIB_cap_enemySide) exitWith {_activationRange - (_activationRange * 0.5 * ((_unitCount / KPLIB_cap_enemySide) - 0.5))};
+_activationRange * 0.75
diff --git a/Missionframework/functions/fn_getUnitsCount.sqf b/Missionframework/functions/fn_getUnitsCount.sqf
index 9a1324cf3..162618e23 100644
--- a/Missionframework/functions/fn_getUnitsCount.sqf
+++ b/Missionframework/functions/fn_getUnitsCount.sqf
@@ -2,7 +2,7 @@
File: fn_getUnitsCount.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
- Last Update: 2020-05-22
+ Last Update: 2023-05-11
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -23,9 +23,9 @@ params [
["_side", KPLIB_side_player, [sideEmpty]]
];
-private _amount = _side countSide ((_pos nearEntities ["Man", _radius]) select {!(captive _x) && ((getpos _x) select 2 < 500)});
+private _amount = _side countSide ((_pos nearEntities ["CAManBase", _radius]) select {!(captive _x) && ((getpos _x) select 2 < 500) && lifeState _x != "INCAPACITATED"});
{
_amount = _amount + (_side countSide (crew _x));
-} forEach ((_pos nearEntities [["Car", "Tank", "Air", "Boat"], _radius]) select {((getpos _x) select 2 < 500) && count (crew _x) > 0});
+} forEach ((_pos nearEntities [["Car", "Tank", "Air", "Ship"], _radius]) select {((getpos _x) select 2 < 500) && count (crew _x) > 0});
_amount
diff --git a/Missionframework/functions/fn_getWeaponComponents.sqf b/Missionframework/functions/fn_getWeaponComponents.sqf
index 5d945a753..91b9f246c 100644
--- a/Missionframework/functions/fn_getWeaponComponents.sqf
+++ b/Missionframework/functions/fn_getWeaponComponents.sqf
@@ -34,7 +34,7 @@ if (!isClass _config) exitWith {
// get attachments
private _attachments = [];
{
- _attachments pushBack toLower getText (_x >> "item");
+ _attachments pushBack toLowerANSI getText (_x >> "item");
} forEach ("true" configClasses (_config >> "LinkedItems")); // inheritance is apparently disabled for these
// get first parent without attachments
@@ -47,7 +47,7 @@ while {isClass _config && {getNumber (_config >> "scope") > 0}} do { // Some pre
_config = inheritsFrom _config;
};
-private _components = [toLower _baseWeapon];
+private _components = [toLowerANSI _baseWeapon];
_components append _attachments;
_components
diff --git a/Missionframework/functions/fn_handlePlacedZeusObject.sqf b/Missionframework/functions/fn_handlePlacedZeusObject.sqf
index 2bda2e60a..efd59aafa 100644
--- a/Missionframework/functions/fn_handlePlacedZeusObject.sqf
+++ b/Missionframework/functions/fn_handlePlacedZeusObject.sqf
@@ -21,7 +21,7 @@ params [
// Identify kind of placed object once
private _unit = _obj in allUnits;
private _vehicle = _obj in vehicles;
-private _crate = (toLower (typeOf _obj)) in KPLIB_crates;
+private _crate = (toLowerANSI (typeOf _obj)) in KPLIB_crates;
// Exit if building and no resource crate
if !(_unit || _vehicle || _crate) exitWith {false};
diff --git a/Missionframework/functions/fn_isRadio.sqf b/Missionframework/functions/fn_isRadio.sqf
index ac6888249..f7d6814c0 100644
--- a/Missionframework/functions/fn_isRadio.sqf
+++ b/Missionframework/functions/fn_isRadio.sqf
@@ -2,7 +2,7 @@
File: fn_isRadio.sqf
Author: Zharf - https://github.com/zharf
Date: 2019-07-07
- Last Update: 2020-05-03
+ Last Update: 2023-03-02
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -21,11 +21,13 @@ params [
if (_class isEqualTo "") exitWith {["Empty string given"] call BIS_fnc_error; false};
-if ((isClass (configFile >> "CfgPatches" >> "tfar_core")) || (isClass (configFile >> "CfgPatches" >> "task_force_radio"))) exitWith {
+private _cfgPatches = configFile >> "CfgPatches";
+
+if ((isClass (_cfgPatches >> "tfar_core")) || (isClass (_cfgPatches >> "task_force_radio"))) exitWith {
_class call TFAR_fnc_isRadio
};
-if (isClass (configFile >> "CfgPatches" >> "acre_api")) exitWith {
+if (isClass (_cfgPatches >> "acre_api")) exitWith {
[_class] call acre_api_fnc_isRadio
};
diff --git a/Missionframework/functions/fn_potatoScan.sqf b/Missionframework/functions/fn_potatoScan.sqf
index 77f70bb68..cad9a3e1e 100644
--- a/Missionframework/functions/fn_potatoScan.sqf
+++ b/Missionframework/functions/fn_potatoScan.sqf
@@ -2,7 +2,7 @@
File: fn_potatoScan.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
- Last Update: 2020-05-25
+ Last Update: 2023-05-11
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -15,7 +15,7 @@
Potato 01 [OBJECT]
*/
-private _potatoes = vehicles select {typeof _x == KPLIB_b_potato01 && alive _x};
+private _potatoes = entities "AIR" select {typeof _x == KPLIB_b_potato01 && alive _x};
if !(_potatoes isEqualTo []) then {
_potatoes select 0
} else {
diff --git a/Missionframework/functions/fn_setDiscordState.sqf b/Missionframework/functions/fn_setDiscordState.sqf
index ca315139c..750875016 100644
--- a/Missionframework/functions/fn_setDiscordState.sqf
+++ b/Missionframework/functions/fn_setDiscordState.sqf
@@ -25,7 +25,6 @@ if (_state isEqualTo "") then {
[] call {
if (player getVariable ["KPLIB_isNearStart", false]) exitWith {_state = "Startbase";};
if !(player getVariable ["KPLIB_fobName", ""] isEqualTo "") exitWith {_state = player getVariable "KPLIB_fobName";};
- if !(player getVariable ["KPLIB_nearSector", ""] isEqualTo "") exitWith {_state = markerText (player getVariable "KPLIB_nearSector");};
};
};
diff --git a/Missionframework/functions/fn_setLoadout.sqf b/Missionframework/functions/fn_setLoadout.sqf
index f4ccf2c49..7f9abc10b 100644
--- a/Missionframework/functions/fn_setLoadout.sqf
+++ b/Missionframework/functions/fn_setLoadout.sqf
@@ -170,7 +170,7 @@ _addWeapon = {
if(isArray(_muzzles)) then { // generate magazine for each muzzle
{
if (_x != "this") then {
- _magazines set [count _magazines, toLower(getArray(configFile>>"CfgWeapons">>_weapon>>_x>>"magazines") select 0)];
+ _magazines set [count _magazines, toLowerANSI(getArray(configFile>>"CfgWeapons">>_weapon>>_x>>"magazines") select 0)];
};
} forEach getArray(_muzzles);
};
diff --git a/Missionframework/functions/fn_setVehicleCaptured.sqf b/Missionframework/functions/fn_setVehicleCaptured.sqf
index 854ceaf01..81a37ba69 100644
--- a/Missionframework/functions/fn_setVehicleCaptured.sqf
+++ b/Missionframework/functions/fn_setVehicleCaptured.sqf
@@ -24,7 +24,7 @@ if (isNull _veh) exitWith {["Null object given"] call BIS_fnc_error; false};
private _type = typeOf _veh;
-if !((toLower _type) in KPLIB_o_allVeh_classes) exitWith {false};
+if !((toLowerANSI _type) in KPLIB_o_allVeh_classes) exitWith {false};
if !(_veh getVariable ["KPLIB_captured", false]) then {
_veh setVariable ["KPLIB_captured", true, true];
diff --git a/Missionframework/functions/fn_setVehicleSeized.sqf b/Missionframework/functions/fn_setVehicleSeized.sqf
index 4318ff6c8..4f55416c2 100644
--- a/Missionframework/functions/fn_setVehicleSeized.sqf
+++ b/Missionframework/functions/fn_setVehicleSeized.sqf
@@ -17,7 +17,8 @@
*/
params [
- ["_veh", objNull, [objNull]]
+ ["_veh", objNull, [objNull]],
+ ["_unit", objNull, [objNull]]
];
if (isNull _veh) exitWith {["Null object given"] call BIS_fnc_error; false};
@@ -28,7 +29,8 @@ if !(_type in KPLIB_c_vehicles) exitWith {false};
if !(_veh getVariable ["KPLIB_seized", false]) then {
_veh setVariable ["KPLIB_seized", true, true];
- [0] remoteExec ["KPLIB_fnc_crGlobalMsg"];
+ _seizedUser = name _unit;
+ [0, [_seizedUser]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
[KPLIB_cr_vehicle_penalty, true] remoteExec ["F_cr_changeCR", 2];
stats_civilian_vehicles_seized = stats_civilian_vehicles_seized + 1;
publicVariable "stats_civilian_vehicles_seized";
diff --git a/Missionframework/functions/fn_spawnMilitaryPostSquad.sqf b/Missionframework/functions/fn_spawnMilitaryPostSquad.sqf
index d556e9648..35b5fd6fd 100644
--- a/Missionframework/functions/fn_spawnMilitaryPostSquad.sqf
+++ b/Missionframework/functions/fn_spawnMilitaryPostSquad.sqf
@@ -31,13 +31,14 @@ if (_allPosts isEqualTo []) exitWith {[]};
// Spawn units
private _grp = createGroup [KPLIB_side_enemy, true];
+_grp setVariable ["acex_headless_blacklist", true, true];
private _unit = objNull;
private _units = [];
{
_unit = [[KPLIB_o_marksman, KPLIB_o_machinegunner] select (random 100 > 50), _pos, _grp] call KPLIB_fnc_createManagedUnit;
_unit setdir (180 + (getdir _x));
_unit setpos (([_x] call BIS_fnc_buildingPositions) select 1);
- [_unit] spawn building_defence_ai;
+ [_unit, "", true] spawn building_defence_ai;
_unit setUnitPos 'UP';
_units pushback _unit;
} forEach _allPosts;
diff --git a/Missionframework/functions/fn_spawnRegularSquad.sqf b/Missionframework/functions/fn_spawnRegularSquad.sqf
index 432352715..d79c71a3a 100644
--- a/Missionframework/functions/fn_spawnRegularSquad.sqf
+++ b/Missionframework/functions/fn_spawnRegularSquad.sqf
@@ -2,7 +2,7 @@
File: fn_spawnRegularSquad.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
- Last Update: 2020-05-10
+ Last Update: 2023-05-11
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -30,10 +30,10 @@ private _i = 0;
while {_spawnPos isEqualTo []} do {
_i = _i + 1;
_spawnPos = (_sectorPos getPos [random 50, random 360]) findEmptyPosition [5, 100, "B_Heli_Light_01_F"];
- if (_i isEqualTo 10) exitWith {};
+ if (_i isEqualTo 10) exitWith {_spawnPos = (_sectorPos getPos [random 50, random 360]) findEmptyPosition [0, 100, "B_Heli_Light_01_F"];};
};
-if (_spawnPos isEqualTo zeroPos) exitWith {
+if (_spawnPos isEqualTo []) exitWith {
["No suitable spawn position found."] call BIS_fnc_error;
[format ["Couldn't find infantry spawn position for sector %1", _sector], "WARNING"] call KPLIB_fnc_log;
grpNull
@@ -44,7 +44,7 @@ private _corrected_amount = round ((count _classnames) * ([] call KPLIB_fnc_getO
private _grp = createGroup [KPLIB_side_enemy, true];
{
if (_forEachIndex < _corrected_amount) then {
- [_x, _spawnPos, _grp] call KPLIB_fnc_createManagedUnit;
+ [_x, _spawnPos, _grp, "PRIVATE", 10] call KPLIB_fnc_createManagedUnit;
};
} forEach _classnames;
diff --git a/Missionframework/functions/fn_spawnVehicle.sqf b/Missionframework/functions/fn_spawnVehicle.sqf
index 6c9454703..16a68a299 100644
--- a/Missionframework/functions/fn_spawnVehicle.sqf
+++ b/Missionframework/functions/fn_spawnVehicle.sqf
@@ -2,7 +2,7 @@
File: fn_spawnVehicle.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2019-12-03
- Last Update: 2023-10-28
+ Last Update: 2023-11-14
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -28,7 +28,6 @@ params [
if (_pos isEqualTo [0, 0, 0]) exitWith {["No or zero pos given"] call BIS_fnc_error; objNull};
if (_classname isEqualTo "") exitWith {["Empty string given"] call BIS_fnc_error; objNull};
-
private _newvehicle = objNull;
private _spawnpos = [];
@@ -45,7 +44,7 @@ if (_precise) then {
};
};
-if (_spawnPos isEqualTo zeroPos) exitWith {
+if (_spawnPos isEqualTo []) exitWith {
["No suitable spawn position found."] call BIS_fnc_error;
[format ["Couldn't find spawn position for %1 around position %2", _classname, _pos], "WARNING"] call KPLIB_fnc_log;
objNull
@@ -54,7 +53,7 @@ if (_spawnPos isEqualTo zeroPos) exitWith {
// If it's a chopper, spawn it flying
if (_classname in KPLIB_o_helicopters) then {
_newvehicle = createVehicle [_classname, _spawnpos, [], 0, 'FLY'];
- _newvehicle flyInHeight (80 + (random 120));
+ _newvehicle flyInHeight (100 + (random 120));
_newvehicle allowDamage false;
} else {
_newvehicle = _classname createVehicle _spawnpos;
@@ -70,9 +69,10 @@ if (_classname in KPLIB_o_helicopters) then {
_newvehicle setVectorUp surfaceNormal position _newvehicle;
};
+_newVehicle lock true;
// Clear cargo, if enabled
[_newvehicle] call KPLIB_fnc_clearCargo;
-
+_newvehicle addItemCargoGlobal ["toolkit", 1];
// Process KP object init
[_newvehicle] call KPLIB_fnc_addObjectInit;
@@ -99,5 +99,6 @@ _newvehicle addMPEventHandler ["MPKilled", {
sleep 0.1;
_newvehicle allowDamage true;
_newvehicle setDamage 0;
+_newVehicle lock false;
_newvehicle
diff --git a/Missionframework/functions/ui/fn_overlayUpdateResources.sqf b/Missionframework/functions/ui/fn_overlayUpdateResources.sqf
index 819c3a8aa..58d2bccae 100644
--- a/Missionframework/functions/ui/fn_overlayUpdateResources.sqf
+++ b/Missionframework/functions/ui/fn_overlayUpdateResources.sqf
@@ -40,7 +40,7 @@ if (!_show) exitWith {
if (_updateValues) then {
_resourceArea = [(_resourceArea select [4]), _resourceArea] select KPLIB_resources_global;
- (_overlay displayCtrl IDC_OVERLAY_RSC_LABEL_FOB) ctrlSetText toUpper _resourceArea;
+ (_overlay displayCtrl IDC_OVERLAY_RSC_LABEL_FOB) ctrlSetText toUpperANSI _resourceArea;
(_overlay displayCtrl IDC_OVERLAY_RSC_LABEL_SUPPLIES) ctrlSetText str floor KPLIB_supplies;
(_overlay displayCtrl IDC_OVERLAY_RSC_LABEL_AMMO) ctrlSetText str floor KPLIB_ammo;
(_overlay displayCtrl IDC_OVERLAY_RSC_LABEL_FUEL) ctrlSetText str floor KPLIB_fuel;
diff --git a/Missionframework/init.sqf b/Missionframework/init.sqf
index 11c65b5ba..ec6782de7 100644
--- a/Missionframework/init.sqf
+++ b/Missionframework/init.sqf
@@ -4,7 +4,7 @@ KPLIB_endgame = 0;
KPLIB_respawn_marker = "respawn";
// Version of the KP Liberation framework
-KPLIB_version = [0, 96, 8];
+KPLIB_version = [0, 96, "8apr"];
enableSaving [false, false];
@@ -20,6 +20,15 @@ if (!isServer) then {waitUntil {!isNil "KPLIB_initServerDone"};};
[] call compile preprocessFileLineNumbers "presets\init_presets.sqf";
[] call compile preprocessFileLineNumbers "KPLIB_objectInits.sqf";
+// Check if CBA is running
+if (!KPPLM_CBA) then {
+ ["CBA_A3 not loaded. Aborting Mission! KPLib_APR requires CBA!!!"] call BIS_fnc_error;
+ ["CBA_A3 not loaded. This mission requires CBA to run properly."] remoteExec ["hint", 0, true];
+ sleep 1;
+ endMission "END2";
+ false;
+};
+
// Activate selected player menu. If CBA isn't loaded -> fallback to GREUH
if (KPPLM_CBA && KPLIB_param_playerMenu) then {
[] call KPPLM_fnc_postInit;
@@ -27,6 +36,12 @@ if (KPPLM_CBA && KPLIB_param_playerMenu) then {
[] execVM "GREUH\scripts\GREUH_activate.sqf";
};
+// Temperature and humidity changes
+[{
+ ace_weather_humidityShift = 25;
+ ace_weather_temperatureShift = 27;
+},[], 1] call CBA_fnc_waitAndExecute;
+
[] call compile preprocessFileLineNumbers "scripts\shared\init_shared.sqf";
if (isServer) then {
@@ -60,6 +75,46 @@ if ((isNil {player getVariable "bis_revive_ehHandleHeal"} || isDedicated) && !(b
[] call bis_fnc_reviveInit;
};
+///////////////////////////////////////////////
+// ----- Clean and give default equipment -----
+///////////////////////////////////////////////
+if ( isServer) then {
+ private _playableUnits = playableUnits + switchableUnits;
+
+ // Get the default uniform for the first unit type in the list of buildable infantry units
+ private _basic_uniform = KPLIB_b_basic_uniform;
+ {
+ [
+ [_x,_basic_uniform],
+ {
+ // Some commands are Local Argument, so they have to be executed remotely
+ // Because the unit controlled by the player belongs to the player's computer (Local Argument), it cannot be removed without remote
+ params ["_unit","_basic_uniform"];
+
+ // clear all equipment
+ removeHeadgear _unit; // Clear Headgear
+ removeGoggles _unit; // Clear face gear (glasses...etc)
+ removeAllAssignedItems _unit; // Clear equipable items
+ removeAllWeapons _unit; // Clear primary weapons, secondary weapons, launchers
+ removeAllContainers _unit; // Clear Clothes, Vests, Backpacks
+
+ _unit addUniform _basic_uniform; // given a specific uniform
+ //_unit addWeapon "Rangefinder"; // Binoculars/Night Vision Goggles are classified under Weapons...
+ {
+ _unit linkItem _x; // Add and automatically equip special props
+ } foreach [
+ "ItemCompass",
+ //"ItemGPS",
+ "ItemMap",
+ "ItemWatch"
+ ];
+ }
+ ] remoteExec ["call",owner _x]; // Directly specify the computer of the player who belongs to the unit to execute, avoiding unnecessary broadcast
+ // TODO : Should AI units be filtered out so that they are not thrown into remoteExec to occupy resources?
+ } foreach _playableUnits;
+};
+////////////////////////////////
+
KPLIB_init = true;
// Notify clients that server is ready
@@ -67,3 +122,6 @@ if (isServer) then {
KPLIB_initServerDone = true;
publicVariable "KPLIB_initServerDone";
};
+
+//VAM_GUI: For changing camo and vehicle appearence without Zeus:
+[] execVM "VAM_GUI\VAM_GUI_init.sqf";
diff --git a/Missionframework/onPlayerRespawn.sqf b/Missionframework/onPlayerRespawn.sqf
index fc1e5830d..104017f68 100644
--- a/Missionframework/onPlayerRespawn.sqf
+++ b/Missionframework/onPlayerRespawn.sqf
@@ -2,6 +2,13 @@ waitUntil {!isNil "KPLIB_initServerDone"};
params ["_newUnit", "_oldUnit"];
+if( (uniform _oldUnit) isEqualTo "" ) then {
+ _newUnit addUniform KPLIB_b_basic_uniform;
+} else {
+ removeUniform _newUnit;
+ _newUnit addUniform (uniform _oldUnit);
+};
+
if (isNil "KPLIB_respawn_loadout") then {
removeAllWeapons player;
removeAllItems player;
@@ -13,7 +20,8 @@ if (isNil "KPLIB_respawn_loadout") then {
player linkItem "ItemMap";
player linkItem "ItemCompass";
player linkItem "ItemWatch";
- player linkItem "ItemRadio";
+ //player unlinkItem "ItemRadio";
+ //player unlinkItem "ItemGPS";
} else {
sleep 4;
[player, KPLIB_respawn_loadout] call KPLIB_fnc_setLoadout;
diff --git a/Missionframework/presets/arsenal/allowedExtension.sqf b/Missionframework/presets/arsenal/allowedExtension.sqf
index 21a0fadc6..f0494d7e9 100644
--- a/Missionframework/presets/arsenal/allowedExtension.sqf
+++ b/Missionframework/presets/arsenal/allowedExtension.sqf
@@ -20,6 +20,181 @@
// Extension list of allowed arsenal gear
KPLIB_arsenalAllowedExtension = [
+ //"ACE_Chemlight_Shield_Blue",
+ //"ACE_Chemlight_Shield_Green",
+ //"ACE_Chemlight_Shield_Orange",
+ //"ACE_Chemlight_Shield_Red",
+ //"ACE_Chemlight_Shield_White",
+ //"ACE_Chemlight_Shield_Yellow",
+ //Cancer
+ "murshun_cigs_matches",
+ "murshun_cigs_lighter",
+ "murshun_cigs_cigpack",
+ "immersion_pops_poppack",
+ //"ACE_launch_NLAW_Used_F",
+ "ACE_PreloadedMissileDummy_CUP",
+ "ACE_PreloadedMissileDummy_Igla_CUP",
+ "ACE_PreloadedMissileDummy_M72A6_CUP",
+ "ACE_PreloadedMissileDummy_NLAW_CUP",
+ "ACE_PreloadedMissileDummy_RPG18_CUP",
+ "ACE_PreloadedMissileDummy_Stinger_CUP",
+ "ACE_PreloadedMissileDummy_Strela_2_CUP",
"ACE_ReserveParachute",
- "ItemRadioAcreFlagged"
-];
+ //ACE Start
+ "ACE_adenosine",
+ "ACE_salineIV",
+ "ACE_salineIV_250",
+ "ACE_salineIV_500",
+ "acex_intelitems_notepad",
+ "ACE_Fortify",
+ "ACE_CableTie",
+ "ToolKit",
+ "ACE_EarPlugs",
+ "ACE_wirecutter",
+ "ACE_MapTools",
+ "ACE_fieldDressing",
+ "ACE_bloodIV",
+ "ACE_bloodIV_250",
+ "ACE_bloodIV_500",
+ "ACE_bodyBag",
+ "ACE_epinephrine",
+ "ACE_morphine",
+ "ACE_personalAidKit",
+ "ACE_Sandbag_empty",
+ "ACE_tourniquet",
+ "ACE_SpareBarrel",
+ "ACE_EntrenchingTool",
+ "ACE_rope12",
+ "ACE_rope15",
+ "ACE_rope18",
+ "ACE_rope27",
+ "ACE_rope36",
+ "ACE_elasticBandage",
+ "ACE_packingBandage",
+ "ACE_quikclot",
+ "ItemMap",
+ "ItemCompass",
+ "ACE_splint",
+ "ACE_Banana",
+ "ACE_Canteen_Half",
+ "ACE_Canteen_Empty",
+ "ACE_Canteen",
+ "ACE_Sunflower_Seeds",
+ "ACE_surgicalKit",
+ "ACE_artilleryTable", // Artillery Rangetable
+ "ACE_RangeCard", // Range Card
+ "ACE_RangeTable_82mm", // 82 mm Rangetable
+ "ACE_LIB_FireCord",
+ "ACE_PlottingBoard",
+ "ACE_WaterBottle",
+ "ACE_WaterBottle_Half",
+ "ACE_WaterBottle_Empty",
+
+ //ACE End
+ "BWA3_acc_LLM01_flash_tan",
+ "BWA3_acc_LLM01_flash_underbarrel",
+ "BWA3_acc_LLM01_flash",
+ "BWA3_acc_LLM01_laser_tan",
+ "BWA3_acc_LLM01_laser_underbarrel",
+ "BWA3_acc_LLM01_laser",
+ "BWA3_acc_VarioRay_flash",
+ "BWA3_acc_VarioRay_laser",
+ "BWA3_Bunkerfaust",
+ "BWA3_G36A2_pip",
+ "BWA3_G36A2_tan_pip",
+ "BWA3_optic_CompM2_G36A2",
+ "BWA3_optic_CompM2_tan_G36A2",
+ "BWA3_optic_EOTech_G36A2",
+ "BWA3_optic_EOTech_Mag_Off",
+ "BWA3_optic_EOTech_Mag_On",
+ "BWA3_optic_EOTech_sand_G36A2",
+ "BWA3_optic_EOTech_tan_Mag_Off",
+ "BWA3_optic_EOTech_tan_Mag_On",
+ "BWA3_optic_EOTech552_G36A2",
+ "BWA3_optic_EOTech552_tan_G36A2",
+ "BWA3_optic_Hensoldt_NSV",
+ "BWA3_optic_M5Xi_MSR_MicroT2_pip",
+ "BWA3_optic_M5Xi_MSR_pip",
+ "BWA3_optic_M5Xi_Tremor3_MicroT2_pip",
+ "BWA3_optic_M5Xi_Tremor3_pip",
+ "BWA3_optic_MicroT1_G36A2",
+ "BWA3_optic_MicroT2_G36A2",
+ "BWA3_optic_NSA80_G36",
+ "BWA3_optic_PMII_DMR_MicroT1_front_NSV_pip",
+ "BWA3_optic_PMII_DMR_MicroT1_front_NSV",
+ "BWA3_optic_PMII_DMR_MicroT1_front_pip",
+ "BWA3_optic_PMII_DMR_MicroT1_rear_NSV_pip",
+ "BWA3_optic_PMII_DMR_MicroT1_rear_NSV",
+ "BWA3_optic_PMII_DMR_MicroT1_rear_pip",
+ "BWA3_optic_PMII_DMR_NSV_pip",
+ "BWA3_optic_PMII_DMR_NSV",
+ "BWA3_optic_PMII_DMR_pip",
+ "BWA3_optic_PMII_ShortdotCC_pip",
+ "BWA3_optic_RSAS_brown_G36A2",
+ "BWA3_optic_RSAS_G36A2",
+ "BWA3_optic_RSAS_sand_G36A2",
+ "BWA3_optic_RSAS_tan_G36A2",
+ "BWA3_optic_ZO4x30_brown_IRV",
+ "BWA3_optic_ZO4x30_brown_NSV",
+ "BWA3_optic_ZO4x30_brown_pip",
+ "BWA3_optic_ZO4x30_brown_RSAS_IRV_pip",
+ "BWA3_optic_ZO4x30_brown_RSAS_IRV",
+ "BWA3_optic_ZO4x30_brown_RSAS_NSV_pip",
+ "BWA3_optic_ZO4x30_brown_RSAS_NSV",
+ "BWA3_optic_ZO4x30_brown_RSAS_pip",
+ "BWA3_optic_ZO4x30_IRV",
+ "BWA3_optic_ZO4x30_MicroT2_brown_IRV",
+ "BWA3_optic_ZO4x30_MicroT2_brown_NSV",
+ "BWA3_optic_ZO4x30_MicroT2_IRV",
+ "BWA3_optic_ZO4x30_MicroT2_NSV",
+ "BWA3_optic_ZO4x30_NSV",
+ "BWA3_optic_ZO4x30_pip",
+ "BWA3_optic_ZO4x30_RSAS_IRV_pip",
+ "BWA3_optic_ZO4x30_RSAS_IRV",
+ "BWA3_optic_ZO4x30_RSAS_NSV_pip",
+ "BWA3_optic_ZO4x30_RSAS_NSV",
+ "BWA3_optic_ZO4x30_RSAS_pip",
+ "BWA3_optic_ZO4x30i_MicroT2_pip",
+ "BWA3_optic_ZO4x30i_MicroT2_sand_pip",
+ "BWA3_optic_ZO4x30i_pip",
+ "BWA3_optic_ZO4x30i_RSAS_pip",
+ "BWA3_optic_ZO4x30i_RSAS_sand_pip",
+ "BWA3_optic_ZO4x30i_sand_pip",
+ "BWA3_PzF3_Used",
+ "BWA3_PzF3",
+ "BWA3_RGW90_Used",
+ "BWA3_RGW90",
+ "ItemRadioAcreFlagged",
+ //RHS Variants
+ //"rhs_acc_ekp8_18b",
+ //"rhs_acc_ekp8_18c",
+ //"rhs_acc_ekp8_18d",
+ "rhs_acc_pgo7v_ak",
+ "rhs_acc_pgo7v_asval",
+ "rhs_acc_pgo7v_pkp",
+ "rhs_acc_1p29_pkp",
+ "rhs_acc_1p29_asval",
+ "rhs_acc_1p78_3d",
+ "rhs_acc_pso1m2_ak",
+ "rhs_acc_pso1m2_pkp",
+ "rhs_acc_pso1m2_asval",
+ "rhs_acc_pso1m21_ak",
+ "rhs_acc_pso1m21_svd",
+ "rhs_acc_pso1m21_pkp",
+ "rhsgref_acc_l2a2_3d",
+ "rhs_m136_hedp_mag",
+ "rhs_m136_hp_mag",
+ "rhs_m136_mag",
+ "rhs_m72a7_mag",
+ "rhs_rpg26_mag",
+ "rhs_rshg2_mag",
+ "rhs_rpg18_mag",
+ //"rhs_weap_M136_used",
+ "rhsusf_acc_anpeq15_bk_light_h",
+ //"rhsusf_acc_g33_T1_flip",
+ //"rhsusf_acc_g33_xps3_flip",
+ //"rhsusf_acc_g33_xps3_tan_flip",
+ "sma_spitfire_03_rds_low_ard_red",
+ "UK3CB_BAF_AT4_CS_AP_Mag",
+ "UK3CB_BAF_Javelin_Launcher"
+];
\ No newline at end of file
diff --git a/Missionframework/presets/arsenal/vanilla_nato_mtp.sqf b/Missionframework/presets/arsenal/vanilla_nato_mtp.sqf
index ad4c1c837..c6608af49 100644
--- a/Missionframework/presets/arsenal/vanilla_nato_mtp.sqf
+++ b/Missionframework/presets/arsenal/vanilla_nato_mtp.sqf
@@ -17,10 +17,10 @@ KPLIB_arsenalWeapons = [
"arifle_MXC_F", // MXC 6.5 mm
"arifle_MXM_F", // MXM 6.5 mm
"arifle_SDAR_F", // SDAR 5.56 mm
- "srifle_LRR_camo_F", // M320 LRR .408 (Camo)
+ "srifle_LRR_camo_F", // M320 LRR .408 (Camo)
"SMG_01_F", // Vermin SMG .45 ACP
"MMG_02_sand_F", // SPMG .338 (Sand)
- "srifle_DMR_02_sniper_F", // MAR-10 .338 (Sand)
+ "srifle_DMR_02_sniper_F", // MAR-10 .338 (Sand)
"srifle_DMR_03_tan_F", // Mk-I EMR 7.62 mm (Sand)
// Handgun
@@ -69,7 +69,7 @@ KPLIB_arsenalItems = [
"U_B_FullGhillie_ard", // Full Ghillie (Arid) [NATO]
"U_B_FullGhillie_sard", // Full Ghillie (Semi-Arid) [NATO]
"U_B_FullGhillie_lsh", // Full Ghillie (Lush) [NATO]
- "U_B_CBRN_Suit_01_MTP_F", // CBRN Suit (MTP) [NATO]
+ "U_B_CBRN_Suit_01_MTP_F", // CBRN Suit (MTP) [NATO]
// Headgear
"H_Watchcap_camo", // Beanie (Green)
diff --git a/Missionframework/presets/enemies/aaf.sqf b/Missionframework/presets/enemies/aaf.sqf
index db1e6b788..85a4c7a79 100644
--- a/Missionframework/presets/enemies/aaf.sqf
+++ b/Missionframework/presets/enemies/aaf.sqf
@@ -148,7 +148,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"I_Truck_02_transport_F", // Kamaz Transport
"I_Truck_02_covered_F", // Kamaz Transport (Covered)
diff --git a/Missionframework/presets/enemies/apex.sqf b/Missionframework/presets/enemies/apex.sqf
index 7c08ced99..f749cb0da 100644
--- a/Missionframework/presets/enemies/apex.sqf
+++ b/Missionframework/presets/enemies/apex.sqf
@@ -130,7 +130,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"O_T_Truck_03_transport_ghex_F", // Tempest Transport
"O_T_Truck_03_covered_ghex_F", // Tempest Transport (Covered)
@@ -153,3 +153,10 @@ KPLIB_o_planes = [
"O_Plane_CAS_02_dynamicLoadout_F", // To-199 Neophron (CAS)
"O_Plane_Fighter_02_F" // To-201 Shikra
];
+
+// Enemy SAM turrets that will be spawned in the back country
+KPLIB_o_turrets_SAM = [
+ ["B_SAM_System_01_F"],
+ ["B_SAM_System_02_F"],
+ ["O_SAM_System_04_F", "O_Radar_System_02_F"]
+];
\ No newline at end of file
diff --git a/Missionframework/presets/enemies/cup_afrf_msv.sqf b/Missionframework/presets/enemies/cup_afrf_msv.sqf
index 66bdb2ec6..0ad01ba63 100644
--- a/Missionframework/presets/enemies/cup_afrf_msv.sqf
+++ b/Missionframework/presets/enemies/cup_afrf_msv.sqf
@@ -154,7 +154,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_O_Ka60_Grey_RU", // Ka-60 Kasatka Grey (Rockets)
"CUP_O_Mi8_RU", // Mi-8MTV3
diff --git a/Missionframework/presets/enemies/cup_afrf_msv_modern.sqf b/Missionframework/presets/enemies/cup_afrf_msv_modern.sqf
index 5be057239..254c02a53 100644
--- a/Missionframework/presets/enemies/cup_afrf_msv_modern.sqf
+++ b/Missionframework/presets/enemies/cup_afrf_msv_modern.sqf
@@ -154,7 +154,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_O_Ka60_Grey_RU", // Ka-60 Kasatka Grey (Rockets)
"CUP_O_Mi8_RU", // Mi-8MTV3
diff --git a/Missionframework/presets/enemies/cup_baf_desert.sqf b/Missionframework/presets/enemies/cup_baf_desert.sqf
index 4d3608985..ffaa3c071 100644
--- a/Missionframework/presets/enemies/cup_baf_desert.sqf
+++ b/Missionframework/presets/enemies/cup_baf_desert.sqf
@@ -147,7 +147,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_B_BAF_Coyote_L2A1_D", // Coyote L2A1 (Woodland)
"CUP_B_BAF_Coyote_GMG_D", // Coyote GMG (Woodland)
diff --git a/Missionframework/presets/enemies/cup_baf_woodland.sqf b/Missionframework/presets/enemies/cup_baf_woodland.sqf
index 4100c1cb8..e847a1993 100644
--- a/Missionframework/presets/enemies/cup_baf_woodland.sqf
+++ b/Missionframework/presets/enemies/cup_baf_woodland.sqf
@@ -147,7 +147,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_B_BAF_Coyote_L2A1_W", // Coyote L2A1 (Woodland)
"CUP_B_BAF_Coyote_GMG_W", // Coyote GMG (Woodland)
diff --git a/Missionframework/presets/enemies/cup_cdf.sqf b/Missionframework/presets/enemies/cup_cdf.sqf
index d475075bb..7bdf0d540 100644
--- a/Missionframework/presets/enemies/cup_cdf.sqf
+++ b/Missionframework/presets/enemies/cup_cdf.sqf
@@ -140,7 +140,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_B_BTR60_CDF", // BTR-60PB
"CUP_B_MTLB_pk_CDF", // MT-LB LV
diff --git a/Missionframework/presets/enemies/cup_chdkz.sqf b/Missionframework/presets/enemies/cup_chdkz.sqf
index d3d6e5166..6e383e916 100644
--- a/Missionframework/presets/enemies/cup_chdkz.sqf
+++ b/Missionframework/presets/enemies/cup_chdkz.sqf
@@ -139,7 +139,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_O_BTR60_CHDKZ", // BTR-60PB
"CUP_O_BTR80_CHDKZ", // BTR-80
diff --git a/Missionframework/presets/enemies/cup_sla.sqf b/Missionframework/presets/enemies/cup_sla.sqf
index 8a032cebc..9aac22182 100644
--- a/Missionframework/presets/enemies/cup_sla.sqf
+++ b/Missionframework/presets/enemies/cup_sla.sqf
@@ -146,7 +146,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"CUP_O_BMP2_SLA", // BMP-2
"CUP_O_Mi24_D_Dynamic_SLA", // Mi-24D
diff --git a/Missionframework/presets/enemies/custom.sqf b/Missionframework/presets/enemies/custom.sqf
index c6cee9085..26a955516 100644
--- a/Missionframework/presets/enemies/custom.sqf
+++ b/Missionframework/presets/enemies/custom.sqf
@@ -128,7 +128,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"O_Truck_03_transport_F", // Tempest Transport
"O_Truck_03_covered_F", // Tempest Transport (Covered)
@@ -149,3 +149,37 @@ KPLIB_o_planes = [
"O_Plane_CAS_02_dynamicLoadout_F", // To-199 Neophron (CAS)
"O_Plane_Fighter_02_F" // To-201 Shikra
];
+
+// Enemy defence turrets that will be spawned in sectors.
+KPLIB_o_turrets_HMG = [
+ "O_HMG_01_F",
+ "O_HMG_01_high_F"
+];
+
+// Enemy defence turrets that will be spawned in sectors.
+KPLIB_o_turrets_GMG = [
+ "O_GMG_01_F",
+ "O_GMG_01_high_F"
+];
+
+// Enemy defence turrets that will be spawned in sectors.
+KPLIB_o_turrets_AT = [
+ "O_static_AT_F"
+];
+
+// Enemy defence turrets that will be spawned in sectors.
+KPLIB_o_turrets_AA = [
+ "O_static_AA_F"
+];
+
+// Enemy defence turrets that will be spawned in sectors.
+KPLIB_o_turrets_MORTAR = [
+ "O_Mortar_01_F"
+];
+
+// Enemy SAM turrets that will be spawned in the back country
+KPLIB_o_turrets_SAM = [
+ ["B_SAM_System_01_F"],
+ ["B_SAM_System_02_F"],
+ ["O_SAM_System_04_F", "O_Radar_System_02_F"]
+];
\ No newline at end of file
diff --git a/Missionframework/presets/enemies/islamic_state.sqf b/Missionframework/presets/enemies/islamic_state.sqf
index 07c96a9b8..ef08e8f96 100644
--- a/Missionframework/presets/enemies/islamic_state.sqf
+++ b/Missionframework/presets/enemies/islamic_state.sqf
@@ -146,7 +146,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"LOP_ISTS_OPF_Truck", // Truck (Cargo)
"LOP_ISTS_OPF_BMP1", // BMP-1
diff --git a/Missionframework/presets/enemies/nato.sqf b/Missionframework/presets/enemies/nato.sqf
index 002d15da5..cd69484a7 100644
--- a/Missionframework/presets/enemies/nato.sqf
+++ b/Missionframework/presets/enemies/nato.sqf
@@ -132,7 +132,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"B_Truck_01_transport_F", // HEMTT Transport
"B_Truck_01_covered_F", // HEMTT Transport (Covered)
diff --git a/Missionframework/presets/enemies/rhs_afrf.sqf b/Missionframework/presets/enemies/rhs_afrf.sqf
index 54d7cc045..91e5350ce 100644
--- a/Missionframework/presets/enemies/rhs_afrf.sqf
+++ b/Missionframework/presets/enemies/rhs_afrf.sqf
@@ -127,7 +127,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"RHS_Ural_Open_MSV_01", // Ural-4320 Transport
"RHS_Ural_MSV_01", // Ural-4320 Transport (Covered)
diff --git a/Missionframework/presets/enemies/sla.sqf b/Missionframework/presets/enemies/sla.sqf
index 0f975f25a..419db62e1 100644
--- a/Missionframework/presets/enemies/sla.sqf
+++ b/Missionframework/presets/enemies/sla.sqf
@@ -134,7 +134,7 @@ KPLIB_o_battleGrpVehiclesLight = [
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"LOP_SLA_Ural_open",
"LOP_SLA_Ural",
diff --git a/Missionframework/presets/enemies/takistan.sqf b/Missionframework/presets/enemies/takistan.sqf
index 73740df2b..e03c99569 100644
--- a/Missionframework/presets/enemies/takistan.sqf
+++ b/Missionframework/presets/enemies/takistan.sqf
@@ -132,7 +132,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"LOP_TKA_Ural_open", // Ural-4320 Transport
"LOP_TKA_Ural", // Ural-4320 Transport (Covered)
diff --git a/Missionframework/presets/enemies/unsung.sqf b/Missionframework/presets/enemies/unsung.sqf
index 6ed02d267..3fe356dc2 100644
--- a/Missionframework/presets/enemies/unsung.sqf
+++ b/Missionframework/presets/enemies/unsung.sqf
@@ -131,7 +131,7 @@ KPLIB_o_battleGrpVehiclesLight = [
];
/* All vehicles that spawn within battlegroups (see the above 2 arrays) and also hold 8 soldiers as passengers.
-If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
+If something in this array can't hold all 8 soldiers then buggy behaviours may occur. */
KPLIB_o_troopTransports = [
"uns_nvatruck_open", // Ural Truck (Open)
"uns_nvatruck", // Ural Truck
diff --git a/Missionframework/presets/init_presets.sqf b/Missionframework/presets/init_presets.sqf
index 2fac49860..017ab5c6e 100644
--- a/Missionframework/presets/init_presets.sqf
+++ b/Missionframework/presets/init_presets.sqf
@@ -87,14 +87,20 @@ switch (KPLIB_presetCivilians) do {
default {[] call compile preprocessFileLineNumbers "presets\civilians\custom.sqf";};
};
+if (typeName KPLIB_b_mobileRespawn == typeName "") then {
+ KPLIB_b_mobileRespawns = [KPLIB_b_mobileRespawn];
+} else {
+ KPLIB_b_mobileRespawns = KPLIB_b_mobileRespawn;
+};
+
// Prices for the blufor infantry squads (supplies, ammo, fuel)
KPLIB_b_allSquads = [
- [KPLIB_b_squadLight,200,0,0],
- [KPLIB_b_squadInf,300,0,0],
- [KPLIB_b_squadAT,200,250,0],
- [KPLIB_b_squadAA,200,250,0],
- [KPLIB_b_squadRecon,250,0,0],
- [KPLIB_b_squadPara,200,0,0]
+ [KPLIB_b_squadLight,50,0,0],
+ [KPLIB_b_squadInf,75,25,0],
+ [KPLIB_b_squadAT,50,50,0],
+ [KPLIB_b_squadAA,50,50,0],
+ [KPLIB_b_squadRecon,75,0,0],
+ [KPLIB_b_squadPara,50,0,0]
];
// Squad names for build menu
@@ -111,6 +117,7 @@ KPLIB_b_squadNames = [
Checking all preset arrays for missing mods and sort out not available classnames
*/
// Blufor
+KPLIB_b_basic_uniform = getText (configFile >> "CfgVehicles" >> (KPLIB_b_infantry#0)#0 >> "uniformClass");
KPLIB_b_infantry = KPLIB_b_infantry select {[( _x select 0)] call KPLIB_fnc_checkClass};
KPLIB_b_vehLight = KPLIB_b_vehLight select {[( _x select 0)] call KPLIB_fnc_checkClass};
KPLIB_b_vehHeavy = KPLIB_b_vehHeavy select {[( _x select 0)] call KPLIB_fnc_checkClass};
@@ -124,7 +131,8 @@ KPLIB_b_squadAT = KPLIB_b_squadAT select {[_x]
KPLIB_b_squadAA = KPLIB_b_squadAA select {[_x] call KPLIB_fnc_checkClass};
KPLIB_b_squadRecon = KPLIB_b_squadRecon select {[_x] call KPLIB_fnc_checkClass};
KPLIB_b_squadPara = KPLIB_b_squadPara select {[_x] call KPLIB_fnc_checkClass};
-KPLIB_b_vehToUnlock = KPLIB_b_vehToUnlock select {[_x] call KPLIB_fnc_checkClass};
+private _elite_crosscheck = (KPLIB_b_vehLight + KPLIB_b_vehHeavy + KPLIB_b_vehAir + KPLIB_b_vehStatic + KPLIB_b_vehSupport) apply {(_x#0);};
+KPLIB_b_vehToUnlock = KPLIB_b_vehToUnlock arrayIntersect _elite_crosscheck;
// Opfor
KPLIB_o_militiaInfantry = KPLIB_o_militiaInfantry select {[_x] call KPLIB_fnc_checkClass};
@@ -153,17 +161,17 @@ KPLIB_aiResupplySources = KPLIB_aiResupplySources select {[_x]
Fetch arrays with only classnames from the blufor preset build arrays
Beware that all classnames are converted to lowercase. Important for e.g. `in` checks, as it's case-sensitive.
*/
-KPLIB_b_inf_classes = KPLIB_b_infantry apply {toLower (_x select 0)};
-KPLIB_b_light_classes = KPLIB_b_vehLight apply {toLower (_x select 0)};
-KPLIB_b_heavy_classes = KPLIB_b_vehHeavy apply {toLower (_x select 0)};
-KPLIB_b_air_classes = KPLIB_b_vehAir apply {toLower (_x select 0)};
-KPLIB_b_static_classes = KPLIB_b_vehStatic apply {toLower (_x select 0)};
-KPLIB_b_deco_classes = KPLIB_b_objectsDeco apply {toLower (_x select 0)};
-KPLIB_b_support_classes = KPLIB_b_vehSupport apply {toLower (_x select 0)};
-KPLIB_transport_classes = KPLIB_transportConfigs apply {toLower (_x select 0)};
+KPLIB_b_inf_classes = KPLIB_b_infantry apply {toLowerANSI (_x select 0)};
+KPLIB_b_light_classes = KPLIB_b_vehLight apply {toLowerANSI (_x select 0)};
+KPLIB_b_heavy_classes = KPLIB_b_vehHeavy apply {toLowerANSI (_x select 0)};
+KPLIB_b_air_classes = KPLIB_b_vehAir apply {toLowerANSI (_x select 0)};
+KPLIB_b_static_classes = KPLIB_b_vehStatic apply {toLowerANSI (_x select 0)};
+KPLIB_b_deco_classes = KPLIB_b_objectsDeco apply {toLowerANSI (_x select 0)};
+KPLIB_b_support_classes = KPLIB_b_vehSupport apply {toLowerANSI (_x select 0)};
+KPLIB_transport_classes = KPLIB_transportConfigs apply {toLowerANSI (_x select 0)};
KPLIB_b_inf_classes append (KPLIB_b_squadLight + KPLIB_b_squadInf + KPLIB_b_squadAT + KPLIB_b_squadAA + KPLIB_b_squadRecon + KPLIB_b_squadPara);
-KPLIB_b_inf_classes = KPLIB_b_inf_classes apply {toLower _x};
+KPLIB_b_inf_classes = KPLIB_b_inf_classes apply {toLowerANSI _x};
KPLIB_b_inf_classes = KPLIB_b_inf_classes arrayIntersect KPLIB_b_inf_classes;
/*
@@ -182,13 +190,14 @@ KPLIB_crates = [KPLIB_b_crateSupply, KPLIB_b_crateAmmo, KPLIB_b_crate
KPLIB_airSlots = [KPLIB_b_slotHeli, KPLIB_b_slotPlane];
KPLIB_storageBuildings = [KPLIB_b_smallStorage, KPLIB_b_largeStorage];
KPLIB_upgradeBuildings = [KPLIB_b_logiStation, KPLIB_b_airControl, KPLIB_b_slotHeli, KPLIB_b_slotPlane];
-KPLIB_aiResupplySources append [KPLIB_b_mobileRespawn, KPLIB_b_potato01, KPLIB_b_arsenal];
+KPLIB_aiResupplySources append KPLIB_b_mobileRespawns;
+KPLIB_aiResupplySources append [KPLIB_b_potato01, KPLIB_b_arsenal];
-KPLIB_crates = KPLIB_crates apply {toLower _x};
-KPLIB_airSlots = KPLIB_airSlots apply {toLower _x};
-KPLIB_storageBuildings = KPLIB_storageBuildings apply {toLower _x};
-KPLIB_upgradeBuildings = KPLIB_upgradeBuildings apply {toLower _x};
-KPLIB_aiResupplySources = KPLIB_aiResupplySources apply {toLower _x};
+KPLIB_crates = KPLIB_crates apply {toLowerANSI _x};
+KPLIB_airSlots = KPLIB_airSlots apply {toLowerANSI _x};
+KPLIB_storageBuildings = KPLIB_storageBuildings apply {toLowerANSI _x};
+KPLIB_upgradeBuildings = KPLIB_upgradeBuildings apply {toLowerANSI _x};
+KPLIB_aiResupplySources = KPLIB_aiResupplySources apply {toLowerANSI _x};
/*
Classname collections
@@ -198,12 +207,12 @@ KPLIB_allLandVeh_classes = [[], [KPLIB_b_potato01]] select (KPLIB_b_potato01 isK
{
KPLIB_allLandVeh_classes append _x;
} forEach [
- KPLIB_o_militiaVehicles apply {toLower _x},
- KPLIB_o_armyVehicles apply {toLower _x},
- KPLIB_o_armyVehiclesLight apply {toLower _x},
- KPLIB_o_battleGrpVehicles apply {toLower _x},
- KPLIB_o_battleGrpVehiclesLight apply {toLower _x},
- KPLIB_o_troopTransports apply {toLower _x},
+ KPLIB_o_militiaVehicles apply {toLowerANSI _x},
+ KPLIB_o_armyVehicles apply {toLowerANSI _x},
+ KPLIB_o_armyVehiclesLight apply {toLowerANSI _x},
+ KPLIB_o_battleGrpVehicles apply {toLowerANSI _x},
+ KPLIB_o_battleGrpVehiclesLight apply {toLowerANSI _x},
+ KPLIB_o_troopTransports apply {toLowerANSI _x},
KPLIB_b_light_classes,
KPLIB_b_heavy_classes,
KPLIB_b_support_classes select {_x isKindOf "Car" || _x isKindOf "Tank"}
@@ -214,7 +223,7 @@ KPLIB_allLandVeh_classes = KPLIB_allLandVeh_classes arrayIntersect KPLIB_allLand
KPLIB_allAirVeh_classes = [[], [KPLIB_b_potato01]] select (KPLIB_b_potato01 isKindOf "Air");
{
KPLIB_allAirVeh_classes append _x;
-} forEach [KPLIB_o_helicopters apply {toLower _x}, KPLIB_o_planes apply {toLower _x}, KPLIB_b_air_classes, KPLIB_b_support_classes select {_x isKindOf "Air"}];
+} forEach [KPLIB_o_helicopters apply {toLowerANSI _x}, KPLIB_o_planes apply {toLowerANSI _x}, KPLIB_b_air_classes, KPLIB_b_support_classes select {_x isKindOf "Air"}];
// All blufor vehicle (land and air) classnames
KPLIB_b_allVeh_classes = [];
@@ -236,12 +245,12 @@ KPLIB_o_allVeh_classes = [];
KPLIB_o_helicopters,
KPLIB_o_planes
];
-KPLIB_o_allVeh_classes = KPLIB_o_allVeh_classes apply {toLower _x};
+KPLIB_o_allVeh_classes = KPLIB_o_allVeh_classes apply {toLowerANSI _x};
KPLIB_o_allVeh_classes = KPLIB_o_allVeh_classes arrayIntersect KPLIB_o_allVeh_classes;
// All regular opfor soldier classnames
KPLIB_o_inf_classes = [KPLIB_o_sentry, KPLIB_o_rifleman, KPLIB_o_grenadier, KPLIB_o_squadLeader, KPLIB_o_teamLeader, KPLIB_o_marksman, KPLIB_o_machinegunner, KPLIB_o_heavyGunner, KPLIB_o_medic, KPLIB_o_riflemanLAT, KPLIB_o_atSpecialist, KPLIB_o_aaSpecialist, KPLIB_o_officer, KPLIB_o_sharpshooter, KPLIB_o_sniper,KPLIB_o_engineer];
-KPLIB_o_inf_classes = KPLIB_o_inf_classes apply {toLower _x};
+KPLIB_o_inf_classes = KPLIB_o_inf_classes apply {toLowerANSI _x};
/*
Vehicle type permission arrays
@@ -255,9 +264,9 @@ KPLIB_typeAirClasses = +KPLIB_b_air_classes;
case (_x isKindOf "Air"): {KPLIB_typeAirClasses pushBack _x};
default {KPLIB_typeLightClasses pushBack _x};
};
-} forEach (KPLIB_b_support_classes + [toLower KPLIB_b_potato01]);
+} forEach (KPLIB_b_support_classes + [toLowerANSI KPLIB_b_potato01]);
-// Military alphabet used for FOBs and convois
+// Military alphabet used for FOBs and convoys
KPLIB_militaryAlphabet = ["Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-Ray", "Yankee", "Zulu"];
// Misc variables
diff --git a/Missionframework/presets/players/custom.sqf b/Missionframework/presets/players/custom.sqf
index 0e22a8dee..39dd2bc04 100644
--- a/Missionframework/presets/players/custom.sqf
+++ b/Missionframework/presets/players/custom.sqf
@@ -2,7 +2,7 @@
File: custom.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2017-10-07
- Last Update: 2020-05-25
+ Last Update: 2024-06-20
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -33,7 +33,10 @@ KPLIB_b_fobBuilding = "Land_Cargo_HQ_V1_F"; // This
KPLIB_b_fobBox = "B_Slingload_01_Cargo_F"; // This is the FOB as a container.
KPLIB_b_fobTruck = "B_Truck_01_box_F"; // This is the FOB as a vehicle.
KPLIB_b_arsenal = "B_supplyCrate_F"; // This is the virtual arsenal as portable supply crates.
-KPLIB_b_mobileRespawn = "B_Truck_01_medical_F"; // This is the mobile respawn (and medical) truck.
+
+// This is the mobile respawn (and medical) truck.
+KPLIB_b_mobileRespawn = ["B_Truck_01_medical_F","B_T_Truck_01_medical_F"];
+
KPLIB_b_potato01 = "B_Heli_Transport_03_unarmed_F"; // This is Potato 01, a multipurpose mobile respawn as a helicopter.
KPLIB_b_crewUnit = "B_crew_F"; // This defines the crew for vehicles.
KPLIB_b_heliPilotUnit = "B_Helipilot_F"; // This defines the pilot for helicopters.
@@ -314,7 +317,8 @@ KPLIB_b_objectsDeco = [
KPLIB_b_vehSupport = [
[KPLIB_b_arsenal,100,200,0],
- [KPLIB_b_mobileRespawn,200,0,100],
+ [(KPLIB_b_mobileRespawn select 0),200,0,100],
+ [(KPLIB_b_mobileRespawn select 1),200,0,100],
[KPLIB_b_fobBox,300,500,0],
[KPLIB_b_fobTruck,300,500,75],
[KPLIB_b_smallStorage,0,0,0],
diff --git a/Missionframework/res/secondary/bingo_fuel.jpg b/Missionframework/res/secondary/bingo_fuel.jpg
new file mode 100644
index 000000000..913380f74
Binary files /dev/null and b/Missionframework/res/secondary/bingo_fuel.jpg differ
diff --git a/Missionframework/res/secondary/hum_aid.jpg b/Missionframework/res/secondary/hum_aid.jpg
new file mode 100644
index 000000000..1e2867833
Binary files /dev/null and b/Missionframework/res/secondary/hum_aid.jpg differ
diff --git a/Missionframework/res/secondary/humaid_obj.jpg b/Missionframework/res/secondary/humaid_obj.jpg
new file mode 100644
index 000000000..8ba6aac1a
Binary files /dev/null and b/Missionframework/res/secondary/humaid_obj.jpg differ
diff --git a/Missionframework/res/secondary/rearm_outpost.jpg b/Missionframework/res/secondary/rearm_outpost.jpg
new file mode 100644
index 000000000..d63e9ed19
Binary files /dev/null and b/Missionframework/res/secondary/rearm_outpost.jpg differ
diff --git a/Missionframework/res/ui_fullheal.paa b/Missionframework/res/ui_fullheal.paa
new file mode 100644
index 000000000..19623a87d
Binary files /dev/null and b/Missionframework/res/ui_fullheal.paa differ
diff --git a/Missionframework/scripts/client/actions/control_TimeWeather.sqf b/Missionframework/scripts/client/actions/control_TimeWeather.sqf
new file mode 100644
index 000000000..38be9dd86
--- /dev/null
+++ b/Missionframework/scripts/client/actions/control_TimeWeather.sqf
@@ -0,0 +1,68 @@
+KPLIB_control_TimeWeather = 0;
+
+createDialog "liberation_timeweather";
+waitUntil {sleep 0.1; dialog};
+waitUntil {sleep 0.1; !dialog || !alive player || KPLIB_control_TimeWeather != 0};
+
+if (KPLIB_control_TimeWeather > 0) then {
+ closeDialog 0;
+ waitUntil {sleep 0.1; !dialog};
+
+ if (KPLIB_control_TimeWeather == 1) then {
+ if (isNil "KPLIB_inProgress_TimeWeather") then {KPLIB_inProgress_TimeWeather = false;};
+ if (KPLIB_inProgress_TimeWeather) exitWith {};
+ KPLIB_inProgress_TimeWeather = true;
+ private _countdown = 15;
+ for "_i" from _countdown to 1 step -1 do {
+ [format [localize "STR_FOB_TW_ACTION_TIMESKIP_COUNTDOWN", _countdown]] remoteExec ["hint",-2];
+ _countdown = _countdown - 1;
+ sleep 1;
+ };
+ [localize "STR_FOB_TW_ACTION_TIMESKIP_START"] remoteExec ["hint",-2];
+ if !(daytime < 16 && daytime > 8) then {
+ private ["_currentHour", "_currentDate", "_newDate", "_nextDate", "_currentYear", "_currentDateNum", "_nextDateNum"];
+ _currentHour = daytime;
+ _currentDate = date;
+ _currentYear = _currentDate select 0;
+ if (_currentHour < 8) then {
+ _newDate = [_currentDate select 0, _currentDate select 1, _currentDate select 2, 9, 0];
+ } else {
+ _currentDateNum = dateToNumber _currentDate;
+ _nextDateNum = _currentDateNum + 0.00273973;
+ if (_nextDateNum > 1) then {
+ _currentYear = _currentYear + 1; _nextDateNum = 0;
+ };
+ _nextDate = numberToDate [_currentYear, _nextDateNum];
+ _newDate = [_nextDate select 0, _nextDate select 1, _nextDate select 2, 9, 0];
+ };
+ [_newDate, true, true] call BIS_fnc_setDate;
+ sleep 5;
+ [localize "STR_FOB_TW_ACTION_TIMESKIP_DONE_MORNING"] remoteExec ["hint",-2];
+ } else {
+ private ["_currentHour", "_currentDate", "_newDate", "_nextDate", "_currentYear", "_currentDateNum", "_nextDateNum"];
+ _currentHour = daytime;
+ _currentDate = date;
+ _currentYear = _currentDate select 0;
+ if (_currentHour < 21) then {
+ _newDate = [_currentDate select 0, _currentDate select 1, _currentDate select 2, 21, 0];
+ } else {
+ _currentDateNum = dateToNumber _currentDate;
+ _nextDateNum = _currentDateNum + 0.00273973;
+ if (_nextDateNum > 1) then {
+ _currentYear = _currentYear + 1; _nextDateNum = 0;
+ };
+ _nextDate = numberToDate [_currentYear, _nextDateNum];
+ _newDate = [_nextDate select 0, _nextDate select 1, _nextDate select 2, 21, 0];
+ };
+ [_newDate, true, true] call BIS_fnc_setDate;
+ sleep 5;
+ [localize "STR_FOB_TW_ACTION_TIMESKIP_DONE_NIGHT"] remoteExec ["hint",-2];
+ };
+ KPLIB_inProgress_TimeWeather = false;
+ };
+
+ if (KPLIB_control_TimeWeather == 2) then {
+ [240, 0] remoteExecCall ["setFog", 2];
+ [localize "STR_FOB_TW_ACTION_CLEARFOG_DONE"] remoteExec ["hint",-2];
+ };
+};
diff --git a/Missionframework/scripts/client/actions/do_recycle.sqf b/Missionframework/scripts/client/actions/do_recycle.sqf
index 9c28fb739..7e9e353b7 100644
--- a/Missionframework/scripts/client/actions/do_recycle.sqf
+++ b/Missionframework/scripts/client/actions/do_recycle.sqf
@@ -7,14 +7,14 @@ dorecycle = 0;
private _type = typeOf _vehToRecycle;
private _cfg = configFile >> "cfgVehicles";
-private _suppMulti = 0.5;
-private _ammoMulti = 0.5;
-private _fuelMulti = 0.5;
+private _suppMulti = 0.75;
+private _ammoMulti = 0.75;
+private _fuelMulti = 0.75;
if !(
- ((toLower _type) in KPLIB_b_deco_classes) ||
- ((toLower _type) in KPLIB_storageBuildings) ||
- ((toLower _type) in KPLIB_upgradeBuildings) ||
+ ((toLowerANSI _type) in KPLIB_b_deco_classes) ||
+ ((toLowerANSI _type) in KPLIB_storageBuildings) ||
+ ((toLowerANSI _type) in KPLIB_upgradeBuildings) ||
(_type in KPLIB_ace_crates) ||
(_type == "B_Slingload_01_Repair_F") ||
(_type == "B_Slingload_01_Fuel_F") ||
@@ -44,7 +44,7 @@ private _price_s = 0;
private _price_a = 0;
private _price_f = 0;
-if ((toLower _type) in KPLIB_o_allVeh_classes) then {
+if ((toLowerANSI _type) in KPLIB_o_allVeh_classes) then {
if (_vehToRecycle isKindOf "Car") then {
_price_s = round (60 * _suppMulti);
_price_a = round (25 * _ammoMulti);
diff --git a/Missionframework/scripts/client/actions/do_repackage_fob.sqf b/Missionframework/scripts/client/actions/do_repackage_fob.sqf
index 3b0a1278b..84b3e90a1 100644
--- a/Missionframework/scripts/client/actions/do_repackage_fob.sqf
+++ b/Missionframework/scripts/client/actions/do_repackage_fob.sqf
@@ -23,8 +23,8 @@ if (dorepackage > 0) then {
private _spawnpos = zeropos;
while {_spawnpos distance2d zeropos < 1000} do {
- _spawnpos = (getPos player) findEmptyPosition [10, 250, 'B_Heli_Transport_01_F'];
- if (_spawnpos isEqualTo []) then {_spawnpos = zeropos;};
+ _spawnpos = (getPosASL player) findEmptyPosition [10, 250, 'B_Heli_Transport_01_F'];
+ if (_spawnpos isEqualTo []) then {_spawnpos = (getPosASL player) findEmptyPosition [0, 250, 'B_Heli_Transport_01_F'];};
};
if (dorepackage == 1) then {
diff --git a/Missionframework/scripts/client/actions/intel_manager.sqf b/Missionframework/scripts/client/actions/intel_manager.sqf
index c46636add..ff43d55c4 100644
--- a/Missionframework/scripts/client/actions/intel_manager.sqf
+++ b/Missionframework/scripts/client/actions/intel_manager.sqf
@@ -10,11 +10,11 @@ private _actionned_intel_items = [];
while {true} do {
if ([5] call KPLIB_fnc_hasPermission) then {
- _near_people = (getPosATL player) nearEntities [["Man"], 5];
- _near_intel = (getPosATL player) nearEntities [KPLIB_intelObjectClasses, 5];
+ _near_people = player nearEntities [["CAManBase"], 5];
+ _near_intel = player nearEntities [KPLIB_intelObjectClasses, 5];
{
- if ((captive _x) && !(_x in _actionned_captive_units) && !((side group _x) == KPLIB_side_player) && !(_x getVariable ["ACE_isUnconscious", false])) then {
- _x addAction ["" + localize "STR_SECONDARY_CAPTURE" + "",{[_this select 0] join (group player);},"",-850,true,true,"","(vehicle player == player) && (side group _target != KPLIB_side_player) && (captive _target)"];
+ if (!(_x in _actionned_captive_units) && !(_x getVariable ["ACE_isUnconscious", false]) && !(_x getVariable ["KPLIB_prisonner_captured", false]) && (_x getVariable ["KPLIB_prisonner_surrendered", false])) then {
+ _x addAction ["" + localize "STR_SECONDARY_CAPTURE" + "",{(_this # 0) setVariable ["KPLIB_prisonner_captured", true, true];(_this # 0) setVariable ["KPLIB_prisonner_whois", _this # 1, true];},"",-850,true,true,"","!(_target getVariable ['ace_captives_isHandcuffed', false]) && !(_target getVariable ['KPLIB_prisonner_captured', false]) && (vehicle player == player) && (side group _target != KPLIB_side_player) && (captive _target)"];
_actionned_captive_units pushback _x;
};
} forEach _near_people;
@@ -51,4 +51,4 @@ while {true} do {
} forEach _actionned_intel_items;
};
sleep 3;
-};
+};
\ No newline at end of file
diff --git a/Missionframework/scripts/client/actions/open_arsenal.sqf b/Missionframework/scripts/client/actions/open_arsenal.sqf
index 31108de99..e4d805413 100644
--- a/Missionframework/scripts/client/actions/open_arsenal.sqf
+++ b/Missionframework/scripts/client/actions/open_arsenal.sqf
@@ -85,7 +85,7 @@ while { dialog && (alive player) && edit_loadout == 0 } do {
if ( load_loadout > 0 ) then {
private _loaded_loadout = _loadouts_data select (lbCurSel 201);
if (KPLIB_ace && KPLIB_param_arsenalType) then {
- [player, _loaded_loadout select 1, KP_liberation_fill_mags] call CBA_fnc_setLoadout;
+ [player, _loaded_loadout select 1, KPLIB_fill_mags] call CBA_fnc_setLoadout;
} else {
[player, [profileNamespace, _loaded_loadout]] call BIS_fnc_loadInventory;
};
diff --git a/Missionframework/scripts/client/actions/recycle_manager.sqf b/Missionframework/scripts/client/actions/recycle_manager.sqf
index 32d7d28ce..5e0283bb3 100644
--- a/Missionframework/scripts/client/actions/recycle_manager.sqf
+++ b/Missionframework/scripts/client/actions/recycle_manager.sqf
@@ -21,10 +21,10 @@ while {true} do {
if ([4] call KPLIB_fnc_hasPermission) then {
private _detected_vehicles = (getPos player) nearObjects veh_action_detect_distance select {
- (((toLower (typeof _x)) in _recycleable_classnames && (({alive _x} count (crew _x)) == 0 || unitIsUAV _x) && (locked _x == 0 || locked _x == 1)) ||
- (toLower (typeOf _x)) in KPLIB_b_deco_classes ||
- (((toLower (typeOf _x)) in KPLIB_storageBuildings) && ((_x getVariable ["KPLIB_storage_type",-1]) == 0)) ||
- (toLower (typeOf _x)) in KPLIB_upgradeBuildings ||
+ (((toLowerANSI (typeof _x)) in _recycleable_classnames && (({alive _x} count (crew _x)) == 0 || unitIsUAV _x) && (locked _x == 0 || locked _x == 1)) ||
+ (toLowerANSI (typeOf _x)) in KPLIB_b_deco_classes ||
+ (((toLowerANSI (typeOf _x)) in KPLIB_storageBuildings) && ((_x getVariable ["KPLIB_storage_type",-1]) == 0)) ||
+ (toLowerANSI (typeOf _x)) in KPLIB_upgradeBuildings ||
(typeOf _x) in KPLIB_ace_crates) &&
alive _x &&
(
diff --git a/Missionframework/scripts/client/ammoboxes/ammobox_action_manager.sqf b/Missionframework/scripts/client/ammoboxes/ammobox_action_manager.sqf
index 4cf28e515..b7d45332a 100644
--- a/Missionframework/scripts/client/ammoboxes/ammobox_action_manager.sqf
+++ b/Missionframework/scripts/client/ammoboxes/ammobox_action_manager.sqf
@@ -59,24 +59,12 @@ while {true} do {
_b_action_id2 = _next_box addAction ["" + localize "STR_ACTION_STORE_CRATE" + "",{[(_this select 0), (nearestObjects [player,KPLIB_storageBuildings,20]) select 0,true] call KPLIB_fnc_crateToStorage;},"",-502,true,true,"","build_confirmed == 0 && (_this distance _target < 5) && (vehicle player == player)"];
_b_action_id3 = _next_box addAction ["" + localize "STR_ACTION_CRATE_VALUE" + "",{[_this select 0] call KPLIB_fnc_checkCrateValue;uiSleep 3; hint "";},"",-503,true,true,"","build_confirmed == 0 && (_this distance _target < 5) && (vehicle player == player)"];
_b_action_id4 = _next_box addAction ["" + localize "STR_ACTION_CRATE_PUSH" + "",{(_this select 0) setPos ((_this select 0) getPos [1, (player getDir (_this select 0))]);},"",-504,true,false,"","build_confirmed == 0 && (_this distance _target < 5) && (vehicle player == player)"];
- _b_action_id_carry = _next_box addAction [
- "" + localize "STR_ACTION_CRATE_CARRY" + "",
- {
- params ["_crate", "_player"];
- _crate attachTo [_player, [0, 2, 1]];
- _player setVariable ["KPLIB_carriedObject", _crate];
- },
- "", -504, true, false, "",
- toString {
- build_confirmed == 0 && _this in _this && {isNull (_this getVariable ["KPLIB_carriedObject", objNull])}
- },
- 5 // radius
- ];
+ _b_action_id5 = _next_box addAction ["" + localize "STR_ACTION_CRATE_CARRY" + "",{params ["_crate", "_player"];_crate attachTo [_player, [0, 2, 1]];_player setVariable ["KPLIB_carriedObject", _crate];},"", -505, true, false, "",toString {build_confirmed == 0 && _this in _this && {isNull (_this getVariable ["KPLIB_carriedObject", objNull])}},5];
_next_box setVariable ["KPLIB_ammo_box_action", _b_action_id1, false];
_next_box setVariable ["KP_crate_store_action", _b_action_id2, false];
_next_box setVariable ["KP_crate_value_action", _b_action_id3, false];
_next_box setVariable ["KP_crate_push_action", _b_action_id4, false];
- _next_box setVariable ["KP_crate_carry_action", _b_action_id_carry, false];
+ _next_box setVariable ["KP_crate_carry_action", _b_action_id5, false];
_managed_boxes pushback _next_box;
};
diff --git a/Missionframework/scripts/client/build/do_build.sqf b/Missionframework/scripts/client/build/do_build.sqf
index a663edbd3..a667c7e4d 100644
--- a/Missionframework/scripts/client/build/do_build.sqf
+++ b/Missionframework/scripts/client/build/do_build.sqf
@@ -90,14 +90,15 @@ while { true } do {
if (buildtype == 6 ) then {
_idactplacebis = player addAction ["" + localize "STR_PLACEMENT_BIS" + "
",{build_confirmed = 2; repeatbuild = true; hint localize "STR_CONFIRM_HINT";},"",-785,false,false,"","build_invalid == 0 && build_confirmed == 1"];
};
- if (buildtype == 6 || buildtype == 99 || (toLower _classname) in KPLIB_storageBuildings || _classname isEqualTo KPLIB_b_logiStation || _classname isEqualTo KPLIB_b_airControl) then {
+ if (buildtype == 6 || buildtype == 99 || (toLowerANSI _classname) in KPLIB_storageBuildings || _classname isEqualTo KPLIB_b_logiStation || _classname isEqualTo KPLIB_b_airControl) then {
_idactsnap = player addAction ["" + localize "STR_GRID" + "",{gridmode = gridmode + 1;},"",-735,false,false,"","build_confirmed == 1"];
_idactvector = player addAction ["" + localize "STR_VECACTION" + "",{KP_vector = !KP_vector;},"",-800,false,false,"","build_confirmed == 1"];
};
_idactrotate = player addAction ["" + localize "STR_ROTATION" + "
",{build_rotation = build_rotation + 90;},"",-750,false,false,"","build_confirmed == 1"];
_idactraise = player addAction ["" + localize "STR_RAISE" + "",{build_elevation = build_elevation + 0.2;},"",-765,false,false,"","build_confirmed == 1"];
- _idactlower = player addAction ["" + localize "STR_LOWER" + "",{build_elevation = build_elevation - 0.2;},"",-766,false,false,"","build_confirmed == 1"];
+ _idactreset = player addAction ["" + localize "STR_RESET" + "",{build_elevation = 0;},"",-766,false,false,"","build_confirmed == 1"];
+ _idactlower = player addAction ["" + localize "STR_LOWER" + "",{build_elevation = build_elevation - 0.2;},"",-767,false,false,"","build_confirmed == 1"];
_idactplace = player addAction ["" + localize "STR_PLACEMENT" + "
",{build_confirmed = 2; hint localize "STR_CONFIRM_HINT";},"",-775,false,true,"","build_invalid == 0 && build_confirmed == 1"];
_ghost_spot = (markerPos "ghost_spot") findEmptyPosition [0,100];
@@ -120,7 +121,7 @@ while { true } do {
while { build_confirmed == 1 && alive player } do {
_truedir = 90 - (getdir player);
- if ((toLower (typeOf _vehicle)) in KPLIB_b_static_classes) then {
+ if ((toLowerANSI (typeOf _vehicle)) in KPLIB_b_static_classes) then {
_truepos = [((getposATL player) select 0) + (_dist * (cos _truedir)), ((getposATL player) select 1) + (_dist * (sin _truedir)),((getposATL player) select 2)];
} else {
_truepos = [((getpos player) select 0) + (_dist * (cos _truedir)), ((getpos player) select 1) + (_dist * (sin _truedir)),0];
@@ -164,7 +165,7 @@ while { true } do {
_near_objects_25 = _near_objects_25 + (_truepos nearobjects [KPLIB_b_fobBox, 50]);
_near_objects_25 = _near_objects_25 + (_truepos nearobjects [KPLIB_b_arsenal, 50]);
- if( buildtype != 6 ) then {
+ if( buildtype != 6 ) then {
_near_objects = _near_objects + (_truepos nearobjects ["Static", _dist]);
_near_objects_25 = _near_objects_25 + (_truepos nearobjects ["Static", 50]);
};
@@ -172,7 +173,7 @@ while { true } do {
private _remove_objects = [];
{
private _typeOfX = typeOf _x;
- if ((_x isKindOf "Animal") || (_typeOfX in KPLIB_collisionIgnoreObjects) || (_typeOfX isKindOf "CAManBase") || (isPlayer _x) || (_x == _vehicle) || ((toLower (typeOf _vehicle)) in KPLIB_b_static_classes)) then {
+ if ((_x isKindOf "Animal") || (_typeOfX in KPLIB_collisionIgnoreObjects) || (_typeOfX isKindOf "CAManBase") || (isPlayer _x) || (_x == _vehicle) || ((toLowerANSI (typeOf _vehicle)) in KPLIB_b_static_classes)) then {
_remove_objects pushback _x;
};
} foreach _near_objects;
@@ -180,7 +181,7 @@ while { true } do {
private _remove_objects_25 = [];
{
private _typeOfX = typeOf _x;
- if ((_x isKindOf "Animal") || (_typeOfX in KPLIB_collisionIgnoreObjects) || (_typeOfX isKindOf "CAManBase") || (isPlayer _x) || (_x == _vehicle) || ((toLower (typeOf _vehicle)) in KPLIB_b_static_classes)) then {
+ if ((_x isKindOf "Animal") || (_typeOfX in KPLIB_collisionIgnoreObjects) || (_typeOfX isKindOf "CAManBase") || (isPlayer _x) || (_x == _vehicle) || ((toLowerANSI (typeOf _vehicle)) in KPLIB_b_static_classes)) then {
_remove_objects_25 pushback _x;
};
} foreach _near_objects_25;
@@ -209,13 +210,13 @@ while { true } do {
if ( ((buildtype == 6) || (buildtype == 99)) && ((gridmode % 2) == 1) ) then {
_vehicle setpos [round (_truepos select 0),round (_truepos select 1), _truepos select 2];
} else {
- if ((toLower (typeOf _vehicle)) in KPLIB_b_static_classes) then {
+ if ((toLowerANSI (typeOf _vehicle)) in KPLIB_b_static_classes) then {
_vehicle setPosATL _truepos;
} else {
_vehicle setpos _truepos;
};
};
- if (buildtype == 6 || buildtype == 99 || (toLower _classname) in KPLIB_storageBuildings || _classname isEqualTo KPLIB_b_logiStation || _classname isEqualTo KPLIB_b_airControl) then {
+ if (buildtype == 6 || buildtype == 99 || (toLowerANSI _classname) in KPLIB_storageBuildings || _classname isEqualTo KPLIB_b_logiStation || _classname isEqualTo KPLIB_b_airControl) then {
if (KP_vector) then {
_vehicle setVectorUp [0,0,1];
} else {
@@ -304,7 +305,7 @@ while { true } do {
_vehicle = _classname createVehicle _truepos;
_vehicle allowDamage false;
_vehicle setdir _vehdir;
- if ((toLower (typeOf _vehicle)) in KPLIB_b_static_classes) then {
+ if ((toLowerANSI (typeOf _vehicle)) in KPLIB_b_static_classes) then {
_vehicle setPosATL _truepos;
} else {
_vehicle setpos _truepos;
@@ -314,7 +315,7 @@ while { true } do {
[_vehicle] call KPLIB_fnc_clearCargo;
- if (buildtype == 6 || buildtype == 99 || (toLower _classname) in KPLIB_storageBuildings || _classname isEqualTo KPLIB_b_logiStation || _classname isEqualTo KPLIB_b_airControl) then {
+ if (buildtype == 6 || buildtype == 99 || (toLowerANSI _classname) in KPLIB_storageBuildings || _classname isEqualTo KPLIB_b_logiStation || _classname isEqualTo KPLIB_b_airControl) then {
if (KP_vector) then {
_vehicle setVectorUp [0,0,1];
} else {
@@ -331,6 +332,12 @@ while { true } do {
sleep 0.3;
_vehicle allowDamage true;
_vehicle setDamage 0;
+ if ((toLowerANSI _classname) in KPLIB_o_allVeh_classes) then {
+ _vehicle setVariable ["KPLIB_captured", true, true];
+ };
+ if (_classname in KPLIB_c_vehicles) then {
+ _vehicle setVariable ["KPLIB_seized", true, true];
+ };
if(buildtype != 6) then {
_vehicle addMPEventHandler ["MPKilled", {
@@ -362,6 +369,7 @@ while { true } do {
player removeAction _idactrotate;
player removeAction _idactplace;
player removeAction _idactraise;
+ player removeAction _idactreset;
player removeAction _idactlower;
if(buildtype == 99) then {
diff --git a/Missionframework/scripts/client/build/do_build_fob.sqf b/Missionframework/scripts/client/build/do_build_fob.sqf
index ea13526cd..01357adea 100644
--- a/Missionframework/scripts/client/build/do_build_fob.sqf
+++ b/Missionframework/scripts/client/build/do_build_fob.sqf
@@ -6,8 +6,8 @@ if ( count KPLIB_sectors_fob >= KPLIB_param_maxFobs ) exitWith {
hint format [ localize "STR_HINT_FOBS_EXCEEDED", KPLIB_param_maxFobs ];
};
-_minfobdist = 1000;
-_minsectordist = KPLIB_range_sectorCapture + KPLIB_range_fob;
+_minfobdist = KPLIB_distance_fob;
+_minsectordist = KPLIB_distance_sector;
_distfob = 1;
_clearedtobuildfob = true;
_distsector = 1;
diff --git a/Missionframework/scripts/client/build/open_build_menu.sqf b/Missionframework/scripts/client/build/open_build_menu.sqf
index b5b8a0d2e..98539f925 100644
--- a/Missionframework/scripts/client/build/open_build_menu.sqf
+++ b/Missionframework/scripts/client/build/open_build_menu.sqf
@@ -2,7 +2,7 @@ scriptName "open_build_menu";
private [ "_oldbuildtype", "_cfg", "_initindex", "_dialog", "_iscommandant", "_squadname", "_buildpages", "_build_list", "_classnamevar", "_entrytext", "_icon", "_affordable", "_affordable_crew", "_selected_item", "_linked", "_linked_unlocked", "_base_link", "_link_color", "_link_str", "_nearfob", "_actual_fob"];
-if (([ getpos player , 500 , KPLIB_side_enemy ] call KPLIB_fnc_getUnitsCount ) > 4 ) exitWith { hint localize "STR_BUILD_ENEMIES_NEARBY";};
+if (([ getpos player , 300 , KPLIB_side_enemy ] call KPLIB_fnc_getUnitsCount ) > 4 ) exitWith { hint localize "STR_BUILD_ENEMIES_NEARBY";};
if (isNil "buildtype") then {buildtype = 1};
if (isNil "buildindex") then {buildindex = -1};
@@ -51,12 +51,33 @@ while {dialog && alive player && (dobuild == 0 || buildtype == 1)} do {
ctrlSetText [151, _buildpages select ( buildtype - 1)];
if (buildtype != 8) then {
_classnamevar = (_x select 0);
+ _customName = (_x select 4);
_entrytext = getText (_cfg >> _classnamevar >> "displayName");
-
+ if (!isNil {_customName}) then {
+ if (_customName != "") then {
+ _entrytext = _customName;
+ };
+ };
+
+ if (_classnamevar in KPLIB_b_mobileRespawns) then {
+ if (KPLIB_param_mobileRespawn) then {
+ if (typeName KPLIB_b_mobileRespawn == typeName "") then {
+ if (_classnamevar == KPLIB_b_mobileRespawn) then {
+ _entrytext = localize "STR_RESPAWN_TRUCK";
+ };
+ } else {
+ {
+ if (_classnamevar == _x) exitWith {
+ _entrytext = "MSP " + getText (configFile >> "CfgVehicles" >> _x >> "displayName");
+ };
+ } forEach KPLIB_b_mobileRespawns;
+ };
+ };
+ };
+
switch (_classnamevar) do {
case KPLIB_b_fobBox: {_entrytext = localize "STR_FOBBOX";};
case KPLIB_b_arsenal: {if (KPLIB_param_mobileArsenal) then {_entrytext = localize "STR_ARSENAL_BOX";};};
- case KPLIB_b_mobileRespawn: {if (KPLIB_param_mobileRespawn) then {_entrytext = localize "STR_RESPAWN_TRUCK";};};
case KPLIB_b_fobTruck: {_entrytext = localize "STR_FOBTRUCK";};
case "Flag_White_F": {_entrytext = localize "STR_INDIV_FLAG";};
case KPLIB_b_smallStorage: {_entrytext = localize "STR_SMALL_STORAGE";};
@@ -104,6 +125,15 @@ while {dialog && alive player && (dobuild == 0 || buildtype == 1)} do {
((findDisplay 5501) displayCtrl (110)) lnbSetColor [[((lnbSize 110) select 0) - 1, 2], [0.4,0.4,0.4,1]];
((findDisplay 5501) displayCtrl (110)) lnbSetColor [[((lnbSize 110) select 0) - 1, 3], [0.4,0.4,0.4,1]];
};
+ if (buildtype != 8) then {
+ _classnamevar = (_x select 0);
+ if ( _classnamevar isEqualTo "Sign_Arrow_F") then {
+ ((findDisplay 5501) displayCtrl (110)) lnbSetColor [[((lnbSize 110) select 0) - 1, 0], [1,1,0,1]];
+ ((findDisplay 5501) displayCtrl (110)) lnbSetColor [[((lnbSize 110) select 0) - 1, 1], [1,1,0,1]];
+ ((findDisplay 5501) displayCtrl (110)) lnbSetColor [[((lnbSize 110) select 0) - 1, 2], [1,1,0,1]];
+ ((findDisplay 5501) displayCtrl (110)) lnbSetColor [[((lnbSize 110) select 0) - 1, 3], [1,1,0,1]];
+ };
+ };
} foreach _build_list;
};
@@ -130,7 +160,7 @@ while {dialog && alive player && (dobuild == 0 || buildtype == 1)} do {
((_build_item select 3 == 0 ) || ((_build_item select 3) <= ((_actual_fob select 0) select 3)))
) then {
if !((_build_item select 0) isEqualType []) then {
- if ((toLower (_build_item select 0)) in KPLIB_b_air_classes && !([_build_item select 0] call KPLIB_fnc_isClassUAV)) then {
+ if ((toLowerANSI (_build_item select 0)) in KPLIB_b_air_classes && !([_build_item select 0] call KPLIB_fnc_isClassUAV)) then {
if (KPLIB_b_airControl_near &&
((((_build_item select 0) isKindOf "Helicopter") && (KPLIB_heli_count < KPLIB_heli_slots)) ||
(((_build_item select 0) isKindOf "Plane") && (KPLIB_plane_count < KPLIB_plane_slots)))
@@ -138,7 +168,7 @@ while {dialog && alive player && (dobuild == 0 || buildtype == 1)} do {
_affordable = true;
};
} else {
- if (!((toLower (_build_item select 0)) in KPLIB_airSlots) || (((toLower (_build_item select 0)) in KPLIB_airSlots) && KPLIB_b_airControl_near)) then {
+ if (!((toLowerANSI (_build_item select 0)) in KPLIB_airSlots) || (((toLowerANSI (_build_item select 0)) in KPLIB_airSlots) && KPLIB_b_airControl_near)) then {
_affordable = true;
};
};
diff --git a/Missionframework/scripts/client/civinformant/civinfo_escort.sqf b/Missionframework/scripts/client/civinformant/civinfo_escort.sqf
index 89f4b53cd..7db6869dc 100644
--- a/Missionframework/scripts/client/civinformant/civinfo_escort.sqf
+++ b/Missionframework/scripts/client/civinformant/civinfo_escort.sqf
@@ -1,49 +1,47 @@
scriptName "civinfo_escort";
params ["_informant"];
-
-if (isDedicated) exitWith {};
+private [ "_nearestfob", "_is_near_fob", "_grp" ];
if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_escort called on: %1 - Parameters: [%2]", debug_source, _informant], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
-waitUntil {sleep 0.5; local _informant || !alive _informant};
-
-if !(alive _informant) exitWith {if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_escort exited by: %1 - Informant isn't alive", debug_source], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};};
-
-private _is_near_fob = false;
-
-sleep 1;
-_informant playmove "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon";
-sleep 2;
-_informant enableAI "ANIM";
-_informant enableAI "MOVE";
-sleep 2;
-[_informant, ""] remoteExecCall ["switchMove"];
+_is_near_fob = false;
-waitUntil {sleep 5;
- _nearestfob = [getpos _informant] call KPLIB_fnc_getNearestFob;
+waitUntil {
+ sleep 5;
+ _nearestfob = [ getpos _informant ] call KPLIB_fnc_getNearestFob;
+ _is_near_fob = false;
if (count _nearestfob == 3) then {
- if ((_informant distance _nearestfob) < 30) then {
- _is_near_fob = true;
- };
+ _is_near_fob = ((_informant distance _nearestfob) < 30);
};
+
!alive _informant || (_is_near_fob && (vehicle _informant == _informant))
};
if (alive _informant) then {
- if (_is_near_fob) then {
- sleep 5;
- private _grp = createGroup [KPLIB_side_player, true];
- [_informant] joinSilent _grp;
- _informant playmove "AmovPercMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground";
- _informant disableAI "ANIM";
- _informant disableAI "MOVE";
- sleep 5;
- [_informant, "AidlPsitMstpSnonWnonDnon_ground00"] remoteExecCall ["switchMove"];
- [_informant] remoteExec ["civinfo_delivered",2];
- if (KPLIB_civinfo_debug > 0) then {["civinfo_escort -> Informant at FOB", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
- sleep 600;
- deleteVehicle _informant;
- if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_escort finished by: %1", debug_source], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ sleep 5;
+ _grp = createGroup [KPLIB_side_civilian, true];
+ [_informant] joinSilent _grp;
+ if (KPLIB_ace) then {
+ private _isCuffed = _informant getVariable ["ace_captives_isHandcuffed", false];
+ if (_isCuffed) then {
+ ["ace_captives_setHandcuffed", [_informant, false], _informant] remoteExecCall ["CBA_fnc_targetEvent", 2];
+ } else {
+ ["ace_captives_setSurrendered", [_informant, false], _informant] remoteExecCall ["CBA_fnc_targetEvent", 2];
+ };
+ sleep 1;
};
+ _informant playmove "AmovPercMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground";
+ _informant disableAI "ANIM";
+ _informant disableAI "MOVE";
+ sleep 5;
+ [_informant, "AidlPsitMstpSnonWnonDnon_ground00"] remoteExecCall ["switchMove"];
+ [_informant] remoteExec ["civinfo_delivered",2];
+ if (KPLIB_civinfo_debug > 0) then {["civinfo_escort -> Informant at FOB", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ sleep 600;
+ if (isNull objectParent _informant) then {deleteVehicle _informant} else {(objectParent _informant) deleteVehicleCrew _informant};
+ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_escort finished by: %1", debug_source], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+} else {
+ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_escort failed by: %1 - Informant isn't alive", debug_source], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ [3] remoteExec ["civinfo_notifications"];
};
diff --git a/Missionframework/scripts/client/civinformant/civinfo_notifications.sqf b/Missionframework/scripts/client/civinformant/civinfo_notifications.sqf
index 727f7eeef..c87177160 100644
--- a/Missionframework/scripts/client/civinformant/civinfo_notifications.sqf
+++ b/Missionframework/scripts/client/civinformant/civinfo_notifications.sqf
@@ -1,6 +1,6 @@
if (isDedicated) exitWith {};
-params ["_notif_id", ["_pos", getpos player]];
+params ["_notif_id", ["_pos", getpos player], ["_capturedby", player]];
if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_notifications called on: %1 - Parameters: [%2, %3]", debug_source, _notif_id, _pos], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
@@ -9,33 +9,40 @@ switch (_notif_id) do {
["lib_civ_informant_start", [markertext ([10000, _pos] call KPLIB_fnc_getNearestSector)]] call BIS_fnc_showNotification;
private _informant_marker = createMarkerLocal ["informantmarker", _pos];
_informant_marker setMarkerColorLocal "ColorCIV";
- _informant_marker setMarkerShape "ELLIPSE";
- _informant_marker setMarkerBrush "FDiagonal";
- _informant_marker setMarkerSize [500,500];
+ _informant_marker setMarkerTypeLocal "hd_unknown";
+
+ private _informant_zone = createMarkerLocal ["informantzone", _pos];
+ _informant_zone setMarkerColorLocal "ColorCIV";
+ _informant_zone setMarkerShapeLocal "ELLIPSE";
+ _informant_zone setMarkerBrushLocal "FDiagonal";
+ _informant_zone setMarkerSizeLocal [150,150];
};
case 1: {
["lib_civ_informant_success"] call BIS_fnc_showNotification;
deleteMarkerLocal "informantmarker";
+ deleteMarkerLocal "informantzone";
};
case 2: {
["lib_civ_informant_fail"] call BIS_fnc_showNotification;
deleteMarkerLocal "informantmarker";
+ deleteMarkerLocal "informantzone";
};
case 3: {
["lib_civ_informant_death"] call BIS_fnc_showNotification;
deleteMarkerLocal "informantmarker";
+ deleteMarkerLocal "informantzone";
};
case 4: {
["lib_civ_hvt_start", [markertext ([10000, _pos] call KPLIB_fnc_getNearestSector)]] call BIS_fnc_showNotification;
- private _marker = createMarker ["HVT_marker", _pos];
- _marker setMarkerColor KPLIB_color_enemyActive;
- _marker setMarkerType "hd_unknown";
+ private _marker = createMarkerLocal ["HVT_marker", _pos];
+ _marker setMarkerColorLocal KPLIB_color_enemyActive;
+ _marker setMarkerTypeLocal "hd_unknown";
- private _marker_zone = createMarker ["HVT_zone", _pos];
- _marker_zone setMarkerColor KPLIB_color_enemyActive;
- _marker_zone setMarkerShape "ELLIPSE";
- _marker_zone setMarkerBrush "FDiagonal";
- _marker_zone setMarkerSize [500,500];
+ private _marker_zone = createMarkerLocal ["HVT_zone", _pos];
+ _marker_zone setMarkerColorLocal KPLIB_color_enemyActive;
+ _marker_zone setMarkerShapeLocal "ELLIPSE";
+ _marker_zone setMarkerBrushLocal "FDiagonal";
+ _marker_zone setMarkerSizeLocal [500,500];
};
case 5: {
["lib_civ_hvt_success"] call BIS_fnc_showNotification;
@@ -47,5 +54,10 @@ switch (_notif_id) do {
deleteMarkerLocal "HVT_marker";
deleteMarkerLocal "HVT_zone";
};
+ case 7: {
+ ["lib_civ_informant_escort", [name _capturedby]] call BIS_fnc_showNotification;
+ deleteMarkerLocal "informantmarker";
+ deleteMarkerLocal "informantzone";
+ };
default {[format ["civinfo_notifications.sqf -> no valid value for _notif_id: %1", _notif_id], "ERROR"] remoteExecCall ["KPLIB_fnc_log", 2];};
};
diff --git a/Missionframework/scripts/client/commander/open_logistic.sqf b/Missionframework/scripts/client/commander/open_logistic.sqf
index e9745b386..56fd7cbc6 100644
--- a/Missionframework/scripts/client/commander/open_logistic.sqf
+++ b/Missionframework/scripts/client/commander/open_logistic.sqf
@@ -149,9 +149,9 @@ while {dialog && (alive player)} do {
switch ((_selectedGroup select 7)) do {
case 0: {ctrlSetText[758011, "-"]; ctrlSetText[75807, localize "STR_LOGISTIC_STANDBY"];};
- case 1: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_LOADING"]; ctrlEnable [758081, true]; "spawn_marker" setMarkerPosLocal (_selectedGroup select 2); _mapdisplay ctrlMapAnimAdd [0.5, 0.2,(_selectedGroup select 2)]; ctrlMapAnimCommit _mapdisplay;};
+ case 1: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_LOADING"]; ctrlEnable [758081, true]; "spawn_marker" setMarkerPosLocal (_selectedGroup select 2); _mapdisplay ctrlMapAnimAdd [0.5, 0.2,(_selectedGroup select 2)]; ctrlMapAnimCommit _mapdisplay;};
case 2: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_TRAVEL"]; ctrlEnable [758081, true];};
- case 3: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_LOADING"]; ctrlEnable [758081, true]; "spawn_marker" setMarkerPosLocal (_selectedGroup select 3); _mapdisplay ctrlMapAnimAdd [0.5, 0.2,(_selectedGroup select 3)]; ctrlMapAnimCommit _mapdisplay;};
+ case 3: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_LOADING"]; ctrlEnable [758081, true]; "spawn_marker" setMarkerPosLocal (_selectedGroup select 3); _mapdisplay ctrlMapAnimAdd [0.5, 0.2,(_selectedGroup select 3)]; ctrlMapAnimCommit _mapdisplay;};
case 4: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_TRAVEL"]; ctrlEnable [758081, true];};
case 5: {ctrlSetText[758011, "A"]; ctrlSetText[75807, localize "STR_LOGISTIC_ABORT"];};
case 6: {ctrlSetText[758011, "B"]; ctrlSetText[75807, localize "STR_LOGISTIC_ABORT"];};
diff --git a/Missionframework/scripts/client/init_client.sqf b/Missionframework/scripts/client/init_client.sqf
index ded8ff47b..a882a00dc 100644
--- a/Missionframework/scripts/client/init_client.sqf
+++ b/Missionframework/scripts/client/init_client.sqf
@@ -38,8 +38,10 @@ player addMPEventHandler ["MPKilled", {
params ["_unit", "_killer"];
["KPLIB_manageKills", [_unit, _killer]] call CBA_fnc_localEvent;
}];
-player addEventHandler ["GetInMan", {[_this select 2] spawn kp_fuel_consumption;}];
-player addEventHandler ["GetInMan", {[_this select 2] call KPLIB_fnc_setVehiclesSeized;}];
+if (KPLIB_param_fuelconsumption) then {
+ player addEventHandler ["GetInMan", {[_this select 2] spawn kp_fuel_consumption;}];
+};
+player addEventHandler ["GetInMan", {[_this select 2, _this select 0] call KPLIB_fnc_setVehicleSeized;}];
player addEventHandler ["GetInMan", {[_this select 2] call KPLIB_fnc_setVehicleCaptured;}];
player addEventHandler ["GetInMan", {[_this select 2] call kp_vehicle_permissions;}];
player addEventHandler ["GetInMan", {
diff --git a/Missionframework/scripts/client/markers/empty_vehicles_marker.sqf b/Missionframework/scripts/client/markers/empty_vehicles_marker.sqf
index def0e60e3..5088ccab6 100644
--- a/Missionframework/scripts/client/markers/empty_vehicles_marker.sqf
+++ b/Missionframework/scripts/client/markers/empty_vehicles_marker.sqf
@@ -8,12 +8,15 @@ _cfg = configFile >> "cfgVehicles";
_vehtomark = [];
_support_to_skip = [
+ KPLIB_o_fuelContainer,
+ KPLIB_o_ammoContainer,
KPLIB_b_logiStation,
KPLIB_b_airControl,
"B_Slingload_01_Repair_F",
"B_Slingload_01_Fuel_F",
"B_Slingload_01_Ammo_F"
];
+_support_to_skip = _support_to_skip apply {toLowerANSI _x};
{
_vehtomark append _x;
@@ -25,7 +28,7 @@ while { true } do {
_markedveh = [];
{
- if (alive _x && (toLower (typeof _x)) in _vehtomark && (count (crew _x)) == 0 && (_x distance2d startbase) > 500) then {
+ if (alive _x && (toLowerANSI (typeof _x)) in _vehtomark && (count (crew _x)) == 0 && (_x distance2d startbase) > 500) then {
_markedveh pushback _x;
};
} foreach vehicles;
diff --git a/Missionframework/scripts/client/markers/fob_markers.sqf b/Missionframework/scripts/client/markers/fob_markers.sqf
index 6daf68488..def9e3280 100644
--- a/Missionframework/scripts/client/markers/fob_markers.sqf
+++ b/Missionframework/scripts/client/markers/fob_markers.sqf
@@ -43,7 +43,7 @@ while {true} do {
if (count _respawn_trucks == count _markers_mobilespawns) then {
for "_idx" from 0 to ((count _markers_mobilespawns) - 1) do {
(_markers_mobilespawns select _idx) setMarkerPosLocal getPos (_respawn_trucks select _idx);
- (_markers_mobilespawns select _idx) setMarkerTextLocal format ["%1 %2", localize "STR_RESPAWN_TRUCK", mapGridPosition (_respawn_trucks select _idx)];
+ (_markers_mobilespawns select _idx) setMarkerTextLocal format ["%1 %2", localize "STR_RESPAWN_TRUCK", [_respawn_trucks select _idx] call KPLIB_fnc_getMobileRespawnName];
};
};
};
diff --git a/Missionframework/scripts/client/markers/huron_marker.sqf b/Missionframework/scripts/client/markers/huron_marker.sqf
index 6e08dcddd..9375ad5ba 100644
--- a/Missionframework/scripts/client/markers/huron_marker.sqf
+++ b/Missionframework/scripts/client/markers/huron_marker.sqf
@@ -2,7 +2,7 @@ scriptName "huron_marker";
private [ "_huronlocal" ];
-"huronmarker" setMarkerTextLocal "Potato 01";
+"huronmarker" setMarkerTextLocal localize "STR_HURON01_NAME";
while { true } do {
_huronlocal = [] call KPLIB_fnc_potatoScan;
diff --git a/Missionframework/scripts/client/misc/fn_initArsenal.sqf b/Missionframework/scripts/client/misc/fn_initArsenal.sqf
index dbc820de7..dfa550ba5 100644
--- a/Missionframework/scripts/client/misc/fn_initArsenal.sqf
+++ b/Missionframework/scripts/client/misc/fn_initArsenal.sqf
@@ -114,7 +114,7 @@ if (KPLIB_param_useArsenalPreset) then {
if (KPLIB_ace && KPLIB_param_arsenalType) then {[player, KPLIB_arsenalAllowed, false] call ace_arsenal_fnc_addVirtualItems;};
// Lowering to avoid issues with incorrect capitalized classnames in KPLIB_fnc_checkGear
- KPLIB_arsenalAllowed = KPLIB_arsenalAllowed apply {toLower _x};
+ KPLIB_arsenalAllowed = KPLIB_arsenalAllowed apply {toLowerANSI _x};
} else {
[missionNamespace, true] call BIS_fnc_addVirtualWeaponCargo;
[missionNamespace, true] call BIS_fnc_addVirtualMagazineCargo;
diff --git a/Missionframework/scripts/client/misc/kp_fuel_consumption.sqf b/Missionframework/scripts/client/misc/kp_fuel_consumption.sqf
index cf589ccfe..ef9796eb4 100644
--- a/Missionframework/scripts/client/misc/kp_fuel_consumption.sqf
+++ b/Missionframework/scripts/client/misc/kp_fuel_consumption.sqf
@@ -4,12 +4,13 @@ kp_fuel_consumption.sqf
Author: Wyqer
Website: www.killahpotatoes.de
Date: 2017-02-02
+Update: 2023-05-11
Description:
This script handles the fuel consumption of vehicles, so that refueling will be necessary more often.
Parameters:
-_this select 0 - OBJECT - Vehicle
+_vehicle - OBJECT - Vehicle
Method:
execVM
@@ -30,25 +31,32 @@ private _kp_max_consumption = KPLIB_fuel_max;
DO NOT EDIT BELOW
*/
+params ["_vehicle"];
+
if (isNil "kp_fuel_consumption_vehicles") then {
kp_fuel_consumption_vehicles = [];
};
+if (isNil "kp_fuel_ignore_vehicles") then {
+ kp_fuel_ignore_vehicles = [];
+};
-if (!((_this select 0) in kp_fuel_consumption_vehicles)) then {
- kp_fuel_consumption_vehicles pushBack (_this select 0);
- while {local (_this select 0)} do {
- if (isEngineOn (_this select 0)) then {
- if (speed (_this select 0) > 5) then {
- if (speed (_this select 0) > (getNumber (configFile >> "CfgVehicles" >> typeOf (_this select 0) >> "maxSpeed") * 0.9)) then {
- (_this select 0) setFuel (fuel (_this select 0) - (1 / (_kp_max_consumption * 60)));
+if (_vehicle in kp_fuel_ignore_vehicles) exitWith {};
+if (!(_vehicle in kp_fuel_consumption_vehicles)) then {
+ kp_fuel_consumption_vehicles pushBack _vehicle;
+ private _maxspeed = (getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "maxSpeed") * 0.9);
+ while {local _vehicle} do {
+ if (isEngineOn _vehicle) then {
+ if (speed _vehicle > 5) then {
+ if (speed _vehicle > _maxspeed) then {
+ _vehicle setFuel (fuel _vehicle - (1 / (_kp_max_consumption * 60)));
} else {
- (_this select 0) setFuel (fuel (_this select 0) - (1 / (_kp_normal_consumption * 60)));
+ _vehicle setFuel (fuel _vehicle - (1 / (_kp_normal_consumption * 60)));
};
} else {
- (_this select 0) setFuel (fuel (_this select 0) - (1 / (_kp_neutral_consumption * 60)));
+ _vehicle setFuel (fuel _vehicle - (1 / (_kp_neutral_consumption * 60)));
};
};
uiSleep 1;
};
- kp_fuel_consumption_vehicles deleteAt (kp_fuel_consumption_vehicles find (_this select 0));
+ kp_fuel_consumption_vehicles deleteAt (kp_fuel_consumption_vehicles find _vehicle);
};
diff --git a/Missionframework/scripts/client/misc/playerNamespace.sqf b/Missionframework/scripts/client/misc/playerNamespace.sqf
index 91867733b..45b8a158d 100644
--- a/Missionframework/scripts/client/misc/playerNamespace.sqf
+++ b/Missionframework/scripts/client/misc/playerNamespace.sqf
@@ -2,7 +2,7 @@
File: playerNamespace.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2020-04-12
- Last Update: 2020-07-06
+ Last Update: 2023-03-02
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -36,8 +36,8 @@ while {true} do {
player setVariable ["KPLIB_fobName", _fobName];
player setVariable ["KPLIB_fobPos", _fobPos];
- // Direct acces due to config, commander or admin
- player setVariable ["KPLIB_hasDirectAccess", (getPlayerUID player) in KPLIB_whitelist_cmdrActions || {player == ([] call KPLIB_fnc_getCommander)} || {serverCommandAvailable "#kick"}];
+ // Direct acces due to config, commander or quartermaster or admin
+ player setVariable ["KPLIB_hasDirectAccess", (getPlayerUID player) in KPLIB_whitelist_cmdrActions || {player == ([] call KPLIB_fnc_getCommander)} || {player isEqualto (missionnamespace getVariable ['quartermaster',objNull])} || {serverCommandAvailable "#kick"}];
// Outside of startbase "safezone"
player setVariable ["KPLIB_isAwayFromStart", (player distance2d startbase) > 1000];
@@ -49,7 +49,7 @@ while {true} do {
// Is near a mobile respawn
if (KPLIB_param_mobileRespawn) then {
- player setVariable ["KPLIB_isNearMobRespawn", !((player nearEntities [[KPLIB_b_mobileRespawn, KPLIB_b_potato01], 10]) isEqualTo [])];
+ player setVariable ["KPLIB_isNearMobRespawn", !((player nearEntities [(KPLIB_b_mobileRespawns)+ [KPLIB_b_potato01], 10]) isEqualTo [])];
};
// Is near startbase
diff --git a/Missionframework/scripts/client/misc/vehicle_permissions.sqf b/Missionframework/scripts/client/misc/vehicle_permissions.sqf
index 376a48f87..c544bff1a 100644
--- a/Missionframework/scripts/client/misc/vehicle_permissions.sqf
+++ b/Missionframework/scripts/client/misc/vehicle_permissions.sqf
@@ -1,5 +1,5 @@
params ["_vehicle"];
-private _vehicleClass = toLower (typeOf _vehicle);
+private _vehicleClass = toLowerANSI (typeOf _vehicle);
// Cargo is always allowed
private _isCargo = (_vehicle getCargoIndex player) != -1;
diff --git a/Missionframework/scripts/client/remotecall/remote_call_intel.sqf b/Missionframework/scripts/client/remotecall/remote_call_intel.sqf
index 5159a58b7..b2ee3ffb5 100644
--- a/Missionframework/scripts/client/remotecall/remote_call_intel.sqf
+++ b/Missionframework/scripts/client/remotecall/remote_call_intel.sqf
@@ -57,5 +57,89 @@ switch (_notiftype) do {
deleteMarkerLocal "secondarymarkerzone";
secondary_objective_position_marker = [];
};
+ // civ-supplies mission
+ case 9: {
+ waitUntil {!isNil "secondary_objective_position_marker"};
+ waitUntil {count secondary_objective_position_marker > 0};
+ waitUntil {secondary_objective_position_marker distance zeropos > 1000};
+ ["lib_intel_civ_supplies", [markertext ([10000, secondary_objective_position_marker] call KPLIB_fnc_getNearestSector)]] call BIS_fnc_showNotification;
+ _secondary_marker = createMarkerLocal ["secondarymarker", secondary_objective_position_marker];
+ _secondary_marker setMarkerColorLocal "ColorGREEN";
+ _secondary_marker setMarkerTypeLocal "hd_end";
+
+ _secondary_marker_zone = createMarkerLocal ["secondarymarkerzone", secondary_objective_position_marker];
+ _secondary_marker_zone setMarkerColorLocal "ColorGREEN";
+ _secondary_marker_zone setMarkerShapeLocal "ELLIPSE";
+ _secondary_marker_zone setMarkerBrushLocal "FDiagonal";
+ _secondary_marker_zone setMarkerSizeLocal [50,50];
+ };
+ case 10: {
+ ["lib_secondary_civ_supplies_complete"] call BIS_fnc_showNotification;
+ deleteMarkerLocal "secondarymarker";
+ deleteMarkerLocal "secondarymarkerzone";
+ secondary_objective_position_marker = [];
+ };
+ case 11: {
+ //notify there are no friendly towns
+ ["lib_secondary_civ_supplies_no_room"] call BIS_fnc_showNotification;
+ //return intel points used
+ resources_intel = resources_intel + ( KPLIB_secondary_missions_costs select 3);
+ };
+ // bingo-fuel mission
+ case 12: {
+ waitUntil {!isNil "secondary_objective_position_marker"};
+ waitUntil {count secondary_objective_position_marker > 0};
+ waitUntil {secondary_objective_position_marker distance zeropos > 1000};
+ ["lib_intel_bingo_fuel", [markertext ([10000, secondary_objective_position_marker] call KPLIB_fnc_getNearestSector)]] call BIS_fnc_showNotification;
+ _secondary_marker = createMarkerLocal ["secondarymarker", secondary_objective_position_marker];
+ _secondary_marker setMarkerColorLocal "ColorGREEN";
+ _secondary_marker setMarkerTypeLocal "hd_end";
+
+ _secondary_marker_zone = createMarkerLocal ["secondarymarkerzone", secondary_objective_position_marker];
+ _secondary_marker_zone setMarkerColorLocal "ColorGREEN";
+ _secondary_marker_zone setMarkerShapeLocal "ELLIPSE";
+ _secondary_marker_zone setMarkerBrushLocal "FDiagonal";
+ _secondary_marker_zone setMarkerSizeLocal [50,50];
+ };
+ case 13: {
+ ["lib_secondary_bingo_fuel_complete"] call BIS_fnc_showNotification;
+ deleteMarkerLocal "secondarymarker";
+ deleteMarkerLocal "secondarymarkerzone";
+ secondary_objective_position_marker = [];
+ };
+ case 14: {
+ //notify there are no friendly factory
+ ["lib_secondary_bingo_fuel_no_room"] call BIS_fnc_showNotification;
+ //return intel points used
+ resources_intel = resources_intel + ( KPLIB_secondary_missions_costs select 4);
+ };
+ // rearm-outpost mission
+ case 15: {
+ waitUntil {!isNil "secondary_objective_position_marker"};
+ waitUntil {count secondary_objective_position_marker > 0};
+ waitUntil {secondary_objective_position_marker distance zeropos > 1000};
+ ["lib_intel_rearm_outpost", [markertext ([10000, secondary_objective_position_marker] call KPLIB_fnc_getNearestSector)]] call BIS_fnc_showNotification;
+ _secondary_marker = createMarkerLocal ["secondarymarker", secondary_objective_position_marker];
+ _secondary_marker setMarkerColorLocal "ColorGREEN";
+ _secondary_marker setMarkerTypeLocal "hd_end";
+
+ _secondary_marker_zone = createMarkerLocal ["secondarymarkerzone", secondary_objective_position_marker];
+ _secondary_marker_zone setMarkerColorLocal "ColorGREEN";
+ _secondary_marker_zone setMarkerShapeLocal "ELLIPSE";
+ _secondary_marker_zone setMarkerBrushLocal "FDiagonal";
+ _secondary_marker_zone setMarkerSizeLocal [50,50];
+ };
+ case 16: {
+ ["lib_secondary_rearm_outpost_complete"] call BIS_fnc_showNotification;
+ deleteMarkerLocal "secondarymarker";
+ deleteMarkerLocal "secondarymarkerzone";
+ secondary_objective_position_marker = [];
+ };
+ case 17: {
+ //notify there are no friendly outpost
+ ["lib_secondary_rearm_outpost_no_room"] call BIS_fnc_showNotification;
+ //return intel points used
+ resources_intel = resources_intel + ( KPLIB_secondary_missions_costs select 5);
+ };
default {[format ["remote_call_intel.sqf -> no valid value for _notiftype: %1", _notiftype], "ERROR"] remoteExecCall ["KPLIB_fnc_log", 2];};
};
diff --git a/Missionframework/scripts/client/remotecall/remote_call_prisonner.sqf b/Missionframework/scripts/client/remotecall/remote_call_prisonner.sqf
index 39796f4d0..d81ef1fbc 100644
--- a/Missionframework/scripts/client/remotecall/remote_call_prisonner.sqf
+++ b/Missionframework/scripts/client/remotecall/remote_call_prisonner.sqf
@@ -1,40 +1,28 @@
scriptName "remote_call_prisoner";
params [ "_unit" ];
-private [ "_nearestfob", "_is_near_fob", "_is_near_blufor", "_grp", "_waypoint", "_nearblufor" ];
+private [ "_nearestfob", "_is_near_fob", "_is_near_blufor", "_grp", "_waypoint" ];
-waitUntil {
- sleep 0.5;
- local _unit
-};
-
-_is_near_fob = false;
-_is_near_blufor = true;
-
-sleep 1;
-_unit playmove "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon";
-sleep 2;
-_unit enableAI "ANIM";
-_unit enableAI "MOVE";
-sleep 2;
-[_unit, ""] remoteExecCall ["switchMove"];
+waitUntil {sleep 0.5; local _unit};
if ( typeof _unit == KPLIB_b_heliPilotUnit ) exitWith {};
-waitUntil { sleep 5;
+_is_near_fob = false;
+_is_near_blufor = true;
+waitUntil {
+ sleep 5;
_nearestfob = [ getpos _unit ] call KPLIB_fnc_getNearestFob;
- if ( count _nearestfob == 3) then {
- if ( ( _unit distance _nearestfob ) < 30 ) then {
- _is_near_fob = true;
- };
+ _is_near_fob = false;
+ if (count _nearestfob == 3) then {
+ _is_near_fob = ((_unit distance _nearestfob) < 30);
};
_is_near_blufor = false;
if ( !_is_near_blufor ) then {
{
- if ((_x distance _unit) < 100) exitWith { _is_near_blufor = true };
- } forEach (allUnits select {!((toLower (typeof _x)) in KPLIB_o_inf_classes || (typeof _x) in KPLIB_o_militiaInfantry)});
+ if (((_x distance _unit) < 100) || (_unit getVariable ["ace_captives_isHandcuffed", false])) exitWith { _is_near_blufor = true };
+ } forEach (allUnits select {!((toLowerANSI (typeof _x)) in KPLIB_o_inf_classes || (typeof _x) in KPLIB_o_militiaInfantry)});
};
!alive _unit || !(_is_near_blufor) || (_is_near_fob && (vehicle _unit == _unit))
@@ -47,6 +35,15 @@ if (alive _unit) then {
sleep 5;
_grp = createGroup [KPLIB_side_civilian, true];
[_unit] joinSilent _grp;
+ if (KPLIB_ace) then {
+ private _isCuffed = _unit getVariable ["ace_captives_isHandcuffed", false];
+ if (_isCuffed) then {
+ ["ace_captives_setHandcuffed", [_unit, false], _unit] remoteExecCall ["CBA_fnc_targetEvent", 2];
+ } else {
+ ["ace_captives_setSurrendered", [_unit, false], _unit] remoteExecCall ["CBA_fnc_targetEvent", 2];
+ };
+ sleep 1;
+ };
_unit playmove "AmovPercMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground";
_unit disableAI "ANIM";
_unit disableAI "MOVE";
@@ -54,7 +51,7 @@ if (alive _unit) then {
[_unit, "AidlPsitMstpSnonWnonDnon_ground00"] remoteExecCall ["switchMove"];
[_unit] remoteExec ["prisonner_remote_call",2];
sleep 600;
- deleteVehicle _unit;
+ if (isNull objectParent _unit) then {deleteVehicle _unit} else {(objectParent _unit) deleteVehicleCrew _unit};
} else {
@@ -70,19 +67,19 @@ if (alive _unit) then {
unAssignVehicle _unit;
};
- while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
- {_x doFollow leader _grp} foreach units _grp;
+ { deleteWaypoint _x } forEachReversed waypoints _grp;
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
_possible_sectors = (KPLIB_sectors_all - KPLIB_sectors_player);
if ( count _possible_sectors > 0 ) then {
_possible_sectors = [ _possible_sectors , [getpos _unit, 5000] , { (markerPos _x) distance _input0 } , 'ASCEND' ] call BIS_fnc_sortBy;
- if ( count _possible_sectors > 0 ) then {
- _target_sector = _possible_sectors select 0;
- _waypoint = _grp addWaypoint [markerpos _target_sector, 300];
- _waypoint setWaypointType "MOVE";
- _waypoint setWaypointSpeed "FULL";
- };
+ _target_sector = _possible_sectors select 0;
+ _waypoint = _grp addWaypoint [markerpos _target_sector, 300];
+ } else {
+ _waypoint = _grp addWaypoint [100000, 100000, 300];
};
+ _waypoint setWaypointType "MOVE";
+ _waypoint setWaypointSpeed "FULL";
};
};
diff --git a/Missionframework/scripts/client/spawn/redeploy_manager.sqf b/Missionframework/scripts/client/spawn/redeploy_manager.sqf
index 346db2d3b..49dfd5c50 100644
--- a/Missionframework/scripts/client/spawn/redeploy_manager.sqf
+++ b/Missionframework/scripts/client/spawn/redeploy_manager.sqf
@@ -106,7 +106,7 @@ while {true} do {
{
KPLIB_respawnPositionsList pushBack [
- format ["%1 - %2", localize "STR_RESPAWN_TRUCK", mapGridPosition getPosATL _x],
+ format ["%1 - %2", localize "STR_RESPAWN_TRUCK", [_x] call KPLIB_fnc_getMobileRespawnName],
getPosATL _x,
_x
];
@@ -185,16 +185,18 @@ while {true} do {
if (count (KPLIB_respawnPositionsList select _idxchoice) == 3) then {
private _truck = (KPLIB_respawnPositionsList select _idxchoice) select 2;
player setposATL (_truck getPos [5 + (random 3), random 360]);
+ player setDir (random 360);
KPLIB_respawn_mobile_done = true;
} else {
private _destpos = ((KPLIB_respawnPositionsList select _idxchoice) select 1);
player setposATL [((_destpos select 0) + 5) - (random 10),((_destpos select 1) + 5) - (random 10),(_destpos select 2)];
+ player setDir (random 360);
};
if ((lbCurSel 203) > 0) then {
private _selectedLoadout = _loadouts_data select ((lbCurSel 203) - 1);
if (KPLIB_ace && KPLIB_param_arsenalType) then {
- [player, _selectedLoadout select 1, KP_liberation_fill_mags] call CBA_fnc_setLoadout;
+ [player, _selectedLoadout select 1, KPLIB_fill_mags] call CBA_fnc_setLoadout;
} else {
[player, [profileNamespace, _selectedLoadout]] call BIS_fnc_loadInventory;
};
diff --git a/Missionframework/scripts/client/tutorial/fn_handleCrateStorageTask.sqf b/Missionframework/scripts/client/tutorial/fn_handleCrateStorageTask.sqf
index b1d55d88b..717307114 100644
--- a/Missionframework/scripts/client/tutorial/fn_handleCrateStorageTask.sqf
+++ b/Missionframework/scripts/client/tutorial/fn_handleCrateStorageTask.sqf
@@ -36,7 +36,7 @@ if (!canSuspend) exitWith {_this spawn KPLIB_fnc_handleCrateStorageTask};
true
] call BIS_fnc_taskCreate;
-waitUntil {sleep 0.1; (toLower (typeOf (attachedTo _obj))) in KPLIB_storageBuildings};
+waitUntil {sleep 0.1; (toLowerANSI (typeOf (attachedTo _obj))) in KPLIB_storageBuildings};
[_taskId, "SUCCEEDED", false] call BIS_fnc_taskSetState;
diff --git a/Missionframework/scripts/client/tutorial/fn_tutorial.fsm b/Missionframework/scripts/client/tutorial/fn_tutorial.fsm
index 29292f36d..b11c1119a 100644
--- a/Missionframework/scripts/client/tutorial/fn_tutorial.fsm
+++ b/Missionframework/scripts/client/tutorial/fn_tutorial.fsm
@@ -850,7 +850,7 @@ class FSM
"private _wounded_markers = allMapMarkers select {_x find ""wounded_marker_"" == 0};" \n
"{" \n
" _civs append (" \n
- " ((markerPos _x) nearEntities [""Man"", 25]) select {(damage _x) > 0.4}" \n
+ " ((markerPos _x) nearEntities [""CAManBase"", 25]) select {(damage _x) > 0.4}" \n
" );" \n
"} forEach _wounded_markers;" \n
"" \n
diff --git a/Missionframework/scripts/client/ui/cinematic_camera.sqf b/Missionframework/scripts/client/ui/cinematic_camera.sqf
index dbc68bd55..43f925e98 100644
--- a/Missionframework/scripts/client/ui/cinematic_camera.sqf
+++ b/Missionframework/scripts/client/ui/cinematic_camera.sqf
@@ -55,7 +55,7 @@ while { cinematic_camera_started } do {
_position = selectRandom (_positions - [_last_position]);
_last_position = _position;
_cinematic_pointer setpos [ _position select 0, _position select 1, (_position select 2) + 7 ];
- private _nearentities = _position nearEntities [ "Man", 100 ];
+ private _nearentities = _position nearEntities [ "CAManBase", 100 ];
private _camtarget = _cinematic_pointer;
if ( first_camera_round ) then {
_camtarget = startbase;
@@ -252,7 +252,7 @@ while { cinematic_camera_started } do {
if ( isPlayer _camtarget ) then { _unitname = name _camtarget };
private _nearest_sector = "";
if ( _position distance startbase < 300 ) then {
- _nearest_sector = "BEGIN OF OPERATION";
+ _nearest_sector = localize "STR_STARTBASE"
} else {
_nearest_sector = [300, _position ] call KPLIB_fnc_getNearestSector;
if ( _nearest_sector != "" ) then {
diff --git a/Missionframework/scripts/client/ui/end_screen.sqf b/Missionframework/scripts/client/ui/end_screen.sqf
index 0dec7f731..9590463fe 100644
--- a/Missionframework/scripts/client/ui/end_screen.sqf
+++ b/Missionframework/scripts/client/ui/end_screen.sqf
@@ -143,7 +143,7 @@ if (dialog) then {sleep 3};
[692, format [localize "STR_STATS_REINFORCEMENTS", _stats_reinforcements_called]] call _addReportLine;
[693, format [localize "STR_STATS_COMBATREADINESS", round _stats_readiness_earned]] call _addReportLine;
[694, format [localize "STR_STATS_IEDS", _stats_ieds_detonated]] call _addReportLine;
-[695, format [localize "STR_STATS_POTATO", _stats_potato_respawns]] call _addReportLine;
+[695, format [localize "STR_STATS_POTATO", _stats_potato_respawns, localize "STR_HURON01_NAME"]] call _addReportLine;
[696, format [localize "STR_STATS_RABBITS", _stats_rabbits_killed], true] call _addReportLine;
[] call _cleanPage;
diff --git a/Missionframework/scripts/client/ui/intro.sqf b/Missionframework/scripts/client/ui/intro.sqf
index bddaef6e1..dbdeb08d6 100644
--- a/Missionframework/scripts/client/ui/intro.sqf
+++ b/Missionframework/scripts/client/ui/intro.sqf
@@ -9,9 +9,9 @@ waitUntil { time > 0 };
if ( KPLIB_param_introCinematic ) then {
sleep 1;
- cutRsc ["intro1","PLAIN",1,true];
+ "TAG_libintro1" cutRsc ["intro1","PLAIN",1,true];
sleep 5.5;
- cutRsc ["intro2","PLAIN",1,true];
+ "TAG_libintro1" cutRsc ["intro2","PLAIN",1,true];
sleep 10;
};
diff --git a/Missionframework/scripts/client/ui/secondary_ui.sqf b/Missionframework/scripts/client/ui/secondary_ui.sqf
index aefab7f7a..ad0afd6aa 100644
--- a/Missionframework/scripts/client/ui/secondary_ui.sqf
+++ b/Missionframework/scripts/client/ui/secondary_ui.sqf
@@ -13,7 +13,10 @@ waitUntil { dialog };
} foreach [
"STR_SECONDARY_MISSION0",
"STR_SECONDARY_MISSION1",
- "STR_SECONDARY_MISSION2"
+ "STR_SECONDARY_MISSION2",
+ "STR_SECONDARY_MISSION3",
+ "STR_SECONDARY_MISSION4",
+ "STR_SECONDARY_MISSION5"
];
private [ "_oldchoice", "_images", "_briefings", "_missioncost" ];
@@ -21,13 +24,19 @@ private [ "_oldchoice", "_images", "_briefings", "_missioncost" ];
_images = [
"res\secondary\fob_hunting.jpg",
"res\secondary\convoy_hijack.jpg",
- "res\secondary\sar.jpg"
+ "res\secondary\sar.jpg",
+ "res\secondary\hum_aid.jpg",
+ "res\secondary\bingo_fuel.jpg",
+ "res\secondary\rearm_outpost.jpg"
];
_briefings = [
"STR_SECONDARY_BRIEFING0",
"STR_SECONDARY_BRIEFING1",
- "STR_SECONDARY_BRIEFING2"
+ "STR_SECONDARY_BRIEFING2",
+ "STR_SECONDARY_BRIEFING3",
+ "STR_SECONDARY_BRIEFING4",
+ "STR_SECONDARY_BRIEFING5"
];
_oldchoice = -1;
diff --git a/Missionframework/scripts/client/ui/squad_management.sqf b/Missionframework/scripts/client/ui/squad_management.sqf
index 391a8567a..69dbdc449 100644
--- a/Missionframework/scripts/client/ui/squad_management.sqf
+++ b/Missionframework/scripts/client/ui/squad_management.sqf
@@ -131,6 +131,7 @@ while { dialog && alive player } do {
if ( vehicle _selectedmember == _selectedmember ) then {
ctrlSetText [ 209, "" ];
+ ctrlSetText [ 219, "" ];
} else {
_vehstring = localize 'STR_PASSENGER';
if (driver vehicle _selectedmember == _selectedmember ) then { _vehstring = localize 'STR_DRIVER'; };
@@ -138,10 +139,21 @@ while { dialog && alive player } do {
if (commander vehicle _selectedmember == _selectedmember ) then { _vehstring = localize 'STR_COMMANDER'; };
_vehstring = _vehstring + format [ " (%1)", getText (_cfgVehicles >> (typeof vehicle _selectedmember) >> "displayName") ];
ctrlSetText [ 209, _vehstring ];
+
+ if ( (isAllowedCrewInImmobile vehicle _selectedmember) && vehicle _selectedmember getVariable ["ace_vehicle_damage_allowCrewInImmobile", false] ) then {
+ ctrlSetText [ 219, localize 'STR_ALLOW_INIMMOBILE' ];
+ } else {
+ ctrlSetText [ 219, "" ];
+ };
+ };
+ if (isPlayer _selectedmember) then {
+ ctrlSetText [ 218, localize 'STR_SQUAD_IS_PLAYER' ];
+ } else {
+ ctrlSetText [ 218, "" ];
};
};
} else {
- { ctrlSetText [ _x, "" ] } foreach [ 201, 202, 203, 204, 205, 206, 207, 208, 209 ];
+ { ctrlSetText [ _x, "" ] } foreach [ 201, 202, 203, 204, 205, 206, 207, 208, 209 , 219 , 218 ];
KPLIB_squadconfirm = -1;
KPLIB_squadaction = -1;
};
@@ -149,16 +161,33 @@ while { dialog && alive player } do {
if ( KPLIB_squadaction == -1 ) then {
ctrlEnable [ 213, false ];
ctrlEnable [ 214, false ];
- if ( !(isPlayer _selectedmember) && (vehicle _selectedmember == _selectedmember) ) then {
- ctrlEnable [ 210, true ];
- if ( leader group player == player ) then {
- ctrlEnable [ 211, true ];
+ if (!(isPlayer _selectedmember)) then {
+ if (vehicle _selectedmember == _selectedmember) then {
+ ctrlEnable [ 210, true ];
+ if ( leader group player == player ) then {
+ ctrlEnable [ 211, true ];
+ };
+ ctrlEnable [ 212, true ];
+ ctrlEnable [ 215, false ];
+ ctrlEnable [ 216, false ];
+ } else {
+ if ((isAllowedCrewInImmobile vehicle _selectedmember) && vehicle _selectedmember getVariable ["ace_vehicle_damage_allowCrewInImmobile", false]) then {
+ ctrlEnable [ 215, false ];
+ ctrlEnable [ 216, true ];
+ } else {
+ ctrlEnable [ 215, true ];
+ ctrlEnable [ 216, false ];
+ };
+ ctrlEnable [ 210, false ];
+ ctrlEnable [ 211, false ];
+ ctrlEnable [ 212, false ];
};
- ctrlEnable [ 212, true ];
} else {
ctrlEnable [ 210, false ];
ctrlEnable [ 211, false ];
ctrlEnable [ 212, false ];
+ ctrlEnable [ 215, false ];
+ ctrlEnable [ 216, false ];
};
} else {
ctrlEnable [ 210, false ];
@@ -166,6 +195,8 @@ while { dialog && alive player } do {
ctrlEnable [ 212, false ];
ctrlEnable [ 213, true ];
ctrlEnable [ 214, true ];
+ ctrlEnable [ 215, false ];
+ ctrlEnable [ 216, false ];
};
if( KPLIB_squadconfirm == 0 ) then {
@@ -238,6 +269,18 @@ while { dialog && alive player } do {
};
+ if (KPLIB_squadaction == 4) then {
+ closeDialog 0;
+ vehicle _selectedmember allowCrewInImmobile true;
+ vehicle _selectedmember setVariable ["ace_vehicle_damage_allowCrewInImmobile", true, true];
+ };
+
+ if (KPLIB_squadaction == 5) then {
+ closeDialog 0;
+ vehicle _selectedmember allowCrewInImmobile false;
+ vehicle _selectedmember setVariable ["ace_vehicle_damage_allowCrewInImmobile", false, true];
+ };
+
KPLIB_squadaction = -1;
};
diff --git a/Missionframework/scripts/client/ui/ui_manager.sqf b/Missionframework/scripts/client/ui/ui_manager.sqf
index 05efa1222..a9b381d4c 100644
--- a/Missionframework/scripts/client/ui/ui_manager.sqf
+++ b/Missionframework/scripts/client/ui/ui_manager.sqf
@@ -16,6 +16,7 @@ KPLIB_ammo = 0;
KPLIB_fuel = 0;
KPLIB_b_airControl_near = false;
KPLIB_b_logiStation_near = false;
+KPLIB_medical_facilities_near = false;
waitUntil { !isNil "synchro_done" };
waitUntil { synchro_done };
@@ -59,7 +60,7 @@ while {true} do {
_showResources = true;
private _nearestFob = player getVariable "KPLIB_fobPos";
- ([_nearestFob] call KPLIB_fnc_getFobResources) params ["", "_supplies", "_ammo", "_fuel", "_hasAir", "_hasRecycling"];
+ ([_nearestFob] call KPLIB_fnc_getFobResources) params ["", "_supplies", "_ammo", "_fuel", "_hasAir", "_hasRecycling", "_hasMedical"];
if (KPLIB_resources_global || {_visibleMap}) then {
// Overwrite FOB name in global mode
@@ -76,6 +77,7 @@ while {true} do {
// TODO this is used by build scripts, move to relevant places
KPLIB_b_airControl_near = _hasAir;
KPLIB_b_logiStation_near = _hasRecycling;
+ KPLIB_medical_facilities_near = _hasMedical;
} else {
_showResources = false;
KPLIB_supplies = 0;
@@ -83,6 +85,7 @@ while {true} do {
KPLIB_fuel = 0;
KPLIB_b_airControl_near = false;
KPLIB_b_logiStation_near = false;
+ KPLIB_medical_facilities_near = false;
};
if (_overlayVisible) then {
@@ -123,7 +126,7 @@ while {true} do {
_KPLIB_sectors_active_hint = true;
};
- _KPLIB_sectors_active_string = "" + (localize "STR_KPLIB_sectors_active") + "
";
+ _KPLIB_sectors_active_string = "" + (localize "STR_ACTIVE_SECTORS") + "
";
{
_KPLIB_sectors_active_string = [_KPLIB_sectors_active_string, markerText _x, "
"] joinString "";
} forEach KPLIB_sectors_active;
@@ -144,9 +147,10 @@ while {true} do {
"zone_capture" setmarkerposlocal (markerpos _nearest_active_sector);
_colorzone = "ColorGrey";
- if ( [ markerpos _nearest_active_sector, _zone_size ] call KPLIB_fnc_getSectorOwnership == KPLIB_side_player ) then { _colorzone = KPLIB_color_player };
- if ( [ markerpos _nearest_active_sector, _zone_size ] call KPLIB_fnc_getSectorOwnership == KPLIB_side_enemy ) then { _colorzone = KPLIB_color_enemy };
- if ( [ markerpos _nearest_active_sector, _zone_size ] call KPLIB_fnc_getSectorOwnership == KPLIB_side_resistance ) then { _colorzone = "ColorCivilian" };
+ private _sectorOwner = [markerPos _nearest_active_sector, _zone_size] call KPLIB_fnc_getSectorOwnership;
+ if ( _sectorOwner == KPLIB_side_player ) then { _colorzone = KPLIB_color_player };
+ if ( _sectorOwner == KPLIB_side_enemy ) then { _colorzone = KPLIB_color_enemy };
+ if ( _sectorOwner == KPLIB_side_resistance ) then { _colorzone = "ColorCivilian" };
"zone_capture" setmarkercolorlocal _colorzone;
_ratio = [_nearest_active_sector] call KPLIB_fnc_getBluforRatio;
diff --git a/Missionframework/scripts/server/ai/SAM_turret_manager.sqf b/Missionframework/scripts/server/ai/SAM_turret_manager.sqf
new file mode 100644
index 000000000..d4636fec3
--- /dev/null
+++ b/Missionframework/scripts/server/ai/SAM_turret_manager.sqf
@@ -0,0 +1,132 @@
+/*
+ File: SAM_turret_manager.sqf
+ Author: Nicoman
+ Date: 2020-09-29
+ Last Update: 2023-04-16
+ License: MIT License - http://www.opensource.org/licenses/MIT
+ Description:
+ Spawns and manages SAM turrets in the back country. Max number and spawn rate of SAM turrets is influenced by various factors:
+ * KPLIB_param_difficulty (game difficulty, ranges from 0.5 to 10)
+ * KPLIB_enemyReadiness (enemy combat readiness, ranges from 0 to 200)
+ * KPLIB_param_aggressivity (enemy aggressivity, ranges from 0.25 to 4)
+ * Player count, if "adapt to player count" mission param is enabled.
+
+ Parameter(s):
+ NONE
+
+ Returns:
+ Nothing
+*/
+
+waitUntil {!isNil "KPLIB_saveLoaded"};
+waitUntil {KPLIB_saveLoaded};
+waitUntil {!isNil "KPLIB_param_serverInitDone"};
+waitUntil {KPLIB_param_serverInitDone};
+if (isNil "KPLIB_o_turrets_SAM") exitWith {["KPLIB_o_turrets_SAM is notFound", "SAM"] call KPLIB_fnc_log;};
+// no SAM turrets on easiest difficulty level (as of v0.96.8, KPLIB_param_difficulty values range from 0.5 to 10)
+if (KPLIB_param_difficulty < 0.75) exitWith {[format ["difficulty is easy: %1", (str KPLIB_param_difficulty)], "SAM"] call KPLIB_fnc_log;};
+// Wait until the player forces control the first sector
+waitUntil {!isNil "KPLIB_sectors_player"};
+
+if (isNil "KPLIB_usedPositions_SAM") then {KPLIB_usedPositions_SAM = []; publicVariable "KPLIB_usedPositions_SAM";};
+if (isNil "KPLIB_backCountryTurrets_SAM") then {KPLIB_backCountryTurrets_SAM = []; publicVariable "KPLIB_backCountryTurrets_SAM";};
+
+private ["_crew", "_group", "_i", "_killedTurretsSAM", "_maxSAMnumber", "_randomTurret", "_sleepTime", "_spawnMarker", "_turret", "_turretGroup"];
+_killedTurretsSAM = 0;
+
+while {KPLIB_endgame == 0} do {
+
+ _sleepTime = (1800 + (random 1800)) / (([] call KPLIB_fnc_getOpforFactor) * KPLIB_param_aggressivity); // sleep time is 30 to 60 minutes
+ if (KPLIB_enemyReadiness >= 80) then {_sleepTime = _sleepTime * 0.75}; // when enemy readiness gets above 80, reduce sleep time to 0.75
+ if (KPLIB_enemyReadiness >= 90) then {_sleepTime = _sleepTime * 0.75}; // when enemy readiness gets above 90, reduce sleep time to 0.5625 (0.75 * 0.75)
+ if (KPLIB_enemyReadiness >= 100) then {_sleepTime = _sleepTime * 0.75}; // when enemy readiness gets above 100, reduce sleep time to 0.42 (0.75 * 0.75 * 0.75)
+ sleep _sleepTime;
+
+ if (KPLIB_backCountryTurrets_SAM isNotEqualTo []) then {
+ _SAMdeleteTargetArray = [];
+ // Check and clear turret array for any destroyed or unmanned units
+ {
+ _groupDestroyed = false;
+ private _groupVehicles = _x;
+ {
+ if (side _x == KPLIB_side_player) exitWith {};
+ if (_groupDestroyed) exitWith {};
+ if (!alive _x || !alive gunner _x || side _x != KPLIB_side_enemy) then {
+ _groupDestroyed = true;
+ } else {
+ _x setVehicleAmmo 1;
+ _x setFuel 1;
+ };
+ } forEach _groupVehicles;
+ if (_groupDestroyed) then {
+ {
+ private _vehicle = _x;
+ if (side _x == KPLIB_side_player) exitWith {};
+ [_vehicle] call KPLIB_fnc_cleanOpforVehicle;
+ } forEach _groupVehicles;
+ _SAMdeleteTargetArray pushBack _x;
+ _killedTurretsSAM = _killedTurretsSAM + 1;
+ _groupDestroyed = false;
+ };
+ } forEach KPLIB_backCountryTurrets_SAM;
+
+ while {_SAMdeleteTargetArray isNotEqualTo []} do {
+ {
+ private _SAMdeleteTargetIndex = KPLIB_backCountryTurrets_SAM find _x;
+
+ KPLIB_backCountryTurrets_SAM deleteAt _SAMdeleteTargetIndex;
+ KPLIB_usedPositions_SAM deleteAt _SAMdeleteTargetIndex;
+ _SAMdeleteTargetArray deleteAt _forEachIndex;
+ } forEach _SAMdeleteTargetArray;
+ };
+ publicVariable "KPLIB_backCountryTurrets_SAM";
+ publicVariable "KPLIB_usedPositions_SAM";
+
+ // If SAM turrets were destroyed, add a 'punishment' time for the enemy. This extra time is meant to be a dampening of the production of SAM turrets
+ if (_killedTurretsSAM > 0) then {
+ sleep (_sleepTime * _killedTurretsSAM);
+ _killedTurretsSAM = 0;
+ };
+ };
+
+ // Calculate maximum amount of SAM turrets
+ _maxSAMnumber = 0.5;
+ private _helislots = KPLIB_heli_slots;
+ private _planeslots = KPLIB_plane_slots * 1.5;
+ private _difficulty = KPLIB_param_difficulty;
+ if (KPLIB_param_difficulty isEqualTo 4) then {_difficulty = 1};
+ if (KPLIB_param_difficulty isEqualTo 10) then {_difficulty = 2};
+ _maxSAMnumber = _maxSAMnumber + (_helislots / 2) + (_planeslots);
+ _maxSAMnumber = _maxSAMnumber + (KPLIB_enemyReadiness / 30);
+ _maxSAMnumber = _maxSAMnumber * _difficulty;
+ _maxSAMnumber = round _maxSAMnumber;
+ if (_maxSAMnumber > 10) then {_maxSAMnumber = 10};
+ // maximum amount of SAM turrets should not exceed number of opfor sectors
+ if (_maxSAMnumber > (count KPLIB_sectors_all - count KPLIB_sectors_player)) then {_maxSAMnumber = count KPLIB_sectors_all - count KPLIB_sectors_player};
+
+ // If maximum amount of SAM turrets has not been reached yet, add one to the map
+ if (count KPLIB_backCountryTurrets_SAM < _maxSAMnumber) then {
+ _spawnMarker = [] call KPLIB_fnc_getOpforSpawnPointSAM;
+ if (_spawnMarker isEqualTo "") exitWith {};
+ _randomTurret = selectRandom KPLIB_o_turrets_SAM;
+ KPLIB_usedPositions_SAM pushBack _spawnMarker;
+ publicVariable "KPLIB_usedPositions_SAM";
+
+ // spawn and memory turret / turrets
+ _turretGroup = [];
+ {
+ _turret = [markerpos _spawnMarker, _x] call KPLIB_fnc_spawnVehicle;
+ _turretGroup pushBack _turret;
+ } forEach _randomTurret;
+ KPLIB_backCountryTurrets_SAM pushBack _turretGroup;
+ publicVariable "KPLIB_backCountryTurrets_SAM";
+
+ // make sure turrets set enemy side and link all turrets because involved radar system.
+ _group = createGroup [KPLIB_side_enemy, true];
+ {
+ _crew = units (_x);
+ [_crew, _group] remoteExecCall ["joinSilent"];
+ _x setVehicleRadar 1;
+ } forEach _turretGroup;
+ };
+};
\ No newline at end of file
diff --git a/Missionframework/scripts/server/ai/add_civ_waypoints.sqf b/Missionframework/scripts/server/ai/add_civ_waypoints.sqf
index 500091554..0c4b9d923 100644
--- a/Missionframework/scripts/server/ai/add_civ_waypoints.sqf
+++ b/Missionframework/scripts/server/ai/add_civ_waypoints.sqf
@@ -1,8 +1,8 @@
private _grp = _this select 0;
private _basepos = getpos (leader _grp);
-while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
-{_x doFollow leader _grp} foreach units _grp;
+{ deleteWaypoint _x } forEachReversed waypoints _grp;
+{doStop _x; _x doFollow leader _grp} foreach units _grp;
private _wpPositions = [
_basepos getPos [random 150, random 360],
diff --git a/Missionframework/scripts/server/ai/add_defense_waypoints.sqf b/Missionframework/scripts/server/ai/add_defense_waypoints.sqf
index c52cc9f0d..d32b8af75 100644
--- a/Missionframework/scripts/server/ai/add_defense_waypoints.sqf
+++ b/Missionframework/scripts/server/ai/add_defense_waypoints.sqf
@@ -6,21 +6,24 @@ private _basepos = getpos (leader _grp);
private _is_infantry = false;
private _wpPositions = [];
private _waypoint = [];
+
+if (isNull _grp) exitWith {};
+
if (vehicle (leader _grp) == (leader _grp)) then {_is_infantry = true;};
sleep 5;
-while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
+{ deleteWaypoint _x } forEachReversed waypoints _grp;
sleep 1;
-{_x doFollow leader _grp} foreach units _grp;
+{doStop _x; _x doFollow leader _grp} foreach units _grp;
sleep 1;
if (_is_infantry) then {
_wpPositions = [
- _flagpos getPos [random 150, random 360],
- _flagpos getPos [random 150, random 360],
- _flagpos getPos [random 150, random 360],
- _flagpos getPos [random 150, random 360],
- _flagpos getPos [random 150, random 360]
+ _flagpos getPos [random [50, 100, 150], random [0, 36, 72]],
+ _flagpos getPos [random [50, 100, 150], random [72, 108, 144]],
+ _flagpos getPos [random [50, 100, 150], random [144, 180, 216]],
+ _flagpos getPos [random [50, 100, 150], random [216, 252, 288]],
+ _flagpos getPos [random [50, 100, 150], random [288, 324, 360]]
];
_waypoint = _grp addWaypoint [_wpPositions select 0, 10];
_waypoint setWaypointType "MOVE";
@@ -28,16 +31,21 @@ if (_is_infantry) then {
_waypoint setWaypointCombatMode "YELLOW";
_waypoint setWaypointSpeed "LIMITED";
_waypoint setWaypointCompletionRadius 10;
+ _waypoint setWaypointTimeout [3, 6, 9];
_waypoint = _grp addWaypoint [_wpPositions select 1, 10];
_waypoint setWaypointType "MOVE";
+ _waypoint setWaypointTimeout [3, 6, 9];
_waypoint = _grp addWaypoint [_wpPositions select 2, 10];
_waypoint setWaypointType "MOVE";
+ _waypoint setWaypointTimeout [3, 6, 9];
_waypoint = _grp addWaypoint [_wpPositions select 3, 10];
_waypoint setWaypointType "MOVE";
+ _waypoint setWaypointTimeout [3, 6, 9];
_waypoint = _grp addWaypoint [_wpPositions select 4, 10];
_waypoint setWaypointType "CYCLE";
+ _waypoint setWaypointTimeout [3, 6, 9];
} else {
_waypoint = _grp addWaypoint [_basepos, 1];
_waypoint setWaypointType "MOVE";
@@ -54,17 +62,17 @@ waitUntil {
({alive _x} count (units _grp) == 0) || !(isNull ((leader _grp) findNearestEnemy (leader _grp)))
};
-if ({alive _x} count (units _grp) > 0) then {
- while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0)};
+if (((units _grp) findIf {alive _x}) != -1) then {
+ { deleteWaypoint _x } forEachReversed waypoints _grp;
sleep 1;
- {_x doFollow leader _grp} foreach units _grp;
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
sleep 1;
_wpPositions = [
- _basepos getPos [random 150, random 360],
- _basepos getPos [random 150, random 360],
- _basepos getPos [random 150, random 360],
- _basepos getPos [random 150, random 360],
- _basepos getPos [random 150, random 360]
+ _basepos getPos [random [50, 100, 150], random [0, 36, 72]],
+ _basepos getPos [random [50, 100, 150], random [72, 108, 144]],
+ _basepos getPos [random [50, 100, 150], random [144, 180, 216]],
+ _basepos getPos [random [50, 100, 150], random [216, 252, 288]],
+ _basepos getPos [random [50, 100, 150], random [288, 324, 360]]
];
_waypoint = _grp addWaypoint [_wpPositions select 0, 10];
_waypoint setWaypointType "SAD";
diff --git a/Missionframework/scripts/server/ai/battlegroup_ai.sqf b/Missionframework/scripts/server/ai/battlegroup_ai.sqf
index 6fe39d6a2..a878dc5fe 100644
--- a/Missionframework/scripts/server/ai/battlegroup_ai.sqf
+++ b/Missionframework/scripts/server/ai/battlegroup_ai.sqf
@@ -8,9 +8,6 @@ private _objPos = [getPos (leader _grp)] call KPLIB_fnc_getNearestBluforObjectiv
[_objPos] remoteExec ["remote_call_incoming"];
-private _startpos = getPos (leader _grp);
-
-
private _waypoint = [];
{ deleteWaypoint _x } forEachReversed waypoints _grp;
{_x doFollow leader _grp} forEach units _grp;
diff --git a/Missionframework/scripts/server/ai/building_defence_ai.sqf b/Missionframework/scripts/server/ai/building_defence_ai.sqf
index 307f5e497..074c45664 100644
--- a/Missionframework/scripts/server/ai/building_defence_ai.sqf
+++ b/Missionframework/scripts/server/ai/building_defence_ai.sqf
@@ -1,44 +1,116 @@
scriptName "building_defence_ai";
-params ["_unit", ["_sector", ""]];
+params ["_unit", ["_sector", ""], ["_forceNoLAMBS", false]];
-_unit setUnitPos "UP";
-_unit disableAI "PATH";
-private _move_is_disabled = true;
-private _hostiles = 0;
-private _ratio = 0.4;
-private _range = 40;
+private _sectorPos = (markerPos _sector);
+//Check LAMBS_Danger.fsm is running. if running, skip KPLIB built in troop garrisoning and call lambs wp garrisoning.
-while {_move_is_disabled && local _unit && alive _unit && !(captive _unit)} do {
+private _checkLAMBS = isClass (configfile >> "CfgPatches" >> "lambs_wp");
+if (_forceNoLAMBS) then {_checkLAMBS = false};
- if !(_sector isEqualTo "") then {
- _ratio = [_sector] call KPLIB_fnc_getBluforRatio;
- };
+if (_checkLAMBS) then {
+ _taskRange = round (KPLIB_range_sectorCapture / 3 * 2);
+ [_unit, _sectorPos, _taskRange, [], true, false, -1, false] call lambs_wp_fnc_taskGarrison;
+
+ private _move_is_disabled = true;
+ private _hostiles = 0;
+ private _ratio = 0.4;
+ private _range = 40;
+
+ while {_move_is_disabled && local _unit && alive _unit && !(captive _unit)} do {
+
+ if !(_sector isEqualTo "") then {
+ _ratio = [_sector] call KPLIB_fnc_getBluforRatio;
+ };
+
+ _range = floor (linearConversion [0, 1, _ratio, 0, KPLIB_range_sectorCapture / 3 * 2, true]);
- _range = floor (linearConversion [0, 1, _ratio, 0, KPLIB_range_sectorCapture / 3 * 2, true]);
+ _hostiles = (_unit nearEntities [["CAManBase"], _range]) select {side _x == KPLIB_side_player};
- _hostiles = ((getPos _unit) nearEntities [["Man"], _range]) select {side _x == KPLIB_side_player};
+ if (_move_is_disabled &&
+ {
+ (_sector in KPLIB_sectors_player) ||
+ {!(_hostiles isEqualTo [])} ||
+ {damage _unit > 0.25}
+ }
+ ) then {
+ _move_is_disabled = false;
+ if (KPLIB_ace) then {
+ [[_unit]] call ace_ai_fnc_unGarrison;
+ _unit setCombatMode "RED";
+ _unit setCombatBehaviour "COMBAT";
+ } else {
+ _unit enableAI "PATH";
+ _unit setUnitPos "AUTO";
+ _unit setCombatMode "RED";
+ _unit setCombatBehaviour "COMBAT";
+ };
+ };
- if (_move_is_disabled &&
- {
- (_sector in KPLIB_sectors_player) ||
- {!(_hostiles isEqualTo [])} ||
- {damage _unit > 0.25}
- }
- ) then {
- _move_is_disabled = false;
- _unit enableAI "PATH";
- _unit setUnitPos "AUTO";
+ if (_move_is_disabled) then {
+ private _target = assignedTarget _unit;
+ if(!(isnull _target)) then {
+ private _vd = (getPosASL _target) vectorDiff (getpos _unit);
+ private _newdir = (_vd select 0) atan2 (_vd select 1);
+ if (_newdir < 0) then {_dir = 360 + _newdir};
+ _unit setdir (_newdir);
+ };
+ };
+ sleep 5;
};
+} else {
+ _unit setUnitPos "UP";
+ _unit disableAI "PATH";
+ private _move_is_disabled = true;
+ private _hostiles = 0;
+ private _ratio = 0.4;
+ private _range = 40;
+
+ _unit addEventHandler ["Hit", {params ["_unit"];_unit setVariable ["KPLIB_bda_move_Enabled",true,true];}];
+ _unit addEventHandler ["Fired", {params ["_unit"];_unit setVariable ["KPLIB_bda_move_Enabled",true,true];}];
+ _unit addEventHandler ["FiredNear", {params ["_unit"];_unit setVariable ["KPLIB_bda_move_Enabled",true,true];}];
+ _unit addEventHandler ["Suppressed", {params ["_unit"];_unit setVariable ["KPLIB_bda_move_Enabled",true,true];}];
+
+ while {_move_is_disabled && local _unit && alive _unit && !(captive _unit)} do {
+
+ if !(_sector isEqualTo "") then {
+ _ratio = [_sector] call KPLIB_fnc_getBluforRatio;
+ };
+
+ _range = floor (linearConversion [0, 1, _ratio, 0, KPLIB_range_sectorCapture / 3 * 2, true]);
+
+ _hostiles = (_unit nearEntities [["CAManBase"], _range]) select {side _x == KPLIB_side_player};
+
+ if (_move_is_disabled &&
+ {
+ (_sector in KPLIB_sectors_player) ||
+ (_unit getVariable ["KPLIB_bda_move_Enabled", false]) ||
+ {!(_hostiles isEqualTo [])} ||
+ {damage _unit > 0.25}
+ }
+ ) then {
+ _move_is_disabled = false;
+ if (KPLIB_ace) then {
+ [[_unit]] call ace_ai_fnc_unGarrison;
+ _unit setCombatMode "RED";
+ _unit setCombatBehaviour "COMBAT";
+ } else {
+ _unit enableAI "PATH";
+ _unit setUnitPos "AUTO";
+ _unit setCombatMode "RED";
+ _unit setCombatBehaviour "COMBAT";
+ };
+ };
- if (_move_is_disabled) then {
- private _target = assignedTarget _unit;
- if(!(isnull _target)) then {
- private _vd = (getPosASL _target) vectorDiff (getpos _unit);
- private _newdir = (_vd select 0) atan2 (_vd select 1);
- if (_newdir < 0) then {_dir = 360 + _newdir};
- _unit setdir (_newdir);
+ if (_move_is_disabled) then {
+ private _target = assignedTarget _unit;
+ if(!(isnull _target)) then {
+ private _vd = (getPosASL _target) vectorDiff (getpos _unit);
+ private _newdir = (_vd select 0) atan2 (_vd select 1);
+ if (_newdir < 0) then {_dir = 360 + _newdir};
+ _unit setdir (_newdir);
+ };
};
+ sleep 5;
};
- sleep 5;
};
diff --git a/Missionframework/scripts/server/ai/patrol_ai.sqf b/Missionframework/scripts/server/ai/patrol_ai.sqf
index 113dd3647..49607ad31 100644
--- a/Missionframework/scripts/server/ai/patrol_ai.sqf
+++ b/Missionframework/scripts/server/ai/patrol_ai.sqf
@@ -1,3 +1,5 @@
+if (!isServer) exitWith {};
+
private _grp = _this select 0;
private _waypoint = [];
if ( isNil "reinforcements_sector_under_attack" ) then { reinforcements_sector_under_attack = "" };
@@ -6,8 +8,8 @@ while { count (units _grp) > 0 } do {
if ( reinforcements_sector_under_attack != "" ) then {
- while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
- {_x doFollow leader _grp} foreach units _grp;
+ { deleteWaypoint _x } forEachReversed waypoints _grp;
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
_waypoint = _grp addWaypoint [markerpos reinforcements_sector_under_attack, 50];
_waypoint setWaypointType "MOVE";
@@ -26,9 +28,9 @@ while { count (units _grp) > 0 } do {
_waypoint setWaypointType "CYCLE";
sleep 300;
- };
- if ( reinforcements_sector_under_attack == "" ) then {
+ } else {
+
private _sectors_patrol = [];
private _patrol_startpos = getpos (leader _grp);
{
@@ -37,11 +39,16 @@ while { count (units _grp) > 0 } do {
};
} foreach (KPLIB_sectors_all - KPLIB_sectors_player);
- while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
- {_x doFollow leader _grp} foreach units _grp;
+ { deleteWaypoint _x } forEachReversed waypoints _grp;
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
{
- _waypoint = _grp addWaypoint [markerpos _x, 300];
+ if ((leader _grp) isEqualTo (vehicle leader _grp) || (vehicle leader _grp) isKindOf "Helicopter") then {
+ _waypoint = _grp addWaypoint [markerpos _x, 300];
+ } else {
+ private _nearestroad = [(markerPos _x) getPos [random(100), random(360)], 200, []] call BIS_fnc_nearestRoad;
+ if ( isNull _nearestroad ) then {_waypoint = _grp addWaypoint [markerpos _x, 300];} else {_waypoint = _grp addWaypoint [getpos _nearestroad, 0];};
+ };
_waypoint setWaypointType "MOVE";
_waypoint setWaypointSpeed "NORMAL";
_waypoint setWaypointBehaviour "SAFE";
@@ -49,12 +56,18 @@ while { count (units _grp) > 0 } do {
_waypoint setWaypointCompletionRadius 30;
} foreach _sectors_patrol;
- _waypoint = _grp addWaypoint [_patrol_startpos, 300];
+ if ((leader _grp) isEqualTo (vehicle leader _grp) || (vehicle leader _grp) isKindOf "Helicopter") then {
+ _waypoint = _grp addWaypoint [_patrol_startpos, 300];
+ } else {
+ private _nearestroad = [_patrol_startpos getPos [random(100), random(360)], 200, []] call BIS_fnc_nearestRoad;
+ if ( isNull _nearestroad ) then {_waypoint = _grp addWaypoint [_patrol_startpos, 300];} else {_waypoint = _grp addWaypoint [getpos _nearestroad, 0];};
+ };
_waypoint setWaypointType "MOVE";
_waypoint setWaypointCompletionRadius 100;
- _waypoint = _grp addWaypoint [_patrol_startpos , 300];
+ private _waypointfinalpos = waypointPosition _waypoint;
+ _waypoint = _grp addWaypoint [_waypointfinalpos, 5];
_waypoint setWaypointType "CYCLE";
};
- waitUntil { sleep 5;(count (units _grp) == 0) || (reinforcements_sector_under_attack != "") };
+ waitUntil { sleep 5; (count (units _grp) == 0) || (reinforcements_sector_under_attack != "") };
};
diff --git a/Missionframework/scripts/server/ai/prisonner_ai.sqf b/Missionframework/scripts/server/ai/prisonner_ai.sqf
index 8c2c9aa53..192960423 100644
--- a/Missionframework/scripts/server/ai/prisonner_ai.sqf
+++ b/Missionframework/scripts/server/ai/prisonner_ai.sqf
@@ -1,10 +1,11 @@
params ["_unit", ["_force_surrender", false]];
+// define who do not surrender
if ((!_force_surrender) && ((random 100) > KPLIB_surrender_chance)) exitWith {};
-if ((_unit isKindOf "Man") && (alive _unit) && (side group _unit == KPLIB_side_enemy)) then {
+if ((side group _unit == KPLIB_side_enemy) && (_unit isKindOf "CAManBase") && (alive _unit)) then {
- if (vehicle _unit != _unit) then {deleteVehicle _unit};
+ if (!isNull objectParent _unit) then {objectParent _unit deleteVehicleCrew _unit};
sleep (random 5);
@@ -16,16 +17,15 @@ if ((_unit isKindOf "Man") && (alive _unit) && (side group _unit == KPLIB_side_e
};
removeBackpack _unit;
removeVest _unit;
- _unit unassignItem "NVGoggles_OPFOR";
- _unit removeItem "NVGoggles_OPFOR";
- _unit unassignItem "NVGoggles_INDEP";
- _unit removeItem "NVGoggles_INDEP";
+ _unit unlinkItem hmd _unit;
_unit setUnitPos "UP";
sleep 1;
- private _grp = createGroup [KPLIB_side_civilian, true];
+ private _grp = createGroup [KPLIB_side_enemy, true];
[_unit] joinSilent _grp;
+ _unit setVariable ["KPLIB_prisonner_surrendered", true, true];
+
if (KPLIB_ace) then {
- ["ace_captives_setSurrendered", [_unit, true], _unit] call CBA_fnc_targetEvent;
+ ["ace_captives_setSurrendered", [_unit, true], _unit] remoteExecCall ["CBA_fnc_targetEvent", 2];
} else {
_unit disableAI "ANIM";
_unit disableAI "MOVE";
@@ -33,20 +33,49 @@ if ((_unit isKindOf "Man") && (alive _unit) && (side group _unit == KPLIB_side_e
sleep 2;
_unit setCaptive true;
};
- waitUntil {sleep 1;
- !alive _unit || side group _unit == KPLIB_side_player
+ waitUntil {
+ sleep 1;
+ private _isCaptured = _unit getVariable ["KPLIB_prisonner_captured", false];
+ private _isCuffed = _unit getVariable ["ace_captives_isHandcuffed", false];
+ !alive _unit || _isCaptured || _isCuffed
};
if (alive _unit) then {
+ private _CapturedPlayer = _unit getVariable ["KPLIB_prisonner_whois", objNull];
+ if (isNull _capturedPlayer) then {
+ private _players = allPlayers;
+ private _nearestPlayer = player;
+ private _minDistance = 100;
+ {
+ private _distance = _unit distance _x;
+ if (_distance < _minDistance) then {
+ _minDistance = _distance;
+ _nearestPlayer = _x;
+ };
+ } forEach _players;
+ _CapturedPlayer = _nearestPlayer;
+ };
+ [[_unit], group _CapturedPlayer] remoteExecCall ["joinSilent"];
if (KPLIB_ace) then {
- ["ace_captives_setSurrendered", [_unit, false], _unit] call CBA_fnc_targetEvent;
+ private _isCuffed = _unit getVariable ["ace_captives_isHandcuffed", false];
+ if (_isCuffed) then {
+ _unit setVariable ["KPLIB_prisonner_captured", true, true];
+ } else {
+ ["ace_captives_setSurrendered", [_unit, false], _unit] remoteExecCall ["CBA_fnc_targetEvent", 2];
+ };
} else {
+ _unit setCaptive false;
_unit enableAI "ANIM";
_unit enableAI "MOVE";
- _unit setCaptive false;
+ sleep 1;
+ _unit playmove "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon";
+ sleep 2;
+ [_unit, ""] remoteExecCall ["switchMove"];
};
sleep 1;
+ doStop _unit;
+ _unit doFollow _CapturedPlayer;
[_unit] remoteExec ["remote_call_prisonner", _unit];
};
};
-};
+};
\ No newline at end of file
diff --git a/Missionframework/scripts/server/ai/troup_transport.sqf b/Missionframework/scripts/server/ai/troup_transport.sqf
index c872d70a5..33b65a3a6 100644
--- a/Missionframework/scripts/server/ai/troup_transport.sqf
+++ b/Missionframework/scripts/server/ai/troup_transport.sqf
@@ -27,7 +27,7 @@ if ((alive _transVeh) && (alive (driver _transVeh))) then {
{_x moveInCargo _transVeh} forEach (units _infGrp);
- while {(count (waypoints _infGrp)) != 0} do {deleteWaypoint ((waypoints _infGrp) select 0);};
+ { deleteWaypoint _x } forEachReversed waypoints _infGrp;
sleep 3;
@@ -53,7 +53,7 @@ if ((alive _transVeh) && (alive (driver _transVeh))) then {
sleep 5;
- while {(count (waypoints _transGrp)) != 0} do {deleteWaypoint ((waypoints _transGrp) select 0);};
+ { deleteWaypoint _x } forEachReversed waypoints _transGrp;
_transVehWp = _transGrp addWaypoint [_objPos, 100];
_transVehWp setWaypointType "SAD";
diff --git a/Missionframework/scripts/server/asymmetric/convoy/logistic_convoy_ambush.sqf b/Missionframework/scripts/server/asymmetric/convoy/logistic_convoy_ambush.sqf
index 3a4623c1d..e99a5e471 100644
--- a/Missionframework/scripts/server/asymmetric/convoy/logistic_convoy_ambush.sqf
+++ b/Missionframework/scripts/server/asymmetric/convoy/logistic_convoy_ambush.sqf
@@ -120,7 +120,7 @@ if ((_waitingTime <= 0) && (({alive _x} count (units _grp)) > 0)) then {
private _gain = 0;
{
if (alive _x) then {
- deleteVehicle _x;
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
_gain = _gain + 2;
};
} forEach (units _grp);
diff --git a/Missionframework/scripts/server/asymmetric/ied/manage_asymIED.sqf b/Missionframework/scripts/server/asymmetric/ied/manage_asymIED.sqf
index e00f4b303..cde6644ba 100644
--- a/Missionframework/scripts/server/asymmetric/ied/manage_asymIED.sqf
+++ b/Missionframework/scripts/server/asymmetric/ied/manage_asymIED.sqf
@@ -31,8 +31,8 @@ if (!(isnull _roadobj)) then {
if (KPLIB_asymmetric_debug > 0) then {[format ["manage_asymIED.sqf -> IED %1 spawned at %2", _count, markerText _sector], "ASYMMETRIC"] remoteExecCall ["KPLIB_fnc_log", 2];};
while {(_sector in KPLIB_asymmetric_sectors) && (mineActive _ied_obj) && !_goes_boom} do {
- _nearinfantry = ((getpos _ied_obj) nearEntities ["Man", _activation_radius_infantry]) select {side _x == KPLIB_side_player};
- _nearvehicles = ((getpos _ied_obj) nearEntities [["Car", "Tank", "Air"], _activation_radius_vehicles]) select {side _x == KPLIB_side_player};
+ _nearinfantry = (_ied_obj nearEntities ["CAManBase", _activation_radius_infantry]) select {side _x == KPLIB_side_player};
+ _nearvehicles = (_ied_obj nearEntities [["Car", "Tank", "Air"], _activation_radius_vehicles]) select {side _x == KPLIB_side_player};
if (count _nearinfantry >= _infantry_trigger || count _nearvehicles >= _vehicle_trigger) then {
_ied_obj setDamage 1;
stats_ieds_detonated = stats_ieds_detonated + 1; publicVariable "stats_ieds_detonated";
diff --git a/Missionframework/scripts/server/asymmetric/random/asym_sector_ambush.sqf b/Missionframework/scripts/server/asymmetric/random/asym_sector_ambush.sqf
index 4ac6104d5..0a14ee550 100644
--- a/Missionframework/scripts/server/asymmetric/random/asym_sector_ambush.sqf
+++ b/Missionframework/scripts/server/asymmetric/random/asym_sector_ambush.sqf
@@ -43,7 +43,7 @@ while {(_sector in KPLIB_asymmetric_sectors) && (!isNull _grp)} do {
{
_x setUnitPos "AUTO";
} forEach (units _grp);
- (units _grp) doFollow (leader _grp);
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
_grp setBehaviour "COMBAT";
_grp setCombatMode "RED";
private _waypoint = _grp addWaypoint [markerpos _sector, 20];
@@ -66,7 +66,7 @@ sleep 60;
if (!isNull _grp) then {
{
if (alive _x) then {
- deleteVehicle _x;
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
};
} forEach (units _grp);
};
diff --git a/Missionframework/scripts/server/asymmetric/random/sector_guerilla.sqf b/Missionframework/scripts/server/asymmetric/random/sector_guerilla.sqf
index b955e132b..3ce8174b9 100644
--- a/Missionframework/scripts/server/asymmetric/random/sector_guerilla.sqf
+++ b/Missionframework/scripts/server/asymmetric/random/sector_guerilla.sqf
@@ -50,8 +50,8 @@ if (_incDir < 23) then {
private _spawnedGroups = [];
private _grp = [_startpos] call KPLIB_fnc_spawnGuerillaGroup;
-while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
-{_x doFollow (leader _grp)} forEach (units _grp);
+{ deleteWaypoint _x } forEachReversed waypoints _grp;
+{doStop _x; _x doFollow leader _grp} foreach units _grp;
private _waypoint = _grp addWaypoint [markerpos _sector, 100];
_waypoint setWaypointType "MOVE";
@@ -116,7 +116,7 @@ private _strengthChanged = false;
if (!isNull _x) then {
{
if (alive _x) then {
- deleteVehicle _x;
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
KPLIB_guerilla_strength = KPLIB_guerilla_strength + 2;
_strengthChanged = true;
};
diff --git a/Missionframework/scripts/server/base/huron_manager.sqf b/Missionframework/scripts/server/base/huron_manager.sqf
index e0c123294..b9040f40c 100644
--- a/Missionframework/scripts/server/base/huron_manager.sqf
+++ b/Missionframework/scripts/server/base/huron_manager.sqf
@@ -6,7 +6,7 @@ waitUntil {KPLIB_saveLoaded};
KPLIB_potato01 = objNull;
// Detect possible Potato 01 from loaded save data
-private _savedPotato = vehicles select {(toLower (typeOf _x)) isEqualTo (toLower KPLIB_b_potato01)};
+private _savedPotato = vehicles select {(toLowerANSI (typeOf _x)) isEqualTo (toLowerANSI KPLIB_b_potato01)};
if !(_savedPotato isEqualTo []) then {
KPLIB_potato01 = _savedPotato select 0;
};
diff --git a/Missionframework/scripts/server/base/startgame.sqf b/Missionframework/scripts/server/base/startgame.sqf
index 5cf0779db..d6756211f 100644
--- a/Missionframework/scripts/server/base/startgame.sqf
+++ b/Missionframework/scripts/server/base/startgame.sqf
@@ -59,9 +59,15 @@ if (KPLIB_sectors_fob isEqualTo []) then {
_crate setVariable ["KPLIB_crate_value", 100, true];
[_crate, 500] remoteExec ["setMass", _crate];
[objNull, _crate] call BIS_fnc_curatorObjectEdited;
- if (KPLIB_ace) then {[_crate, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];};
+ _crate lockInventory true;
+ if (KPLIB_ace) then {
+ [_crate, true, [0, 1.5, 0], 0] remoteExec ["ace_dragging_fnc_setCarryable"];
+ _crate setVariable ["ace_cargo_noRename", true];
+ };
KPLIB_startCrates pushBack _crate;
};
+
+ publicVariable "KPLIB_startCrates";
// Spawn green smoke on the crates short before they hit the ground
uiSleep 25;
diff --git a/Missionframework/scripts/server/battlegroup/random_battlegroups.sqf b/Missionframework/scripts/server/battlegroup/random_battlegroups.sqf
index 7ca7c139c..cce2f5bd5 100644
--- a/Missionframework/scripts/server/battlegroup/random_battlegroups.sqf
+++ b/Missionframework/scripts/server/battlegroup/random_battlegroups.sqf
@@ -24,6 +24,6 @@ while {KPLIB_param_aggressivity > 0.9 && KPLIB_endgame == 0} do {
&& {[] call KPLIB_fnc_getOpforCap < KPLIB_cap_battlegroup}
&& {diag_fps > 15.0}
) then {
- ["", (random 100) < 45] spawn spawn_battlegroup;
+ ["", (random 100) < 15] spawn spawn_battlegroup;
};
};
diff --git a/Missionframework/scripts/server/battlegroup/spawn_air.sqf b/Missionframework/scripts/server/battlegroup/spawn_air.sqf
index f32a55247..cdb41481a 100644
--- a/Missionframework/scripts/server/battlegroup/spawn_air.sqf
+++ b/Missionframework/scripts/server/battlegroup/spawn_air.sqf
@@ -35,7 +35,7 @@ for "_i" from 1 to _planes_number do {
sleep 1;
};
-while {!((waypoints _grp) isEqualTo [])} do {deleteWaypoint ((waypoints _grp) select 0);};
+{ deleteWaypoint _x } forEachReversed waypoints _grp;
sleep 1;
{_x doFollow leader _grp} forEach (units _grp);
sleep 1;
diff --git a/Missionframework/scripts/server/battlegroup/spawn_battlegroup.sqf b/Missionframework/scripts/server/battlegroup/spawn_battlegroup.sqf
index fe5a573de..c22608196 100644
--- a/Missionframework/scripts/server/battlegroup/spawn_battlegroup.sqf
+++ b/Missionframework/scripts/server/battlegroup/spawn_battlegroup.sqf
@@ -6,7 +6,7 @@ params [
if (KPLIB_endgame == 1) exitWith {};
-_spawn_marker = [[2000, 1000] select _infOnly, 3000, false, markerPos _spawn_marker] call KPLIB_fnc_getOpforSpawnPoint;
+_spawn_marker = [[1000, 800] select _infOnly, [2200, 1600] select _infOnly, false, markerPos _spawn_marker] call KPLIB_fnc_getOpforSpawnPoint;
if !(_spawn_marker isEqualTo "") then {
KPLIB_last_battlegroup_time = diag_tickTime;
diff --git a/Missionframework/scripts/server/civinformant/civinfo_loop.sqf b/Missionframework/scripts/server/civinformant/civinfo_loop.sqf
index b9b5c07ef..ab787ae4b 100644
--- a/Missionframework/scripts/server/civinformant/civinfo_loop.sqf
+++ b/Missionframework/scripts/server/civinformant/civinfo_loop.sqf
@@ -15,21 +15,33 @@ while {true} do {
KPLIB_civ_rep >= 25
};
- if (KPLIB_civinfo_debug > 0) then {["Informant waitUntil passed", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ if (KPLIB_civinfo_debug > 0) then {["Informant waitUntil search city passed", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
if ((KPLIB_civinfo_chance >= (random 100)) && KPLIB_endgame == 0) then {
private _sector = selectRandom (KPLIB_sectors_player select {_x in KPLIB_sectors_city || _x in KPLIB_sectors_capital});
- private _house = (nearestObjects [[((markerPos _sector select 0) - 100 + (random 200)), ((markerPos _sector select 1) - 100 + (random 200))],["House", "Building"], 100]) select 0;
-
+ private _houses = [];
private _grp = createGroup [KPLIB_side_civilian, true];
private _informant = [selectRandom KPLIB_c_units, markerPos _sector, _grp] call KPLIB_fnc_createManagedUnit;
private _waiting_time = KPLIB_civinfo_duration;
+ _grp setVariable ["acex_headless_blacklist", true, true];
- _informant setPos (selectRandom (_house buildingPos -1));
+ _houses = (nearestObjects [[((markerPos _sector select 0) - 100 + (random 200)), ((markerPos _sector select 1) - 100 + (random 200))],["House", "Building"], 100]);
+ if (count _houses == 0) then {
+ _randomPos = ((markerPos _sector) getPos [random 150, random 360]) findEmptyPosition [3, 150, KPLIB_b_crateAmmo];
+ if (count _randomPos == 0) then {_randomPos = [(markerPos _sector select 0),(markerPos _sector select 1),0];};
+ _informant setPos _randomPos;
+ } else {
+ _house = selectRandom _houses;
+ _informant setPos (selectRandom (_house buildingPos -1));
+ };
_informant setUnitPos "UP";
sleep 1;
+
+ private _chemlight = objNull;
+ private _chemClass = "Chemlight_blue";
if (KPLIB_ace) then {
- ["ace_captives_setSurrendered", [_informant, true], _informant] call CBA_fnc_targetEvent;
+ ["ace_captives_setSurrendered", [_informant, true], _informant] remoteExecCall ["CBA_fnc_targetEvent", 2];
+ _chemClass = "ACE_Chemlight_HiBlue";
} else {
_informant disableAI "ANIM";
_informant disableAI "MOVE";
@@ -37,41 +49,96 @@ while {true} do {
sleep 2;
_informant setCaptive true;
};
+ _informant setVariable ["KPLIB_prisonner_surrendered", true, true];
+ _chemlight = _chemClass createVehicle (getPos _informant);
if (KPLIB_civinfo_debug > 0) then {[format ["Informant %1 spawned on: %2 - Position: %3", name _informant, debug_source, getPos _informant], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
- [0, [((((getPos _informant) select 0) + 200) - random 400),((((getPos _informant) select 1) + 200) - random 400),0]] remoteExec ["civinfo_notifications"];
+ [0, [((((getPos _informant) select 0) + 125) - random 250),((((getPos _informant) select 1) + 125) - random 250),0]] remoteExec ["civinfo_notifications"];
- while {alive _informant && ((side (group _informant)) == KPLIB_side_civilian) && _waiting_time > 0} do {
+ // Time-based despawn
+ private _time_start = time;
+ private _player_not_near = true;
+ while {
+ (alive _informant && ((time - _time_start) < _waiting_time))
+ } do {
uiSleep 1;
- private _player_near = false;
+
+ _player_not_near = true;
{
- if (((_x distance _informant) < 150) && (alive _x)) exitWith {_player_near = true};
+ if (((_x distance _informant) < 150) && (alive _x)) exitWith {_player_not_near = false};
} foreach allPlayers;
-
- if !(_player_near) then {
+
+ if (_player_not_near) then {
_waiting_time = _waiting_time - 1;
+ if ((KPLIB_civinfo_debug > 0) && ((_waiting_time % 60) == 0)) then {
+ [format ["Informant will despawn in %1 minutes", round (_waiting_time / 60)], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];
+ };
};
-
- if ((KPLIB_civinfo_debug > 0) && ((_waiting_time % 60) == 0)) then {[format ["Informant will despawn in %1 minutes", round (_waiting_time / 60)], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+
+ private _isCaptured = _informant getVariable ["KPLIB_prisonner_captured", false];
+ private _isCuffed = _informant getVariable ["ace_captives_isHandcuffed", false];
+ if (_isCaptured || _isCuffed) exitWith {};
};
-
- if (_waiting_time > 0) then {
- if (alive _informant) then {
- if (KPLIB_ace) then {
- ["ace_captives_setSurrendered", [_informant, false], _informant] call CBA_fnc_targetEvent;
- } else {
- _informant enableAI "ANIM";
- _informant enableAI "MOVE";
+ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_loop Countdown exit"], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+
+ private _timeover = false;
+ if ((time - _time_start) > _waiting_time) then {
+ _timeover = true;
+ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_loop Countdown TimeOver!"], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ };
+
+ private _isCaptured = _informant getVariable ["KPLIB_prisonner_captured", false];
+ private _isCuffed = _informant getVariable ["ace_captives_isHandcuffed", false];
+ private _not_under_control = true;
+ if (_isCaptured || _isCuffed) then {
+ private _capturedPlayer = _informant getVariable ["KPLIB_prisonner_whois", objNull];
+ if (isNull _capturedPlayer) then {
+ private _players = allPlayers;
+ private _nearestPlayer = player;
+ private _minDistance = 100;
+ {
+ private _distance = _informant distance _x;
+ if (_distance < _minDistance) then {
+ _minDistance = _distance;
+ _nearestPlayer = _x;
+ };
+ } forEach _players;
+ _CapturedPlayer = _nearestPlayer;
+ };
+ _informant setVariable ["KPLIB_prisonner_whois", _capturedPlayer];
+ [[_informant], group _capturedPlayer] remoteExecCall ["joinSilent"];
+ if (KPLIB_ace) then {
+ private _isCuffed = _informant getVariable ["ace_captives_isHandcuffed", false];
+ if !(_isCuffed) then {
+ ["ace_captives_setSurrendered", [_informant, false], _informant] remoteExecCall ["CBA_fnc_targetEvent", 2];
};
- sleep 1;
- [_informant] remoteExec ["civinfo_escort"];
} else {
- if (KPLIB_civinfo_debug > 0) then {["Informant is dead", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
- [3] remoteExec ["civinfo_notifications"];
+ _informant setCaptive false;
+ _informant enableAI "ANIM";
+ _informant enableAI "MOVE";
+ sleep 1;
+ _informant playmove "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon";
+ sleep 2;
};
- } else {
- deleteVehicle _informant;
+ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_loop civilian joined to group: %1", name _capturedPlayer], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ doStop _informant;
+ _informant doFollow _capturedPlayer;
+
+ _not_under_control = false;
+ [_informant] remoteExec ["civinfo_escort", _informant];
+ [7, [0,0,0], _capturedPlayer] remoteExec ["civinfo_notifications"];
+ };
+ deleteVehicle _chemlight;
+
+ waitUntil {!alive _informant || _timeover};
+
+ if (!alive _informant && _not_under_control) exitWith {
+ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_loop is reset by: %1 - Informant isn't alive", debug_source], "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
+ [3] remoteExec ["civinfo_notifications"];
+ };
+ if (_timeover) exitWith {
+ if (isNull objectParent _informant) then {deleteVehicle _informant} else {(objectParent _informant) deleteVehicleCrew _informant};
if (KPLIB_civinfo_debug > 0) then {["Informant despawned", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
[2] remoteExec ["civinfo_notifications"];
};
diff --git a/Missionframework/scripts/server/civinformant/tasks/civinfo_task.sqf b/Missionframework/scripts/server/civinformant/tasks/civinfo_task.sqf
index d271a4fce..086d633e5 100644
--- a/Missionframework/scripts/server/civinformant/tasks/civinfo_task.sqf
+++ b/Missionframework/scripts/server/civinformant/tasks/civinfo_task.sqf
@@ -63,7 +63,9 @@ if (KPLIB_civinfo_debug > 0) then {[format ["civinfo_task.sqf -> loop exited on:
if (alive _hvt) then {
deleteVehicle _veh;
- {deleteVehicle _x} forEach (units _grp);
+ {
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
+ } forEach (units _grp);
[6] remoteExec ["civinfo_notifications"];
if (KPLIB_civinfo_debug > 0) then {["civinfo_task.sqf -> Task despawned", "CIVINFO"] remoteExecCall ["KPLIB_fnc_log", 2];};
} else {
diff --git a/Missionframework/scripts/server/civrep/fnc/f_kp_cr_liberatedSector.sqf b/Missionframework/scripts/server/civrep/fnc/f_kp_cr_liberatedSector.sqf
index d9223b09b..09f100394 100644
--- a/Missionframework/scripts/server/civrep/fnc/f_kp_cr_liberatedSector.sqf
+++ b/Missionframework/scripts/server/civrep/fnc/f_kp_cr_liberatedSector.sqf
@@ -13,6 +13,8 @@ if (_sector in KPLIB_sectors_capital || _sector in KPLIB_sectors_city) then {
if (_penalty > 0) then {
[1, [(_penalty / KPLIB_cr_building_penalty)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
+ } else {
+ _penalty = 0;
};
if (_sector in KPLIB_sectors_capital) then {
diff --git a/Missionframework/scripts/server/civrep/fnc/f_kp_cr_woundedAnim.sqf b/Missionframework/scripts/server/civrep/fnc/f_kp_cr_woundedAnim.sqf
index 606cfc016..41109e2dc 100644
--- a/Missionframework/scripts/server/civrep/fnc/f_kp_cr_woundedAnim.sqf
+++ b/Missionframework/scripts/server/civrep/fnc/f_kp_cr_woundedAnim.sqf
@@ -8,4 +8,5 @@ Play random wounded animation on given unit
params ["_unit"];
private _anim = selectRandom ["Acts_CivilInjuredHead_1", "Acts_CivilInjuredArms_1", "Acts_CivilInjuredChest_1", "Acts_CivilInjuredLegs_1", "Acts_CivilInjuredGeneral_1", "Acts_SittingWounded_loop"];
-[_unit, _anim] remoteExec ["switchMove"];
+[_unit, _anim] remoteExecCall ["switchMove"];
+[_unit, _anim] remoteExecCall ["playMoveNow"];
diff --git a/Missionframework/scripts/server/civrep/ignored/allterrain.sqf b/Missionframework/scripts/server/civrep/ignored/allterrain.sqf
new file mode 100644
index 000000000..239aa93dd
--- /dev/null
+++ b/Missionframework/scripts/server/civrep/ignored/allterrain.sqf
@@ -0,0 +1,749 @@
+KPLIB_cr_ign_buildings = [
+ "Land_A_Castle_Bastion",
+ "Land_A_Castle_Gate",
+ "Land_A_Castle_Stairs_A",
+ "Land_A_Castle_Wall1_20",
+ "Land_A_Castle_Wall1_Corner",
+ "Land_A_Castle_Wall1_Corner_2",
+ "Land_A_Castle_Wall1_End",
+ "Land_A_Castle_Wall1_End_2",
+ "Land_A_Castle_Wall2_Corner_2",
+ "Land_A_Castle_WallS_5_D",
+ "Land_A_Castle_WallS_End",
+ "Land_A_Crane_02a",
+ "Land_A_Crane_02b",
+ "Land_A_CraneCon",
+ "Land_A_FuelStation_Shed",
+ "Land_A_statue01",
+ "Land_AfDum_mesto2",
+ "Land_AfDum_mesto2L",
+ "Land_AfDum_mesto3",
+ "Land_balken_125_025_025_clean_cnc",
+ "Land_balken_125_025_025_cnc",
+ "Land_balken_250_025_025_clean_cnc",
+ "Land_balken_250_025_025_cnc",
+ "Land_balken_250_025_025_wood",
+ "Land_balken_500_025_025_clean_cnc",
+ "Land_balken_500_025_025_cnc",
+ "Land_balken_500_025_025_wood",
+ "Land_Barn_W_01_dam",
+ "Land_Barracks_01_grey_F",
+ "Land_BellTower_01_V1_F",
+ "Land_BoatSmall_1",
+ "Land_BoatSmall_2a",
+ "Land_BoatSmall_2b",
+ "Land_boden_125_125_025_clean_cnc",
+ "Land_boden_125_125_025_cnc",
+ "Land_boden_125_125_025_wood",
+ "Land_boden_250_250_025_clean_cnc",
+ "Land_boden_250_250_025_cnc",
+ "Land_boden_250_250_025_wood",
+ "Land_boden_500_500_025_clean_cnc",
+ "Land_boden_500_500_025_cnc",
+ "Land_boden_500_500_025_wood",
+ "Land_bouda_plech",
+ "Land_Brana02",
+ "Land_Brana02nodoor",
+ "Land_Bunker_01_big_F",
+ "Land_Bunker_01_small_F",
+ "Land_Bunker_02_double_F",
+ "Land_Bunker_02_left_F",
+ "Land_Bunker_02_light_double_F",
+ "Land_Bunker_02_light_left_F",
+ "Land_Bunker_02_light_right_F",
+ "Land_Bunker_02_right_F",
+ "Land_Calvary_03_F",
+ "Land_cargo_addon02_V1_F",
+ "Land_cargo_house_slum_F",
+ "Land_Cargo_House_V1_F",
+ "Land_Cargo_House_V2_F",
+ "Land_Cargo_House_V3_F",
+ "Land_Cargo_House_V4_F",
+ "Land_Cargo_HQ_V1_F",
+ "Land_Cargo_HQ_V3_F",
+ "Land_Cargo_Patrol_V1_F",
+ "Land_Cargo_Patrol_V3_F",
+ "Land_Cargo_Patrol_V4_F",
+ "Land_Cargo_Tower_V1_F",
+ "Land_Cargo_Tower_V4_F",
+ "Land_Carousel_01_F",
+ "Land_CastleRuins_01_wall_10m_F",
+ "Land_CastleRuins_01_wall_d_L_F",
+ "Land_CastleRuins_01_wall_d_R_F",
+ "Land_ChickenCoop_01_F",
+ "Land_Climbing_Obstacle",
+ "Land_ClutterCutter_large_F",
+ "Land_cmp_Shed_dam_F",
+ "Land_cmp_Shed_F",
+ "Land_cmp_Tower_F",
+ "Land_CncShelter_F",
+ "Land_Communication_anchor_F",
+ "Land_Communication_F",
+ "Land_Company3_2",
+ "Land_ConcreteWell_02_F",
+ "Land_ContainerLine_01_F",
+ "Land_ContainerLine_02_F",
+ "Land_ContainerLine_03_F",
+ "Land_Crane_F",
+ "Land_Cross_01_small_F",
+ "Land_d_Addon_02_V1_F",
+ "Land_d_House_Big_01_V1_F",
+ "Land_d_House_Big_02_V1_F",
+ "Land_d_House_Small_01_V1_F",
+ "Land_d_House_Small_02_V1_F",
+ "Land_D_Mlyn_Vys",
+ "Land_D_Pec_Vez1",
+ "Land_D_Pec_Vez2",
+ "Land_d_Shop_01_V1_F",
+ "Land_d_Shop_02_V1_F",
+ "Land_d_Stone_HouseBig_V1_F",
+ "Land_d_Stone_HouseSmall_V1_F",
+ "Land_d_Stone_Shed_V1_F",
+ "Land_D_Vez_Mlyn",
+ "Land_d_Windmill01_F",
+ "Land_DeerStand_01_F",
+ "Land_deox_BarrierGateOpenable",
+ "Land_deox_carport_a1",
+ "Land_deox_carport_a2",
+ "Land_deox_fachwerkA1",
+ "Land_deox_fachwerkB1",
+ "Land_deox_fachwerkC2",
+ "Land_deox_fachwerkD2",
+ "Land_deox_fachwerkE1",
+ "Land_deox_fachwerkE1B",
+ "Land_deox_fachwerkE1O",
+ "Land_deox_fachwerkS1",
+ "Land_deox_fachwerkS1_offen",
+ "Land_deox_fachwerkS1Giebel",
+ "Land_deox_fachwerkSO1",
+ "Land_deox_fachwerkSO1_offen",
+ "Land_deox_fence_B1",
+ "Land_deox_fence_B2",
+ "Land_deox_fence_B3",
+ "Land_deox_fence_C1",
+ "Land_deox_fence_C1s",
+ "Land_deox_fwh_dach",
+ "Land_deox_fwh_dach2",
+ "Land_deox_fwh_dach3",
+ "Land_deox_fwhE1",
+ "Land_deox_fwhf1",
+ "Land_deox_gate_A1",
+ "Land_deox_gate_B1",
+ "Land_deox_gate_B2",
+ "Land_deox_gate_B2door",
+ "Land_deox_gate_B3",
+ "Land_deox_gate_B3door",
+ "Land_deox_gate_B5",
+ "Land_deox_gate_c1",
+ "Land_deox_House_D_medium3_4",
+ "Land_deox_rampe_a1",
+ "Land_deox_rampe_c1",
+ "Land_deox_rampe_d1",
+ "Land_deox_rampe_d3",
+ "Land_deox_tuer1",
+ "Land_deox_unterbau1a",
+ "Land_deox_unterbau1b",
+ "Land_deox_unterbau1c",
+ "Land_deox_unterbau2a",
+ "Land_deox_unterbau2b",
+ "Land_deox_wall01",
+ "Land_deox_wall01s",
+ "Land_deox_wall02",
+ "Land_deox_wall02s",
+ "Land_deox_wall06",
+ "Land_Dirthump01",
+ "Land_Dirthump01_EP1",
+ "Land_Dirthump02",
+ "Land_Dirthump02_EP1",
+ "Land_Dirthump03",
+ "Land_Dirthump03_EP1",
+ "Land_DirtPatch_03_F",
+ "Land_Dome_Big_F",
+ "Land_dp_smallTank_F",
+ "Land_dp_transformer_F",
+ "Land_DPP_01_waterCooler_F",
+ "Land_DPP_01_waterCooler_ladder_F",
+ "Land_DryToilet_01_F",
+ "Land_Dulni_bs",
+ "Land_Dum_zboreny",
+ "Land_Dum_zboreny_total",
+ "Land_ecke_075_025_300_clean_cnc",
+ "Land_ecke_075_025_300_wood",
+ "Land_Factory_Conv1_10_F",
+ "Land_Factory_Conv1_Main_F",
+ "Land_Factory_Conv2_F",
+ "Land_Farm_WTower",
+ "Land_FeedRack_01_F",
+ "Land_FeedStorage_01_F",
+ "Land_fenster_250_025_300_clean_cnc",
+ "Land_fenster_250_025_300_cnc",
+ "Land_fenster_250_025_300_wood",
+ "Land_ffaa_casa_caseta_peq",
+ "Land_FireEscape_01_short_F",
+ "Land_FireEscape_01_tall_F",
+ "Land_Flush_Light_green_F",
+ "Land_Flush_Light_red_F",
+ "Land_Flush_Light_yellow_F",
+ "Land_Fort_Watchtower_EP1",
+ "LAND_fort2",
+ "Land_fortified_nest_big_EP1",
+ "Land_fortified_nest_small_EP1",
+ "Land_fs_feed_F",
+ "Land_fs_roof_F",
+ "Land_Fuel_tank_big",
+ "Land_fuel_tank_small",
+ "Land_FuelStation_01_pump_F",
+ "Land_FuelStation_01_pump_malevil_F",
+ "Land_FuelStation_01_roof_malevil_F",
+ "Land_FuelStation_02_pump_F",
+ "Land_FuelStation_02_roof_F",
+ "Land_FuelStation_03_pump_F",
+ "Land_FuelStation_Build_PMC",
+ "Land_FuelStation_Feed_F",
+ "Land_FuelStation_Shed_F",
+ "Land_GantryCrane_01_F",
+ "Land_Gate_IndVar2_5",
+ "Land_Gate_Wood1_5",
+ "Land_Gate_wood2_5",
+ "Land_glass_125_0025_125",
+ "Land_glass_125_0025_300",
+ "Land_glass_250_0025_300",
+ "Land_glass_500_0025_300",
+ "Land_glass_platte_500_500_0025",
+ "Land_Grave_08_F",
+ "Land_Grave_09_F",
+ "Land_Grave_10_F",
+ "Land_Grave_11_F",
+ "Land_Grave_dirt_F",
+ "Land_Grave_forest_F",
+ "Land_Grave_rocks_F",
+ "Land_GraveFence_01_F",
+ "Land_GraveFence_02_F",
+ "Land_GraveFence_03_F",
+ "Land_GraveFence_04_F",
+ "Land_Greenhouse_01_damaged_F",
+ "Land_GuardHouse_01_F",
+ "Land_GuardTower_02_F",
+ "Land_hag_bridge_rail",
+ "Land_Hag_Garage",
+ "Land_Helfenburk_budova2",
+ "Land_Helfenburk_cimburi",
+ "Land_Helfenburk_zed",
+ "Land_HighVoltageColumn_F",
+ "Land_HighVoltageColumnWire_F",
+ "Land_HighVoltageEnd_F",
+ "Land_HighVoltageTower_F",
+ "Land_HighVoltageTower_large_F",
+ "Land_HighVoltageTower_largeCorner_F",
+ "Land_Hlaska",
+ "Land_hopper_old_PMC",
+ "Land_Hut03",
+ "Land_Hut06",
+ "Land_Hutch_01_F",
+ "Land_i_Addon_03_V1_F",
+ "Land_i_Addon_03mid_V1_F",
+ "Land_i_Addon_04_V1_F",
+ "Land_i_Barracks_V2_F",
+ "Land_i_Garage_V1_F",
+ "Land_i_Garage_V2_F",
+ "Land_i_House_Small_02_V2_dam_F",
+ "Land_i_House_Small_02_V3_dam_F",
+ "Land_i_Stone_Shed_V1_dam_F",
+ "Land_i_Stone_Shed_V2_dam_F",
+ "Land_Ind_BoardsPack1",
+ "Land_Ind_BoardsPack2",
+ "Land_Ind_Expedice_1",
+ "Land_Ind_Expedice_2",
+ "Land_Ind_Expedice_3",
+ "Land_Ind_FuelStation_Feed_EP1",
+ "Land_Ind_FuelStation_Shed_EP1",
+ "Land_Ind_IlluminantTower",
+ "Land_Ind_MalyKomin",
+ "Land_Ind_Mlyn_01",
+ "Land_Ind_Mlyn_02",
+ "Land_Ind_Mlyn_03",
+ "Land_Ind_Mlyn_04",
+ "Land_Ind_Mlyn_D1",
+ "Land_Ind_Mlyn_D2",
+ "Land_Ind_SawMillPen",
+ "Land_Ind_Shed_01_end",
+ "Land_Ind_Shed_01_EP1",
+ "Land_Ind_Shed_01_main",
+ "Land_Ind_Shed_02_end",
+ "Land_Ind_Shed_02_EP1",
+ "Land_Ind_Shed_02_main",
+ "Land_Ind_SiloVelke_most",
+ "Land_Ind_TankSmall",
+ "Land_Ind_TankSmall2",
+ "Land_Ind_TankSmall2_EP1",
+ "Land_Ind_Timbers",
+ "Land_Ind_Vysypka",
+ "Land_Ind_Workshop01_box",
+ "Land_IndPipe1_stair",
+ "Land_IndPipe2_big_18",
+ "Land_IndPipe2_big_18ladder",
+ "Land_IndPipe2_big_18ladder_F",
+ "Land_IndPipe2_big_9",
+ "Land_IndPipe2_big_ground1",
+ "Land_IndPipe2_big_ground1_F",
+ "Land_IndPipe2_big_ground2",
+ "Land_IndPipe2_big_ground2_F",
+ "Land_IndPipe2_big_support",
+ "Land_IndPipe2_bigBuild1_R",
+ "Land_IndPipe2_bigBuild2_L",
+ "Land_IndPipe2_bigL_L",
+ "Land_IndPipe2_bigL_L_F",
+ "Land_IndPipe2_bigL_R",
+ "Land_IndPipe2_bigL_R_F",
+ "Land_IndPipe2_Small_9",
+ "Land_IndPipe2_Small_ground1",
+ "Land_IndPipe2_Small_ground2",
+ "Land_IndPipe2_SmallBuild1_R",
+ "Land_IndPipe2_SmallBuild2_R",
+ "Land_IndPipe2_SmallL_L",
+ "Land_IndPipe2_SmallL_R",
+ "Land_IndPipe2_T_L",
+ "Land_IndPipe2_T_R",
+ "Land_IndPipe3_big_ground1_F",
+ "Land_IndPipe3_big_ground2_F",
+ "Land_IndPipe3_bigL_L_F",
+ "Land_IndPipe3_bigL_R_F",
+ "Land_Jbad_Cargo1_int",
+ "Land_Jbad_Cargo2_int",
+ "Land_Jbad_Cargo3_int",
+ "Land_Jbad_Cargo4_int",
+ "Land_Jbad_Cargo5_int",
+ "Land_Jbad_Cargo6_int",
+ "Land_Jbad_Cargo7_int",
+ "Land_jbad_Com_tower",
+ "Land_Jbad_Ind_Coltan_Conv1_10",
+ "Land_Jbad_Ind_Coltan_Conv1_Main",
+ "Land_Jbad_Ind_Coltan_Main",
+ "Land_Jbad_Ind_Conveyer",
+ "Land_Jbad_Ind_FuelStation_Feed",
+ "Land_Jbad_Ind_FuelStation_Shed",
+ "Land_Jbad_Ind_FuelStation_Sign",
+ "Land_Jbad_Ind_Shed_01",
+ "Land_Jbad_Ind_Shed_02",
+ "Land_Jbad_Kamenny_most30",
+ "Land_Jbad_Lamp_small",
+ "Land_Jbad_Lamp_Street1",
+ "Land_Jbad_lampa_ind",
+ "Land_jbad_Misc_Cable",
+ "Land_jbad_Misc_Cable_Rugs1",
+ "Land_jbad_Misc_ConcBox",
+ "Land_jbad_Misc_ConcOutlet",
+ "Land_jbad_Misc_Rubble",
+ "Land_Jbad_Misc_Well_C",
+ "Land_Jbad_Misc_Well_L",
+ "Land_Jbad_most_stred30",
+ "Land_jbad_terrace",
+ "Land_jbad_Wall_L_2m5",
+ "Land_jbad_Wall_L_2m5_corner",
+ "Land_jbad_Wall_L_2m5_corner_dam",
+ "Land_jbad_Wall_L_2m5_dam",
+ "Land_jbad_Wall_L_2m5_gate",
+ "Land_jbad_Wall_L_2m5_gate_dam",
+ "Land_jbad_wall_l_5m",
+ "Land_jbad_wall_l_5m_dam",
+ "Land_jbad_wall_l_5m_damV2",
+ "Land_jbad_Wall_L_Mosque_1",
+ "Land_jbad_Wall_L_Mosque_1_dam",
+ "Land_jbad_Wall_L_Mosque_2",
+ "Land_jbad_Wall_L_Mosque_2_dam",
+ "Land_jbad_Wall_L1_2m5",
+ "Land_jbad_Wall_L1_2m5_dam",
+ "Land_jbad_Wall_L1_5m",
+ "Land_jbad_Wall_L1_5m_dam",
+ "Land_jbad_wall_l1_gate",
+ "Land_jbad_Wall_L1_Pillar",
+ "Land_jbad_Wall_L1_Pillar_dam",
+ "Land_jbad_Wall_L2_5m",
+ "Land_jbad_Wall_L2_5m_dam",
+ "Land_jbad_wall_L2_5m_End",
+ "Land_jbad_wall_l2_5m_End_dam",
+ "Land_jbad_Wall_L3_5m",
+ "Land_jbad_Wall_L3_5m_dam",
+ "Land_jbad_wall_l3_gate",
+ "Land_jbad_Wall_L3_Pillar",
+ "Land_KBud",
+ "Land_Kontejner",
+ "Land_Kontejner_papir",
+ "Land_Kontejner_plasty",
+ "Land_Kontejner_sklo",
+ "Land_Kostel_trosky",
+ "Land_Kulna",
+ "Land_ladder",
+ "Land_ladder_half",
+ "Land_Lamp_Small_EP1",
+ "Land_Lamp_Street1_EP1",
+ "Land_Lampa_cut",
+ "Land_Lampa_ind",
+ "Land_Lampa_ind_b",
+ "Land_Lampa_Ind_EP1",
+ "Land_Lampa_ind_zebr",
+ "Land_Lampa_sidl",
+ "Land_Lampa_sidl_2",
+ "Land_Lampa_sidl_3",
+ "Land_Lampa_vysoka",
+ "Land_LampAirport_F",
+ "Land_LampAirport_off_F",
+ "Land_LampDecor_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampIndustrial_01_F",
+ "Land_LampIndustrial_01_off_F",
+ "Land_LampIndustrial_02_F",
+ "Land_LampIndustrial_02_off_F",
+ "Land_LampShabby_F",
+ "Land_LampSolar_F",
+ "Land_LampStreet_02_amplion_F",
+ "Land_LampStreet_02_amplion_off_F",
+ "Land_LampStreet_02_double_F",
+ "Land_LampStreet_02_double_off_F",
+ "Land_LampStreet_02_F",
+ "Land_LampStreet_02_off_F",
+ "Land_LampStreet_02_triple_off_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_LandMark_F",
+ "Land_Leseni2x",
+ "Land_Leseni4x",
+ "Land_LifeguardTower_01_F",
+ "Land_lift",
+ "Land_loco_742_blue",
+ "Land_Majak_podesta",
+ "Land_Mausoleum_01_F",
+ "Land_MBG_ATC_Segment",
+ "Land_MBG_Beach_Chair_1",
+ "Land_MBG_Beach_Chair_2",
+ "Land_MBG_Cinderwall_2p5",
+ "Land_MBG_Cinderwall_5",
+ "Land_MBG_Cinderwall_5_Corner",
+ "Land_MBG_Cinderwall_5_Gate",
+ "Land_mbg_cinderwall_5_low",
+ "Land_MBG_Cinderwall_5_SteelDoor",
+ "Land_MBG_Cinderwall_5_WoodDoor",
+ "Land_MBG_Cinderwall_5dam",
+ "Land_MBG_Shoothouse_1",
+ "Land_Medevac_house_V1_F",
+ "Land_Medevac_HQ_V1_F",
+ "Land_Metal_Shed_F",
+ "Land_MetalShelter_01_F",
+ "Land_MetalShelter_02_F",
+ "Land_Mil_Barracks",
+ "Land_MilOffices_V1_F",
+ "Land_Misc_Cargo1A_EP1",
+ "Land_Misc_Cargo1Ao",
+ "Land_Misc_Cargo1Ao_EP1",
+ "Land_Misc_Cargo1B",
+ "Land_Misc_Cargo1B_EP1",
+ "Land_Misc_Cargo1Bo",
+ "Land_Misc_Cargo1Bo_EP1",
+ "Land_Misc_Cargo1C",
+ "Land_Misc_Cargo1C_EP1",
+ "Land_Misc_Cargo1D",
+ "Land_Misc_Cargo1D_EP1",
+ "Land_Misc_Cargo1E",
+ "Land_Misc_Cargo1E_EP1",
+ "Land_Misc_Cargo1F",
+ "Land_Misc_Cargo1G",
+ "Land_Misc_Cargo2B",
+ "Land_Misc_Cargo2B_EP1",
+ "Land_Misc_Cargo2C",
+ "Land_Misc_Cargo2C_EP1",
+ "Land_Misc_Cargo2D",
+ "Land_Misc_Cargo2E",
+ "Land_Misc_CargoMarket1a_EP1",
+ "Land_Misc_Coltan_Heap_EP1",
+ "Land_Misc_deerstand",
+ "Land_Misc_GContainer_Big",
+ "Land_Misc_Scaffolding",
+ "Land_Misc_Well_C_EP1",
+ "Land_Misc_Well_L_EP1",
+ "Land_MobileCrane_01_F",
+ "Land_MobileCrane_01_hook_F",
+ "Land_Molo_beton",
+ "Land_Molo_drevo_bs",
+ "Land_Molo_drevo_end",
+ "Land_Molo_krychle",
+ "Land_Molo_krychle2",
+ "Land_MXDorfschild",
+ "Land_Nabrezi",
+ "Land_Nabrezi_najezd",
+ "Land_Nasypka",
+ "Land_Nav_Boathouse_PierR",
+ "Land_Nav_Boathouse_PierT",
+ "land_nav_pier_c",
+ "land_nav_pier_c_270",
+ "land_nav_pier_c_90",
+ "land_nav_pier_c_big",
+ "land_nav_pier_C_L10",
+ "land_nav_pier_C_R10",
+ "land_nav_pier_C_R30",
+ "land_nav_pier_c_t15",
+ "land_nav_pier_c_t20",
+ "land_nav_pier_c2",
+ "land_nav_pier_c2_end",
+ "land_nav_pier_F_17",
+ "land_nav_pier_F_23",
+ "Land_nav_pier_m_2",
+ "land_nav_pier_m_end",
+ "Land_nav_pier_m_F",
+ "Land_NavigLight",
+ "Land_NavigLight_3_F",
+ "Land_NavigLight_3_short_F",
+ "Land_Obstacle_Climb_F",
+ "Land_pfeiler_025_025_300_clean_cnc",
+ "Land_pfeiler_025_025_300_cnc",
+ "Land_pfeiler_025_025_300_wood",
+ "Land_Pier_addon",
+ "Land_Pier_Box_F",
+ "Land_Pier_F",
+ "Land_Pier_small_F",
+ "Land_PierConcrete_01_4m_ladders_F",
+ "Land_PierLadder_F",
+ "Land_PierWooden_01_10m_noRails_F",
+ "Land_PierWooden_01_16m_F",
+ "Land_PierWooden_01_dock_F",
+ "Land_PierWooden_01_hut_F",
+ "Land_PierWooden_01_ladder_F",
+ "Land_PierWooden_01_platform_F",
+ "Land_PierWooden_02_16m_F",
+ "Land_PierWooden_02_30deg_F",
+ "Land_PierWooden_02_barrel_F",
+ "Land_PierWooden_02_hut_F",
+ "Land_PierWooden_02_ladder_F",
+ "Land_Plot_green_branka",
+ "Land_Plot_green_vrata",
+ "Land_Plot_istan1_rovny_gate",
+ "Land_Plot_rust_branka",
+ "Land_Plot_rust_vrata",
+ "Land_Plot_zboreny",
+ "Land_Plot_zed_drevo1_branka",
+ "Land_plp_ctm_PartitioningFenceGreyDoorOpen",
+ "Land_Podesta_1_cornl",
+ "Land_Podesta_1_cornp",
+ "Land_Podesta_1_cube",
+ "Land_Podesta_1_cube_long",
+ "Land_Podesta_1_mid",
+ "Land_Podesta_1_mid_cornl",
+ "Land_Podesta_1_mid_cornp",
+ "Land_Podesta_1_stairs",
+ "Land_Podesta_1_stairs2",
+ "Land_Podesta_1_stairs3",
+ "Land_Podesta_1_stairs4",
+ "Land_Podesta_10",
+ "Land_Podesta_5",
+ "Land_Podesta_s10",
+ "Land_Podesta_s5",
+ "Land_pool_water",
+ "Land_popelnice",
+ "Land_PortableLight_double_F",
+ "Land_PortableLight_single_F",
+ "Land_Posed",
+ "Land_Power_Pole_Wood1",
+ "Land_Power_Pole_Wood1_Amp",
+ "Land_Power_Pole_Wood1_Lamp",
+ "Land_Power_Pole_Wood1_Lamp_Amp",
+ "Land_Power_Pole_Wood3",
+ "Land_PowerLine_01_pole_end_v1_F",
+ "Land_PowerLine_01_pole_end_v2_F",
+ "Land_PowerLine_01_pole_junction_F",
+ "Land_PowerLine_01_pole_lamp_F",
+ "Land_PowerLine_01_pole_small_F",
+ "Land_PowerLine_01_pole_tall_F",
+ "Land_PowerLine_01_pole_transformer_F",
+ "Land_PowerLine_01_wire_50m_F",
+ "Land_PowerLine_01_wire_50m_main_F",
+ "Land_PowerLine_02_pole_junction_A_F",
+ "Land_powerline_02_pole_junction_nest_a_f",
+ "Land_PowerLine_02_pole_small_A_F",
+ "Land_PowerLine_02_pole_small_end_A_F",
+ "Land_PowerLine_02_pole_small_F",
+ "Land_powerline_02_pole_small_hook_end_f",
+ "Land_PowerLine_02_pole_small_hook_F",
+ "Land_powerline_02_pole_small_hook_junction_f",
+ "Land_PowerLine_03_pole_end_F",
+ "Land_PowerLine_03_pole_F",
+ "Land_PowerLine_03_pole_junction_F",
+ "Land_PowerPoleWooden_L_F",
+ "Land_PowerWireBig_direct_F",
+ "Land_PowerWireBig_end_F",
+ "Land_PowerWireBig_left_F",
+ "Land_PowerWireBig_right_F",
+ "Land_PowerWireSmall_direct_F",
+ "Land_PowLine_wire_A_left_EP1",
+ "Land_PowLine_wire_A_right_EP1",
+ "Land_PowLine_wire_AB_EP1",
+ "Land_PowLine_wire_BB_EP1",
+ "Land_PowLines_Conc2L_EP1",
+ "Land_PowLines_ConcL",
+ "Land_PowLines_WoodL",
+ "Land_Psi_bouda",
+ "Land_Pumpa",
+ "Land_QuayConcrete_01_5m_ladder_F",
+ "Land_R_HouseV_2L",
+ "Land_Radar_01_airshaft_F",
+ "Land_Rail_ConcreteRamp_F",
+ "Land_Rail_Crossing_Barrier_F",
+ "Land_Rail_Semafor",
+ "Land_Rail_Zavora",
+ "Land_Research_house_V1_F",
+ "Land_ReservoirTank_Rust_F",
+ "Land_ruin_01",
+ "Land_ruin_01_PMC",
+ "Land_ruin_chimney",
+ "Land_ruin_chimney_PMC",
+ "Land_Ruin_Cowshed_a_PMC",
+ "Land_Ruin_Cowshed_b_PMC",
+ "Land_Ruin_Cowshed_c_PMC",
+ "Land_ruin_rubble",
+ "Land_ruin_wall",
+ "Land_ruin_walldoor",
+ "Land_Ruiny_obvod_3",
+ "Land_runway_edgelight",
+ "Land_runway_edgelight_blue_F",
+ "Land_Sara_zluty_statek_in",
+ "Land_Sawmill_01_illuminati_tower_F",
+ "Land_SCF_01_heap_bagasse_F",
+ "Land_seno_balik",
+ "Land_Shed_03_F",
+ "Land_Shed_04_F",
+ "Land_Shed_06_F",
+ "Land_Shed_07_F",
+ "Land_Shed_10_F",
+ "Land_Shed_Big_F",
+ "Land_Shed_M01",
+ "Land_Shed_M01_EP1",
+ "Land_Shed_M02",
+ "Land_Shed_M03",
+ "Land_Shed_Small_F",
+ "Land_Shed_W01",
+ "Land_Shed_W02_EP1",
+ "Land_Shed_W03",
+ "Land_Shed_wooden",
+ "Land_ShellCrater_02_debris_F",
+ "Land_sign_altar",
+ "Land_sign_balota",
+ "Land_Sign_Bar_RU",
+ "Land_sign_berezino",
+ "Land_Sign_BES",
+ "Land_sign_chernogorsk",
+ "Land_sign_elektrozavodsk",
+ "Land_sign_kamenka",
+ "Land_sign_kamyshovo",
+ "Land_sign_komarovo",
+ "Land_sign_solnichnyi",
+ "Land_SignB_Gov",
+ "Land_SignB_GovPolice",
+ "Land_SignB_GovSchool",
+ "Land_SignB_GovSign",
+ "Land_SignB_Hotel_CZ",
+ "Land_SignB_Hotel_CZ2",
+ "Land_SignB_Hotel_CZ3",
+ "Land_SignB_Pharmacy",
+ "Land_SignB_PostOffice",
+ "Land_SignB_Pub_CZ1",
+ "Land_SignB_Pub_CZ2",
+ "Land_SignB_Pub_CZ3",
+ "Land_SignB_Pub_RU1",
+ "Land_SignB_Pub_RU2",
+ "Land_SignB_Pub_RU3",
+ "Land_SlideCastle_F",
+ "Land_sloup_vn",
+ "Land_sloup_vn_drat",
+ "Land_sloup_vn_drat_d",
+ "Land_sloup_vn_dratZ",
+ "Land_Slum_House01_F",
+ "Land_Slum_House02_F",
+ "Land_Slum_House03_F",
+ "Land_SM_01_shed_unfinished_F",
+ "Land_SM_01_shelter_narrow_F",
+ "Land_SM_01_shelter_wide_F",
+ "Land_spp_Mirror_F",
+ "land_statek_brana_open",
+ "Land_StoneWell_01_F",
+ "Land_Stoplight01",
+ "Land_Stoplight02",
+ "Land_SY_01_conveyor_end_F",
+ "Land_SY_01_reclaimer_F",
+ "Land_SY_01_shiploader_arm_F",
+ "Land_SY_01_shiploader_F",
+ "Land_t_light_r",
+ "Land_TACO_Lampa_sidl",
+ "Land_TACO_Lampa_sidl_2",
+ "Land_TACO_Lampa_sidl_3",
+ "Land_Tec",
+ "Land_teich_klein",
+ "Land_TelephoneLine_01_wire_50m_main_F",
+ "Land_TentHangar_V1_dam_F",
+ "Land_TentHangar_V1_F",
+ "Land_Terrace_K_1_EP1",
+ "Land_Track_01_bridge_F",
+ "Land_Trafostanica_mala",
+ "Land_Trafostanica_velka",
+ "Land_Trafostanica_velka_draty",
+ "Land_treppe_250_100_150_clean_cnc",
+ "Land_treppe_250_100_150_cnc",
+ "Land_treppe_250_100_150_wood",
+ "Land_TTowerBig_1_F",
+ "Land_TTowerBig_2_F",
+ "Land_TTowerSmall_1_F",
+ "Land_TTowerSmall_2_F",
+ "Land_ture_250_025_300_clean_cnc",
+ "Land_ture_250_025_300_cnc",
+ "Land_ture_250_025_300_wood",
+ "Land_u_Addon_01_V1_dam_F",
+ "Land_u_Addon_01_V1_F",
+ "Land_u_Shed_Ind_F",
+ "Land_Vez",
+ "Land_Vez_Pec",
+ "Land_Vysilac_FM",
+ "Land_Vysilac_FM2",
+ "Land_wagon_box",
+ "Land_Walkover_01_F",
+ "Land_Wall_CBrk_5_D",
+ "Land_Wall_CGry_5_D",
+ "Land_Wall_Gate_Ind1_L",
+ "Land_Wall_Gate_Ind1_R",
+ "Land_Wall_Gate_Ind2A_L",
+ "Land_Wall_Gate_Ind2A_R",
+ "Land_Wall_Gate_Ind2B_L",
+ "Land_Wall_Gate_Ind2B_R",
+ "Land_Wall_Gate_Ind2Rail_L",
+ "Land_Wall_Gate_Ind2Rail_R",
+ "Land_Wall_Gate_Kolchoz",
+ "Land_Wall_Gate_Village",
+ "Land_Wall_Gate_Wood1",
+ "Land_Wall_L_2m5_gate_EP1",
+ "Land_Wall_L_Mosque_1_EP1",
+ "Land_Wall_L_Mosque_2_EP1",
+ "Land_Wall_L1_gate_EP1",
+ "Land_Wall_L3_5m_EP1",
+ "Land_Wall_L3_gate_EP1",
+ "Land_Wall_L3_pillar_EP1",
+ "Land_wand_125_025_300_clean_cnc",
+ "Land_wand_125_025_300_cnc",
+ "Land_wand_125_025_300_wood",
+ "Land_wand_250_025_300_clean_cnc",
+ "Land_wand_250_025_300_cnc",
+ "Land_wand_250_025_300_wood",
+ "Land_wand_500_025_300_clean_cnc",
+ "Land_wand_500_025_300_cnc",
+ "Land_wand_500_025_300_wood",
+ "Land_Warehouse_01_ladder_F",
+ "Land_Warehouse_02_ladder_F",
+ "Land_WarehouseShelter_01_F",
+ "Land_water_tank",
+ "Land_WindmillPump_01_F",
+ "Land_WoodenShelter_01_F",
+ "Land_xCam_Build_00",
+ "Land_Zastavka_jih",
+ "Land_Zastavka_sever",
+ "Land_Zavora",
+ "Land_zavora_2",
+ "Land_Zavora_2_a1",
+ "Land_Zed_dira_civil",
+ "MetalBarrel_burning_F"
+];
diff --git a/Missionframework/scripts/server/civrep/ignored/altis.sqf b/Missionframework/scripts/server/civrep/ignored/altis.sqf
index 11e810246..33b696970 100644
--- a/Missionframework/scripts/server/civrep/ignored/altis.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/altis.sqf
@@ -1,61 +1,64 @@
KPLIB_cr_ign_buildings = [
- "Land_Cargo_House_V1_F",
- "Land_Cargo_House_V2_F",
- "Land_Cargo_House_V3_F",
- "Land_Cargo_HQ_V1_F",
- "Land_Cargo_Patrol_V1_F",
- "Land_Cargo_Tower_V1_F",
- "Land_Carousel_01_F",
- "Land_Communication_anchor_F",
- "Land_Crane_F",
- "Land_d_Addon_02_V1_F",
- "Land_d_House_Big_01_V1_F",
- "Land_d_House_Big_02_V1_F",
- "Land_d_House_Small_01_V1_F",
- "Land_d_House_Small_02_V1_F",
- "Land_d_Shop_01_V1_F",
- "Land_d_Shop_02_V1_F",
- "Land_d_Stone_HouseBig_V1_F",
- "Land_d_Stone_HouseSmall_V1_F",
- "Land_d_Stone_Shed_V1_F",
- "Land_d_Windmill01_F",
- "Land_Dome_Big_F",
- "Land_dp_transformer_F",
- "Land_Flush_Light_green_F",
- "Land_Flush_Light_yellow_F",
- "Land_fs_feed_F",
- "Land_fs_roof_F",
- "Land_HighVoltageColumn_F",
- "Land_HighVoltageColumnWire_F",
- "Land_HighVoltageEnd_F",
- "Land_HighVoltageTower_large_F",
- "Land_HighVoltageTower_largeCorner_F",
- "Land_IndPipe2_big_ground1_F",
- "Land_IndPipe2_big_ground2_F",
- "Land_IndPipe2_bigL_R_F",
- "Land_LampAirport_F",
- "Land_LampAirport_off_F",
- "Land_LampDecor_F",
- "Land_LampHalogen_F",
- "Land_LampHarbour_F",
- "Land_LampShabby_F",
- "Land_LampSolar_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_LifeguardTower_01_F",
- "Land_nav_pier_m_F",
- "Land_Pier_F",
- "Land_Pier_small_F",
- "Land_PierLadder_F",
- "Land_PowerPoleWooden_L_F",
- "Land_PowerWireBig_direct_F",
- "Land_PowerWireBig_left_F",
- "Land_PowerWireBig_right_F",
- "Land_Research_house_V1_F",
- "Land_runway_edgelight",
- "Land_runway_edgelight_blue_F",
- "Land_SlideCastle_F",
- "Land_spp_Mirror_F",
- "Land_TTowerSmall_1_F",
- "Land_TTowerSmall_2_F"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_Cargo_House_V1_F",
+ "Land_Cargo_House_V2_F",
+ "Land_Cargo_House_V3_F",
+ "Land_Cargo_HQ_V1_F",
+ "Land_Cargo_Patrol_V1_F",
+ "Land_Cargo_Tower_V1_F",
+ "Land_Carousel_01_F",
+ "Land_Communication_anchor_F",
+ "Land_Crane_F",
+ "Land_d_Addon_02_V1_F",
+ "Land_d_House_Big_01_V1_F",
+ "Land_d_House_Big_02_V1_F",
+ "Land_d_House_Small_01_V1_F",
+ "Land_d_House_Small_02_V1_F",
+ "Land_d_Shop_01_V1_F",
+ "Land_d_Shop_02_V1_F",
+ "Land_d_Stone_HouseBig_V1_F",
+ "Land_d_Stone_HouseSmall_V1_F",
+ "Land_d_Stone_Shed_V1_F",
+ "Land_d_Windmill01_F",
+ "Land_Dome_Big_F",
+ "Land_dp_transformer_F",
+ "Land_Flush_Light_green_F",
+ "Land_Flush_Light_yellow_F",
+ "Land_fs_feed_F",
+ "Land_fs_roof_F",
+ "Land_HighVoltageColumn_F",
+ "Land_HighVoltageColumnWire_F",
+ "Land_HighVoltageEnd_F",
+ "Land_HighVoltageTower_large_F",
+ "Land_HighVoltageTower_largeCorner_F",
+ "Land_IndPipe2_big_ground1_F",
+ "Land_IndPipe2_big_ground2_F",
+ "Land_IndPipe2_bigL_R_F",
+ "Land_LampAirport_F",
+ "Land_LampAirport_off_F",
+ "Land_LampDecor_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampShabby_F",
+ "Land_LampSolar_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_LifeguardTower_01_F",
+ "Land_nav_pier_m_F",
+ "Land_Pier_F",
+ "Land_Pier_small_F",
+ "Land_PierLadder_F",
+ "Land_PowerPoleWooden_L_F",
+ "Land_PowerWireBig_direct_F",
+ "Land_PowerWireBig_left_F",
+ "Land_PowerWireBig_right_F",
+ "Land_Research_house_V1_F",
+ "Land_runway_edgelight",
+ "Land_runway_edgelight_blue_F",
+ "Land_SlideCastle_F",
+ "Land_spp_Mirror_F",
+ "Land_TTowerSmall_1_F",
+ "Land_TTowerSmall_2_F"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/chernarus.sqf b/Missionframework/scripts/server/civrep/ignored/chernarus.sqf
index 8dd4baff0..11c952a04 100644
--- a/Missionframework/scripts/server/civrep/ignored/chernarus.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/chernarus.sqf
@@ -1,157 +1,160 @@
KPLIB_cr_ign_buildings = [
- "Land_A_Crane_02a",
- "Land_A_Crane_02b",
- "Land_A_FuelStation_Shed",
- "Land_BoatSmall_1",
- "Land_BoatSmall_2a",
- "Land_BoatSmall_2b",
- "Land_Brana02nodoor",
- "Land_Company3_2",
- "Land_D_Mlyn_Vys",
- "Land_D_Pec_Vez1",
- "Land_D_Pec_Vez2",
- "Land_D_Vez_Mlyn",
- "Land_Farm_WTower",
- "Land_Gate_Wood1_5",
- "Land_Gate_wood2_5",
- "Land_Ind_BoardsPack1",
- "Land_Ind_BoardsPack2",
- "Land_Ind_Expedice_1",
- "Land_Ind_Expedice_2",
- "Land_Ind_Expedice_3",
- "Land_Ind_IlluminantTower",
- "Land_Ind_Mlyn_01",
- "Land_Ind_Mlyn_02",
- "Land_Ind_Mlyn_03",
- "Land_Ind_Mlyn_04",
- "Land_Ind_Mlyn_D1",
- "Land_Ind_Mlyn_D2",
- "Land_Ind_SawMillPen",
- "Land_Ind_Shed_01_end",
- "Land_Ind_Shed_01_main",
- "Land_Ind_Shed_02_end",
- "Land_Ind_Shed_02_main",
- "Land_Ind_SiloVelke_most",
- "Land_Ind_TankSmall",
- "Land_Ind_TankSmall2",
- "Land_Ind_Timbers",
- "Land_IndPipe1_stair",
- "Land_IndPipe2_big_18",
- "Land_IndPipe2_big_18ladder",
- "Land_IndPipe2_big_9",
- "Land_IndPipe2_big_ground1",
- "Land_IndPipe2_big_ground2",
- "Land_IndPipe2_big_support",
- "Land_IndPipe2_bigBuild1_R",
- "Land_IndPipe2_bigBuild2_L",
- "Land_IndPipe2_bigL_L",
- "Land_IndPipe2_bigL_R",
- "Land_IndPipe2_Small_9",
- "Land_IndPipe2_Small_ground1",
- "Land_IndPipe2_Small_ground2",
- "Land_IndPipe2_SmallBuild1_R",
- "Land_IndPipe2_SmallBuild2_R",
- "Land_IndPipe2_SmallL_L",
- "Land_IndPipe2_SmallL_R",
- "Land_IndPipe2_T_L",
- "Land_IndPipe2_T_R",
- "Land_KBud",
- "Land_Kontejner",
- "Land_Lampa_ind",
- "Land_Lampa_ind_zebr",
- "Land_Lampa_sidl",
- "Land_Lampa_sidl_2",
- "Land_Lampa_sidl_3",
- "Land_loco_742_blue",
- "Land_Misc_Cargo1Ao",
- "Land_Misc_Cargo1B",
- "Land_Misc_Cargo1Bo",
- "Land_Misc_Cargo1C",
- "Land_Misc_Cargo1D",
- "Land_Misc_Cargo2B",
- "Land_Misc_Cargo2C",
- "Land_Misc_Cargo2D",
- "Land_Misc_Cargo2E",
- "Land_Misc_deerstand",
- "Land_Misc_GContainer_Big",
- "Land_Misc_Scaffolding",
- "Land_Molo_drevo_bs",
- "Land_Molo_drevo_end",
- "Land_Nasypka",
- "Land_Nav_Boathouse_PierT",
- "land_nav_pier_c",
- "land_nav_pier_c_270",
- "land_nav_pier_c_90",
- "land_nav_pier_c_big",
- "land_nav_pier_C_L10",
- "land_nav_pier_C_R10",
- "land_nav_pier_C_R30",
- "land_nav_pier_c_t15",
- "land_nav_pier_c_t20",
- "land_nav_pier_c2",
- "land_nav_pier_c2_end",
- "land_nav_pier_F_17",
- "land_nav_pier_F_23",
- "Land_nav_pier_m_2",
- "land_nav_pier_m_end",
- "Land_Plot_green_branka",
- "Land_Plot_green_vrata",
- "Land_Plot_rust_branka",
- "Land_Plot_rust_vrata",
- "Land_PowLines_ConcL",
- "Land_PowLines_WoodL",
- "Land_Psi_bouda",
- "Land_Pumpa",
- "Land_Rail_Semafor",
- "Land_Rail_Zavora",
- "Land_ruin_wall",
- "Land_seno_balik",
- "Land_Shed_M02",
- "Land_sign_altar",
- "Land_sign_balota",
- "Land_Sign_Bar_RU",
- "Land_sign_berezino",
- "Land_Sign_BES",
- "Land_sign_chernogorsk",
- "Land_sign_elektrozavodsk",
- "Land_sign_kamenka",
- "Land_sign_kamyshovo",
- "Land_sign_komarovo",
- "Land_sign_solnichnyi",
- "Land_SignB_Gov",
- "Land_SignB_GovPolice",
- "Land_SignB_GovSchool",
- "Land_SignB_GovSign",
- "Land_SignB_Hotel_CZ2",
- "Land_SignB_PostOffice",
- "Land_SignB_Pub_CZ1",
- "Land_SignB_Pub_CZ2",
- "Land_SignB_Pub_CZ3",
- "Land_SignB_Pub_RU1",
- "Land_SignB_Pub_RU2",
- "Land_SignB_Pub_RU3",
- "Land_sloup_vn",
- "Land_sloup_vn_drat",
- "Land_sloup_vn_drat_d",
- "Land_sloup_vn_dratZ",
- "Land_Stoplight02",
- "Land_Tec",
- "Land_Trafostanica_velka",
- "Land_Trafostanica_velka_draty",
- "Land_Vez",
- "Land_Vez_Pec",
- "Land_wagon_box",
- "Land_Wall_CBrk_5_D",
- "Land_Wall_CGry_5_D",
- "Land_Wall_Gate_Ind1_L",
- "Land_Wall_Gate_Ind1_R",
- "Land_Wall_Gate_Ind2A_L",
- "Land_Wall_Gate_Ind2A_R",
- "Land_Wall_Gate_Ind2B_L",
- "Land_Wall_Gate_Ind2B_R",
- "Land_Wall_Gate_Ind2Rail_L",
- "Land_Wall_Gate_Ind2Rail_R",
- "Land_Wall_Gate_Kolchoz",
- "Land_Wall_Gate_Village",
- "Land_Wall_Gate_Wood1"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_A_Crane_02a",
+ "Land_A_Crane_02b",
+ "Land_A_FuelStation_Shed",
+ "Land_BoatSmall_1",
+ "Land_BoatSmall_2a",
+ "Land_BoatSmall_2b",
+ "Land_Brana02nodoor",
+ "Land_Company3_2",
+ "Land_D_Mlyn_Vys",
+ "Land_D_Pec_Vez1",
+ "Land_D_Pec_Vez2",
+ "Land_D_Vez_Mlyn",
+ "Land_Farm_WTower",
+ "Land_Gate_Wood1_5",
+ "Land_Gate_wood2_5",
+ "Land_Ind_BoardsPack1",
+ "Land_Ind_BoardsPack2",
+ "Land_Ind_Expedice_1",
+ "Land_Ind_Expedice_2",
+ "Land_Ind_Expedice_3",
+ "Land_Ind_IlluminantTower",
+ "Land_Ind_Mlyn_01",
+ "Land_Ind_Mlyn_02",
+ "Land_Ind_Mlyn_03",
+ "Land_Ind_Mlyn_04",
+ "Land_Ind_Mlyn_D1",
+ "Land_Ind_Mlyn_D2",
+ "Land_Ind_SawMillPen",
+ "Land_Ind_Shed_01_end",
+ "Land_Ind_Shed_01_main",
+ "Land_Ind_Shed_02_end",
+ "Land_Ind_Shed_02_main",
+ "Land_Ind_SiloVelke_most",
+ "Land_Ind_TankSmall",
+ "Land_Ind_TankSmall2",
+ "Land_Ind_Timbers",
+ "Land_IndPipe1_stair",
+ "Land_IndPipe2_big_18",
+ "Land_IndPipe2_big_18ladder",
+ "Land_IndPipe2_big_9",
+ "Land_IndPipe2_big_ground1",
+ "Land_IndPipe2_big_ground2",
+ "Land_IndPipe2_big_support",
+ "Land_IndPipe2_bigBuild1_R",
+ "Land_IndPipe2_bigBuild2_L",
+ "Land_IndPipe2_bigL_L",
+ "Land_IndPipe2_bigL_R",
+ "Land_IndPipe2_Small_9",
+ "Land_IndPipe2_Small_ground1",
+ "Land_IndPipe2_Small_ground2",
+ "Land_IndPipe2_SmallBuild1_R",
+ "Land_IndPipe2_SmallBuild2_R",
+ "Land_IndPipe2_SmallL_L",
+ "Land_IndPipe2_SmallL_R",
+ "Land_IndPipe2_T_L",
+ "Land_IndPipe2_T_R",
+ "Land_KBud",
+ "Land_Kontejner",
+ "Land_Lampa_ind",
+ "Land_Lampa_ind_zebr",
+ "Land_Lampa_sidl",
+ "Land_Lampa_sidl_2",
+ "Land_Lampa_sidl_3",
+ "Land_loco_742_blue",
+ "Land_Misc_Cargo1Ao",
+ "Land_Misc_Cargo1B",
+ "Land_Misc_Cargo1Bo",
+ "Land_Misc_Cargo1C",
+ "Land_Misc_Cargo1D",
+ "Land_Misc_Cargo2B",
+ "Land_Misc_Cargo2C",
+ "Land_Misc_Cargo2D",
+ "Land_Misc_Cargo2E",
+ "Land_Misc_deerstand",
+ "Land_Misc_GContainer_Big",
+ "Land_Misc_Scaffolding",
+ "Land_Molo_drevo_bs",
+ "Land_Molo_drevo_end",
+ "Land_Nasypka",
+ "Land_Nav_Boathouse_PierT",
+ "land_nav_pier_c",
+ "land_nav_pier_c_270",
+ "land_nav_pier_c_90",
+ "land_nav_pier_c_big",
+ "land_nav_pier_C_L10",
+ "land_nav_pier_C_R10",
+ "land_nav_pier_C_R30",
+ "land_nav_pier_c_t15",
+ "land_nav_pier_c_t20",
+ "land_nav_pier_c2",
+ "land_nav_pier_c2_end",
+ "land_nav_pier_F_17",
+ "land_nav_pier_F_23",
+ "Land_nav_pier_m_2",
+ "land_nav_pier_m_end",
+ "Land_Plot_green_branka",
+ "Land_Plot_green_vrata",
+ "Land_Plot_rust_branka",
+ "Land_Plot_rust_vrata",
+ "Land_PowLines_ConcL",
+ "Land_PowLines_WoodL",
+ "Land_Psi_bouda",
+ "Land_Pumpa",
+ "Land_Rail_Semafor",
+ "Land_Rail_Zavora",
+ "Land_ruin_wall",
+ "Land_seno_balik",
+ "Land_Shed_M02",
+ "Land_sign_altar",
+ "Land_sign_balota",
+ "Land_Sign_Bar_RU",
+ "Land_sign_berezino",
+ "Land_Sign_BES",
+ "Land_sign_chernogorsk",
+ "Land_sign_elektrozavodsk",
+ "Land_sign_kamenka",
+ "Land_sign_kamyshovo",
+ "Land_sign_komarovo",
+ "Land_sign_solnichnyi",
+ "Land_SignB_Gov",
+ "Land_SignB_GovPolice",
+ "Land_SignB_GovSchool",
+ "Land_SignB_GovSign",
+ "Land_SignB_Hotel_CZ2",
+ "Land_SignB_PostOffice",
+ "Land_SignB_Pub_CZ1",
+ "Land_SignB_Pub_CZ2",
+ "Land_SignB_Pub_CZ3",
+ "Land_SignB_Pub_RU1",
+ "Land_SignB_Pub_RU2",
+ "Land_SignB_Pub_RU3",
+ "Land_sloup_vn",
+ "Land_sloup_vn_drat",
+ "Land_sloup_vn_drat_d",
+ "Land_sloup_vn_dratZ",
+ "Land_Stoplight02",
+ "Land_Tec",
+ "Land_Trafostanica_velka",
+ "Land_Trafostanica_velka_draty",
+ "Land_Vez",
+ "Land_Vez_Pec",
+ "Land_wagon_box",
+ "Land_Wall_CBrk_5_D",
+ "Land_Wall_CGry_5_D",
+ "Land_Wall_Gate_Ind1_L",
+ "Land_Wall_Gate_Ind1_R",
+ "Land_Wall_Gate_Ind2A_L",
+ "Land_Wall_Gate_Ind2A_R",
+ "Land_Wall_Gate_Ind2B_L",
+ "Land_Wall_Gate_Ind2B_R",
+ "Land_Wall_Gate_Ind2Rail_L",
+ "Land_Wall_Gate_Ind2Rail_R",
+ "Land_Wall_Gate_Kolchoz",
+ "Land_Wall_Gate_Village",
+ "Land_Wall_Gate_Wood1"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/chernarus2020.sqf b/Missionframework/scripts/server/civrep/ignored/chernarus2020.sqf
index ecd16b188..6ad186c6a 100644
--- a/Missionframework/scripts/server/civrep/ignored/chernarus2020.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/chernarus2020.sqf
@@ -1,4 +1,7 @@
KPLIB_cr_ign_buildings = [
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
"Land_A_Crane_02a",
"Land_popelnice",
"Land_fuel_tank_small",
diff --git a/Missionframework/scripts/server/civrep/ignored/enoch.sqf b/Missionframework/scripts/server/civrep/ignored/enoch.sqf
index 7fa61601b..278606a4d 100644
--- a/Missionframework/scripts/server/civrep/ignored/enoch.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/enoch.sqf
@@ -1,4 +1,7 @@
KPLIB_cr_ign_buildings = [
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
"Land_Bunker_02_double_F",
"Land_Bunker_02_left_F",
"Land_Bunker_02_light_double_F",
diff --git a/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_summer.sqf b/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_summer.sqf
index 2bff49b09..e48742182 100644
--- a/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_summer.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_summer.sqf
@@ -1,4 +1,7 @@
KPLIB_cr_ign_buildings = [
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
"land_gm_euro_beersign_01",
"land_gm_euro_beersign_02",
"land_gm_euro_beersign_03",
diff --git a/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_winter.sqf b/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_winter.sqf
index 2b2cb743f..f75657c35 100644
--- a/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_winter.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/gm_weferlingen_winter.sqf
@@ -1,4 +1,7 @@
KPLIB_cr_ign_buildings = [
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
"land_gm_euro_beersign_01",
"land_gm_euro_beersign_02",
"land_gm_euro_beersign_03",
diff --git a/Missionframework/scripts/server/civrep/ignored/lythium.sqf b/Missionframework/scripts/server/civrep/ignored/lythium.sqf
index 85f6ae7e6..9445eddc2 100644
--- a/Missionframework/scripts/server/civrep/ignored/lythium.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/lythium.sqf
@@ -1,100 +1,103 @@
KPLIB_cr_ign_buildings = [
- "Land_Cargo_House_V1_F",
- "Land_Cargo_House_V2_F",
- "Land_Cargo_House_V3_F",
- "Land_Cargo_HQ_V1_F",
- "Land_Cargo_HQ_V3_F",
- "Land_Cargo_Patrol_V1_F",
- "Land_Cargo_Patrol_V3_F",
- "Land_Carousel_01_F",
- "Land_cmp_Shed_dam_F",
- "Land_Communication_F",
- "Land_Crane_F",
- "Land_Factory_Conv1_10_F",
- "Land_Factory_Conv2_F",
- "Land_ffaa_casa_caseta_peq",
- "Land_fs_feed_F",
- "Land_FuelStation_Feed_F",
- "Land_FuelStation_Shed_F",
- "Land_IndPipe2_big_ground1_F",
- "Land_Jbad_Cargo1_int",
- "Land_Jbad_Cargo2_int",
- "Land_Jbad_Cargo3_int",
- "Land_Jbad_Cargo4_int",
- "Land_Jbad_Cargo5_int",
- "Land_Jbad_Cargo6_int",
- "Land_Jbad_Cargo7_int",
- "Land_jbad_Com_tower",
- "Land_Jbad_Ind_Coltan_Conv1_10",
- "Land_Jbad_Ind_Coltan_Conv1_Main",
- "Land_Jbad_Ind_Coltan_Main",
- "Land_Jbad_Ind_Conveyer",
- "Land_Jbad_Ind_FuelStation_Feed",
- "Land_Jbad_Ind_FuelStation_Shed",
- "Land_Jbad_Ind_FuelStation_Sign",
- "Land_Jbad_Ind_Shed_01",
- "Land_Jbad_Ind_Shed_02",
- "Land_Jbad_Kamenny_most30",
- "Land_Jbad_Lamp_small",
- "Land_Jbad_Lamp_Street1",
- "Land_Jbad_lampa_ind",
- "Land_jbad_Misc_Cable",
- "Land_jbad_Misc_Cable_Rugs1",
- "Land_jbad_Misc_ConcBox",
- "Land_jbad_Misc_ConcOutlet",
- "Land_jbad_Misc_Rubble",
- "Land_Jbad_Misc_Well_C",
- "Land_Jbad_Misc_Well_L",
- "Land_Jbad_most_stred30",
- "Land_jbad_terrace",
- "Land_jbad_Wall_L_2m5",
- "Land_jbad_Wall_L_2m5_corner",
- "Land_jbad_Wall_L_2m5_corner_dam",
- "Land_jbad_Wall_L_2m5_dam",
- "Land_jbad_Wall_L_2m5_gate",
- "Land_jbad_Wall_L_2m5_gate_dam",
- "Land_jbad_wall_l_5m",
- "Land_jbad_wall_l_5m_dam",
- "Land_jbad_wall_l_5m_damV2",
- "Land_jbad_Wall_L_Mosque_1",
- "Land_jbad_Wall_L_Mosque_1_dam",
- "Land_jbad_Wall_L_Mosque_2",
- "Land_jbad_Wall_L_Mosque_2_dam",
- "Land_jbad_Wall_L1_2m5",
- "Land_jbad_Wall_L1_2m5_dam",
- "Land_jbad_Wall_L1_5m",
- "Land_jbad_Wall_L1_5m_dam",
- "Land_jbad_wall_l1_gate",
- "Land_jbad_Wall_L1_Pillar",
- "Land_jbad_Wall_L1_Pillar_dam",
- "Land_jbad_Wall_L2_5m",
- "Land_jbad_Wall_L2_5m_dam",
- "Land_jbad_wall_L2_5m_End",
- "Land_jbad_wall_l2_5m_End_dam",
- "Land_jbad_Wall_L3_5m",
- "Land_jbad_Wall_L3_5m_dam",
- "Land_jbad_wall_l3_gate",
- "Land_jbad_Wall_L3_Pillar",
- "Land_LampAirport_F",
- "Land_LampHalogen_F",
- "Land_LampHarbour_F",
- "Land_LampShabby_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_LandMark_F",
- "Land_Medevac_house_V1_F",
- "Land_Medevac_HQ_V1_F",
- "Land_NavigLight",
- "Land_Pier_F",
- "Land_Pier_small_F",
- "Land_Research_house_V1_F",
- "Land_runway_edgelight",
- "Land_runway_edgelight_blue_F",
- "Land_spp_Mirror_F",
- "Land_TentHangar_V1_dam_F",
- "Land_TentHangar_V1_F",
- "Land_TTowerBig_2_F",
- "Land_TTowerSmall_1_F",
- "Land_TTowerSmall_2_F",
- "Land_u_Addon_01_V1_dam_F"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_Cargo_House_V1_F",
+ "Land_Cargo_House_V2_F",
+ "Land_Cargo_House_V3_F",
+ "Land_Cargo_HQ_V1_F",
+ "Land_Cargo_HQ_V3_F",
+ "Land_Cargo_Patrol_V1_F",
+ "Land_Cargo_Patrol_V3_F",
+ "Land_Carousel_01_F",
+ "Land_cmp_Shed_dam_F",
+ "Land_Communication_F",
+ "Land_Crane_F",
+ "Land_Factory_Conv1_10_F",
+ "Land_Factory_Conv2_F",
+ "Land_ffaa_casa_caseta_peq",
+ "Land_fs_feed_F",
+ "Land_FuelStation_Feed_F",
+ "Land_FuelStation_Shed_F",
+ "Land_IndPipe2_big_ground1_F",
+ "Land_Jbad_Cargo1_int",
+ "Land_Jbad_Cargo2_int",
+ "Land_Jbad_Cargo3_int",
+ "Land_Jbad_Cargo4_int",
+ "Land_Jbad_Cargo5_int",
+ "Land_Jbad_Cargo6_int",
+ "Land_Jbad_Cargo7_int",
+ "Land_jbad_Com_tower",
+ "Land_Jbad_Ind_Coltan_Conv1_10",
+ "Land_Jbad_Ind_Coltan_Conv1_Main",
+ "Land_Jbad_Ind_Coltan_Main",
+ "Land_Jbad_Ind_Conveyer",
+ "Land_Jbad_Ind_FuelStation_Feed",
+ "Land_Jbad_Ind_FuelStation_Shed",
+ "Land_Jbad_Ind_FuelStation_Sign",
+ "Land_Jbad_Ind_Shed_01",
+ "Land_Jbad_Ind_Shed_02",
+ "Land_Jbad_Kamenny_most30",
+ "Land_Jbad_Lamp_small",
+ "Land_Jbad_Lamp_Street1",
+ "Land_Jbad_lampa_ind",
+ "Land_jbad_Misc_Cable",
+ "Land_jbad_Misc_Cable_Rugs1",
+ "Land_jbad_Misc_ConcBox",
+ "Land_jbad_Misc_ConcOutlet",
+ "Land_jbad_Misc_Rubble",
+ "Land_Jbad_Misc_Well_C",
+ "Land_Jbad_Misc_Well_L",
+ "Land_Jbad_most_stred30",
+ "Land_jbad_terrace",
+ "Land_jbad_Wall_L_2m5",
+ "Land_jbad_Wall_L_2m5_corner",
+ "Land_jbad_Wall_L_2m5_corner_dam",
+ "Land_jbad_Wall_L_2m5_dam",
+ "Land_jbad_Wall_L_2m5_gate",
+ "Land_jbad_Wall_L_2m5_gate_dam",
+ "Land_jbad_wall_l_5m",
+ "Land_jbad_wall_l_5m_dam",
+ "Land_jbad_wall_l_5m_damV2",
+ "Land_jbad_Wall_L_Mosque_1",
+ "Land_jbad_Wall_L_Mosque_1_dam",
+ "Land_jbad_Wall_L_Mosque_2",
+ "Land_jbad_Wall_L_Mosque_2_dam",
+ "Land_jbad_Wall_L1_2m5",
+ "Land_jbad_Wall_L1_2m5_dam",
+ "Land_jbad_Wall_L1_5m",
+ "Land_jbad_Wall_L1_5m_dam",
+ "Land_jbad_wall_l1_gate",
+ "Land_jbad_Wall_L1_Pillar",
+ "Land_jbad_Wall_L1_Pillar_dam",
+ "Land_jbad_Wall_L2_5m",
+ "Land_jbad_Wall_L2_5m_dam",
+ "Land_jbad_wall_L2_5m_End",
+ "Land_jbad_wall_l2_5m_End_dam",
+ "Land_jbad_Wall_L3_5m",
+ "Land_jbad_Wall_L3_5m_dam",
+ "Land_jbad_wall_l3_gate",
+ "Land_jbad_Wall_L3_Pillar",
+ "Land_LampAirport_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampShabby_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_LandMark_F",
+ "Land_Medevac_house_V1_F",
+ "Land_Medevac_HQ_V1_F",
+ "Land_NavigLight",
+ "Land_Pier_F",
+ "Land_Pier_small_F",
+ "Land_Research_house_V1_F",
+ "Land_runway_edgelight",
+ "Land_runway_edgelight_blue_F",
+ "Land_spp_Mirror_F",
+ "Land_TentHangar_V1_dam_F",
+ "Land_TentHangar_V1_F",
+ "Land_TTowerBig_2_F",
+ "Land_TTowerSmall_1_F",
+ "Land_TTowerSmall_2_F",
+ "Land_u_Addon_01_V1_dam_F"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/malden.sqf b/Missionframework/scripts/server/civrep/ignored/malden.sqf
index 4bd4c4d94..21ffcab84 100644
--- a/Missionframework/scripts/server/civrep/ignored/malden.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/malden.sqf
@@ -1,61 +1,64 @@
KPLIB_cr_ign_buildings = [
- "Land_Bunker_01_big_F",
- "Land_Bunker_01_small_F",
- "Land_cargo_addon02_V1_F",
- "Land_Cargo_House_V4_F",
- "Land_Cargo_Patrol_V4_F",
- "Land_Cargo_Tower_V4_F",
- "Land_Carousel_01_F",
- "Land_Communication_F",
- "Land_d_House_Big_01_V1_F",
- "Land_d_House_Big_02_V1_F",
- "Land_d_House_Small_01_V1_F",
- "Land_d_House_Small_02_V1_F",
- "Land_d_Stone_HouseBig_V1_F",
- "Land_d_Stone_HouseSmall_V1_F",
- "Land_d_Stone_Shed_V1_F",
- "Land_Flush_Light_green_F",
- "Land_Flush_Light_red_F",
- "Land_Flush_Light_yellow_F",
- "Land_fs_feed_F",
- "Land_fs_roof_F",
- "Land_FuelStation_01_pump_malevil_F",
- "Land_FuelStation_01_roof_malevil_F",
- "Land_FuelStation_Feed_F",
- "Land_IndPipe2_big_18ladder_F",
- "Land_IndPipe2_big_ground1_F",
- "Land_IndPipe2_big_ground2_F",
- "Land_IndPipe2_bigL_L_F",
- "Land_IndPipe2_bigL_R_F",
- "Land_LampAirport_F",
- "Land_LampHalogen_F",
- "Land_LampHarbour_F",
- "Land_LampShabby_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_MetalShelter_01_F",
- "Land_MetalShelter_02_F",
- "Land_nav_pier_m_F",
- "Land_NavigLight",
- "Land_NavigLight_3_F",
- "Land_Pier_addon",
- "Land_Pier_Box_F",
- "Land_Pier_F",
- "Land_Pier_small_F",
- "Land_PierLadder_F",
- "Land_PortableLight_single_F",
- "Land_PowerLine_01_pole_junction_F",
- "Land_PowerLine_01_pole_small_F",
- "Land_PowerLine_01_pole_tall_F",
- "Land_PowerLine_01_pole_transformer_F",
- "Land_PowerLine_01_wire_50m_F",
- "Land_PowerLine_01_wire_50m_main_F",
- "Land_runway_edgelight",
- "Land_runway_edgelight_blue_F",
- "Land_SlideCastle_F",
- "Land_SM_01_shelter_wide_F",
- "Land_TentHangar_V1_F",
- "Land_TTowerSmall_1_F",
- "Land_TTowerSmall_2_F",
- "MetalBarrel_burning_F"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_Bunker_01_big_F",
+ "Land_Bunker_01_small_F",
+ "Land_cargo_addon02_V1_F",
+ "Land_Cargo_House_V4_F",
+ "Land_Cargo_Patrol_V4_F",
+ "Land_Cargo_Tower_V4_F",
+ "Land_Carousel_01_F",
+ "Land_Communication_F",
+ "Land_d_House_Big_01_V1_F",
+ "Land_d_House_Big_02_V1_F",
+ "Land_d_House_Small_01_V1_F",
+ "Land_d_House_Small_02_V1_F",
+ "Land_d_Stone_HouseBig_V1_F",
+ "Land_d_Stone_HouseSmall_V1_F",
+ "Land_d_Stone_Shed_V1_F",
+ "Land_Flush_Light_green_F",
+ "Land_Flush_Light_red_F",
+ "Land_Flush_Light_yellow_F",
+ "Land_fs_feed_F",
+ "Land_fs_roof_F",
+ "Land_FuelStation_01_pump_malevil_F",
+ "Land_FuelStation_01_roof_malevil_F",
+ "Land_FuelStation_Feed_F",
+ "Land_IndPipe2_big_18ladder_F",
+ "Land_IndPipe2_big_ground1_F",
+ "Land_IndPipe2_big_ground2_F",
+ "Land_IndPipe2_bigL_L_F",
+ "Land_IndPipe2_bigL_R_F",
+ "Land_LampAirport_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampShabby_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_MetalShelter_01_F",
+ "Land_MetalShelter_02_F",
+ "Land_nav_pier_m_F",
+ "Land_NavigLight",
+ "Land_NavigLight_3_F",
+ "Land_Pier_addon",
+ "Land_Pier_Box_F",
+ "Land_Pier_F",
+ "Land_Pier_small_F",
+ "Land_PierLadder_F",
+ "Land_PortableLight_single_F",
+ "Land_PowerLine_01_pole_junction_F",
+ "Land_PowerLine_01_pole_small_F",
+ "Land_PowerLine_01_pole_tall_F",
+ "Land_PowerLine_01_pole_transformer_F",
+ "Land_PowerLine_01_wire_50m_F",
+ "Land_PowerLine_01_wire_50m_main_F",
+ "Land_runway_edgelight",
+ "Land_runway_edgelight_blue_F",
+ "Land_SlideCastle_F",
+ "Land_SM_01_shelter_wide_F",
+ "Land_TentHangar_V1_F",
+ "Land_TTowerSmall_1_F",
+ "Land_TTowerSmall_2_F",
+ "MetalBarrel_burning_F"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/panthera3.sqf b/Missionframework/scripts/server/civrep/ignored/panthera3.sqf
index 3ca6d4386..0c348270c 100644
--- a/Missionframework/scripts/server/civrep/ignored/panthera3.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/panthera3.sqf
@@ -1,4 +1,7 @@
KPLIB_cr_ign_buildings = [
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
"Land_AfDum_mesto2",
"Land_AfDum_mesto2L",
"Land_AfDum_mesto3",
diff --git a/Missionframework/scripts/server/civrep/ignored/pja310.sqf b/Missionframework/scripts/server/civrep/ignored/pja310.sqf
index 206e2a529..f2f2ba86c 100644
--- a/Missionframework/scripts/server/civrep/ignored/pja310.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/pja310.sqf
@@ -1,81 +1,84 @@
KPLIB_cr_ign_buildings = [
- "Land_A_Castle_Bastion",
- "Land_A_Crane_02a",
- "Land_A_Crane_02b",
- "Land_A_CraneCon",
- "Land_BoatSmall_1",
- "Land_BoatSmall_2a",
- "Land_BoatSmall_2b",
- "Land_Brana02nodoor",
- "Land_Communication_F",
- "Land_Farm_WTower",
- "Land_Ind_BoardsPack1",
- "Land_Ind_BoardsPack2",
- "Land_Ind_Expedice_3",
- "Land_Ind_FuelStation_Feed_EP1",
- "Land_Ind_FuelStation_Shed_EP1",
- "Land_Ind_IlluminantTower",
- "Land_Ind_SawMillPen",
- "Land_Ind_Shed_01_end",
- "Land_Ind_Shed_01_main",
- "Land_Ind_Shed_02_end",
- "Land_Ind_Shed_02_EP1",
- "Land_Ind_Shed_02_main",
- "Land_Ind_Timbers",
- "Land_IndPipe1_stair",
- "Land_IndPipe2_Small_9",
- "Land_IndPipe2_Small_ground2",
- "Land_KBud",
- "Land_Kontejner",
- "Land_Lamp_Small_EP1",
- "Land_Lamp_Street1_EP1",
- "Land_Lampa_ind",
- "Land_Lampa_Ind_EP1",
- "Land_LampShabby_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_loco_742_blue",
- "Land_Majak_podesta",
- "Land_Misc_Cargo1Ao_EP1",
- "Land_Misc_Cargo1B",
- "Land_Misc_Cargo1B_EP1",
- "Land_Misc_Cargo1Bo_EP1",
- "Land_Misc_Cargo1C",
- "Land_Misc_Cargo1C_EP1",
- "Land_Misc_Cargo1D",
- "Land_Misc_Cargo1D_EP1",
- "Land_Misc_Cargo2B",
- "Land_Misc_Cargo2B_EP1",
- "Land_Misc_Cargo2C",
- "Land_Misc_Cargo2C_EP1",
- "Land_Misc_Cargo2D",
- "Land_Misc_Cargo2E",
- "Land_Misc_Scaffolding",
- "Land_Misc_Well_C_EP1",
- "Land_Misc_Well_L_EP1",
- "Land_Nav_Boathouse_PierR",
- "Land_Nav_Boathouse_PierT",
- "land_nav_pier_c",
- "land_nav_pier_c_270",
- "land_nav_pier_c_90",
- "land_nav_pier_C_L10",
- "land_nav_pier_C_R30",
- "land_nav_pier_c_t20",
- "land_nav_pier_c2_end",
- "land_nav_pier_F_23",
- "Land_PowLines_Conc2L_EP1",
- "land_statek_brana_open",
- "Land_Terrace_K_1_EP1",
- "Land_Trafostanica_mala",
- "Land_Trafostanica_velka",
- "Land_Vez",
- "Land_Vysilac_FM",
- "Land_Wall_L_2m5_gate_EP1",
- "Land_Wall_L_Mosque_1_EP1",
- "Land_Wall_L_Mosque_2_EP1",
- "Land_Wall_L1_gate_EP1",
- "Land_Wall_L3_5m_EP1",
- "Land_Wall_L3_gate_EP1",
- "Land_Wall_L3_pillar_EP1",
- "Land_water_tank"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_A_Castle_Bastion",
+ "Land_A_Crane_02a",
+ "Land_A_Crane_02b",
+ "Land_A_CraneCon",
+ "Land_BoatSmall_1",
+ "Land_BoatSmall_2a",
+ "Land_BoatSmall_2b",
+ "Land_Brana02nodoor",
+ "Land_Communication_F",
+ "Land_Farm_WTower",
+ "Land_Ind_BoardsPack1",
+ "Land_Ind_BoardsPack2",
+ "Land_Ind_Expedice_3",
+ "Land_Ind_FuelStation_Feed_EP1",
+ "Land_Ind_FuelStation_Shed_EP1",
+ "Land_Ind_IlluminantTower",
+ "Land_Ind_SawMillPen",
+ "Land_Ind_Shed_01_end",
+ "Land_Ind_Shed_01_main",
+ "Land_Ind_Shed_02_end",
+ "Land_Ind_Shed_02_EP1",
+ "Land_Ind_Shed_02_main",
+ "Land_Ind_Timbers",
+ "Land_IndPipe1_stair",
+ "Land_IndPipe2_Small_9",
+ "Land_IndPipe2_Small_ground2",
+ "Land_KBud",
+ "Land_Kontejner",
+ "Land_Lamp_Small_EP1",
+ "Land_Lamp_Street1_EP1",
+ "Land_Lampa_ind",
+ "Land_Lampa_Ind_EP1",
+ "Land_LampShabby_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_loco_742_blue",
+ "Land_Majak_podesta",
+ "Land_Misc_Cargo1Ao_EP1",
+ "Land_Misc_Cargo1B",
+ "Land_Misc_Cargo1B_EP1",
+ "Land_Misc_Cargo1Bo_EP1",
+ "Land_Misc_Cargo1C",
+ "Land_Misc_Cargo1C_EP1",
+ "Land_Misc_Cargo1D",
+ "Land_Misc_Cargo1D_EP1",
+ "Land_Misc_Cargo2B",
+ "Land_Misc_Cargo2B_EP1",
+ "Land_Misc_Cargo2C",
+ "Land_Misc_Cargo2C_EP1",
+ "Land_Misc_Cargo2D",
+ "Land_Misc_Cargo2E",
+ "Land_Misc_Scaffolding",
+ "Land_Misc_Well_C_EP1",
+ "Land_Misc_Well_L_EP1",
+ "Land_Nav_Boathouse_PierR",
+ "Land_Nav_Boathouse_PierT",
+ "land_nav_pier_c",
+ "land_nav_pier_c_270",
+ "land_nav_pier_c_90",
+ "land_nav_pier_C_L10",
+ "land_nav_pier_C_R30",
+ "land_nav_pier_c_t20",
+ "land_nav_pier_c2_end",
+ "land_nav_pier_F_23",
+ "Land_PowLines_Conc2L_EP1",
+ "land_statek_brana_open",
+ "Land_Terrace_K_1_EP1",
+ "Land_Trafostanica_mala",
+ "Land_Trafostanica_velka",
+ "Land_Vez",
+ "Land_Vysilac_FM",
+ "Land_Wall_L_2m5_gate_EP1",
+ "Land_Wall_L_Mosque_1_EP1",
+ "Land_Wall_L_Mosque_2_EP1",
+ "Land_Wall_L1_gate_EP1",
+ "Land_Wall_L3_5m_EP1",
+ "Land_Wall_L3_gate_EP1",
+ "Land_Wall_L3_pillar_EP1",
+ "Land_water_tank"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/sara.sqf b/Missionframework/scripts/server/civrep/ignored/sara.sqf
index ef7de6701..ec7819c27 100644
--- a/Missionframework/scripts/server/civrep/ignored/sara.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/sara.sqf
@@ -1,85 +1,88 @@
KPLIB_cr_ign_buildings = [
- "Land_AfDum_mesto2",
- "Land_AfDum_mesto2L",
- "Land_AfDum_mesto3",
- "Land_bouda_plech",
- "Land_Brana02nodoor",
- "Land_Dulni_bs",
- "Land_Dum_zboreny",
- "Land_Dum_zboreny_total",
- "Land_Helfenburk_budova2",
- "Land_Helfenburk_cimburi",
- "Land_Helfenburk_zed",
- "Land_Hlaska",
- "Land_Hut03",
- "Land_KBud",
- "Land_Kontejner",
- "Land_Kontejner_papir",
- "Land_Kontejner_plasty",
- "Land_Kontejner_sklo",
- "Land_Kostel_trosky",
- "Land_ladder",
- "Land_ladder_half",
- "Land_Lampa_ind",
- "Land_Lampa_ind_b",
- "Land_Lampa_ind_zebr",
- "Land_Lampa_sidl",
- "Land_Lampa_sidl_2",
- "Land_Lampa_sidl_3",
- "Land_Lampa_vysoka",
- "Land_Leseni2x",
- "Land_Leseni4x",
- "Land_Majak_podesta",
- "Land_Molo_beton",
- "Land_Molo_drevo_bs",
- "Land_Molo_drevo_end",
- "Land_Molo_krychle",
- "Land_Molo_krychle2",
- "Land_Nabrezi",
- "Land_Nabrezi_najezd",
- "Land_Nasypka",
- "Land_Plot_green_branka",
- "Land_Plot_green_vrata",
- "Land_Plot_istan1_rovny_gate",
- "Land_Plot_rust_branka",
- "Land_Plot_rust_vrata",
- "Land_Plot_zboreny",
- "Land_Plot_zed_drevo1_branka",
- "Land_Podesta_1_cornl",
- "Land_Podesta_1_cornp",
- "Land_Podesta_1_cube",
- "Land_Podesta_1_cube_long",
- "Land_Podesta_1_mid",
- "Land_Podesta_1_mid_cornl",
- "Land_Podesta_1_mid_cornp",
- "Land_Podesta_1_stairs",
- "Land_Podesta_1_stairs2",
- "Land_Podesta_1_stairs3",
- "Land_Podesta_1_stairs4",
- "Land_Podesta_10",
- "Land_Podesta_5",
- "Land_Podesta_s10",
- "Land_Podesta_s5",
- "Land_Posed",
- "Land_Psi_bouda",
- "Land_Pumpa",
- "Land_seno_balik",
- "Land_sloup_vn",
- "Land_sloup_vn_drat",
- "Land_sloup_vn_dratZ",
- "land_statek_brana_open",
- "Land_Stoplight01",
- "Land_Stoplight02",
- "Land_Trafostanica_mala",
- "Land_Trafostanica_velka",
- "Land_Trafostanica_velka_draty",
- "Land_Vez",
- "Land_Vysilac_FM",
- "Land_Vysilac_FM2",
- "Land_water_tank",
- "Land_Zastavka_jih",
- "Land_Zastavka_sever",
- "Land_Zavora",
- "Land_Zavora_2_a1",
- "Land_Zed_dira_civil"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_AfDum_mesto2",
+ "Land_AfDum_mesto2L",
+ "Land_AfDum_mesto3",
+ "Land_bouda_plech",
+ "Land_Brana02nodoor",
+ "Land_Dulni_bs",
+ "Land_Dum_zboreny",
+ "Land_Dum_zboreny_total",
+ "Land_Helfenburk_budova2",
+ "Land_Helfenburk_cimburi",
+ "Land_Helfenburk_zed",
+ "Land_Hlaska",
+ "Land_Hut03",
+ "Land_KBud",
+ "Land_Kontejner",
+ "Land_Kontejner_papir",
+ "Land_Kontejner_plasty",
+ "Land_Kontejner_sklo",
+ "Land_Kostel_trosky",
+ "Land_ladder",
+ "Land_ladder_half",
+ "Land_Lampa_ind",
+ "Land_Lampa_ind_b",
+ "Land_Lampa_ind_zebr",
+ "Land_Lampa_sidl",
+ "Land_Lampa_sidl_2",
+ "Land_Lampa_sidl_3",
+ "Land_Lampa_vysoka",
+ "Land_Leseni2x",
+ "Land_Leseni4x",
+ "Land_Majak_podesta",
+ "Land_Molo_beton",
+ "Land_Molo_drevo_bs",
+ "Land_Molo_drevo_end",
+ "Land_Molo_krychle",
+ "Land_Molo_krychle2",
+ "Land_Nabrezi",
+ "Land_Nabrezi_najezd",
+ "Land_Nasypka",
+ "Land_Plot_green_branka",
+ "Land_Plot_green_vrata",
+ "Land_Plot_istan1_rovny_gate",
+ "Land_Plot_rust_branka",
+ "Land_Plot_rust_vrata",
+ "Land_Plot_zboreny",
+ "Land_Plot_zed_drevo1_branka",
+ "Land_Podesta_1_cornl",
+ "Land_Podesta_1_cornp",
+ "Land_Podesta_1_cube",
+ "Land_Podesta_1_cube_long",
+ "Land_Podesta_1_mid",
+ "Land_Podesta_1_mid_cornl",
+ "Land_Podesta_1_mid_cornp",
+ "Land_Podesta_1_stairs",
+ "Land_Podesta_1_stairs2",
+ "Land_Podesta_1_stairs3",
+ "Land_Podesta_1_stairs4",
+ "Land_Podesta_10",
+ "Land_Podesta_5",
+ "Land_Podesta_s10",
+ "Land_Podesta_s5",
+ "Land_Posed",
+ "Land_Psi_bouda",
+ "Land_Pumpa",
+ "Land_seno_balik",
+ "Land_sloup_vn",
+ "Land_sloup_vn_drat",
+ "Land_sloup_vn_dratZ",
+ "land_statek_brana_open",
+ "Land_Stoplight01",
+ "Land_Stoplight02",
+ "Land_Trafostanica_mala",
+ "Land_Trafostanica_velka",
+ "Land_Trafostanica_velka_draty",
+ "Land_Vez",
+ "Land_Vysilac_FM",
+ "Land_Vysilac_FM2",
+ "Land_water_tank",
+ "Land_Zastavka_jih",
+ "Land_Zastavka_sever",
+ "Land_Zavora",
+ "Land_Zavora_2_a1",
+ "Land_Zed_dira_civil"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/song_bin_tanh.sqf b/Missionframework/scripts/server/civrep/ignored/song_bin_tanh.sqf
index aa3014146..7da501984 100644
--- a/Missionframework/scripts/server/civrep/ignored/song_bin_tanh.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/song_bin_tanh.sqf
@@ -1,4 +1,7 @@
KPLIB_cr_ign_buildings = [
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
"Land_Communication_F",
"LAND_fort2",
"Land_fortified_nest_big_ep1",
diff --git a/Missionframework/scripts/server/civrep/ignored/takistan.sqf b/Missionframework/scripts/server/civrep/ignored/takistan.sqf
index cc95765d6..d2f33dbcc 100644
--- a/Missionframework/scripts/server/civrep/ignored/takistan.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/takistan.sqf
@@ -1,36 +1,39 @@
KPLIB_cr_ign_buildings = [
- "Land_BoatSmall_1",
- "Land_BoatSmall_2a",
- "Land_BoatSmall_2b",
- "Land_Fort_Watchtower_EP1",
- "Land_fortified_nest_big_EP1",
- "Land_fortified_nest_small_EP1",
- "Land_Ind_FuelStation_Feed_EP1",
- "Land_Ind_FuelStation_Shed_EP1",
- "Land_Ind_Shed_02_EP1",
- "Land_Lamp_Small_EP1",
- "Land_Lamp_Street1_EP1",
- "Land_Lampa_Ind_EP1",
- "Land_Misc_Cargo1B_EP1",
- "Land_Misc_Cargo1Bo_EP1",
- "Land_Misc_Cargo1C_EP1",
- "Land_Misc_Cargo2B_EP1",
- "Land_Misc_Cargo2C_EP1",
- "Land_Misc_Well_C_EP1",
- "Land_Misc_Well_L_EP1",
- "Land_Nav_Boathouse_PierR",
- "Land_PowLine_wire_A_left_EP1",
- "Land_PowLine_wire_A_right_EP1",
- "Land_PowLine_wire_AB_EP1",
- "Land_PowLine_wire_BB_EP1",
- "Land_PowLines_Conc2L_EP1",
- "Land_Terrace_K_1_EP1",
- "Land_Vez",
- "Land_Wall_L_2m5_gate_EP1",
- "Land_Wall_L_Mosque_1_EP1",
- "Land_Wall_L_Mosque_2_EP1",
- "Land_Wall_L1_gate_EP1",
- "Land_Wall_L3_5m_EP1",
- "Land_Wall_L3_gate_EP1",
- "Land_Wall_L3_pillar_EP1"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_BoatSmall_1",
+ "Land_BoatSmall_2a",
+ "Land_BoatSmall_2b",
+ "Land_Fort_Watchtower_EP1",
+ "Land_fortified_nest_big_EP1",
+ "Land_fortified_nest_small_EP1",
+ "Land_Ind_FuelStation_Feed_EP1",
+ "Land_Ind_FuelStation_Shed_EP1",
+ "Land_Ind_Shed_02_EP1",
+ "Land_Lamp_Small_EP1",
+ "Land_Lamp_Street1_EP1",
+ "Land_Lampa_Ind_EP1",
+ "Land_Misc_Cargo1B_EP1",
+ "Land_Misc_Cargo1Bo_EP1",
+ "Land_Misc_Cargo1C_EP1",
+ "Land_Misc_Cargo2B_EP1",
+ "Land_Misc_Cargo2C_EP1",
+ "Land_Misc_Well_C_EP1",
+ "Land_Misc_Well_L_EP1",
+ "Land_Nav_Boathouse_PierR",
+ "Land_PowLine_wire_A_left_EP1",
+ "Land_PowLine_wire_A_right_EP1",
+ "Land_PowLine_wire_AB_EP1",
+ "Land_PowLine_wire_BB_EP1",
+ "Land_PowLines_Conc2L_EP1",
+ "Land_Terrace_K_1_EP1",
+ "Land_Vez",
+ "Land_Wall_L_2m5_gate_EP1",
+ "Land_Wall_L_Mosque_1_EP1",
+ "Land_Wall_L_Mosque_2_EP1",
+ "Land_Wall_L1_gate_EP1",
+ "Land_Wall_L3_5m_EP1",
+ "Land_Wall_L3_gate_EP1",
+ "Land_Wall_L3_pillar_EP1"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/tanoa.sqf b/Missionframework/scripts/server/civrep/ignored/tanoa.sqf
index adb5687ab..406df2a6b 100644
--- a/Missionframework/scripts/server/civrep/ignored/tanoa.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/tanoa.sqf
@@ -1,74 +1,77 @@
KPLIB_cr_ign_buildings = [
- "Land_Cargo_House_V4_F",
- "Land_Cargo_Patrol_V4_F",
- "Land_Cargo_Tower_V4_F",
- "Land_Communication_F",
- "Land_ContainerLine_01_F",
- "Land_ContainerLine_02_F",
- "Land_ContainerLine_03_F",
- "Land_DPP_01_waterCooler_F",
- "Land_DPP_01_waterCooler_ladder_F",
- "Land_FireEscape_01_short_F",
- "Land_FireEscape_01_tall_F",
- "Land_Flush_Light_green_F",
- "Land_Flush_Light_red_F",
- "Land_Flush_Light_yellow_F",
- "Land_FuelStation_01_pump_F",
- "Land_FuelStation_02_pump_F",
- "Land_FuelStation_02_roof_F",
- "Land_GantryCrane_01_F",
- "Land_LampDecor_F",
- "Land_LampHalogen_F",
- "Land_LampHarbour_F",
- "Land_LampShabby_F",
- "Land_LampSolar_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_MetalShelter_01_F",
- "Land_MetalShelter_02_F",
- "Land_MobileCrane_01_F",
- "Land_MobileCrane_01_hook_F",
- "Land_NavigLight_3_F",
- "Land_NavigLight_3_short_F",
- "Land_PierConcrete_01_4m_ladders_F",
- "Land_PierWooden_01_10m_noRails_F",
- "Land_PierWooden_01_16m_F",
- "Land_PierWooden_01_dock_F",
- "Land_PierWooden_01_hut_F",
- "Land_PierWooden_01_ladder_F",
- "Land_PierWooden_01_platform_F",
- "Land_PierWooden_02_16m_F",
- "Land_PierWooden_02_30deg_F",
- "Land_PierWooden_02_barrel_F",
- "Land_PierWooden_02_hut_F",
- "Land_PierWooden_02_ladder_F",
- "Land_PortableLight_single_F",
- "Land_PowerLine_01_pole_end_v1_F",
- "Land_PowerLine_01_pole_end_v2_F",
- "Land_PowerLine_01_pole_junction_F",
- "Land_PowerLine_01_pole_lamp_F",
- "Land_PowerLine_01_pole_small_F",
- "Land_PowerLine_01_pole_tall_F",
- "Land_PowerLine_01_pole_transformer_F",
- "Land_PowerLine_01_wire_50m_F",
- "Land_PowerLine_01_wire_50m_main_F",
- "Land_QuayConcrete_01_5m_ladder_F",
- "Land_runway_edgelight",
- "Land_runway_edgelight_blue_F",
- "Land_Shed_06_F",
- "Land_SM_01_shelter_narrow_F",
- "Land_SM_01_shelter_wide_F",
- "Land_SY_01_conveyor_end_F",
- "Land_SY_01_reclaimer_F",
- "Land_SY_01_shiploader_arm_F",
- "Land_SY_01_shiploader_F",
- "Land_Track_01_bridge_F",
- "Land_TTowerBig_1_F",
- "Land_TTowerBig_2_F",
- "Land_TTowerSmall_1_F",
- "Land_Walkover_01_F",
- "Land_Warehouse_01_ladder_F",
- "Land_Warehouse_02_ladder_F",
- "Land_WarehouseShelter_01_F",
- "Land_WoodenShelter_01_F"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_Cargo_House_V4_F",
+ "Land_Cargo_Patrol_V4_F",
+ "Land_Cargo_Tower_V4_F",
+ "Land_Communication_F",
+ "Land_ContainerLine_01_F",
+ "Land_ContainerLine_02_F",
+ "Land_ContainerLine_03_F",
+ "Land_DPP_01_waterCooler_F",
+ "Land_DPP_01_waterCooler_ladder_F",
+ "Land_FireEscape_01_short_F",
+ "Land_FireEscape_01_tall_F",
+ "Land_Flush_Light_green_F",
+ "Land_Flush_Light_red_F",
+ "Land_Flush_Light_yellow_F",
+ "Land_FuelStation_01_pump_F",
+ "Land_FuelStation_02_pump_F",
+ "Land_FuelStation_02_roof_F",
+ "Land_GantryCrane_01_F",
+ "Land_LampDecor_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampShabby_F",
+ "Land_LampSolar_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_MetalShelter_01_F",
+ "Land_MetalShelter_02_F",
+ "Land_MobileCrane_01_F",
+ "Land_MobileCrane_01_hook_F",
+ "Land_NavigLight_3_F",
+ "Land_NavigLight_3_short_F",
+ "Land_PierConcrete_01_4m_ladders_F",
+ "Land_PierWooden_01_10m_noRails_F",
+ "Land_PierWooden_01_16m_F",
+ "Land_PierWooden_01_dock_F",
+ "Land_PierWooden_01_hut_F",
+ "Land_PierWooden_01_ladder_F",
+ "Land_PierWooden_01_platform_F",
+ "Land_PierWooden_02_16m_F",
+ "Land_PierWooden_02_30deg_F",
+ "Land_PierWooden_02_barrel_F",
+ "Land_PierWooden_02_hut_F",
+ "Land_PierWooden_02_ladder_F",
+ "Land_PortableLight_single_F",
+ "Land_PowerLine_01_pole_end_v1_F",
+ "Land_PowerLine_01_pole_end_v2_F",
+ "Land_PowerLine_01_pole_junction_F",
+ "Land_PowerLine_01_pole_lamp_F",
+ "Land_PowerLine_01_pole_small_F",
+ "Land_PowerLine_01_pole_tall_F",
+ "Land_PowerLine_01_pole_transformer_F",
+ "Land_PowerLine_01_wire_50m_F",
+ "Land_PowerLine_01_wire_50m_main_F",
+ "Land_QuayConcrete_01_5m_ladder_F",
+ "Land_runway_edgelight",
+ "Land_runway_edgelight_blue_F",
+ "Land_Shed_06_F",
+ "Land_SM_01_shelter_narrow_F",
+ "Land_SM_01_shelter_wide_F",
+ "Land_SY_01_conveyor_end_F",
+ "Land_SY_01_reclaimer_F",
+ "Land_SY_01_shiploader_arm_F",
+ "Land_SY_01_shiploader_F",
+ "Land_Track_01_bridge_F",
+ "Land_TTowerBig_1_F",
+ "Land_TTowerBig_2_F",
+ "Land_TTowerSmall_1_F",
+ "Land_Walkover_01_F",
+ "Land_Warehouse_01_ladder_F",
+ "Land_Warehouse_02_ladder_F",
+ "Land_WarehouseShelter_01_F",
+ "Land_WoodenShelter_01_F"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/wl_rosche.sqf b/Missionframework/scripts/server/civrep/ignored/wl_rosche.sqf
index db1d331f2..1a4adc678 100644
--- a/Missionframework/scripts/server/civrep/ignored/wl_rosche.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/wl_rosche.sqf
@@ -1,155 +1,158 @@
KPLIB_cr_ign_buildings = [
- "Land_Barn_W_01_dam",
- "Land_Barracks_01_grey_F",
- "Land_BellTower_01_V1_F",
- "Land_BoatSmall_1",
- "Land_BoatSmall_2a",
- "Land_BoatSmall_2b",
- "Land_cargo_house_slum_F",
- "Land_cmp_Shed_F",
- "Land_cmp_Tower_F",
- "Land_CncShelter_F",
- "Land_Communication_F",
- "Land_Dirthump01",
- "Land_dp_smallTank_F",
- "Land_DPP_01_waterCooler_ladder_F",
- "Land_Dulni_bs",
- "Land_FireEscape_01_short_F",
- "Land_FuelStation_01_pump_F",
- "Land_FuelStation_02_pump_F",
- "Land_FuelStation_Build_PMC",
- "Land_Gate_IndVar2_5",
- "Land_Gate_Wood1_5",
- "Land_Gate_wood2_5",
- "Land_GuardHouse_01_F",
- "Land_hag_bridge_rail",
- "Land_Hag_Garage",
- "Land_hopper_old_PMC",
- "Land_Hut06",
- "Land_i_Addon_03_V1_F",
- "Land_i_Addon_03mid_V1_F",
- "Land_i_Addon_04_V1_F",
- "Land_i_Barracks_V2_F",
- "Land_i_Garage_V1_F",
- "Land_i_Garage_V2_F",
- "Land_Ind_BoardsPack1",
- "Land_Ind_BoardsPack2",
- "Land_Ind_MalyKomin",
- "Land_Ind_SawMillPen",
- "Land_Ind_Shed_01_EP1",
- "Land_Ind_Shed_01_main",
- "Land_Ind_Shed_02_end",
- "Land_Ind_Shed_02_EP1",
- "Land_Ind_Shed_02_main",
- "Land_Ind_TankSmall",
- "Land_Ind_TankSmall2",
- "Land_Ind_Timbers",
- "Land_Ind_Vysypka",
- "Land_Ind_Workshop01_box",
- "Land_KBud",
- "Land_Kontejner",
- "Land_Kulna",
- "Land_LampDecor_F",
- "Land_LampHalogen_F",
- "Land_LampHarbour_F",
- "Land_LampShabby_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_Leseni2x",
- "Land_Leseni4x",
- "Land_Mausoleum_01_F",
- "Land_MBG_ATC_Segment",
- "Land_MBG_Beach_Chair_1",
- "Land_MBG_Beach_Chair_2",
- "Land_Metal_Shed_F",
- "Land_MetalShelter_01_F",
- "Land_MetalShelter_02_F",
- "Land_Mil_Barracks",
- "Land_MilOffices_V1_F",
- "Land_Misc_Cargo1Ao",
- "Land_Misc_Cargo1B",
- "Land_Misc_Cargo1Bo",
- "Land_Misc_Cargo1C",
- "Land_Misc_Cargo1E",
- "Land_Misc_Cargo1F",
- "Land_Misc_deerstand",
- "Land_Misc_GContainer_Big",
- "Land_Misc_Scaffolding",
- "Land_Misc_Well_C_EP1",
- "Land_Molo_krychle",
- "Land_Nasypka",
- "Land_PierLadder_F",
- "Land_PierWooden_01_10m_noRails_F",
- "Land_PierWooden_01_ladder_F",
- "Land_PierWooden_01_platform_F",
- "Land_PierWooden_02_16m_F",
- "Land_PierWooden_02_ladder_F",
- "Land_Plot_green_branka",
- "Land_Plot_green_vrata",
- "Land_Plot_istan1_rovny_gate",
- "Land_Plot_rust_branka",
- "Land_Plot_rust_vrata",
- "Land_Plot_zed_drevo1_branka",
- "Land_popelnice",
- "Land_PortableLight_double_F",
- "Land_PortableLight_single_F",
- "Land_Posed",
- "Land_Psi_bouda",
- "Land_pumpa",
- "Land_Rail_Zavora",
- "Land_ReservoirTank_Rust_F",
- "Land_ruin_01",
- "Land_ruin_01_PMC",
- "Land_ruin_chimney",
- "Land_ruin_chimney_PMC",
- "Land_ruin_rubble",
- "Land_ruin_wall",
- "Land_ruin_walldoor",
- "Land_Sara_zluty_statek_in",
- "Land_SCF_01_heap_bagasse_F",
- "Land_seno_balik",
- "Land_Shed_03_F",
- "Land_Shed_04_F",
- "Land_Shed_06_F",
- "Land_Shed_07_F",
- "Land_Shed_Big_F",
- "Land_Shed_M01",
- "Land_Shed_M01_EP1",
- "Land_Shed_M02",
- "Land_Shed_M03",
- "Land_Shed_Small_F",
- "Land_Shed_W01",
- "Land_Shed_W02_EP1",
- "Land_Shed_W03",
- "Land_Shed_wooden",
- "Land_SignB_Hotel_CZ2",
- "Land_SignB_Hotel_CZ3",
- "Land_SignB_Pharmacy",
- "Land_Slum_House01_F",
- "Land_Slum_House02_F",
- "Land_Slum_House03_F",
- "Land_SM_01_shed_unfinished_F",
- "Land_SM_01_shelter_narrow_F",
- "Land_SM_01_shelter_wide_F",
- "Land_TTowerBig_2_F",
- "Land_u_Addon_01_V1_dam_F",
- "Land_u_Addon_01_V1_F",
- "Land_u_Shed_Ind_F",
- "Land_Walkover_01_F",
- "Land_Wall_CBrk_5_D",
- "Land_Wall_CGry_5_D",
- "Land_Wall_Gate_Ind1_L",
- "Land_Wall_Gate_Ind1_R",
- "Land_Wall_Gate_Ind2A_L",
- "Land_Wall_Gate_Ind2A_R",
- "Land_Wall_Gate_Ind2B_L",
- "Land_Wall_Gate_Ind2B_R",
- "Land_Wall_Gate_Ind2Rail_L",
- "Land_Wall_Gate_Ind2Rail_R",
- "Land_Wall_Gate_Village",
- "Land_Wall_Gate_Wood1",
- "Land_Warehouse_01_ladder_F",
- "Land_WindmillPump_01_F",
- "Land_WoodenShelter_01_F",
- "Land_zavora_2"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_Barn_W_01_dam",
+ "Land_Barracks_01_grey_F",
+ "Land_BellTower_01_V1_F",
+ "Land_BoatSmall_1",
+ "Land_BoatSmall_2a",
+ "Land_BoatSmall_2b",
+ "Land_cargo_house_slum_F",
+ "Land_cmp_Shed_F",
+ "Land_cmp_Tower_F",
+ "Land_CncShelter_F",
+ "Land_Communication_F",
+ "Land_Dirthump01",
+ "Land_dp_smallTank_F",
+ "Land_DPP_01_waterCooler_ladder_F",
+ "Land_Dulni_bs",
+ "Land_FireEscape_01_short_F",
+ "Land_FuelStation_01_pump_F",
+ "Land_FuelStation_02_pump_F",
+ "Land_FuelStation_Build_PMC",
+ "Land_Gate_IndVar2_5",
+ "Land_Gate_Wood1_5",
+ "Land_Gate_wood2_5",
+ "Land_GuardHouse_01_F",
+ "Land_hag_bridge_rail",
+ "Land_Hag_Garage",
+ "Land_hopper_old_PMC",
+ "Land_Hut06",
+ "Land_i_Addon_03_V1_F",
+ "Land_i_Addon_03mid_V1_F",
+ "Land_i_Addon_04_V1_F",
+ "Land_i_Barracks_V2_F",
+ "Land_i_Garage_V1_F",
+ "Land_i_Garage_V2_F",
+ "Land_Ind_BoardsPack1",
+ "Land_Ind_BoardsPack2",
+ "Land_Ind_MalyKomin",
+ "Land_Ind_SawMillPen",
+ "Land_Ind_Shed_01_EP1",
+ "Land_Ind_Shed_01_main",
+ "Land_Ind_Shed_02_end",
+ "Land_Ind_Shed_02_EP1",
+ "Land_Ind_Shed_02_main",
+ "Land_Ind_TankSmall",
+ "Land_Ind_TankSmall2",
+ "Land_Ind_Timbers",
+ "Land_Ind_Vysypka",
+ "Land_Ind_Workshop01_box",
+ "Land_KBud",
+ "Land_Kontejner",
+ "Land_Kulna",
+ "Land_LampDecor_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampShabby_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_Leseni2x",
+ "Land_Leseni4x",
+ "Land_Mausoleum_01_F",
+ "Land_MBG_ATC_Segment",
+ "Land_MBG_Beach_Chair_1",
+ "Land_MBG_Beach_Chair_2",
+ "Land_Metal_Shed_F",
+ "Land_MetalShelter_01_F",
+ "Land_MetalShelter_02_F",
+ "Land_Mil_Barracks",
+ "Land_MilOffices_V1_F",
+ "Land_Misc_Cargo1Ao",
+ "Land_Misc_Cargo1B",
+ "Land_Misc_Cargo1Bo",
+ "Land_Misc_Cargo1C",
+ "Land_Misc_Cargo1E",
+ "Land_Misc_Cargo1F",
+ "Land_Misc_deerstand",
+ "Land_Misc_GContainer_Big",
+ "Land_Misc_Scaffolding",
+ "Land_Misc_Well_C_EP1",
+ "Land_Molo_krychle",
+ "Land_Nasypka",
+ "Land_PierLadder_F",
+ "Land_PierWooden_01_10m_noRails_F",
+ "Land_PierWooden_01_ladder_F",
+ "Land_PierWooden_01_platform_F",
+ "Land_PierWooden_02_16m_F",
+ "Land_PierWooden_02_ladder_F",
+ "Land_Plot_green_branka",
+ "Land_Plot_green_vrata",
+ "Land_Plot_istan1_rovny_gate",
+ "Land_Plot_rust_branka",
+ "Land_Plot_rust_vrata",
+ "Land_Plot_zed_drevo1_branka",
+ "Land_popelnice",
+ "Land_PortableLight_double_F",
+ "Land_PortableLight_single_F",
+ "Land_Posed",
+ "Land_Psi_bouda",
+ "Land_pumpa",
+ "Land_Rail_Zavora",
+ "Land_ReservoirTank_Rust_F",
+ "Land_ruin_01",
+ "Land_ruin_01_PMC",
+ "Land_ruin_chimney",
+ "Land_ruin_chimney_PMC",
+ "Land_ruin_rubble",
+ "Land_ruin_wall",
+ "Land_ruin_walldoor",
+ "Land_Sara_zluty_statek_in",
+ "Land_SCF_01_heap_bagasse_F",
+ "Land_seno_balik",
+ "Land_Shed_03_F",
+ "Land_Shed_04_F",
+ "Land_Shed_06_F",
+ "Land_Shed_07_F",
+ "Land_Shed_Big_F",
+ "Land_Shed_M01",
+ "Land_Shed_M01_EP1",
+ "Land_Shed_M02",
+ "Land_Shed_M03",
+ "Land_Shed_Small_F",
+ "Land_Shed_W01",
+ "Land_Shed_W02_EP1",
+ "Land_Shed_W03",
+ "Land_Shed_wooden",
+ "Land_SignB_Hotel_CZ2",
+ "Land_SignB_Hotel_CZ3",
+ "Land_SignB_Pharmacy",
+ "Land_Slum_House01_F",
+ "Land_Slum_House02_F",
+ "Land_Slum_House03_F",
+ "Land_SM_01_shed_unfinished_F",
+ "Land_SM_01_shelter_narrow_F",
+ "Land_SM_01_shelter_wide_F",
+ "Land_TTowerBig_2_F",
+ "Land_u_Addon_01_V1_dam_F",
+ "Land_u_Addon_01_V1_F",
+ "Land_u_Shed_Ind_F",
+ "Land_Walkover_01_F",
+ "Land_Wall_CBrk_5_D",
+ "Land_Wall_CGry_5_D",
+ "Land_Wall_Gate_Ind1_L",
+ "Land_Wall_Gate_Ind1_R",
+ "Land_Wall_Gate_Ind2A_L",
+ "Land_Wall_Gate_Ind2A_R",
+ "Land_Wall_Gate_Ind2B_L",
+ "Land_Wall_Gate_Ind2B_R",
+ "Land_Wall_Gate_Ind2Rail_L",
+ "Land_Wall_Gate_Ind2Rail_R",
+ "Land_Wall_Gate_Village",
+ "Land_Wall_Gate_Wood1",
+ "Land_Warehouse_01_ladder_F",
+ "Land_WindmillPump_01_F",
+ "Land_WoodenShelter_01_F",
+ "Land_zavora_2"
];
diff --git a/Missionframework/scripts/server/civrep/ignored/xcam_taunus.sqf b/Missionframework/scripts/server/civrep/ignored/xcam_taunus.sqf
index 37d1b594d..dd6ffa84c 100644
--- a/Missionframework/scripts/server/civrep/ignored/xcam_taunus.sqf
+++ b/Missionframework/scripts/server/civrep/ignored/xcam_taunus.sqf
@@ -1,278 +1,281 @@
KPLIB_cr_ign_buildings = [
- "Land_A_Castle_Bastion",
- "Land_A_Castle_Gate",
- "Land_A_Castle_Stairs_A",
- "Land_A_Castle_Wall1_20",
- "Land_A_Castle_Wall1_Corner",
- "Land_A_Castle_Wall1_Corner_2",
- "Land_A_Castle_Wall1_End",
- "Land_A_Castle_Wall1_End_2",
- "Land_A_Castle_Wall2_Corner_2",
- "Land_A_Castle_WallS_5_D",
- "Land_A_Castle_WallS_End",
- "Land_balken_125_025_025_clean_cnc",
- "Land_balken_125_025_025_cnc",
- "Land_balken_250_025_025_clean_cnc",
- "Land_balken_250_025_025_cnc",
- "Land_balken_250_025_025_wood",
- "Land_balken_500_025_025_clean_cnc",
- "Land_balken_500_025_025_cnc",
- "Land_balken_500_025_025_wood",
- "Land_boden_125_125_025_clean_cnc",
- "Land_boden_125_125_025_cnc",
- "Land_boden_125_125_025_wood",
- "Land_boden_250_250_025_clean_cnc",
- "Land_boden_250_250_025_cnc",
- "Land_boden_250_250_025_wood",
- "Land_boden_500_500_025_clean_cnc",
- "Land_boden_500_500_025_cnc",
- "Land_boden_500_500_025_wood",
- "Land_bouda_plech",
- "Land_Brana02",
- "Land_Brana02nodoor",
- "Land_Cargo_Patrol_V1_F",
- "Land_Carousel_01_F",
- "Land_Climbing_Obstacle",
- "Land_Communication_F",
- "Land_Crane_F",
- "Land_d_Addon_02_V1_F",
- "Land_d_House_Big_01_V1_F",
- "Land_d_House_Big_02_V1_F",
- "Land_d_Stone_HouseSmall_V1_F",
- "Land_d_Stone_Shed_V1_F",
- "Land_deox_BarrierGateOpenable",
- "Land_deox_carport_a1",
- "Land_deox_carport_a2",
- "Land_deox_fachwerkA1",
- "Land_deox_fachwerkB1",
- "Land_deox_fachwerkC2",
- "Land_deox_fachwerkD2",
- "Land_deox_fachwerkE1",
- "Land_deox_fachwerkE1B",
- "Land_deox_fachwerkE1O",
- "Land_deox_fachwerkS1",
- "Land_deox_fachwerkS1_offen",
- "Land_deox_fachwerkS1Giebel",
- "Land_deox_fachwerkSO1",
- "Land_deox_fachwerkSO1_offen",
- "Land_deox_fence_B1",
- "Land_deox_fence_B2",
- "Land_deox_fence_B3",
- "Land_deox_fence_C1",
- "Land_deox_fence_C1s",
- "Land_deox_fwh_dach",
- "Land_deox_fwh_dach2",
- "Land_deox_fwh_dach3",
- "Land_deox_fwhE1",
- "Land_deox_fwhf1",
- "Land_deox_gate_A1",
- "Land_deox_gate_B1",
- "Land_deox_gate_B2",
- "Land_deox_gate_B2door",
- "Land_deox_gate_B3",
- "Land_deox_gate_B3door",
- "Land_deox_gate_B5",
- "Land_deox_gate_c1",
- "Land_deox_House_D_medium3_4",
- "Land_deox_rampe_a1",
- "Land_deox_rampe_c1",
- "Land_deox_rampe_d1",
- "Land_deox_rampe_d3",
- "Land_deox_tuer1",
- "Land_deox_unterbau1a",
- "Land_deox_unterbau1b",
- "Land_deox_unterbau1c",
- "Land_deox_unterbau2a",
- "Land_deox_unterbau2b",
- "Land_deox_wall01",
- "Land_deox_wall01s",
- "Land_deox_wall02",
- "Land_deox_wall02s",
- "Land_deox_wall06",
- "Land_Dirthump01",
- "Land_Dirthump01_EP1",
- "Land_Dirthump02",
- "Land_Dirthump02_EP1",
- "Land_Dirthump03",
- "Land_Dirthump03_EP1",
- "Land_ecke_075_025_300_clean_cnc",
- "Land_ecke_075_025_300_wood",
- "Land_Factory_Conv1_10_F",
- "Land_Factory_Conv1_Main_F",
- "Land_Farm_WTower",
- "Land_fenster_250_025_300_clean_cnc",
- "Land_fenster_250_025_300_cnc",
- "Land_fenster_250_025_300_wood",
- "Land_Gate_IndVar2_5",
- "Land_Gate_Wood1_5",
- "Land_Gate_wood2_5",
- "Land_glass_125_0025_125",
- "Land_glass_125_0025_300",
- "Land_glass_250_0025_300",
- "Land_glass_500_0025_300",
- "Land_glass_platte_500_500_0025",
- "Land_Grave_dirt_F",
- "Land_Grave_forest_F",
- "Land_Grave_rocks_F",
- "Land_HighVoltageTower_F",
- "Land_Hut03",
- "Land_i_House_Small_02_V2_dam_F",
- "Land_i_House_Small_02_V3_dam_F",
- "Land_i_Stone_Shed_V1_dam_F",
- "Land_i_Stone_Shed_V2_dam_F",
- "Land_Ind_BoardsPack1",
- "Land_Ind_BoardsPack2",
- "Land_Ind_Expedice_1",
- "Land_Ind_Expedice_3",
- "Land_Ind_Mlyn_03",
- "Land_Ind_SawMillPen",
- "Land_Ind_Shed_01_end",
- "Land_Ind_Shed_01_EP1",
- "Land_Ind_Shed_01_main",
- "Land_Ind_Shed_02_end",
- "Land_Ind_Shed_02_EP1",
- "Land_Ind_Shed_02_main",
- "Land_Ind_TankSmall",
- "Land_Ind_TankSmall2",
- "Land_Ind_TankSmall2_EP1",
- "Land_Ind_Timbers",
- "Land_Kontejner",
- "Land_Kontejner_papir",
- "Land_Kontejner_plasty",
- "Land_Kontejner_sklo",
- "Land_Kostel_trosky",
- "Land_ladder",
- "Land_Lampa_cut",
- "Land_Lampa_Ind_EP1",
- "Land_LampDecor_F",
- "Land_LampHalogen_F",
- "Land_LampHarbour_F",
- "Land_LampShabby_F",
- "Land_LampStreet_F",
- "Land_LampStreet_small_F",
- "Land_Leseni2x",
- "Land_Leseni4x",
- "Land_LifeguardTower_01_F",
- "Land_lift",
- "Land_Majak_podesta",
- "Land_MBG_Cinderwall_2p5",
- "Land_MBG_Cinderwall_5",
- "Land_MBG_Cinderwall_5_Corner",
- "Land_MBG_Cinderwall_5_Gate",
- "Land_mbg_cinderwall_5_low",
- "Land_MBG_Cinderwall_5_SteelDoor",
- "Land_MBG_Cinderwall_5_WoodDoor",
- "Land_MBG_Cinderwall_5dam",
- "Land_MBG_Shoothouse_1",
- "Land_Misc_Cargo1A_EP1",
- "Land_Misc_Cargo1B_EP1",
- "Land_Misc_Cargo1Bo",
- "Land_Misc_Cargo1C_EP1",
- "Land_Misc_Cargo1D_EP1",
- "Land_Misc_Cargo1E",
- "Land_Misc_Cargo1E_EP1",
- "Land_Misc_Cargo1F",
- "Land_Misc_Cargo1G",
- "Land_Misc_CargoMarket1a_EP1",
- "Land_Misc_Coltan_Heap_EP1",
- "Land_Misc_deerstand",
- "Land_Misc_GContainer_Big",
- "Land_Misc_Scaffolding",
- "Land_Misc_Well_C_EP1",
- "Land_Misc_Well_L_EP1",
- "Land_Molo_krychle",
- "Land_Molo_krychle2",
- "Land_MXDorfschild",
- "Land_Nasypka",
- "land_nav_pier_c",
- "land_nav_pier_F_17",
- "land_nav_pier_F_23",
- "Land_Obstacle_Climb_F",
- "Land_pfeiler_025_025_300_clean_cnc",
- "Land_pfeiler_025_025_300_cnc",
- "Land_pfeiler_025_025_300_wood",
- "Land_Plot_green_branka",
- "Land_Plot_green_vrata",
- "Land_Plot_istan1_rovny_gate",
- "Land_Plot_rust_branka",
- "Land_Plot_rust_vrata",
- "Land_Plot_zboreny",
- "Land_Plot_zed_drevo1_branka",
- "Land_plp_ctm_PartitioningFenceGreyDoorOpen",
- "Land_Podesta_1_cornl",
- "Land_Podesta_1_cornp",
- "Land_Podesta_1_cube",
- "Land_Podesta_1_cube_long",
- "Land_Podesta_1_mid",
- "Land_Podesta_1_mid_cornl",
- "Land_Podesta_1_mid_cornp",
- "Land_Podesta_1_stairs",
- "Land_Podesta_1_stairs2",
- "Land_Podesta_1_stairs4",
- "Land_Podesta_10",
- "Land_Podesta_5",
- "Land_Podesta_s10",
- "Land_Podesta_s5",
- "Land_pool_water",
- "Land_PortableLight_double_F",
- "Land_PortableLight_single_F",
- "Land_Posed",
- "Land_PowerWireSmall_direct_F",
- "Land_PowLines_Conc2L_EP1",
- "Land_PowLines_ConcL",
- "Land_PowLines_WoodL",
- "Land_Psi_bouda",
- "Land_R_HouseV_2L",
- "Land_Ruin_Cowshed_a_PMC",
- "Land_Ruin_Cowshed_b_PMC",
- "Land_Ruin_Cowshed_c_PMC",
- "Land_ruin_rubble",
- "Land_Ruiny_obvod_3",
- "Land_seno_balik",
- "Land_Shed_M02",
- "Land_SignB_Hotel_CZ",
- "Land_SignB_Hotel_CZ2",
- "Land_SlideCastle_F",
- "land_statek_brana_open",
- "Land_Stoplight01",
- "Land_Stoplight02",
- "Land_t_light_r",
- "Land_TACO_Lampa_sidl",
- "Land_TACO_Lampa_sidl_2",
- "Land_TACO_Lampa_sidl_3",
- "Land_Tec",
- "Land_teich_klein",
- "Land_treppe_250_100_150_clean_cnc",
- "Land_treppe_250_100_150_cnc",
- "Land_treppe_250_100_150_wood",
- "Land_TTowerBig_2_F",
- "Land_ture_250_025_300_clean_cnc",
- "Land_ture_250_025_300_cnc",
- "Land_ture_250_025_300_wood",
- "Land_u_Addon_01_V1_dam_F",
- "Land_Wall_CGry_5_D",
- "Land_Wall_Gate_Ind1_L",
- "Land_Wall_Gate_Ind2A_L",
- "Land_Wall_Gate_Ind2A_R",
- "Land_Wall_Gate_Ind2B_L",
- "Land_Wall_Gate_Ind2B_R",
- "Land_Wall_Gate_Ind2Rail_L",
- "Land_Wall_Gate_Ind2Rail_R",
- "Land_Wall_Gate_Kolchoz",
- "Land_Wall_Gate_Village",
- "Land_Wall_Gate_Wood1",
- "Land_Wall_L1_gate_EP1",
- "Land_wand_125_025_300_clean_cnc",
- "Land_wand_125_025_300_cnc",
- "Land_wand_125_025_300_wood",
- "Land_wand_250_025_300_clean_cnc",
- "Land_wand_250_025_300_cnc",
- "Land_wand_250_025_300_wood",
- "Land_wand_500_025_300_clean_cnc",
- "Land_wand_500_025_300_cnc",
- "Land_wand_500_025_300_wood",
- "Land_xCam_Build_00",
- "Land_Zastavka_jih",
- "Land_Zastavka_sever",
- "Land_zavora_2"
+ "Land_ClutterCutter_large_F",
+ "Land_ShellCrater_02_debris_F",
+ "Land_DirtPatch_03_F",
+ "Land_A_Castle_Bastion",
+ "Land_A_Castle_Gate",
+ "Land_A_Castle_Stairs_A",
+ "Land_A_Castle_Wall1_20",
+ "Land_A_Castle_Wall1_Corner",
+ "Land_A_Castle_Wall1_Corner_2",
+ "Land_A_Castle_Wall1_End",
+ "Land_A_Castle_Wall1_End_2",
+ "Land_A_Castle_Wall2_Corner_2",
+ "Land_A_Castle_WallS_5_D",
+ "Land_A_Castle_WallS_End",
+ "Land_balken_125_025_025_clean_cnc",
+ "Land_balken_125_025_025_cnc",
+ "Land_balken_250_025_025_clean_cnc",
+ "Land_balken_250_025_025_cnc",
+ "Land_balken_250_025_025_wood",
+ "Land_balken_500_025_025_clean_cnc",
+ "Land_balken_500_025_025_cnc",
+ "Land_balken_500_025_025_wood",
+ "Land_boden_125_125_025_clean_cnc",
+ "Land_boden_125_125_025_cnc",
+ "Land_boden_125_125_025_wood",
+ "Land_boden_250_250_025_clean_cnc",
+ "Land_boden_250_250_025_cnc",
+ "Land_boden_250_250_025_wood",
+ "Land_boden_500_500_025_clean_cnc",
+ "Land_boden_500_500_025_cnc",
+ "Land_boden_500_500_025_wood",
+ "Land_bouda_plech",
+ "Land_Brana02",
+ "Land_Brana02nodoor",
+ "Land_Cargo_Patrol_V1_F",
+ "Land_Carousel_01_F",
+ "Land_Climbing_Obstacle",
+ "Land_Communication_F",
+ "Land_Crane_F",
+ "Land_d_Addon_02_V1_F",
+ "Land_d_House_Big_01_V1_F",
+ "Land_d_House_Big_02_V1_F",
+ "Land_d_Stone_HouseSmall_V1_F",
+ "Land_d_Stone_Shed_V1_F",
+ "Land_deox_BarrierGateOpenable",
+ "Land_deox_carport_a1",
+ "Land_deox_carport_a2",
+ "Land_deox_fachwerkA1",
+ "Land_deox_fachwerkB1",
+ "Land_deox_fachwerkC2",
+ "Land_deox_fachwerkD2",
+ "Land_deox_fachwerkE1",
+ "Land_deox_fachwerkE1B",
+ "Land_deox_fachwerkE1O",
+ "Land_deox_fachwerkS1",
+ "Land_deox_fachwerkS1_offen",
+ "Land_deox_fachwerkS1Giebel",
+ "Land_deox_fachwerkSO1",
+ "Land_deox_fachwerkSO1_offen",
+ "Land_deox_fence_B1",
+ "Land_deox_fence_B2",
+ "Land_deox_fence_B3",
+ "Land_deox_fence_C1",
+ "Land_deox_fence_C1s",
+ "Land_deox_fwh_dach",
+ "Land_deox_fwh_dach2",
+ "Land_deox_fwh_dach3",
+ "Land_deox_fwhE1",
+ "Land_deox_fwhf1",
+ "Land_deox_gate_A1",
+ "Land_deox_gate_B1",
+ "Land_deox_gate_B2",
+ "Land_deox_gate_B2door",
+ "Land_deox_gate_B3",
+ "Land_deox_gate_B3door",
+ "Land_deox_gate_B5",
+ "Land_deox_gate_c1",
+ "Land_deox_House_D_medium3_4",
+ "Land_deox_rampe_a1",
+ "Land_deox_rampe_c1",
+ "Land_deox_rampe_d1",
+ "Land_deox_rampe_d3",
+ "Land_deox_tuer1",
+ "Land_deox_unterbau1a",
+ "Land_deox_unterbau1b",
+ "Land_deox_unterbau1c",
+ "Land_deox_unterbau2a",
+ "Land_deox_unterbau2b",
+ "Land_deox_wall01",
+ "Land_deox_wall01s",
+ "Land_deox_wall02",
+ "Land_deox_wall02s",
+ "Land_deox_wall06",
+ "Land_Dirthump01",
+ "Land_Dirthump01_EP1",
+ "Land_Dirthump02",
+ "Land_Dirthump02_EP1",
+ "Land_Dirthump03",
+ "Land_Dirthump03_EP1",
+ "Land_ecke_075_025_300_clean_cnc",
+ "Land_ecke_075_025_300_wood",
+ "Land_Factory_Conv1_10_F",
+ "Land_Factory_Conv1_Main_F",
+ "Land_Farm_WTower",
+ "Land_fenster_250_025_300_clean_cnc",
+ "Land_fenster_250_025_300_cnc",
+ "Land_fenster_250_025_300_wood",
+ "Land_Gate_IndVar2_5",
+ "Land_Gate_Wood1_5",
+ "Land_Gate_wood2_5",
+ "Land_glass_125_0025_125",
+ "Land_glass_125_0025_300",
+ "Land_glass_250_0025_300",
+ "Land_glass_500_0025_300",
+ "Land_glass_platte_500_500_0025",
+ "Land_Grave_dirt_F",
+ "Land_Grave_forest_F",
+ "Land_Grave_rocks_F",
+ "Land_HighVoltageTower_F",
+ "Land_Hut03",
+ "Land_i_House_Small_02_V2_dam_F",
+ "Land_i_House_Small_02_V3_dam_F",
+ "Land_i_Stone_Shed_V1_dam_F",
+ "Land_i_Stone_Shed_V2_dam_F",
+ "Land_Ind_BoardsPack1",
+ "Land_Ind_BoardsPack2",
+ "Land_Ind_Expedice_1",
+ "Land_Ind_Expedice_3",
+ "Land_Ind_Mlyn_03",
+ "Land_Ind_SawMillPen",
+ "Land_Ind_Shed_01_end",
+ "Land_Ind_Shed_01_EP1",
+ "Land_Ind_Shed_01_main",
+ "Land_Ind_Shed_02_end",
+ "Land_Ind_Shed_02_EP1",
+ "Land_Ind_Shed_02_main",
+ "Land_Ind_TankSmall",
+ "Land_Ind_TankSmall2",
+ "Land_Ind_TankSmall2_EP1",
+ "Land_Ind_Timbers",
+ "Land_Kontejner",
+ "Land_Kontejner_papir",
+ "Land_Kontejner_plasty",
+ "Land_Kontejner_sklo",
+ "Land_Kostel_trosky",
+ "Land_ladder",
+ "Land_Lampa_cut",
+ "Land_Lampa_Ind_EP1",
+ "Land_LampDecor_F",
+ "Land_LampHalogen_F",
+ "Land_LampHarbour_F",
+ "Land_LampShabby_F",
+ "Land_LampStreet_F",
+ "Land_LampStreet_small_F",
+ "Land_Leseni2x",
+ "Land_Leseni4x",
+ "Land_LifeguardTower_01_F",
+ "Land_lift",
+ "Land_Majak_podesta",
+ "Land_MBG_Cinderwall_2p5",
+ "Land_MBG_Cinderwall_5",
+ "Land_MBG_Cinderwall_5_Corner",
+ "Land_MBG_Cinderwall_5_Gate",
+ "Land_mbg_cinderwall_5_low",
+ "Land_MBG_Cinderwall_5_SteelDoor",
+ "Land_MBG_Cinderwall_5_WoodDoor",
+ "Land_MBG_Cinderwall_5dam",
+ "Land_MBG_Shoothouse_1",
+ "Land_Misc_Cargo1A_EP1",
+ "Land_Misc_Cargo1B_EP1",
+ "Land_Misc_Cargo1Bo",
+ "Land_Misc_Cargo1C_EP1",
+ "Land_Misc_Cargo1D_EP1",
+ "Land_Misc_Cargo1E",
+ "Land_Misc_Cargo1E_EP1",
+ "Land_Misc_Cargo1F",
+ "Land_Misc_Cargo1G",
+ "Land_Misc_CargoMarket1a_EP1",
+ "Land_Misc_Coltan_Heap_EP1",
+ "Land_Misc_deerstand",
+ "Land_Misc_GContainer_Big",
+ "Land_Misc_Scaffolding",
+ "Land_Misc_Well_C_EP1",
+ "Land_Misc_Well_L_EP1",
+ "Land_Molo_krychle",
+ "Land_Molo_krychle2",
+ "Land_MXDorfschild",
+ "Land_Nasypka",
+ "land_nav_pier_c",
+ "land_nav_pier_F_17",
+ "land_nav_pier_F_23",
+ "Land_Obstacle_Climb_F",
+ "Land_pfeiler_025_025_300_clean_cnc",
+ "Land_pfeiler_025_025_300_cnc",
+ "Land_pfeiler_025_025_300_wood",
+ "Land_Plot_green_branka",
+ "Land_Plot_green_vrata",
+ "Land_Plot_istan1_rovny_gate",
+ "Land_Plot_rust_branka",
+ "Land_Plot_rust_vrata",
+ "Land_Plot_zboreny",
+ "Land_Plot_zed_drevo1_branka",
+ "Land_plp_ctm_PartitioningFenceGreyDoorOpen",
+ "Land_Podesta_1_cornl",
+ "Land_Podesta_1_cornp",
+ "Land_Podesta_1_cube",
+ "Land_Podesta_1_cube_long",
+ "Land_Podesta_1_mid",
+ "Land_Podesta_1_mid_cornl",
+ "Land_Podesta_1_mid_cornp",
+ "Land_Podesta_1_stairs",
+ "Land_Podesta_1_stairs2",
+ "Land_Podesta_1_stairs4",
+ "Land_Podesta_10",
+ "Land_Podesta_5",
+ "Land_Podesta_s10",
+ "Land_Podesta_s5",
+ "Land_pool_water",
+ "Land_PortableLight_double_F",
+ "Land_PortableLight_single_F",
+ "Land_Posed",
+ "Land_PowerWireSmall_direct_F",
+ "Land_PowLines_Conc2L_EP1",
+ "Land_PowLines_ConcL",
+ "Land_PowLines_WoodL",
+ "Land_Psi_bouda",
+ "Land_R_HouseV_2L",
+ "Land_Ruin_Cowshed_a_PMC",
+ "Land_Ruin_Cowshed_b_PMC",
+ "Land_Ruin_Cowshed_c_PMC",
+ "Land_ruin_rubble",
+ "Land_Ruiny_obvod_3",
+ "Land_seno_balik",
+ "Land_Shed_M02",
+ "Land_SignB_Hotel_CZ",
+ "Land_SignB_Hotel_CZ2",
+ "Land_SlideCastle_F",
+ "land_statek_brana_open",
+ "Land_Stoplight01",
+ "Land_Stoplight02",
+ "Land_t_light_r",
+ "Land_TACO_Lampa_sidl",
+ "Land_TACO_Lampa_sidl_2",
+ "Land_TACO_Lampa_sidl_3",
+ "Land_Tec",
+ "Land_teich_klein",
+ "Land_treppe_250_100_150_clean_cnc",
+ "Land_treppe_250_100_150_cnc",
+ "Land_treppe_250_100_150_wood",
+ "Land_TTowerBig_2_F",
+ "Land_ture_250_025_300_clean_cnc",
+ "Land_ture_250_025_300_cnc",
+ "Land_ture_250_025_300_wood",
+ "Land_u_Addon_01_V1_dam_F",
+ "Land_Wall_CGry_5_D",
+ "Land_Wall_Gate_Ind1_L",
+ "Land_Wall_Gate_Ind2A_L",
+ "Land_Wall_Gate_Ind2A_R",
+ "Land_Wall_Gate_Ind2B_L",
+ "Land_Wall_Gate_Ind2B_R",
+ "Land_Wall_Gate_Ind2Rail_L",
+ "Land_Wall_Gate_Ind2Rail_R",
+ "Land_Wall_Gate_Kolchoz",
+ "Land_Wall_Gate_Village",
+ "Land_Wall_Gate_Wood1",
+ "Land_Wall_L1_gate_EP1",
+ "Land_wand_125_025_300_clean_cnc",
+ "Land_wand_125_025_300_cnc",
+ "Land_wand_125_025_300_wood",
+ "Land_wand_250_025_300_clean_cnc",
+ "Land_wand_250_025_300_cnc",
+ "Land_wand_250_025_300_wood",
+ "Land_wand_500_025_300_clean_cnc",
+ "Land_wand_500_025_300_cnc",
+ "Land_wand_500_025_300_wood",
+ "Land_xCam_Build_00",
+ "Land_Zastavka_jih",
+ "Land_Zastavka_sever",
+ "Land_zavora_2"
];
diff --git a/Missionframework/scripts/server/civrep/init_buildings.sqf b/Missionframework/scripts/server/civrep/init_buildings.sqf
index 318470425..d4cd0c4c9 100644
--- a/Missionframework/scripts/server/civrep/init_buildings.sqf
+++ b/Missionframework/scripts/server/civrep/init_buildings.sqf
@@ -2,6 +2,7 @@ private _start = diag_tickTime;
if (isServer) then {["init_buildings.sqf initialising...", "CIVREP"] call KPLIB_fnc_log;};
switch (worldName) do {
+ case "altis": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\altis.sqf"};
case "chernarus_summer": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\chernarus.sqf"};
case "Chernarus_Winter": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\chernarus.sqf"};
case "chernarus": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\chernarus.sqf"};
@@ -19,7 +20,7 @@ switch (worldName) do {
case "Tanoa": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\tanoa.sqf"};
case "WL_Rosche": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\wl_rosche.sqf"};
case "xcam_taunus": {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\xcam_taunus.sqf"};
- default {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\altis.sqf"};
+ default {call compile preprocessFileLineNumbers "scripts\server\civrep\ignored\allterrain.sqf"};
};
KPLIB_cr_sectorbuildings = [];
diff --git a/Missionframework/scripts/server/civrep/wounded/civrep_wounded_civs.sqf b/Missionframework/scripts/server/civrep/wounded/civrep_wounded_civs.sqf
index 88257afb9..ef41fcc1a 100644
--- a/Missionframework/scripts/server/civrep/wounded/civrep_wounded_civs.sqf
+++ b/Missionframework/scripts/server/civrep/wounded/civrep_wounded_civs.sqf
@@ -8,6 +8,10 @@ private _count = 2 + (ceil (random 2));
private _grp = creategroup [KPLIB_side_civilian, true];
private _civs = [];
private _markers = [];
+private _chemlight = objNull;
+private _chemlights = [];
+private _chemClass = "Chemlight_blue";
+if (KPLIB_ace) then {_chemClass = "ACE_Chemlight_HiBlue";};
for "_i" from 1 to _count do {
private _pos = (markerPos _sector) getPos [(50 + (random 150)), (random 360)];
@@ -15,52 +19,89 @@ for "_i" from 1 to _count do {
_pos = (markerPos _sector) getPos [(50 + (random 200)), (random 360)];
};
private _civ = [selectRandom KPLIB_c_units, _pos, _grp] call KPLIB_fnc_createManagedUnit;
- _civ setDir (random 360);
- {_civ disableAI _x} forEach ["ANIM", "TARGET", "AUTOTARGET", "MOVE"];
- removeAllItems _civ;
- _civ setDamage 0.5;
- _civ call F_cr_woundedAnim;
- if (KPLIB_ace) then {[_civ] remoteExec ["KPLIB_fnc_crAddAceAction"];};
+ _civ setDamage 0.75;
_civs pushBack _civ;
- private _marker = createMarker ["wounded_marker_" + str _i, [((_pos select 0) - 20 + (random 40)),((_pos select 1) - 20 + (random 40))]];
+ _chemlight = _chemClass createVehicle (getPos _civ);
+ _chemlights pushBack _chemlight;
+ private _marker = createMarker [format ["wounded_marker_%1_%2", round time, _i], [((_pos select 0) - 20 + (random 40)),((_pos select 1) - 20 + (random 40))]];
_marker setMarkerShape "ELLIPSE";
_marker setMarkerSize [25,25];
_marker setMarkerColor "ColorCIV";
_marker setMarkerAlpha 0.35;
_markers pushBack _marker;
};
+_grp setVariable ["acex_headless_blacklist", true, true];
+waitUntil {count _civs isEqualTo _count};
if (KPLIB_civrep_debug > 0) then {[format ["civrep_wounded_civs.sqf -> Spawned %1 wounded civilians at %2", _count, markerText _sector], "CIVREP"] remoteExecCall ["KPLIB_fnc_log", 2];};
+[6, [_count, markertext _sector]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
-private _units_near = [markerPos _sector, 300, KPLIB_side_player] call KPLIB_fnc_getUnitsCount;
+private _waypoint = _grp addWaypoint [markerpos _sector, 0];
+_waypoint setWaypointType "HOLD";
+{
+ private _civx = _x;
+ removeAllItems _civx;
+ [_civx] remoteExecCall ["doStop"];
+ [_civx, true] remoteExecCall ["stop"];
+ [_civx, "ALL"] remoteExecCall ["disableAI"];
+ _civx setDir (random 360);
+ _civx call F_cr_woundedAnim;
+ if (KPLIB_ace_med) then {[_civx] remoteExec ["KPLIB_fnc_crAddAceAction"];};
+} forEach _civs;
+
+private _range = KPLIB_range_sectorCapture*2; // default 350m
+private _units_near = [markerPos _sector, _range, KPLIB_side_player] call KPLIB_fnc_getUnitsCount;
private _healed_civs = [];
-while {_units_near > 0} do {
- _units_near = [markerPos _sector, 300, KPLIB_side_player] call KPLIB_fnc_getUnitsCount;
+while {true} do {
+ _units_near = [markerPos _sector, _range, KPLIB_side_player] call KPLIB_fnc_getUnitsCount;
+ if (_units_near isEqualTo 0) exitWith {
+ if (KPLIB_civrep_debug > 0) then {["civrep_wounded_civs.sqf -> no near blufor units. exit heal wait loop", "CIVREP"] remoteExecCall ["KPLIB_fnc_log", 2]};
+ sleep 30;
+ };
{
- if (((damage _x) < 0.5) && !(_x in _healed_civs)) then {
- (_markers select _forEachIndex) setMarkerAlpha 0;
- private _civ = _x;
- [_civ, "AinjPpneMstpSnonWnonDnon_kneel"] remoteExec ["switchMove"];
- sleep 2;
- {_civ enableAI _x} forEach ["ANIM", "TARGET", "AUTOTARGET", "MOVE"];
- [4, [(name _civ)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
- [KPLIB_cr_wounded_gain] call F_cr_changeCR;
- _healed_civs pushBack _civ;
- stats_civilians_healed = stats_civilians_healed +1;
- }
+ private _civx = _x;
+ private _isHealed = false;
+ if !(_civx in _healed_civs) then {
+ if (KPLIB_ace_med) then {_isHealed = _civx getVariable ["KPLIB_isHealed", false];} else {_isHealed = (damage _civx < 0.5);};
+ if (_isHealed || !alive _civx) then {
+ (_markers select _forEachIndex) setMarkerAlpha 0;
+ _healed_civs pushBack _civx;
+ removeAllActions _civx;
+ if (alive _civx) then {
+ private _nearestPlayer = player;
+ private _minDistance = 100;
+ {
+ private _playerx = _x;
+ private _distance = _civx distance _playerx;
+ if (_distance < _minDistance) then {
+ _minDistance = _distance;
+ _nearestPlayer = _playerx;
+ };
+ _nearestPlayer;
+ } forEach allPlayers;
+ [_civx, "AinjPpneMstpSnonWnonDnon_kneel"] remoteExecCall ["switchMove"];
+ [_civx, "AinjPpneMstpSnonWnonDnon_kneel"] remoteExecCall ["playMoveNow"];
+ sleep 2;
+ _civx doFollow leader group _civx;
+ _civx stop false;
+ _civx enableAI "ALL";
+ [4, [(name _civx), (name _nearestPlayer)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
+ [KPLIB_cr_wounded_gain] call F_cr_changeCR;
+ stats_civilians_healed = stats_civilians_healed +1;
+ };
+ };
+ };
} forEach _civs;
+ if ((count _healed_civs) isEqualTo (count _civs)) exitWith {
+ if (KPLIB_civrep_debug > 0) then {["civrep_wounded_civs.sqf -> all wounded units healed or died. exit heal wait loop", "CIVREP"] remoteExecCall ["KPLIB_fnc_log", 2]};
+ sleep 60;
+ };
sleep 1;
};
-sleep 60;
-
-{
- deleteVehicle _x;
-} forEach _civs;
-
-{
- deleteMarker _x;
-} forEach _markers;
+{deleteVehicle _x} forEach _civs;
+{deleteVehicle _x} forEach _chemlights;
+{deleteMarker _x} forEach _markers;
if (KPLIB_civrep_debug > 0) then {[format ["civrep_wounded_civs.sqf -> dropped at %1", markerText _sector], "CIVREP"] remoteExecCall ["KPLIB_fnc_log", 2]};
diff --git a/Missionframework/scripts/server/game/cleanup_vehicles.sqf b/Missionframework/scripts/server/game/cleanup_vehicles.sqf
index 51f878fe9..ed208138f 100644
--- a/Missionframework/scripts/server/game/cleanup_vehicles.sqf
+++ b/Missionframework/scripts/server/game/cleanup_vehicles.sqf
@@ -17,7 +17,7 @@ while { KPLIB_param_vehicleCleanup > 0 } do {
_nearestfob = [ getpos _nextvehicle ] call KPLIB_fnc_getNearestFob;
if ( count _nearestfob == 3 ) then {
if ( ( _nextvehicle distance _nearestfob > ( 1.2 * KPLIB_range_fob ) ) && ( _nextvehicle distance startbase > ( 1.2 * KPLIB_range_fob ) ) ) then {
- if ((toLower (typeof _nextvehicle)) in _cleanup_classnames) then {
+ if ((toLowerANSI (typeof _nextvehicle)) in _cleanup_classnames) then {
if ( count ( crew _nextvehicle ) == 0 ) then {
_nextvehicle setVariable [ "KPLIB_empty_vehicle_ticker", ( _nextvehicle getVariable [ "KPLIB_empty_vehicle_ticker", 0 ] ) + 1 ];
_reset_ticker = false;
diff --git a/Missionframework/scripts/server/game/manage_time.sqf b/Missionframework/scripts/server/game/manage_time.sqf
index a98743fb0..4cf63e061 100644
--- a/Missionframework/scripts/server/game/manage_time.sqf
+++ b/Missionframework/scripts/server/game/manage_time.sqf
@@ -2,7 +2,7 @@ scriptName "manage_time";
while {true} do {
if (KPLIB_param_shorterNights && (daytime > 20 || daytime < 4)) then {
- setTimeMultiplier (KPLIB_param_timeMulti * 4);
+ setTimeMultiplier (KPLIB_param_timeMulti * 2.75);
} else {
setTimeMultiplier KPLIB_param_timeMulti;
};
diff --git a/Missionframework/scripts/server/game/save_manager.sqf b/Missionframework/scripts/server/game/save_manager.sqf
index c6cb31cbf..483a953da 100644
--- a/Missionframework/scripts/server/game/save_manager.sqf
+++ b/Missionframework/scripts/server/game/save_manager.sqf
@@ -33,7 +33,7 @@ if (hasInterface) then {
};
// All classnames of objects which should be saved
-KPLIB_classnamesToSave = [toLower KPLIB_b_fobBuilding, toLower KPLIB_b_potato01];
+KPLIB_classnamesToSave = [toLowerANSI KPLIB_b_fobBuilding, toLowerANSI KPLIB_b_potato01];
/*
--- Locals ---
@@ -44,7 +44,7 @@ private _aiGroups = [];
// Current campaign date and time
private _dateTime = [];
// Vehicles which shouldn't be handled in the kill manager
-private _noKillHandler = [toLower KPLIB_b_fobBuilding, toLower KPLIB_b_potato01];
+private _noKillHandler = [toLowerANSI KPLIB_b_fobBuilding, toLowerANSI KPLIB_b_potato01];
// All objects which should be loaded/saved
private _objectsToSave = [];
// All storages which are handled for resource persistence
@@ -337,7 +337,7 @@ if (!isNil "_saveData") then {
};
// Only spawn, if the classname is still in the presets
- if ((toLower _class) in KPLIB_classnamesToSave) then {
+ if ((toLowerANSI _class) in KPLIB_classnamesToSave) then {
// Create object without damage handling and simulation
_object = createVehicle [_class, _pos, [], 0, "CAN_COLLIDE"];
@@ -363,7 +363,7 @@ if (!isNil "_saveData") then {
};
// Set enemy vehicle as captured
- if ((toLower _class) in KPLIB_o_allVeh_classes) then {
+ if ((toLowerANSI _class) in KPLIB_o_allVeh_classes) then {
_object setVariable ["KPLIB_captured", true, true];
};
@@ -412,7 +412,7 @@ if (!isNil "_saveData") then {
_x params ["_class", "_pos", "_vecDir", "_vecUp", "_supply", "_ammo", "_fuel"];
// Only spawn, if the classname is still in the presets
- if ((toLower _class) in KPLIB_classnamesToSave) then {
+ if ((toLowerANSI _class) in KPLIB_classnamesToSave) then {
// Create object without damage handling and simulation
_object = createVehicle [_class, _pos, [], 0, "CAN_COLLIDE"];
@@ -516,23 +516,24 @@ publicVariable "KPLIB_sectorsUnderAttack";
publicVariable "KPLIB_clearances";
// Check for deleted military sectors or deleted classnames in the locked vehicles array
-KPLIB_vehicle_to_military_base_links = KPLIB_vehicle_to_military_base_links select {((_x select 0) in KPLIB_b_vehToUnlock) && ((_x select 1) in KPLIB_sectors_military)};
-
-// Remove links for vehicles of possibly removed mods
-KPLIB_vehicle_to_military_base_links = KPLIB_vehicle_to_military_base_links select {[_x select 0] call KPLIB_fnc_checkClass};
+KPLIB_vehicle_to_military_base_links = KPLIB_vehicle_to_military_base_links select {
+ _x params ["_class", "_marker"];
+ // EV which shall have already been validated, class checked, cross checked with build
+ _class in KPLIB_b_vehToUnlock
+ && {_marker in KPLIB_sectors_military};
+};
// Check for additions in the locked vehicles array
private _lockedVehCount = count KPLIB_vehicle_to_military_base_links;
if ((_lockedVehCount < (count KPLIB_sectors_military)) && (_lockedVehCount < (count KPLIB_b_vehToUnlock))) then {
- private _assignedVehicles = [];
private _assignedBases = [];
private _nextVehicle = "";
private _nextBase = "";
- {
- _assignedVehicles pushBack (_x select 0);
+ private _assignedVehicles = KPLIB_vehicle_to_military_base_links apply {
_assignedBases pushBack (_x select 1);
- } forEach KPLIB_vehicle_to_military_base_links;
+ (_x select 0);
+ };
// Add new entries, when there are elite vehicles and military sectors are not yet assigned
while {((count _assignedVehicles) < (count KPLIB_b_vehToUnlock)) && ((count _assignedBases) < (count KPLIB_sectors_military))} do {
diff --git a/Missionframework/scripts/server/game/spawn_radio_towers.sqf b/Missionframework/scripts/server/game/spawn_radio_towers.sqf
index d26ef2a9d..ea9f92a01 100644
--- a/Missionframework/scripts/server/game/spawn_radio_towers.sqf
+++ b/Missionframework/scripts/server/game/spawn_radio_towers.sqf
@@ -1,5 +1,7 @@
-uiSleep 3;
+waitUntil {!isNil "KPLIB_saveLoaded"};
+waitUntil {KPLIB_saveLoaded};
+uiSleep 3;
private _sector = "";
private _saved = [];
private _classname = "";
diff --git a/Missionframework/scripts/server/game/synchronise_eco.sqf b/Missionframework/scripts/server/game/synchronise_eco.sqf
index 8a1fcda5b..f40e56833 100644
--- a/Missionframework/scripts/server/game/synchronise_eco.sqf
+++ b/Missionframework/scripts/server/game/synchronise_eco.sqf
@@ -20,6 +20,22 @@ if (KPLIB_production_markers isEqualTo []) then {
private _KPLIB_production_old = [0];
private _KPLIB_logistics_old = [0];
+KPLIB_production_markers_default = [];
+{
+ KPLIB_production_markers_default pushBack [_x, markerText _x];
+} forEach KPLIB_sectors_factory;
+
+{
+ private _markerName = _x select 0;
+ private _markerText = _x select 4;
+ {
+ if (_markerName == (_x select 0)) then {
+ _markerText = _x select 1;
+ };
+ } forEach KPLIB_production_markers_default;
+ _x set [4, _markerText];
+} forEach KPLIB_production_markers;
+
while {true} do {
waitUntil {sleep 0.25;
diff --git a/Missionframework/scripts/server/game/zeus_synchro.sqf b/Missionframework/scripts/server/game/zeus_synchro.sqf
index 8f2f0a2c2..85a4d9e74 100644
--- a/Missionframework/scripts/server/game/zeus_synchro.sqf
+++ b/Missionframework/scripts/server/game/zeus_synchro.sqf
@@ -3,7 +3,7 @@ scriptName "zeus_synchro";
waitUntil {!isNil "KPLIB_b_potato01"};
// Classnames of objects which should be added as editable for Zeus
-private _vehicleClassnames = [toLower KPLIB_b_potato01];
+private _vehicleClassnames = [toLowerANSI KPLIB_b_potato01];
{
_vehicleClassnames append _x;
} forEach [
@@ -37,7 +37,7 @@ while {true} do {
_valids append (vehicles select {
(alive _x) // Alive
&& {
- ((toLower (typeOf _x)) in _vehicleClassnames) // In valid classnames
+ ((toLowerANSI (typeOf _x)) in _vehicleClassnames) // In valid classnames
|| (_x getVariable ["KPLIB_captured", false]) // or captured
|| (_x getVariable ["KPLIB_seized", false]) // or seized
}
diff --git a/Missionframework/scripts/server/highcommand/fn_highcommand.fsm b/Missionframework/scripts/server/highcommand/fn_highcommand.fsm
index 4fbb3a6d3..088735850 100644
--- a/Missionframework/scripts/server/highcommand/fn_highcommand.fsm
+++ b/Missionframework/scripts/server/highcommand/fn_highcommand.fsm
@@ -400,10 +400,10 @@ class FSM
"// the issue on dedicated servers, if using that module." \n
"BIS_marta_mainscope setvariable [""rules""," \n
"[" \n
- " [""o_"", [[0.5, 0, 0, 1], [0, 0.3, 0.6, 1]] select (KPLIB_side_enemy isEqualTo west)]," \n
- " [""b_"", [[0.5, 0, 0, 1], [0, 0.3, 0.6, 1]] select (KPLIB_side_player isEqualTo west)]," \n
- " [""n_"", [0, 0.5, 0, 1]]," \n
- " [""n_"", [0.4, 0, 0.5, 1]]" \n
+ " [""o_"", [[0.5, 0, 0, 1], [0, 0.3, 0.6, 1]] select (KPLIB_side_enemy isEqualTo west)]," \n
+ " [""b_"", [[0.5, 0, 0, 1], [0, 0.3, 0.6, 1]] select (KPLIB_side_player isEqualTo west)]," \n
+ " [""n_"", [0, 0.5, 0, 1]]," \n
+ " [""n_"", [0.4, 0, 0.5, 1]]" \n
"], true];"/*%FSM*/;
precondition = /*%FSM*/""/*%FSM*/;
class Links
diff --git a/Missionframework/scripts/server/init_server.sqf b/Missionframework/scripts/server/init_server.sqf
index 693e9b134..64deda998 100644
--- a/Missionframework/scripts/server/init_server.sqf
+++ b/Missionframework/scripts/server/init_server.sqf
@@ -24,6 +24,9 @@ send_paratroopers = compile preprocessFileLineNumbers "scripts\server\patrols\se
fob_hunting = compile preprocessFileLineNumbers "scripts\server\secondary\fob_hunting.sqf";
convoy_hijack = compile preprocessFileLineNumbers "scripts\server\secondary\convoy_hijack.sqf";
search_and_rescue = compile preprocessFileLineNumbers "scripts\server\secondary\search_and_rescue.sqf";
+civ_supplies = compile preprocessFileLineNumbers "scripts\server\secondary\civ_supplies.sqf";
+bingo_fuel = compile preprocessFileLineNumbers "scripts\server\secondary\bingo_fuel.sqf";
+rearm_outpost = compile preprocessFileLineNumbers "scripts\server\secondary\rearm_outpost.sqf";
// Sector
attack_in_progress_fob = compile preprocessFileLineNumbers "scripts\server\sector\attack_in_progress_fob.sqf";
@@ -57,6 +60,8 @@ execVM "scripts\server\offloading\show_fps.sqf";
execVM "scripts\server\patrols\civilian_patrols.sqf";
execVM "scripts\server\patrols\manage_patrols.sqf";
execVM "scripts\server\patrols\reinforcements_resetter.sqf";
+// SAM turret manager
+execVM "scripts\server\ai\SAM_turret_manager.sqf";
if (KPLIB_param_logistic) then {execVM "scripts\server\resources\manage_logistics.sqf";};
execVM "scripts\server\resources\manage_resources.sqf";
execVM "scripts\server\resources\recalculate_resources.sqf";
@@ -125,7 +130,7 @@ execVM "scripts\server\offloading\group_diag.sqf";
{
if ((_x != player) && (_x distance (markerPos KPLIB_respawn_marker) < 200 )) then {
- deleteVehicle _x;
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
};
} forEach allUnits;
diff --git a/Missionframework/scripts/server/offloading/show_fps.sqf b/Missionframework/scripts/server/offloading/show_fps.sqf
index a3d062b61..42a4dce0e 100644
--- a/Missionframework/scripts/server/offloading/show_fps.sqf
+++ b/Missionframework/scripts/server/offloading/show_fps.sqf
@@ -4,37 +4,25 @@ private _sourcestr = "Server";
private _position = 0;
if (!isServer) then {
- if (!isNil "HC1") then {
- if (!isNull HC1) then {
- if (local HC1) then {
- _sourcestr = "HC1";
- _position = 1;
- };
- };
+ if (!isNil "HC1" && {!isNull HC1 && {local HC1}}) then {
+ _sourcestr = "HC1";
+ _position = 1;
};
- if (!isNil "HC2") then {
- if (!isNull HC2) then {
- if (local HC2) then {
- _sourcestr = "HC2";
- _position = 2;
- };
- };
+ if (!isNil "HC2" && {!isNull HC2 && {local HC2}}) then {
+ _sourcestr = "HC2";
+ _position = 2;
};
- if (!isNil "HC3") then {
- if (!isNull HC3) then {
- if (local HC3) then {
- _sourcestr = "HC3";
- _position = 3;
- };
- };
+ if (!isNil "HC3" && {!isNull HC3 && {local HC3}}) then {
+ _sourcestr = "HC3";
+ _position = 3;
};
};
-private _myfpsmarker = createMarker [format ["fpsmarker%1", _sourcestr], [0, -500 - (500 * _position)]];
-_myfpsmarker setMarkerType "mil_start";
-_myfpsmarker setMarkerSize [0.7, 0.7];
+private _myfpsmarker = createMarkerLocal [format ["fpsmarker%1", _sourcestr], [0, -500 - (500 * _position)]];
+_myfpsmarker setMarkerTypeLocal "mil_start";
+_myfpsmarker setMarkerSizeLocal [0.7, 0.7];
while {true} do {
@@ -42,10 +30,12 @@ while {true} do {
private _localgroups = {local _x} count allGroups;
private _localunits = {local _x} count allUnits;
- _myfpsmarker setMarkerColor "ColorGREEN";
- if (_myfps < 30) then {_myfpsmarker setMarkerColor "ColorYELLOW";};
- if (_myfps < 20) then {_myfpsmarker setMarkerColor "ColorORANGE";};
- if (_myfps < 10) then {_myfpsmarker setMarkerColor KPLIB_color_enemyActive;};
+ switch (true) do {
+ case (_myfps < 10): {_myfpsmarker setMarkerColorLocal "ColorRED"};
+ case (_myfps < 20 && _myfps > 10): {_myfpsmarker setMarkerColorLocal "ColorORANGE"};
+ case (_myfps < 30 && _myfps > 20): {_myfpsmarker setMarkerColorLocal "ColorYELLOW"};
+ default {_myfpsmarker setMarkerColorLocal "ColorGREEN"};
+ };
_myfpsmarker setMarkerText format ["%1: %2 fps, %3 local groups, %4 local units", _sourcestr, (round (_myfps * 100.0)) / 100.0, _localgroups, _localunits];
diff --git a/Missionframework/scripts/server/patrols/manage_one_civilian_patrol.sqf b/Missionframework/scripts/server/patrols/manage_one_civilian_patrol.sqf
index 5192e86ff..16cc4cd33 100644
--- a/Missionframework/scripts/server/patrols/manage_one_civilian_patrol.sqf
+++ b/Missionframework/scripts/server/patrols/manage_one_civilian_patrol.sqf
@@ -75,8 +75,8 @@ while { KPLIB_endgame == 0 } do {
};
- while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
- {_x doFollow leader _grp} foreach units _grp;
+ { deleteWaypoint _x } forEachReversed waypoints _grp;
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
{
_nearestroad = [(markerPos _x) getPos [random(100), random(360)], 200, []] call BIS_fnc_nearestRoad;
diff --git a/Missionframework/scripts/server/patrols/manage_one_patrol.sqf b/Missionframework/scripts/server/patrols/manage_one_patrol.sqf
index f26c77cde..d8feac4e6 100644
--- a/Missionframework/scripts/server/patrols/manage_one_patrol.sqf
+++ b/Missionframework/scripts/server/patrols/manage_one_patrol.sqf
@@ -1,7 +1,7 @@
scriptName "manage_one_patrol";
params [ "_minimum_readiness", "_is_infantry" ];
-private [ "_headless_client" ];
+private [ "_headless_client", "_grp", "_squad"];
waitUntil { !isNil "KPLIB_sectors_player" };
waitUntil { !isNil "KPLIB_enemyReadiness" };
@@ -18,9 +18,12 @@ while { KPLIB_endgame == 0 } do {
_grp = grpNull;
+ private _minSpawnRange = round (KPLIB_range_pointActivation * 1.5);
+ private _maxSpawnRange = round (KPLIB_range_pointActivation * 4);
+
_spawn_marker = "";
while { _spawn_marker == "" } do {
- _spawn_marker = [2000,5000,true] call KPLIB_fnc_getOpforSpawnPoint;
+ _spawn_marker = [_minSpawnRange,_maxSpawnRange,true] call KPLIB_fnc_getOpforSpawnPoint;
if ( _spawn_marker == "" ) then {
sleep (150 + (random 150));
};
@@ -29,6 +32,19 @@ while { KPLIB_endgame == 0 } do {
_sector_spawn_pos = [(((markerpos _spawn_marker) select 0) - 500) + (random 1000),(((markerpos _spawn_marker) select 1) - 500) + (random 1000),0];
if (_is_infantry) then {
+
+ private _minRange = round (KPLIB_range_pointActivation * 0.75);
+ private _maxRange = round (KPLIB_range_pointActivation * 2.5);
+
+ private _sectors_spawn = [];
+ {
+ if ((_sector_spawn_pos distance (markerpos _x) > _minRange) && (_sector_spawn_pos distance (markerpos _x) < _maxRange)) then {
+ _sectors_spawn pushBack _x;
+ };
+ } foreach (KPLIB_sectors_all - (KPLIB_sectors_player + KPLIB_sectors_active));
+ private _sector_spawn = selectRandom _sectors_spawn;
+ if (!isNil "_sector_spawn") then {_sector_spawn_pos = markerPos _sector_spawn};
+
_grp = createGroup [KPLIB_side_enemy, true];
_squad = [] call KPLIB_fnc_getSquadComp;
{
@@ -44,10 +60,16 @@ while { KPLIB_endgame == 0 } do {
};
sleep 0.5;
- _grp = group ((crew _vehicle_object) select 0);
+ private _crewmens = (crew _vehicle_object);
+ // wait leader and he is alive in vehicle
+ waitUntil {
+ sleep 1;
+ count _crewmens > 0
+ };
+ _grp = group (_crewmens select 0);
};
- [_grp] spawn patrol_ai;
+ [_grp] remoteExec ["patrol_ai", 2];
_started_time = time;
_patrol_continue = true;
diff --git a/Missionframework/scripts/server/patrols/manage_patrols.sqf b/Missionframework/scripts/server/patrols/manage_patrols.sqf
index a9e4c3fec..a5470d5e3 100644
--- a/Missionframework/scripts/server/patrols/manage_patrols.sqf
+++ b/Missionframework/scripts/server/patrols/manage_patrols.sqf
@@ -3,17 +3,22 @@ scriptName "manage_patrols";
_combat_triggers = [20,40,50,65,80,95];
if ( KPLIB_param_unitcap < 0.9 ) then { _combat_triggers = [20,45,90]; };
if ( KPLIB_param_unitcap > 1.3 ) then { _combat_triggers = [15,25,40,65,75,85,95]; };
-
+/*
_combat_triggers_infantry = [15,35,45,60,70,85];
if ( KPLIB_param_unitcap < 0.9 ) then { _combat_triggers_infantry = [15,40,80]; };
if ( KPLIB_param_unitcap > 1.3 ) then { _combat_triggers_infantry = [10,20,35,55,70,80,90]; };
+*/
+
+_combat_triggers_infantry = [15,45,75,90];
+if ( KPLIB_param_unitcap < 0.9 ) then { _combat_triggers_infantry = [15,60]; };
+if ( KPLIB_param_unitcap > 1.3 ) then { _combat_triggers_infantry = [10,35,60,80,90]; };
sleep 5;
waitUntil { sleep 0.3; !isNil "KPLIB_sectors_player" };
waitUntil { sleep 0.3; count KPLIB_sectors_player > 3 };
-if (worldName != "song_bin_tanh") then {
+if !(worldName in KPLIB_battlegroup_clearance) then {
{
[_x, false] spawn manage_one_patrol;
sleep 1;
diff --git a/Missionframework/scripts/server/patrols/send_paratroopers.sqf b/Missionframework/scripts/server/patrols/send_paratroopers.sqf
index a10c86a68..c5af86421 100644
--- a/Missionframework/scripts/server/patrols/send_paratroopers.sqf
+++ b/Missionframework/scripts/server/patrols/send_paratroopers.sqf
@@ -1,17 +1,23 @@
params [
- ["_targetsector", "", ["",[]]],
+ ["_targetSector", "", ["",[]]],
["_chopper_type", objNull, [objNull]]
];
-if (_targetsector isEqualTo "" || KPLIB_o_helicopters isEqualTo []) exitWith {false};
+if !(isServer) exitWith {};
-private _targetpos = _targetsector;
-if (_targetpos isEqualType "") then {
- _targetpos = markerPos _targetsector;
+if (_targetSector isEqualTo "" || KPLIB_o_helicopters isEqualTo []) exitWith {false};
+
+private _targetPos = _targetSector;
+if (_targetPos isEqualType "") then {
+ _targetPos = markerPos _targetSector;
};
-private _spawnsector = ([KPLIB_sectors_airSpawn, [_targetpos], {(markerpos _x) distance _input0}, "ASCEND"] call BIS_fnc_sortBy) select 0;
-private _newvehicle = objNull;
+
+private _spawnMarker = ([KPLIB_sectors_airSpawn, [_targetPos], {(markerpos _x) distance _input0}, "ASCEND"] call BIS_fnc_sortBy) select 0;
+private _spawnPos = markerPos _spawnMarker;
+
+private _newVehicle = objNull;
private _pilot_group = grpNull;
+
if (isNull _chopper_type) then {
_chopper_type = selectRandom KPLIB_o_helicopters;
@@ -19,130 +25,153 @@ if (isNull _chopper_type) then {
_chopper_type = selectRandom KPLIB_o_helicopters;
};
- _newvehicle = createVehicle [_chopper_type, markerpos _spawnsector, [], 0, "FLY"];
- createVehicleCrew _newvehicle;
- sleep 0.1;
-
+ _newVehicle = createVehicle [_chopper_type, _spawnPos, [], 0, "FLY"];
_pilot_group = createGroup [KPLIB_side_enemy, true];
- (crew _newvehicle) joinSilent _pilot_group;
-
- _newvehicle addMPEventHandler ["MPKilled", {
+ private _crew = units (createVehicleCrew _newVehicle);
+ _crew joinSilent _pilot_group;
+ _newVehicle addMPEventHandler ["MPKilled", {
params ["_unit", "_killer"];
- ["KPLIB_manageKills", [_unit,_killer]] call CBA_fnc_localEvent;
+ ["KPLIB_manageKills", [_unit, _killer]] call CBA_fnc_localEvent;
}];
{
_x addMPEventHandler ["MPKilled", {
params ["_unit", "_killer"];
["KPLIB_manageKills", [_unit, _killer]] call CBA_fnc_localEvent;
}];
- } forEach (crew _newvehicle);
+ } forEach (crew _newVehicle);
+
+ // Clear cargo, if enabled
+ [_newVehicle] call KPLIB_fnc_clearCargo;
+ _newVehicle addItemCargoGlobal ["toolkit", 1];
+ // Process KP object init
+ [_newVehicle] call KPLIB_fnc_addObjectInit;
} else {
- _newvehicle = _chopper_type;
- _pilot_group = group _newvehicle;
+ _newVehicle = _chopper_type;
+ _pilot_group = group _newVehicle;
};
private _para_group = createGroup [KPLIB_side_enemy, true];
while {(count (units _para_group)) < 8} do {
- [KPLIB_o_paratrooper, markerPos _spawnsector, _para_group] call KPLIB_fnc_createManagedUnit;
+ [KPLIB_o_paratrooper, _spawnPos, _para_group] call KPLIB_fnc_createManagedUnit;
};
-{removeBackpack _x; _x addBackPack "B_parachute"; _x moveInCargo _newvehicle;} forEach (units _para_group);
+_newVehicle lock true;
+
+_pilot_group setVariable ["acex_headless_blacklist", true, true];
+_para_group setVariable ["acex_headless_blacklist", true, true];
-while {(count (waypoints _pilot_group)) != 0} do {deleteWaypoint ((waypoints _pilot_group) select 0);};
-while {(count (waypoints _para_group)) != 0} do {deleteWaypoint ((waypoints _para_group) select 0);};
-sleep 0.2;
+{deleteWaypoint _x} forEachReversed waypoints _pilot_group;
+{deleteWaypoint _x} forEachReversed waypoints _para_group;
+
+{removeBackpack _x; _x addBackPack "B_parachute"; _x moveInCargo _newVehicle;} forEach (units _para_group);
+
+private _pilot = driver _newVehicle;
+private _pilotSkill = skill _pilot;
+_pilot allowFleeing 0;
+_pilot setSkill 1;
+
+_newVehicle flyInHeight [120, true];
+
+private _pilot_wp_target = _pilot_group addWaypoint [_targetPos, 50];
+_pilot_wp_target setWaypointType "MOVE";
+_pilot_wp_target setWaypointSpeed "FULL";
+_pilot_wp_target setWaypointBehaviour "CARELESS";
+_pilot_wp_target setWaypointCombatMode "BLUE";
+_pilot_wp_target setWaypointCompletionRadius 200;
+
+private _offset_dir = vectorNormalized (_targetPos vectorFromTo _spawnPos);
+private _offset_pos = _targetPos vectorAdd (_offset_dir vectorMultiply -500);
+_offset_pos set [2,0];
+private _pilot_wp_offset = _pilot_group addWaypoint [_offset_pos, 50];
+_pilot_wp_offset setWaypointType "MOVE";
+_pilot_wp_offset setWaypointSpeed "FULL";
+_pilot_wp_offset setWaypointBehaviour "CARELESS";
+_pilot_wp_offset setWaypointCombatMode "BLUE";
+_pilot_wp_offset setWaypointCompletionRadius 200;
+
+_pilot_group setCurrentWaypoint _pilot_wp_target;
{_x doFollow leader _pilot_group} forEach units _pilot_group;
+
+private _para_wp_target_1 = _para_group addWaypoint [_targetPos, 25];
+_para_wp_target_1 setWaypointType "MOVE";
+_para_wp_target_1 setWaypointSpeed "FULL";
+_para_wp_target_1 setWaypointBehaviour "CARELESS";
+_para_wp_target_1 setWaypointCombatMode "BLUE";
+_para_wp_target_1 setWaypointCompletionRadius 100;
+private _para_wp_target_2 = _para_group addWaypoint [_targetPos, 25];
+_para_wp_target_2 setWaypointType "MOVE";
+_para_wp_target_2 setWaypointCompletionRadius 100;
+
+_para_group setCurrentWaypoint _para_wp_target_1;
{_x doFollow leader _para_group} forEach units _para_group;
-sleep 0.2;
-
-_newvehicle flyInHeight 100;
-
-_waypoint = _pilot_group addWaypoint [_targetpos, 25];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointSpeed "FULL";
-_waypoint setWaypointBehaviour "CARELESS";
-_waypoint setWaypointCombatMode "BLUE";
-_waypoint setWaypointCompletionRadius 100;
-_waypoint = _pilot_group addWaypoint [_targetpos, 25];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointSpeed "FULL";
-_waypoint setWaypointBehaviour "CARELESS";
-_waypoint setWaypointCombatMode "BLUE";
-_waypoint setWaypointCompletionRadius 100;
-_waypoint = _pilot_group addWaypoint [_targetpos, 700];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointCompletionRadius 100;
-_waypoint = _pilot_group addWaypoint [_targetpos, 700];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointCompletionRadius 100;
-_waypoint = _pilot_group addWaypoint [_targetpos, 700];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointCompletionRadius 100;
-_pilot_group setCurrentWaypoint [_pilot_group, 1];
-
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointSpeed "NORMAL";
-_waypoint setWaypointBehaviour "COMBAT";
-_waypoint setWaypointCombatMode "YELLOW";
-_waypoint setWaypointCompletionRadius 50;
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "MOVE";
-_waypoint setWaypointCompletionRadius 50;
-_pilot_group setCurrentWaypoint [_para_group, 1];
-
-_newvehicle flyInHeight 100;
waitUntil {sleep 1;
- !(alive _newvehicle) || (damage _newvehicle > 0.2 ) || (_newvehicle distance _targetpos < 400)
+ !(alive _newVehicle) || (damage _newVehicle > 0.2) || (_newVehicle distance2D _targetPos < 300)
};
-_newvehicle flyInHeight 100;
-
-{
- unassignVehicle _x;
- moveout _x;
- sleep 0.5;
-} forEach (units _para_group);
-
-_newvehicle flyInHeight 100;
-
-sleep 0.2;
-while {(count (waypoints _pilot_group)) != 0} do {deleteWaypoint ((waypoints _pilot_group) select 0);};
-while {(count (waypoints _para_group)) != 0} do {deleteWaypoint ((waypoints _para_group) select 0);};
-sleep 0.2;
-{_x doFollow leader _pilot_group} foreach units _pilot_group;
-{_x doFollow leader _para_group} foreach units _para_group;
-sleep 0.2;
-
-_newvehicle flyInHeight 100;
-
-_waypoint = _pilot_group addWaypoint [_targetpos, 200];
-_waypoint setWaypointBehaviour "COMBAT";
-_waypoint setWaypointCombatMode "RED";
-_waypoint setWaypointType "SAD";
-_waypoint = _pilot_group addWaypoint [_targetpos, 200];
-_waypoint setWaypointBehaviour "COMBAT";
-_waypoint setWaypointCombatMode "RED";
-_waypoint setWaypointType "SAD";
-_waypoint = _pilot_group addWaypoint [_targetpos, 200];
-_waypoint setWaypointBehaviour "COMBAT";
-_waypoint setWaypointCombatMode "RED";
-_waypoint setWaypointType "SAD";
-_waypoint = _pilot_group addWaypoint [_targetpos, 200];
-_waypoint setWaypointType "SAD";
-_waypoint = _pilot_group addWaypoint [_targetpos, 200];
-_waypoint setWaypointType "SAD";
-_pilot_group setCurrentWaypoint [_pilot_group, 1];
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "SAD";
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "SAD";
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "SAD";
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "SAD";
-_waypoint = _para_group addWaypoint [_targetpos, 100];
-_waypoint setWaypointType "SAD";
-_pilot_group setCurrentWaypoint [_para_group, 1];
+_newVehicle lock false;
+
+{sleep 0.5; unassignVehicle _x; moveout _x;} forEach (units _para_group);
+
+{deleteWaypoint _x} forEachReversed waypoints _para_group;
+
+private _para_wp_combat_1 = _para_group addWaypoint [_targetPos, 100];
+_para_wp_combat_1 setWaypointType "SAD";
+_para_wp_combat_1 setWaypointSpeed "FULL";
+_para_wp_combat_1 setWaypointBehaviour "AWARE";
+_para_wp_combat_1 setWaypointCombatMode "RED";
+_para_wp_combat_1 setWaypointCompletionRadius 100;
+_para_wp_combat_1 setWaypointTimeout [60, 90, 120];
+private _para_wp_combat_2 = _para_group addWaypoint [_targetPos, 100];
+_para_wp_combat_2 setWaypointType "SAD";
+_para_wp_combat_2 setWaypointSpeed "NORMAL";
+_para_wp_combat_2 setWaypointBehaviour "COMBAT";
+_para_wp_combat_2 setWaypointCompletionRadius 100;
+private _para_wp_combat_3 = _para_group addWaypoint [_targetPos, 100];
+_para_wp_combat_3 setWaypointType "SAD";
+_para_wp_combat_3 setWaypointCompletionRadius 100;
+private _para_wp_combat_4 = _para_group addWaypoint [_targetPos, 100];
+_para_wp_combat_4 setWaypointType "SAD";
+_para_wp_combat_4 setWaypointCompletionRadius 100;
+
+_pilot_group setCurrentWaypoint _pilot_wp_offset;
+_para_group setCurrentWaypoint _para_wp_combat_1;
+{_x doFollow leader _para_group} forEach units _para_group;
+{_x doFollow leader _pilot_group} forEach units _pilot_group;
+
+sleep 8;
+
+_pilot setSkill _pilotSkill;
+_newVehicle flyInHeight [100, false];
+{deleteWaypoint _x} forEachReversed waypoints _pilot_group;
+
+private _pilot_wp_combat_1 = _pilot_group addWaypoint [_targetPos, 100];
+_pilot_wp_combat_1 setWaypointType "SAD";
+_pilot_wp_combat_1 setWaypointBehaviour "COMBAT";
+_pilot_wp_combat_1 setWaypointCombatMode "RED";
+_pilot_wp_combat_1 setWaypointCompletionRadius 500;
+_pilot_wp_combat_1 setWaypointTimeout [210, 240, 270];
+
+private _pilot_wp_rtb = _pilot_group addWaypoint [_spawnPos, 25];
+_pilot_wp_rtb setWaypointType "MOVE";
+_pilot_wp_rtb setWaypointSpeed "FULL";
+_pilot_wp_rtb setWaypointBehaviour "CARELESS";
+_pilot_wp_rtb setWaypointCombatMode "BLUE";
+_pilot_wp_rtb setWaypointCompletionRadius 25;
+
+_pilot_group setCurrentWaypoint _pilot_wp_combat_1;
+
+sleep 240;
+
+_pilot_group setCurrentWaypoint _pilot_wp_rtb;
+
+waitUntil {sleep 1;
+ !(alive driver _newVehicle) || (_newVehicle distance2D _spawnPos < 100)
+};
+
+sleep 5;
+if (!alive driver _newVehicle) exitWith {};
+
+deleteVehicleCrew _newVehicle;
+deleteVehicle _newVehicle;
diff --git a/Missionframework/scripts/server/remotecall/build_remote_call.sqf b/Missionframework/scripts/server/remotecall/build_remote_call.sqf
index b28ba386e..2eece3ab3 100644
--- a/Missionframework/scripts/server/remotecall/build_remote_call.sqf
+++ b/Missionframework/scripts/server/remotecall/build_remote_call.sqf
@@ -78,7 +78,7 @@ if ((_price_s > 0) || (_price_a > 0) || (_price_f > 0)) then {
if ( _localtype == 8 ) then {
stats_blufor_soldiers_recruited = stats_blufor_soldiers_recruited + 10;
} else {
- if ( _typename isKindOf "Man" ) then {
+ if ( _typename isKindOf "CAManBase" ) then {
stats_blufor_soldiers_recruited = stats_blufor_soldiers_recruited + 1;
} else {
if ( ! ( _typename isKindOf "Building" ) ) then {
diff --git a/Missionframework/scripts/server/remotecall/sector_liberated_remote_call.sqf b/Missionframework/scripts/server/remotecall/sector_liberated_remote_call.sqf
index d3ebaf38d..73d51b4c2 100644
--- a/Missionframework/scripts/server/remotecall/sector_liberated_remote_call.sqf
+++ b/Missionframework/scripts/server/remotecall/sector_liberated_remote_call.sqf
@@ -2,11 +2,11 @@ params ["_liberated_sector"];
private _KPLIB_enemyReadiness_increase = 0;
switch (true) do {
- case (_liberated_sector in KPLIB_sectors_capital): {_KPLIB_enemyReadiness_increase = floor (random 10) * KPLIB_param_difficulty;};
- case (_liberated_sector in KPLIB_sectors_city): {_KPLIB_enemyReadiness_increase = floor (random 6) * KPLIB_param_difficulty;};
- case (_liberated_sector in KPLIB_sectors_military): {_KPLIB_enemyReadiness_increase = 5 + (floor (random 11)) * KPLIB_param_difficulty;};
+ case (_liberated_sector in KPLIB_sectors_capital): {_KPLIB_enemyReadiness_increase = 6 + (floor (random 6)) * KPLIB_param_difficulty;};
+ case (_liberated_sector in KPLIB_sectors_city): {_KPLIB_enemyReadiness_increase = 6 + (floor (random 4)) * KPLIB_param_difficulty;};
+ case (_liberated_sector in KPLIB_sectors_military): {_KPLIB_enemyReadiness_increase = 5 + (floor (random 12)) * KPLIB_param_difficulty;};
case (_liberated_sector in KPLIB_sectors_factory): {_KPLIB_enemyReadiness_increase = 3 + (floor (random 7)) * KPLIB_param_difficulty;};
- case (_liberated_sector in KPLIB_sectors_tower): {_KPLIB_enemyReadiness_increase = floor (random 4);};
+ case (_liberated_sector in KPLIB_sectors_tower): {_KPLIB_enemyReadiness_increase = 3 + (floor (random 3)) * KPLIB_param_difficulty;};
};
KPLIB_enemyReadiness = KPLIB_enemyReadiness + _KPLIB_enemyReadiness_increase;
@@ -67,6 +67,6 @@ if (KPLIB_endgame == 0) then {
}
&& {[] call KPLIB_fnc_getOpforCap < KPLIB_cap_battlegroup}
) then {
- [_liberated_sector, (random 100) < 45] spawn spawn_battlegroup;
+ [_liberated_sector, (random 100) < 15] spawn spawn_battlegroup;
};
};
diff --git a/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf b/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf
index 5d926c8b9..49186ae69 100644
--- a/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf
+++ b/Missionframework/scripts/server/remotecall/start_secondary_remote_call.sqf
@@ -17,6 +17,9 @@ resources_intel = resources_intel - ( KPLIB_secondary_missions_costs select _mis
if (_mission_index == 0) then {[] spawn fob_hunting;};
if (_mission_index == 1) then {[] spawn convoy_hijack;};
if (_mission_index == 2) then {[] spawn search_and_rescue;};
+if (_mission_index == 3) then {[] spawn civ_supplies;};
+if (_mission_index == 4) then {[] spawn bingo_fuel;};
+if (_mission_index == 5) then {[] spawn rearm_outpost;};
KPLIB_secondary_starting = false; publicVariable "KPLIB_secondary_starting";
diff --git a/Missionframework/scripts/server/resources/recalculate_resources.sqf b/Missionframework/scripts/server/resources/recalculate_resources.sqf
index 1b13f6dcf..f4f999155 100644
--- a/Missionframework/scripts/server/resources/recalculate_resources.sqf
+++ b/Missionframework/scripts/server/resources/recalculate_resources.sqf
@@ -36,6 +36,8 @@ while {true} do {
if (_hasAirBuilding > 0) then {_hasAirBuilding = true;} else {_hasAirBuilding = false;};
private _hasRecBuilding = {(typeOf _x) == KPLIB_b_logiStation;} count _fob_buildings;
if (_hasRecBuilding > 0) then {_hasRecBuilding = true;} else {_hasRecBuilding = false;};
+ private _hasMedBuilding = {(typeOf _x) in KPLIB_medical_facilities;} count _fob_buildings;
+ if (_hasMedBuilding > 0) then {_hasMedBuilding = true;} else {_hasMedBuilding = false;};
private _supplyValue = 0;
private _ammoValue = 0;
@@ -52,7 +54,7 @@ while {true} do {
} forEach (attachedObjects _x);
} forEach _storage_areas;
- _local_fob_resources pushBack [_x, _supplyValue, _ammoValue, _fuelValue, _hasAirBuilding, _hasRecBuilding];
+ _local_fob_resources pushBack [_x, _supplyValue, _ammoValue, _fuelValue, _hasAirBuilding, _hasRecBuilding, _hasMedBuilding];
_local_supplies_global = _local_supplies_global + _supplyValue;
_local_ammo_global = _local_ammo_global + _ammoValue;
_local_fuel_global = _local_fuel_global + _fuelValue;
diff --git a/Missionframework/scripts/server/resources/unit_cap.sqf b/Missionframework/scripts/server/resources/unit_cap.sqf
index 47ce2b66c..8fd0ba827 100644
--- a/Missionframework/scripts/server/resources/unit_cap.sqf
+++ b/Missionframework/scripts/server/resources/unit_cap.sqf
@@ -8,21 +8,36 @@ while {true} do {
private _local_unitcap = 0;
private _local_heli_count = 0;
private _local_plane_count = 0;
+ private _local_units = (units KPLIB_side_player) select {alive _x && !(captive _x) && ((_x distance startbase) > 250 || (isPlayer _x))};
+ private _local_vehicles = (entities "AIR") select {alive _x && (toLowerANSI (typeOf _x)) in KPLIB_b_air_classes && !(_x getVariable ["KPLIB_preplaced", false])};
{
- if ((side group _x == KPLIB_side_player) && (alive _x) && ((_x distance startbase) > 250 || (isPlayer _x))) then {
- _local_unitcap = _local_unitcap + 1;
+ _class = typeOf _x;
+ _isNotCaptured = false;
+ if ((toLowerANSI _class) in KPLIB_o_allVeh_classes) then {
+ _isCaptured = _x getVariable ["KPLIB_captured", false];
+ if !(_isCaptured) then {_isNotCaptured = true;};
};
- } forEach allUnits;
+ _isNotSeized = false;
+ if (_class in KPLIB_c_vehicles) then {
+ _isSeized = _x getVariable ["KPLIB_seized", false];
+ if !(_isSeized) then {_isNotSeized = true;};
+ };
+ if (_isNotCaptured || _isNotSeized) then {_local_vehicles deleteAt _forEachIndex;};
+ } forEachReversed _local_vehicles;
+ {
+ _local_unitcap = _local_unitcap + 1;
+ } forEach _local_units;
{
- if ((toLower (typeOf _x)) in KPLIB_b_air_classes && !([typeOf _x] call KPLIB_fnc_isClassUAV) && alive _x && !(_x getVariable ["KPLIB_preplaced", false])) then {
+ if (!([typeOf _x] call KPLIB_fnc_isClassUAV)) then {
if (_x isKindOf "Helicopter") then {
_local_heli_count = _local_heli_count + 1;
+ continue;
};
if (_x isKindOf "Plane") then {
_local_plane_count = _local_plane_count + 1;
};
};
- } forEach vehicles;
+ } forEach _local_vehicles;
unitcap = _local_unitcap;
KPLIB_heli_count = _local_heli_count;
KPLIB_plane_count = _local_plane_count;
diff --git a/Missionframework/scripts/server/secondary/bingo_fuel.sqf b/Missionframework/scripts/server/secondary/bingo_fuel.sqf
new file mode 100644
index 000000000..d33e82943
--- /dev/null
+++ b/Missionframework/scripts/server/secondary/bingo_fuel.sqf
@@ -0,0 +1,130 @@
+// Initialize variables
+_fuels_present = false;
+_player_factory = [];
+_required_value = 200;
+
+// Find a random friendly factory owned by the player
+{
+ if (_x in KPLIB_sectors_factory) then {
+ _player_factory pushBack _x;
+ };
+} forEach KPLIB_sectors_player;
+
+// Check if factory array is empty
+if(count _player_factory isEqualTo 0) exitWith {
+ // If empty, throw error in log and call proper intel notification
+ ["There are no friendly factory to spawn fuels at!", "ERROR"] call KPLIB_fnc_log;
+ [14] remoteExec ["remote_call_intel"];
+};
+
+// Select a random factory from the player-owned towns array for the fuel drop-off
+_objective_factory = selectRandom _player_factory;
+
+
+// Create a 50m radius marker at the selected factory
+secondary_objective_position = getMarkerPos _objective_factory;
+secondary_objective_position_marker = secondary_objective_position;
+publicVariable "secondary_objective_position_marker";
+uiSleep 1;
+
+// Start the secondary mission
+KPLIB_secondary_in_progress = 3; publicVariable "KPLIB_secondary_in_progress";
+[12] remoteExec ["remote_call_intel"];
+
+// Add a note in the log
+[format ["Starting Bingo Fuel objective in %1", _objective_factory], "NOTIFICATION"] call KPLIB_fnc_log;
+
+
+// Loop until 2x fuel crates have been brought to within 50m of objective
+while {!_fuels_present} do {
+
+ // Initialize total value of fuel crates to 0
+ _total_value = 0;
+ // Initialize _fuels_in_zone is array
+ _fuels_in_zone = [];
+
+ // Get list of all objects within the fuel check radius of the marker
+ _objects_to_check = vehicles inAreaArray [secondary_objective_position, 50, 50];
+
+ // Loop through all objects and check if they are the correct fuel crates and not currently attached to a vehicle
+ {
+ if (typeOf _x isEqualTo KPLIB_b_crateFuel && isNull attachedTo _x) then {
+ // If they are the right crate, add to the fuels array to be counted
+ _fuels_in_zone pushBack _x;
+ };
+ } forEach _objects_to_check;
+
+ // If there are no fuels, wait for a period of time and check again
+ if (count _fuels_in_zone isEqualTo 0) then {
+ hintSilent "";
+ uiSleep 5;
+ } else {
+
+ // Loop through all fuel crates in the zone and add up their values
+ {_total_value = _total_value + (_x getVariable ["KPLIB_crate_value", 0]);} forEach _fuels_in_zone;
+
+ // If the total value is less than the required value, wait for a period of time and check again
+ if (_total_value < _required_value) then {
+
+ // Notify players of current fuel status in area
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 5, localize "STR_FUEL"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 4, localize "STR_FUEL"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 3, localize "STR_FUEL"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 2, localize "STR_FUEL"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 1, localize "STR_FUEL"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_CHECKING", _total_value, _required_value, localize "STR_FUEL"];
+ uiSleep 1;
+
+ } else {
+
+ _consume_value = _required_value;
+ {
+ private _crate_value = _x getVariable ["KPLIB_crate_value",0];
+ if (_consume_value != 0) then {
+ if (_consume_value >= _crate_value) then {
+ _consume_value = _consume_value - _crate_value;
+ _total_value = _total_value - _crate_value;
+ deleteVehicle _x;
+ } else {
+ _x setVariable ["KPLIB_crate_value", _crate_value - _consume_value, true];
+ _consume_value = 0;
+ };
+ } else {
+ };
+ } forEach _fuels_in_zone;
+ if (_consume_value == 0) then {_fuels_present = true;};
+ };
+ };
+};
+hintSilent "";
+
+private _amount = 6;
+private _spawnPos = [];
+private _j = 0;
+
+for "_i" from 1 to _amount do {
+ while {_spawnPos isEqualTo []} do {
+ _j = _j + 1;
+ _spawnPos = ((markerPos _objective_factory) getPos [random 50, random 360]) findEmptyPosition [5, 45, KPLIB_b_crateAmmo];
+ if (_j isEqualTo 10) exitWith {};
+ };
+ if !(_spawnPos isEqualTo []) then {
+ [selectRandom KPLIB_crates, 100, _spawnpos] call KPLIB_fnc_createCrate;
+ _spawnPos = [];
+ } else {
+ ["No suitable spawn position found."] call BIS_fnc_error;
+ [format ["Couldn't find spawn position for resource crate for sector %1", _objective_factory], "WARNING"] call KPLIB_fnc_log;
+ };
+};
+
+[13] remoteExec ["remote_call_intel"];
+stats_secondary_objectives = stats_secondary_objectives + 1;
+KPLIB_secondary_in_progress = -1; publicVariable "KPLIB_secondary_in_progress";
+uiSleep 1;
+[] spawn KPLIB_fnc_doSave;
+[format ["Bingo Fuel secondary objective complete at %1.",_objective_factory], "NOTIFICATION"] call KPLIB_fnc_log;
diff --git a/Missionframework/scripts/server/secondary/civ_supplies.sqf b/Missionframework/scripts/server/secondary/civ_supplies.sqf
new file mode 100644
index 000000000..6d4dfa604
--- /dev/null
+++ b/Missionframework/scripts/server/secondary/civ_supplies.sqf
@@ -0,0 +1,132 @@
+/*
+ Creates a secondary objective mission that allows and requires players to bring 200 value supply crates to a
+ random friendly town in order to raise civilian reputation.
+
+ Configurable options (KPLIB_config):
+ KPLIB_secondary_missions_costs select 3 = intel cost for mission (default 5)
+ KPLIB_secondary_objective_civ_supplies_impact = % increase in civilian rep (default 5)
+*/
+
+// Initialize variables
+_supplies_present = false;
+_player_towns = [];
+_required_value = 200; //should move to be KPLIB_config?
+
+// Find a random friendly town owned by the player
+{
+ if (_x in KPLIB_sectors_city) then {
+ _player_towns pushBack _x;
+ };
+} forEach KPLIB_sectors_player;
+
+// Check if town array is empty
+if(count _player_towns isEqualTo 0) exitWith {
+ // If empty, throw error in log and call proper intel notification
+ ["There are no friendly towns to spawn supplies at!", "ERROR"] call KPLIB_fnc_log;
+ [11] remoteExec ["remote_call_intel"];
+};
+
+// Select a random town from the player-owned towns array for the supply drop-off
+_objective_town = selectRandom _player_towns;
+
+
+// Create a 50m radius marker at the selected town
+secondary_objective_position = getMarkerPos _objective_town;
+secondary_objective_position_marker = secondary_objective_position;
+publicVariable "secondary_objective_position_marker";
+uiSleep 1;
+
+// Start the secondary mission
+KPLIB_secondary_in_progress = 3; publicVariable "KPLIB_secondary_in_progress";
+[9] remoteExec ["remote_call_intel"];
+
+// Add a note in the log
+[format ["Starting Humanitarian Aid objective in %1", _objective_town], "NOTIFICATION"] call KPLIB_fnc_log;
+
+
+// Loop until 2x supply crates have been brought to within 50m of objective
+while {!_supplies_present} do {
+
+ // Initialize total value of supply crates to 0
+ _total_value = 0;
+ // Initialize _supplies_in_zone is array
+ _supplies_in_zone = [];
+
+ // Get list of all objects within the supply check radius of the marker
+ _objects_to_check = vehicles inAreaArray [secondary_objective_position, 50, 50];
+
+ // Loop through all objects and check if they are the correct supply crates and not currently attached to a vehicle
+ {
+ if (typeOf _x isEqualTo KPLIB_b_crateSupply && isNull attachedTo _x) then {
+ // If they are the right crate, add to the supplies array to be counted
+ _supplies_in_zone pushBack _x;
+ };
+ } forEach _objects_to_check;
+
+ // If there are no supplies, wait for a period of time and check again
+ if (count _supplies_in_zone isEqualTo 0) then {
+ hintSilent "";
+ uiSleep 5;
+ } else {
+
+ // Loop through all supply crates in the zone and add up their values
+ {_total_value = _total_value + (_x getVariable ["KPLIB_crate_value", 0]);} forEach _supplies_in_zone;
+
+ // If the total value is less than the required value, wait for a period of time and check again
+ if (_total_value < _required_value) then {
+
+ // Notify players of current supply status in area
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 5, localize "STR_MANPOWER"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 4, localize "STR_MANPOWER"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 3, localize "STR_MANPOWER"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 2, localize "STR_MANPOWER"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 1, localize "STR_MANPOWER"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_CHECKING", _total_value, _required_value, localize "STR_MANPOWER"];
+ uiSleep 1;
+
+ } else {
+
+ _consume_value = _required_value;
+ {
+ private _crate_value = _x getVariable ["KPLIB_crate_value",0];
+ if (_consume_value != 0) then {
+ if (_consume_value >= _crate_value) then {
+ _consume_value = _consume_value - _crate_value;
+ _total_value = _total_value - _crate_value;
+ deleteVehicle _x;
+ } else {
+ _x setVariable ["KPLIB_crate_value", _crate_value - _consume_value, true];
+ _consume_value = 0;
+ };
+ } else {
+ };
+ } forEach _supplies_in_zone;
+ if (_consume_value == 0) then {_supplies_present = true;};
+ };
+ };
+};
+hintSilent "";
+
+// Add civilian rep for a completed mission based on value in KPLIB_config
+[KPLIB_secondary_objective_civ_supplies_impact] spawn F_cr_changeCR;
+
+// Display end notification
+[10] remoteExec ["remote_call_intel"];
+
+// Add +1 completed secondary mission for the campaign end screen
+stats_secondary_objectives = stats_secondary_objectives + 1;
+
+// declare secondary mission completed
+KPLIB_secondary_in_progress = -1; publicVariable "KPLIB_secondary_in_progress";
+
+// execute a save
+uiSleep 1;
+[] spawn KPLIB_fnc_doSave;
+
+//create note in log
+[format ["Humanitarian Aid secondary objective complete at %1. Increasing civ rep by %2",_objective_town, KPLIB_secondary_objective_civ_supplies_impact], "NOTIFICATION"] call KPLIB_fnc_log;
diff --git a/Missionframework/scripts/server/secondary/convoy_hijack.sqf b/Missionframework/scripts/server/secondary/convoy_hijack.sqf
index 76c3cd873..170389add 100644
--- a/Missionframework/scripts/server/secondary/convoy_hijack.sqf
+++ b/Missionframework/scripts/server/secondary/convoy_hijack.sqf
@@ -31,7 +31,7 @@ private _boxes_loaded = 0;
while { _boxes_loaded < _boxes_amount } do {
_boxes_loaded = _boxes_loaded + 1;
sleep 0.5;
- private _next_box = [KPLIB_b_crateAmmo, 100, _spawnpos getPos [15, 135]] call KPLIB_fnc_createCrate;
+ private _next_box = [selectRandom KPLIB_crates, 100, _spawnpos getPos [15, 135]] call KPLIB_fnc_createCrate;
sleep 0.5;
[_next_box, 50] call _load_box_fnc;
};
@@ -56,8 +56,8 @@ _convoy_group setBehaviour "SAFE";
_convoy_group setCombatMode "GREEN";
_convoy_group setSpeedMode "LIMITED";
-while {(count (waypoints _convoy_group)) != 0} do {deleteWaypoint ((waypoints _convoy_group) select 0);};
-{_x doFollow leader _convoy_group} foreach units _convoy_group;
+{ deleteWaypoint _x } forEachReversed waypoints _convoy_group;
+{doStop _x; _x doFollow leader _convoy_group} foreach units _convoy_group;
_waypoint = _convoy_group addWaypoint [_convoy_destinations select 1, 0];
_waypoint setWaypointType "MOVE";
@@ -124,7 +124,7 @@ while { _mission_in_progress } do {
private _troop_driver_group = createGroup [KPLIB_side_enemy, true];
[ driver _troop_vehicle ] joinSilent _troop_driver_group;
sleep 1;
- while {(count (waypoints _troop_driver_group)) != 0} do {deleteWaypoint ((waypoints _troop_driver_group) select 0);};
+ { deleteWaypoint _x } forEachReversed waypoints _troop_driver_group;
_waypoint = _troop_driver_group addWaypoint [getpos _troop_vehicle, 0];
_waypoint setWaypointType "MOVE";
sleep 3;
diff --git a/Missionframework/scripts/server/secondary/fob_hunting.sqf b/Missionframework/scripts/server/secondary/fob_hunting.sqf
index 6e453a146..00a084fdf 100644
--- a/Missionframework/scripts/server/secondary/fob_hunting.sqf
+++ b/Missionframework/scripts/server/secondary/fob_hunting.sqf
@@ -8,7 +8,6 @@ used_positions pushBack _spawn_marker;
_base_position = markerpos _spawn_marker;
_base_objects = [];
_base_objectives = [];
-_base_defenders = [];
([] call (compile preprocessFileLineNumbers (selectRandom KPLIB_fob_templates))) params [
"_objects_to_build",
@@ -71,6 +70,7 @@ sleep 1;
{_x setDamage 0; _x allowDamage true;} foreach (_base_objectives + _base_objects);
_grpdefenders = createGroup [KPLIB_side_enemy, true];
+_grpdefenders setVariable ["acex_headless_blacklist", true, true];
_idxselected = [];
while {(count _idxselected) < _defenders_amount && (count _idxselected) < (count _defenders_to_build)} do {
@@ -88,7 +88,7 @@ while {(count _idxselected) < _defenders_amount && (count _idxselected) < (count
private _nextDefender = [_nextclass, _nextpos, _grpdefenders, "PRIVATE", 0.5] call KPLIB_fnc_createManagedUnit;
_nextDefender setdir _nextdir;
_nextDefender setpos _nextpos;
- [_nextDefender] spawn building_defence_ai;
+ [_nextDefender, "", true] spawn building_defence_ai;
} forEach _idxselected;
private _sentryMax = ceil ((3 + (floor (random 4))) * (sqrt (KPLIB_param_unitcap)));
@@ -99,7 +99,7 @@ for [{_idx=0}, {_idx < _sentryMax}, {_idx=_idx+1}] do {
[KPLIB_o_sentry, _base_sentry_pos, _grpsentry, "PRIVATE", 0.5] call KPLIB_fnc_createManagedUnit;
};
-while {(count (waypoints _grpsentry)) != 0} do {deleteWaypoint ((waypoints _grpsentry) select 0);};
+{ deleteWaypoint _x } forEachReversed waypoints _grpsentry;
private _waypoint = [];
{
_waypoint = _grpsentry addWaypoint [[((_base_position select 0) + (_x select 0)), ((_base_position select 1) + (_x select 1)), 0], -1];
@@ -112,7 +112,49 @@ private _waypoint = [];
_waypoint = _grpsentry addWaypoint [[(_base_position select 0) + ((_base_corners select 0) select 0), (_base_position select 1) + ((_base_corners select 0) select 1), 0], -1];
_waypoint setWaypointType "CYCLE";
-_objectives_alive = true;
+_base_staticDefence = [];
+_grpStaticHMG = createGroup [KPLIB_side_enemy, true];
+if !(isNil "KPLIB_o_turrets_HMG") then {
+ private _staticDefenceDistMin = 25;
+ private _staticDefenceDistMax = 50;
+ private _staticDefenceDist = _staticDefenceDistMin + (random (_staticDefenceDistMax - _staticDefenceDistMin));
+ private _staticDefenceAngle = random 360;
+ private _staticDefencePosX_1 = (_base_position select 0) + _staticDefenceDist * cos(_staticDefenceAngle);
+ private _staticDefencePosX_2 = (_base_position select 0) + _staticDefenceDist * cos(_staticDefenceAngle);
+ private _staticDefencePosY_1 = (_base_position select 1) + _staticDefenceDist * sin(_staticDefenceAngle);
+ private _staticDefencePosY_2 = (_base_position select 1) + _staticDefenceDist * sin(_staticDefenceAngle);
+ private _staticDefencePos_1 = [_staticDefencePosX_1, _staticDefencePosY_1];
+ private _staticDefencePos_2 = [_staticDefencePosX_2, _staticDefencePosY_2];
+ _staticDefencePos_1 = _staticDefencePos_1 findEmptyPosition [5, 50, KPLIB_b_crateAmmo];
+ _staticDefencePos_2 = _staticDefencePos_2 findEmptyPosition [5, 50, KPLIB_b_crateAmmo];
+ _staticDefenceHMG_1 = [_staticDefencePos_1, selectRandom KPLIB_o_turrets_HMG] call KPLIB_fnc_spawnVehicle;
+ _staticDefenceHMG_2 = [_staticDefencePos_2, selectRandom KPLIB_o_turrets_HMG] call KPLIB_fnc_spawnVehicle;
+ (crew _staticDefenceHMG_1) joinSilent _grpStaticHMG;
+ (crew _staticDefenceHMG_2) joinSilent _grpStaticHMG;
+ _base_staticDefence pushBack _staticDefenceHMG_1;
+ _base_staticDefence pushBack _staticDefenceHMG_2;
+};
+_grpStaticAA = createGroup [KPLIB_side_enemy, true];
+if !(isNil "KPLIB_o_turrets_AA") then {
+ private _staticDefenceDistMin = 50;
+ private _staticDefenceDistMax = 75;
+ private _staticDefenceDist = _staticDefenceDistMin + (random (_staticDefenceDistMax - _staticDefenceDistMin));
+ private _staticDefenceAngle = random 360;
+ private _staticDefencePosX_1 = (_base_position select 0) + _staticDefenceDist * cos(_staticDefenceAngle);
+ private _staticDefencePosX_2 = (_base_position select 0) + _staticDefenceDist * cos(_staticDefenceAngle);
+ private _staticDefencePosY_1 = (_base_position select 1) + _staticDefenceDist * sin(_staticDefenceAngle);
+ private _staticDefencePosY_2 = (_base_position select 1) + _staticDefenceDist * sin(_staticDefenceAngle);
+ private _staticDefencePos_1 = [_staticDefencePosX_1, _staticDefencePosY_1, (_base_position select 2)];
+ private _staticDefencePos_2 = [_staticDefencePosX_2, _staticDefencePosY_2, (_base_position select 2)];
+ _staticDefencePos_1 = _staticDefencePos_1 findEmptyPosition [5, 50, KPLIB_b_crateAmmo];
+ _staticDefencePos_2 = _staticDefencePos_2 findEmptyPosition [5, 50, KPLIB_b_crateAmmo];
+ _staticDefenceAA_1 = [_staticDefencePos_1, selectRandom KPLIB_o_turrets_AA] call KPLIB_fnc_spawnVehicle;
+ _staticDefenceAA_2 = [_staticDefencePos_2, selectRandom KPLIB_o_turrets_AA] call KPLIB_fnc_spawnVehicle;
+ (crew _staticDefenceAA_1) joinSilent _grpStaticAA;
+ (crew _staticDefenceAA_2) joinSilent _grpStaticAA;
+ _base_staticDefence pushBack _staticDefenceAA_1;
+ _base_staticDefence pushBack _staticDefenceAA_2;
+};
secondary_objective_position = _base_position;
secondary_objective_position_marker = [(((secondary_objective_position select 0) + 800) - random 1600), (((secondary_objective_position select 1) + 800) - random 1600), 0];
@@ -136,3 +178,14 @@ sleep 3;
[3] remoteExec ["remote_call_intel"];
KPLIB_secondary_in_progress = -1; publicVariable "KPLIB_secondary_in_progress";
+
+sleep 900;
+{deleteVehicle _x} forEach _base_objectives;
+{deleteVehicle _x} forEach units _grpdefenders;
+{deleteVehicle _x} forEach units _grpsentry;
+sleep 900;
+{objectParent _x deleteVehicleCrew _x} forEach units _grpStaticHMG;
+{objectParent _x deleteVehicleCrew _x} forEach units _grpStaticAA;
+sleep 900;
+{if (_x getVariable ["KPLIB_captured", false]) then {deleteVehicle _x};} forEach _base_staticDefence;
+{if (_x getVariable ["KPLIB_captured", false]) then {deleteVehicle _x};} forEach _base_objects;
diff --git a/Missionframework/scripts/server/secondary/rearm_outpost.sqf b/Missionframework/scripts/server/secondary/rearm_outpost.sqf
new file mode 100644
index 000000000..ec97cea97
--- /dev/null
+++ b/Missionframework/scripts/server/secondary/rearm_outpost.sqf
@@ -0,0 +1,112 @@
+// Initialize variables
+_ammo_present = false;
+_player_outpost = [];
+_required_value = 200;
+
+// Find a random friendly outpost owned by the player
+{
+ if (_x in KPLIB_sectors_military) then {
+ _player_outpost pushBack _x;
+ };
+} forEach KPLIB_sectors_player;
+
+// Check if outpost array is empty
+if(count _player_outpost isEqualTo 0) exitWith {
+ // If empty, throw error in log and call proper intel notification
+ ["There are no friendly outpost to spawn ammo at!", "ERROR"] call KPLIB_fnc_log;
+ [17] remoteExec ["remote_call_intel"];
+};
+
+// Select a random outpost from the player-owned towns array for the ammo drop-off
+_objective_outpost = selectRandom _player_outpost;
+
+
+// Create a 50m radius marker at the selected outpost
+secondary_objective_position = getMarkerPos _objective_outpost;
+secondary_objective_position_marker = secondary_objective_position;
+publicVariable "secondary_objective_position_marker";
+uiSleep 1;
+
+// Start the secondary mission
+KPLIB_secondary_in_progress = 3; publicVariable "KPLIB_secondary_in_progress";
+[15] remoteExec ["remote_call_intel"];
+
+// Add a note in the log
+[format ["Starting Rearm Outpost objective in %1", _objective_outpost], "NOTIFICATION"] call KPLIB_fnc_log;
+
+
+// Loop until 2x ammo crates have been brought to within 50m of objective
+while {!_ammo_present} do {
+
+ // Initialize total value of ammo crates to 0
+ _total_value = 0;
+ // Initialize _ammo_in_zone is array
+ _ammo_in_zone = [];
+
+ // Get list of all objects within the ammo check radius of the marker
+ _objects_to_check = vehicles inAreaArray [secondary_objective_position, 50, 50];
+
+ // Loop through all objects and check if they are the correct ammo crates and not currently attached to a vehicle
+ {
+ if (typeOf _x isEqualTo KPLIB_b_crateAmmo && isNull attachedTo _x) then {
+ // If they are the right crate, add to the ammo array to be counted
+ _ammo_in_zone pushBack _x;
+ };
+ } forEach _objects_to_check;
+
+ // If there are no ammo, wait for a period of time and check again
+ if (count _ammo_in_zone isEqualTo 0) then {
+ hintSilent "";
+ uiSleep 5;
+ } else {
+
+ // Loop through all ammo crates in the zone and add up their values
+ {_total_value = _total_value + (_x getVariable ["KPLIB_crate_value", 0]);} forEach _ammo_in_zone;
+
+ // If the total value is less than the required value, wait for a period of time and check again
+ if (_total_value < _required_value) then {
+
+ // Notify players of current ammo status in area
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 5, localize "STR_AMMO"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 4, localize "STR_AMMO"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 3, localize "STR_AMMO"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 2, localize "STR_AMMO"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_WAITING", _total_value, _required_value, 1, localize "STR_AMMO"];
+ uiSleep 1;
+ hintSilent format [localize "STR_SECONDARY_LOGIMISSION_CHECKING", _total_value, _required_value, localize "STR_AMMO"];
+ uiSleep 1;
+
+ } else {
+
+ _consume_value = _required_value;
+ {
+ private _crate_value = _x getVariable ["KPLIB_crate_value",0];
+ if (_consume_value != 0) then {
+ if (_consume_value >= _crate_value) then {
+ _consume_value = _consume_value - _crate_value;
+ _total_value = _total_value - _crate_value;
+ deleteVehicle _x;
+ } else {
+ _x setVariable ["KPLIB_crate_value", _crate_value - _consume_value, true];
+ _consume_value = 0;
+ };
+ } else {
+ };
+ } forEach _ammo_in_zone;
+ if (_consume_value == 0) then {_ammo_present = true;};
+ };
+ };
+};
+hintSilent "";
+
+KPLIB_enemyReadiness = round (KPLIB_enemyReadiness - 8);
+[16] remoteExec ["remote_call_intel"];
+stats_secondary_objectives = stats_secondary_objectives + 1;
+KPLIB_secondary_in_progress = -1; publicVariable "KPLIB_secondary_in_progress";
+uiSleep 1;
+[] spawn KPLIB_fnc_doSave;
+[format ["Rearm Outpost secondary objective complete at %1. reduced enemy readiness to %2",_objective_outpost, KPLIB_enemyReadiness], "NOTIFICATION"] call KPLIB_fnc_log;
diff --git a/Missionframework/scripts/server/secondary/search_and_rescue.sqf b/Missionframework/scripts/server/secondary/search_and_rescue.sqf
index 4f31ca022..9c4194258 100644
--- a/Missionframework/scripts/server/secondary/search_and_rescue.sqf
+++ b/Missionframework/scripts/server/secondary/search_and_rescue.sqf
@@ -26,7 +26,7 @@ sleep 2;
private _pilotUnits = units _pilotsGrp;
{
- [ _x, true ] spawn prisonner_ai;
+ [ _x, true] spawn prisonner_ai;
_x setDir (random 360);
sleep 0.5
} foreach (_pilotUnits);
@@ -43,7 +43,7 @@ private _patrolcorners = [
[_x, _patrolcorners select 0, _grppatrol, "PRIVATE", 0.5] call KPLIB_fnc_createManagedUnit;
} foreach ([] call KPLIB_fnc_getSquadComp);
-while {(count (waypoints _grppatrol)) != 0} do {deleteWaypoint ((waypoints _grppatrol) select 0);};
+{ deleteWaypoint _x } forEachReversed waypoints _grppatrol;
{
private _nextcorner = _x;
_waypoint = _grppatrol addWaypoint [_nextcorner,0];
@@ -55,7 +55,7 @@ while {(count (waypoints _grppatrol)) != 0} do {deleteWaypoint ((waypoints _grpp
_waypoint = _grppatrol addWaypoint [(_patrolcorners select 0), 0];
_waypoint setWaypointType "CYCLE";
-{_x doFollow (leader _grppatrol)} foreach units _grppatrol;
+{doStop _x; _x doFollow (leader _grppatrol)} foreach units _grppatrol;
private _grpsentry = createGroup [KPLIB_side_enemy, true];
private _nbsentry = 2 + (floor (random 3));
@@ -105,9 +105,13 @@ if ( _alive_crew_count == 0 ) then {
[8] remoteExec ["remote_call_intel"];
private _grp = createGroup [KPLIB_side_player, true];
{ [_x ] joinSilent _grp; } foreach _pilotUnits;
- while {(count (waypoints _grp)) != 0} do {deleteWaypoint ((waypoints _grp) select 0);};
- {_x doFollow (leader _grp)} foreach units _grp;
- { [ _x ] spawn { sleep 600; deleteVehicle (_this select 0) } } foreach _pilotUnits;
+ { deleteWaypoint _x } forEachReversed waypoints _grp;
+ {doStop _x; _x doFollow leader _grp} foreach units _grp;
+ { [ _x ] spawn {
+ sleep 600;
+ if (isNull objectParent (_this # 0)) then {deleteVehicle (_this # 0)} else {(objectParent (_this # 0)) deleteVehicleCrew (_this # 0)};
+ };
+ } foreach _pilotUnits;
};
resources_intel = resources_intel + (10 * _alive_crew_count);
diff --git a/Missionframework/scripts/server/sector/attack_in_progress_fob.sqf b/Missionframework/scripts/server/sector/attack_in_progress_fob.sqf
index 72bc4f80a..6d593e60e 100644
--- a/Missionframework/scripts/server/sector/attack_in_progress_fob.sqf
+++ b/Missionframework/scripts/server/sector/attack_in_progress_fob.sqf
@@ -55,7 +55,13 @@ if ( KPLIB_endgame == 0 ) then {
stats_fobs_lost = stats_fobs_lost + 1;
} else {
[_thispos, 3] remoteExec ["remote_call_fob"];
- {[_x] spawn prisonner_ai;} foreach ((_thispos nearEntities ["Man", KPLIB_range_sectorCapture * 0.8]) select {side group _x == KPLIB_side_enemy});
+ {
+ if (captive _x) then {
+ [_x, true] spawn prisonner_ai;
+ } else {
+ [_x] spawn prisonner_ai;
+ };
+ } foreach ((_thispos nearEntities ["CAManBase", KPLIB_range_sectorCapture * 0.8]) select {side group _x == KPLIB_side_enemy});
};
};
@@ -66,6 +72,6 @@ sleep 60;
if ( KPLIB_param_bluforDefenders ) then {
{
- if ( alive _x ) then { deleteVehicle _x };
+ if ( alive _x ) then { if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x}; };
} foreach units _grp;
};
diff --git a/Missionframework/scripts/server/sector/attack_in_progress_sector.sqf b/Missionframework/scripts/server/sector/attack_in_progress_sector.sqf
index f10d2b254..e16e6db11 100644
--- a/Missionframework/scripts/server/sector/attack_in_progress_sector.sqf
+++ b/Missionframework/scripts/server/sector/attack_in_progress_sector.sqf
@@ -68,7 +68,13 @@ if ( KPLIB_endgame == 0 ) then {
} forEach KPLIB_production;
} else {
[_sector, 3] remoteExec ["remote_call_sector"];
- {[_x] spawn prisonner_ai;} foreach (((markerpos _sector) nearEntities ["Man", KPLIB_range_sectorCapture * 0.8]) select {side group _x == KPLIB_side_enemy});
+ {
+ if (captive _x) then {
+ [_x, true] spawn prisonner_ai;
+ } else {
+ [_x] spawn prisonner_ai;
+ };
+ } foreach (((markerpos _sector) nearEntities ["CAManBase", KPLIB_range_sectorCapture * 0.8]) select {side group _x == KPLIB_side_enemy});
};
};
@@ -76,6 +82,6 @@ sleep 60;
if ( KPLIB_param_bluforDefenders ) then {
{
- if ( alive _x ) then { deleteVehicle _x };
+ if ( alive _x ) then { if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x}; };
} foreach units _grp;
};
diff --git a/Missionframework/scripts/server/sector/fn_destroyFob.sqf b/Missionframework/scripts/server/sector/fn_destroyFob.sqf
index 8438751a5..227380e3b 100644
--- a/Missionframework/scripts/server/sector/fn_destroyFob.sqf
+++ b/Missionframework/scripts/server/sector/fn_destroyFob.sqf
@@ -20,11 +20,11 @@ params [
["_fobPos", [], [[]]]
];
-private _buildings = [toLower KPLIB_b_fobBuilding];
+private _buildings = [toLowerANSI KPLIB_b_fobBuilding];
_buildings append KPLIB_b_deco_classes;
{
- if ((toLower (typeOf _x)) in _buildings) then {
+ if ((toLowerANSI (typeOf _x)) in _buildings) then {
_x spawn {
sleep ((random 4) + (random 4));
_this setDamage 1;
diff --git a/Missionframework/scripts/server/sector/fn_sectorMonitor.fsm b/Missionframework/scripts/server/sector/fn_sectorMonitor.fsm
index daec4c020..9054ea94c 100644
--- a/Missionframework/scripts/server/sector/fn_sectorMonitor.fsm
+++ b/Missionframework/scripts/server/sector/fn_sectorMonitor.fsm
@@ -194,7 +194,7 @@ class FSM
{
name = "Get_adjusted_sector";
itemno = 10;
- init = /*%FSM*/"_range = [_opforCount] call KPLIB_fnc_getSectorRange;"/*%FSM*/;
+ init = /*%FSM*/"_range = [_opforCount, _sector] call KPLIB_fnc_getSectorRange;"/*%FSM*/;
precondition = /*%FSM*/""/*%FSM*/;
class Links
{
@@ -368,4 +368,4 @@ class FSM
"Exit_1",
};
};
-/*%FSM*/
\ No newline at end of file
+/*%FSM*/
diff --git a/Missionframework/scripts/server/sector/fn_spawnSectorCrates.sqf b/Missionframework/scripts/server/sector/fn_spawnSectorCrates.sqf
index 776958799..fa5822fff 100644
--- a/Missionframework/scripts/server/sector/fn_spawnSectorCrates.sqf
+++ b/Missionframework/scripts/server/sector/fn_spawnSectorCrates.sqf
@@ -2,7 +2,7 @@
File: fn_spawnSectorCrates.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2020-04-28
- Last Update: 2020-05-25
+ Last Update: 2023-05-11
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -34,8 +34,8 @@ if !(_sector in KPLIB_sectorCratesSpawned) then {
for "_i" from 1 to _amount do {
while {_spawnPos isEqualTo []} do {
_j = _j + 1;
- _spawnPos = ((markerPos _sector) getPos [random 50, random 360]) findEmptyPosition [10, 40, KPLIB_b_crateAmmo];
- if (_j isEqualTo 10) exitWith {};
+ _spawnPos = ((markerPos _sector) getPos [random 50, random 360]) findEmptyPosition [3, 40, KPLIB_b_crateAmmo];
+ if (_j isEqualTo 10) exitWith {_spawnPos = ((markerPos _sector) getPos [random 50, random 360]) findEmptyPosition [0, 40, KPLIB_b_crateAmmo];};
};
if !(_spawnPos isEqualTo []) then {
[selectRandom KPLIB_crates, 100, _spawnpos] call KPLIB_fnc_createCrate;
diff --git a/Missionframework/scripts/server/sector/ied_manager.sqf b/Missionframework/scripts/server/sector/ied_manager.sqf
index 2a60055f5..7533652d7 100644
--- a/Missionframework/scripts/server/sector/ied_manager.sqf
+++ b/Missionframework/scripts/server/sector/ied_manager.sqf
@@ -37,11 +37,11 @@ if (!(isnull _roadobj)) then {
if (KPLIB_asymmetric_debug > 0) then {[format ["ied_manager.sqf -> IED %1 spawned at %2", _number, markerText _sector], "ASYMMETRIC"] remoteExecCall ["KPLIB_fnc_log", 2];};
while {_sector in KPLIB_sectors_active && mineActive _ied_obj && !_goes_boom} do {
- _nearinfantry = ((getpos _ied_obj) nearEntities ["Man", _activation_radius_infantry]) select {side _x == KPLIB_side_player};
- _nearvehicles = ((getpos _ied_obj) nearEntities [["Car", "Tank", "Air"], _activation_radius_vehicles]) select {side _x == KPLIB_side_player};
+ _nearinfantry = (_ied_obj nearEntities ["CAManBase", _activation_radius_infantry]) select {side _x == KPLIB_side_player};
+ _nearvehicles = (_ied_obj nearEntities [["Car", "Tank", "Air"], _activation_radius_vehicles]) select {side _x == KPLIB_side_player};
if (count _nearinfantry >= _infantry_trigger || count _nearvehicles >= _vehicle_trigger) then {
if (_ultra_strong) then {
- "Bomb_04_F" createVehicle (getpos _ied_obj);
+ createVehicle ["Bomb_04_F", _ied_obj, [], 0, "CAN_COLLIDE"];
deleteVehicle _ied_obj;
} else {
_ied_obj setDamage 1;
diff --git a/Missionframework/scripts/server/sector/manage_one_sector.sqf b/Missionframework/scripts/server/sector/manage_one_sector.sqf
index 0d7e84829..b2621811f 100644
--- a/Missionframework/scripts/server/sector/manage_one_sector.sqf
+++ b/Missionframework/scripts/server/sector/manage_one_sector.sqf
@@ -32,6 +32,14 @@ private _sector_despawn_tickets = BASE_TICKETS;
private _maximum_additional_tickets = (KPLIB_param_maxDespawnDelay * 60 / SECTOR_TICK_TIME);
private _popfactor = 1;
private _guerilla = false;
+private _lambsEnable = false;
+
+if (isNil "KPLIB_o_turrets_HMG") then {KPLIB_o_turrets_HMG = ["Turret_Array_Empty"];};
+if (isNil "KPLIB_o_turrets_GMG") then {KPLIB_o_turrets_GMG = ["Turret_Array_Empty"];};
+if (isNil "KPLIB_o_turrets_AT") then {KPLIB_o_turrets_AT = ["Turret_Array_Empty"];};
+if (isNil "KPLIB_o_turrets_AA") then {KPLIB_o_turrets_AA = ["Turret_Array_Empty"];};
+if (isNil "KPLIB_o_turrets_MORTAR") then {KPLIB_o_turrets_MORTAR = ["Turret_Array_Empty"];};
+if (isClass (configfile >> "CfgPatches" >> "lambs_wp")) then {_lambsEnable = true;};
if (KPLIB_param_unitcap < 1) then {_popfactor = KPLIB_param_unitcap;};
@@ -41,7 +49,7 @@ KPLIB_sectors_active pushback _sector; publicVariable "KPLIB_sectors_active";
private _opforcount = [] call KPLIB_fnc_getOpforCap;
[_sector, _opforcount] call wait_to_spawn_sector;
-if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount] call KPLIB_fnc_getSectorRange, KPLIB_side_player] call KPLIB_fnc_getUnitsCount) > 0)) then {
+if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount, _sector] call KPLIB_fnc_getSectorRange, KPLIB_side_player] call KPLIB_fnc_getUnitsCount) > 0)) then {
if (_sector in KPLIB_sectors_capital) then {
if (KPLIB_enemyReadiness < 30) then {_infsquad = "militia";};
@@ -51,13 +59,18 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
if (KPLIB_param_unitcap >= 1) then {_squad3 = ([_infsquad] call KPLIB_fnc_getSquadComp);};
if (KPLIB_param_unitcap >= 1.5) then {_squad4 = ([_infsquad] call KPLIB_fnc_getSquadComp);};
- _vehtospawn = [(selectRandom KPLIB_o_militiaVehicles),(selectRandom KPLIB_o_militiaVehicles)];
+ _vehtospawn = [(selectRandom KPLIB_o_militiaVehicles),(selectRandom KPLIB_o_militiaVehicles),(selectRandom KPLIB_o_turrets_HMG)];
if ((random 100) > (66 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_militiaVehicles);};
if ((random 100) > (50 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_militiaVehicles);};
+ if ((random 100) > (66 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);};
+ if ((random 100) > (50 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_AT);};
if (_infsquad == "army") then {
_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);
_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);
+ _vehtospawn pushback (selectRandom KPLIB_o_turrets_AT);
if ((random 100) > (33 / KPLIB_param_difficulty)) then {_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);};
+ if ((random 100) > (33 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_AA);};
+ if ((random 100) > (33 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_GMG);};
};
_spawncivs = true;
@@ -86,10 +99,14 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
if ((random 100) > (66 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_militiaVehicles);};
if ((random 100) > (33 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_militiaVehicles);};
+ if ((random 100) > (33 / KPLIB_param_difficulty)) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);};
+ if (KPLIB_enemyReadiness > 50) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);};
if (_infsquad == "army") then {
_vehtospawn pushback (selectRandom KPLIB_o_militiaVehicles);
+ _vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);
if ((random 100) > (33 / KPLIB_param_difficulty)) then {
_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);
+ _vehtospawn pushback (selectRandom KPLIB_o_turrets_AT);
_squad3 = ([_infsquad] call KPLIB_fnc_getSquadComp);
};
};
@@ -116,12 +133,19 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
_squad2 = ([] call KPLIB_fnc_getSquadComp);
if (KPLIB_param_unitcap >= 1.5) then {_squad3 = ([] call KPLIB_fnc_getSquadComp);};
- _vehtospawn = [([] call KPLIB_fnc_getAdaptiveVehicle),([] call KPLIB_fnc_getAdaptiveVehicle)];
+ _vehtospawn = [([] call KPLIB_fnc_getAdaptiveVehicle),([] call KPLIB_fnc_getAdaptiveVehicle),(selectRandom KPLIB_o_turrets_HMG),(selectRandom KPLIB_o_turrets_AT),(selectRandom KPLIB_o_turrets_MORTAR)];
if ((random 100) > (33 / KPLIB_param_difficulty)) then {
_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);
+ _vehtospawn pushback ((selectRandom KPLIB_o_turrets_HMG));
+ _vehtospawn pushback ((selectRandom KPLIB_o_turrets_MORTAR));
_squad4 = ([] call KPLIB_fnc_getSquadComp);
};
- if ((random 100) > (66 / KPLIB_param_difficulty)) then {_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);};
+ if ((random 100) > (66 / KPLIB_param_difficulty)) then {
+ _vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);
+ _vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);
+ _vehtospawn pushback ((selectRandom KPLIB_o_turrets_GMG));
+ _vehtospawn pushback ((selectRandom KPLIB_o_turrets_AA));
+ };
_spawncivs = false;
@@ -137,6 +161,8 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
if ((random 100) > 66) then {_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);};
if ((random 100) > 33) then {_vehtospawn pushback (selectRandom KPLIB_o_militiaVehicles);};
+ if ((random 100) > 33) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);};
+ if (KPLIB_enemyReadiness > 50) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);};
_spawncivs = false;
@@ -161,6 +187,7 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
if (KPLIB_param_unitcap >= 1.5) then {_squad3 = ([] call KPLIB_fnc_getSquadComp);};
if((random 100) > 95) then {_vehtospawn pushback ([] call KPLIB_fnc_getAdaptiveVehicle);};
+ if (KPLIB_enemyReadiness > 50) then {_vehtospawn pushback (selectRandom KPLIB_o_turrets_HMG);};
_spawncivs = false;
@@ -176,11 +203,15 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
};
{
+ if (_x isEqualTo "Turret_Array_Empty") exitWith {};
_vehicle = [_sectorpos, _x] call KPLIB_fnc_spawnVehicle;
[group ((crew _vehicle) select 0),_sectorpos] spawn add_defense_waypoints;
_managed_units pushback _vehicle;
{_managed_units pushback _x;} foreach (crew _vehicle);
sleep 0.25;
+ if ((_x in KPLIB_o_turrets_MORTAR) && _lambsEnable) then {
+ [group ((crew _vehicle) select 0)] call lambs_wp_fnc_taskArtilleryRegister;
+ };
} forEach _vehtospawn;
if (_building_ai_max > 0) then {
@@ -253,8 +284,14 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
_stopit = true;
- {[_x] spawn prisonner_ai;} forEach ((markerPos _sector) nearEntities [["Man"], _local_capture_size * 1.2]);
-
+ {
+ if (captive _x) then {
+ [_x, true] spawn prisonner_ai;
+ } else {
+ [_x] spawn prisonner_ai;
+ };
+ } forEach ((markerPos _sector) nearEntities [["CAManBase"], _local_capture_size * 1.2]);
+
sleep 60;
KPLIB_sectors_active = KPLIB_sectors_active - [_sector]; publicVariable "KPLIB_sectors_active";
@@ -262,9 +299,9 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
sleep 600;
{
- if (_x isKindOf "Man") then {
+ if (_x isKindOf "CAManBase") then {
if (side group _x != KPLIB_side_player) then {
- deleteVehicle _x;
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
};
} else {
if (!isNull _x) then {
@@ -273,7 +310,7 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
};
} forEach _managed_units;
} else {
- if (([_sectorpos, (([_opforcount] call KPLIB_fnc_getSectorRange) + 300), KPLIB_side_player] call KPLIB_fnc_getUnitsCount) == 0) then {
+ if (([_sectorpos, (([_opforcount, _sector] call KPLIB_fnc_getSectorRange) + 300), KPLIB_side_player] call KPLIB_fnc_getUnitsCount) == 0) then {
_sector_despawn_tickets = _sector_despawn_tickets - 1;
} else {
// start counting running minutes after ADDITIONAL_TICKETS_DELAY
@@ -288,8 +325,8 @@ if ((!(_sector in KPLIB_sectors_player)) && (([markerPos _sector, [_opforcount]
if (_sector_despawn_tickets <= 0) then {
{
- if (_x isKindOf "Man") then {
- deleteVehicle _x;
+ if (_x isKindOf "CAManBase") then {
+ if (isNull objectParent _x) then {deleteVehicle _x} else {(objectParent _x) deleteVehicleCrew _x};
} else {
if (!isNull _x) then {
[_x] call KPLIB_fnc_cleanOpforVehicle;
diff --git a/Missionframework/scripts/server/sector/wait_to_spawn_sector.sqf b/Missionframework/scripts/server/sector/wait_to_spawn_sector.sqf
index e67bdc17e..028d7ca55 100644
--- a/Missionframework/scripts/server/sector/wait_to_spawn_sector.sqf
+++ b/Missionframework/scripts/server/sector/wait_to_spawn_sector.sqf
@@ -5,7 +5,7 @@ params ["_sector", "_opforcount"];
private _start = diag_tickTime;
[format ["Sector %1 (%2) - Waiting to spawn sector...", (markerText _sector), _sector], "SECTORSPAWN"] remoteExecCall ["KPLIB_fnc_log", 2];
-private _corrected_size = [_opforcount] call KPLIB_fnc_getSectorRange;
+private _corrected_size = [_opforcount, _sector] call KPLIB_fnc_getSectorRange;
sleep 0.1;
private _unitscount = [markerPos _sector, _corrected_size , KPLIB_side_player] call KPLIB_fnc_getUnitsCount;
diff --git a/Missionframework/scripts/server/support/fn_createSuppModules.sqf b/Missionframework/scripts/server/support/fn_createSuppModules.sqf
index e07e04b89..fc0b564ee 100644
--- a/Missionframework/scripts/server/support/fn_createSuppModules.sqf
+++ b/Missionframework/scripts/server/support/fn_createSuppModules.sqf
@@ -2,7 +2,7 @@
File: fn_createSuppModules.sqf
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
Date: 2020-04-21
- Last Update: 2020-05-23
+ Last Update: 2023-03-07
License: MIT License - http://www.opensource.org/licenses/MIT
Description:
@@ -40,9 +40,13 @@ publicVariable "KPLIB_param_supportModule_arty";
[KPLIB_param_supportModule_req] call BIS_fnc_moduleSupportsInitRequester;
[KPLIB_param_supportModule_arty] call BIS_fnc_moduleSupportsInitProvider;
- // Hide the three HQ entities created at zero pos. BIS scripts only hides them local for the creator
+ // Hide and move the three HQ entities created at zero pos to gamelogic position. BIS scripts only hides them local for the creator
waitUntil {!isNil "BIS_SUPP_HQ_WEST" && !isNil "BIS_SUPP_HQ_EAST" && !isNil "BIS_SUPP_HQ_GUER"};
{
+ _x setPosASL getPosASL gamelogic; // avoid HQ entities are drown and dying
+ _x setCaptive true; // hide HQ entities from radiotower detector and unitcap
+ _x setUnitCombatMode "BLUE"; // setes never engage
+ removeAllWeapons _x; // avoid HQ entities becoming killing machines
hideObjectGlobal _x;
} forEach [BIS_SUPP_HQ_WEST, BIS_SUPP_HQ_EAST, BIS_SUPP_HQ_GUER]
};
diff --git a/Missionframework/scripts/shared/diagnostics.sqf b/Missionframework/scripts/shared/diagnostics.sqf
index 017c7a3db..8086a7e4c 100644
--- a/Missionframework/scripts/shared/diagnostics.sqf
+++ b/Missionframework/scripts/shared/diagnostics.sqf
@@ -14,6 +14,7 @@ private _source = "";
[format ["Preset arsenal: %1", KPLIB_presetArsenal], "MISSIONSTART"] call KPLIB_fnc_log;
[format ["CBA: %1", KPPLM_CBA], "MISSIONSTART"] call KPLIB_fnc_log;
[format ["ACE: %1", KPLIB_ace], "MISSIONSTART"] call KPLIB_fnc_log;
+[format ["ACE Medical: %1", KPLIB_ace_med], "MISSIONSTART"] call KPLIB_fnc_log;
[format ["KP Ranks: %1", KPPLM_KPR], "MISSIONSTART"] call KPLIB_fnc_log;
["------------------------------------", "MISSIONSTART"] call KPLIB_fnc_log;
diff --git a/Missionframework/scripts/shared/fetch_params.sqf b/Missionframework/scripts/shared/fetch_params.sqf
index c2c0839e6..1311ee06a 100644
--- a/Missionframework/scripts/shared/fetch_params.sqf
+++ b/Missionframework/scripts/shared/fetch_params.sqf
@@ -2,6 +2,10 @@
// Check if ACE is running
if (isClass (configfile >> "CfgPatches" >> "ace_common")) then {KPLIB_ace = true; ["ACE detected. Deactivating resupply script from Liberation.", "MOD"] call KPLIB_fnc_log;} else {KPLIB_ace = false};
+// Check if ACE Medical is running
+if (isClass (configfile >> "CfgPatches" >> "ace_medical")) then {KPLIB_ace_med = true; ["ACE Medical detected. switch some script for ACE Medical.", "MOD"] call KPLIB_fnc_log;} else {KPLIB_ace_med = false};
+// Check if KLPQ is running
+if (isClass (configfile >> "CfgPatches" >> "klpq_musicRadio")) then {KPLIB_klpq = true;} else {KPLIB_klpq = false};
/* Not saveable params */
KPLIB_param_wipe_savegame_1 = ["WipeSave1", 0] call bis_fnc_getParamValue;
@@ -19,7 +23,6 @@ KPLIB_highcommand_debug = ["DebugHighCommand", 0] call bis_fnc_getParamValue;
KP_load_params = ["LoadSaveParams", 1] call BIS_fnc_getParamValue;
if(isServer) then {
- private _start = diag_tickTime;
/* Saveable params */
["----- Server starts parameter initialization", "PARAM"] call KPLIB_fnc_log;
switch (KP_load_params) do {
@@ -61,7 +64,7 @@ if(isServer) then {
GET_PARAM(KPLIB_param_victoryCondition, "VictoryCondition", 0);
// Deactivate BI Revive when ACE Medical is running
- if (isClass (configfile >> "CfgPatches" >> "ace_medical")) then {
+ if (KPLIB_ace_med) then {
bis_reviveParam_mode = 0; publicVariable "bis_reviveParam_mode";
["ACE Medical detected. Deactivating BI Revive System.", "PARAM"] call KPLIB_fnc_log;
} else {
@@ -87,6 +90,11 @@ if(isServer) then {
GET_PARAM(KPLIB_param_mobileRespawnCooldown, "RespawnCooldown", 900);
GET_PARAM_BOOL(KPLIB_param_mobileArsenal, "MobileArsenal", 1);
GET_PARAM_BOOL(KPLIB_param_attackedFobRespawn, "AttackedSectorRespawn", 0);
+ GET_PARAM_BOOL(KPLIB_param_fullHeal, "FOBFullHeal", 1);
+ GET_PARAM_BOOL(KPLIB_param_fullHealCheckEnemies, "FOBFullHealCheckEnemies", 1);
+ GET_PARAM(KPLIB_param_fullHealCooldown, "FOBFullHealCooldown", 300);
+ GET_PARAM_BOOL(KPLIB_param_timeweather, "FOBTimeWeather", 1);
+ GET_PARAM_BOOL(KPLIB_param_fuelconsumption, "FuelConsumption", 1);
GET_PARAM_BOOL(KPLIB_param_logistic, "AiLogistics", 1);
GET_PARAM_BOOL(KPLIB_param_buildingDamaged, "CR_Building", 0);
GET_PARAM(KPLIB_param_halo, "HaloJump", 1);
@@ -111,11 +119,6 @@ if(isServer) then {
GREUH_allow_mapmarkers = KPLIB_param_mapMarkers; publicVariable "GREUH_allow_mapmarkers";
GREUH_allow_platoonview = KPLIB_param_mapMarkers; publicVariable "GREUH_allow_platoonview";
-
- KPLIB_param_serverInitDone = true;
- publicVariable "KPLIB_param_serverInitDone";
-
- [format ["----- Server finished parameter initialization - Time needed: %1 seconds", diag_ticktime - _start], "PARAM"] call KPLIB_fnc_log;
};
// Fix for not working float values in mission params
@@ -210,6 +213,13 @@ switch (KPLIB_param_victoryCondition) do {
};
};
+if(isServer) then {
+ private _start = diag_tickTime;
+ KPLIB_param_serverInitDone = true;
+ publicVariable "KPLIB_param_serverInitDone";
+ [format ["----- Server finished parameter initialization - Time needed: %1 seconds", diag_ticktime - _start], "PARAM"] call KPLIB_fnc_log;
+};
+
if (!isDedicated && hasInterface) then {
// Create diary section for an overview of actual mission parameters
player createDiarySubject ["parameters", "Mission Parameters"];
@@ -398,6 +408,26 @@ if (!isDedicated && hasInterface) then {
_value = if (KPLIB_param_attackedFobRespawn) then {localize "STR_PARAMS_ENABLED";} else {localize "STR_PARAMS_DISABLED";};
_text = _text + format ["%1
%2
", _param, _value];
+ _param = localize "STR_PARAMS_FOBFULLHEAL";
+ _value = if (KPLIB_param_fullHeal) then {localize "STR_PARAMS_ENABLED";} else {localize "STR_PARAMS_DISABLED";};
+ _text = _text + format ["%1
%2
", _param, _value];
+
+ _param = localize "STR_PARAMS_FOBFULLHEAL_CHECKENEMIES";
+ _value = if (KPLIB_param_fullHealCheckEnemies) then {localize "STR_PARAMS_ENABLED";} else {localize "STR_PARAMS_DISABLED";};
+ _text = _text + format ["%1
%2
", _param, _value];
+
+ _param = localize "STR_PARAMS_FOBFULLHEAL_COOLDOWN";
+ _value = if (KPLIB_param_fullHealCooldown == 0) then {localize "STR_PARAMS_DISABLED";} else {str (KPLIB_param_fullHealCooldown / 60);};
+ _text = _text + format ["%1
%2
", _param, _value];
+
+ _param = localize "STR_PARAMS_FOBTIMEWEATHER";
+ _value = if (KPLIB_param_timeweather) then {localize "STR_PARAMS_ENABLED";} else {localize "STR_PARAMS_DISABLED";};
+ _text = _text + format ["%1
%2
", _param, _value];
+
+ _param = localize "STR_PARAMS_FUELCONSUMPTION";
+ _value = if (KPLIB_param_fuelconsumption) then {localize "STR_PARAMS_ENABLED";} else {localize "STR_PARAMS_DISABLED";};
+ _text = _text + format ["%1
%2
", _param, _value];
+
_param = localize "STR_PARAMS_AILOGISTICS";
_value = if (KPLIB_param_logistic) then {localize "STR_PARAMS_ENABLED";} else {localize "STR_PARAMS_DISABLED";};
_text = _text + format ["%1
%2
", _param, _value];
diff --git a/Missionframework/scripts/shared/kill_manager.sqf b/Missionframework/scripts/shared/kill_manager.sqf
index 429250feb..27515d045 100644
--- a/Missionframework/scripts/shared/kill_manager.sqf
+++ b/Missionframework/scripts/shared/kill_manager.sqf
@@ -22,17 +22,17 @@ params ["_unit", "_killer"];
};
// Weights adjustments depending on what vehicle the BLUFOR killer used
- if (_killer isKindOf "Man") then {
+ if (_killer isKindOf "CAManBase") then {
infantry_weight = infantry_weight + 1;
armor_weight = armor_weight - 0.66;
air_weight = air_weight - 0.66;
} else {
- if ((toLower (typeOf (vehicle _killer))) in KPLIB_allLandVeh_classes) then {
+ if ((toLowerANSI (typeOf (vehicle _killer))) in KPLIB_allLandVeh_classes) then {
infantry_weight = infantry_weight - 0.66;
armor_weight = armor_weight + 1;
air_weight = air_weight - 0.66;
};
- if ((toLower (typeOf (vehicle _killer))) in KPLIB_allAirVeh_classes) then {
+ if ((toLowerANSI (typeOf (vehicle _killer))) in KPLIB_allAirVeh_classes) then {
infantry_weight = infantry_weight - 0.66;
armor_weight = armor_weight - 0.66;
air_weight = air_weight + 1;
@@ -55,7 +55,7 @@ params ["_unit", "_killer"];
};
// Check for Man or Vehicle
- if (_unit isKindOf "Man") then {
+ if (_unit isKindOf "CAManBase") then {
// OPFOR casualty
if (side (group _unit) == KPLIB_side_enemy) then {
@@ -91,7 +91,7 @@ params ["_unit", "_killer"];
// Killed by BLUFOR
if (side _killer == KPLIB_side_player) then {
if (KPLIB_asymmetric_debug > 0) then {[format ["Guerilla unit killed by: %1", name _killer], "ASYMMETRIC"] call KPLIB_fnc_log;};
- [3, [(name _unit)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
+ [3, [(name _unit), (name _killer)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
stats_resistance_teamkills = stats_resistance_teamkills + 1;
[KPLIB_cr_resistance_penalty, true] spawn F_cr_changeCR;
};
@@ -110,7 +110,7 @@ params ["_unit", "_killer"];
// Killed by BLUFOR
if (side _killer == KPLIB_side_player) then {
if (KPLIB_civrep_debug > 0) then {[format ["Civilian killed by: %1", name _killer], "CIVREP"] call KPLIB_fnc_log;};
- [2, [(name _unit)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
+ [2, [(name _unit), (name _killer)]] remoteExec ["KPLIB_fnc_crGlobalMsg"];
[KPLIB_cr_kill_penalty, true] spawn F_cr_changeCR;
};
@@ -121,7 +121,7 @@ params ["_unit", "_killer"];
};
} else {
// Enemy vehicle casualty
- if ((toLower (typeof _unit)) in KPLIB_o_allVeh_classes) then {
+ if ((toLowerANSI (typeof _unit)) in KPLIB_o_allVeh_classes) then {
stats_opfor_vehicles_killed = stats_opfor_vehicles_killed + 1;
// Destroyed by player
diff --git a/Missionframework/stringtable.xml b/Missionframework/stringtable.xml
index 4d689bece..8582d0714 100644
--- a/Missionframework/stringtable.xml
+++ b/Missionframework/stringtable.xml
@@ -1,12 +1,12 @@
-
+
- CTI 34 KP Liberation v0.96.8 dev
+ CTI 34 KP Liberation v0.96.8apr
- v0.96.8 dev
+ v0.96.8apr
+
+
+ Liberate the region from the enemy oppression! Strategy will be key! Good luck soldiers.
+ Avec le pouvoir de la Liberté et de la Démocratie votre mission est de libérer Altis de l'oppression de l'OPFOR.
+ Befreie das Gebiet von der feindlichen Unterdrückung mit der Kraft von Freiheit und Demokratie
+ Con el poder de la Libertad y la Democracia, debes liberar Altis de la opresión del OPFOR
+ С помощью сил "свободы" и "демократии" вы должны освободить регион от угнетения OPFOR.
+ Libera la regione dall'oppressione nemica! La strategia è la chiave! Buona fortuna soldati.
+ 从敌人手中解放这个地区!战略是制胜关键!士兵们祝你们好运。
+ 從敵人手中解放此區域!戰略是致勝關鍵!士兵們,祝好運!
+ Bu bölgeyi düşman etkisinden kurtar! Strateji anahtardır! Bol şanslar askerler.
+ Libere a região da opressão inimiga! Estratégia será essencial! Boa sorte infantaria.
+ 적의 수중에서 이 지역을 탈환하자! 전략이 승리의 관건이다! 병사들이여, 행운을 빈다.
+ Osvoboďte oblast od nepřátelského útisku. Strategie je klíčová! Hodně štěstí vojáci.
+ この地域を敵軍の圧制から解放しろ! 戦略がカギとなるぞ! 兵士よ、幸運を祈る。
+
+
+ [GREUH] and the Killah Potatoes present
+
+
+ [GREUH] Zbug & McKeewa, KP Liberation Dev Team, Apricot_ale, MoistBois
+
+
+ APR Tweaked KP Liberation!<br/>Check github.com/Apricot-ale/KP-Liberation-APR to more info.
+
+
+ github.com/Apricot-ale/KP-Liberation-APR
+
+
+ Spartan 01
+
+
+ OPERATION START POINT
+ OPERATIONSBEGINN
+ INICIO DE LA OPERACIÓN
+ СТАРТ ОПЕРАЦИИ
+ INIZIO OPERAZIONE
+ 作战起始点
+ 作战起始点
+ OPERASYON BAŞLANGICI
+ INÍCIO DA OPERAÇÃO
+ 작전 시작 지점
+ ZAČÁTEK OPERACE
+ 作戦開始地点
Deploy
@@ -64,6 +111,7 @@
Mobilizar
배치
Výsadek
+ 出撃
Deployment in progress ...
@@ -78,6 +126,7 @@
Mobilização em andamento...
배치중입니다...
Probíhá Výsadek...
+ 戦地へ出撃中です ...
Close
@@ -92,6 +141,7 @@
Fechar
닫기
Zavřít
+ 閉じる
YOU ARE WOUNDED
@@ -106,6 +156,7 @@
VOCÊ ESTÁ FERIDO!
부상당했습니다.
JSI V BEZVĚDOMÍ
+ あなたは負傷した
-- BUILD --
@@ -120,6 +171,7 @@
-- CONSTRUIR --
-- 건 설 --
-- STAVĚT --
+ -- 製造 --
BUILD MENU
@@ -134,6 +186,7 @@
MENU DE CONSTRUÇÃO
건설메뉴
MENU STAVĚNÍ
+ 製造メニュー
Build
@@ -148,6 +201,7 @@
Construir
건설/배치
Postavit
+ 製造する
Supplies
@@ -162,6 +216,7 @@
Suprimentos
보급품
Zásoby
+ サプライ
Ammunition
@@ -176,6 +231,7 @@
Munição
탄약
Munice
+ 弾薬
Fuel
@@ -190,6 +246,7 @@
Combustível
연료
Palivo
+ 燃料
Bleedout in %1 seconds
@@ -204,6 +261,7 @@
Morte por hemorragia em %1 segundos
%1 초 후 의식을 잃거나 과다출혈로 사망합니다.
Vykrvácíš za %1 vteřin
+ のこり %1 秒で失血する
Stabilized
@@ -218,6 +276,7 @@
Hemorragia estancada
출혈이 멈추어 안정되었습니다.
Stabilizován
+ 容体は安定した
-- Rotation
@@ -232,6 +291,7 @@
-- Rotação
-- 회전
-- Otočit
+ -- 回転
-- Build
@@ -246,6 +306,7 @@
-- Construir
-- 건설(설치)
-- Postavit
+ -- 製造
-- Build and Repeat
@@ -260,6 +321,7 @@
-- Construir e repetir
-- 반복 건설(설치)
-- Postavit a Opakovat
+ -- 連続して製造
-- Cancel
@@ -274,6 +336,7 @@
-- Cancelar
-- 취소
-- Zrušit
+ -- 取消
Building canceled.
@@ -288,6 +351,7 @@
Construção cancelada.
건설(설치) 취소
Stavění zrušeno
+ 製造を取り消した。
Building confirmed.
@@ -302,6 +366,7 @@
Construção confirmada.
건설(설치) 완료
Stavění potvrzeno
+ 製造を完了した。
Can't place here: there are %1 object(s) within %2 meters of the object position.
@@ -316,6 +381,7 @@
Impossível inserir aqui: Há %1 objeto(s) dentro de %2 metros da posição deste item.
건설(설치) 불가 : 설치하고자 하는 위치에 %1 개의 객체가 %2 미터 안에 있습니다.
Nelze stavět, poblíž je %1 objekt(ů) ve vzdálenosti %2 metrů od pozice objektu
+ 設置不可: %1 個のオブジェクトが %2 メートル以内に存在します。
This position is valid.
@@ -330,6 +396,7 @@
Esta posição é válida.
건설(설치) 가능
Pozice je správná
+ 設置可能です。
-- ARSENAL --
@@ -344,6 +411,7 @@
-- ARSENAL --
-- 무기고 --
-- ARZENÁL --
+ -- アーセナル --
-- LOAD CRATE
@@ -358,6 +426,7 @@
-- CARREGAR CAIXA NO TRANSPORTE
-- 군수물자 적재
-- NALOŽIT BEDNU
+ -- 貨物を積載
-- UNLOAD CRATES
@@ -372,6 +441,7 @@
-- DESCARREGAR CAIXAS
-- 군수물자 하역
-- VYLOŽIT BEDNU
+ -- 貨物を降ろす
-- LOAD TO VEHICLE
@@ -382,6 +452,7 @@
-- 차량에 적재
-- ARACA YÜKLE
-- NALOŽIT DO VOZIDLA
+ -- 車両に積載する
-- UNLOAD FROM VEHICLE
@@ -392,6 +463,7 @@
-- 차량에서 하역
-- ARAÇTAN İNDİR
-- VYLOŽENÍ Z VOZIDLA
+ -- 車両から降ろす
-- NO TRANSPORT VEHICLES NEARBY
@@ -402,6 +474,7 @@
-- 주변에 수송차량이 없습니다.
-- YAKINLARDA NAKLİYE ARACI YOK
-- NELZE NALOŽIT
+ -- 積載可能な車両が近くにありません
Ammo box successfully loaded on the transport vehicle.
@@ -416,6 +489,7 @@
Caixa de munição carregada com sucesso no veículo de transporte.
군수물자를 수송차량에 성공적으로 적재하였습니다.
Bedna úspěšně naložena do vozidla.
+ 貨物の積載を完了しました。
Ammo box successfully unloaded from the transport vehicle.
@@ -430,6 +504,7 @@
Caixa de munição descarregada com sucesso do veículo de transporte.
군수물자를 수송차량에서 성공적으로 하역하였습니다.
Bedna úspěšně vyložena z vozidla
+ 貨物の荷卸を完了しました。
There is no nearby vehicle capable of carrying the ammo box.
@@ -444,6 +519,103 @@
Não existe veículo nas proximidades capaz de carregar a caixa de munição.
주변에 군수물자를 수송할 수 있는 차량이 없습니다.
V blízkosti není vozidlo schopné přepravovat bedny
+ 貨物を搭載可能な車両が近くにありません。
+
+
+ Enable KP Fuel Consumption System
+ KP 燃料消費量増加システムを有効化
+
+
+ FULL HEAL Action at FOB and Medical Facility and Huron Medical Container
+ 完全治療をFOBや医療施設、Huron医療コンテナで行えるようにする
+
+
+ FULL HEAL disabled by if enemy is nearby
+ 完全治療を敵が近くにいる場合に無効化
+
+
+ FULL HEAL Cooldown (minutes)
+ 完全治療のクールダウン(分)
+
+
+ -- FULL HEAL --
+ -- 完全治療 --
+
+
+ Cannot heal: hostile forces nearby.
+ 治療不可: 敵軍が近くにいます。
+
+
+ You have fully healed
+ 負傷が完全に治療されました
+
+
+ You have been fully healed\nby %1
+ %1 によって\n負傷が完全に治療されました
+
+
+ FULL HEAL was attempted\nby %2\nbut it's still on cooldown.\nAvailable in %1 minutes.
+ %2 によって\n完全治療が試行されましたが、\n現在クールタイム中です。\n残り %1 分後に利用可能になります。
+
+
+ FULL HEAL was attempted\nbut it's still on cooldown.\nAvailable in %1 minutes.
+ 完全治療が試行されましたが、\n現在クールタイム中です。\n残り %1 分後に利用可能になります。
+
+
+ Allow Time Skip and Clear Fog from Action menu in FOB
+ FOBのアクションメニューから時間スキップと霧を晴らすのを許可する
+
+
+ -- Time Skip / Clear Fog --
+ -- 時間スキップ / 霧を晴らす --
+
+
+ Skip time to 9 AM/PM
+ 午前/午後9時まで時間をスキップ
+
+
+ Screen will black while transition!
+ スキップ時、画面が暗転します!
+
+
+ Please ensure safety before.
+ 安全を確保してください。
+
+
+ After 4:00 PM (1600), time is skipped until 9:00 AM (0900).
+ 午後4時以降は午前9時までスキップします。
+
+
+ After 8:00 AM (0800), time is skipped until 9:00 PM (2100).
+ 午前8時以降は午後9時までスキップします。
+
+
+ Skip Time
+ 時間をスキップ
+
+
+ Clear Fog
+ 霧を晴らす
+
+
+ Time skip will be performed\nafter %1 seconds.\nPlease stay in safe position!
+ %1 秒後に\n時間スキップが行われます。\n安全な位置で待機してください!
+
+
+ Time skip will be performed\nnow.\nPlease stay in safe position!
+ まもなく\n時間スキップが行われます。\n安全な位置で待機してください!
+
+
+ Good morning! It's now 9:00 AM.
+ おはようございます! 朝9時になりました。
+
+
+ It's now 9:00 PM. Don't forget the lights!
+ 夜9時になりました。 明かりを忘れずに!
+
+
+ The fog situation has start improve.
+ 霧の状況は改善に向かっている。
-- DEPLOY FOB --
@@ -458,6 +630,7 @@
-- INSTALAR FOB --
-- 전초기지 설치 --
-- POSTAVIT FOB --
+ -- FOBを設置する --
Can't deploy a new FOB here, you must be at least %1 meters away from every other FOB. Nearest FOB is %2 meters away.
@@ -472,6 +645,7 @@
Não é possível instalar a FOB aqui, você precisa estar no mínimo a %1 metros de distância de outra FOB. A FOB mais próxima está a %2 metros.
전초기지를 설치할 수 없습니다. 다른 전초기지로부터 %1 미터 떨어져 있어야 합니다. 현재 가장 가까운 전초기지와 %2 미터 떨어져 있습니다.
Zde Nelze postavit nové FOB, musí být vzdáleno %1 metrů od jakékoliv jiné FOB. Nejbližší FPB je vzdáleno %2 metrů.
+ FOBをここに設置することはできません。 %1 メートル以上他のFOBから離す必要があります。 最も近いFOBは %2 にあります。
Can't deploy a new FOB here, you must be at least %1 meters away from every capturable zone. Nearest zone is %2 meters away.
@@ -486,6 +660,7 @@
Não é possível instalar a FOB aqui, você precisa estar no mínimo a %1 metros de distância de qualquer setor capturável. O setor mais próima está a %2 metros.
전초기지를 설치할 수 없습니다. 점령지에서 %1 미터 떨어져 있어야 합니다. 현재 가장 가까운 점령지는 %2 미터 떨어져 있습니다.
Zde Nelze postavit nové FOB, musí být vzdáleno %1 metrů od jakékoliv zabratelné zóny. Nejbližší zóna je vzdálena %2 metrů.
+ FOBをここに設置することはできません。 %1 メートル以上他のセクターから離す必要があります。 最も近いセクターは %2 にあります。
Can't build on water.
@@ -500,6 +675,7 @@
Não é possível construir na água.
물에는 전초기지를 설치 할 수 없습니다.
Nemůžeš stavět na vodě
+ 水上に製造することはできません。
Can't build further than %1 meters away from the FOB.
@@ -514,6 +690,7 @@
Não é possível construir com mais de %1 metros de distância da FOB.
전초기지에서 %1 미터 이상 떨어지면 건설(설치)할 수 없습니다.
Nemůžeš stavět dál než %1 metrů od FOB.
+ %1 メートル以上離れて製造することはできません。
FOB Container
@@ -528,6 +705,7 @@
FOB no Contêiner
전초기지 설치박스
FOB Kontejner
+ FOB コンテナ
FOB Truck
@@ -542,6 +720,7 @@
FOB transportável
전초기지 설치차량
FOB Náklaďák
+ FOB トラック
Mobile respawn
@@ -556,6 +735,7 @@
Respawn móvel
재투입차량
Mobilní respawn
+ モバイルリスポーン
Arsenal box
@@ -570,6 +750,7 @@
Caixa de Arsenal
무기고
Bedna se zbrojnicí
+ アーセナル箱
DEPLOYMENT
@@ -584,6 +765,7 @@
MOBILIZAÇÃO
배치될 전초기지 선택
VÝSADEK
+ 出撃
Deploy
@@ -598,6 +780,7 @@
Mobilizar
배치
Výsadek
+ 出撃
-- REDEPLOY --
@@ -612,6 +795,7 @@
-- REMOBILIZAR --
-- 재배치 --
-- ZNOVUNASAZENÍ --
+ -- 再出撃 --
Build (Crew)
@@ -626,6 +810,7 @@
Construir (tripulado)
배치(승무원포함)
Postavit (Mužstvo)
+ 製造する (乗員を含む)
Light Rifle Squad
@@ -640,6 +825,7 @@
Grupo de Combate de Infantaria Leve
소총분대
Lehké útočné družstvo
+ 軽歩兵分隊
Heavy Rifle Squad
@@ -654,6 +840,7 @@
Grupo de Combate de Infantaria Pesada
화기분대
Těžké útočné družstvo
+ 重歩兵分隊
AT Squad
@@ -668,6 +855,7 @@
Grupo de Combate Anti-Blindagem
대전차지원팀
Proti-tankové družstvo
+ 対戦車分隊
AA Squad
@@ -682,6 +870,7 @@
Grupo de Combate Anti-Aéreo
방공지원팀
Proti-letadlové družstvo
+ 対空分隊
Recon Squad
@@ -696,6 +885,7 @@
Grupo de Combate de Reconhecimento
정찰팀
Průzkumné družstvo
+ 偵察分隊
Paratroopers Squad
@@ -710,6 +900,7 @@
Grupo de Combate de Paraquedistas
공수팀
Výsadkářské družstvo
+ 空挺分隊
Unit cap
@@ -724,6 +915,7 @@
Limite de unidades
유닛 제한
Limit jednotek
+ ユニットの上限
Wipe Save Data
@@ -738,6 +930,7 @@
Apagar jogo salvo
저장된 게임 초기화
Vymazat uloženou hru
+ セーブの削除
Confirm: Wipe Save Data
@@ -752,6 +945,7 @@
Confirmar: Apagar jogo salvo
확인 : 저장된 게임 초기화
Potvrdit: Vymazání uložené hry
+ 確認: セーブの削除
No
@@ -766,6 +960,7 @@
Não
아니요
Ne
+ いいえ
!! THE SAVEGAME WILL BE WIPED, NO RECOVERY POSSIBLE !!
@@ -780,6 +975,7 @@
!! O JOGO SALVO SERÁ APAGADO, NÃO SERÁ POSSÍVEL RECUPERÁ-LO !!
주의! 저장된 내용이 복구할 수 없게 삭제됩니다.
!! ULOŽENÁ POZICE BUDE SMAZÁNA BEZ MOŽNOSTI NÁVRATU !!
+ !! セーブデータが削除されます。復旧はできません !!
-- UNFLIP
@@ -794,6 +990,7 @@
-- DESVIRAR
-- 차량 바로잡기
-- PŘEVRÁTIT
+ -- ひっくり返す
-- Grid mode
@@ -808,6 +1005,7 @@
-- Modo "grid"
-- 격자 모드
-- Režim mřížky
+ -- グリッド配置
-- CAPTURE
@@ -822,6 +1020,7 @@
-- CAPTURAR
-- 생포/포획
-- ZAJMOUT
+ -- 捕虜にする
Squad member
@@ -836,6 +1035,7 @@
Membro do Grupo
분대원
Člen družstva
+ 分隊員
Near
@@ -850,6 +1050,7 @@
Próximo de
부근
Blízko
+ 直近に
-- RECYCLE
@@ -864,6 +1065,7 @@
-- RECICLAR
-- 재활용
-- RECYKLOVAT
+ -- 解体
Recycling
@@ -878,6 +1080,7 @@
Reciclando
분해중
Recyklování
+ 解体中
Recycling this %1 will yield:
@@ -892,6 +1095,7 @@
Reciclando este %1, irá obter:
재활용 할 경우 %1 의 보급품이 반환됨
Zrecyklováním %1 získáte:
+ %1 を解体することで次が手に入ります:
Recycle
@@ -906,6 +1110,7 @@
Reciclar
재활용
Recyklovat
+ 解体
Cancel
@@ -920,6 +1125,7 @@
Cancelar
취소
Zrušit
+ 取り消し
SECTOR CAPTURED
@@ -934,6 +1140,7 @@
SETOR CAPTURADO
거점 점령
SEKTOR ZABRÁN
+ 占領成功
Our forces have captured %1.
@@ -948,6 +1155,7 @@
Nossas forças capturaram %1.
아군이 거점 %1 을 점령중입니다.
Naše jednotky zabraly %1.
+ わが軍は %1 を確保しました。
SECTOR ATTACKED
@@ -962,6 +1170,7 @@
SETOR ATACADO
거점 공격
SEKTOR POD ÚTOKEM
+ セクターが攻撃を受けている
Hostiles forces are attacking %1!
@@ -976,6 +1185,7 @@
Forças hostis estão atacando %1!
적군이 거점 %1 을 공격합니다!
Nepřátelské jednotky útočí na %1!
+ 敵軍が %1 へ侵攻中です!
SECTOR LOST
@@ -990,6 +1200,7 @@
SETOR PERDIDO
거점 상실
SEKTOR ZTRACEN
+ セクターを失いました
We have lost control over %1!
@@ -1004,6 +1215,7 @@
Perdemos controle de %1!
아군이 거점 %1 을 상실하였습니다!
Ztratil jsi kontrolu nad %1!
+ わが軍は %1 を失いました...
SECTOR SAFE
@@ -1018,6 +1230,7 @@
SETOR SEGURO
거점 방어 성공
SEKTOR ZABEZPEČEN
+ セクターの安全を確保
%1 is no longer under threat.
@@ -1032,6 +1245,7 @@
%1 não está mais sob ameaça.
거점 %1 이 안정화 되었습니다.
%1 už není v nebezpečí.
+ %1 の脅威は去りました。
NEW FOB BUILT
@@ -1046,6 +1260,7 @@
NOVA FOB CONSTRUÍDA
신규 전초기지 설치
POSTAVENO NOVÉ FOB
+ 新たなFOBを建設
FOB %1 is now operational.
@@ -1060,6 +1275,7 @@
FOB %1 está operacional.
전초기지 %1 를 설치 할 수 있습니다.
FOB %1 je nyní dostupné
+ FOB %1 は稼働を開始。
FOB SAFE
@@ -1074,6 +1290,7 @@
FOB SEGURA
전초기지 안전
FOB ZABEZPEČENO
+ FOBの安全を確保
FOB %1 is no longer under threat.
@@ -1088,6 +1305,7 @@
FOB %1 não está mais sob ameaça.
전초기지 %1 이 안정화 되었습니다.
FOB %1 už není v nebezpečí
+ FOB %1 の脅威は去りました。
FOB ATTACKED
@@ -1101,6 +1319,7 @@
FOB ATACADA
전초기지 방어중
FOB POD ÚTOKEM
+ FOBが攻撃を受けている
FOB %1 is under attack!
@@ -1115,6 +1334,7 @@
FOB %1 está sob ataque!
전초기지 %1 이 공격받고 있습니다.
FOB %1 pod útokem!
+ 敵軍が FOB %1 へ侵攻中です!
FOB DESTROYED
@@ -1129,6 +1349,7 @@
FOB DESTRUÍDA
전초기지 파괴
FOB ZNIČENO
+ FOBが破壊された
FOB %1 has been destroyed!
@@ -1142,6 +1363,7 @@
FOB %1 foi destruída!
전초기지 %1 이 파괴되었습니다!
FOB %1 bylo zničeno
+ FOB %1 が破壊されちまった!
HOSTILE FORCES INCOMING
@@ -1156,6 +1378,7 @@
FORÇAS HOSTIS A CAMINHO
적군 접근중
NEPŘÁTELSKÉ JEDNOTKY PŘICHÁZEJÍ
+ 敵部隊接近中
Hostile forces spotted near %1.
@@ -1170,6 +1393,7 @@
Forças hostis identificadas nas proximidades de %1.
%1 근처에 적군이 발견되었습니다!
Nepřátelské jednotky spatřeny poblíž %1
+ 敵部隊が %1 付近で発見された。
NEW INTELLIGENCE
@@ -1184,6 +1408,7 @@
NOVA INTELIGÊNCIA
적군에 대한 새로운 정보
NOVÉ INFORMACE
+ 新たな情報を入手
Hostile FOB near %1.
@@ -1198,6 +1423,76 @@
FOB hostil nas proximidades de %1.
적군 전초기지 %1 가 근처에 있습니다!
Nepřátelské FOB poblíž %1.
+ 敵前線基地を %1 付近に発見。
+
+
+ Civil authorities request supplies at %1.
+ Les autorités civiles demandent des fournitures à %1.
+ Zivilbehörden fordern Lieferungen an bei %1.
+ Las autoridades civiles solicitan suministros en %1
+ Гражданские власти запрашивают поставки в %1.
+ Le autorità civili richiedono forniture a %1.
+ %1民政当局在。
+ %1 民政當局在。
+ Sivil makamlar, %1 konumunda malzeme talep ediyor.
+ Autoridades civis solicitam suprimentos em %1.
+ 시민 당국은 %1에서 공급을 요청합니다.!
+ Civilní úřady požadují dodávky v %1.
+ 市民団体は %1 にサプライを要求している。
+
+
+ Supplies have been delivered. The civilians are thankful for your help!
+ Les fournitures ont été livrées. Les civils sont reconnaissants pour votre aide!
+ Nachschub wurde geliefert. Die Zivilisten sind dankbar für Ihre Hilfe!
+ Se han entregado los suministros. ¡Los civiles están agradecidos por su ayuda!
+ Поставки доставлены. Гражданские благодарны за вашу помощь!
+ Le forniture sono state consegnate. I civili sono grati per il tuo aiuto!
+ 物资已送达。平民感谢您的帮助!
+ 物資已送達。平民感謝您的幫助!
+ Malzemeler teslim edildi. Siviller yardımınız için minnettar!
+ Os suprimentos foram entregues. Os civis agradecem a sua ajuda!
+ 물품이 배송되었습니다. 시민 여러분의 도움에 감사드립니다!
+ Dodávky byly dodány. Civilisté jsou vděční za vaši pomoc!
+ サプライの輸送に成功した。 民間人は支援に感謝しています!
+
+
+ No friendly towns in the area to deliver supplies to. Liberate one!
+ Il n'y a pas de villes amies dans la région où livrer des fournitures. Libérez-en un avant de tenter cette mission.
+ Es gibt keine freundlichen Städte in der Umgebung, in die man Vorräte liefern könnte. Befreien Sie einen, bevor Sie diese Mission versuchen.
+ No hay ciudades amigas en el área para entregar suministros. Libera a uno antes de intentar esta misión.
+ В этом районе нет дружественных городов, в которые можно было бы доставлять припасы. Освободите одного перед выполнением этой миссии.
+ Non ci sono città amiche nella zona a cui consegnare rifornimenti. Liberane uno prima di tentare questa missione.
+ 该地区没有友好城镇可以运送物资。在尝试此任务之前解放一个。
+ 該地區沒有友好城鎮可以運送物資。在嘗試此任務之前解放一個。
+ Bölgede erzak teslim edilecek dostane kasaba yok. Bu görevi denemeden önce birini serbest bırakın.
+ Não há cidades amigáveis na área para entregar suprimentos. Libere um antes de tentar esta missão.
+ 이 지역에는 보급품을 배달할 우호적인 마을이 없습니다. 이 임무를 시도하기 전에 하나를 해방하십시오.
+ V této oblasti neexistují žádná spřátelená města, kam byste dodávali zásoby. Před pokusem o tuto misi jednoho osvobodte.
+ この地域にはサプライを必要としている友好的な町がありません。 解放する必要があります!
+
+
+ Our factory request fuel at %1.
+ %1 の工場は燃料を要求している。
+
+
+ Fuel have been delivered. The factory was thanked and produced several resources!
+ 燃料の輸送に成功した。 工場は感謝し、いくつかの資源を生産しました!
+
+
+ No friendly factory in the area to deliver fuel to. Liberate one!
+ この地域には燃料を必要としている友好的な工場がありません。 解放する必要があります!
+
+
+ Our outpost request ammunition at %1.
+ %1 の軍事基地は弾薬を要求している。
+
+
+ Ammunition have been delivered. OPFOR alert level reduced by outpost!
+ 弾薬の輸送に成功した。 軍事基地によって敵の警戒度は減少した!
+
+
+ No friendly outpost in the area to deliver ammunition to. Liberate one!
+ この地域には弾薬を必要としている友軍の軍事基地がありません。 解放する必要があります!
We have interrogated a prisoner.
@@ -1212,6 +1507,7 @@
Interrogamos um prisioneiro.
포로를 심문하여 정보를 획득하였습니다.
Vyslechl jsi zajatce
+ 捕虜の回収に成功しました。
We have found secret documents.
@@ -1226,6 +1522,7 @@
Localizamos documentos secretos.
적군 비밀문서를 획득하였습니다.
Našel jsi tajné dokumenty.
+ 敵機密文書の回収に成功しました。
SECONDARY OBJECTIVE
@@ -1240,6 +1537,7 @@
OBJETIVO SECUNDÁRIO
부차적인 임무
VEDLEJŠÍ ÚKOL
+ 副次任務
Hostile FOB destroyed
@@ -1254,6 +1552,7 @@
FOB hostil destruída
적군 전초기지가 파괴됨
Nepřátelské FOB zničeno.
+ 敵前線基地の破壊完了。
HOSTILE REINFORCEMENTS
@@ -1268,6 +1567,7 @@
REFORÇOS HOSTIS
적의 지원병력
NEPŘÁTELSKÉ POSILY
+ 敵増援接近
Hostile forces reinforcing %1.
@@ -1282,6 +1582,7 @@
Forças hostis reforçando %1.
%1 로 적군의 지원병력이 이동중입니다!
Nepřátelsky posily v %1.
+ 敵軍は %1 へ増援を派出中。
== MISSION OPTIONS ==
@@ -1296,6 +1597,7 @@
== OPÇÕES DA MISSÃO ==
== 미션 옵션 ==
== MOŽNOSTI MISE ==
+ == ミッション設定 ==
== GAMEPLAY OPTIONS ==
@@ -1309,6 +1611,7 @@
== OPÇÕES DE JOGO ==
== 게임플레이 옵션 ==
== HERNÍ MOŽNOSTI ==
+ == ゲーム設定 ==
== TECHNICAL OPTIONS ==
@@ -1323,6 +1626,7 @@
== OPÇÕES TÉCNICAS ==
== 기술 옵션 ==
== TECHNICKÉ MOŽNOSTI ==
+ == 高度な設定 ==
Day duration (hours)
@@ -1337,6 +1641,7 @@
Duração do dia (horas)
1일기간설정(시간)
Délka dne (hodiny)
+ 1日の長さ(時)
Difficulty
@@ -1351,6 +1656,7 @@
Dificuldade:
난이도
Obtížnost
+ 難易度
Tourist
@@ -1365,6 +1671,7 @@
Turista
연습
Procházka
+ ツーリスト
Easy
@@ -1379,6 +1686,7 @@
Fácil
쉬움
Jednoduchá
+ イージー
Normal
@@ -1393,6 +1701,7 @@
Normal
보통
Normální
+ ノーマル
Moderate
@@ -1407,6 +1716,7 @@
Moderada
어려움
Obtížný
+ モデレート
Hard
@@ -1421,6 +1731,7 @@
Difícil
조금 어려움
Těžký
+ ハード
Extreme
@@ -1435,6 +1746,7 @@
Extrema
매우 우려움
Extrémní
+ エクストリーム
Ludicrous
@@ -1449,6 +1761,7 @@
Absurda
터무니없이어려움
Nemožný
+ 激ヤバ
Oh god oh god we're all gonna die
@@ -1463,6 +1776,7 @@
Ah meu Deus, vamos morrer!
우리 모두가 죽게 될 운명
Ó můj bože, všichni umřeme
+ なんてことだもう助からないぞ
Manage AI Skill
@@ -1475,6 +1789,7 @@
Gerir nível de habilidade da IA
AI 능력치
Nastavení obtížnosti AI
+ AIのスキル
Resources multiplier
@@ -1489,6 +1804,7 @@
Multiplicador de recursos
군수물자 생산 비율
Násobitel zdrojů
+ 資源の倍率
Stamina
@@ -1503,6 +1819,7 @@
Vigor (stamina)
체력
Výdrž
+ スタミナ
Introduction
@@ -1517,6 +1834,7 @@
Introdução
소개 영상
Úvod
+ イントロ
Deployment cinematic
@@ -1531,6 +1849,7 @@
Introdução cinemática de mobilização
배포 영상
Filmové scéna
+ 出撃時の演出
Enabled
@@ -1545,6 +1864,7 @@
Ativado
활성화
Zapnuto
+ 有効
Disabled
@@ -1559,6 +1879,7 @@
Desativado
비활성화
Vypnuto
+ 無効
Start the campaign with the first FOB already built
@@ -1573,6 +1894,7 @@
Iniciar a campanha com a primeira FOB já construída
이미 설치된 전초기지에서 시작하기
Spustit kampaň s postaveným prvním FOB
+ 1個目のFOBが設置済みの状態でキャンペーンを開始
Yes
@@ -1587,6 +1909,7 @@
Sim
네
Ano
+ はい
No
@@ -1601,6 +1924,7 @@
Não
아니요
Ne
+ いいえ
Maximum amount of AI units
@@ -1615,6 +1939,7 @@
Quantidade máxima de unidades IA
AI개체 최대값
Maximální počet AI jednotek
+ AIの最大数
50% - Recommended for local hosting
@@ -1629,6 +1954,7 @@
50% - Recomendado para hospedagem local
50% - 서버 실행 및 게임을 1대에서 실행할때 권장
50% - Doporučeno pro lokální hraní
+ 50% - ローカルホスト時に推奨
75% - Dedicated server recommended
@@ -1643,6 +1969,7 @@
75% - Recomendado para servidor dedicado
75% - 전용서버에서 실행할때 권장
75% - Doporučeno pro dedikované servery
+ 75% - 専用サーバーを推奨
100% - Dedicated server recommended
@@ -1657,6 +1984,7 @@
100% - Recomendado para servidor dedicado
100% - 전용서버에서 실행할때 권장
100% - Doporučeno pro dedikované servery
+ 100% - 専用サーバーを推奨
125% - Dedicated server with headless client recommended
@@ -1671,6 +1999,7 @@
125% - Recomendado para servidor com headless client
125% - 단일 CPU의 헤드리스서버(다른PC와 사용자에게 서비스를 제공하는 서버종류)에서 실행할때 권장
125% - Doporučeno pro dedikované servery s Headless klienty
+ 125% - 専用サーバーとヘッドレスクライアントを推奨
150% - Dedicated server with headless client recommended
@@ -1685,6 +2014,7 @@
150% - Recomendado para servidor com mútiplos headless clients
150% - CPU 2개 이상, 또는 다중 헤드리스서버에서 실행할때 권장
150% - Doporučeno pro dedikované servery s vícero Headless klienty
+ 150% - 専用サーバーとヘッドレスクライアントを推奨
200% - Dedicated server with multiple headless clients recommended
@@ -1699,6 +2029,7 @@
200% - Recomendado para servidor com mútiplos headless clients
200% - CPU 2개 이상, 또는 다중 헤드리스서버에서 실행할때 권장
200% - Doporučeno pro dedikované servery s vícero Headless klienty
+ 200% - 専用サーバーと複数のヘッドレスクライアントを推奨
Civilian activity
@@ -1713,6 +2044,7 @@
Atividade Civil
민간인 활동 정도
Aktivita civilistů
+ 市民の活発性
None
@@ -1727,6 +2059,7 @@
Nenhuma
없음
Žádná
+ なし
Reduced
@@ -1741,6 +2074,7 @@
Reduzida
작음
Snížená
+ 少ない
Normal
@@ -1755,6 +2089,7 @@
Normal
보통
Normální
+ 普通
Increased
@@ -1769,6 +2104,7 @@
Aumentada
많음
Zvýšená
+ 多い
Warning: friendly fire
@@ -1783,6 +2119,7 @@
Atenção: Fogo amigo
경고: 아군 공격
Varování: Střelba do vlastních řad
+ 警告: フレンドリーファイア
Hostile presence adapts to player count
@@ -1797,6 +2134,7 @@
Adaptar presença hostil de acordo com a quantidade de jogadores
플레이어수에 따른 적군 활동 조절
Počet nepřátel se adaptuje na počet hráčů
+ プレイヤー数による敵人数の変化
Infantry units
@@ -1811,6 +2149,7 @@
Unidades de infantaria
보병 부대
Pěchota
+ 歩兵
Light vehicles
@@ -1825,6 +2164,7 @@
Veículos leves
전투 차량
Lehká vozidla
+ 軽車両
Armored vehicles
@@ -1839,6 +2179,7 @@
Veículos blindados
장갑 차량
Obrněná vozidla
+ 装甲車両
Air vehicles
@@ -1853,6 +2194,7 @@
Veículos aéreos
항공기
Letectvo
+ 航空機
Static defenses
@@ -1867,6 +2209,7 @@
Defesas estáticas
방어 무기
Statické zbraně
+ 固定火器
Buildings
@@ -1881,6 +2224,7 @@
Construções
건설 물품
Budovy
+ 建築物
Logistics
@@ -1895,6 +2239,7 @@
Logística
후방보급부대
Logistika
+ 物流
Infantry squads
@@ -1909,6 +2254,7 @@
Grupos de combate de infantaria
보병 분대
Pěchotní Družstva
+ 歩兵分隊
Active Sectors:
@@ -1923,6 +2269,7 @@
Setores ativos:
활성화된 거점 :
Aktivní sektory:
+ 活性中のセクター:
The unitcap setting has been exceeded and further sector activation is temporarily halted. You can now see the list of currently active sectors where you shall concentrate your efforts.
@@ -1937,6 +2284,7 @@
O limite de unidades foi excedido e a ativação de outros setores foi temporariamente pausada. Você pode ver a lista de setores ativos onde deverá concentrar seus esforços.
아군 또는 적 유닛의 총량이 한계치에 도달했습니다. 이 제한이 풀릴 때까지 더 이상 거점 활성화는 중단됩니다. 플레이어들은 현재 활성화된 거점만 점령할 수 있고, 그 거점들에 집중해야 합니다
Překročen limit jednotek a bylo dočasně pozastaveno aktivování dalších sektorů. Nyní můžete vidět seznam aktivních sektorů na které by jste se měly soustředit.
+ ユニット数が最大に到達したためセクター活性化が一時停止しています。 活性中のセクターは以下のリストから確認できます。
LOCKED BY
@@ -1951,6 +2299,7 @@
BLOQUEADO POR
차량 잠금
ZAMČENO OD
+ ロックされています:
UNLOCKED BY
@@ -1965,6 +2314,7 @@
DESBLOQUEADO POR
차량잠금해제
ODEMKNUTO OD
+ アンロックされました:
SQUAD MANAGEMENT
@@ -1979,6 +2329,7 @@
GESTÃO DO GRUPO DE COMBATE
분대관리(AI)
SPRÁVA DRUŽSTVA
+ 分隊管理
-- SQUAD MANAGEMENT
@@ -1993,6 +2344,7 @@
-- GESTÃO DO GRUPO DE COMBATE
-- 분대원관리(AI)
-- SPRÁVA DRUŽSTVA
+ -- 分隊管理
Replace
@@ -2004,9 +2356,10 @@
附身
取代
Değiştir
- Substituir.
+ Substituir
분대원 교체
Nahradit
+ 置き換わる
You will deploy on the selected squad member and replace them while keeping your current loadout.
@@ -2020,6 +2373,7 @@
Şuanki ekipmanınız ile seçilen kişinin yerinde doğacaksınız.
Você irá reaparecer no membro selecionado e o substituir enquanto mantém seu equipamento atual.
Budeš nasazen na místo člena družstva a nahradíš ho se svým aktuálním vybavením.
+ 選択した分隊員と置き換わる形で現在の装備を維持したまま出撃します。
Remove
@@ -2033,6 +2387,7 @@
Kaldır
Remover
Odstranit
+ 削除
The selected squad member will be deleted.
@@ -2046,6 +2401,7 @@
Seçilen tim üyesi silinecektir.
O membro selecionado será deletado
Vybraný člen družstva bude odstraněn
+ 選択した分隊員を削除します。
Resupply
@@ -2059,6 +2415,7 @@
Erzak Yenile
Reabastecer
Přezbrojit
+ 補給
If the selected squad member is close enough from a resupply point (mobile spawn or FOB) they will get a brand new, full loadout.
@@ -2073,6 +2430,7 @@
Se o membro selecionado estiver próximo o suficiente de um ponto de reabastecimento (respawn móvel ou FOB), irá adquirir um novo loadout.
선택한 분대원을 배치하고, 현재 분대를 유지하면서 교체할 수 있습니다.
Pokud je jednotka dostatečně blízko zásobovacímu bodu (mobilní spawn nebo FOB) pak dostane novou celou výzbroj.
+ 選択した分隊員が再補給地点(モバイルリスポーンまたはFOB)の近くにいる場合、負傷をリフレッシュし再武装します。
Confirm
@@ -2087,6 +2445,7 @@
Confirmar
확인
Potvrdit
+ 確認
Health:
@@ -2101,6 +2460,7 @@
Saúde:
건강:
Životy:
+ 体力
Distance:
@@ -2115,6 +2475,7 @@
Distância:
거리:
Vzdálenost:
+ 距離:
Primary
@@ -2129,6 +2490,7 @@
Primária
주무기
Primární
+ プライマリ
Secondary
@@ -2143,6 +2505,7 @@
Secundária
보조무기
Sekundární
+ セカンダリ
None
@@ -2157,6 +2520,7 @@
Nenhum
없음
Žádný
+ なし
Driver
@@ -2171,6 +2535,7 @@
Motorista
운전수
Řidič
+ 操縦手
Gunner
@@ -2185,6 +2550,7 @@
Atirador
포수
Střelec
+ 砲手
Commander
@@ -2199,6 +2565,7 @@
Comandante
지휘관
Velitel
+ 車長
Passenger
@@ -2213,6 +2580,7 @@
Passageiro
승객
Pasažér
+ 乗員
Squad deploy
@@ -2227,6 +2595,7 @@
Mobilizar Grupo de Combate
분대 배치
Výsadek družstva
+ 分隊員位置に出撃
You have deleted the selected squad member.
@@ -2241,6 +2610,7 @@
Você deletou o membro selecionado.
선택된 분대원을 해산시킵니다.
Odstranili jste vybraného člena družstva.
+ 選択した分隊員を削除しました。
The selected squad member has been resupplied.
@@ -2255,6 +2625,7 @@
O membro selecionado do grupo se remuniciou.
선택된 분대원이 재정비 하었습니다.
Přezbrojily jste vybraného člena družstva.
+ 選択した分隊員は補給を完了しました。
The selected squad member isn't close enough from a FOB or mobile spawn.
@@ -2269,6 +2640,31 @@
O membro selecionado do grupo não está próximo o suficiente de uma FOB ou respawn móvel.
선택된 분대원이 전초기지 또는 재투입차량에 가까이 있지 않습니다.
Vybraný člen družstva není dostatečně blízko k FOB nebo mobilnímu spawnu.
+ 選択した分隊員は補給地点の近くにいません。
+
+
+ No eject
+ 脱出を不許可
+
+
+ Prevents the selected squad member from attempting to escape when their vehicle becomes stuck.
+ 選択した分隊員が乗っている車両が動けなくなった時に脱出しようとするのを阻止します。
+
+
+ Allow eject
+ 脱出を許可
+
+
+ Re-allows selected squad members to eject from their vehicle when it becomes stuck.
+ 選択した分隊員が乗っている車両が動けなくなった時に脱出するのを再び許可します。
+
+
+ Crew will NOT eject themselves
+ この乗員は自己判断で脱出しません
+
+
+ This soldier is Player
+ この兵士はプレイヤーです
PERMISSIONS MANAGEMENT
@@ -2283,6 +2679,7 @@
GESTÃO DE PERMISSÕES
사용 권한 설정
MANAŽER PRAVOMOCÍ
+ 権限管理
Light vehicles
@@ -2297,6 +2694,7 @@
Veículos leves
전투 차량
Lehká vozidla
+ 軽車両
Armored vehicles
@@ -2311,6 +2709,7 @@
Veículos blindados
장갑 차량
Obrněná vozidla
+ 装甲車両
Air vehicles
@@ -2325,6 +2724,7 @@
Veículos aéreos
항공기
Letectvo
+ 航空機
Construction
@@ -2339,6 +2739,7 @@
Construção
건설
Stavění
+ 建設
Recycling
@@ -2353,6 +2754,7 @@
Reciclando
재활용
Recyklování
+ 解体
Others
@@ -2367,6 +2769,7 @@
Outros
기타
Ostatní
+ その他
All
@@ -2381,6 +2784,7 @@
Todos
전체
Vše
+ 全て
None
@@ -2395,6 +2799,7 @@
Nenhum
없음
Nic
+ なし
Allows the player to operate light vehicles as driver and gunner.
@@ -2409,6 +2814,7 @@
Permite ao jogador operar veículos leves como condutor e atirador.
플레이어가 전투 차량을 사용할 수 있는 권한를 허가 합니다.
Povolí hráči operovat s lehkými vozidly jako řidič nebo střelec.
+ プレイヤーが軽車両の運転手と砲手へつくことを許可します。
Allows the player to operate armored vehicles as driver, gunner and commander.
@@ -2423,6 +2829,7 @@
Permite ao jogador operar veículos blindados como condutor, atirador e comandante.
플레이어가 장갑 차량을 사용할 수 있는 권한를 허가 합니다.
Povolí hráči operovat s obrněnými vozidly jako řidič, střelec a velitel.
+ プレイヤーが装甲車両の運転手と砲手、車長へつくことを許可します。
Allows the player to operate air vehicles as driver and gunner.
@@ -2437,6 +2844,7 @@
Permite ao jogador operar veículos aéreos como piloto e atirador.
플레이어가 항공기를 사용할 수 있는 권한를 허가 합니다.
Povolí hráči operovat s letadly jako řidič a střelec.
+ プレイヤーが航空機の運転手と砲手へつくことを許可します。
Allows the player to use the BUILD menu.
@@ -2451,6 +2859,7 @@
Permite ao jogador utilizar o menu de CONTRUÇÃO.
플레이어가 전초기지에서 건설메뉴를 사용할 수 있는 권한를 허가 합니다.
Povolí hráči používat menu STAVĚNÍ.
+ プレイヤーが製造メニューを使用することを許可します。
Allows the player to use the RECYCLE action.
@@ -2465,6 +2874,7 @@
Permite ao jogador utilizar a ação "RECICLAR".
플레이어가 필요없는 장비를 재활용할 수 있는 권한를 허가 합니다.
Povolí hráči RECYKLOVAT.
+ プレイヤーが解体アクションを使用することを許可します。
Allows the player to use other actions: unflip, resource box manipulation, prisoner capture, etc.
@@ -2479,6 +2889,7 @@
Permite ao jogador executar outras ações: Desvirar veículo, manipular caixas de recursos, captura de prisioneiros, etc.
플레이어가 차량을 바로잡거나, 군수물자를 조작하거나 포로를 생포하거나 문서를 획득할 수 있는 권한를 허가 합니다.
Povolí hráči používat funkce jako: převrátit, manipulace s bednami, zajmutí zajatce, atd.
+ プレイヤーがその他のアクションを使用することを許可します。 (ひっくり返す、資源貨物の管理、捕虜の確保など)
Gives all permissions to the player.
@@ -2493,6 +2904,7 @@
Libera todas as permissões para o jogador.
플레이어에게 모든 권한을 허가 합니다.
Povolí hráči VŠE.
+ プレイヤーに全てを許可します。
Removes all permissions from the player.
@@ -2507,6 +2919,7 @@
Remove todas as permissões do jogador.
플레이어의 허가된 권한 사항을 모두 제거합니다.
Zakáže hráči VŠE.
+ 全ての権限を取り消します。
-- PERMISSIONS
@@ -2521,6 +2934,7 @@
-- PERMISSÕES
-- 사용 권한
-- PRAVOMOCE
+ -- 権限
Save Changes
@@ -2535,6 +2949,7 @@
Salvar alterações
변경사항저장
Uložit změny
+ 変更を保存する
Permissions Management
@@ -2549,6 +2964,7 @@
Gestão de Permissões
사용 권한 설정
Manažer pravomocí
+ 権限管理
You don't have permission from the commander to use light vehicles.
@@ -2563,6 +2979,7 @@
Você não tem permissão do comandante para utilizar veículos leves.
당신은 전투 차량을 사용할 수 있는 권한를 받지 못하였습니다.
Nemáš pravomoc od Komandéra používat lehká vozidla.
+ 指揮官はあなたに軽車両を使用する権限を与えていません。
You don't have permission from the commander to use armored vehicles.
@@ -2577,6 +2994,7 @@
Você não tem permissão do comandante para utilizar veículos blindados.
당신은 장갑 차량을 사용할 수 있는 권한를 받지 못하였습니다.
Nemáš pravomoc od Komandéra používat obrněná vozidla.
+ 指揮官はあなたに装甲車両を使用する権限を与えていません。
You don't have permission from the commander to use air vehicles.
@@ -2591,6 +3009,7 @@
Você não tem permissão do comandante para utilizar veículos aéreos.
당신은 항공기를 사용할 수 있는 권한를 받지 못하였습니다.
Nemáš pravomoc od Komandéra používat letectvo.
+ 指揮官はあなたに航空機を使用する権限を与えていません。
No permissions have been set. The commander must setup the permissions to allow player actions and vehicle usage. Alternatively, the permission system can be disabled from the mission options.
@@ -2605,6 +3024,7 @@
Nenhuma permissão foi liberada. O comandante precisa alterar as permissões para permitir que o jogador execute ações e utiliza veículos. Alternativamente, o sistema de permissão pode ser desabilitado no menu de opções da missão.
사용 권한를 허가 받지 못하였습니다. 관리자는 플레이어들이 장비를 사용할 수 있는 권한을 설정해야 합니다. 사용 권한 설정 메뉴에서 권한을 허가 하거나 제거할 수 있습니다.
Nejsou nastaveny pravomoce. Komandér musí nastavit pravomoce na používání funkcí a vozidel. Alternativně lze pravomoce úplně vypnou v nastaveni mise.
+ 権限が設定されていません。 指揮官は各プレイヤーに権限を与える必要があります。 権限システムはミッション設定から無効化することもできます。
ARSENAL
@@ -2619,6 +3039,7 @@
ARSENAL
무기고
ARZENÁL
+ アーセナル
Edit loadout
@@ -2633,6 +3054,7 @@
Modificar equipamento
장비 편집
Upravit výzbroj
+ 装備を編集
Take loadout
@@ -2647,6 +3069,7 @@
Aceitar equipamento
장비 착용
Vzít výzbroj
+ 装備を取る
Default
@@ -2661,6 +3084,7 @@
Padrão
기본장비
Výchozí
+ 標準
-- REPACKAGE FOB --
@@ -2675,6 +3099,7 @@
-- MOBILIZAR FOB --
-- 전초기지 재배치 --
-- ZABALIT FOB --
+ -- FOBを撤収する --
REPACKAGE FOB
@@ -2689,6 +3114,7 @@
MOBILIZAR FOB
전초기지 재배치
ZABALIT FOB
+ FOBを撤収します
Are you sure you want to repackage this FOB?
@@ -2703,6 +3129,7 @@
Você tem certeza que quer mobilizar esta FOB?
이 전초기지를 재배치하시겠습니까?
Jste si jistý že chcete zabalit FOB?
+ FOBを撤収しますか?
HALO Jump
@@ -2717,6 +3144,7 @@
Salto em queda livre
공수 낙하
HALO Skok
+ HALO降下
Enabled - No cooldown
@@ -2731,6 +3159,7 @@
Ativado - Sem tempo de espera
활성화 - 대기시간 없음
Zapnuto - Bez čekání
+ 有効 - クールダウン無し
Enabled - 5 minutes cooldown
@@ -2745,6 +3174,7 @@
Ativado - Espera de 5 minutos
활성화 - 대기시간 5분
Zapnuto - 5 minut cooldown
+ 有効 - クールダウン5分
Enabled - 10 minutes cooldown
@@ -2759,6 +3189,7 @@
Ativado - Espera de 10 minutos
활성화 - 대기시간 10분
Zapnuto - 10 minut cooldown
+ 有効 - クールダウン10分
Enabled - 15 minutes cooldown
@@ -2773,6 +3204,7 @@
Ativado - Espera de 15 minutos
활성화 - 대기시간 15분
Zapnuto - 15 minut cooldown
+ 有効 - クールダウン15分
Enabled - 20 minutes cooldown
@@ -2787,6 +3219,7 @@
Ativado - Espera de 20 minutos
활성화 - 대기시간 20분
Zapnuto - 20 minut cooldown
+ 有効 - クールダウン20分
Enabled - 30 minutes cooldown
@@ -2801,6 +3234,7 @@
Ativado - Espera de 30 minutos
활성화 - 대기시간 30분
Zapnuto - 30 minut cooldown
+ 有効 - クールダウン30分
Can't perform HALO jump, you are on cooldown for %1 more minute(s).
@@ -2815,6 +3249,7 @@
Não é possível executar o salto em queda livre, o tempo de espera é de %1 minuto(s).
지금은 공수 낙하를 할 수 없습니다. %1 분 후 가능합니다.
Nemůžete použít HALO skok, musíte počkat %1 minut
+ HALO降下を実施出来ません。 クールダウンにのこり %1 分掛かります。
-- HALO JUMP
@@ -2829,6 +3264,7 @@
-- Salto em queda livre
-- 공수 낙하
-- HALO SKOK
+ -- HALO降下
HALO JUMP
@@ -2843,6 +3279,7 @@
Salto em queda livre
공수 낙하
HALO SKOK
+ HALO降下
Clear spawned vehicle cargo
@@ -2855,6 +3292,7 @@
移除載具上的物品
장비 배치(생산)시 화물칸 비우기.
Vymazat náklad vyvolaného vozidla
+ スポーン車両のインベントリを削除
Maximum sector deactivation delay (starts increasing after 5th activation minute)
@@ -2864,6 +3302,7 @@
Massimo ritardo di attivazione del settore(dopo 5 minuti inizia ad incrementare)
Sektör kapanma üst limiti (Sektörün açılmasından 5 dakika sonra artmaya başlar)
Maximální zpoždění deaktivace sektoru (začíná se zvyšovat po 5. aktivační minutě)
+ 最大セクター不活性化遅延(5番目の活性化後に増加し始めます)
Limited Zeus interface
@@ -2874,11 +3313,13 @@
제한된 제우스 인터페이스
Sınırlı Zeus Arayüzü
Omezené rozhraní Zeus
+ ZEUSインターフェイスの制限
Zeus for Commander
Zeus für Kommandant
Zeus per Comandante
+ 指揮官用ZEUS
Chance that enemies will stay in immobile/damaged vehicles
@@ -2888,6 +3329,7 @@
Chance che un nemico rimanga su un veicolo immobile o danneggiato
Düşmanların hasarlı araçların içinde kalma şansı
Šance, že nepřátelé zůstanou v nepohyblivých / poškozených vozidlech
+ 無力化車両に敵歩兵が残る確率
Deployment in progress...
@@ -2902,6 +3344,7 @@
Atlama süreci devam ediyor...
Mobilização em andamento...
Probíhá výsadek...
+ 戦地へ出撃中です ...
Use the commander whitelist
@@ -2916,6 +3359,7 @@
Use a lista de permissões de comandantes
지휘관 허용 목록을 사용합니다.
Použít whitelist pro komandéra
+ 指揮官ホワイトリストの使用
Enabled - Only use if you have modified your whitelist.sqf!
@@ -2930,6 +3374,7 @@
Ativado - Apenas use se tiver modificado o arquivo whitelist.sqf!
활성화 - whitelist.sqf 에 등록되어 있어야 합니다.
Povoleno - Použijte pouze pokud jste upravily whitelist.sqf!
+ 有効 - whitelist.sqf を改変しているときのみ使用してください!
Cannot build: hostile forces nearby.
@@ -2944,6 +3389,7 @@
Não é possível construir: Forças hostis na proximidade.
근처에 방해물이 있어 건설(설치)할 수 없습니다.
Nemůžeš stavět: nepřátelské jednotky poblíž.
+ 製造できません: 敵軍が近くにいます。
Cleanup abandoned vehicles outside FOBs
@@ -2958,6 +3404,7 @@
Remover veículos abandonados fora das FOBs
전초기지 외부의 유기된 장비 정리
Čištění zapomenutých vozidel mimo FOB
+ FOB外の放棄された車両の削除
Enabled - 1 hour delay
@@ -2972,6 +3419,7 @@
Ativado - 1 hora para remoção
활성화 - 1시간후 사라짐
Zapnuto - Jednou za hodinu
+ 有効 - 1時間後
Enabled - 2 hours delay
@@ -2986,6 +3434,7 @@
Ativado - 2 horas para remoção
활성화 - 2시간후 사라짐
Zapnuto - Jednou za dvě hodiny
+ 有効 - 2時間後
Enabled - 4 hours delay
@@ -3000,6 +3449,7 @@
Ativado - 4 horas para remoção
활성화 - 4시간후 사라짐
Zapnuto - Jednou za čtyři hodiny
+ 有効 - 4時間後
Sorry!
@@ -3014,6 +3464,7 @@
Desculpe!
미안합니다.!
Pardon!
+ すみません!
You are not authorized to use the commander slot on this server.
@@ -3028,6 +3479,22 @@
Você não está autorizado a usar o slot de comandante neste servidor.
사령관 슬롯을 사용할 권한이 없습니다.
Nemáš oprávnění používat pozici Komandéra na tomto serveru.
+ あなたは指揮官スロットへ入ることをサーバーに許可されていません。
+
+
+ CBA_A3 not loaded. KP Liberation APR requires CBA to run properly.
+ CBA_A3 non chargé. KP Liberation APR nécessite CBA pour fonctionner correctement.
+ CBA_A3 nicht geladen. KP Liberation APR erfordert CBA, um ordnungsgemäß zu funktionieren.
+ CBA_A3 no cargado. KP Liberation APR requiere CBA para funcionar correctamente.
+ CBA_A3 не загружен. Для правильной работы KP Liberation APR требуется CBA.
+ CBA_A3 non caricato. KP Liberation APR richiede CBA per funzionare correttamente.
+ CBA_A3 未加载。KP Liberation APR 需要 CBA 才能正常运行。
+ CBA_A3 未加載。KP Liberation APR 需要 CBA 才能正常運行。
+ CBA_A3 yüklenmedi. KP Liberation APR düzgün çalışması için CBA gerektirir.
+ CBA_A3 não carregado. KP Liberation APR requer CBA para funcionar corretamente.
+ CBA_A3 가 로드되지 않았습니다. KP Liberation APR 는 정상적으로 작동하기 위해 CBA 가 필요합니다.
+ CBA_A3 není načteno. KP Liberation APR vyžaduje pro správný chod CBA.
+ CBA_A3 が読み込まれていません。 KP Liberation APR の正常な動作には CBA が必要です。
Save respawn loadout
@@ -3042,6 +3509,7 @@
Salvar equipamento para respawn.
재생시 기본 장비로 설정
Uložit výzbroj pro oživení
+ リスポーン時装備の保存
Your current loadout will be restored on every respawn.
@@ -3056,6 +3524,7 @@
Seu equipamento atual será restaurado em cada respawn.
현재 설정한 장비로 재생됨.
Tvoje aktuální výzbroj bude použita při každém oživení.
+ あなたの現在の装備をリスポーン後に再装備します。
Load from player
@@ -3070,6 +3539,7 @@
Copiar do jogador
다른 플레이어 장비 가져오기
Načíst od hráče
+ プレイヤーから読み込む
Successful loadout transfer from %1.
@@ -3084,6 +3554,7 @@
Transferência de loadout de %1 realizada.
%1 의 장비, 이전 성공.
Úspěšně načteno od %1.
+ %1 から装備を複製しました。
Loadout:
@@ -3098,6 +3569,7 @@
Equipamento:
장비:
Výzbroj:
+ 装備:
Deployment location:
@@ -3112,6 +3584,7 @@
Local para mobilização:
재투입 위치:
Lokace pro výsadek:
+ 出撃地点:
OPFOR aggressivity
@@ -3126,6 +3599,7 @@
Agressividade inimiga
아군에 대한 적군의 공격 의지
Agresivita OPFOR
+ 敵軍の活発性
Anemic
@@ -3140,6 +3614,7 @@
Anêmica
거의 없음
Chudá
+ 激ヨワ
Weak
@@ -3154,6 +3629,7 @@
Fraca
약함
Slabá
+ 弱い
Normal
@@ -3168,6 +3644,7 @@
Normal
보통
Normální
+ 普通
Strong
@@ -3182,6 +3659,7 @@
Forte
강함
Silná
+ 強い
Extreme
@@ -3196,6 +3674,7 @@
Extrema
매우강함
Extrémní
+ 非常に活発
Weather
@@ -3210,6 +3689,7 @@
Clima
날씨
Počasí
+ 天候
Always sunny
@@ -3224,6 +3704,7 @@
Sempre ensolarado
맑은 날씨 지속
Stále slunečno
+ いつも晴れ
Random without rain
@@ -3238,6 +3719,7 @@
Aleatório sem chuva
무작위로 비가 내림
Náhodně bez deště
+ 雨以外ランダム
Random
@@ -3252,6 +3734,7 @@
Aleatório
모든 기상현상이 무작위로 나타남
Náhodně
+ ランダム
Shorter nights
@@ -3266,6 +3749,7 @@
Noites curtas
짧은 밤
Kratší noci
+ 短い夜
Repairing
@@ -3280,6 +3764,7 @@
Reparando
수리중
Opravování
+ 修理中
Rearming in %1s
@@ -3294,6 +3779,7 @@
Remuniciando em %1s
탄약보급중입니다. %1 초 남음.
Přezbrojení za %1s
+ 再武装中 %1 秒
Refueling
@@ -3308,6 +3794,7 @@
Reabastecendo
재급유중
Doplňování paliva
+ 給油中
-- TAKE INTEL
@@ -3322,6 +3809,7 @@
-- PEGAR INTELIGÊNCIA
-- 정보 입수
-- VZÍT INFORMACE
+ -- 機密文書を回収
-- SECONDARY OBJECTIVES
@@ -3336,6 +3824,7 @@
-- OBJETIVOS SECUNDÁRIOS
-- 부차적인 작전목표
-- VEDLEJŠÍ ÚKOLY
+ -- 副次任務
SECONDARY OBJECTIVES
@@ -3350,6 +3839,7 @@
OBJETIVOS SECUNDÁRIOS
부차적인 작전목표
VEDLEJŠÍ ÚKOLY
+ 副次任務
Start
@@ -3364,6 +3854,7 @@
Iniciar
시작
Začít
+ 開始
Current intel: %1
@@ -3378,6 +3869,7 @@
Inteligência atual: %1
현재 정보: %1
Zpravodajské body: %1
+ 現在の情報ポイント: %1
Insufficient intel points
@@ -3392,6 +3884,7 @@
Pontos de inteligencia insuficientes
정보 포인트가 부족합니다.
Nedostatek zpravodajských bodů
+ 情報ポイントが足りません
Secondary mission already in progress
@@ -3406,6 +3899,7 @@
A missão secundária já está em andamento
이미 진행중인 부차적인 작전목표가 있습니다.
Vedlejší mise již probíhá
+ 副次任務作戦はすでに遂行中です
Hostile forces are heading towards %1.
@@ -3420,6 +3914,7 @@
Forças hostis estão a caminho de %1.
적군이 %1 로 향하고 있습니다.
Nepřátelské jednotky míří k %1.
+ 敵部隊は %1 に向けて前進を開始。
OPFOR Convoy
@@ -3434,6 +3929,7 @@
Comboio inimigo
적군차량행렬
OPFOR Konvoj
+ 敵輸送部隊
Waypoint
@@ -3448,6 +3944,7 @@
Waypoint
이동지점
Průjezdní bod
+ 通過点
OPFOR Convoy neutralized.
@@ -3462,6 +3959,7 @@
Comboio inimigo neutralizado.
적군차량부대 무력화.
OPFOR Konvoj zneškodněn.
+ 敵輸送部隊の無力化を確認。
OPFOR Convoy near %1.
@@ -3476,6 +3974,15 @@
Comboio inimigo nas proximidades de %1.
%1 근처에 적군차량행렬!
OPFOR Konvoj poblíž %1.
+ 敵輸送部隊を %1 付近に発見。
+
+
+ %4 in area: %1/%2\nNext check will run after %3 seconds...
+ エリア内の %4 の数: %1/%2\n %3 秒後に次のチェックが行われます...
+
+
+ %3 in area: %1/%2\nChecking...
+ エリア内の %3 の数: %1/%2\nチェック中...
Got it!
@@ -3490,6 +3997,7 @@
Entendido!
알았다!
Mám to!
+ OK!
-- TUTORIAL
@@ -3504,6 +4012,7 @@
-- TUTORIAL
-- 이용 안내
-- NÁVOD
+ -- チュートリアル
TUTORIAL
@@ -3518,6 +4027,7 @@
TUTORIAL
이용 안내
NÁVOD
+ チュートリアル
FOB Hunting
@@ -3532,13 +4042,14 @@
Caça à FOB
병참기지 기습
Hon na FOB
+ 前線基地攻撃 (FOB Hunting)
<t size='1.3' color='#ffa000'>FOB HUNTING</t><br/><br/><t size='1'>OPFOR forces use an array of small logistic bases situated behind the front lines. Destroying those assets would greatly disrupt the OPFOR supply lines and impair their capacity to react to our actions.</t><br/><br/><t size='1'>Your mission is to destroy all supply assets (trucks, containers) at the objective by any means at your disposal. Unfortunately our intelligence is not able to provide you with a precise position for the base, you will have to locate the objective in the red zone on your map.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Reward: OPFOR alert level reduced by 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>CHASSE A LA FOB</t><br/><br/><t size='1'>Les forces de l'OPFOR utilisent des bases logistiques situées derrière la ligne de front. Détruire ces objectifs pertubera les lignes d'approvisionnement de l'OPFOR et les empêchera de réagir efficacement à nos actions.</t><br/><br/><t size='1'>Votre mission est de détruire tous les équipements logistiques (camions, containers) présents sur l'objectif. Malheureusement nos renseignements ne permettent pas de vous donner la position précise de la base, vous devrez la chercher dans la zone rouge visible sur votre carte.</t><br/><br/><t size='1.15' color='#00a0ff'>Coût: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Récompense: niveau d'alerte de l'OPFOR réduit de 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>FOB JAGD</t><br/><br/><t size='1'>Die OPFOR Streitkräfte benutzen ein Netzwerk von kleineren Nachschubbasen hinter den Frontlinien. Diese zu zerstören würden die OPFOR Nachschublinien und ihre Reaktionsmöglichkeiten stark einschränken.</t><br/><br/><t size='1'>Ihr Auftrag ist es alle Nachschubkapazitäten (Container und Trucks) zu zerstören. Leider ist unser Geheimdienst nicht in der Lage, Ihnen die genaue Position des Ortes mitzuteilen. Sie werden das Ziel innerhalb der makierten roten Zone auf der Karte suchen müssen.</t><br/><br/><t size='1.15' color='#00a0ff'>Kosten: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Belohnung: OPFOR Alarmstatus wird um 40% reduziert</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>CAZA DE FOB</t><br/><br/><t size='1'>Las fuerzas del OPFOR utilizan una red de bases logísticas situadas tras las líneas enemigas. Destruir estos recursos interrunpira las líneas de abastecimiento del enemigo y entorpecerán su capacidad para responder a tus acciones.</t><br/><br/><t size='1'>Tu misión consiste en destruir todos los recursos (camiones, containers) en el objetivo por cualquier medio que esté en tus manos. Desafortunadamente nuestra inteligencia no permite obtener una localización precisa de la base, deberás encontrarla dentro de la zona marcada en rojo en el mapa.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Recompensa: nivel de alerta del OPFOR reducido en un 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
- <t size='1.3' color='#ffa000'>ОХОТА НА FOB</t><br/><br/><t size='1'>Силы OPFOR используют небольшие базы снабжения, расположенные за линией фронта. Уничтожение материальных средств этих баз значительно нарушит связи снабжения OPFOR и ухудшит их способность реагировать на ваши действия.</t><br/> <t size='1'>Ваша миссия состоит в том, чтобы уничтожить на базах все средства снабжения (грузовики, контейнеры) любыми средствами, находящимися в вашем распоряжении. К сожалению, наша разведка не в состоянии предоставить вам точное положение этих баз, вам придется найти их самостоятельно. Ищите базы снабжения в районе красной зоны, отмеченной на вашей карте.</t><br/><br/><t size='1.15' color='#00a0ff'>Стоимость: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Награда: уровень обеспокоенности OPFOR уменьшится на 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>ОХОТА НА FOB</t><br/><br/><t size='1'>Силы OPFOR используют небольшие базы снабжения, расположенные за линией фронта. Уничтожение материальных средств этих баз значительно нарушит связи снабжения OPFOR и ухудшит их способность реагировать на ваши действия.</t><br/><t size='1'>Ваша миссия состоит в том, чтобы уничтожить на базах все средства снабжения (грузовики, контейнеры) любыми средствами, находящимися в вашем распоряжении. К сожалению, наша разведка не в состоянии предоставить вам точное положение этих баз, вам придется найти их самостоятельно. Ищите базы снабжения в районе красной зоны, отмеченной на вашей карте.</t><br/><br/><t size='1.15' color='#00a0ff'>Стоимость: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Награда: уровень обеспокоенности OPFOR уменьшится на 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>CACCIA ALLA FOB</t><br/><br/><t size='1'>Le forze OPFOR utilizzano una serie di piccole basi logistiche situate dietro il fronte. Distruggere tali basi serve ad interrompere le linee di alimentazione OPFOR e mettere in pericolo la loro capacità di reagire alle nostre azioni.</t><br/><br/><t size='1'>La vostra missione è di distruggere tutte le attività di approvvigionamento (camion, contenitori) presso l 'obiettivo con ogni mezzo a vostra disposizione. Purtroppo la nostra intelligence non è in grado di fornire una posizione precisa della base, si dovrà individuare l'obiettivo all'interno della zona rossa sulla mappa.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Ricompensa: livello di allerta OPFOR ridotto del 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>狩猎前哨</t><br/><br/><t size='1'>敌军部队在阵地后方建有一组小型后勤基地。摧毁这些设施将会极大的打击敌军的补给线,并拖慢他们的反应速度。</t><br/><br/><t size='1'>你的任务是不惜一切代价摧毁目标区域所有补给物资(卡车、集装箱)。遗憾的是我们的情报部门无法为你提供这些基地的准确位置,你必须在地图的红色区域中自行搜索目标。</t><br/><br/><t size='1.15' color='#00a0ff'>花费:15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>奖励:敌军警戒等级降低40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>獵殺前線基地</t><br/><br/><t size='1'>敵方在陣地後建立了一組小型前線基地作為後勤用,一旦成功摧毀他們將能給予敵軍補給線致命性的打擊、並使他們對我們的進攻感到措手不及。</t><br/><br/><t size='1'>遺憾的是我們的情報單位並沒有辦法掌握確切位置,你的任務是在地圖上的紅色區域中尋找到敵方前線基地並摧毀所有基地內的補給物資(卡車、貨櫃)。</t><br/><br/><t size='1.15' color='#00a0ff'>花費:15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>獎勵:敵方警戒度降低 40 %</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
@@ -3546,6 +4057,7 @@
<t size='1.3' color='#ffa000'>CAÇA À FOB</t><br/><br/><t size='1'>As forças de oposição (FOROP) utilizam um conjunto de pequenas bases de logística situadas além do fronte de batalha. Destruindo tais recursos desestabilizaria consideravelmente suas linhas de suprimento e afetaria sua capacidade de reagir às nossas ações.</t><br/><br/><t size='1'>Sua missão é destruir todas as fontes de recurso (caminhões, contêineres) que estão no objetivo, a qualquer custo. Infelizmente, nossa inteligência não foi capaz de fornecer dados da localização precisa da base. Dessa forma, você deverá localizar o objetivo dentro da zona vermelha identificada em seu mapa.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Recompensa: Alerta das forças de oposição reduzidos em 40%.</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>병참기지 기습</t><br/><br/><t size='1'>현재 적군은 후방지역에 병참 기지를 운영하고 있습니다. 이 병참 기지를 파괴하면 전방 적군의 작전 수행능력을 저하시켜 아군의 작전 행동에 대응할 수 있는 역량이 약해질 것입니다.</t><br/><br/><t size='1'>아군의 작전 목표는 모든 군수물자을 파괴하는 것입니다.(트럭, 컨테이너 등) 아쉽게도 아군 정찰팀이 해당지역을 정찰하였으나 찾지 못하여 정확한 위치를 제공할 수 없기 때문에 당신의 지도에 표기된 빨간 영역 안에 위치한 적군 병참 기지를 찾아야 합니다.</t><br/><br/><t size='1.15' color='#00a0ff'>소모되는 정보 점수: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>보상: 경고 수준이 40% 감소합니다.</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>HON NA FOB</t><br/><br/><t size='1'>Jednotky OPFOR používají řadu menších logistických základen za hlavní linii. Zničení těchto prostředků výrazně naruší zásobováni OPFOR jednotek a naruší jejich schopnost reagovat na naše akce.</t><br/><br/><t size='1'>Cílem mise je zničit všechny zásobovací prostředky (náklaďáky, kontejnery) libovolnými prostředky. Bohužel naše rozvědka není schopna vám poskytnout přesnou polohou pro základny, budete ji muset najít v červené zóně na mapě.</t><br/><br/><t size='1.15' color='#00a0ff'>Cena: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Odměna: Snížení bojové pohotovosti OPFOR o 40%</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>前線基地攻撃</t><br/><br/><t size='1'>敵軍部隊は小規模な物流基地を後方に設置している。 これらの資源を破壊すれば敵補給船への打撃を与え、敵軍の警戒度を下げることが出来るはずだ。</t><br/><br/><t size='1'>諸君の任務は目標に存在するすべての補給用品(トラックやコンテナ)の破壊だ。 残念ながら我々の情報網では敵基地の正確な位置を特定するには至らなかった。 諸君には赤い範囲内で目標を捜索し、破壊してほしい。</t><br/><br/><t size='1.15' color='#00a0ff'>費用: 15<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>報酬: 敵部隊警戒度が 40% 低下。</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
Convoy Hijack
@@ -3560,9 +4072,10 @@
Interceptação de comboio
수송부대 무력화
Přepadení Konvoje
+ 輸送車列強襲 (Convoy Hijack)
- <t size='1.3' color='#ffa000'>CONVOY HIJACK</t><br/><br/><t size='1'>OPFOR forces use road convoys to resupply their defensive positions. Intercepting one of these convoys would effectively disrupt their supply lines, and we could use the occasion to retrieve an hefty amount of ammunition.</t><br/><br/><t size='1'>Your mission is to stop the OPFOR convoy by any means necessary. You can destroy it, or hijack it to retrieve all the ammunition you can grab. The target will be spotted on your map.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Reward: OPFOR alert level reduced by 15%</t><br/><t size='1.15' color='#ffa000'>Side reward: All the ammunition you can retrieve.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>CONVOY HIJACK</t><br/><br/><t size='1'>OPFOR forces use road convoys to resupply their defensive positions. Intercepting one of these convoys would effectively disrupt their supply lines, and we could use the occasion to retrieve an hefty amount of resources.</t><br/><br/><t size='1'>Your mission is to stop the OPFOR convoy by any means necessary. You can destroy it, or hijack it to retrieve all the ammunition you can grab. The target will be spotted on your map.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Reward: OPFOR alert level reduced by 15%</t><br/><t size='1.15' color='#ffa000'>Side reward: All the resources you can retrieve.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>INTERCEPTION DE CONVOI</t><br/><br/><t size='1'>Les forces de l'OPFOR utilisent des convois routiers pour réaprovisionner leurs positions. Intercepter un de ces convois pertuberait leurs lignes d'approvisionnement, et nous pourrions utiliser l'occasion pour récupérer une grande quantité de munitions.</t><br/><br/><t size='1'>Votre mission est de stopper le convoi de l'OPFOR par tous les moyens nécessaires. Vous pouvez le détruire, ou le stopper pour récupérer un maximum de munitions. La cible sera marquée sur votre carte.</t><br/><br/><t size='1.15' color='#00a0ff'>Coût: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Récompense: niveau d'alerte de l'OPFOR réduit de 15%</t><br/><t size='1.15' color='#ffa000'>Récompense secondaire: toutes les munitions que vous pourrez récupérer.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>KONVOI HINTERHALT</t><br/><br/><t size='1'>Die OPFOR Streitkräfte benutzen Straßenkonvois um ihre Verteidigungspositionen zu versorgen. Diese Konvois abzufangen würden ihre Nachschublinien effektiv unterbrechen und außerdem könnten wir die Möglichkeit nutzen, um selbst eine große Menge an Munition zu erbeuten.</t><br/><br/><t size='1'>Ihr Auftrag ist es, den OPFOR Konvoi auf jede erdenkliche Weise zu stoppen. Sie können ihn zerstören oder übernehmen, um soviel Munition wie möglich zu erbeuten. Das Ziel wird auf Ihrer Karte aufgeklärt.</t><br/><br/><t size='1.15' color='#00a0ff'>Kosten: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Belohnung: OPFOR Alarmstatus wird um 15% reduziert</t><br/><t size='1.15' color='#ffa000'>Weitere Belohnung: Soviel Munition wie Sie erbeuten können.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>INTERCEPTAR EL CONVOY</t><br/><br/><t size='1'>Las fuerzas OPFOR utilizan convoys de carretera para reabastecer sus posiciones defensivas. Interceptar uno de estos convoy rompería de forma efectiva sus líneas de suministro, y podríamos aprovechar la ocasión para obtener una buena cantidad de munición.</t><br/><br/><t size='1'>Tu misión consiste en parar ese convoy por cualquier medio. Puedes destruirlo o capturarlo para capturar toda la munición que sea posible. El objetivo aparecerá marcado en el mapa.</t><br/><br/><t size='1.15' color='#00a0ff'>Coste: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Recompensa: Nivel de alerta OPFOR reducido 15%</t><br/><t size='1.15' color='#ffa000'>Recompensa secundaria: Toda la munición que puedas traer.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
@@ -3574,8 +4087,8 @@
<t size='1.3' color='#ffa000'>INTERCEPTAÇÃO DE COMBOIO</t><br/><br/><t size='1'>As forças de oposição (FOROP) utilizam comboios terrestres para reabastecer suas posições defensivas. Interceptando um desses comboios afetaria efetivamente suas linhas de suprimento, e poderíamos usar a ocasião para recuperar uma grande quantidade de munições.</t><br/><br/><t size='1'>Sua missão é deter o comboio das forças de oposição utilizando qualquer meio possível. Você pode destruí-lo ou sequestrá-lo para recuperar toda a munição que conseguir transportar. O alvo será identificado em coordenadas específicas no seu mapa.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Recompensa: Nível de alerta das forças de oposição reduzido em 15%.</t><br/><t size='1.15' color='#ffa000'>Recompensa aliada: Toda a munição que conseguir.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>수송부대 무력화</t><br/><br/><t size='1'>현재 적군은 수송부대를 동원하여 그들의 방어 거점에 군수물자를 수송하고 있습니다. 수송부대 중 하나를 공격하여 그들의 보급선을 끊고, 많은 양의 군수물자를 노획하십시요.</t><br/><br/><t size='1'>아군의 임무는 수단과 방법을 가리지 않고 적 수송부대를 멈추게 하는 것입니다. 군수물자를 파괴할 것인지, 노획하여 아군의 군수물자로 확보할 것인지는 당신의 선택입니다. 당신의 지도에 위치가 표시될 것입니다.</t><br/><br/><t size='1.15' color='#00a0ff'>소모되는 정보 점수: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>보상: 경고 수준이 15% 감소합니다.</t><br/><t size='1.15' color='#ffa000'>추가 보상: 수송부대에서 노획할 수 있는 모든 군수물자.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>PŘEPADENÍ KONVOJE</t><br/><br/><t size='1'>Jednotky OPFOR používají konvoje k zásobení obraných pozic. Přerušením jediného konvoje můžete efektivně narušit zásobování, a také můžeme využít teto příležitosti k získání značného množství munice.</t><br/><br/><t size='1'>Cílem mise je zastavit konvoj libovolnými prostředky. Můžete je zničit nebo zajmout a získat tak munici. Pozice konvoje bude zaznačena do mapy.</t><br/><br/><t size='1.15' color='#00a0ff'>Cena: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Odměna: Bojová pohotovost OPFOR snížena o 15%</t><br/><t size='1.15' color='#ffa000'>Vedlejší odměna: Veškerá munice kterou zvládnete odnést.</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>輸送車列強襲</t><br/><br/><t size='1'>敵軍部隊は車列を用い防衛地点への補給を行っている。 この車列を襲撃すれば奴らの補給網に打撃を与えられるだろう。 そのうえ、敵の資源を接収することが出来るかもしれない。</t><br/><br/><t size='1'>諸君の任務は敵軍補給車列をいかなる手を使ってでも停止させることだ。 車両を破壊、もしくは強奪し資源を基地へ持ち帰れ。 目標は発見され次第マップに記載される。</t><br/><br/><t size='1.15' color='#00a0ff'>費用: 10<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>報酬: 敵部隊警戒度が 15% 低下。</t><br/><t size='1.15' color='#ffa000'>副次報酬: 手に入れた資源全て。</t><br/><br/><t size='10'><img image='res\secondary\convoy_obj.jpg'/></t>
-
BLUFOR defenders in owned sectors
@@ -3590,6 +4103,7 @@
Defensores aliados nos setores controlados
적군 공격시 방어군 생성
BLUFOR obránci v obsazených sektorech
+ 友軍防衛部隊をセクターに配置する
Auto-danger behavior on BLUFOR forces
@@ -3604,6 +4118,7 @@
Comportamento automático de alerta nas forças aliadas
아군 부대의 자동 경계 행위
Chování při automatickém nebezpečí BLUFOR jednotek
+ 友軍防衛部隊を自動的に警戒状態にする。
Maximum number of FOBs allowed
@@ -3618,6 +4133,7 @@
Número máximo de FOBs permitidas
전초기지 건설 가능 수
Maximum postavených FOB
+ FOBの最大数
You are not allowed to deploy more than %1 FOBs at the same time.
@@ -3632,6 +4148,7 @@
Você não está autorizado a instalar mais de %1 FOB(s) ao mesmo tempo.
%1 보다 더 많은 전진기지를 건설할 수 없습니다.
Nemůžete postavit víc jak %1 FOB
+ FOBを同時に %1 個以上設置することはできません。
%1 loadout successfully loaded.
@@ -3646,6 +4163,7 @@
Equipamento %1 carregado com sucesso
%1 장비를 성공적으로 불러왔습니다.
%1 výzbroj načtena.
+ 装備 %1 を読み込みました。
Search and Rescue
@@ -3660,6 +4178,7 @@
Busca e Resgate
수색 및 구출
Záchranná mise
+ 捜索救難 (Search and Rescue)
<t size='1.3' color='#ffa000'>SEARCH AND RESCUE</t><br/><br/><t size='1'>We have lost contact with a recon helicopter on mission behind the enemy lines. We believe the chopper was shot down by hostile forces.</t><br/><br/><t size='1'>The helicopter may have crashlanded anywhere in a large zone around its last known position. Your mission is to retrieve the chopper crew and their precious intel. Hostile forces may have found them first, so you must be quick, careful, and ready to engage.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Reward: 20 intel points (10 for each crew alive).</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
@@ -3674,8 +4193,32 @@
<t size='1.3' color='#ffa000'>BUSCA E RESGATE</t><br/><br/><t size='1'>Perdemos contato com um helicóptero de reconhecimento presente em uma missão atrás das linhas inimigas. Acreditamos que o helicóptero foi abatido por forças hostis.</t><br/><br/><t size='1'>O helicóptero pode ter feito um pouso forçado em local próximo de sua última posição conhecida. Sua missão é recuperar a tripulação do helicóptero e sua preciosa inteligência. Forças hostis podem tê-los localizado primeiro, portanto seja rápido, cuidadoso e esteja pronto para engajar o inimigo.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Recompensa: 20 pontos de inteligência (10 para cada membro vivo da tripulação).</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>수색 및 구출</t><br/><br/><t size='1'>적군 후방지역에서 정찰임무를 수행하던 아군 정찰기와 교신이 끊어졌습니다. 현 상황으로 판단할때 적군에게 격추당한 것 같습니다.</t><br/><br/><t size='1'>아군의 임무는 마지막 교신 위치를 중심으로 아군 정찰기의 흔적을 찾는 것입니다. 적군이 먼저 발견하기전에 아군 정찰기의 흔적을 찾아 승무원 구출 및 다른 정보들을 획득, 복귀해야 합니다. 교전이 벌어질 수 있습니다.</t><br/><br/><t size='1.15' color='#00a0ff'>소요되는 정보 점수: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>보상: 정보 점수가 20점 추가됩니다. 또한 구출한 인원 1명당 정보 점수가 10점 추가됩니다.</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
<t size='1.3' color='#ffa000'>ZÁCHRANNÁ MISE</t><br/><br/><t size='1'>Ztratili jsme kontakt s průzkumným vrtulníkem za nepřátelskými liniemi. Věříme že ji sestřelily nepřátelské jednotky.</t><br/><br/><t size='1'>Vrtulník mohl havarovat kdekoliv ve velké vzdálenosti od místa kde jsme s ní ztratily kontakt. Cílem mise je najít a zachránit přeživší posádku. Nepřátelské jednotky tam mohou být jako první, proto musíme jednat rychle, opatrně a být připraveni k boji.</t><br/><br/><t size='1.15' color='#00a0ff'>Cena: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>Odměna: 20 zpravodajských bodů (10 za každého člena posádky).</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>捜索救難</t><br/><br/><t size='1'>我々の偵察ヘリコプターとの連絡が敵前線の後方で断たれた。 恐らく敵軍部隊に撃墜させられたものと思われる。</t><br/><br/><t size='1'>ヘリコプターは最後に連絡のあったこの地域のどこかに不時着した可能性がある。 諸君の任務はヘリコプター乗員を救出し彼らの入手した情報を回収することだ。 恐らく敵軍部隊は彼らを先に発見し拘束している可能性がある。 そのため注意深く・素早い救助が必要となる。 交戦することを想定せよ。</t><br/><br/><t size='1.15' color='#00a0ff'>費用: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/></t><br/><t size='1.15' color='#ffa000'>報酬: 20 情報ポイント (乗員一人当たり10ポイント)</t><br/><br/><t size='10'><img image='res\secondary\fob_obj.jpg'/></t>
+
+
+ Humanitarian Aid
+ 人道支援 (Humanitarian Aid)
+
+
+ <t size='1.3' color='#ffa000'>HUMANITARIAN AID</t><br/><br/><t size='1'>Local civilians in our occupied sector are requesting supplies as humanitarian aid. This is an opportunity for us to show compassion and empathy towards the people of this region. They may eventually act as guerrilla allies and support us in our attacks.</t><br/><br/><t size='1'>Your mission is to transport and deliver our supplies to the requested sector. Resources required are 200 supplies (2 crates). Load the supplies onto the vehicle, head to the target location, and unload upon arrival.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/><br/>200 Supplies (2 crates)</t><br/><t size='1.15' color='#ffa000'>Reward: increase in Civil Reputation by 10pt.</t><br/><br/><t size='10'><img image='res\secondary\humaid_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>人道支援</t><br/><br/><t size='1'>我々の占領したセクターの地元市民が支援物資としてサプライを要求している。 我々がこの地域の市民に対して友好的であることをを示すチャンスだ。 彼らは最終的には我々の攻撃に加勢するゲリラとして活動してくれるかもしれない。</t><br/><br/><t size='1'>諸君の任務は要請のあったセクターに我々のサプライを輸送し、譲渡することだ。 資源は200サプライ (最低2箱) 必要となる。 車両に物資を積み込み目標地点に向かい到着したら荷下ろしすれば良い。</t><br/><br/><t size='1.15' color='#00a0ff'>費用: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/><br/>200 サプライ (最低2箱)</t><br/><t size='1.15' color='#ffa000'>報酬: 市民評価が10ポイント上昇。</t><br/><br/><t size='10'><img image='res\secondary\humaid_obj.jpg'/></t>
+
+
+ 燃料切れ (Bingo Fuel)
+ Bingo Fuel
+
+
+ <t size='1.3' color='#ffa000'>燃料切れ</t><br/><br/><t size='1'>我々の占領した友好的な工場が燃料を要請している。 燃料があれば工場は我々の為に各種の資源をすぐさま生産してくれるだろう。</t><br/><br/><t size='1'>諸君の任務は要請のあった工場に我々の燃料を輸送し、譲渡することだ。 資源は200燃料 (最低2箱) 必要となる。 車両に物資を積み込み目標地点に向かい到着したら荷下ろしすれば良い。</t><br/><br/><t size='1.15' color='#00a0ff'>費用: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/><br/>200 燃料 (最低2箱)</t><br/><t size='1.15' color='#ffa000'>報酬: ランダムな資源最大6個。</t><br/><br/><t size='10'><img image='res\secondary\humaid_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>BINGO FUEL</t><br/><br/><t size='1'>Our occupied friendly factories are requesting fuel. With fuel, the factories will quickly produce various resources for us.</t><br/><br/><t size='1'>Your mission is to transport and deliver our fuel to the requested sector. Resources required are 200 fuel (2 crates). Load the fuel onto the vehicle, head to the target location, and unload upon arrival.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/><br/>200 Fuel (2 crates)</t><br/><t size='1.15' color='#ffa000'>Reward: 6x Random resources.</t><br/><br/><t size='10'><img image='res\secondary\humaid_obj.jpg'/></t>
+
+
+ 前哨基地補給 (Outpost Rearming)
+ Outpost Rearming
+
+
+ <t size='1.3' color='#ffa000'>前哨基地補給</t><br/><br/><t size='1'>友軍の軍事基地が弾薬を要請している。 弾薬があれば敵軍の注意や戦力を分散し、敵の警戒度を減少させることが出来るかもしれない。</t><br/><br/><t size='1'>諸君の任務は要請のあった軍事基地に我々の弾薬を輸送し、譲渡することだ。 資源は200弾薬 (最低2箱) 必要となる。 車両に物資を積み込み目標地点に向かい到着したら荷下ろしすれば良い。</t><br/><br/><t size='1.15' color='#00a0ff'>費用: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/><br/>200 弾薬 (最低2箱)</t><br/><t size='1.15' color='#ffa000'>報酬: 敵部隊警戒度が 8ポイント 低下。</t><br/><br/><t size='10'><img image='res\secondary\humaid_obj.jpg'/></t>
+ <t size='1.3' color='#ffa000'>OUTPOST REARMING</t><br/><br/><t size='1'>Friendly military outpost request ammunition. Ammunition may help to disperse the attention and forces of OPFOR and reduce the OPFOR alert level.</t><br/><br/><t size='1'>Your mission is to transport and deliver our ammunition to the requested sector. Resources required are 200 ammunition (2 crates). Load the ammunitions onto the vehicle, head to the target location, and unload upon arrival.</t><br/><br/><t size='1.15' color='#00a0ff'>Cost: 8<img image='\A3\Ui_f\data\GUI\Cfg\Ranks\general_gs.paa'/><br/>200 Ammunition (2 crates)</t><br/><t size='1.15' color='#ffa000'>Reward: OPFOR alert level reduced by 8pt</t><br/><br/><t size='10'><img image='res\secondary\humaid_obj.jpg'/></t>
-
AI recruitment limit per squad
@@ -3690,6 +4233,7 @@
Limite de recrutamento de IA por grupo
아군 분대당 AI병사 모집 한도
Limit verbování AI jednotek na družstvo.
+ 分隊当たりのAI徴兵の最大数
Crashed helicopter near %1.
@@ -3704,6 +4248,7 @@
Helicóptero abatido nas proximidades de %1.
%1 근처에 정찰기가 추락했습니다.
Havárie vrtulníku poblíž %1
+ ヘリコプターが %1 付近に墜落した。
SAR mission failed, both crew are KIA.
@@ -3718,6 +4263,7 @@
A missão de busca e resgate falhou, ambos os tripulantes morreram em combate.
구조작전 실패, 승무원 전원 사망.
Záchranná mise selhala, všichni jsou mrtví.
+ 捜索救難作戦は失敗だ。 乗員はどちらも死亡してしまった。
SAR mission succeeded.
@@ -3732,6 +4278,7 @@
Missão de busca e resgate concluída com sucesso.
구출작전 성공!
Záchranná mise byla úspěšná
+ 捜索救難作戦は成功した。
Player mapmarkers activation through extended options
@@ -3745,6 +4292,7 @@
Ativação de identificação dos jogadores no mapa, através de opções avançadas
플레이어 지도 표시기능 활성화
Aktivování hráčských značek skrz rozšířené menu
+ プレイヤーマップマーカー
Mobile Respawn
@@ -3758,6 +4306,7 @@
Respawn móvel
재투입차량
Mobilní respawn
+ モバイルリスポーン
Mobile Arsenal
@@ -3771,12 +4320,13 @@
Arsenal móvel
재투입차량에 '무기고' 설치
Mobilní arzenál
+ モバイルアーセナル
Respawn on attacked sectors
Respawn bei unter Angriff stehenden Sektoren
+ 攻撃を受けている地点からのリスポーン
-
Killah Potatoes flag
@@ -3790,6 +4340,7 @@
Bandeira da Killah Potatoes
Killah Potatoes 깃발
Killah Potatoes vlajka
+ 旗(キラーポテト)
Small storage area
@@ -3803,6 +4354,7 @@
Depósito pequeno
소형 저장 창고
Malá skladovací plocha
+ 小型倉庫
Large storage area
@@ -3816,6 +4368,7 @@
Depósito grande
대형 저장 창고
Velká skladovací plocha
+ 大型倉庫
Salvage Depot
@@ -3829,6 +4382,7 @@
Centro de desmanche de veículos
재활용공장
Opravárenské Depo
+ サルベージデポ
Flight Control
@@ -3842,32 +4396,35 @@
Controle de tráfego aéreo
비행 관제소
Letecká kontrola
+ フライトコントロール
- Helipad
- Helikopterlandeplatz
- Helipuerto
- Вертолетная площадка
- Eliporto
- 停机坪
- 停機坪
- Heliped
- Heliporto
- 헬기착륙장
- Helipad
+ Helicopter Slot
+ Helikopter Produktionsplatz
+ Ranura de Producción de Helicópteros
+ Слот для производства вертолетов
+ Slot Produzione Elicotteri
+ 直升机生产槽
+ 直升機生產槽
+ Helikopter Üretim Yuvası
+ Fenda de Produção de Helicópteros
+ 헬리콥터 제조 슬롯
+ Slot pro výrobu vrtulníků
+ ヘリコプター製造スロット
- Tent Hangar
- Zelthangar
- Hangar de aviones
- Ангар
- Hangar Aereo
- 机库
- 機庫
- Çadırdan hangar
- Hangar para aeronaves
- 항공기 격납고
- Stanový Hangár
+ Plane Slot
+ Flugzeug Produktionsplatz
+ Ranura de Producción de Aviones
+ Слот для производства самолетов
+ Slot Produzione Aerei
+ 飞机生产槽
+ 飛機生產槽
+ Uçak Üretim Yuvası
+ Fenda de Produção de Aviões
+ 비행기 제조 슬롯
+ Slot pro výrobu letadel
+ 航空機製造スロット
There is no free storage area nearby.
@@ -3881,6 +4438,7 @@
Não há depósito disponível nas proximidades.
근처에 남은 저장공간이 없습니다.
V blízkosti není volná skladovací plocha.
+ 倉庫が近くにないため収納できません。
-- STORE CRATE
@@ -3894,6 +4452,7 @@
-- ARMAZENAR CAIXA NO DEPÓSITO
-- 저장창고에 쌓기
-- ULOŽIT BEDNU
+ -- 貨物を収納
-- UNLOAD SUPPLY CRATE
@@ -3907,6 +4466,7 @@
-- DESCARREGAR CAIXA DE SUPRIMENTOS
-- 보급품(S) 내리기
-- VYLOŽIT BEDNU SE ZÁSOBAMI
+ -- サプライを取り出す
-- UNLOAD AMMO CRATE
@@ -3920,6 +4480,7 @@
-- DESCARREGAR CAIXA DE MUNIÇÃO
-- 탄약(A) 내리기
-- VYLOŽIT BEDNU S MUNICÍ
+ -- 弾薬を取り出す
-- UNLOAD FUEL CRATE
@@ -3933,6 +4494,7 @@
-- DESCARREGAR BARRIS DE COMBUSTÍVEL
-- 연료(F) 내리기
-- VYLOŽIT BEDNU S PALIVEM
+ -- 燃料を取り出す
-- CHECK CONTENT
@@ -3946,6 +4508,7 @@
-- CHECAR CONTEÚDO
-- 내용물 확인
-- ZKONTROLOVAT OBSAH
+ -- 貨物を調べる
Crate contains %1 resources
@@ -3959,6 +4522,7 @@
Caixa contém %1 recursos
이 박스에는 %1 자원이 있습니다.
Bedna obsahuje 1%
+ 貨物には資源が %1 単位含まれています
-- Change alignment
@@ -3972,6 +4536,7 @@
-- Mudar alinhamento
-- 땅에 맞춰 정렬
-- Změnit zarovnání
+ -- アライメント方式を変更
Not enough free storage space
@@ -3985,6 +4550,7 @@
Não há espaço de armazenamento suficiente
저장 공간이 부족합니다.
-- Málo úložného prostoru
+ 倉庫に空きがありません
You can't recycle preplaced objects
@@ -3998,6 +4564,7 @@
Você não pode reciclar objetos pré inseridos
사전에 배치된 객체들은 재활용 할 수 없습니다.
Nelze rozebrat představené objekty
+ ミッション開始時から設置済のオブジェクトは解体できません。
Can't recycle:\nNo Salvage Depot in FOB area
@@ -4011,6 +4578,7 @@
Não é possível reciclar:\nNão há centro de desmanche de veículos na área da FOB
전초기지 영역안에 재활용공장이 없어 재활용 할 수 없습니다.
Nelze rozebrat:\nV dosahu není žádný Opravárenské depo
+ 解体できません: サルベージデポがFOBにありません
-- REASSIGN ZEUS
@@ -4024,6 +4592,7 @@
-- REDESIGNAR ZEUS
-- 제우스 재배치
-- PŘIDĚLIT ZEUS
+ -- ZEUSに再指定
GLOBAL
@@ -4037,6 +4606,7 @@
GLOBAL
전체군수물자수량
GLOBÁLNÍ
+ 全域
-- Switch resource display
@@ -4050,6 +4620,7 @@
-- Alterar painel de recursos
-- 군수물자현황 조회
-- Změnit zobrazení surovin
+ -- 資源情報の切り替え
Following items are not allowed:\n%1
@@ -4063,6 +4634,7 @@
Os seguintes itens não são permitidos:\n%1
허용 금지 항목 :\n%1
Následující věci nejsou dovoleny:\n%1
+ このアイテムは許可されていません:\n%1
-- Production Settings
@@ -4076,6 +4648,7 @@
-- Definições de Produção
-- 생산 설정
-- Nastavení produkce
+ -- 生産設定
Sector Type:
@@ -4102,6 +4676,7 @@
Classe do setor:
거점 유형 :
Typ sektoru:
+ セクタータイプ:
City
@@ -4115,6 +4690,7 @@
Cidade
도시
Město
+ 市街地
Factory
@@ -4128,6 +4704,7 @@
Fábrica
공장
Továrna
+ 工場
Producing:
@@ -4141,6 +4718,7 @@
Produzindo:
생산:
Produkce:
+ 生産中:
Nothing
@@ -4154,6 +4732,7 @@
Nada
없음.
Nic
+ なし
Storage:
@@ -4167,6 +4746,7 @@
Depósito:
보관:
Sklad:
+ 倉庫:
Not present
@@ -4180,6 +4760,7 @@
Inexistente
물품 없음
Není
+ 倉庫がありません
Time left:
@@ -4193,6 +4774,7 @@
Tempo restante:
남은 시간:
Zbývající čas:
+ 所要時間:
No production
@@ -4206,6 +4788,7 @@
Sem produção
생산 없음
Žádná produkce
+ 生産していません
%1 minutes
@@ -4219,6 +4802,7 @@
%1 minutos
%1 분
%1 minuty
+ %1 分
Facilities available
@@ -4232,6 +4816,7 @@
Instalações disponíveis
가용 공장
Dostupné továrny
+ 利用可能な工場
Stock Overview
@@ -4245,6 +4830,7 @@
Visão geral do armazém
보관내역
Stav skladů
+ 倉庫の備蓄状況
%1 Crate
@@ -4258,6 +4844,7 @@
%1 Caixa
%1 상자
%1 Bedna
+ %1 箱
%1 Crates
@@ -4271,6 +4858,7 @@
%1 caixas
%1 상자
%1 Bedny
+ %1 箱
Choose Production
@@ -4284,6 +4872,7 @@
Selecione a produção
생산품 선택
Vyberte produkci
+ 生産する資源
Sector setting saved.
@@ -4297,6 +4886,7 @@
Definição do setor salva
설정 저장
Nastavení sektoru uloženo
+ セクター設定を保存
-- Build storage --
@@ -4310,6 +4900,7 @@
-- Construir depósito --
-- 저장창고 건설 --
-- Postavit skladiště --
+ -- 倉庫を建設 --
-- Build supply facility --
@@ -4323,6 +4914,7 @@
-- Construir fábrica de suprimentos --
-- 보급품(S) 생산공장 건설
-- Postavit továrnu na zásoby --
+ -- サプライ工場の建設 --
-- Build ammo facility --
@@ -4336,6 +4928,7 @@
-- Construir fábrica de munição --
-- 탄약(A) 생산공장 건설
-- Postavit továrnu na munici --
+ -- 弾薬工場の建設 --
-- Build fuel facility --
@@ -4349,6 +4942,7 @@
-- Construir refinaria de combustível --
-- 연료(F) 생산공장 건설
-- Postavit továrnu na palivo --
+ -- 燃料工場の建設 --
Needed facility not built in sector.
@@ -4362,6 +4956,7 @@
É necessária uma fábrica não construída neste setor
이 지역에는 생산에 필요한 공장이 없습니다.
Továrna nemůže být postavena v sektoru.
+ 生産に必要な設備が セクターに建築されていません。
Not enough resources.\n\nYou need:\n%1 Supplies\n%2 Ammo\n%3 Fuel
@@ -4375,6 +4970,7 @@
Sem recursos suficientes.\n\nVocê precisa de:\n%1 Suprimentos\n%2 Munição\n%3 Combustível
공장을 지을러면 이 지역의 저장창고에 군수물자가 필요합니다.\n\n필요항목:\n%1 보급품\n%2 탄약\n%3 연료
Nedostatek surovin.\n\nPotřebujete:\n%1 Zásoby\n%2 Munice\n%3 Palivo
+ 資源が足りません。\n\nこれらの資源が必要です:\n%1 サプライ\n%2 弾薬\n%3 燃料
Facility established.
@@ -4388,6 +4984,7 @@
Estrutura criada.
이미 세워진 공장
Továrna postavena
+ 工場を建設しました
AI Logistics Module
@@ -4401,6 +4998,7 @@
Módulo Logístico automatizado
군수물자수송 AI 물류시스템
Modul AI logistiky
+ AI物流モジュール
-- Logistic Overview
@@ -4414,6 +5012,7 @@
-- Visão Geral da Logística
-- 물류 개요
-- Logistický přehled
+ -- 物流管理
Add
@@ -4440,6 +5040,7 @@
Adicionar
AI수송팀 편성
Přidat
+ 追加
Del
@@ -4453,6 +5054,7 @@
Deletar
AI수송팀 해체
Odebrat
+ 削除
Status:
@@ -4466,6 +5068,7 @@
Status:
상태:
Stav:
+ 状態:
Standby
@@ -4479,6 +5082,7 @@
Aguardando ordens
대기중
Nečinný
+ 待機
Loading
@@ -4492,6 +5096,7 @@
Carregando
군수물자 상하차 중
Nakládá
+ 積載中
On the way
@@ -4505,6 +5110,7 @@
A caminho
목적지로 이동중
Na cestě
+ 運送中
Aborting mission
@@ -4518,6 +5124,7 @@
Abortando missão
수송 중단
Rušení mise
+ 任務を中止
No resources
@@ -4531,6 +5138,7 @@
Sem recursos
군수물자 없음
Nejsou suroviny
+ 資源不足
No storagespace
@@ -4544,6 +5152,7 @@
Sem espaço no depósito
보관 여유 없음
Není úložné místo
+ 倉庫不足
Next destination:
@@ -4557,6 +5166,7 @@
Próximo destino:
다음 목적지:
Další cíl:
+ 次の目的地:
Current convoy cargo
@@ -4570,6 +5180,7 @@
Comboio de carga atual
운반중인 군수물자
Aktuální náklad konvoje
+ 現在の貨物
Assigned Trucks
@@ -4583,6 +5194,7 @@
Veículos em uso
보유 트럭
Nákladní auta
+ 配備中のトラック
Assign Truck
@@ -4596,6 +5208,7 @@
Designar Transporte
트럭 추가
Koupit náklaďák
+ トラックを配備
Unassign Truck
@@ -4609,6 +5222,7 @@
Dispensar Transporte
트럭 해제
Prodat náklaďák
+ トラックを解任
Costs: 100 supplies and 100 fuel.
@@ -4622,6 +5236,7 @@
Custa: 100 de suprimento e 100 de combustível.
비용: 100보급품(S), 100연료(F)
Cena: 100 zásob a 100 paliva
+ 費用: サプライ100 燃料100
Gives: 50 supplies and 50 fuel.
@@ -4635,6 +5250,7 @@
Fornece: 50 de suprimento e 50 de combustível.
회수: 50보급품(S), 50연료(F)
Cena: 50 zásob a 50 paliva
+ 回収可能: サプライ50 燃料50
Confirm Mission
@@ -4648,6 +5264,7 @@
Confirmar Missão
수송 시작
Potvrdit misi
+ 任務を実行
Abort Mission
@@ -4661,6 +5278,7 @@
Abortar Missão
수송 취소
Zrušit misi
+ 任務を中止
Not enough resources
@@ -4674,6 +5292,7 @@
Sem recursos suficientes
군수물자가 충분하지 않습니다.
Nedostatek surovin
+ 資源が不足しています
Mission planning
@@ -4687,6 +5306,7 @@
Planejamento de missão
수송 계획
Plánování mise
+ 任務計画
Destination A
@@ -4700,6 +5320,7 @@
Destino A
출발지역-A-
Cíl A
+ 目的地点 A
Destination B
@@ -4713,6 +5334,7 @@
Destino B
도착지역-B-
Cíl B
+ 目的地点 B
Supplies value from here to the other destination. (only whole numbers)
@@ -4726,6 +5348,7 @@
Valores de suprimento daqui para o outro destino. (apenas valores inteiros)
출발지에서 도착지로 운반되는 보급품(S) 수량(정수만 입력)
Hodnota zásob odtud do cílového místa. (pouze celá čísla)
+ ここから次の目的地点まで輸送したいサプライの数 (整数で入力)
Ammo value from here to the other destination. (only whole numbers)
@@ -4739,6 +5362,7 @@
Valores de munição daqui para o outro destino. (apenas valores inteiros)
출발지에서 도착지로 운반되는 탄약(A) 수량(정수만 입력)
Hodnota munice odtud do cílového místa. (pouze celá čísla)
+ ここから次の目的地点まで輸送したい弾薬の数 (整数で入力)
Fuel value from here to the other destination. (only whole numbers)
@@ -4752,6 +5376,7 @@
Valores de combustível daqui para o outro destino. (apenas valores inteiros)
출발지에서 도착지로 운반되는 연료(F) 수량(정수만 입력)
Hodnota paliva odtud do cílového místa. (pouze celá čísla)
+ ここから次の目的地点まで輸送したい燃料の数 (整数で入力)
Your mission is not possible.
@@ -4765,6 +5390,7 @@
Não é possível executar a missão designada.
이 수송임무는 현재 불가능합니다.
Vaše trasa není možná.
+ その任務は不可能です。
You can't abort this mission at the moment.
@@ -4778,23 +5404,9 @@
Não é possível abortar esta missão neste momento.
이 수송임무를 당장 중단 할 수 없습니다.
Trasu nelze v tuto chvíli zrušit.
+ 現在この任務を中止することはできません。
-
-
- Liberate the region from the enemy oppression! Strategy will be key! Good luck soldiers.
- Avec le pouvoir de la Liberté et de la Démocratie votre mission est de libérer Altis de l'oppression de l'OPFOR.
- Befreie das Gebiet von der feindlichen Unterdrückung mit der Kraft von Freiheit und Demokratie
- Con el poder de la Libertad y la Democracia, debes liberar Altis de la opresión del OPFOR
- С помощью сил "свободы" и "демократии" вы должны освободить регион от угнетения OPFOR.
- Libera la regione dall'oppressione nemica! La strategia è la chiave! Buona fortuna soldati.
- 从敌人手中解放这个地区!战略是制胜关键!士兵们祝你们好运。
- 從敵人手中解放此區域!戰略是致勝關鍵!士兵們,祝好運!
- Bu bölgeyi düşman etkisinden kurtar! Strateji anahtardır! Bol şanslar askerler.
- Libere a região da opressão inimiga! Estratégia será essencial! Boa sorte infantaria.
- 적의 수중에서 이 지역을 탈환하자! 전략이 승리의 관건이다! 병사들이여, 행운을 빈다.
- Osvoboďte oblast od nepřátelského útisku. Strategie je klíčová! Hodně štěstí vojáci.
-
1. Introduction
1. Introduction
@@ -4808,6 +5420,7 @@
1. Introdução
1. 소개
1. Instrukce
+ 1. はじめに
<br/><br/>Hello gentlemen and welcome to the region, enemy forces have surprised us with a brutal and overwhelming offensive. They now have complete control of the region but with your efforts, that won't last long.<br/> <br/>Our primary objective is simple: liberate the region from enemy control!<br/> <br/>The road to victory will be long and dangerous. You will have to retake many sectors and acquire the necessary resources to improve the quantity and quality of friendly forces engaged in this campaign.<br/> <br/>Moreover, enemy forces will most certainly react to our advance. You will have to engage in secondary operations to weaken a foe that fights with higher numbers and better equipment than you do.<br/> <br/>In your efforts you will need the support of the local population, so always double-check what you're firing at!<br/> <br/>Questions? HQ out.<br/> <br/>
@@ -4821,6 +5434,7 @@
<br/><br/>Olá senhores, sejam bem-vindos à região. Forças inimigas nos surpreenderam com uma ofensiva brutal e absurda. Eles possuem agora controle completo sobre a região, porém com seus esforços, tal controle não irá durar por muito tempo.<br/> <br/>Nosso objetivo primário é simples: Liberar a região do controle inimigo!<br/> <br/>O caminho para vitória será longo e perigoso. Você terá que retomar dezenas de setores e adquirir os recursos necessários para desenvolver a quantidade e qualidade das forças aliadas engajadas nesta campanha.<br/> <br/>Além disso, as forças inimigas certamente irão reagir aos nossos avanços. Você deverá engajar em operações secundárias para enfraquecer um inimigo que combate em maior número e com melhores equipamentos que você.<br/> <br/>Em sua campanha, você precisará do apoio da população local, portanto, sempre confirme no que está disparando e em quem!<br/> <br/>Perguntas? Quartel General, câmbio. QRT.<br/> <br/>
<br/><br/>제군들! 이 작전지역에 배치받은 것을 환영한다!. 현재 적군은 잔인하고 압도적인 공격으로 우리를 놀라게하였고, 이제 이 지역에 대한 완전한 통제권을 가지고 있다.<br/> <br/>하지만 아군의 노력으로 인해 오래가지 못할 것이다. 우리의 목표는 단 하나! 이 지역을 다시 탈환하는 것이다!<br/> <br/>승리의 길은 멀고도 험하다. 많은 희생을 필요로 한다. 또한 아군의 질과 양을 향상시키기 위해 필요한 자원을 생산, 확보하여 전초기지(FOB)로 수송해야 한다.<br/> <br/>적군은 우리의 진격에 가장 효과적인 방법으로 반격을 할 것이다. 따라서 우리는 적군을 약화시키기위해 부차적인 작전에도 참여해야만 한다.<br/> <br/>또한 지역 주민들의 지지를 받기위해 필요한 조치을 해야 할 것이며, 이를 항상 확인해야 할 것이다.<br/> <br/>질문? HQ out.<br/> <br/>
<br/><br/>Dobrý den, dámy a pánové, vitejte v oblasti. Jednotky OPFOR nás překvapily brutálním a ohromujícím útokem. Nyní mají vládu nad celým ostrovem, ale díky vaší snaze, ne na dlouho.<br/> <br/>Náš cíl je jednoduchý, osvobodit oblast od nepřátelského útisku.<br/> <br/>Cesta za vítězstvím bude dlouhá a nebezpečná. Musíme dobýt mnoho území a získat důležité zdroje k vylepšení a posílení BLUFOR jednotek operujících v tomto tažení.<br/> <br/>Navíc, jednotky OPFOR budou s největší pravděpodobností reagovat na váš postup. Budete muset splnit mnoho vedlejších úkolu k oslabení nepřátelské přesily s lepším vybavením.<br/> <br/>Ve svém úsilí budete potřebovat podporu místního obyvatelstva, takže se vždy ujistěte, po čem střílíte.<br/> <br/>Otázky? HQ konči.<br/> <br/>
+ <br/><br/>ご機嫌よう諸君、この地域へようこそ。敵軍は突如とした残忍で圧倒的な攻撃を仕掛け、地域を完全に制圧している。しかし、諸君の努力で長くは持たないだろう。<br/><br/>我々の主要目標は極めて単純だ。それは敵軍の支配からこの地域を解放することである!<br/><br/>勝利への道は長く険しいものとなるだろう。多くのセクターを奪還し、この戦役に参加する友軍の数と質を向上させるためには必要な資源を獲得しなければならない。<br/><br/>加えて、敵軍は我々の攻勢に必ず反応するだろう。諸君は、より多くの兵力と装備を持つ敵に対抗するため、弱体化させる副次作戦も実行する必要がある。<br/><br/>諸君の行動には、地元住民の支援が必要が必要になるため、常に照準を確認することを忘れないで欲しい。<br/><br/>質問はあるか?本部からは以上だ。<br/> <br/>
2. Starting the campaign!
@@ -4835,6 +5449,7 @@
2. Iniciando a campanha!
2. 전투시작
2. Začátek kampaně
+ 2. 作戦開始!
<br/><br/>You begin the campaign either onboard the USS Freedom, or at Chimera base, safe zones the enemy won't dare to attack. Your first choice is to choose where you want to deploy. At first you can only deploy at your starting position but as you progress, more options will become available such as Forward Operating Bases (FOB) and mobile respawns.<br/> <br/>At your starting position you can choose your equipment from a complete Arsenal. You will also find your first FOB packaged inside a container, the Spartan-01 helicopter and a few other small transport helicopters.<br/> <br/>You will have to ferry that container with the Spartan-01 (or choose to start with the first FOB already built). You can deploy this first FOB wherever you want (as long as you're 1km from the starting position and 300m from any sector), so it's up to you to choose the right place to start your campaign offensive.<br/> <br/>
@@ -4848,6 +5463,7 @@
<br/><br/>Você iniciará a campanha abordo do porta-aviões USS Fredom ou na base operacional Chimera, instalações que o inimigo não se atreverá a atacar. Sua primeira escolha será definir onde irá mobilizar. Primeiramente somente poderá mobilizar na sua posição inicial, entretanto, conforme progredir, mais alternativas se tornarão disponíveis, como a Base de Operações Avançadas (FOB) e os respawns móveis.<br/> <br/>Em sua posição inicial, você poderá escolher seu equipamento através de um arsenal completo. Você terá à sua disposição sua primeira FOB transportável, dentro de um contêiner. Também estará disponível o transporte aéreo de callsign Spartan-01 e mais alguns helicópteros de transporte.<br/> <br/>Você deverá mover o mencionado contêiner utilizando a Spartan-01 (ou escolha começar com a primeira FOB já construída). Você poderá mobilizar esta FOB para onde desejar (desde que esteja a 1km do ponto inicial e a 300 metros de qualquer setor). Assim, depende apenas de você escolher o local ideal para iniciar sua campanha ofensiva.<br/> <br/>
<br/><br/>최초의 작전 기지는 적이 절대로 건드리지 못할 안전지대로, 아군의 반격 나팔 소리의 첫 음표이기도 하며, 이번 반격 작전의 출발점이 될 것이다. 처음에는 작전 기지만 배치할 수 있었으나, 반격작전이 진행됨에 따라 FOB(전초기지) 또는 재투입차량에도 배치될 것이다.<br/> <br/>또한 최초의 작전 기지에서 '무기고'를 이용하여 무장을 갖출수 있고, 이미 건설된 건초기지가 있거나 또는 전초기지(FOB)차량을 1대 찾을 수 있을 것이다. 또한 운이 좋다면 재투입차량 또는 트럭이나 공중 탑재 장비등도 찾을 수 있을 것이다.<br/> <br/>당신이 처음으로 해야할 일은 무장을 갖추고, 이미 건설된 건초기지가 있다면 거기에서부터, 만약 전초기지(FOB)차량이 있다면 그 것을 찾아 FOB(전초기지)를 적당한 곳(최초의 작전기지로부터 1km, 도시로부터 300m 떨어진 곳)에 설치해야 한다. 이 지점이 바로 첫번째 반격이 시작되는 곳으로 반격을 시작하는 지점은 전적으로 당신의 선택에 달려 있다.<br/> <br/>만약 당신이 반격작전이 진행중인 상황에서 투입된다면, 먼저 지도를 살펴보라. 현재 아군이 어디서 전투중인지 알 것이다. 아군에게 무전으로 물어보거나 채팅으로 물어보면서 전투에 참여하라. 행운을 빈다.<br/> <br/>
<br/><br/>Zahájíte kampaň buď na palubě USS Freedom, nebo na základně Chimera, v bezpečných zónách, které se nepřítel neodváží zaútočit. První volbou je vybrat, kam chcete nasadit. Zpočátku se můžete nasadit pouze na vaší výchozí pozici, ale jak postupujete, budou k dispozici další možnosti, jako jsou Forward Operating Bases (FOB) a mobilní respawns.<br/> <br/>Na své počáteční pozici si můžete vybrat vybavení z kompletního Arsenalu. Také najdete svůj první FOB zabalený v kontejneru, vrtulník Spartan-01 a několik dalších malých transportních vrtulníků.<br/> <br/>Budete se muset přepravit s pomocí Spartan-01 (nebo se rozhodnete začít s první postavenou FOB již postavenou). Tento první FOB můžete nasadit kamkoli budete chtít (pokud jste 1 km od výchozí pozice a 300 m od jakéhokoli sektoru), takže je na vás, abyste vybrali správné místo pro zahájení ofenzivy.<br/> <br/>
+ <br/><br/>あなたは、USS Freedomに乗り込むか、もしくはキメラ基地にいる状態からキャンペーンを開始します。これらは敵が攻撃しない安全地帯です。最初に、出撃地点を選ぶことができます。始めは初期地点でしか出撃できませんが、キャンペーンを進めるにつれて、前線基地(FOB)やモバイルリスポーンなど、より多くの選択肢が利用可能になります。<br/><br/>初期地点では、完全なアーセナルから装備を選ぶことができます。また、最初のFOBが含まれたコンテナ、スパルタン-01ヘリコプター、およびいくつかの小型輸送ヘリコプターを見つけることができます。<br/><br/>あなたは、スパルタン-01でそのコンテナを輸送しなければなりません (または最初のFOBをすでに建てた状態でスタートすることもできます)。この最初のFOBは、任意の場所に展開することができます (ただし、初期地点から1km以上かつ各セクターから300m以上離れている必要があります)。キャンペーン攻勢を開始するための適切な場所を選択するのはあなた次第です。<br/><br/>
3. Objective
@@ -4862,6 +5478,7 @@
3. Objetivo
3. 작전 목표
3. Cíle
+ 3. 目標
<br/><br/>The primary objective of this campaign is to remove enemy forces from the region entirely. To achieve this, you will have to liberate ALL major cities within the region! This is the only victory condition for the campaign but those cities are tough nuts to crack with only limited resources at your disposal and a well established enemy force. <br/> <br/>To succeed, you will have to capture large number of different sectors, each with their own use.<br/> <br/>
@@ -4874,6 +5491,7 @@
<br/><br/>O objetivo primário desta campanha é remover completamente as forças inimigas da região. Para alçancar tal objetivo, você deverá liberar TODAS as principais cidades dentro da região! Esta é a única condição de vitória para a campanha, porém essas cidades serão difíceis de pacificar com recursos limitados à sua disposição. Além disso, as forças inimigas estão muito bem instaladas no território. <br/> <br/>Para lograr êxito, você deverá capturar uma extensa quantidade de setores, cada um com sua própria base de recursos.<br/> <br/>
<br/><br/>이 반격 작전의 최종 목표는 모든 적을 이 지역에서 완전히 몰아내는 것이다. 하지만 대도시에는 많은 적군들이 있고, 이 적군들은 잘 정비되어 있으며 충분한 장비를 보유하고 있다.<br/> <br/>이러한 대도시를 점령하기 위해선 많은 군수물자를 필요로 한다.<br/> <br/>많은 군수물자를 확보하기 위해서는 다수의 다른 거점들을 점령해야 한다. 거점 종류는 총 5가지이며 각각 특별한 기능을 가지고 있다. 이것을 잘 활용하여 아군의 질과 양을 항상시켜 최종 목표를 달성해야 한다.<br/> <br/>주의!!! 민간인을 학살하거나 재산을 약탈하지 마라!!! 적군 민병대가 출현할 것이다!!!<br/> <br/>
<br/><br/>Hlavním úkolem je vyhnat jednotky OPFOR z oblasti. K dosažení, budete muset obsadit všechna hlavní města v oblasti. Toto je jediná podmínka vítězství kampaně.<br/> <br/>Ale tyto města budou oříšek, máte k dispozici jen omezené zdroje a města jsou obsazená po zuby ozbrojenými jednotkami OPFOR. <br/> <br/>Aby jste uspěly, budete muset obsadit mnoho jiných sektorů, každý za jiným účelem.<br/> <br/>
+ <br/><br/>このキャンペーンの主な目標は、敵軍をこの地域から完全に駆逐することです。これを達成するためには、この地域内のすべての主要都市を解放する必要があります!これがキャンペーンの唯一の勝利条件ですが、限られた資源と確立された敵軍の存在下で、これらの都市を攻略することは困難です。<br/><br/>成功するためには、それぞれ独自の用途を持つ多数の異なるセクターを占領する必要があります。<br/><br/>
4. Sectors
@@ -4888,6 +5506,7 @@
4. Setores
4. 거점
4. Sektory
+ 4. セクター
<br/><br/>Sectors are split into 5 different types:<br/> <br/>- Points of Interest (PoI): Generally small to medium sized villages/towns. While strategically unimportant, these places are where the citizens of the region live and as such are key in obtaining their trust and sympathy.<br/> <br/>- Factories: Across the region you will find civilian factories under enemy control. These factories are specialized at creating one of the three resources (Supplies, Ammo, and Fuel), but can later be upgraded to produce all 3. As such they are a very strategic first target!<br/> <br/>- Military Bases: Home to large amounts of highly equipped enemy forces, these installations are heavily defended and will require large and well co-ordinated assaults if you have any hope in capturing them! Capturing these bases will enable us to deploy stronger assets in the region and are critical to your success.<br/> <br/>- Radio Towers (RT): When under enemy control, RTs will be used to call in reinforcements when a nearby sector is attacked by our own forces. The reaction time of the reinforcements will depend on the distance between the tower and the sector. When under friendly control, the towers will give useful map intel on hostile troop movements in the vicinity by intercepting their radio communications.<br/> <br/>- Major Cities: There are several major cities in the region. When all are under friendly control, we will most certainly have beaten back the enemy to a point where they cannot re-establish control. This is your primary objective.<br/> <br/>
@@ -4900,6 +5519,7 @@
<br/><br/>Os setores estão divididos em 5 tipos distintos:<br/> <br/>- Pontos de interesse: Geralmente vilarejos/cidades de proporção pequena para média. Enquanto não tão importantes estratégicamente, esses locais são onde os cidadãos desta região vivem e dessa forma, é a chave para obter sua confiança e simpatia.<br/> <br/>- Fábricas: Em toda a região, você encontrará fábricas civis sob controle inimigo. Estas fábricas são especializadas no desenvolvimento de um dos três tipos de recursos (Suprimentos, Munição e Combustível), no entanto podem ser aprimorada para produzir todas as três classes de recursos, dessa forma, são alvos estratégicos e devem ser prioridade em seus esforços!<br/> <br/>- Bases Militares: Lar de uma vasta quantidade de forças inimigas bem equipadas, essas instalações são fortemente protegidas e requerem uma grande e bem coordenada força de assalto para de capturá-la. Ao capturar essas bases, será possível disponibilizar maiores recursos na região, que serão críticos para o seu sucesso.<br/> <br/>- Torres de Rádio: Quando sob domínio inimigo, as torres de rádio serão utilizadas para solicitar reforços quando um setor próximo estiver sendo atacado pela Coalizão. O tempo de reação dependerá da distância entre a torre e o setor. Quando estiver sob controle aliado, as torres fornecerão inteligência sobre a movimentação das tropas inimigas na proximidade. Isto será possível pois as torres interceptarão as frequências inimigas.<br/> <br/>- Grandes Cidades: Existem dezenas de grandes cidades na região. Quando estiverem sob controle da Coalizão, certamente não será possível ao inimigo retomar seu controle. Este é seu objetivo primário.<br/> <br/>
<br/><br/>- 거점의 종류는 전부 5가지이다. 첫번째로 대도시는 큰 네모안에 세모가 그려져 있다. 대도시에는 잘 정비된 적군이 방어중이다. 이 곳을 점령하기 위해선 많은 병력이 필요하다. 참고로 모든 대도시를 점령하면 적군은 이 지역에서 후퇴할 것이다.<br/> <br/>- 두번째는 적군 군사기지로 마름모에 아래쪽에 선이 그려져 있으며 적군 기갑부대가 주둔하고 있다. 지속적으로 기계화부대를 동반한 수색정찰병을 내보고 있으며 근처 적군 도시를 공격하면 지원병을 보내기도 한다.<br/> <br/>- 세번째는 네모안에 통신탑이 그려져 있는 곳으로 '라디오타워'라고 한다. 이 곳을 점령하면 주변지역의 적 거점을 공격할때 적군들이 지원부대을 못부르거나 오더라도 적은 숫자만 오게 된다.<br/> <br/>- 네번째는 네모인데 가운데에 검은 점이 찍혀있는 것으로 '도시'이라고 한다. 이 곳을 점령하면 이용가능한 AI의 숫자가 증가(최대100명)한다.<br/> <br/>- 마지막으로 주유기 표시로 된 '공장'이다. 이 지역의 경우 도시 이름 옆에 (S),(A),(F)가 표기되어 있는데 이는 생산 가능한 보급품의 종류를 나타낸다. 즉 보급품은 (S), 탄약은 (A), 연료는 (F)이다.<br/> <br/>이 지역은 아군이 점령하게 되면 왼쪽 상단 메뉴안에 --저장창고 건설-- 이라는 메뉴가 생성된다. 마을내 적당한 곳에 저장창고를 건설하면 이 곳에 이 도시에서 생산되는 군수물자가 저장된다.<br/> <br/>이 군수물자를 AI 수송부대를 이용하여 전초기지로 운반하면 장비를 생산하는데 필요한 군수물자로 사용할 수 있게 된다.<br/> <br/>
<br/><br/>Sektory jsou rozděleny na 5 různých typů:<br/> <br/>- Body zajmu: obvykle malá a střední města, strategicky nedůležitá místa, kde žijí místní civilisté v klidu a harmonii.<br/> <br/>- Vojenské základny: plné jednotek OPFOR, tyhle základny jsou dobře bráněny a vyžadují silný a koordinovaný útok. Zajmutí těchto základen nám dovolí nasadit do boje novou techniku, která je kritická k našemu vítězství.<br/> <br/>- Továrny: Napříč celou oblastí mužete najít civilní továrny pod nepřátelskou kontrolou. Tyto továrny se specializují na výrobu jedné ze tří surovin (Zásoby, Munice, Palivo), ale později je lze vylepšit aby produkovaly všechny tři suroviny najednou. Jako takové jsou strategicky našim první cílem.<br/> <br/>- Rádiové věže: pod kontrolou OPFOR jednotek, slouží k přivolání posil do blízkých sektorů pod útokem. Rychlost reakce posil je dána vzdáleností radiové věže od sektoru. Ale pod kontrolou NATO jednotek, poskytují věže informace o pohybu nepřátelských jednotek v okolí za pomoci rádiové komunikace.<br/> <br/>- Hlavní města: V oblasti je několik Hlavních Měst. Pokud jsou všechna pod kontrolou NATO, vyhráváte.<br/> <br/>
+ <br/> <br/>-セクターは5つの異なるタイプに分かれています: <br/> <br/>- 関心地点 (PoI): 一般的に小規模から中規模の村/町です。戦略的には重要ではありませんが、この地域の市民が住む場所であり、そのため彼らの信頼と同情を得るために重要です。<br/> <br/>- 工場:この地域全体に、敵の支配下にある民間工場があります。これらの工場は3種の資源 (サプライ、弾薬、燃料) のうち1種のみを生産することに特化していますが、後々3種すべてを生産可能にアップグレードすることができます。そのため、これらの工場は非常に戦略的な最初のターゲットです!<br/> <br/>- 軍事基地: 高度に装備された大量の敵軍隊が駐留する場所で、これらの施設は重く防御されており、大規模かつ協調した攻撃が必要です。これらの基地を占領することで、作戦の成功にとって重要で強力な兵器を展開することができます。<br/> <br/>- ラジオタワー (RT): 敵の支配下にある場合、RTは近くのセクターが我々によって攻撃された場合に、増援を呼び出すために使用されます。増援の反応時間は、タワーとセクターの距離によって異なります。自軍の支配下にある場合、タワーは彼らの無線通信を傍受することによって敵軍の動きに関する有用な地図情報を提供します。<br/> <br/>- 主要都市:この地域にはいくつかの主要都市があります。すべてが自軍の支配下にある場合、敵を撃退し、彼らが支配を再確立できない地点まで追いやることができるでしょう。これがあなたの主要目標です。<br/> <br/>
5. Resources
@@ -4914,6 +5534,7 @@
5. Recursos
5. 군수물자
5. Zdroje
+ 5. 資源
<br/><br/>In this campaign you have to manage, store and protect three types of resources:<br/><br/><t color='#00ff00'>SUPPLIES:</t> These are the most essential. Without supplies, you will be unable to deploy additional soldiers or requisition any military hardware. As such, HQ recommends prioritising these first!<br/> <br/><t color='#ff0000'>AMMUNITION:</t> Used to stock armed vehicles such as APCs and MBTs as well as elite (and heavily armed) soldiers.<br/> <br/><t color = '#ffff00'>FUEL:</t> Every vehicle needs fuel, some being more thirsty than others.<br/> <br/>You may come across all three resources in any sector but for a considerable and constant supply, you must capture Factory sectors! Once captured, factories require a storage area (scroll menu action) and then they can immediately begin producing their intended resource. If you can afford it, any factory can be upgraded to produce the other two resources as well. <br/> <br/>
@@ -4926,6 +5547,7 @@
<br/><br/>Nesta campanha você deverá gerir, estocar e proteger três tipos de recursos.:<br/> <br/><t color='#00ff00'>SUPRIMENTOS:</t> Este é o recurso essencial. Sem suprimentos, será impossível mobilizar infantaria adicional ou requisitar equipamentos militares. Desse modo, o QG recomenda priorizar estes recursos!<br/> <br/><t color='#ff0000'>MUNIÇÃO:</t> Utilizada para abastecer veículos blindados armados, bem como soldados de elite de equipamento bélico pesado.<br/> <br/><t color='#ffff00'>COMBUSTÍVEL:</t> Todo veículo precisa de combustível, alguns consomem mais que outros.<br/> <br/>Você cruzará com todos os três tipos de recursos dispersos pelos setores, porém para adquirir uma quantidade considerável e abastecimento constante, você deverá capturar setores com fábricas/refinarias. Uma vez capturadas, as fábricas precisarão de um depósito (use o scroll do mouse) e então poderão imediatamente iniciar a produção do recurso pretendido. Se puder arcar com os custos, as fábricas poderão ser aprimoradas para produzir os demais recursos. <br/> <br/>
<br/><br/>군수물자는 총 3가지 종류가 있다.<br/> <br/><t color='#00ff00'>보급품:</t> 보급품(S)은 가장 중요한 군수물자로, 보급품이 없으면 AI 보병을 비롯하여 모든 장비를 배치(생산)할 수 없다.<br/> <br/>또한 장비를 배치(생산)할 때 가장 많이 소비되는 보급품이다.<br/> <br/><t color='#ff0000'>탄약:</t> 탄약(A)은 무장한 장비를 배치(생산)할 때 필요하다.<br/> <br/><t color='#ffff00'>연료:</t> 연료(F)는 장비을 움직이기 위해서 꼭 필요한 보급품이며, 대형 장비는 더 많은 연료를 소비한다.<br/> <br/>각 군수물자는 지도에서 주유기 표시로 된 '공장 '에서 생산된다. 이 지역의 경우 도시 이름 옆에 (S),(A),(F)가 표기되어 있는데 이는 생산 가능한 보급품의 종류를 나타낸다. 즉 보급품은 (S), 탄약은 (A), 연료는 (F)이다.<br/> <br/>이 지역을 아군이 점령하게 되면 왼쪽 상단 메뉴안에 --저장창고건설-- 이라는 메뉴가 생성된다. 도시내 적당한 곳에 저장창고를 건설하면 이 곳에 이 마을에서 생산된 군수물자가 저장된다. 이 군수물자를 AI수송부대를 이용하여 전초기지로 운반하면 장비를 생산하는데 사용할 수 있게 된다.<br/> <br/>만약 이 '생산공장'에서 생산중인 물품을 변경하고자 한다면, 도시내에 설치한 저장창고로 공장건설에 필요한 군수물자(생산하고자 하는 군수물자 50, 나머지 두가지 군수물자 100)을 운반한 후 변경하고자 하는 군수물자의 생산공장을 건설하면 된다.<br/> <br/>생산품은 '생산 설정' 에서 변경할 수 있고, AI 수송부대는 물류 개요' 에서 편성할 수 있다.<br/> <br/>아군 AI 수송부대의 트럭은 1회에 1대당 최대 200개의 군수물자를 운반할 수 있다.<br/> <br/>
<br/><br/>V této kampani musíte spravovat, ukládat a chránit tři typy zdrojů:<br/> <br/><t color ='#00ff00'>SUROVINY:</t> Toto jsou nejdůležitější. Bez spotřebního materiálu nebudete moci nasadit další vojáky ani zabavit vojenskou techniku. Velitelství jako takové doporučuje prioritu těchto prvních!<br/> <br/><t color ='#ff0000' >MUNICE:</t>Používá se k zásobě ozbrojených vozidel, jako jsou APC a MBT, stejně jako elity (a těžce vyzbrojení) vojáci.<br/> <br/><t color = '#ffff00'>PALIVO:</t>Každé vozidlo potřebuje palivo, některé jsou více žíznivé než ostatní.<br/> <br/>Možná narazíte na všechny tři zdroje v jakémkoli sektoru, ale pro značnou a stálou dodávku musíte zachytit tovární sektory! Jakmile jsou továrny zachyceny, vyžadují úložný prostor (akce nabídky posouvání) a poté mohou okamžitě začít vyrábět zamýšlený zdroj. Pokud si to můžete dovolit, může být každá továrna upgradována tak, aby vytvořila další dva zdroje. <br/> <br/>
+ <br/><br/>当作戦では、3種の資源を管理、保管、そして保護しなければなりません。<br/><br/><t color='#00ff00'>サプライ:</t> これが最も重要です。サプライがないと、追加の兵士を配置したり、軍事装備を調達したりすることができません。そのため、指揮官はまずこれを優先することをお勧めします!<br/> <br/><t color='#ff0000'>弾薬:</t> 装甲車両やMBT、そして特殊な兵士(と重装兵)などに使用されます。<br/> <br/><t color = '#ffff00'>燃料:</t> すべての車両には燃料が必要であり、一部の車両は他のものよりも燃料を多く消費します。<br/> <br/>どのセクターでも、3種の資源を見つけることができますが、大量で安定した供給を確保するには、工場のセクターでを占領する必要があります!占領後、工場には倉庫が必要です(マウススクロールのアクションメニュー)。その後、工場はすぐにその目的の資源の生産を開始できます。資源に余裕があれば、どの工場でも、他の2つの資源を生産するようにアップグレードすることができます。<br/><br/>
6. Alert Level
@@ -4940,6 +5562,7 @@
6. Nível de Alerta
6. 경고수준
6. Úroveň pohotovosti
+ 7. 警戒度
<br/><br/>The enemy won't let you liberate all of its brand new territory without a reaction. When you begin the campaign, hostile forces will only be composed of the garrisons inside military bases. However as you become more threatening by liberating more and more sectors, they will start calling in more reinforcements and equipment to counter you.<br/> <br/>To limit the enemies operational capabilities, you will have to fulfill secondary objectives that will consist of destroying their logistical bases and raiding their convoys. This is not required to win the campaign but if you ignore the alert level for too long, you're in for quite a lot of resistance.<br/> <br/>
@@ -4952,6 +5575,7 @@
<br/><br/>O inimigo não irá permitir a conquista de seu território sem uma reação. Quando iniciar sua campanha, forças hostis serão apenas compostas por guarnições dentro de bases militares. No entanto, ao liberar mais setores, as forças inimigas chamarão mais reforços e equipamentos para tentar te combater.<br/> <br/>Para limitar a capacidade operacional das forças de oposição, você deverá cumprir objetivos secundários que consistem na destruição de bases logísticas e no assalto aos comboios inimigos. Isto não é obrigatório para lograr êxito na campanha, todavia se o nível de alerta for ignorado por muito tempo, você enfrentará uma forte resistência inimiga.<br/> <br/>
<br/><br/>처음 반격 작전을 시작할 때에 적군들은 우리를 우습게 여길 것이다! 하지만 작전이 진행될 수록 적군들은 우리를 위험하게 느끼게 될 것이고 점점 더 많은 적군부대와 부딛치게 될 것이다.<br/> <br/>적군의 작전 능력을 억제하려면, 부차적인 임무수행을 통해 적의 후방보급기지를 파괴하거나, 보급차량을 습격, 전방으로 향하는 군수물자를 파괴하여야 한다.<br/> <br/>만약에 강력한 적군과 부딛치는 것을 두려워하지 않는다면, 부차적인 임무는 무시하고 오로지 적진을 향해 돌격하라!!!<br/> <br/>
<br/><br/>Jednotky OPFOR vás nenechají obsazovat nové sektory bez jakékoliv reakce. Na začátku kampaně jsou nepřátelé schováni pouze v nepřátelských základnách. Nebezpečí však vzrůstá s každým obsazeným sektorem, jednotky OPFOR si častěji přivolají posily, vozidla a jiné vybavení proti vám.<br/> <br/>Ke snížení nebezpečí musíte plnit vedlejší mise, například zničení logistické základny. Tohle není nutné k vyhrání kampaně a však pokud budete ignorovat vzrůstající nebezpečí, mohou přijít velké problémy.<br/> <br/>
+ <br/><br/>敵はあなたが新たなセクターを解放することを許さず、必ず反応してくるでしょう。キャンペーンを開始すると、敵軍は最初、軍事基地の駐屯部隊で構成されています。しかし、我々がますます脅威となり、より多くのセクターを解放すると、敵軍は反撃のためにより多くの増援と装備を要請するようになります。<br/><br/>敵の作戦能力を制限するために、物流基地を破壊したり、輸送車列を襲撃するといった副次任務を達成する必要があります。これはキャンペーンを勝利するために必要なことではありませんが、警戒度を無視し続けると、かなりの抵抗に遭うことになります。<br/><br/>
7. Construction
@@ -4966,6 +5590,7 @@
7. Construção
7. 건설(배치)
7. Stavění
+ 7. 建設
<br/><br/>To help you succeed in your endeavors, you have a construction capability at every FOB that allows you to deploy infantry, vehicles, defenses, fortifications and so on to your specific location.<br/> <br/>Although infantry, vehicles and defenses will cost resources, fortifications such as structures, sandbags and walls will not.<br/> <br/>The construction system will be available when you are within 100 meters of any FOB.<br/> <br/>
@@ -4978,6 +5603,7 @@
<br/><br/>Para auxiliar no sucesso de sua iniciativa, você terá a capacidade de construir em todas suas bases avançadas, que o permitirá mobilizar infantaria, veículos, defesas, fortificações e etc para sua localidade.<br/> <br/>Embora infantaria, veículos e defesas exijam recursos para seu desenvolvimento, fortificações como estruturas, sacos de areia e muros não terão custo.<br/> <br/>O sistema de construção estará disponível quando você estiver a 100 metros de qualquer FOB.<br/> <br/>
<br/><br/>전초기지나 장비 또는 AI 보병을 건설(배치)하기 위해선 우선 관리자로부터 권한을 획득해야 한다. 권한을 획득한 후 제한된 갯수의 전초기지를 건설 할 수 있고, 전초기지를 건설한 후 125m거리 이내에서 장비를 생산(배치) 할 수 있다.<br/> <br/>전초기지를 건설하게 되면 제일 먼저 소형 또는 대형 저장 창고부터 건설해야 한다. 이 창고로 AI 수송부대를 이용하여 각 거점에서 생산된 군수물자를 운반, 필요한 장비를 건설(배치)해야 한다. 각 전초기지에 보관중인 보급품은 공유할 수 없다.<br/> <br/>따라서 전선이 이동하게 되면, 후방의 전초기지에 저장중인 군수물자를 새로이 건설한 전방의 전초기지로 AI 수송부대를 이용하여 운반해야 한다.<br/> <br/>아군 AI 수송부대의 트럭은 1회에 1대당 최대 200개의 군수물자를 운반할 수 있다.<br/> <br/>주의! 지역 민간인들의 지지가 없다면 적 민병대가 출현하여 아군 AI 수송부대를 습격, 군수물자를 파괴하거나 도난 당할 수 있으니 작전시 민간인을 학살하거나 재산을 약탈하지 않는다.<br/> <br/>
<br/><br/>Abyste uspěly ve své snaze, máte možnost stavět jednotky, vozidla a opevnění. Samozřejmě v závislosti na zdrojích.<br/> <br/>Ačkoli pěchota, vozidla a obrana budou stát zdroje, opevnění, jako jsou budovy, pytle s pískem a zdi, nikoliv.<br/> <br/>Systém stavění je dostupný do 100 metrů od FOB. Tehdy se vám objeví možnost stavět v kontextové nabídce.<br/> <br/>
+ <br/><br/>あなたが目的を達成するために、各FOBには製造能力があり、歩兵、車両、固定火器、構築物などを特定の場所に製造できます。<br/> <br/>歩兵、車両、固定火器は資源が必要ですが、構築物(建物、土のう、壁など)は必要ありません。<br/> <br/>建設システムは、どのFOBでも100メートル以内にいる場合に利用可能です。<br/> <br/>
8. Deploying another FOB
@@ -4992,6 +5618,7 @@
8. Instalando outra FOB
8. 전초기지(FOB)
8. Zřízení FOB
+ 8. 別のFOBを配置
<br/><br/>To build a brand new FOB, go to the construction menu and then the logistics tab and build a FOB container or a FOB truck (the same thing, only with wheels). Then you can position the FOB container/truck where you want to deploy your shiny new FOB. However, be aware that you can't build a FOB within 1km of your starting position, within 300m of any sector, or within 2km of any other FOB.<br/> <br/>That would simply be redundant!<br/> <br/>
@@ -5004,6 +5631,7 @@
<br/><br/>Para construir uma nova FOB, acesse o menu de construção, selecione a aba de logística e então construir FOB no conteiner ou uma FOB transportável (é a mesma coisa, mas com rodas). Em seguida, poderá posicionar sua linda e nova FOB (transportável ou no conteiner) onde desejar. No entanto, esteja ciente de que não poderá construir a FOB dentro de 1km da sua posição inicial, dentro de 300 metros de qualquer setor ou dentro de 2km de outra FOB.<br/> <br/>Seria simplesmente redundante!<br/> <br/>
<br/><br/>최초 작전 기지 또는 이미 건설된 전초기지의 건설(배치)메뉴에서 FOB container 또는 FOB truck을 찾을 수 있을 것이다. FOB truck을 선택하여 생산한 후 배치하고 싶은 지역으로 이동하여 건설(설치)하면 된다.<br/> <br/>단, 최초 작전기지로 부터 1Km, 거점으로부터 300m, 다른 전초기지로부터 2Km 이내에는 설치를 할 수 없다.<br/> <br/>7항 건설(배치)에서 설명하였듯이 전초기지를 건설하게 되면 제일 먼저 소형 또는 대형 저장 창고부터 건설해야 한다. 이 후 AI 수송부대를 이용하여 각 거점 또는 후방의 전초기지에 보관중인 군수물자를 운반, 필요한 장비를 건설(배치) 하면 된다.<br/> <br/>주의! 지역 민간인들의 지지가 없다면 적 민병대가 출현하여 아군 AI 수송부대를 습격, 군수물자를 파괴하거나 도난 당할 수 있으니 작전시 민간인을 학살하거나 재산을 약탈하지 않는다.<br/> <br/>
<br/><br/>K postavení nového FOB, jděte do stavebního menu a pote do logistické záložky, poté postavte FOB kontejner nebo FOB náklaďák (to je to samé ale na kolech).<br/> <br/>Poté přesuňte kontejner na místo kde rozložíte z brusu nové FOB. Mějte se však na pozoru, FOB nelze postavit uvnitř obsazeného sektoru nebo ve vzdálenosti 2km od jiného FOB a 1km od startovní základny.<br/> <br/>To by bylo prostě zbytečné!<br/> <br/>
+ <br/><br/>新しいFOBを建設するには、製造メニューに移動し、物流タブでFOBコンテナまたはFOBトラック(同じ性能、ただし自走可能)を製造します。次に、FOBコンテナ/トラックを設置したい場所に配置します。ただし、開始位置から1km以内、セクターから300m以内、他のFOBから2km以内にFOBを建設することはできないことに注意してください。<br/> <br/>それは予算が下りません!<br/> <br/>
9. Secondary Objectives
@@ -5018,6 +5646,7 @@
9. Objetivos Secundários
9. 부차적인 임무
9. Vedlejší úkoly
+ 9. 副次任務
<br/><br/>When you capture sectors, sometimes the few hostiles forces remaining will surrender. You can then capture those prisoners and take them back to a nearby FOB to be interrogated.<br/> <br/>That interrogation, executed in the utmost respect of the Geneva Convention, will allow you to obtain information which can be used to reveal the rough position of an enemy logistics base, enemy convoy or friendly search and rescue.<br/> <br/>After going there you will need to find the exact position of your target, then use any means at your disposal to complete your objective. Succeeding at this task will be rewarded, reducing the alert level consequently and with it the efficiency of all hostile forces.<br/> <br/>
@@ -5030,6 +5659,7 @@
<br/><br/>Quando você capturar setores, em algumas situações as forças hostis remanescentes se renderão. Você poderá capturar os prisioneiros e levá-los para a FOB mais próxima para serem interrogados.<br/> <br/>O interrogatório, executado em observância à Convenção de Genebra, o permitirá a obtenção de informações que podem ser empregadas para revelar a posição aproximada da base de logística inimiga, comboio inimigo ou operações de busca e resgate de forças aliadas.<br/> <br/>Após chegar na área de operações, você precisará identificar a localização exata do seu alvo, e então fazer uso dos meios necessários à sua disposição para concluir seu objetivo. Ao lograr êxito em sua tarefa, serão recompensados, reduzindo o nível de alerta reducing the alert level inimigo e consequentemente a eficiência de todas as forças hostis.<br/> <br/>
<br/><br/>적군의 거점들을 점령하다보면 간혹 포로를 잡을 수 있다. 이 포로를 아군 전초기지로 호송하여 심문하게 되면 정보점수가 올라간다.<br/> <br/>이 정보 점수를 사용하여 부차적인 임무 3가지를 반복해서 진행할 수 있는데, 임무를 성공하면, 적군의 작전 능력을 떨어트리거나, 더 많은 정보 점수, 또는 군수물자를 보상으로 받게 된다.<br/> <br/>
<br/><br/>Když obsadíte sektor, někdy se stane že některé nepřátelské jednotky zůstanou a vzdají se. Ty můžete zajmout a převést do nejbližší FOB kde budou vyslechnuti.<br/> <br/>Z výslechu, z úcty k Ženevským konvencím, můžete zjistit vice nebo méně přesné informace o nepřátelských logistických základnách, nepřátelských konvojích nebo o spojeneckých zajatcích.<br/> <br/>Poté, co tam půjdete, budete muset najít přesnou polohu vašeho cíle, a pak pomocí jakýchkoli prostředků, které máte k dispozici, dokončete svůj úkol. Úspěch v tomto úkolu bude odměněn, čímž se sníží úroveň pohotovosti a tím i účinnost všech nepřátelských sil.<br/> <br/>
+ <br/><br/>セクターを占領すると、時に残っているわずかな敵勢力が降伏することがあります。その後、これらの捕虜を捕らえ、近くのFOBに連れて行き、尋問することができます。<br/> <br/>ジュネーブ協定に最大限の敬意を払った尋問により、敵のロジスティクス拠点、敵の輸送船団、または友軍の捜索救助の概略位置を特定するための情報を入手することができます。<br/> <br/>そこに行った後、目標の正確な位置を見つけ、目的を達成するために手元にある手段を使います。この任務に成功すると、警戒レベルが低下し、すべての敵対勢力の効率も低下するため、報酬が与えられます。<br/> <br/>
10. Commanding
@@ -5044,6 +5674,7 @@
10. Comandando
10. 지휘 및 기타정보
10. Velení
+ 10. 指揮
<br/><br/>When a player uses the Commander role, they get access to the Zeus interface by pressing the corresponding key (Y by default). This interface allows the commanding of friendly forces in 3D or map view.<br/> <br/>Moreover the commander gets additional build options that will allow them to obtain crewed vehicles or entire pre-made squads.<br/> <br/>This role is now mandatory, as it provides direct access to the management of production sectors and AI logistics. Given that you are positioned by a FOB, you will see the options "Production Settings" and "Logistic Overview".<br/> <br/> The first enables the ability to decide which Factory produces which specific resources, as well as a detailed current overview.<br/> <br/> The latter allows you to command an AI logitical convoy, where you may "Add" logistical groups, purchase any amount of trucks per group and command them to move specific amounts of resources across the region for you.<br/> <br/>
@@ -5056,6 +5687,7 @@
<br/><br/>Quando um jogador assume a função de comandante, ele recebem acesso à interface Zeus ao pressionar a tecla correspondente (a tecla padrão é 'Y'). Essa interface permite o comando de forças aliadas na plataforma 3D ou através do mapa.<br/> <br/>Ademais, o comandante recebe opções adicionais de construção que o permitirão obter veículos tripulados ou grupos predeterminados.<br/> <br/>Tal função é agora obrigatória, pois possibilita acesso direto à gestão dos setores de produção e logísticas automatizadas. Quando estiver posicionado numa FOB, você poderá observar as opções "Configuração de Produção" e "Visão Geral de Logística".<br/> <br/> A primeira habilita a capacidade de decidir que fabrica/refinaria irá produzir qual recurso específico, bem como uma visão geral detalhada sobre o serviço.<br/> <br/> O último permite a você comandar o sistema automatizado de comboio logístico, onde você poderá "adicionar" grupos logísticos, adquirir quantos transportes desejar e os comandar para transportar quantidades específicas de recursos através do território.<br/> <br/>
<br/><br/>- 지휘 :<br/> <br/>지휘권한은 관리자가 허가한 자만이 획득할 수 있다. 지휘자는 각 거점에서 생산되고 있는 군수물자를 지정하거나 내역을 살펴 볼 수 있고, 각 군수물자를 AI수송부대를 이용하여 운반할 수 있다. 또한 제우스 기능을 사용할 수 있다.<br/> <br/>- 기타 정보 :<br/> <br/>항공기를 사용하기 위해서는 반드시 '비행 관제소'를 먼저 만들어야만 한다. 이후 '항공기 격납고'를 만들고 항공기를 배치한다. 항공기 격납고 수에 따라 운행할 수 있는 항공기 숫자가 결정된다.<br/> <br/>비행장은 평지라 할지라도 습기가 많은 지역은 항공기 이착률이 힘들기 때문에 적군 비행장을 점령하여 사용하기를 권한다.<br/> <br/>고급 장비는 특정한 군사기지를 점령해야만 전초기지에서 생산(배치)할 수 있다. 지도에 보면 군사기지 이름 옆에 원이 그려져 있고 체크가 된 곳이 있는데 이 곳을 점령하게되면 체크 옆에 표기되어 있는 장비를 생산(배치)할 수 있게 된다.<br/> <br/>전투에 사용한 장비는 반드시 전초기지로 가지고 귀환해야 한다. 전초기지범위 밖에 있으면 사라지기 때문이다. 노획장비 또한 없어지지 않기 때문에 반드시 전초기지로 귀환해서 접속종료를 하기 바란다.<br/> <br/>AI은 1플레이어가 최대 12명까지 뽑아서 사용할 수있으나, 지휘하기엔 의무병과 공병을 포함하여 3~5명정도를 추천한다.<br/> <br/>함부로 민간인을 학살하거나 재산(특히 집)을 파괴하거나 약탈(차량같은 것)하지 말라. 민병대 출현하게 되면 머리 아프다.<br/> <br/>민간인들에게 환영받기 위해서는 부상당한 민간인(간혹 지도에 보라색이 생김)들을 도와줘라.<br/> <br/>끝으로 재미있는 게임 시간이 되길 바란다!<br/> <br/>
<br/><br/>Když hráč použije roli Velitele, získá přístup k rozhraní Zeus stisknutím odpovídající klávesy (ve výchozím nastavení Y). Toto rozhraní umožňuje velení přátelských sil v zobrazení 3D nebo mapy.<br/> <br/>Navíc komandér získá přístup postavit vozidla s posádkou nebo celé předvytvořené družstva.<br/> <br/>Tato role je důležitá, a jako taková dává přímý přístup k spravování produkce v sektorech a logistice AI. Pokud budete stát na FOB, dostanete možnosti "Nastavení produkce" a "Logistický přehled".<br/> <br/> První vám dá možnost nastavit která továrna bude produkovat kterou surovinu, jako také detailní přehled.<br/> <br/> Písmena vám dovolí rozkazovat AI logistickým konvojům, kde můžete "Přidat" logistické skupiny, koupit jakékoliv množství náklaďáků na skupinu a přikázat jim převážet specifické množství surovin napříč celou oblastí pro vás.<br/> <br/>
+ <br/><br/>プレイヤーが司令官役割を使用すると、対応するキー(デフォルトではY)を押すことでZeusインターフェースにアクセスできます。このインターフェースにより、3Dまたはマップビューで友好部隊を指揮することができます。<br/> <br/>さらに、司令官は、クルー付きの車両や完全に作成された分隊などの追加の製造オプションを取得できます。<br/> <br/>この役割は今では必須であり、生産セクターの管理とAIロジスティクスへの直接的なアクセスを提供するためです。あなたがFOBに配置されているということを考慮すると、「生産設定」と「物流管理」のオプションが表示されます。<br/> <br/>前者は、どの工場がどの資源を生産するかを決定し、現在の詳細な概要を示す能力を提供します。<br/> <br/>後者は、AIロジスティクス輸送隊を指揮でき、輸送グループを「追加」し、グループごとにトラックの数量を購入し、特定の量の資源を地域全体で移動させることができます。<br/> <br/>
Arsenal mode
@@ -5069,6 +5701,7 @@
Modo do Arsenal
무기고 모델
Nastavení Zbrojnice
+ アーセナルの仕様
No restrictions
@@ -5082,6 +5715,7 @@
Sem restrições
제한 없음
Bez Omezení
+ 無制限
Use preset from config
@@ -5095,6 +5729,7 @@
Usar predefinição de config.sqf
사용자 설정(기본임무설정)
Použít nastavení z configu
+ コンフィグ指定のプリセットを使用
-- PUSH CRATE
@@ -5108,14 +5743,17 @@
-- EMPURRAR CAIXA --
-- 군수물품 밀기
-- TLAČIT KRABICI
+ -- 貨物を押す
-- CARRY CRATE
-- KISTE TRAGEN
+ -- 貨物を運ぶ
-- DROP CRATE
-- KISTE ABLEGEN
+ -- 貨物を置く
-- STACK AND SORT
@@ -5129,6 +5767,7 @@
-- ORDENAR E CLASSIFICAR --
-- 군수물품 재배치/분류
-- SESKUPIT A ROZTŘÍDIT
+ -- 整理整頓する
@@ -5141,6 +5780,7 @@
Acesso ao Módulo de Suporte da Bohemia Interactive
BI 지원 단위 시스템 권한
BI Modul podpory Přístup do systému
+ BI 支援モジュールシステムへのアクセス
Commander only
@@ -5154,6 +5794,7 @@
Apenas comandante
지휘관
Pouze Komandér
+ 指揮官のみ
Whitelisted only
@@ -5167,6 +5808,7 @@
Apenas quem está na lista de permissão
등록된 사용자
Pouze whitelist
+ ホワイトリスト
Everyone
@@ -5180,6 +5822,7 @@
Todos
모든 사용자
Kdokoliv
+ 全員
Extended Options
@@ -5206,6 +5850,7 @@
Opções Avançadas
추가 설정
Rozšířené Možnosti
+ 拡張設定
- disabled -
@@ -5219,6 +5864,7 @@
- desativado -
- 비활성화 -
- vypnuto -
+ - 無効化 -
Squad Management
@@ -5232,6 +5878,7 @@
Gestão de equipe
분대 관리
Správa Družstva
+ 分隊管理
Join
@@ -5245,6 +5892,7 @@
Se juntar
참가
Přidat se
+ 参加
Create
@@ -5258,6 +5906,7 @@
Criar
만들기
Vytvořit
+ 作成
Rename
@@ -5271,6 +5920,7 @@
Renomear
이름변경
Přejmenovat
+ 改名
Leader
@@ -5284,6 +5934,7 @@
Líder
분대장위임
Velitel
+ 分隊長
Cancel
@@ -5297,6 +5948,7 @@
Cancelar
취소
Zrušit
+ 取り消す
Choose
@@ -5310,6 +5962,7 @@
Selecionar
선택
Vybrat
+ 選択
Platoon and Squad Awareness
@@ -5323,6 +5976,7 @@
Indicador de grupo no mapa
분대 추가 기능 설정
Ostražitost Týmů a Družstev
+ 小隊と分隊の注意警戒
Show platoon overlay:
@@ -5336,6 +5990,7 @@
Mostrar indicador de pelotão:
아군 분대명 보이기 설정:
Zobrazit přehled družstev:
+ 小隊オーバーレイの表示:
active
@@ -5349,6 +6004,7 @@
Ativo
활성화
aktivní
+ 有効
Show player nametags:
@@ -5362,6 +6018,7 @@
Mostrar nome dos jogadores
아군 플레이어 이름 보이기 설정:
Zobrazit hráčské jmenovky:
+ プレイヤーネームタグの表示:
Yes
@@ -5375,6 +6032,7 @@
Sim
예
Ano
+ はい
No
@@ -5388,6 +6046,7 @@
Não
아니요
Ne
+ いいえ
Adjust View Distance
@@ -5401,6 +6060,7 @@
Ajustar distância de visão
가시거리 설정
Přizpůsobit Dohled
+ 描画距離の調整
View Distance
@@ -5414,6 +6074,7 @@
Distância de visão
가시거리
Dohled
+ 描画距離
Infantry
@@ -5427,6 +6088,7 @@
Infantaria
보병
Pěchota
+ 歩兵
Vehicles
@@ -5440,6 +6102,7 @@
Veículos
차량
Vozidlo
+ 車両
Objects
@@ -5453,6 +6116,7 @@
Objetos
사물
Objekty
+ 物体
Adjust view distance to keep FPS above
@@ -5466,6 +6130,7 @@
Ajustar distância de visão para manter FPS acima de
설정한 프레임에 맞게 시야거리 조절
Přizpůsobit dohled k zachování FPS nad
+ FPSを高めるため描画距離を調整します
Adjust Terrain Details
@@ -5479,6 +6144,7 @@
Ajustar detalhes do terreno
지형 그래픽 설정
Přizpůsobit detaily terénu
+ 地形描画の調整
Very Low
@@ -5492,6 +6158,7 @@
Muito baixo
매우 낮음
Velmi nízké
+ とても低い
Low
@@ -5505,6 +6172,7 @@
Baixo
낮음
Nízké
+ 低い
Normal
@@ -5518,6 +6186,7 @@
Normal
보통
Normální
+ 普通
High
@@ -5531,6 +6200,7 @@
Alto
높음
Vysoké
+ 高い
Show teammates on map:
@@ -5544,6 +6214,7 @@
Mostrar membros da equipe no mapa:
지도에 아군 플레이어 표시 설정:
Zobrazit spoluhráče na mapě:
+ チームメイトをマップに表示:
In-Vehicle Sound Volume
@@ -5557,6 +6228,7 @@
Volume do som dentro do veículo
차량 탑승시 소리크기 설정
Hlasitost ve vozidle
+ 車内での音量
Test
@@ -5570,6 +6242,7 @@
Teste
실험
Test
+ テスト
Respawn
@@ -5583,6 +6256,7 @@
Respawn
재생
Respawn
+ リスポーン
Replace nearest AI
@@ -5596,22 +6270,24 @@
Substituir IA mais próxima
가장 가까운 AI
Nahradit nejbližší AI
+ 近くのAIを置き換える
- A civilian named %1 was killed!
- Ein Zivilist mit Namen %1 wurde getötet!
- Un civil llamado %1 fue asesinado!
- Гражданский %1 был убит!
- Un civile di nome %1 è stato ucciso!
- 一个名叫%1的平民被击杀了!
- 一個名叫 %1 的平民被擊殺了!
- %1 ismindeki sivil öldürüldü!
- Um civil de nome %1 foi morto!
- 민간인 %가 사망하였다!
- Civilista jménem %1 byl zabit jednotkami BLUFOR!
+ A civilian named %1 was killed by %2!
+ Ein Zivilist namens %1 wurde von %2 getötet!
+ ¡Un civil llamado %1 fue asesinado por %2!
+ Гражданин по имени %1 был убит %2!
+ Un civile di nome %1 è stato ucciso da %2!
+ 一个名叫 %1 的平民被 %2 击杀了!
+ 一個名叫 %1 的平民被 %2 擊殺了!
+ %1 adlı bir sivil, %2 tarafından öldürüldü!
+ Um civil chamado %1 foi morto por %2!
+ %1라는 이름의 시민이 %2에 의해 살해되었습니다!
+ Občan jménem %1 byl zabit %2!
+ 民間人 %1 が %2 に殺害された!
- A civilian's vehicle was seized!
+ Citizens reporting their vehicle was seized by %1!
Ein Zivilfahrzeug wurde beschlagnahmt!
Un vehículo civil fue tomado!
Транспорт гражданского был захвачен!
@@ -5622,6 +6298,7 @@
Um veículo de civil foi tomado!
민간인의 차량이 탈취되었다!
Civilní vozidlo bylo zajato jednotkami BLUFOR!
+ 市民は %1 によって彼らの車両が不当に徴用されたと報告しています!
Civilians are complaining about %1 lost buildings.
@@ -5635,9 +6312,10 @@
Civis estão reclamando sobre %1 construções destruídas
민간인들이 %1 건물이 파괴된 것에 대해 불평하고 있다.
Civilisté si stěžují na %1 zničené budovy.
+ 市民は彼らの家財が %1 個所破壊されたと遺憾の意を表明しています。
- Civilian named %1 is thankful for your help.
+ Civilian named %1 is thankful to %2 for help.
Der Zivilist %1 ist dankbar für die Hilfe.
El civil %1 se siente agradecido por tu ayuda.
Гражданский %1 благодарен за вашу помощь.
@@ -5646,6 +6324,11 @@
平民 %1 感謝你的幫助。
시민 %1 가 도와줘서 고맙다고 인사한다.
Civilista jménem %1 ti děkuje za pomoc.
+ 民間人 %1 が %2 に感謝の意を表しています。
+
+
+ %1 citizens of %2 are injured and need help.
+ %2 の民間人 %1名 が負傷し助けを要しています。
Civil Reputation penalty for buildings if building is
@@ -5659,6 +6342,7 @@
Penalidade na reputação civil se a construção estiver
평판에 영향을 주는 민간 건물 파괴 정도
Penalizace reputace u civilistů pokud je budova
+ 建物の状態による市民評価のペナルティ
damaged
@@ -5672,6 +6356,7 @@
Danificada
손상시
poškozená
+ 損壊
fully destroyed
@@ -5685,6 +6370,7 @@
Totalmente destruída
완전 파손시
kompletně zničena
+ 全壊
SERVER RESTART NOTIFICATION
@@ -5698,6 +6384,7 @@
NOTIFICAÇÃO DE REINÍCIO DO SERVIDOR
서버 재시작 알림!
OZNÁMENÍ O RESTARTU SERVERU
+ サーバー再起動の通知
The server will restart in less than 60 seconds!
@@ -5711,6 +6398,7 @@
O servidor irá reiniciar em menos de 60 segundos!
서버가 60초후 재시작 됩니다!
Server se restartuje za méně jak 60 vteřin!
+ サーバーは60秒後に再起動します!
The server will restart in less than 5 minutes!
@@ -5724,6 +6412,7 @@
O servidor irá reiniciar em menos de 5 minutos!
서버가 5분후 재시작 됩니다.
Server se restartuje za méně jak 5 minut!
+ サーバーは5分後に再起動します!
The server will restart in less than 15 minutes!
@@ -5737,6 +6426,7 @@
O servidor irá reiniciar em menos de 15 minutos!
서버가 15분후 재시작 됩니다.
Server se restartuje za méně jak 15 minut!
+ サーバーは15分後に再起動します!
The server will restart in less than 30 minutes!
@@ -5750,6 +6440,7 @@
O servidor irá reiniciar em menos de 30 minutos!
서버가 30분후 재시작 됩니다.
Server se restartuje za méně jak 30 minut!
+ サーバーは30分後に再起動します!
Automatic Server Restart after (hours)
@@ -5763,6 +6454,7 @@
Reinício automático do servidor após (horas)
자동 서버 재시작(시간)
Automatický restart serveru za (hodiny)
+ サーバー自動再起動(n時間後)
== DEBUG MESSAGES ==
@@ -5776,6 +6468,7 @@
== MENSAGENS DE DEBUG ==
== 정보 수집 메세지 ==
== DEBUGOVACÍ ZPRÁVY ==
+ == デバッグメッセージ ==
Civil Informant
@@ -5788,6 +6481,7 @@
Informante Civil
민간인 정보원
Civilní Informace
+ 民間情報提供者
Civil Reputation
@@ -5800,6 +6494,7 @@
Reputação Civil
민간인 평판
Civilní Reputace
+ 市民評価
A civilian from %1 says he has some information for us.
@@ -5813,6 +6508,7 @@
Um civil de %1 disse que possui algumas informações para nos apresentar.
%1 이름의 민간인이 우리에게 정보가 있다고 접근중이다.
Civilista z %1, říká že má pro nás nějakou informaci.
+ %1 の市民が我々に情報提供を試みている。
The civilian gave us some important information.
@@ -5826,9 +6522,10 @@
Um civil nos concedeu algumas informações importantes.
민간인들이 우리에게 중요한 정보를 몇가지 알려 주었다.
Civilista nám dal nějaké důležité informace.
+ 市民は重要情報を提供した。
- The civilian has disappeared.
+ The informant has disappeared.
Der Zivilist ist wieder untergetaucht.
El civil ha desaparecido.
Гражданский пропал.
@@ -5839,9 +6536,10 @@
Um civil desapareceu.
민간인이 행방불명되었다.
Civilista odešel.
+ 情報提供者は姿を消してしまった。
- The civilian died.
+ The informant died.
Der Zivilist wurde getötet.
El civil ha muerto.
Гражданский умер.
@@ -5852,6 +6550,11 @@
Um civil morreu.
민간인이 사망하였다.
Civilista umřel.
+ 情報提供者は死んでしまった。
+
+
+ %1 began escorting the informant.
+ %1 が情報提供者の護送を開始した。
Asymmetric Threat
@@ -5864,6 +6567,7 @@
Ameaça Assimétrica
비대칭 위협
Asymmetric Threat
+ 非対称脅威
Logistic
@@ -5877,6 +6581,7 @@
Logística
물류
Logistika
+ 物流
Logistic Convoy Ambush
@@ -5890,6 +6595,7 @@
Emboscada no Comboio Logístico
아군 AI수송부대가 습격을 당했다.
Přepadení Logistického konvoje
+ 物流車列が襲撃された
Guerilla forces attacking our convoy near %1.
@@ -5903,6 +6609,7 @@
Forças de guerrilha estão atacando nosso comboio nas proximidades de %1.
적군 민병대가 1% 부근에서 아군 AI수송부대를 공격하고 있다!
Odboj přepadl náš konvoj poblíž %1.
+ 物流車列は %1 にてゲリラの襲撃を受けている。
The ambush was successfully repelled.
@@ -5916,6 +6623,7 @@
A emboscada foi frustrada com sucesso.
아군 AI수송부대에 대한 적 민병대의 공격을 성공적으로 막아내었다.
Přepadení bylo úspěšně odraženo
+ 襲撃を撃退することに成功した。
The guerilla forces escaped with the convoy resources.
@@ -5929,6 +6637,7 @@
As forças de guerrilha escaparam com os recursos do comboio.
적군 민병대가 아군 AI수송부대가 운반중이던 군수물자를 탈취하였다.
Odboj uprchl se surovinami z konvoje.
+ ゲリラは車列の資源とともに逃亡してしまった。
Sectorspawn
@@ -5940,6 +6649,7 @@
Spawn do setor
거점재생
Sectorspawn
+ セクタースポーン
Killed units
@@ -5951,21 +6661,23 @@
Unidades mortas
적군 사살
Zabité jednotky
+ 殺害したユニット
- Treat the civilian (field dressing)
- Zivilisten versorgen (einfache Bandage)
- Asistir al civil (curar)
- Перевязать гражданского (полевая перевязка)
+ Treat the civilian
+ Zivilisten versorgen
+ Asistir al civil
+ Перевязать гражданского
Soccorso Civili
- 治疗平民(战地绷带)
- 治療平民(基礎繃帶)
- Preste socorro ao civil (curativo)
+ 治疗平民)
+ 治療平民
+ Preste socorro ao civil
민간인 치료
- Ošetřit civilistu(pomocí bandáže)
+ Ošetřit civilistu
+ 市民を治療する
- You need a field dressing.
+ You need a bandage.
Du brauchst eine einfache Bandage.
Necesitas vendas.
Вам необходима полевая перевязка.
@@ -5975,6 +6687,7 @@
Você precisa de curativo.
붕대가 필요하다.
Potřebuješ ošetřit.
+ 包帯が最低一個必要です。
There is a high ranked officer near %1.
@@ -5987,6 +6700,7 @@
Há um oficial de alta patente nas proximidades de %1.
%1 근처에 적군의 고급 장교가 있는 것으로 파악되었다.
Důstojník s vysokou hodností poblíž %1.
+ 敵の将校が %1 付近にいるようだ。
The officer was successfully killed.
@@ -5999,6 +6713,7 @@
O oficial foi morto. Missão cumprida.
적군 장교를 암살하는데 성공하였다.
Důstojník úspěšně zabit.
+ 将校の殺害に成功した。
The officer has moved on.
@@ -6011,6 +6726,7 @@
O oficial escapou.
적군 장교가 이동중이다.
Důstojník utekl.
+ 将校は移動してしまった。
Mobile Respawn Cooldown (minutes)
@@ -6023,6 +6739,7 @@
Tempo de espera do respawn móvel (minutos)
재투입차량에서 재생시 필요한 대기 시간(분)
Mobilní respawn cooldown (minuty)
+ モバイルリスポーンのクールダウン(分)
%1 minutes mobile respawn cooldown left.
@@ -6035,18 +6752,20 @@
Falta(m) %1 minuto(s) de tempo de espera do respawn móvel.
%1 분 남음(재투입차량에서 재생대기시간)
Zbývá %1 minut na mobilní respawn.
+ モバイルリスポーンのクールダウンまで %1 分。
- An allied resistance fighter named %1 was killed!
- Ein verbündeter Widerstandskämpfer mit Namen %1 wurde getötet!
- Un aliado de la resistencia llamado %1 ha sido asesinado!
- Союзный боец сопротивления %1 был убит!
- Un'alleato della resistenza di nome %1 è stato ucciso!
- 一位名叫%1的友军抵抗军战士阵亡了!
- 一名叫做 %1 的友軍抵抗軍戰士陣亡了!
- Um aliado das forças de resistência de nome %1 foi morto!
- % 라고 하는 아군에 협조한 민병대가 전사하였다.
- Spojenecký bojovník domobrany %1 byl zabit!
+ An allied resistance fighter named %1 was killed by %2!
+ Ein verbündeter Widerstandskämpfer mit Namen %1 wurde von %2 getötet!
+ Un aliado de la resistencia llamado %1 ha sido asesinado por %2!
+ Союзный боец сопротивления %1 был убит %2!
+ Un'alleato della resistenza di nome %1 è stato ucciso da %2!
+ 一位名叫 %1 的友军抵抗军战士被 %2 杀害!
+ 一名叫做 %1 的友軍抵抗軍戰士被 %2 杀害!
+ Um aliado das forças de resistência de nome %1 foi morto por %2!
+ %1라고 하는 아군에 협조한 민병대가 %2에 의해 전사하였습니다!
+ Spojenecký bojovník domobrany jménem %1 byl zabit %2!
+ 友好的なレジスタンス %1 が %2 によって殺害された!
Gamedata saving
@@ -6058,6 +6777,7 @@
Salvando dados do jogo
게임 저장
Ukládání hry
+ セーブ中
Production
@@ -6069,6 +6789,7 @@
Produção
생산
Produkce
+ 生産
@@ -6079,6 +6800,7 @@
Carica/Salva Parametri
매개변수설정 저장/불러오기
Uložit/načíst parametry
+ パラメーターのロード/セーブ
SAVE selected parameters
@@ -6088,6 +6810,7 @@
SALVA i parametri
매개변수설정 저장
Uložit vybrané parametry
+ 選択したパラメーターをセーブして使用
LOAD parameters or use selected if no saved value found
@@ -6097,6 +6820,7 @@
CARICA parametri o utilizza selezionati se non è stato trovato alcun valore salvato
매개변수설정 불러오기/ 저장된 설정이 없는 경우 현재 선택된 설정 사용
Načíst parametry nebo použít vybrané pokud nebyly nalezeny žádné uložené.
+ パラメーターをロードし、保存されていない場合は選択したパラメータを使用
Use selected parameters without saving
@@ -6106,6 +6830,7 @@
Usa i parametri selezionati senza salvare
현재 설정을 저장하지 않고 선택한 설정을 사용
Použít vybrané parametry bez ukládání
+ 選択したパラメータをセーブせず使用
-- Raise
@@ -6115,6 +6840,11 @@
-- Aumenta
-- 높이 올리기
-- Zvýšit
+ -- 上げる
+
+
+ -- Reset
+ -- リセット
-- Lower
@@ -6124,6 +6854,7 @@
-- Abbassa
-- 높이 내리기
-- Snížit
+ -- 下げる
Guerilla forces on the way.
@@ -6133,6 +6864,7 @@
Guerriglieri in arrivo.
도로에 적군 민병대 세력 발견!
Partyzánské síly na cestě.
+ ゲリラ部隊が接近中。
Guerilla forces are incoming to %1 from the %2.
@@ -6142,6 +6874,7 @@
Guerriglieri in arrivo su %1 da %2.
적군 민병대가 %2 에서 %1 로 이동중입니다.
Partyzáni přicházejí do %1 z %2.
+ ゲリラ部隊が %1 から %2 へ向けて接近中。
== REVIVE OPTIONS (Disregarded, if you play with ACE Medical) ==
@@ -6155,6 +6888,7 @@
== OPÇÕES DE RESSUCITAÇÃO ==
== 의료시스템 (ACE모드 사용시 무시할 것) ==
== REVIVE OPTIONS (bez ohledu na to, pokud hrajete s ACE Medical) ==
+ == リバイブオプション (ACEメディカルの場合は無視されます) ==
Arsenal
@@ -6164,6 +6898,7 @@
Arsenale
무기고
Arzenál
+ アーセナル
BI arsenal
@@ -6173,6 +6908,7 @@
BI Arsenale
BI 무기고
BI arzenál
+ BI アーセナル
ACE arsenal
@@ -6182,6 +6918,7 @@
ACE Arsenale
ACE 무기고
Arzenál ACE
+ ACE アーセナル
Victory Condition
@@ -6191,6 +6928,7 @@
Condizioni di vittoria
승리 조건
Vítězství
+ 勝利条件
All capitals
@@ -6200,6 +6938,7 @@
Tutte le capitali
모든 대도시
Všechna hlavní města
+ 全大拠点(首都)
All capitals and military bases
@@ -6209,6 +6948,7 @@
Tutte le capitali e le basi militari
모든 대도시 및 군사기지
Všechna hlavní města a vojenské základny
+ 全大拠点(首都)と軍事基地
All capitals and 60% of the sectors
@@ -6218,6 +6958,7 @@
Tutte le capitali e il 60% dei settori
모든 대도시 및 60%의 거점
Všechna hlavní města a 60% sektoru
+ 全大拠点(首都)と60%の拠点(セクター)
All capitals and 80% of the sectors
@@ -6227,6 +6968,7 @@
Tutte le capitali e l'80% dei settori
모든 대도시 및 80%의 거점
Všechna hlavní města a 80% sektoru
+ 全大拠点(首都)と80%の拠点(セクター)
All sectors
@@ -6236,6 +6978,7 @@
Tutti i settori
모든 거점
Všechny sektory
+ 全セクター
CAMPAIGN COMPLETED
@@ -6245,6 +6988,7 @@
CAMPAGNA COMPLETATA
군사작전 완료
CAMPAIGN KOMPLET
+ 全作戦終了
You have liberated the area from the enemy oppression.
@@ -6254,15 +6998,16 @@
Hai liberato tutta l'area dall'oppressione nemica
당신은 적의 억압으로부터 이 지역을 해방시켰다.
Osvobodili jste oblast od nepřátelského útlaku.
+ わが軍は敵軍の占領下からこの地域を解放した。
Playtime: %1 days, %2 hours, %3 minutes and %4 seconds
Spielzeit: %1 Tage, %2 Stunden, %3 Minuten und %4 Sekunden
Tiempo de juego: %1 días, %2 horas, %3 minutos y %4 segundos
Игровое время: %1 дней, %2 часов, %3 минут и %4 секунд
-
걸린 시간: %1 일, %2 시간, %3 분 and %4 초
Doba hraní: % 1 dny, % 2 hodiny, % 3 minuty a % 4 sekund
+ プレイ時間: %1 日, %2 時間, %3 分, %4 秒
OPFOR infantry killed: %1
@@ -6277,6 +7022,7 @@
Baixas inimigas em combate: %1
적군 사망자 : %1
Pěchota OPFOR zabila: %1
+ 死亡した敵兵の数: %1
OPFOR infantry killed by players: %1
@@ -6291,6 +7037,7 @@
Infantaria inimiga eliminada por jogadores: %1
플레이어에 의한 적군 사망자 : %1
Pěchota OPFOR zabitá hráči: %1
+ 倒した敵兵の数: %1
OPFOR vehicles destroyed: %1
@@ -6305,6 +7052,7 @@
Veículos inimigos destruídos: %1
파괴된 적군 차량 : %1
Vozidla OPFOR byla zničena: %1
+ 破壊された敵車両の数: %1
OPFOR vehicles destroyed by players: %1
@@ -6319,6 +7067,7 @@
Veículos inimigos destruídos por jogadores: %1
플레이어에 의해 파괴된 적군 차량 : %1
Vozidla OPFOR zničená hráči: %1
+ 破壊した敵車両の数: %1
BLUFOR soldiers recruited: %1
@@ -6333,6 +7082,7 @@
Soldados aliados recrutados: %1
AI 병사 소집 : %1
Nábor vojáků BLUFOR: %1
+ 徴兵した兵士の数: %1
BLUFOR infantry killed: %1
@@ -6347,6 +7097,7 @@
Baixas aliadas em combate: %1
아군 사망자 : %1
BLUFOR zabila: %1
+ 死亡した友軍兵士の数: %1
BLUFOR vehicles built: %1
@@ -6361,6 +7112,7 @@
Veículos aliados construídos: %1
생산된 아군 차량 : %1
Postavena vozidla BLUFOR: %1
+ 製造した車両の数: %1
BLUFOR vehicles destroyed: %1
@@ -6375,6 +7127,7 @@
Veículos aliados destruídos: %1
파괴된 아군 차량 : %1
Vozidla BLUFOR zničena: %1
+ 破壊された友軍車両の数: %1
Player deaths: %1
@@ -6389,6 +7142,7 @@
Morte de jogadores: %1
플레이어 사망 : %1
Úmrtí hráčů: %1
+ 犠牲となったプレイヤーの数: %1
BLUFOR friendly fire incidents: %1
@@ -6403,6 +7157,7 @@
Incidentes de fogo amigo: %1
아군간 오인사격에 의한 피해 : %1
Incidenty přátelské BLUFOR: %1
+ 誤射が起きた回数: %1
Resistance fighters killed: %1
@@ -6412,6 +7167,7 @@
Combattente della resistenza ucciso: %1
적군 전투기 격추 : %1
Spojenci zabili: %1
+ 倒した敵レジスタンスの数: %1
Allied resistance fighters killed: %1
@@ -6421,6 +7177,7 @@
Combattente della resistenza alleato ucciso: %1
아군 전투기 격추 : %1
Spojenci zabití: %1
+ 犠牲となった友軍レジスタンスの数: %1
Allied resistance fighters killed by players: %1
@@ -6430,6 +7187,7 @@
Combattente della resistenza alleato ucciso dal gicoatore: %1
플레이어에 의해 격추된 전투기 : %1
Spojenci zabití hráči: %1
+ 誤射された友軍レジスタンスの数: %1
Civilians killed: %1
@@ -6444,6 +7202,7 @@
Civis mortos: %1
민간인 사망자 : %1
Civilisté zabili: %1
+ 犠牲となった市民の数: %1
Civilians killed by players: %1
@@ -6458,6 +7217,7 @@
Civis mortos por jogadores: %1
플레이어에 의한 민간인 사망자 : %1
Civilisté zabití hráči: %1
+ プレイヤーに殺された市民の数: %1
Civilians healed: %1
@@ -6467,6 +7227,7 @@
Civile curato da: %1
민간인 치료 : %1
Uzdravení civilisté: %1
+ 治療を受けた市民の数: %1
Civilian vehicles destroyed: %1
@@ -6476,6 +7237,7 @@
Veicolo civile distrutto: %1
파괴된 민간인 차량 : %1
Civilní vozidla byla zničena: %1
+ 破壊された市民の車の数: %1
Civilian vehicles destroyed by players: %1
@@ -6485,6 +7247,7 @@
Veicolo civile distrutto dal giocatore: %1
플레이어에 의해 파괴된 민간인 차량 : %1
Civilní vozidla zničená hráči: %1
+ プレイヤーに破壊された市民の車の数: %1
Civilian vehicles seized: %1
@@ -6494,6 +7257,7 @@
Veicolo civile sequestrato da: %1
민간인 차량 탈취 : %1
Krádež civilních vozidel: %1
+ 徴用された市民の車の数: %1
Civilian buildings destroyed: %1
@@ -6503,6 +7267,7 @@
Edificio civile distrutto: %1
파괴된 민간 건물 : %1
Zničeno civilních budov: %1
+ 犠牲となった市民の家財: %1
Vehicles recycled: %1
@@ -6517,6 +7282,7 @@
Veículos reciclados: %1
재활용된 차량 : %1
Recyklovaná vozidla: %1
+ 解体した車両の数: %1
Ammunition produced: %1
@@ -6526,6 +7292,7 @@
Munizioni prodotte: %1
생산된 탄약 : %1
Výroba munice: %1
+ 生産された弾薬の数: %1
Ammunition spent: %1
@@ -6535,6 +7302,7 @@
Munizioni spese: %1
사용된 탄약 : %1
Spotřeba munice: %1
+ 消費された弾薬の数: %1
Fuel produced: %1
@@ -6544,6 +7312,7 @@
Carburante prodotto: %1
생산된 기름 : %1
Výroba paliva: %1
+ 生産された燃料の数: %1
Fuel spent: %1
@@ -6553,6 +7322,7 @@
Carburante speso: %1
사용된 기름 : %1
Spotřeba paliva: %1
+ 消費された燃料の数: %1
Supplies produced: %1
@@ -6562,6 +7332,7 @@
Rifornimenti creati: %1
생산된 보급품 : %1
Výroba surovin: %1
+ 生産されたサプライの数: %1
Supplies spent: %1
@@ -6571,6 +7342,7 @@
Rifornimenti spesi: %1
사용된 보급품 : %1
Spotřeba surovin: %1
+ 消費されたサプライの数: %1
Sectors liberated: %1
@@ -6585,6 +7357,7 @@
Setores liberados: %1
해방된 거점 : %1
Sektory se osvobodily: %1
+ 解放されたセクターの数: %1
Sectors lost: %1
@@ -6599,6 +7372,7 @@
Setores perdidos: %1
상실한 거점 : %1
Sektory prohráli: %1
+ 失われたセクターの数: %1
FOBs built: %1
@@ -6613,6 +7387,7 @@
FOBs construídas: %1
설치된 전추기지 : %1
Postaveny FOB: %1
+ 建設したFOBの数: %1
FOBs lost: %1
@@ -6627,6 +7402,7 @@
FOBs perdidas: %1
상실한 전초기지 : %1
FOB ztratil: %1
+ 失われたFOBの数: %1
Secondary objectives accomplished: %1
@@ -6641,6 +7417,7 @@
Objetivos secundários alcançados: %1
부차적인 임무 달성 : %1
Dosažené sekundární cíle: %1
+ 完了した副次任務の数: %1
Prisoners captured: %1
@@ -6655,6 +7432,7 @@
Prisioneiros capturados: %1
포로 획득 : %1
Vězni zajati: %1
+ 救出した捕虜の数: %1
Hostile battlegroups called: %1
@@ -6669,6 +7447,7 @@
Grupos de combate hostis chamados: %1
전투에 참여한 적 전투단 : %1
Nepřátelské bojové skupiny nazvané: %1
+ 敵戦闘群が呼ばれた回数: %1
Hostile reinforcements called: %1
@@ -6683,6 +7462,7 @@
Reforços hostis requisitados: %1
전투에 참여한 적 지원병력 : %1
Nepřátelské posily nazývané: %1
+ 敵増援が呼ばれた回数: %1
Total combat readiness raised: %1
@@ -6697,6 +7477,7 @@
Disposição total de combatentes em alerta: %1
전체 위협도 상승값 : %1
Bojová připravenost: %1
+ 総合警戒度: %1
IEDs detonated: %1
@@ -6711,19 +7492,21 @@
IEDs detonadas: %1
폭파된 폭발물 : %1
Výbuch miny: %1
+ IEDが爆発した回数: %1
- Number of Potato 01 losses: %1
- Pertes de Potato 01: %1
- Verluste von Potato 01: %1
- Número de pérdidas de Potato 01: %1
- Количество потерянных Potato 01: %1
- Numero di Potato 01 persi: %1
- 损失的斯巴达01号: %1
- Potato 01 kayıpları: %1
- Número de baixas de Potato 01: %1
- 파괴된 재투입차량 : %1
- Počet ztracených Potato 01: %1
+ Number of %2 losses: %1
+ Pertes de %2: %1
+ Verluste von %2: %1
+ Número de pérdidas de %2: %1
+ Количество потерянных %2: %1
+ Numero di %2 persi: %1
+ 损失的 %2: %1
+ %2 kayıpları: %1
+ Número de baixas de %2: %1
+ 파괴된 %2: %1
+ Počet ztracených %2: %1
+ %2 が失われた数: %1
Rabbits killed: %1
@@ -6738,6 +7521,7 @@
Coelhos mortos: %1
대량 학살 : %1
Zabití králíci: %1
+ この映画の撮影で犠牲となったウサギの数: %1
Many thanks for playing KP LIBERATION!
@@ -6752,6 +7536,7 @@
Muito obrigado por jogar KP LIBERATION!
지금까지 KP LIBERATION에 참여해 주신 분들께 감사드립니다!
Děkujeme za hraní KP LIBERATION!
+ 我々はこの地域を解放することに成功した。
We hope you enjoyed playing it, as much as we enjoyed making it.
@@ -6766,6 +7551,7 @@
Esperamos que tenham gostado de jogar, da mesma forma que gostamos de desenvolver esta missão.
개발자가 재미있게 만들고자 한 만큼 여러분도 재미있었기를 바랍니다.
Doufáme, že jste si tuto misi užili stejně, jako když jsme ji vytvořili.
+ 俺たちの戦いはこれからだ!
(Press ESC to exit)
@@ -6780,15 +7566,15 @@
(Aperte ESC para sair)
(ESC 키를 누르면 나갈 수 있습니다.)
(Stisknutím klávesy ESC ukončete program)
+ ESCキーを押して終了
- -- Clear FOB area
- -- Limpiar área de FOB
- -- Очистить зону FOB
- -- Pulisci area FOB
- -- FOB Gebiet räumen
- -- 전초기지 주변 정리
- -- Vymazat zónu FOB
+ -- Clear area around FOB (Small)
+ -- FOBの周辺を一掃 (小)
+
+
+ -- Clear area around FOB (Large)
+ -- FOBの周辺を一掃 (大)
FOB repackaged.\nPossibly created clearance will be reverted upon server restart.
@@ -6798,6 +7584,7 @@
FOB ripiegata.\nL'autorizzazione eventualmente creata verrà ripristinata al riavvio del server.
FOB가 재포장됩니다. 이 상태로 서버 재시작시 이 부근의 건물이나 장비들은 사라집니다.
FOB je zabalen.\Po restartování serveru bude pravděpodobně vytvořené oprávnění zrušeno.
+ FOBを撤収しました。\nFOBの周辺を一掃していた場合は、サーバーの再起動後に原状復帰します。
Dynamic fog (A3 Vanilla)
@@ -6807,6 +7594,7 @@
Nebbia dinamica (A3 Vanilla)
동적인 안개 (A3 Vanilla)
Dynamická mlha (A3 Vanilla)
+ ダイナミック・フォグ (Arma 3 デフォルト)
Start FOB provided as
@@ -6816,6 +7604,7 @@
Partenza con FOB dispiegata a
시작시 전초기지는 다음과 같이 제공됩니다.
První FOB poskyzován jako
+ 開始時に提供されるFOB
FOB Container
@@ -6825,6 +7614,7 @@
FOB Container
전초기지 설치박스
FOB Kontejner
+ FOB コンテナ
FOB Truck
@@ -6834,6 +7624,7 @@
Camion FOB
전초기지 설치트럭
FOB Nákladní auto
+ FOB トラック
Are you sure?
@@ -6862,6 +7656,7 @@
¿Estás seguro?
Sei sicuro?
jsi si tím jistý?
+ よろしいですか?
This will permanently remove a total of %1 terrain objects (houses, trees, fences, lamps, etc.) within a radius of %2m around %3.
@@ -6869,6 +7664,7 @@
Esta acción removera permanentemente un total de %1 objetos de terreno (casas, árboles, bardas, lamparas, etc.) dentro de un radio de %2m alrededor de %3.
Questo rimuoverà permanentemente un totale di %1 oggetti del terreno (case, alberi, recinzioni, lampade, ecc.) Entro un raggio di %2m intorno a %3.
Tím se trvale odstraní celkem %1 terénních objektů (domy, stromy, ploty, lampy atd.) V okruhu %2m kolem %3.
+ これにより %3 周辺の %2 m 以内の %1 個所の地形オブジェクト(家、木、フェンス、街灯等)が永久的に削除されます。
Add enemies to Zeus editable objects
@@ -6876,6 +7672,7 @@
Agregar enemigos como objetos editables de Zeus
Aggiungi nemici come oggetti editabili da Zeus
Přidejte nepřátele k upravitelným objektům Zeus
+ 敵兵士をZEUSの編集可能なオブジェクトに追加する
Arma 3 High Command for Commander
@@ -6883,6 +7680,7 @@
Arma 3 High Command para comandantes
Arma 3 High Command per il comandante
Arma 3 Vrchní velení velitele
+ Arma 3 ハイコマンドを指揮官に追加
Arma 3 High Command
@@ -6890,559 +7688,720 @@
Arma 3 High Command
Arma 4 High Command
Arma 3 Vrchní velení velitele
+ Arma 3 ハイコマンドを指揮官に追加
BI Support System access
Zugriff auf BI Support System
BI Supporto di accesso al sistema
BI Podpora přístupu do systému
+ BI サポートシステムへのアクセス
Commander and Whitelist
Kommandant und Whitelist
Velitel a whitelist
Comandante e Whitelist
+ 指揮官とホワイトリストで許可された人
Everyone
Jeder
Každý
Tutti
+ 全員
Weapon sway
Waffenschwanken (Weapon sway)
Zbraň houpat
Ondeggiamento arma (Weapon sway)
+ 武器のブレ
Ingame Tutorial
Tutorial im Spiel
Výukový program Ingame
Tutorial in gioco
+ チュートリアル
Crate
Kiste
Bedna
Crea
+ 作成
Surrendering Soldier
Kapitulierender Soldat
Vzdávající se voják
Soldato arrendevole
+ 降伏した兵士
Wounded Civilian
Verwundeter Zivilist
Zraněný civilista
Civile ferito
+ 負傷した市民
KP Liberation Tutorial
KP Liberation Tutorial
KP Liberation Tutorial
KP liberation Tutorial
+ KP Liberation チュートリアル
Do you want to enable the interactive tutorial?<br/>It'll guide you through the aspects of the mission. Check your tasks area on the map for further information on each task.<br/><br/>(This popup can be disabled in the mission parameters)
Möchtest du das interaktive Tutorial aktivieren?<br/>Es wird dich durch einzelnen Missionsaspekte führen. Prüfe die Aufgaben im Kartenbildschirm für weitere Informationen zu den einzelnen Aufgaben.<br/><br/>(Dieses Pop-Up kann in den Missionsparametern deaktiviert werden)
Chcete povolit interaktivní výukový program?<br/>Provede vás aspekty mise. Další informace o jednotlivých úkolech naleznete v oblasti úkolů na mapě.<br/><br/>(Toto okno lze v parametrech mise deaktivovat)
- Vuoi abilitare il tutorial interattivo?<br/>Ti guiderà attraverso gli aspetti della missione. Controlla la tua area delle attività sulla mappa per ulteriori informazioni su ciascuna attività<br/><br/>(questo popup può essere disabilitato nei parametri della missione)
+ Vuoi abilitare il tutorial interattivo?<br/>Ti guiderà attraverso gli aspetti della missione. Controlla la tua area delle attività sulla mappa per ulteriori informazioni su ciascuna attività<br/><br/>(questo popup può essere disabilitato nei parametri della missione)
+ 体験型チュートリアルを有効化しますか? <br/>これはミッションの様々な要素を案内します。各任務に関する詳細情報は、マップ上の任務エリアを確認してください。<br/><br/>(このポップアップはミッションパラメータで無効化できます)
You've completed all currently available/implemented tutorials.<br/>Have a lot of fun with playing this mission.<br/><br/>Should you've questions or want to learn the more deeper mechanics, make sure you visit the <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki">KP Liberation Wiki</a>.<br/>We've also a <a href="https://discord.gg/Qk35Sw8">Discord Server</a> where hundreds of KP Libertion players are around.
Du hast alle derzeit verfügbaren/implementierten Tutorials abgeschlossen.<br/>Wir wünschen dir sehr viel Spaß mit dem Spielen der Mission.<br/><br/>Solltest du Fragen haben oder die etwas über die tiefergehenden Mechaniken erfahren wollen, dann schaue als erstes in das <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki">KP Liberation Wiki</a>.<br/>Außerdem gibt es unseren <a href="https://discord.gg/Qk35Sw8">Discord Server</a>, wo hunderte von KP Liberation Spielern zu finden sind.
Dokončili jste všechny aktuálně dostupné/implementované výukové programy.<br/> Užij si spoustu zábavy při hraní této mise.<br/><br/> Pokud máte dotazy nebo se chcete dozvědět hlubší mechaniku, ujistěte se, že navštívíte stránku <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki"> KP Osvobození Wiki</a>. <br/> Také jsme a <a href="https://discord.gg/Qk35Sw8">Discord Server</a> kde jsou kolem stovky hráčů KP Libertion.
Hai completato tutti i tutorial attualmente disponibili / implementati.<br/>Divertiti molto giocando a questa missione.<br/><br/>Se hai domande o vuoi imparare le meccaniche più approfondite, assicurati di visitare la <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki">KP Liberation Wiki</a>.<br/>Noi abbiamo anche un <a href="https://discord.gg/Qk35Sw8">Discord Server</a> dove troverai centinaia di giocatori della KP Libertion.
+ 現在利用可能/実装済みのすべてのチュートリアルを完了しました。<br/>このミッションをプレイして楽しんでください。<br/><br/>もし質問があったり、より深いメカニクスを学びたい場合は、<a href="https://github.com/KillahPotatoes/KP-Liberation/wiki">KP Liberation Wiki</a>を訪れてください。<br/>また、<a href="https://discord.gg/Qk35Sw8">Discordサーバー</a>もあり、そこには数百のKP Liberationプレイヤーがいます。
KP Liberation Tutorial Tasks
KP Liberation Tutorial Aufgaben
KP osvobození Výuky
Missione KP Liberation Tutorial
+ KP Liberation チュートリアル任務
Tasks of the KP Liberation Tutorial.<br/>It'll create new tasks when the correct circumstances are reached and there are still tutorials available.
Aufgaben des KP Liberation Tutorials.<br/>Es werden automatisch neue Aufgaben erstellt, sobald die entsprechenden Umstände eintreten und noch weitere Tutorials verfügbar sind.
Úkoly KP Osvobození Tutorial.<br/>To bude vytvářet nové úkoly, když jsou dosaženy správné okolnosti a stále jsou k dispozici výukové programy.
Compiti del tutorial di KP Liberation.<br/> creerà nuovi compiti quando le circostanze corrette saranno raggiunte e ci saranno ancora tutorial disponibili.
+ KP Liberation チュートリアルの任務です。<br/>適切な状況に達し、まだチュートリアルが利用可能な場合、新しい任務が作成されます。
First FOB deployment
Erste FOB errichten
Primo dispiegamento della FOB
První nasazení FOB
+ 最初のFOBを設置
This tasks will guide you through the deployment of your first FOB and gathering the start resources.
Diese Aufgaben werden dich durch die Bereitstellung deiner ersten FOB und dem Sammeln der Startressourcen führen.
Questo primo impiego ti guida nella creazione della prima FOB e ti insegnera ad acquisire le risorse iniziali.
Tyto úkoly vás provedou nasazením prvního fob a shromažďováním počátečních prostředků.
+ この任務では、最初のFOBの設置と開始時用資源の回収について案内します。
Transport FOB Container
FOB Container transportieren
Přepravní FOB kontejner
Trasporta container FOB
+ FOBコンテナを輸送する
This is your first FOB container, which allows you to deploy a FOB.<br/>You need to slingload it via the transport helicopter to a position at least 1km away from the operation base in order to deploy it. We recommend to build it in the vicinity of a factory.<br/>After you've transported the container to the desired position, head near to it and you'll get an scroll wheel action to place the FOB.<br/>We'll continue after you've deployed your first FOB.
Dies ist dein erster FOB Container mit dem du eine FOB bereitstellen kannst.<br/>Diesen musst du als Außenlast mit dem Transporthelikopter zu einer Position mit mindestens 1km Abstand zur Operationsbasis bringen, um die FOB aufzubauen. Wir empfehlen die erste FOB in der Nähe eines Fabrik-Sektors zu errichten.<br/>Nachdem du den Container zur gewünschten Position gebracht hast, nähere dich ihm und du wirst eine Mausrad-Aktion erhalten, um die FOB aufzustellen.<br/>Wir fahren fort nachdem du deine erste FOB errichtet hast.
Questo è il tuo primo container FOB, che ti permetterà di dispiegare una FOB.<br/>È necessario caricarlo tramite l'elicottero da trasporto in una posizione ad almeno 1 km di distanza dalla base operativa per dispiegarlo. Si consiglia di costruirlo nelle vicinanze di una fabbrica.<br/>Dopo aver trasportato il contenitore nella posizione desiderata, avvicinati ad esso e otterrai un'azione della rotella di scorrimento per posizionare il FOB.<br/>Continueremo dopo che avrai distribuito il tuo primo FOB.
Jedná se o váš první FOB kontejner, který vám umožní nasadit FOB.<br/> Musíte ho naložit transportním vrtulníkem na pozici, která je vzdálena alespoň 1 km od operační základny, abyste ji mohli nasadit. Doporučujeme jej postavit v blízkosti továrny.<br/> Po přepravě kontejneru do požadovaného místa zamiřte k němu a získáte akci rolovacího kolečka, která umístí FOB.<br/> Budeme pokračovat, až to provedete.
+ これは、FOBを建設するためのFOBコンテナです。<br/>FOBを建設するには、FOBコンテナを輸送ヘリコプターで懸吊し、初期地点から少なくとも1km離れた位置に設置する必要があります。工場の近くに建設することをお勧めします。<br/>コンテナを望む位置に輸送した後、近づいてホイールスクロールのアクションを行うことで、FOBを建設することができます。<br/>最初のFOBを建設した後、次の任務に進みます。
Drive FOB Truck
FOB Truck fahren
Nákladní auto FOB
Guida il camion FOB
+ FOBトラックを運転する
This is your first FOB truck, which allows you to deploy a FOB.<br/>You need to drive it to a position at least 1km away from the operation base in order to deploy it. We recommend to build it in the vicinity of a factory.<br/>After you've driven the truck to the desired position, head near to it and you'll get an scroll wheel action to place the FOB.<br/>We'll continue after you've deployed your first FOB.
Dies ist dein erster FOB LKW mit dem du eine FOB bereitstellen kannst.<br/>Diesen musst du zu einer Position mit mindestens 1km Abstand zur Operationsbasis fahren, um die FOB aufzubauen. Wir empfehlen die erste FOB in der Nähe eines Fabrik-Sektors zu errichten.<br/>Nachdem du den LKW zur gewünschten Position gebracht hast, nähere dich ihm und du wirst eine Mausrad-Aktion erhalten, um die FOB aufzustellen.<br/>Wir fahren fort nachdem du deine erste FOB errichtet hast.
Questo è il tuo primo camion FOB, che ti consente di distribuire un FOB.<br/>È necessario guidarlo in una posizione ad almeno 1 km dalla base operativa per poterlo distribuire. Si consiglia di costruirlo nelle vicinanze di una fabbrica.<br/>Dopo aver guidato il camion nella posizione desiderata, avvicinati ad esso e otterrai un'azione della rotella di scorrimento per posizionare il FOB.<br/>Continueremo dopo che avrai distribuito il tuo primo FOB.
Jedná se o váš první FOB truck, který vám umožní nasadit FOB.<br/> Musíte ho dojet na pozici alespoň 1 km od operační základny, abyste ji mohli nasadit. Doporučujeme ji postavit v blízkosti továrny.<br/> Poté, co jste řídili vůz do požadovaného místa, zamiřte blízko k němu a dostanete akci rolovacího kolečka pro umístění FOB.<br/> Budeme pokračovat, až rozmístíte svůj první FOB.
+ これは、FOBを建設するためのFOBトラックです。<br/>FOBを建設するには、トラックを運転して運び、初期地点から少なくとも1km離れた位置に設置する必要があります。工場の近くに建設することをお勧めします。<br/>トラックを望む位置まで運転した後、近づいてホイールスクロールのアクションを行うことで、FOBを建設することができます。<br/>最初のFOBを建設した後、次の任務に進みます。
Build a storage area
Baue einen Lagerbereich
Costruisci un'area di stoccaggio
Vytvoření úložného prostoru
+ 倉庫を建設する
Now you've access to the build menu via the scroll wheel actions.<br/>Use this action to place a storage area. You can find it in the support tab of the build menu.<br/>This is needed to store the resource crates we'll send to you after this task.
Nun hast du Zugriff zum Baumenü über die Mausrad-Aktionen.<br/>Benutze diese Aktion, um einen Lagerbereich zu errichten. Die Lagerbereich sind im Unterstützungs-Reiter des Baumenüs.<br/>Dieser ist notwendig, um die Startressourcen, die wir dir im Anschluss an diese Aufgabe zukommen lassen, einzulagern.
Ora hai accesso al menu di costruzione tramite le azioni della rotella di scorrimento.<br/>Usa questa azione per posizionare un'area di stoccaggio. Puoi trovarlo nella scheda Supporto del menu di costruzione.<br/>Questo è necessario per memorizzare le casse di risorse che ti invieremo dopo questa attività.
Nyní máte přístup k nabídce sestavení prostřednictvím akcí rolovacího kolečka.<br/> Tato akce slouží k umístění skladovacího prostoru. Najdete ji na kartě budovy v nabídce stavení.<br/> To je nutné k uložení beden prostředků, které vám pošleme po tomto úkolu.
+ 現在、アクションメニュー(マウスホイール)を使用して製造メニューにアクセスできるようになっています。<br/>このアクションを使用して倉庫を配置してください。倉庫はビルドメニューの物流タブにあります。<br/>この倉庫は、この任務の後に送られてくる資源箱を保管するために必要です。
Collect start resources
Sammle Startressourcen
Acquisisci risorse iniziali
Shromáždit počáteční zdroje
+ 開始時用資源を回収する
We've send you some start resource crates via paradrop. Collect them and store them in your storage area to add them to the FOB resource pool.<br/>Resources have always to be stored in such areas to use them for building. It's not enough to have them near the FOB. If you go near a crate you'll have a store and a push scroll wheel action, which will help you.
Wir haben dir ein paar Kisten mit Startressourcen per Fallschirmabwurf zukommen lassen. Sammel sie ein und lagere sie in deinen Lagerbereich ein, um sie den verfügbaren Ressourcen der FOB hinzuzufügen.<br/>Ressourcen müssen übrigens immer in solche Bereiche eingelagert werden, damit sie zum bauen verwendet werden können. Es reicht nicht aus, die Kisten einfach in der Nähe der FOB zu haben. Bist du in der Nähe einer Kiste, hast du unter anderem eine "Einlagern" und "Schieben" Mausrad-Aktion, welche dir helfen werden.
Ti abbiamo inviato alcune casse di risorse iniziali tramite paradrop. Raccoglili e conservali nella tua area di stoccaggio per aggiungerli al pool di risorse FOB.<br/>Le risorse devono sempre essere immagazzinate in tali aree per usarle per la costruzione. Non basta averli vicino al FOB. Se ti avvicini a una cassa, avrai un negozio e una rotella di scorrimento, che ti aiuterà.
Poslali jsme vám přes paradrop nějaké bedny se startem. Shromážděte je a uložte je do úložiště a přidejte je do fondu zdrojů FOB.<br/> Zdroje musí být vždy uloženy v těchto oblastech, aby je mohly používat pro stavbu. Nestačí je mít blízko FOB. Pokud se přiblížíte k bedně, budete mít možnost a akci push rolovacího kolečka, která vám pomůže.
+ 私たちは貴方に空中投下で開始時用資源箱を送りました。それらを収集して倉庫に収容し、FOBの資源プールに追加してください。<br/>製造に使用するために、資源は常にそのようなエリアに保管する必要があります。FOBの近くにあるだけでは十分ではありません。資源箱の近くに移動すると、貨物を押す、運ぶ、収納する等のアクション(マウスホイールで選択)が表示されます。それらを役立ててください。
Capture your first factory
Erobere deine erste Fabrik
Cattura la tua prima fabbrica
Zachyťte svou první továrnu
+ 最初の工場を確保する
This tasks will guide you through the process of capturing a factory sector, take possible POWs, help possible wounded civilians and start the resource production.
Diese Aufgaben werden dich durch die Eroberung eines Fabrik-Sektors, das Festnehmen möglicher Gefangener, der Betreuung möglicher verwundeter Zivilisten und den Start der Ressourcenproduktion führen.
Questi compiti ti guideranno attraverso il processo di cattura di un settore di fabbrica, prenderanno possibili prigionieri di guerra, aiuteranno possibili civili feriti e avvieranno la produzione di risorse.
Tyto úkoly vás provedou procesem zachycení výrobního sektoru, vezmou možné válečné zajatce, pomohou zraněným civilistům a zahájí výrobu zdrojů.
+ この任務は、工場地帯の占拠プロセス、捕虜の確保、負傷した市民の救助、および資源生産の開始の手順を案内します。
Approach a factory
Nähere dich einer Fabrik
Avvicinamento ad una fabbrica
Přistupte k továrně
+ 工場に向かう
It's always a good decision to start your campaign with capturing a factory. That way you'll be able to produce more resources, which you'll need in order to build more vehicles and later air assets.<br/>We've marked up to three near factory sectors on the map for you. Decide by yourself, which one you want to approach.<br/>We'll continue, if you're near one of the marked factories.<br/><br/>More information about the different sector types can be found in our <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Sectors">Wiki</a>.
Es ist immer eine gute Entscheidung die Kampagne mit der Eroberung einer Fabrik zu beginnen. Dadurch wirst du in der Lage sein weitere Ressourcen zu produzieren, um weitere Bodenfahrzeuge und später auch Luftfahrzeuge zu bauen.<br/>Wir haben bis zu drei nahe Fabriken für dich auf der Karte markiert. Entscheide selbst, welche du angehen möchtest.<br/>Wir fahren fort, wenn du in der Nähe einer der markierten Fabriken bist.<br/><br/>Mehr Informationen über die verschiedenen Sektortypen findest du in unserem <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Sectors">Wiki</a>.
È sempre una buona decisione iniziare la tua campagna con l'acquisizione di una fabbrica. In questo modo sarai in grado di produrre più risorse, di cui avrai bisogno per costruire più veicoli e successivamente risorse aeree.<br/>Abbiamo contrassegnato per te fino a tre settori vicini alla fabbrica sulla mappa. Decidi da solo a quale ti vuoi avvicinare.<br/>Continueremo, se sei vicino a una delle fabbriche contrassegnate.<br/><br/>Maggiori informazioni sui diversi tipi di settore possono essere trovate nel nostro <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Sectors">Wiki</a>.
Je vždy dobré začít kampaň se zachycením továrny. Tímto způsobem budete moci produkovat více zdrojů, které budete potřebovat, abyste mohli postavit více vozidel a později letecké prostředky.<br/> Označili jsme na mapě až tři blízké výrobní sektory. Rozhodněte se sami, který z nich chcete přistupovat.<br/> Budeme pokračovat, pokud jste poblíž jedné z označených továren.<br/><br/> Více informací o různých typech odvětví naleznete v našem <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Sectors"> Wiki</a>.
+ 工場を占領することからキャンペーンを始めるのは常に良い決断です。そうすれば、より多くの資源を生産できるようになり、より多くの資源が必要な車両や後には航空機を製造することが出来ます。<br/>私たちはあなたのために、マップ上に最大3つの工場付近のセクターをマークしました。どの工場に接近するかは、あなたが決めてください。<br/>マークされた工場の近くにいるのであれば、作業を続けましょう。<br/><br/>異なるセクターの種類の詳細は、<a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Sectors">Wiki</a>で確認できます。
Conquer the factory
Erobere die Fabrik
Conquistare una fabbrica
Dobýt továrnu
+ 工場を制圧する
The factory is now activated and will spawn enemy defenders. A full sector activation might take up to 20 seconds, depending on the amount of player side units near the sector. The more troops, the faster it'll spawn. This is to avoid random spawning by e.g. helicopter or jet fly-bys.<br/><br/>Now you've to defeat the enemy garrison until they surrender.
Die Fabrik ist nun aktiv und wird feindliche Verteidigungstruppen erzeugen. Eine vollständige Sektoraktivierung kann bis zu 20 Sekunden dauern, abhängig von der Menge an freundlichen Einheiten in der Nähe eine Sektors. Umso mehr Einheiten, umso schneller. Dies verhindert, dass zufällige Sektoren durch lediglich vorbeifliegende Helikopter oder Jets aktiviert werden.<br/><br/>Nun musst du die feindliche Garnison, bis zur Aufgabe, bekämpfen.
La fabbrica è ora attivata e genererà difensori nemici. Un'attivazione completa di un settore potrebbe richiedere fino a 20 secondi, a seconda della quantità di unità lato giocatore vicino al settore. Più truppe, più velocemente si genererà. Questo per evitare la deposizione delle uova casuale, ad es. voli in elicottero o jet.<br/><br/>Ora devi sconfiggere la guarnigione nemica finché non si arrendono.
Továrna je nyní aktivována a bude plodit nepřátelské obránce. Úplná aktivace sektoru může trvat až 20 sekund, v závislosti na množství jednotek na straně hráče v blízkosti sektoru. Čím více vojáků, tím rychleji se vynoří. To má zabránit náhodnému tření např. vrtulník nebo tryskové přelety .<br/><br/> Nyní musíte porazit nepřátelskou posádku, dokud se nevzdají.
+ 工場が活性化し、敵の防衛部隊が出現しました。セクターの近くにいるプレイヤー側ユニットの数にもよりますが、セクターの活性化には最大20秒ほどかかる場合があります。プレイヤー側のユニットが多ければ多いほど、敵の出現が早くなります。これは航空機の上空通過による敏感な敵の出現を避けるためです。<br/><br/>次は敵の防衛部隊が降伏するまで倒さなければなりません。
Capture and care
Gefangennahme und Versorgung
Cattura e utilizza
Zachyťte a pečujte
+ 捕虜回収と治療
After capturing a sector there is a chance that enemies surrendered or wounded civilians are in need of medical aid.<br/>We've marked these for you this time. Normally you need to search the buildings for surrendering enemies and have a look on the map for small violet circles which gives a hint for wounded civilians.<br/><br/>Approach all of the markers to capture the enemies and provide medical assistance for the civilians.
Nachdem ein Sektor erobert wurde, besteht die Chance, dass Feinde sich ergeben und verwundete Zivilisten medizinische Hilfe benötigen.<br/>Dieses mal haben wir diese für dich markiert. Normalerweise musst du die Gebäude nach sich ergebenen Feinden durchsuchen und auf der Karte nach kleinen violetten Markierungen schauen, welche dir einen Anhaltspunkt für verwundete Zivilisten gibt.<br/><br/>Nähere dich allen Markierungen, um Feinde gefangen zu nehmen und den Zivilisten zu helfen.
Dopo aver catturato un settore c'è la possibilità che i nemici si arrendano o i civili feriti abbiano bisogno di assistenza medica.<br/>We've marked these for you this time. Normally you need to search the buildings for surrendering enemies and have a look on the map for small violet circles which gives a hint for wounded civilians.<br/><br/>Avvicinati a tutti i segnalini per catturare i nemici e fornire assistenza medica ai civili.
Po obsazení sektoru je šance, že nepřátelé, kteří se vzdali nebo budou zraněni civilisté, potřebují lékařskou pomoc.<br/> Tentokrát jsme je označili. Za normálních okolností je třeba hledat budovy pro odevzdání nepřátel a podívat se na mapě pro malé fialové kruhy, které dává náznak pro zraněné civilisty.<br/><br/> Přistupte ke všem značkám, abyste zachytili nepřátele a poskytli lékařskou pomoc civilistům.
+ セクターを占領すると、敵が降伏したり、負傷した市民が医療援助を必要とする可能性があります。<br/>今回はこれらをあなたにマークしました。通常は降伏した敵を探すために建物を捜索したり、負傷した市民を示す小さな紫色の円を地図で確認して探す必要があります。<br/><br/>すべてのマーカーに近づき、敵を捕らえ、市民に医療援助を提供してください。
Build a storage area
Baue einen Lagerbereich
Creare un'area di stoccaggio
Vybudujte skladovací prostor
+ 倉庫を建設する
You need to place down a storage area for each factory you conquer. Otherwise the factory won't be able to produce resources due to a lack of storage space.<br/>Use the scroll wheel action to place a storage area at the factory sector.
Für jede eroberte Fabrik muss ein Lagerbereich errichtet werden. Andernfalls wird die Fabrik, aufgrund fehlendem Lagerplatz, keine Ressourcen produzieren können.<br/>Benutze die entsprechende Mausrad-Aktion, um einen Lagerbereich bei der Fabrik zu errichten.
Devi posizionare un'area di stoccaggio per ogni fabbrica che conquisti. In caso contrario, la fabbrica non sarà in grado di produrre risorse per mancanza di spazio di archiviazione.<br/>Utilizzare l'azione della rotella di scorrimento per posizionare un'area di stoccaggio nel settore della fabbrica.
musíte umístit úložný prostor pro každou továrnu, kterou dobýváte. V opačném případě nebude továrna schopna vyrábět zdroje z důvodu nedostatku úložného prostoru.<br/> Pomocí akce rolovacího kolečka umístěte úložný prostor do výrobního sektoru.
+ 征服した工場ごとに、倉庫を設置する必要があります。そうしないと、倉庫スペースの不足のため、工場は資源を生産できなくなります。<br/>アクションメニュー(マウスホイール)を使用して、工場セクターに倉庫を配置してください。
Start the production
Starte die Produktion
Avvia la produzione
Zahajte výrobu
+ 生産を始める
Now the factory is ready to start produce resources. Use the scroll-wheel action to open the production interface and start the production in the just conquered factory.<br/>More detailed information about the interface can be found in our <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Production">Wiki</a>.
Nun ist die Fabrik dafür bereit, um Ressourcen zu produzieren. Benutze die Mausrad-Aktion, um das Produktionsinterface zu öffnen und die Produktion in der eroberten Fabrik zu starten.<br/>Detailliertere Informationen über das Produktionsinterface findest du in unserem <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Production">Wiki</a>.
Ora la fabbrica è pronta per iniziare a produrre risorse. Usa l'azione della rotella di scorrimento per aprire l'interfaccia di produzione e avviare la produzione nella fabbrica appena conquistata.<br/>Informazioni più dettagliate sull'interfaccia possono essere trovate nel nostro <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Production">Wiki</a>.
Nyní je továrna připravena začít vyrábět zdroje. Pomocí akce rolovacího kolečka otevřete výrobní rozhraní a začněte vyrábět v právě dobyté továrně.<br/> Podrobnější informace o rozhraní naleznete v našem <a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Production">Wiki</a>.
+ これで工場が資源を生産する準備ができました。アクションメニュー(マウスホイール)を使用して、生産インターフェイスを開き、占領したばかりの工場で生産を開始してください。<br/>インターフェースの詳細については、<a href="https://github.com/KillahPotatoes/KP-Liberation/wiki/EN_Production">Wiki</a>をご覧ください。
Direct arsenal access without KPLIB Loadout Dialog
Direkter Arsenalzugang ohne KPLIB Loadout Dialog
Accesso diretto all'arsenale senza KPLIB Loadout Dialog
+ KPLIB ロードアウトダイアログなしで直接アーセナルを開く
UNDER ATTACK
WIRD ANGEGRIFFEN
SOTTO ATTACCO
+ 攻撃下
-
- -- KP Player Menu --
-- KP 玩家選單 --
-- Menú de Jugador KP --
-- KP Spielermenü --
-- KP Menu Giocatore --
-- KP Menu do Jogador --
-- KP Player Nabídka --
+ -- KP Player Menu --
+ -- KP プレイヤー メニュー --
- KP Player Menu
KP 玩家選單
Menú de Jugador KP
KP Spielermenü
KP Menu Giocatore
KP Menu do Jogador
KP Player Nabídka
+ KP Player Menu
+ KP プレーヤー メニュー
- Player Information
玩家資訊
Información de Jugador
Spielerinformationen
Informazioni Giocatore
Informação do Jogador
Informace o hráči
+ Player Information
+ プレイヤー情報
- Rank:
階級
Rango:
Dienstgrad:
Grado:
Rank:
Hodnost:
+ Rank:
+ 階級:
- Score:
得分
Puntaje:
Punkte:
Punteggio:
Pontuação:
Skóre:
+ Score:
+ スコア:
- Playtime:
遊戲時間
Tiempo de juego:
Spielzeit:
Tempo di gioco:
Tempo de jogo:
Čas hraní:
+ Playtime:
+ プレイ時間:
- KP Ranks mod not loaded
KP Ranks 模組未裝載
KP Ranks mod no ha sido cargado
KP Ranks Mod nicht geladen
KP Ranks Mod non caricata
O mod KP Ranks não está carregado
KP Ranks mod nebyl načten
+ KP Ranks mod not loaded
+ KP Ranks mod が読み込まれていません
- Group Management
團隊管理
Administración de grupo
Gruppenverwaltung
Gestione Gruppo
Gerenciar Grupo
Správa skupiny
+ Group Management
+ グループ管理
- Create
Erstellen
Crea
Crear
Criar
Vytvořit
+ Create
+ 作成
- Join
加入
Unirse
Beitreten
Entra
Juntar-se
Připojit se
+ Join
+ 参加
- Rename
重新命名
Renombrar
Umbenennen
Rinomina
Renomear
Přejmenovat
+ Rename
+ 名前変更
- View Distance Settings
視距設定
Configuración de distancia de visión
Sichtweiteneinstellungen
Visualizza settaggi distanza
Distância de Visão
Nastavení vzdálenosti
+ View Distance Settings
+ 描画距離設定
- m in ground vehicles
m 地面載具視野
m en vehículos de tierra
m in Bodenfahrzeugen
m nei veicoli di terra
m em veículos terrestres
Vozidla
+ m in ground vehicles
+ m (地上車両)
- m in air vehicles
m 空中載具視野
m en vehículos de aire
m in Luftfahrzeugen
m nei veivoli
m em veículos aéreos
Letectvo
+ m in air vehicles
+ m (航空機)
- Misc Settings
細項設定
Configuración miscelanea
Sonstige Einstellungen
Settaggi Vari
Outras Configurações
Různé nastavení
+ Misc Settings
+ その他の設定
- Terrain detail:
地形細節
Detalle de terreno:
Terraindetail:
Dettaglio terreno:
Detalhe do terreno:
Detail terénu:
+ Terrain detail:
+ 地形表現:
- Low
低
Bajo
Niedrig
Basso
Baixo
Nízký
+ Low
+ 低い
- Standard
標準
Estandard
Standard
Standard
Padrão
Normální
+ Standard
+ 標準
- High
高
Alto
Hoch
Alto
Alto
Vysoký
+ High
+ 高い
- Very High
非常高
Muy alto
Sehr Hoch
Molto Alto
Muito Alto
Velmi vysoký
+ Very High
+ 非常に高い
- Ultra
極高
Ultra
Ultra
Ultra
Ultra
Ultra
+ Ultra
+ ウルトラ
- Auto 3rd person view:
自動第三人稱視角
Cámara auto 3era persona:
Auto 3rd-Person-Sicht:
Vista in 3° persona automatica
Câmera auto em 3º pessoa:
Pohled z třetí osoby:
+ Auto 3rd person view:
+ 自動三人称視点:
- Disabled
關閉
Desabilitar
Deaktiviert
Disattivo
Desativado
Zakázáno
+ Disabled
+ 無効
- Air vehicles
空中載具
Vehículos de aire
Luftfahrzeuge
Veivoli
Veículos aéreos
Letectvo
+ Air vehicles
+ 航空機
- Ground vehicles
地面載具
Vehículos de tierra
Bodenfahrzeuge
Veicoli di terra
Veículos terrestres
Pozemní vozidla
+ Ground vehicles
+ 地上車両
- All vehicles
所有載具
Todos los vehículos
Alle Fahrzeuge
Tutti i veicoli
Todos os veículos
Všechna vozidla
+ All vehicles
+ すべての車両
- No
否
No
Nein
No
Não
Ne
+ No
+ いいえ
- Voice
只有語音通訊
Voz
Stimme
Voce
Voz
hlas
+ Voice
+ 音声
- Voice + Chat
語音+文字通訊
Voz + Chat
Stimme + Chat
Voce + Chat
Voz + Chat
Hlas + chat
+ Voice + Chat
+ 音声 + テキスト
- In vehicle volume:
載具內音量:
Volumen en vehículo:
Lautstärke im Fahrzeug:
Suono dentro i veicoli:
Volume dentro do veículo:
Hlasitost ve vozidle:
+ In vehicle volume:
+ 車内での音量:
- Apply
使用
Aplicar
Anwenden
Apllica
Aplicar
Potvrdit
+ Apply
+ 適用
- The sound adjustment is overwritten by ACE, if you should use it.
如果你有使用ACE模組,聲音設定將會被ACE的覆蓋
Los ajustes de sonido han sido sobreescritos por ACE, si debieras usarlos.
Die Lautstärkeanpassung wird durch ACE überschrieben, wenn du es nutzen solltest.
Le impostazioni audio sono sovrascritte dalla ACE, se decidi di utilizzarla
O ajuste de som é sobrescrito pelo ACE se você usar ele.
Úprava zvuku je přepsána ACE, pokud ji použijete.
+ The sound adjustment is overwritten by ACE, if you should use it.
+ ACEを使用する場合、サウンド調整はACEによって上書きされます。
- You're not the leader of this group.
你不是這個團隊的隊長
No eres el líder en el grupo.
Du bist nicht der Anführer dieser Gruppe.
Non sei il leader di questo gruppo.
Você não é o lider desse grupo.
Nejste vůdce této skupiny.
+ You're not the leader of this group.
+ あなたはこのグループのリーダーではありません。
- Leveling system disabled
陞階系統關閉
Sistema de niveles desactivado
Levelsystem deaktiviert
sistema di livellamento disabilitato
Sistema de níveis desativado
Vyrovnávací systém zakázán
+ Leveling system disabled
+ レベリングシステム無効
- KP Player Menu v1.0.2\nby Wyqer
KP Spielermenü v1.0.2\nvon Wyqer
KP Player Menu v1.0.2\nby Wyqer
Menú de Jugador KP v1.0.2\npor Wyqer
KP Player Menu v1.0.2\nby Wyqer
+ KP Player Menu v1.0.2\nby Wyqer
+ KP プレイヤー メニュー v1.0.2\nby Wyqer
+
+
+
+
+ Vehicle Appearance Manager initialized
+ 차량 형상 관리자 불러오기 및 초기화 완료
+ 車両外観マネージャーが初期化されました
+
+
+ Vehicle Appearance Manager
+ 차량 형상 관리자
+ 車両外観マネージャー
+
+
+ Reset
+ 초기화
+ リセット
+
+
+
+ Current Vehicle :
+ 현 재 차 량 :
+ 現 在 の 車 両 :
+
+
+ You should be in %1 m from FOB.
+ FOB에서 %1m 안에 있어야 합니다.
+ FOBから %1 m 以内にいる必要があります。
+
+
+ Reset complete
+ 초기화 완료
+ リセット完了
+
+
+ Camoufluge
+ 위장
+ 迷彩
+
+
+ Component
+ 구성품
+ 部品
+
+
+ There is no camouflage.
+ 위장이 없습니다.
+ 迷彩はありません。
+
+
+ There is no component.
+ 구성품이 없습니다.
+ 部品はありません。
+
+
+ Your Marid is outdated one.\nVehicle component setup may not be loaded next time.\nPlease contact with your server admin.
+ 당신의 마리드는 오래된 것입니다.\n다음 번에 차량 구성품 설정을 불러올 수 없을 것입니다.\n해당 서버 관리자와 연락을 취해보십시오.
+ あなたのMarid APCは古いものです。\n次回から車両コンポーネントのセットアップがロードされない可能性があります。\nサーバー管理者にお問い合わせください。
+
+
+ BLUFOR
+ 청군
+ 同盟軍
+
+
+ Green
+ 녹색
+ 緑
+
+
+ Black
+ 검정색
+ 黒
+
+
+ AAF
+ AAF
+ AAF
+
+
+ Dark Green
+ 어두운 녹색
+ 深緑
diff --git a/Missionframework/ui/defines.hpp b/Missionframework/ui/defines.hpp
index 27be848b1..11f8d519b 100644
--- a/Missionframework/ui/defines.hpp
+++ b/Missionframework/ui/defines.hpp
@@ -103,10 +103,10 @@
#define COLOR_BRIGHTGREEN { 0.2,1,0.2,1 }
#define COLOR_BLUE {0.2,0.2,1,1}
-#define SHADOW_X 0.0008
+#define SHADOW_X 0.0008
#define SHADOW_Y 0.0011
#define ICONE_SPACY 0.025
-#define BORDERSIZE 0.01
+#define BORDERSIZE 0.01
#define MAP_IDC 10023
diff --git a/Missionframework/ui/liberation_interface.hpp b/Missionframework/ui/liberation_interface.hpp
index a0d6b2466..2b704af22 100644
--- a/Missionframework/ui/liberation_interface.hpp
+++ b/Missionframework/ui/liberation_interface.hpp
@@ -15,3 +15,4 @@
#include "liberation_secondary.hpp"
#include "liberation_production.hpp"
#include "liberation_logistic.hpp"
+#include "liberation_timeweather.hpp"
diff --git a/Missionframework/ui/liberation_notifications.hpp b/Missionframework/ui/liberation_notifications.hpp
index 54991b7b6..76f09df18 100644
--- a/Missionframework/ui/liberation_notifications.hpp
+++ b/Missionframework/ui/liberation_notifications.hpp
@@ -89,6 +89,36 @@ class CfgNotifications {
class lib_intel_fob: lib_intel {
description = $STR_NOTIFICATION_FOB_TEXT;
};
+ class lib_intel_civ_supplies: lib_intel {
+ description = $STR_NOTIFICATION_CIV_SUPPLIES_TEXT;
+ };
+ class lib_secondary_civ_supplies_complete: lib_default_notification {
+ title = $STR_NOTIFICATION_SECONDARY_TITLE;
+ description = $STR_NOTIFICATION_CIV_SUPPLIES_COMPLETE_TEXT;
+ iconPicture = "res\notif\ui_notif_sob.paa";
+ color[] = { 0, 1, 0, 1 };
+ sound = "taskSucceeded";
+ };
+ class lib_intel_bingo_fuel: lib_intel {
+ description = $STR_NOTIFICATION_CIV_SUPPLIES_TEXT;
+ };
+ class lib_secondary_bingo_fuel_complete: lib_default_notification {
+ title = $STR_NOTIFICATION_SECONDARY_TITLE;
+ description = $STR_NOTIFICATION_BINGO_FUEL_COMPLETE_TEXT;
+ iconPicture = "res\notif\ui_notif_sob.paa";
+ color[] = { 0, 1, 0, 1 };
+ sound = "taskSucceeded";
+ };
+ class lib_intel_rearm_outpost: lib_intel {
+ description = $STR_NOTIFICATION_REARM_OUTPOST_TEXT;
+ };
+ class lib_secondary_rearm_outpost_complete: lib_default_notification {
+ title = $STR_NOTIFICATION_SECONDARY_TITLE;
+ description = $STR_NOTIFICATION_REARM_OUTPOST_COMPLETE_TEXT;
+ iconPicture = "res\notif\ui_notif_sob.paa";
+ color[] = { 0, 1, 0, 1 };
+ sound = "taskSucceeded";
+ };
class lib_intel_convoy: lib_intel {
description = $STR_NOTIFICATION_CONVOY_SPOTTED_TEXT;
};
@@ -120,6 +150,21 @@ class CfgNotifications {
class lib_intel_sar_succeeded: lib_secondary_fob_destroyed {
description = $STR_NOTIFICATION_SAR_SUCCESS;
};
+ class lib_secondary_civ_supplies_no_room: lib_secondary_fob_destroyed {
+ description = $STR_NOTIFICATION_CIV_SUPPLIES_NO_ROOM;
+ color[] = { 1, 0, 0, 1 };
+ sound = "taskFailed";
+ };
+ class lib_secondary_bingo_fuel_no_room: lib_secondary_fob_destroyed {
+ description = $STR_NOTIFICATION_BINGO_FUEL_NO_ROOM;
+ color[] = { 1, 0, 0, 1 };
+ sound = "taskFailed";
+ };
+ class lib_secondary_rearm_outpost_no_room: lib_secondary_fob_destroyed {
+ description = $STR_NOTIFICATION_REARM_OUTPOST_NO_ROOM;
+ color[] = { 1, 0, 0, 1 };
+ sound = "taskFailed";
+ };
class lib_restart_60_s: lib_default_notification {
title = $STR_NOTIFICATION_RESTART_TITLE;
description = $STR_NOTIFICATION_RESTART_SECOND;
@@ -160,6 +205,9 @@ class CfgNotifications {
class lib_civ_informant_death: lib_intel {
description = $STR_NOTIFICATION_CIV_INFORMANT_DEATH;
};
+ class lib_civ_informant_escort: lib_intel {
+ description = $STR_NOTIFICATION_CIV_INFORMANT_ESCORT;
+ };
class lib_civ_hvt_start: lib_intel {
description = $STR_NOTIFICATION_CIV_HVT_START;
};
diff --git a/Missionframework/ui/liberation_squad.hpp b/Missionframework/ui/liberation_squad.hpp
index e5201a191..ece2f73ef 100644
--- a/Missionframework/ui/liberation_squad.hpp
+++ b/Missionframework/ui/liberation_squad.hpp
@@ -4,8 +4,8 @@ class liberation_squad {
controlsBackground[] = {};
controls[] = {"OuterBG", "RecycleBG","OuterBG_F", "InnerBG", "InnerBG_F", "OuterCenterPanel","Header","SquadList","DeployMap", "ButtonClose",
- "NameLabel", "ClassLabel", "HealthLabel", "DistanceLabel", "PrimaryLabel", "PrimaryMagsLabel", "SecondaryLabel", "SecondaryMagsLabel", "VehicleLabel",
- "ResupplyButton", "RemoveButton", "ReplaceButton", "ConfirmButton", "CancelButton", "PiPZone"};
+ "NameLabel", "ClassLabel", "HealthLabel", "DistanceLabel", "PrimaryLabel", "PrimaryMagsLabel", "SecondaryLabel", "SecondaryMagsLabel", "VehicleLabel", "VehicleImmobileLabel", "IsPlayerLabel",
+ "ResupplyButton", "RemoveButton", "ReplaceButton", "ImmobileButton", "ImmobileOffButton", "ConfirmButton", "CancelButton", "PiPZone"};
objects[] = {};
@@ -70,7 +70,7 @@ class liberation_squad {
idc = 210;
x = (0.2 * safezoneW + safezoneX);
y = (0.6 * safezoneH + safezoneY);
- w = (0.12 * safezoneW);
+ w = (0.055 * safezoneW);
h = (0.04 * safezoneH);
sizeEx = 0.025 * safezoneH;
text = $STR_RESUPPLY;
@@ -80,7 +80,7 @@ class liberation_squad {
class RemoveButton: StdButton {
idc = 211;
x = (0.2 * safezoneW + safezoneX);
- y = (0.65 * safezoneH + safezoneY);
+ y = (0.7 * safezoneH + safezoneY);
w = (0.12 * safezoneW);
h = (0.04 * safezoneH);
sizeEx = 0.025 * safezoneH;
@@ -90,15 +90,37 @@ class liberation_squad {
};
class ReplaceButton: StdButton {
idc = 212;
- x = (0.2 * safezoneW + safezoneX);
- y = (0.7 * safezoneH + safezoneY) ;
- w = (0.12 * safezoneW);
+ x = (0.265 * safezoneW + safezoneX);
+ y = (0.6 * safezoneH + safezoneY) ;
+ w = (0.055 * safezoneW);
h = (0.04 * safezoneH);
sizeEx = 0.025 * safezoneH;
text = $STR_DEPLOY_ON_MEMBER;
tooltip = $STR_DEPLOY_ON_MEMBER_TOOLTIP;
action = "KPLIB_squadaction = 3";
};
+ class ImmobileButton: StdButton {
+ idc = 215;
+ x = (0.2 * safezoneW + safezoneX);
+ y = (0.65 * safezoneH + safezoneY) ;
+ w = (0.055 * safezoneW);
+ h = (0.04 * safezoneH);
+ sizeEx = 0.025 * safezoneH;
+ text = $STR_SQUAD_ALLOW_IMMOBILE;
+ tooltip = $STR_SQUAD_ALLOW_IMMOBILE_TOOLTIP;
+ action = "KPLIB_squadaction = 4";
+ };
+ class ImmobileOffButton: StdButton {
+ idc = 216;
+ x = (0.265 * safezoneW + safezoneX);
+ y = (0.65 * safezoneH + safezoneY) ;
+ w = (0.055 * safezoneW);
+ h = (0.04 * safezoneH);
+ sizeEx = 0.025 * safezoneH;
+ text = $STR_SQUAD_DISALLOW_IMMOBILE;
+ tooltip = $STR_SQUAD_DISALLOW_IMMOBILE_TOOLTIP;
+ action = "KPLIB_squadaction = 5";
+ };
class ConfirmButton: StdButton {
idc = 213;
x = (0.2 * safezoneW + safezoneX);
@@ -143,34 +165,42 @@ class liberation_squad {
};
class ClassLabel: StdSquadLabel {
idc = 202;
- y = 0.3 * safezoneH + safezoneY;
+ y = 0.275 * safezoneH + safezoneY;
};
class HealthLabel: StdSquadLabel {
idc = 203;
- y = 0.325 * safezoneH + safezoneY;
+ y = 0.3 * safezoneH + safezoneY;
};
class DistanceLabel: StdSquadLabel {
idc = 204;
- y = 0.35 * safezoneH + safezoneY;
+ y = 0.325 * safezoneH + safezoneY;
};
class PrimaryLabel: StdSquadLabel {
idc = 205;
- y = 0.4 * safezoneH + safezoneY;
+ y = 0.365 * safezoneH + safezoneY;
};
class PrimaryMagsLabel: StdSquadLabel {
idc = 206;
- y = 0.425 * safezoneH + safezoneY;
+ y = 0.39 * safezoneH + safezoneY;
};
class SecondaryLabel: StdSquadLabel {
idc = 207;
- y = 0.475 * safezoneH + safezoneY;
+ y = 0.425 * safezoneH + safezoneY;
};
class SecondaryMagsLabel: StdSquadLabel {
idc = 208;
- y = 0.5 * safezoneH + safezoneY;
+ y = 0.45 * safezoneH + safezoneY;
};
class VehicleLabel: StdSquadLabel {
idc = 209;
+ y = 0.49 * safezoneH + safezoneY;
+ };
+ class VehicleImmobileLabel: StdSquadLabel {
+ idc = 219;
+ y = 0.515 * safezoneH + safezoneY;
+ };
+ class IsPlayerLabel: StdSquadLabel {
+ idc = 218;
y = 0.55 * safezoneH + safezoneY;
};
class PiPZone {
diff --git a/Missionframework/ui/liberation_timeweather.hpp b/Missionframework/ui/liberation_timeweather.hpp
new file mode 100644
index 000000000..001773ada
--- /dev/null
+++ b/Missionframework/ui/liberation_timeweather.hpp
@@ -0,0 +1,120 @@
+class liberation_timeweather {
+ idd = 5756;
+ movingEnable = false;
+ controlsBackground[] = { "OuterBG", "RecycleBG", "OuterBG_F", "InnerBG", "InnerBG_F" };
+ controls[] = { "Header", "ButtonClose", "Infotext_line1", "Infotext_line2", "Infotext_line3", "Infotext_line4", "SkipButton", "FogButton", "CancelButton"};
+ objects[] = {};
+
+ class RecycleBG: BgPicture {
+ x = (0.35 * safezoneW + safezoneX) - ( 2 * BORDERSIZE);
+ y = (0.4 * safezoneH + safezoneY) - (3 * BORDERSIZE);
+ w = (0.3 * safezoneW) + (4 * BORDERSIZE);
+ h = (0.2 * safezoneH) + (6 * BORDERSIZE);
+ };
+ class OuterBG: StdBG {
+ colorBackground[] = COLOR_BROWN;
+ x = (0.35 * safezoneW + safezoneX) - ( 2 * BORDERSIZE);
+ y = (0.4 * safezoneH + safezoneY) - (3 * BORDERSIZE);
+ w = (0.3 * safezoneW) + (4 * BORDERSIZE);
+ h = (0.2 * safezoneH) + (6 * BORDERSIZE);
+ };
+ class OuterBG_F: OuterBG {
+ style = ST_FRAME;
+ };
+ class InnerBG: OuterBG {
+ colorBackground[] = COLOR_GREEN;
+ x = (0.35 * safezoneW + safezoneX) - ( BORDERSIZE);
+ y = 0.45 * safezoneH + safezoneY - (1.5 * BORDERSIZE);
+ w = (0.3 * safezoneW) + (2 * BORDERSIZE);
+ h = 0.15 * safezoneH + (3 * BORDERSIZE);
+ };
+ class InnerBG_F: InnerBG {
+ style = ST_FRAME;
+ };
+ class Header: StdHeader {
+ x = 0.35 * safezoneW + safezoneX - (BORDERSIZE);
+ y = 0.39 * safezoneH + safezoneY;
+ w = 0.3 * safezoneW + ( 2 * BORDERSIZE);
+ h = 0.05 * safezoneH - (BORDERSIZE);
+ text = $STR_FOB_TW_ACTION_TITLE;
+ };
+ class ButtonClose: StdButton {
+ idc = 101;
+ x = 0.632 * safezoneW + safezoneX;
+ w = 0.015 * safezoneW;
+ h = 0.02 * safezoneH;
+ y = 0.402 * safezoneH + safezoneY;
+ text = "X";
+ action = "closeDialog 0";
+ };
+ class Infotext_line1: StdText {
+ idc = -1;
+ style = ST_CENTER;
+ x = (0.35 * safezoneW + safezoneX);
+ w = (0.3 * safezoneW);
+ h = (0.03 * safezoneH);
+ y = (0.45 * safezoneH + safezoneY);
+ colorText[] = {0.9, 0.9, 0.9, 1};
+ text = $STR_FOB_TW_ACTION_INFO_1;
+ };
+ class Infotext_line2: StdText {
+ idc = -1;
+ style = ST_CENTER;
+ x = (0.35 * safezoneW + safezoneX);
+ w = (0.3 * safezoneW);
+ h = (0.03 * safezoneH);
+ y = (0.47 * safezoneH + safezoneY);
+ colorText[] = {0.9, 0.9, 0.9, 1};
+ text = $STR_FOB_TW_ACTION_INFO_2;
+ };
+ class Infotext_line3: StdText {
+ idc = -1;
+ style = ST_CENTER;
+ x = (0.35 * safezoneW + safezoneX);
+ w = (0.3 * safezoneW);
+ h = (0.03 * safezoneH);
+ y = (0.49 * safezoneH + safezoneY);
+ colorText[] = {0.9, 0.9, 0.9, 1};
+ text = $STR_FOB_TW_ACTION_INFO_3;
+ };
+ class Infotext_line4: StdText {
+ idc = -1;
+ style = ST_CENTER;
+ x = (0.35 * safezoneW + safezoneX);
+ w = (0.3 * safezoneW);
+ h = (0.03 * safezoneH);
+ y = (0.51 * safezoneH + safezoneY);
+ colorText[] = {0.9, 0.9, 0.9, 1};
+ text = $STR_FOB_TW_ACTION_INFO_4;
+ };
+ class SkipButton: StdButton {
+ idc = 120;
+ x = (0.38 * safezoneW + safezoneX) - (BORDERSIZE);
+ y = (0.55 * safezoneH + safezoneY);
+ w = (0.08 * safezoneW) - (BORDERSIZE);
+ h = (0.045 * safezoneH);
+ sizeEx = 0.023 * safezoneH;
+ text = $STR_FOB_TW_ACTION_TIMESKIP;
+ action = "KPLIB_control_TimeWeather = 1;";
+ };
+ class FogButton: StdButton {
+ idc = 120;
+ x = (0.46 * safezoneW + safezoneX);
+ y = (0.55 * safezoneH + safezoneY);
+ w = (0.08 * safezoneW) - (BORDERSIZE);
+ h = (0.045 * safezoneH);
+ sizeEx = 0.023 * safezoneH;
+ text = $STR_FOB_TW_ACTION_CLEARFOG;
+ action = "KPLIB_control_TimeWeather = 2;";
+ };
+ class CancelButton: StdButton {
+ idc = 121;
+ x = (0.54 * safezoneW + safezoneX) + (BORDERSIZE);
+ y = (0.55 * safezoneH + safezoneY);
+ w = (0.08 * safezoneW);
+ h = (0.045 * safezoneH);
+ sizeEx = 0.023 * safezoneH;
+ text = $STR_RECYCLING_CANCEL;
+ action = "closeDialog 0";
+ };
+};
diff --git a/Missionframework/ui/liberation_titles.hpp b/Missionframework/ui/liberation_titles.hpp
index dd30bbaf2..d488ad71f 100644
--- a/Missionframework/ui/liberation_titles.hpp
+++ b/Missionframework/ui/liberation_titles.hpp
@@ -1,6 +1,6 @@
class CfgSounds {
sounds[] = {};
- class parasound {
+ class parasound {
name = "parasound";
sound[] = {"res\c130.ogg", 1.0, 1};
titles[] = {};
@@ -28,7 +28,7 @@ class RscTitles {
w = 0.4 * safezoneW;
y = 0.65 * safezoneH + safezoneY;
h = 0.1 * safezoneH;
- text = "[GREUH] and the Killah Potatoes present";
+ text = $STR_MISSION_PRESENT;
shadow = 1;
};
class GenericLabelShadow: GenericLabel2 {
@@ -415,7 +415,7 @@ class RscTitles {
h = 0.03 * safezoneH;
colorText[] = {0.7, 0, 0, 1};
};
- class ActiveSectors {
+ class ActiveSectors {
idc = 516;
type = CT_STRUCTURED_TEXT;
colorBackground[] = COLOR_NOALPHA;
diff --git a/Missionframework/ui/mission_params.hpp b/Missionframework/ui/mission_params.hpp
index a6170d721..3226f16ef 100644
--- a/Missionframework/ui/mission_params.hpp
+++ b/Missionframework/ui/mission_params.hpp
@@ -257,6 +257,36 @@ class Params {
texts[] = {$STR_PARAMS_DISABLED, $STR_PARAMS_ENABLED};
default = 0;
};
+ class FOBFullHeal {
+ title = $STR_PARAMS_FOBFULLHEAL;
+ values[] = {0, 1};
+ texts[] = {$STR_PARAMS_DISABLED, $STR_PARAMS_ENABLED};
+ default = 1;
+ };
+ class FOBFullHealCheckEnemies {
+ title = $STR_PARAMS_FOBFULLHEAL_CHECKENEMIES;
+ values[] = {0, 1};
+ texts[] = {$STR_PARAMS_DISABLED, $STR_PARAMS_ENABLED};
+ default = 1;
+ };
+ class FOBFullHealCooldown {
+ title = $STR_PARAMS_FOBFULLHEAL_COOLDOWN;
+ values[] = {0, 60, 180, 300, 420, 600, 900};
+ texts[] = {$STR_PARAMS_DISABLED, 1, 3, 5, 7, 10, 15};
+ default = 300;
+ };
+ class FOBTimeWeather {
+ title = $STR_PARAMS_FOBTIMEWEATHER;
+ values[] = {0, 1};
+ texts[] = {$STR_PARAMS_DISABLED, $STR_PARAMS_ENABLED};
+ default = 1;
+ };
+ class FuelConsumption {
+ title = $STR_PARAMS_FUELCONSUMPTION;
+ values[] = {0, 1};
+ texts[] = {$STR_PARAMS_DISABLED, $STR_PARAMS_ENABLED};
+ default = 1;
+ };
class AiLogistics {
title = $STR_PARAMS_AILOGISTICS;
values[] = {0, 1};
diff --git a/README.md b/README.md
index 0dcb0a485..8965dac75 100644
--- a/README.md
+++ b/README.md
@@ -1,191 +1,20 @@
-
+# KP Liberation APR
+Apricot_ale's Fork of KP Liberation
-# KP Liberation for Arma 3
-
-[](https://github.com/KillahPotatoes/KP-Liberation/actions?query=workflow%3ACI)
[](https://github.com/KillahPotatoes/KP-Liberation/blob/master/LICENSE.md)
-[](https://github.com/KillahPotatoes/KP-Liberation/releases)
-[](https://github.com/KillahPotatoes/KP-Liberation/releases)
-
-[](https://github.com/KillahPotatoes/KP-Liberation)
-[](https://github.com/KillahPotatoes/KP-Liberation/stargazers)
-[](https://github.com/KillahPotatoes/KP-Liberation/issues)
-[](https://github.com/KillahPotatoes/KP-Liberation/issues?q=is%3Aissue+is%3Aclosed)
-
-[](https://github.com/KillahPotatoes/KP-Liberation/graphs/contributors)
-[](https://github.com/KillahPotatoes/KP-Liberation/network)
-[](https://github.com/KillahPotatoes/KP-Liberation/pulls)
-[](https://github.com/KillahPotatoes/KP-Liberation/pulls?q=is%3Apr+is%3Aclosed)
-
-[](https://discord.gg/Qk35Sw8)
-
-[BI Forum Thread](https://forums.bistudio.com/topic/202711-mpcti-coop-liberation-continued/)
-
-[Steam Workshop](http://steamcommunity.com/id/wyqer/myworkshopfiles/?appid=107410)
-
-This mission is only a continued project based on the original, but most likely abandoned, mission from [GreuhZbug](https://github.com/GreuhZbug).
-
-[Original Liberation mission v0.924](https://github.com/GreuhZbug/greuh_liberation.Altis)
-
-If you like the work and think it's worth a small donation, feel free to use the following link:
-
-[Donate via paypal.me](https://www.paypal.me/wyqer)
-## Overview
-The area has fallen to the enemy, and it is up to you to take it back. Embark on a persistent campaign with your teammates to liberate all the major cities of the area that will most likely span several weeks of real time.
-* Experience a massive “Capture the Island” campaign involving a large range of different settlements across the entire area.
-* Cooperate with up to 34 players, including a Commanding role, two fire-team squads, a medevac and a logistical support squad as well as AI recruits to fill the gaps.
-* Purchase both infantry and both ground and air vehicles using three different types of physical resources; supplies, ammunition and fuel.
-* Build the FOB of your dreams with an in-game "what you see is what you get" system.
-* Play within an immersive engine that not only punishes you for civilian casualty but diversely reacts in turn.
-* Combat aggressive and cunning hostile forces who react and adapt to your actions.
-* Monitor and work alongside, or against, independent guerrilla forces.
-* Learn that every window is a threat thanks to the custom urban combat AI.
-* Accomplish meaningful secondary objectives that will benefit your progression.
-* Never lose your progress with the built-in server-side save system.
+This fork is a uniquely modified version of [KP Liberation](https://github.com/KillahPotatoes/KP-Liberation), incorporating several pull requests (PRs) that have already been submitted.
-## Needed Mods
-These mods are needed if you want to use the prepackaged missionfiles from the release tab or Steam Workshop.
-You can play every map without any mods (only the maps themself) if you set the preset to custom in the file `kp_liberation_config`.
-* Al Rayak (pja310)
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [G.O.S Al Rayak](http://steamcommunity.com/sharedfiles/filedetails/?id=648172507)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
-* Altis
- * None
-* Chernarus
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [CUP Terrains - Maps](http://steamcommunity.com/sharedfiles/filedetails/?id=583544987)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
-* Chernarus Winter
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [CUP Terrains - Maps](http://steamcommunity.com/sharedfiles/filedetails/?id=583544987)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
-* Livonia
- * Contact DLC
-* Lythium
- * [Jbad](http://steamcommunity.com/sharedfiles/filedetails/?id=520618345)
- * [Lythium](http://steamcommunity.com/sharedfiles/filedetails/?id=909547724)
- * [Project OPFOR](http://steamcommunity.com/sharedfiles/filedetails/?id=735566597)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
-* Malden
- * None
-* Panthera
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [CUP Units](https://steamcommunity.com/sharedfiles/filedetails/?id=497661914)
- * [CUP Vehicles](https://steamcommunity.com/sharedfiles/filedetails/?id=541888371)
- * [CUP Weapons](https://steamcommunity.com/sharedfiles/filedetails/?id=497660133)
- * [Island Panthera](https://steamcommunity.com/sharedfiles/filedetails/?id=708278910)
-* Sahrani
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [CUP Terrains - Maps](http://steamcommunity.com/sharedfiles/filedetails/?id=583544987)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
-* Song Bin Tanh
- * [The Unsung Vietnam War Mod](https://steamcommunity.com/sharedfiles/filedetails/?id=943001311)
-* Takistan
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [CUP Terrains - Maps](http://steamcommunity.com/sharedfiles/filedetails/?id=583544987)
- * [Project OPFOR](http://steamcommunity.com/sharedfiles/filedetails/?id=735566597)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
-* Tanoa
- * Apex DLC
-* Taunus (very resource-intensive map)
- * [BWMod](http://steamcommunity.com/sharedfiles/filedetails/?id=1200127537)
- * [CBA A3](http://steamcommunity.com/sharedfiles/filedetails/?id=450814997)
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
- * [CUP Terrains - Maps](http://steamcommunity.com/sharedfiles/filedetails/?id=583544987)
- * [RHS: Armed Forces of the Russian Federation](http://steamcommunity.com/sharedfiles/filedetails/?id=843425103)
- * [RHS: United States Forces](http://steamcommunity.com/sharedfiles/filedetails/?id=843577117)
- * [X-Cam-Taunus (Version 1.1)](http://steamcommunity.com/sharedfiles/filedetails/?id=836147398)
-* Weferlingen
- * Global Mobilization CDLC
-* Weferlingen Winter
- * Global Mobilization CDLC
-* Yulakia
- * [Yulakia Map](https://steamcommunity.com/sharedfiles/filedetails/?id=2950257727)
- * [CUP Terrains - Core](http://steamcommunity.com/sharedfiles/filedetails/?id=583496184)
+### Required Add-ons
+- [CBA_A3](https://steamcommunity.com/sharedfiles/filedetails/?id=450814997)
-## Recommended Mods
-These mods are recommended by us, as they are likely to increase your gaming experience:
-* [ACE](https://steamcommunity.com/sharedfiles/filedetails/?id=463939057)
-* [ACE3 - BWMOD Compatibility](https://steamcommunity.com/sharedfiles/filedetails/?id=1200145989)
-* [ACRE 2](https://steamcommunity.com/sharedfiles/filedetails/?id=751965892)
-* [Advanced Urban Rappeling](https://steamcommunity.com/sharedfiles/filedetails/?id=730310357)
-* [CBA_A3](https://steamcommunity.com/sharedfiles/filedetails/?id=450814997)
-* [Discord Rich Presence](https://steamcommunity.com/sharedfiles/filedetails/?id=1493485159)
-* [DUI - Squad Radar](https://steamcommunity.com/sharedfiles/filedetails/?id=1638341685)
-* [Enhanced Movement](https://steamcommunity.com/sharedfiles/filedetails/?id=333310405)
-* [Immerse](https://steamcommunity.com/sharedfiles/filedetails/?id=825172265)
-* [JSRS SOUNDMOD](https://steamcommunity.com/sharedfiles/filedetails/?id=861133494)
-* [JSRS SOUNDMOD - RHS AFRF Mod Pack Sound Support](https://steamcommunity.com/sharedfiles/filedetails/?id=945476727)
-* [JSRS SOUNDMOD - RHS USAF Mod Pack Sound Support](https://steamcommunity.com/sharedfiles/filedetails/?id=1180533757)
-* [KP Ranks](https://steamcommunity.com/sharedfiles/filedetails/?id=741621641)
-* [Suppress](https://steamcommunity.com/sharedfiles/filedetails/?id=825174634)
-Also you should think about using these mods as serverside mods:
-* [Advanced Rappeling](http://steamcommunity.com/sharedfiles/filedetails/?id=713709341)
-* [Advanced Sling Loading](http://steamcommunity.com/sharedfiles/filedetails/?id=615007497)
-* [Advanced Towing](http://steamcommunity.com/sharedfiles/filedetails/?id=639837898)
+### About This Fork
+This project started as a fix for critical bugs and improvements needed in KP Liberation that had not been released since version 0.96.7a. Essentially, the internal version is v0.96.7a+ (currently, 0.96.8a+++). It is a compilation of elements from 0.96.8 that were in development and PRs that were not merged.
-## Recommended Difficulty Settings
-I recommend using the following difficulty settings for this mission (User profile of your server):
-```
-difficulty="Custom";
-class DifficultyPresets
-{
- class CustomDifficulty
- {
- class Options
- {
- groupIndicators=0;
- friendlyTags=0;
- enemyTags=0;
- detectedMines=0;
- commands=0;
- waypoints=0;
- weaponInfo=1;
- stanceIndicator=1;
- reducedDamage=0;
- staminaBar=0;
- weaponCrosshair=0;
- visionAid=0;
- thirdPersonView=0;
- cameraShake=1;
- scoreTable=0;
- deathMessages=0;
- vonID=1;
- mapContent=0;
- autoReport=0;
- multipleSaves=0;
- squadRadar=0;
- tacticalPing=0;
- };
- aiLevelPreset=3;
- };
- class CustomAILevel
- {
- skillAI=1.0;
- precisionAI=0.15;
- };
-};
-```
+While it may seem less advanced compared to Liberation RX and other variants, this fork primarily aims to improve KP Liberation without significantly altering the gameplay. After reviewing several other forks, some simple yet effective improvements have been included. This fork is designed to be a foundation for further modifications, ensuring no major changes are present.
-In the server config file:
-```
-forcedDifficulty = "custom";
+All licenses and rights of this fork comply with the original KP Liberation.
-class Missions
-{
- class kp_liberation
- {
- template = "kp_liberation.Altis";
- difficulty = "custom";
- };
-};
-```
+### Recommended Another Fork
+I personally recommend [Moist-Liberation-APR](https://github.com/moistbois/Moist-Liberation-APR), which includes more extensive elements in addition to this fork.
diff --git a/_tools/_presets.json b/_tools/_presets.json
index e6cb1bb1e..8798eec3f 100644
--- a/_tools/_presets.json
+++ b/_tools/_presets.json
@@ -13,6 +13,20 @@
},
"workshopId": "1578862234"
},
+ {
+ "sourceFolder": "kp_liberation.yulakia",
+ "missionName": "kp_liberation",
+ "map": "Yulakia",
+ "configFile": "KPLIB_config.sqf",
+ "variables": {
+ "KPLIB_preset_blufor": 0,
+ "KPLIB_preset_opfor": 0,
+ "KPLIB_preset_resistance": 0,
+ "KPLIB_preset_civilians": 0,
+ "KPLIB_arsenal": 0
+ },
+ "workshopId": ""
+ },
{
"sourceFolder": "kp_liberation.Chernarus",
"missionName": "kp_liberation",