From ed0877d2feaac766aa18494594775d93bbe63a3e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 26 Nov 2019 19:25:22 +0100 Subject: [PATCH 001/264] Remove spawn --- .../core/fnc/cache/hd_cache.sqf | 14 ++++++-------- .../core/fnc/ied/checkLoop.sqf | 2 +- .../core/fnc/info/ask.sqf | 4 ++-- .../core/fnc/info/has_intel.sqf | 2 +- .../core/fnc/lift/deployRopes.sqf | 2 +- .../core/fnc/mil/addWP.sqf | 4 ++-- .../core/fnc/rep/hd.sqf | 2 +- .../core/fnc/rep/killed.sqf | 2 +- 8 files changed, 15 insertions(+), 17 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf index 36db9199e..bf935923a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf @@ -46,14 +46,12 @@ if (isNil {_cache getVariable "btc_hd_cache"} && {_explosive} && {_damage > 0.6} //Effects private _pos = getPosATL btc_cache_obj; "Bo_GBU12_LGB_MI10" createVehicle _pos; - [_pos] spawn { - params ["_pos"]; - - sleep random [0.5, 2, 3]; - "M_PG_AT" createVehicle _pos; - sleep random [0.5, 2, 3]; - "M_Titan_AT" createVehicle _pos; - }; + [{ + "M_PG_AT" createVehicle _this; + [{ + "M_PG_AT" createVehicle _this; + }, _this, random [0.5, 2, 3]] call CBA_fnc_waitAndExecute; + }, _pos, random [0.5, 2, 3]] call CBA_fnc_waitAndExecute; [_pos] call btc_fnc_deaf_earringing; [attachedObjects _cache, btc_cache_obj, btc_cache_markers] call CBA_fnc_deleteEntity; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf index fdb142700..274cdcb9d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf @@ -41,7 +41,7 @@ Author: speed _x > 5 } }) then { - [_wreck, _ied] spawn btc_fnc_ied_boom; + [_wreck, _ied] call btc_fnc_ied_boom; }; } forEach (_ied nearEntities ["allvehicles", 10]); } else { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf index 666625c9c..f7de3fff8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf @@ -88,7 +88,7 @@ switch (_info_type) do { case "REAL" : { switch (_info) do { case "TROOPS" : { - [name _man, true] spawn btc_fnc_info_troops; + [name _man, true] call btc_fnc_info_troops; }; case "HIDEOUT" : { [name _man, true] spawn btc_fnc_info_hideout_asked; @@ -103,7 +103,7 @@ switch (_info_type) do { case "FAKE" : { switch (_info) do { case "TROOPS" : { - [name _man, false] spawn btc_fnc_info_troops; + [name _man, false] call btc_fnc_info_troops; }; case "HIDEOUT" : { [name _man, false] spawn btc_fnc_info_hideout_asked; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/has_intel.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/has_intel.sqf index cb4638224..9b61ceefb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/has_intel.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/has_intel.sqf @@ -33,7 +33,7 @@ if (btc_debug_log) then { if (_body getVariable ["intel", false] && !(_body getVariable ["btc_already_interrogated", false])) then { _body setVariable ["intel", false]; if (isServer) then { - [_asker] spawn btc_fnc_info_give_intel; + [_asker] call btc_fnc_info_give_intel; } else { [_asker] remoteExecCall ["btc_fnc_info_give_intel", 2]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/deployRopes.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/deployRopes.sqf index 0880665c9..fac66bebf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/deployRopes.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/deployRopes.sqf @@ -37,7 +37,7 @@ btc_lift_action_hud = player addAction ["" + (localize "STR btc_lift_hud = false; } else { btc_lift_hud = true; - [] spawn btc_fnc_lift_hud; + [] call btc_fnc_lift_hud; }; }, [], -8, false, false, "", "true"]; //"" + ("Hud On\Off") + "" btc_lift_action = player addAction ["" + (localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK") + "",{[] call btc_fnc_lift_hook}, [], 9, true, false, "", "[] call btc_fnc_lift_check"]; //"" + ("Hook") + "" diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf index 47ff13296..01c647e9d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf @@ -41,7 +41,7 @@ switch (true) do { private _houses = [_city, _area] call btc_fnc_getHouses; if !(_houses isEqualTo []) then { private _house = selectRandom _houses; - [_group, _house] spawn btc_fnc_house_addWP; + [_group, _house] call btc_fnc_house_addWP; _group setVariable ["btc_inHouse", typeOf _house]; } else { [_group, _rpos, _area, 2 + floor (random 4), "MOVE", "SAFE", "RED", ["LIMITED", "NORMAL"] select ((vehicle leader _group) isKindOf "Air"), "STAG COLUMN", "", [5, 10, 20]] call CBA_fnc_taskPatrol; @@ -51,7 +51,7 @@ switch (true) do { [_group, _rpos, _area, 2 + floor (random 4), "MOVE", "AWARE", "RED", ["LIMITED", "NORMAL"] select ((vehicle leader _group) isKindOf "Air"), "STAG COLUMN", "", [5, 10, 20]] call CBA_fnc_taskPatrol; }; case (_wp > _wp_sentry_probability) : { - [_group, _rpos, 0, "SENTRY", "AWARE", "RED", "UNCHANGED", "WEDGE", "(group this) spawn btc_fnc_data_add_group;", [18000, 36000, 54000]] call CBA_fnc_addWaypoint; + [_group, _rpos, 0, "SENTRY", "AWARE", "RED", "UNCHANGED", "WEDGE", "(group this) call btc_fnc_data_add_group;", [18000, 36000, 54000]] call CBA_fnc_addWaypoint; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 26d9dcc12..01beca868 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -40,7 +40,7 @@ if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_ste btc_rep_malus_civ_hd call btc_fnc_rep_change; - if (btc_global_reputation < 600) then {[getPos _unit] spawn btc_fnc_rep_eh_effects;}; + if (btc_global_reputation < 600) then {[getPos _unit] call btc_fnc_rep_eh_effects;}; if (btc_debug_log) then { [format ["REP HD = GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf index 3e109f7bf..12fe83ef6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf @@ -33,7 +33,7 @@ if (!isServer) exitWith { if (isPlayer _killer) then { btc_rep_malus_civ_killed call btc_fnc_rep_change; if (btc_global_reputation < 600) then { - [getPos _unit] spawn btc_fnc_rep_eh_effects; + [getPos _unit] call btc_fnc_rep_eh_effects; }; if (btc_debug_log) then { From 70558229df36011ebd9bea5bce21b9e4fa3cd20a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 27 Nov 2019 11:15:09 +0100 Subject: [PATCH 002/264] Migration to cbaWaitUntil --- .../core/fnc/data/spawn_group.sqf | 2 +- .../core/fnc/eh/veh_init.sqf | 12 +- .../core/fnc/fob/redeploy.sqf | 222 +++++++++--------- .../core/fnc/int/add_actions.sqf | 14 +- .../core/fnc/int/orders.sqf | 65 ++--- .../core/fnc/log/copy.sqf | 7 +- .../core/fnc/log/create_apply.sqf | 37 +-- .../core/fnc/log/dlg.hpp | 4 +- .../core/fnc/tow/unhook.sqf | 18 +- 9 files changed, 193 insertions(+), 188 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index acb041c35..554d2f31b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -116,7 +116,7 @@ if (_type isEqualTo 5) then { sleep 5; if !((getPos _suicider nearEntities ["SoldierWB", 25]) isEqualTo []) then { _cond = true; - _suicider spawn btc_fnc_ied_suicider_active + _suicider call btc_fnc_ied_suicider_active }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index 5e1278e2d..334da6378 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -34,9 +34,9 @@ switch true do { [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) spawn btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) spawn btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) spawn btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; }; case (_type isKindOf "LandVehicle") : { @@ -44,9 +44,9 @@ switch true do { [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) spawn btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) spawn btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) spawn btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; }; case (_type isKindOf "Helicopter") : { @@ -55,14 +55,14 @@ switch true do { //Lift _action = ["Deploy_ropes", localize "STR_ACE_Fastroping_Interaction_deployRopes", "\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa", {[] spawn btc_fnc_lift_deployRopes;}, {!btc_ropes_deployed && {(driver vehicle player) isEqualTo player} && {(getPosATL player) select 2 > 4}}] call ace_interact_menu_fnc_createAction; [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; - _action = ["Cut_ropes", localize "STR_ACE_Fastroping_Interaction_cutRopes", "\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa", {[] spawn btc_fnc_lift_destroyRopes;}, {btc_ropes_deployed && {(driver vehicle player) isEqualTo player}}] call ace_interact_menu_fnc_createAction; + _action = ["Cut_ropes", localize "STR_ACE_Fastroping_Interaction_cutRopes", "\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa", {[] call btc_fnc_lift_destroyRopes;}, {btc_ropes_deployed && {(driver vehicle player) isEqualTo player}}] call ace_interact_menu_fnc_createAction; [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; }; case (_type isKindOf "Ship") : { //Lift private _action = ["Deploy_ropes", localize "STR_ACE_Fastroping_Interaction_deployRopes", "\A3\Structures_F_Heli\VR\Helpers\Data\VR_Symbol_Heli_Slingloading_CA.paa", {[] spawn btc_fnc_lift_deployRopes;}, {!btc_ropes_deployed && {(driver vehicle player) isEqualTo player}}] call ace_interact_menu_fnc_createAction; [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; - _action = ["Cut_ropes", localize "STR_ACE_Fastroping_Interaction_cutRopes", "\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa", {[] spawn btc_fnc_lift_destroyRopes;}, {btc_ropes_deployed && {(driver vehicle player) isEqualTo player}}] call ace_interact_menu_fnc_createAction; + _action = ["Cut_ropes", localize "STR_ACE_Fastroping_Interaction_cutRopes", "\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa", {[] call btc_fnc_lift_destroyRopes;}, {btc_ropes_deployed && {(driver vehicle player) isEqualTo player}}] call ace_interact_menu_fnc_createAction; [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index 62dfb497b..194f2545f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -22,121 +22,121 @@ Author: btc_int_ask_data = nil; ["btc_fobs"] remoteExecCall ["btc_fnc_int_ask_var", 2]; -waitUntil {!(isNil "btc_int_ask_data")}; - -private _fobs_marker = []; -private _fobs_markerText = []; -private _fobs_structure = []; -private _fobs_texts = []; -{ - private _structure = (btc_int_ask_data select 1) select _forEachIndex; - if ((_x in allMapMarkers) || !(isNull _structure) && (_structure inArea [_structure getVariable ["btc_fob_rallypointPos", [0, 0]], 1, 1, 0, false])) then { - _fobs_marker pushBack _x; - _fobs_markerText pushBack (if (_x in allMapMarkers) then { - markerText _x; - } else { - getText (configfile >> "CfgVehicles" >> typeOf _structure >> "displayName") - }); - _fobs_structure pushBack _structure; +[{!(isNil "btc_int_ask_data")}, { + private _fobs_marker = []; + private _fobs_markerText = []; + private _fobs_structure = []; + private _fobs_texts = []; + { + private _structure = (btc_int_ask_data select 1) select _forEachIndex; + if ((_x in allMapMarkers) || !(isNull _structure) && (_structure inArea [_structure getVariable ["btc_fob_rallypointPos", [0, 0]], 1, 1, 0, false])) then { + _fobs_marker pushBack _x; + _fobs_markerText pushBack (if (_x in allMapMarkers) then { + markerText _x; + } else { + getText (configfile >> "CfgVehicles" >> typeOf _structure >> "displayName") + }); + _fobs_structure pushBack _structure; + + private _fobs_ticket = _structure getVariable ["btc_tickets", -1]; + _fobs_texts pushBack (if (_fobs_ticket isEqualTo -1) then { + format [localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_MOVING", markerText _x] + } else { + format [localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_MOVING" + "
%2: " + localize "str_a3_rscdisplaycampaignlobby_respawn_tooltip", markerText _x, _fobs_ticket] + }); + }; + } forEach (btc_int_ask_data select 0); - private _fobs_ticket = _structure getVariable ["btc_tickets", -1]; - _fobs_texts pushBack (if (_fobs_ticket isEqualTo -1) then { - format [localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_MOVING", markerText _x] - } else { - format [localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_MOVING" + "
%2: " + localize "str_a3_rscdisplaycampaignlobby_respawn_tooltip", markerText _x, _fobs_ticket] - }); + if (_fobs_marker isEqualTo []) exitWith { + (localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_NOFOB") call CBA_fnc_notify; }; -} forEach (btc_int_ask_data select 0); - -if (_fobs_marker isEqualTo []) exitWith { - (localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_NOFOB") call CBA_fnc_notify; -}; - -private _respawn_positions = _fobs_structure apply { - private _positions = _x buildingPos -1; - if (_positions isEqualTo []) then { - _x modelToWorld [0, 1.5, 0] - } else { - selectRandom (_positions select {_x select 2 < 1}) - }; -}; - -private _EHid = ["btc_respawn", { - _this params ["_pos", "_structure"]; - if (surfaceIsWater _pos) then { - player setPosASL _pos; - } else { - player setPosATL _pos; + private _respawn_positions = _fobs_structure apply { + private _positions = _x buildingPos -1; + if (_positions isEqualTo []) then { + _x modelToWorld [0, 1.5, 0] + } else { + selectRandom (_positions select {_x select 2 < 1}) + }; }; - private _ticket = _structure getVariable ["btc_tickets", -1]; - if !(_ticket isEqualTo -1) then { - _ticket = _ticket - 1; - if (_ticket <= 0) then { - [_structure, objNull, objNull, true, true] remoteExecCall ["btc_fnc_fob_killed", 2]; + private _EHid = ["btc_respawn", { + _this params ["_pos", "_structure"]; + + if (surfaceIsWater _pos) then { + player setPosASL _pos; } else { - _structure setVariable ["btc_tickets", _ticket, true]; + player setPosATL _pos; }; - }; -}] call CBA_fnc_addEventHandler; - -private _missionsData = []; -{ - _missionsData pushBack [ - position _x, - {["btc_respawn", _this select 9] call CBA_fnc_localEvent;}, - _fobs_markerText select _forEachIndex, - _fobs_texts select _forEachIndex, - "", - getText (configfile >> "CfgVehicles" >> typeOf _x >> "editorPreview"), - 1, - [_respawn_positions select _forEachIndex, _x] - ] -} forEach _fobs_structure; - -disableserialization; -(date call BIS_fnc_sunriseSunsetTime) params ["_sunrise", "_sunset"]; - -private _parentDisplay = [] call bis_fnc_displayMission; -private _mapCenter = getMarkerPos btc_respawn_marker; -private _ORBAT = []; -private _markers = []; -private _images = []; -private _overcast = overcast; -private _isNight = !((_sunrise < dayTime) && (_sunset > dayTime)); -private _scale = 1; -private _simul = true; - -{ - _x setMarkerAlphaLocal 0; -} forEach _fobs_marker; - -private _display = [ - _parentDisplay, - _mapCenter, - _missionsData, - _ORBAT, - _markers, - _images, - _overcast, - _isNight, - _scale, - _simul, - localize "$STR_BTC_HAM_O_FOB_REDEPLOY_LABEL", - true -] call btc_fnc_strategicMapOpen; - -_display displayaddeventhandler [ - "unload", - format [ - " - { - _x setMarkerAlphaLocal 1; - } forEach %1; - ['btc_respawn', %2] call CBA_fnc_removeEventHandler; - ", - _fobs_marker, - _EHid - ] -]; + + private _ticket = _structure getVariable ["btc_tickets", -1]; + if !(_ticket isEqualTo -1) then { + _ticket = _ticket - 1; + if (_ticket <= 0) then { + [_structure, objNull, objNull, true, true] remoteExecCall ["btc_fnc_fob_killed", 2]; + } else { + _structure setVariable ["btc_tickets", _ticket, true]; + }; + }; + }] call CBA_fnc_addEventHandler; + + private _missionsData = []; + { + _missionsData pushBack [ + position _x, + {["btc_respawn", _this select 9] call CBA_fnc_localEvent;}, + _fobs_markerText select _forEachIndex, + _fobs_texts select _forEachIndex, + "", + getText (configfile >> "CfgVehicles" >> typeOf _x >> "editorPreview"), + 1, + [_respawn_positions select _forEachIndex, _x] + ] + } forEach _fobs_structure; + + disableserialization; + (date call BIS_fnc_sunriseSunsetTime) params ["_sunrise", "_sunset"]; + + private _parentDisplay = [] call bis_fnc_displayMission; + private _mapCenter = getMarkerPos btc_respawn_marker; + private _ORBAT = []; + private _markers = []; + private _images = []; + private _overcast = overcast; + private _isNight = !((_sunrise < dayTime) && (_sunset > dayTime)); + private _scale = 1; + private _simul = true; + + { + _x setMarkerAlphaLocal 0; + } forEach _fobs_marker; + + private _display = [ + _parentDisplay, + _mapCenter, + _missionsData, + _ORBAT, + _markers, + _images, + _overcast, + _isNight, + _scale, + _simul, + localize "$STR_BTC_HAM_O_FOB_REDEPLOY_LABEL", + true + ] call btc_fnc_strategicMapOpen; + + _display displayaddeventhandler [ + "unload", + format [ + " + { + _x setMarkerAlphaLocal 1; + } forEach %1; + ['btc_respawn', %2] call CBA_fnc_removeEventHandler; + ", + _fobs_marker, + _EHid + ] + ]; +}] call CBA_fnc_waitUntilAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 1a9f0b6c8..7c73d5edf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -30,7 +30,7 @@ _action = ["request_delete", localize "STR_3DEN_Delete", "\A3\ui_f\data\igui\cfg [player, 1, ["ACE_SelfActions", "Database"], _action] call ace_interact_menu_fnc_addActionToObject; //Intel -_action = ["Search_intel", localize "STR_A3_Showcase_Marksman_BIS_tskIntel_title", "\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa", {(_this select 0) spawn btc_fnc_info_search_for_intel;}, {!alive (_this select 0)}] call ace_interact_menu_fnc_createAction; +_action = ["Search_intel", localize "STR_A3_Showcase_Marksman_BIS_tskIntel_title", "\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa", {(_this select 0) call btc_fnc_info_search_for_intel;}, {!alive (_this select 0)}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); _action = ["Interrogate_intel", localize "STR_BTC_HAM_ACTION_INTEL_INTERROGATE", "\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa", {[(_this select 0),true] spawn btc_fnc_info_ask;}, {alive (_this select 0) && {[_this select 0] call ace_common_fnc_isAwake} && captive (_this select 0)}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); @@ -40,23 +40,23 @@ _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\ig [btc_create_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["Require_object", localize "STR_BTC_HAM_ACTION_LOGPOINT_REQOBJ", "\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa", {[btc_create_object_point] spawn btc_fnc_log_create}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Repair_wreck", localize "STR_BTC_HAM_ACTION_LOGPOINT_REPWRECK", "\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa", {[btc_create_object_point] spawn btc_fnc_log_repair_wreck}, {true}, {}, [], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; +_action = ["Repair_wreck", localize "STR_BTC_HAM_ACTION_LOGPOINT_REPWRECK", "\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa", {[btc_create_object_point] call btc_fnc_log_repair_wreck}, {true}, {}, [], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["Require_veh", localize "STR_BTC_HAM_ACTION_LOGPOINT_REQVEH", "\A3\ui_f\data\map\vehicleicons\iconCar_ca.paa", {[btc_create_object_point] spawn btc_fnc_arsenal_garage}, {(serverCommandAvailable "#logout" || !isMultiplayer) and btc_p_garage}, {}, [], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["Tool", localize "str_3den_display3den_menubar_tools_text", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\T_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Copy", localize "STR_BTC_HAM_ACTION_COPYPASTE_COPY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", {[btc_create_object_point] spawn btc_fnc_log_copy}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["Copy", localize "STR_BTC_HAM_ACTION_COPYPASTE_COPY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", {[btc_create_object_point] call btc_fnc_log_copy}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions", "Tool"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["Paste", localize "STR_BTC_HAM_ACTION_COPYPASTE_PASTE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\upload_ca.paa", {[btc_copy_container, btc_create_object_point] call btc_fnc_log_paste}, {!isNil "btc_copy_container"}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions", "Tool"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Require_delete", localize "STR_3DEN_Delete", "\z\ace\addons\arsenal\data\iconClearContainer.paa", {[btc_create_object_point] spawn btc_fnc_log_delete}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["Require_delete", localize "STR_3DEN_Delete", "\z\ace\addons\arsenal\data\iconClearContainer.paa", {[btc_create_object_point] call btc_fnc_log_delete}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; //Logistic _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach btc_log_def_loadable; -_action = ["Place", localize "STR_ACE_Dragging_Carry", "\z\ace\addons\dragging\UI\icons\box_carry.paa", {(_this select 0) spawn btc_fnc_log_place}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; +_action = ["Place", localize "STR_ACE_Dragging_Carry", "\z\ace\addons\dragging\UI\icons\box_carry.paa", {(_this select 0) call btc_fnc_log_place}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach btc_log_def_placeable; //Shower @@ -89,7 +89,7 @@ _action = ["Civil_Go_away", localize "STR_BTC_HAM_ACTION_ORDERS_GOAWAY", "\A3\ui { //Actions attachted to AI _action = ["Civil_Orders", localize "STR_BTC_HAM_ACTION_ORDERS_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Civil_taxi", localize "STR_BTC_HAM_ACTION_ORDERS_TAXI", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk4_ca.paa", {[4, (_this select 0)] spawn btc_fnc_int_orders;}, {(alive (_this select 0)) && !((vehicle (_this select 0)) isEqualTo (_this select 0))}] call ace_interact_menu_fnc_createAction; + _action = ["Civil_taxi", localize "STR_BTC_HAM_ACTION_ORDERS_TAXI", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk4_ca.paa", {[4, (_this select 0)] call btc_fnc_int_orders;}, {(alive (_this select 0)) && !((vehicle (_this select 0)) isEqualTo (_this select 0))}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions", "Civil_Orders"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["Civil_Stop", localize "STR_BTC_HAM_ACTION_ORDERS_STOP", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk3_ca.paa", {[1, (_this select 0)] call btc_fnc_int_orders;}, {alive (_this select 0)}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions", "Civil_Orders"], _action] call ace_interact_menu_fnc_addActionToClass; @@ -125,7 +125,7 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] spawn btc_fnc_fob_redeploy}, {btc_p_redeploy}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy}, {btc_p_redeploy}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders.sqf index 7e372801d..4570efe62 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders.sqf @@ -44,40 +44,41 @@ if (isNull _unit) then { btc_int_ask_data = nil; ["btc_global_reputation"] remoteExecCall ["btc_fnc_int_ask_var", 2]; - waitUntil {!(isNil "btc_int_ask_data")}; - private _rep = btc_int_ask_data; - - if (_rep >= 500) then { - [name _unit, localize "STR_BTC_HAM_CON_INT_ORDERS_SHOWMAP"] call btc_fnc_showSubtitle; - openMap true; - ["1", "onMapSingleClick", { - if (surfaceIsWater _pos) then { - [name (_this select 4), localize "STR_BTC_HAM_CON_INT_ORDERS_ONLAND"] call btc_fnc_showSubtitle; - } else { - [[_this select 4], 0, 4, _pos] remoteExecCall ["btc_fnc_int_orders_give", _this select 4]; - ["1", "onMapSingleClick"] call BIS_fnc_removeStackedEventHandler; - openMap false; - private _textMap = selectRandom [ - localize "STR_BTC_HAM_CON_INT_ORDERS_TAXI_OK1", - localize "STR_BTC_HAM_CON_INT_ORDERS_TAXI_OK2", - localize "STR_BTC_HAM_CON_INT_ORDERS_TAXI_OK3" - ]; - [name (_this select 4), _textMap] call btc_fnc_showSubtitle; + [{!(isNil "btc_int_ask_data")}, { + private _rep = btc_int_ask_data; + + if (_rep >= 500) then { + [name _unit, localize "STR_BTC_HAM_CON_INT_ORDERS_SHOWMAP"] call btc_fnc_showSubtitle; + openMap true; + ["1", "onMapSingleClick", { + if (surfaceIsWater _pos) then { + [name (_this select 4), localize "STR_BTC_HAM_CON_INT_ORDERS_ONLAND"] call btc_fnc_showSubtitle; + } else { + [[_this select 4], 0, 4, _pos] remoteExecCall ["btc_fnc_int_orders_give", _this select 4]; + ["1", "onMapSingleClick"] call BIS_fnc_removeStackedEventHandler; + openMap false; + private _textMap = selectRandom [ + localize "STR_BTC_HAM_CON_INT_ORDERS_TAXI_OK1", + localize "STR_BTC_HAM_CON_INT_ORDERS_TAXI_OK2", + localize "STR_BTC_HAM_CON_INT_ORDERS_TAXI_OK3" + ]; + [name (_this select 4), _textMap] call btc_fnc_showSubtitle; + }; + }, [_unit]] call BIS_fnc_addStackedEventHandler; + } else { + if !(player getVariable ["interpreter", false]) exitWith { + [name _unit, localize "STR_BTC_HAM_CON_INFO_ASKREP_NOINTER"] call btc_fnc_showSubtitle; }; - }, [_unit]] call BIS_fnc_addStackedEventHandler; - } else { - if !(player getVariable ["interpreter", false]) exitWith { - [name _unit, localize "STR_BTC_HAM_CON_INFO_ASKREP_NOINTER"] call btc_fnc_showSubtitle; - }; - private _text = selectRandom [ - localize "STR_BTC_HAM_CON_INT_ORDERS_NEG1", - localize "STR_BTC_HAM_CON_INT_ORDERS_NEG2", - localize "STR_BTC_HAM_CON_INT_ORDERS_NEG3", - localize "STR_BTC_HAM_CON_INT_ORDERS_NEG4" - ]; - [name _unit, _text] call btc_fnc_showSubtitle; - }; + private _text = selectRandom [ + localize "STR_BTC_HAM_CON_INT_ORDERS_NEG1", + localize "STR_BTC_HAM_CON_INT_ORDERS_NEG2", + localize "STR_BTC_HAM_CON_INT_ORDERS_NEG3", + localize "STR_BTC_HAM_CON_INT_ORDERS_NEG4" + ]; + [name _unit, _text] call btc_fnc_showSubtitle; + }; + }, [_unit, _pos]] call CBA_fnc_waitUntilAndExecute; } else { [[_unit], _dir, _order] remoteExecCall ["btc_fnc_int_orders_give", _unit]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/copy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/copy.sqf index 2afb4e2d8..6df1fc4f8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/copy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/copy.sqf @@ -32,8 +32,9 @@ if (_objects isEqualTo []) exitWith {(localize "STR_BTC_HAM_O_COPY_NOCONTAINER") btc_int_ask_data = nil; [9, _objects select 0] remoteExecCall ["btc_fnc_int_ask_var", 2]; -waitUntil {!(isNil "btc_int_ask_data")}; -btc_copy_container = +btc_int_ask_data; +[{!(isNil "btc_int_ask_data")}, { + btc_copy_container = +btc_int_ask_data; -(localize "STR_BTC_HAM_O_COPY_SUCCSESS") call CBA_fnc_notify; + (localize "STR_BTC_HAM_O_COPY_SUCCSESS") call CBA_fnc_notify; +}] call CBA_fnc_waitUntilAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf index cc2318c62..88fe27394 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf @@ -21,20 +21,23 @@ Author: private _class = lbData [72, lbCurSel 72]; closeDialog 0; -sleep 0.2; - -if (_class isEqualTo btc_supplies_cargo) then { - btc_supplies_mat params ["_food", "_water"]; - private _position_world = getPosWorld btc_create_object_point; - _position_world params ["_xx", "_yy", "_zz"]; - [[ - btc_supplies_cargo, - [_xx, _yy, _zz + 1.5], getDir btc_create_object_point, - "", - [selectRandom _food, selectRandom _water] apply {[_x, "", [[[], []], [[], []], [[], []]]]}, - [[[], []], [[], []], [[], []]], - [vectorDir btc_create_object_point, vectorUp btc_create_object_point] - ]] remoteExecCall ["btc_fnc_db_loadObjectStatus", 2]; -} else { - [_class] remoteExecCall ["btc_fnc_log_create_s", 2]; -}; + +[{ + params ["_class", "", [""]]; + + if (_class isEqualTo btc_supplies_cargo) then { + btc_supplies_mat params ["_food", "_water"]; + private _position_world = getPosWorld btc_create_object_point; + _position_world params ["_xx", "_yy", "_zz"]; + [[ + btc_supplies_cargo, + [_xx, _yy, _zz + 1.5], getDir btc_create_object_point, + "", + [selectRandom _food, selectRandom _water] apply {[_x, "", [[[], []], [[], []], [[], []]]]}, + [[[], []], [[], []], [[], []]], + [vectorDir btc_create_object_point, vectorUp btc_create_object_point] + ]] remoteExecCall ["btc_fnc_db_loadObjectStatus", 2]; + } else { + [_class] remoteExecCall ["btc_fnc_log_create_s", 2]; + }; +}, 0.2, _class] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp index e7ff8eb72..c82267511 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp @@ -8,7 +8,7 @@ class btc_log_dlg_create { class btc_log_dlg_Apply : btc_dlg_button { idc = -1; text = $STR_ui_debug_but_apply; //Apply - action = "[] spawn btc_fnc_log_create_apply"; + action = "[] call btc_fnc_log_create_apply"; x = 0 * safezoneW + safezoneX; y = 0.25 * safezoneH + safezoneY; default = true; @@ -23,7 +23,7 @@ class btc_log_dlg_create { }; class btc_log_dlg_main_class : btc_dlg_comboBox { idc = 71; - onLBSelChanged = "[] spawn btc_fnc_log_create_change_target"; + onLBSelChanged = "[] call btc_fnc_log_create_change_target"; x = 0 * safezoneW + safezoneX; y = 0 * safezoneH + safezoneY; w = 0.4 * safezoneW; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf index cc9c1f0c2..865945851 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf @@ -12,7 +12,7 @@ Returns: Examples: (begin example) - [cursorObject] spawn btc_fnc_tow_unhook; + [cursorObject] call btc_fnc_tow_unhook; (end) Author: @@ -27,13 +27,13 @@ params [ btc_int_ask_data = nil; [4, _veh] remoteExecCall ["btc_fnc_int_ask_var", 2]; -waitUntil {!(isNil "btc_int_ask_data")}; +[{!(isNil "btc_int_ask_data")}, { + if (isNull btc_int_ask_data) exitWith {(localize "STR_BTC_HAM_LOG_UNHOOK_NOROPE") call CBA_fnc_notify;}; -if (isNull btc_int_ask_data) exitWith {(localize "STR_BTC_HAM_LOG_UNHOOK_NOROPE") call CBA_fnc_notify;}; + private _ropes = ropes _this; + if (_ropes isEqualTo []) then { + _ropes = ropes btc_int_ask_data; + }; -private _ropes = ropes _veh; -if (_ropes isEqualTo []) then { - _ropes = ropes btc_int_ask_data; -}; - -_ropes apply {ropeDestroy _x}; + _ropes apply {ropeDestroy _x}; +}, _veh] call CBA_fnc_waitUntilAndExecute; From 42483ae4c97e44aea9f1ff3a5284b2f74f9ceaad Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 29 Nov 2019 20:58:00 +0100 Subject: [PATCH 003/264] Remove some useless doc entry --- .../core/doc.sqf | 12 ---- .../stringtable.xml | 57 ------------------- docs/InGame-documentation.md | 16 ------ 3 files changed, 85 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf index eba8fa883..4f11b2fad 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf @@ -4,12 +4,6 @@ player createDiarySubject [_MainCategory, _MainCategory]; //Headless and Data base player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_HEADLESS_TITLE", localize "STR_BTC_HAM_DOC_HEADLESS_TEXT"]]; -//Wounds -player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_WOUNDS_TITLE", localize "STR_BTC_HAM_DOC_WOUNDS_TEXT"]]; - -//Deafness -player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_DEAFNESS_TITLE", localize "STR_BTC_HAM_DOC_DEAFNESS_TEXT"]]; - //Chemical warfare player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_CHEMICALWARFARE_TITLE", localize "STR_BTC_HAM_DOC_CHEMICALWARFARE_TEXT"]]; @@ -49,12 +43,6 @@ player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_ACTION_ORDERS_MA //Traffic player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_TRAFFIC_TITLE", localize "STR_BTC_HAM_DOC_TRAFFIC_TEXT"]]; -//Gear -player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_GEAR_TITLE", localize "STR_BTC_HAM_DOC_GEAR_TEXT"]]; - -//Interaction -player createDiaryRecord [_MainCategory, [localize "STR_ACE_Interaction_DisplayName", localize "STR_BTC_HAM_DOC_INTERACTION_TEXT"]]; - //Version player createDiaryRecord [_MainCategory, [localize "STR_A3_FM_Welcome4", format [" Version %1.9 ", btc_version] diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index bf8316c9f..cc12bbe62 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -85,38 +85,6 @@ <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> 最多一台无头客户端将被任务自动使用。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> 本任务内置独立的数据库系统, 用于存储以下项目: 敌方单位、城市、藏匿点、武器箱、车辆、玩家或宙斯创建的对象以及公共频道中的地图标记(不含划线标记)。每个管理员都可以通过自我互动菜单随时保存任务进度。 - - - Wounds - Heridas - Wunden - Ferimentos - 伤口 - - - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\heal_ca.paa' width='20' height='20'/> Use the interaction menu to treat your wounds.<br/> Keep in mind that all the actions will be available, even if you do not need them. It is always recommended examine first. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\heal_ca.paa' width='20' height='20'/> Use the interaction menu to treat your wounds.<br/> Keep in mind that all the actions will be available, even if you do not need them. It is always recommended examine first. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\heal_ca.paa' width='20' height='20'/> Mit Hilfe des Interactionsmenü können Sie ihre und die Wunden anderer versorgen.<br/> Denken Sie daran, dass Sie immer den vollen Zugriff auf alle Aktionen haben, egal ob Sie diese benötigen oder nicht. In jedem Fall wird empfohlen zuerst eine Diagnose zu erstellen, bevor man mit der Behandlung beginnt. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\heal_ca.paa' width='20' height='20'/> Use o menu de interação para tratar suas feridas.<br/> Tenha em mente que todas as ações estarão disponíveis, mesmo que você não precise delas. É sempre recomendável examinar primeiro. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\heal_ca.paa' width='20' height='20'/> 使用互动菜单处理你的伤口。<br/> 请谨记: 无论您是否需要进行治疗, 这些操作始终可用。始终建议您在开始治疗前先进行诊断。 - - - - - Deafness - Sordera de Combate - Taubheit - Surdez - 耳鸣 - - - <img image='\z\ace\addons\hearing\UI\Icon_Module_Hearing_ca.paa' width='20' height='20'/> Use the earplugs to protect your ears to avoid combat deafness.<br/> You can put them on with your self interaction key.<br/><br/> - <img image='\z\ace\addons\hearing\UI\Icon_Module_Hearing_ca.paa' width='20' height='20'/> Utilice los tapones para proteger sus oídos para evitar la sordera de combate.<br/> You can put them on with your self interaction key.<br/><br/> - <img image='\z\ace\addons\hearing\UI\Icon_Module_Hearing_ca.paa' width='20' height='20'/> Nutzen Sie die Ohrstöpsel um sich vor Taubheit und Hörverlust zu schützen.<br/> Über das Eigen-Interaktionsmenü können Sie die Ohrstöpsel nutzen (sofern sich welche in Ihrem Inventar befinden).<br/><br/> - <img image='\z\ace\addons\hearing\UI\Icon_Module_Hearing_ca.paa' width='20' height='20'/> Use os tampões de ouvido para proteger seus ouvidos para evitar a surdez no combate.<br/> Você pode colocá-los com seu botão de interação.<br/><br/> - <img image='\z\ace\addons\hearing\UI\Icon_Module_Hearing_ca.paa' width='20' height='20'/> 在战斗中, 使用耳塞保护自己免受听力损失。<br/> 你可以使用自我互动菜单佩戴耳塞(前提是你在随身装备中携带了耳塞)。<br/><br/> - - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> When a vehicle is destroyed it will not respawn in base, you need to tow or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. <br/> The Chinook is the only exception, it will respawn after 30 seconds. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> You can also rearm them by spawning the corresponding caliber at logistic point (Interact with the red box, select the vehicle type and caliber). Carry the ammo created and interact with the vehicle to rearm. This only works if rearming is setting on entire magazine or amount based on caliber (not for entire vehicle setting). @@ -249,31 +217,6 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> 平民会在城市间开车穿梭。如果你的声誉够高, 平民会乐意载你一程(用地图指出你要去的地方)。如果你在途中遭遇了Oplitas巡逻队, 不要担心, 平民会尽其所能地把你藏在车里。<br/> - - - Gear (Arsenal) - Equipamiento (Arsenal) - Ausrüstung (Arsenal) - Equipamento (Arsenal) - 装备(军火库) - - - <img image='\A3\Ui_f\data\Logos\a_64_ca.paa' width='20' height='20'/>You can choose your gear at the red box inside the base. Located at the spawn point.<br/> - <img image='\A3\Ui_f\data\Logos\a_64_ca.paa' width='20' height='20'/>Puedes elegir tu equipo en las cajas dentro de la base. Ubicado en el punto de respawn.<br/> - <img image='\A3\Ui_f\data\Logos\a_64_ca.paa' width='20' height='20'/>Sie können ihre Ausrüstung jederzeit an der roten Box in der Basis anpassen. Diese steht in der Nähe des Startpunktes<br/> - <img image='\A3\Ui_f\data\Logos\a_64_ca.paa' width='20' height='20'/>Você pode configurar seu equipamento na caixa vermelha dentro da BASE. Geralmente fica localizado próximo ao porto de nascimento (respawn).<br/> - <img image='\A3\Ui_f\data\Logos\a_64_ca.paa' width='20' height='20'/>你可以在基地内的红色箱子处选择装备, 它位于重生点附近。<br/> - - - - - <img image='\z\ace\addons\interaction\UI\Icon_Module_Interaction_ca.paa' width='20' height='20'/>Use ACE 3 interactions system. - <img image='\z\ace\addons\interaction\UI\Icon_Module_Interaction_ca.paa' width='20' height='20'/>Use los sistema de interaccion de ACE 3. - <img image='\z\ace\addons\interaction\UI\Icon_Module_Interaction_ca.paa' width='20' height='20'/>Nutzen Sie das Interactions-System von ACE 3. - <img image='\z\ace\addons\interaction\UI\Icon_Module_Interaction_ca.paa' width='20' height='20'/>Use o sistema de interação do ACE 3. - <img image='\z\ace\addons\interaction\UI\Icon_Module_Interaction_ca.paa' width='20' height='20'/>使用 ACE 3 互动系统。 - - Chemical Warfare diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index b29582723..739550085 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -6,14 +6,6 @@ This mission automatically uses one Headless client when available. This mission has a database system. Enemy units, towns, hideouts, cache, objects created by players or Zeus, vehicles, players markers (not lines) on global/camp channel are saved. All admin can save mission progress at any time with his self interaction key. -## Wounds -Use the interaction menu to treat your wounds. Keep in mind that all the actions will be available, even if you do not need them. It is always recommended examine first. - - -## Deafness -Use the earplugs to protect your ears to avoid combat deafness. You can put them on with your self interaction key. - - ## Chemical Warfare ### Chemical agent: A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. @@ -125,11 +117,3 @@ You can also drop leaflets to ask all civilians in a circle of 200m to evacuate ## Traffic Civilians are travelling by vehicle across cities. If your reputation is higher than normal, you can ask for a lift to a location chosen on the map. If you bump into a Oplitas patrol, don't worry, the civilian driver will do their best to hide you in the car. - - -## Gear -You can choose your gear at the red box inside the base. Located at the spawn point. - - -## Interaction -Use ACE 3 interactions system. \ No newline at end of file From ef17b825ee558cd03ff5da840d7e15b5722233a3 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 3 Dec 2019 11:50:43 +0100 Subject: [PATCH 004/264] Use new command `getMissionPath` --- .../core/fnc/ied/allahu_akbar.sqf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/allahu_akbar.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/allahu_akbar.sqf index 3950dc229..a00a46dc6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/allahu_akbar.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/allahu_akbar.sqf @@ -26,10 +26,8 @@ params [ private _suicider = _trigger getVariable "suicider"; -private _soundPath = [str missionConfigFile, 0, -15] call BIS_fnc_trimString; -private _soundToPlay = _soundPath + "core\sounds\allahu_akbar.ogg"; if (alive _suicider && [_suicider] call ace_common_fnc_isAwake) then { - playSound3d [_soundToPlay, _suicider, false, getPosASL _suicider, 5, random [0.9, 1, 1.2], 100]; + playSound3d [getMissionPath "core\sounds\allahu_akbar.ogg", _suicider, false, getPosASL _suicider, 5, random [0.9, 1, 1.2], 100]; }; [{ From 6c0d5f57520c54ac585e9f7dca34b38421f8c66e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 7 Dec 2019 02:44:09 +0100 Subject: [PATCH 005/264] Remove some fnc for curator by dedicated fnc --- .../core/fnc/civ/CuratorCivPlaced_s.sqf | 31 ------------------- .../core/fnc/compile.sqf | 3 -- .../core/fnc/eh/CuratorObjectPlaced.sqf | 6 ++-- .../core/fnc/log/CuratorObjectPlaced_s.sqf | 31 ------------------- .../core/fnc/mil/CuratorMilPlaced_s.sqf | 31 ------------------- 5 files changed, 3 insertions(+), 99 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/CuratorCivPlaced_s.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/CuratorObjectPlaced_s.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/CuratorMilPlaced_s.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/CuratorCivPlaced_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/CuratorCivPlaced_s.sqf deleted file mode 100644 index aca38fe3d..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/CuratorCivPlaced_s.sqf +++ /dev/null @@ -1,31 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_civ_CuratorCivPlaced_s - -Description: - Apply btc_fnc_civ_unit_create to a unit. - -Parameters: - _unit - Unit where the btc_fnc_civ_unit_create will be apply. [Object] - -Returns: - -Examples: - (begin example) - [_unit] call btc_fnc_civ_CuratorCivPlaced_s; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_unit", objNull, [objNull]] -]; - -[group _unit] call btc_fnc_civ_unit_create; - -if (btc_debug_log) then { - [format [": %1", _unit], __FILE__, [false]] call btc_fnc_debug_message; -}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index f9e77f610..977ad4edf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -49,7 +49,6 @@ if (isServer) then { btc_fnc_civ_populate = compile preprocessFileLineNumbers "core\fnc\civ\populate.sqf"; btc_fnc_civ_create_patrol = compile preprocessFileLineNumbers "core\fnc\civ\create_patrol.sqf"; btc_fnc_civ_unit_create = compile preprocessFileLineNumbers "core\fnc\civ\unit_create.sqf"; - btc_fnc_civ_CuratorCivPlaced_s = compile preprocessFileLineNumbers "core\fnc\civ\CuratorCivPlaced_s.sqf"; btc_fnc_civ_evacuate = compile preprocessFileLineNumbers "core\fnc\civ\evacuate.sqf"; //DATA @@ -116,7 +115,6 @@ if (isServer) then { btc_fnc_mil_send = compile preprocessFileLineNumbers "core\fnc\mil\send.sqf"; btc_fnc_mil_set_skill = compile preprocessFileLineNumbers "core\fnc\mil\set_skill.sqf"; btc_fnc_mil_unit_create = compile preprocessFileLineNumbers "core\fnc\mil\unit_create.sqf"; - btc_fnc_mil_CuratorMilPlaced_s = compile preprocessFileLineNumbers "core\fnc\mil\CuratorMilPlaced_s.sqf"; btc_fnc_mil_getStructures = compile preprocessFileLineNumbers "core\fnc\mil\getStructures.sqf"; btc_fnc_mil_getBuilding = compile preprocessFileLineNumbers "core\fnc\mil\getBuilding.sqf"; btc_fnc_mil_add_eh = compile preprocessFileLineNumbers "core\fnc\mil\add_eh.sqf"; @@ -163,7 +161,6 @@ if (isServer) then { btc_fnc_side_EMP = compile preprocessFileLineNumbers "core\fnc\side\EMP.sqf"; //LOG - btc_fnc_log_CuratorObjectPlaced_s = compile preprocessFileLineNumbers "core\fnc\log\CuratorObjectPlaced_s.sqf"; btc_fnc_log_createVehicle = compile preprocessFileLineNumbers "core\fnc\log\createVehicle.sqf"; btc_fnc_log_getRearmMagazines = compile preprocessFileLineNumbers "core\fnc\log\getRearmMagazines.sqf"; btc_fnc_log_init = compile preprocessFileLineNumbers "core\fnc\log\init.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf index 5e4495b24..dfbbfd9c9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf @@ -27,7 +27,7 @@ params [ ]; if !((_object_placed isKindOf "AllVehicles") || (_object_placed isKindOf "Module_F")) then { - [_object_placed] remoteExecCall ["btc_fnc_log_CuratorObjectPlaced_s", 2]; + [_object_placed] remoteExecCall ["btc_fnc_log_init", 2]; if (btc_debug_log) then { [format ["OBJECT %1", _object_placed], __FILE__, [false]] call btc_fnc_debug_message; @@ -40,11 +40,11 @@ if !((_object_placed isKindOf "AllVehicles") || (_object_placed isKindOf "Module if (_object_placed isKindOf "Man") then { if (side _object_placed isEqualTo btc_enemy_side) then { - [_object_placed] remoteExecCall ["btc_fnc_mil_CuratorMilPlaced_s", 2]; + [group _object_placed] remoteExecCall ["btc_fnc_mil_unit_create", 2]; }; if (side _object_placed isEqualTo civilian) then { - [_object_placed] remoteExecCall ["btc_fnc_civ_CuratorCivPlaced_s", 2]; + [group _object_placed] remoteExecCall ["btc_fnc_civ_unit_create", 2]; }; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/CuratorObjectPlaced_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/CuratorObjectPlaced_s.sqf deleted file mode 100644 index 726525ffd..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/CuratorObjectPlaced_s.sqf +++ /dev/null @@ -1,31 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_log_CuratorObjectPlaced_s - -Description: - Fill me when you edit me ! - -Parameters: - _obj_created - [Object] - -Returns: - -Examples: - (begin example) - _result = [] call btc_fnc_log_CuratorObjectPlaced_s; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_obj_created", objNull, [objNull]] -]; - -[_obj_created] call btc_fnc_log_init; - -if (btc_debug_log) then { - [format ["btc_log_obj_created UPDATED by curator %1", _obj_created], __FILE__, [false]] call btc_fnc_debug_message; -}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/CuratorMilPlaced_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/CuratorMilPlaced_s.sqf deleted file mode 100644 index 47a868140..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/CuratorMilPlaced_s.sqf +++ /dev/null @@ -1,31 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_mil_CuratorMilPlaced_s - -Description: - Fill me when you edit me ! - -Parameters: - _unit - [Object] - -Returns: - -Examples: - (begin example) - _result = [] call btc_fnc_mil_CuratorMilPlaced_s; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_unit", objNull, [objNull]] -]; - -[group _unit] call btc_fnc_mil_unit_create; - -if (btc_debug_log) then { - [format ["%1", _unit], __FILE__, [false]] call btc_fnc_debug_message; -}; From f41a6a8241402fe5025494ed2aa380544bd2266c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 26 Dec 2019 18:48:17 +0100 Subject: [PATCH 006/264] Add: Scheduled with btc_delay_createUnit --- .../core/def/mission.sqf | 1 + .../core/fnc/city/activate.sqf | 16 +- .../core/fnc/city/cleanUp.sqf | 16 +- .../core/fnc/city/trigger_player_side.sqf | 2 +- .../core/fnc/civ/populate.sqf | 15 +- .../core/fnc/common/createUnit.sqf | 45 +++++ .../core/fnc/compile.sqf | 1 + .../core/fnc/data/spawn_group.sqf | 162 +++++++++--------- .../core/fnc/ied/drone_create.sqf | 3 +- .../core/fnc/ied/suicider_create.sqf | 17 +- .../core/fnc/mil/createUnits.sqf | 12 +- .../core/fnc/mil/create_patrol.sqf | 2 - 12 files changed, 175 insertions(+), 117 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index f7ed376bb..5d8bdc925 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -109,6 +109,7 @@ private _allClassSorted = _allClassVehicles select {getNumber (_cfgVehicles >> _ if (isServer) then { btc_final_phase = false; + btc_delay_createUnit = 0; //City btc_city_radius = _p_city_radius; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 7987e8b9f..76554c2f0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -96,10 +96,7 @@ if !(_ieds isEqualTo []) then { if !(_data_units isEqualTo []) then { { - (_x call btc_fnc_data_spawn_group) params ["_leader", "_type"]; - if (_type in [5, 7]) then { - [_leader, "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; - }; + [_x, _id] call btc_fnc_data_spawn_group; } forEach _data_units; } else { // Maximum number of enemy group @@ -153,9 +150,10 @@ if (_city getVariable ["spawn_more", false]) then { }; }; -if !(btc_cache_pos isEqualTo []) then { +if !(btc_cache_pos isEqualTo [] && {!(btc_cache_obj getVariable ["btc_cache_unitsSpawned", false])}) then { if (_city inArea [btc_cache_pos, _radius_x + _radius_y, _radius_x + _radius_y, 0, false]) then { - if (count (btc_cache_pos nearEntities ["Man", 30]) > 3) exitWith {}; + btc_cache_obj setVariable ["btc_cache_unitsSpawned", true]; + [btc_cache_pos, 8, 3, _wp_house] call btc_fnc_mil_create_group; [btc_cache_pos, 60, 4, _wp_sentry] call btc_fnc_mil_create_group; if (btc_p_veh_armed_spawn_more) then { @@ -208,7 +206,9 @@ if !(_city getVariable ["has_suicider", false]) then { }; }; -_city setVariable ["activating", false]; +[{ + _this setVariable ["activating", false]; +}, _city, btc_delay_createUnit] call CBA_fnc_waitAndExecute; //Patrol btc_patrol_active = btc_patrol_active - [grpNull]; @@ -221,7 +221,7 @@ if (_number_patrol_active < _p_patrol_max) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [1 + round random 1, _city, _radius_x + _radius_y + btc_patrol_area] spawn btc_fnc_mil_create_patrol; + [1 + round random 1, _city, _radius_x + _radius_y + btc_patrol_area] call btc_fnc_mil_create_patrol; }; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf index 14cca79cd..b9af7008c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf @@ -36,12 +36,14 @@ _toRemove append (allDead select { (_playableUnits inAreaArray [getPosWorld _dead, 500, 500]) isEqualTo [] && !(_dead getVariable ["btc_dont_delete", false]) }); -_toRemove append (allGroups select { - units _x select {alive _x} isEqualTo [] && - !( - _x in btc_patrol_active || - _x in btc_civ_veh_active - ) -}); +if (btc_delay_createUnit > 0) then { // Don't remove group during units creation. + _toRemove append (allGroups select { + units _x select {alive _x} isEqualTo [] && + !( + _x in btc_patrol_active || + _x in btc_civ_veh_active + ) + }); +}; _toRemove call CBA_fnc_deleteEntity; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf index 915b2d59f..c43de3468 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf @@ -41,7 +41,7 @@ params [ private _trigger = createTrigger ["EmptyDetector", _position]; _trigger setTriggerArea [_radius_x + _radius_y + btc_city_radius, _radius_x + _radius_y + btc_city_radius, 0, false]; _trigger setTriggerActivation ["ANYPLAYER", "PRESENT", true]; -_trigger setTriggerStatements [btc_p_trigger, format ["[%1] spawn btc_fnc_city_activate", _id], format ["[%1] call btc_fnc_city_de_activate", _id]]; +_trigger setTriggerStatements [btc_p_trigger, format ["[%1] call btc_fnc_city_activate", _id], format ["[%1] call btc_fnc_city_de_activate", _id]]; _city setVariable ["trigger_player_side", _trigger]; if (btc_debug) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index e179179ad..e4ac280bf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -48,12 +48,15 @@ for "_i" from 1 to _n do { if (_houses isEqualTo []) exitWith {}; private _house = selectRandom _houses; - private _unit_type = selectRandom btc_civ_type_units; - - _group = createGroup civilian; - _group createUnit [_unit_type, _house buildingPos 0, [], 0, "NONE"]; - _group setVariable ["btc_data_inhouse", [_house buildingPos 0]]; + private _pos = _house buildingPos 0; + private _group = createGroup civilian; + _group setVariable ["btc_data_inhouse", [_pos]]; [_group] call btc_fnc_civ_addWP; - [_group] call btc_fnc_civ_unit_create; + [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_createUnit; + + [{ + _this call btc_fnc_civ_unit_create; + }, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; + _houses = _houses - [_house]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf new file mode 100644 index 000000000..9ab3d75c7 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf @@ -0,0 +1,45 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_createUnit + +Description: + Create unit when all previous units have been created. btc_delay_createUnit define the time (in second) when the unit will be created. + +Parameters: + _group - [Group] + _unit_type - [Array] + _pos - [Array] + +Returns: + +Examples: + (begin example) + [createGroup (side player), typeOf player, getPosATL player] call btc_fnc_createUnit; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +btc_delay_createUnit = btc_delay_createUnit + 0.3; + +[{ + params [ + ["_group", grpNull, [grpNull]], + ["_unit_type", "", [[]]], + ["_pos", [0, 0, 0], [[]]], + ["_special", "CARGO", [""]] + ]; + + if (btc_debug_log) then { + if (isNull _group) then { + [format ["_this = %1", _this], __FILE__, [false]] call btc_fnc_debug_message; + }; + }; + + private _unit = _group createUnit [_unit_type, _pos, [], 0, _special]; + [_unit] joinSilent _group; + + btc_delay_createUnit = btc_delay_createUnit - 0.3; +}, _this, btc_delay_createUnit] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index f9e77f610..8a3707a87 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -22,6 +22,7 @@ if (isServer) then { btc_fnc_typeOf = compile preprocessFileLineNumbers "core\fnc\common\typeOf.sqf"; btc_fnc_getVehProperties = compile preprocessFileLineNumbers "core\fnc\common\getVehProperties.sqf"; btc_fnc_setVehProperties = compile preprocessFileLineNumbers "core\fnc\common\setVehProperties.sqf"; + btc_fnc_createUnit = compile preprocessFileLineNumbers "core\fnc\common\createUnit.sqf"; //CHEM btc_fnc_chem_checkLoop = compile preprocessFileLineNumbers "core\fnc\chem\checkLoop.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index acb041c35..3ad095352 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -29,6 +29,10 @@ Author: ---------------------------------------------------------------------------- */ params [ + ["_data_unit", [], [[]]], + ["_cityID", 0, [0]] +]; +_data_unit params [ ["_type", 1, [0]], ["_array_pos", [], [[]]], ["_array_type", [], [[]]], @@ -39,102 +43,100 @@ params [ ["_array_veh", [], [[], ""]] ]; -private _group = createGroup _side; - -for "_i" from 0 to (count _array_pos - 1) do { - private _u = _group createUnit [_array_type select _i, _array_pos select _i, [], 0, "NONE"]; - _u enableSimulation false; - _u setPosATL (_array_pos select _i); - _u setDamage (_array_dam select _i); - - if (btc_debug_log) then { - [format ["pos %1 in %2 ", _array_pos select _i, getPos _u], __FILE__, [false]] call btc_fnc_debug_message; - }; +if (_type isEqualTo 5) exitWith { + [ + [objNull, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create, + "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; +}; +if (_type isEqualTo 7) exitWith { + [ + [objNull, 100, _array_pos select 0] call btc_fnc_ied_drone_create, + "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; }; +private _group = createGroup _side; +private _special = "CAN_COLLIDE"; +private _start = 0; + if (_type isEqualTo 1) then { private _veh = createVehicle [_array_veh select 0, _array_veh select 1, [], 0, "FLY"]; + _group addVehicle _veh; + for "_i" from 0 to ((count _array_pos - 1) - (_veh emptyPositions "cargo")) do { + private _unit = _group createUnit [_array_type select _i, _array_pos select _i, [], 0, "CARGO"]; + + if (_veh emptyPositions "driver" > 0) then { + _unit moveinDriver _veh; + _unit assignAsDriver _veh; + } else { + if (_veh emptyPositions "gunner" > 0) then { + _unit moveinGunner _veh; + _unit assignAsGunner _veh; + } else { + if (_veh emptyPositions "commander" > 0) then { + _unit moveinCommander _veh; + _unit assignAsCommander _veh; + }; + }; + }; + _start = _forEachIndex; + }; + (units _group) joinSilent _group; + private _special = "CARGO"; + if !(_veh isKindOf "Plane") then { _veh setPosATL (_array_veh select 1); _veh setDir (_array_veh select 2); }; _veh setFuel (_array_veh select 3); - { - private _assigned = false; - if (!_assigned && _veh emptyPositions "driver" > 0) then { - _x moveInDriver _veh; - _x assignAsDriver _veh; - _assigned = true; - }; - if (!_assigned && _veh emptyPositions "gunner" > 0) then { - _x moveinGunner _veh; - _x assignAsGunner _veh; - _assigned = true; - }; - if (!_assigned && _veh emptyPositions "commander" > 0) then { - _x moveinCommander _veh; - _x assignAsCommander _veh; - _assigned = true; - }; - if (!_assigned && _veh emptyPositions "cargo" > 0) then { - _x moveinCargo _veh; - _x assignAsCargo _veh; - _assigned = true; - }; - } forEach units _group; }; -units _group joinSilent _group; -(units _group) apply {_x enableSimulation true}; +for "_i" from _start to (count _array_pos - 1) do { + [_group, _array_type select _i, _array_pos select _i, _special] call btc_fnc_createUnit; + //_u setDamage (_array_dam select _i); -//[waypointPosition _x,waypointType _x,waypointSpeed _x,waypointFormation _x,waypointCombatMode _x,waypointBehaviour _x] -if !(_side isEqualTo civilian && {vehicle leader _group isEqualTo leader _group}) then { - if (count (_array_wp select 1) > 1) then { - { - [_group, _x select 0, 0, _x select 1, _x select 5, _x select 4, _x select 2, _x select 3, "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; - } forEach (_array_wp select 1); - _group setCurrentWaypoint [_group, _array_wp select 0]; + if (btc_debug_log) then { + [format ["pos %1 in %2 ", _array_pos select _i, getPos _u], __FILE__, [false]] call btc_fnc_debug_message; }; }; -if (_type isEqualTo 3) then { - [_group] call CBA_fnc_clearWaypoints; - [_group, nearestObject [(units _group) select 0, _array_veh]] call btc_fnc_house_addWP; - _group setVariable ["btc_inHouse", _array_veh]; -}; -if (_type isEqualTo 4) then {[[0, 0, 0], 0, units _group] call btc_fnc_civ_get_weapons;}; -if (_type isEqualTo 5) then { - _group spawn { - _this setVariable ["suicider", true]; - - private _suicider = leader _this; - - //Main check - - private _cond = false; - while {alive _suicider && !isNull _suicider && !_cond} do { - sleep 5; - if !((getPos _suicider nearEntities ["SoldierWB", 25]) isEqualTo []) then { - _cond = true; - _suicider spawn btc_fnc_ied_suicider_active - }; +[{ + params ["_data_unit", "_group"]; + _data_unit params [ + ["_type", 1, [0]], + ["_array_pos", [], [[]]], + ["_array_type", [], [[]]], + ["_side", east, [east]], + ["_array_dam", [], [[]]], + ["_behaviour", [], [[]]], + ["_array_wp", [], [[]]], + ["_array_veh", [], [[], ""]] + ]; + + //[waypointPosition _x,waypointType _x,waypointSpeed _x,waypointFormation _x,waypointCombatMode _x,waypointBehaviour _x] + if !(_side isEqualTo civilian && {vehicle leader _group isEqualTo leader _group}) then { + if (count (_array_wp select 1) > 1) then { + { + [_group, _x select 0, 0, _x select 1, _x select 5, _x select 4, _x select 2, _x select 3, "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; + } forEach (_array_wp select 1); + _group setCurrentWaypoint [_group, _array_wp select 0]; }; }; -}; -if (_type isEqualTo 6) then { - [_group] call CBA_fnc_clearWaypoints; - [_group, _array_veh select 0] call btc_fnc_civ_addWP; - _group setVariable ["btc_data_inhouse", _array_veh]; -}; -if (_type isEqualTo 7) then { - [objNull, 100, _array_pos select 0, _group] call btc_fnc_ied_drone_create; -}; - -_group setBehaviour (_behaviour select 0); -_group setCombatMode (_behaviour select 1); -_group setFormation (_behaviour select 2); + if (_type isEqualTo 3) then { + [_group] call CBA_fnc_clearWaypoints; + [_group, nearestObject [_array_pos select 0, _array_veh]] call btc_fnc_house_addWP; + _group setVariable ["btc_inHouse", _array_veh]; + }; + if (_type isEqualTo 4) then {[[0, 0, 0], 0, units _group] call btc_fnc_civ_get_weapons;}; + if (_type isEqualTo 6) then { + [_group] call CBA_fnc_clearWaypoints; + [_group, _array_veh select 0] call btc_fnc_civ_addWP; + _group setVariable ["btc_data_inhouse", _array_veh]; + }; -if (_side isEqualTo btc_enemy_side) then {[_group] call btc_fnc_mil_unit_create;}; -if (_side isEqualTo civilian) then {[_group] call btc_fnc_civ_unit_create}; + _group setBehaviour (_behaviour select 0); + _group setCombatMode (_behaviour select 1); + _group setFormation (_behaviour select 2); -[leader _group, _type] + if (_side isEqualTo btc_enemy_side) then {[_group] call btc_fnc_mil_unit_create;}; + if (_side isEqualTo civilian) then {[_group] call btc_fnc_civ_unit_create}; +}, [_data_unit, _group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf index 9e8fba35f..36753792c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf @@ -9,7 +9,6 @@ Parameters: _city - City where the drone is created. [Object] _area - Area around the city where the drone is created randomly. [Number] _rpos - Create the drone at this position. [Array] - _group - Group used for drone crew. [Group] Returns: _leader - return the leader of the group. [Object] @@ -28,7 +27,6 @@ params [ ["_city", objNull, [objNull]], ["_area", 300, [0]], ["_rpos", [], [[]]], - ["_group", createGroup [btc_enemy_side, true], [grpNull]] ]; if (btc_debug_log) then { @@ -39,6 +37,7 @@ if (_rpos isEqualTo []) then { _rpos = [position _city, _area] call btc_fnc_randomize_pos; }; +private _group = createGroup [btc_enemy_side, true]; private _drone = createVehicle ["C_IDAP_UAV_06_antimine_F", _rpos, [], 0, "FLY"]; createVehicleCrew _drone; [driver _drone] joinSilent _group; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf index 17d22a11b..727c84abc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf @@ -8,6 +8,8 @@ Description: Parameters: _city - City where the suicider is created. [Object] _area - Area around the city the suicider is created randomly. [Number] + _rpos - Create the suicider at this position. [Array] + _type_units - Type of units. [Group] Returns: _suicider - Created suicider. [Object] @@ -24,17 +26,24 @@ Author: params [ ["_city", objNull, [objNull]], - ["_area", 100, [0]] + ["_area", 100, [0]], + ["_rpos", [], [[]]], + ["_type_units", "", [""]] ]; if (btc_debug_log) then { [format ["_name = %1 _area %2", _city getVariable ["name", "name"], _area], __FILE__, [false]] call btc_fnc_debug_message; }; -private _rpos = [position _city, _area] call btc_fnc_randomize_pos; +if (_rpos isEqualTo []) then { + _rpos = [position _city, _area] call btc_fnc_randomize_pos; +}; +if (_type_units isEqualTo "") then { + _type_units = selectRandom btc_civ_type_units; +}; -private _group = createGroup civilian; -private _suicider = _group createUnit [selectRandom btc_civ_type_units, _rpos, [], 0, "CAN_COLLIDE"]; +private _group = createGroup [civilian, true]; +private _suicider = _group createUnit [_type_units, _rpos, [], 0, "CAN_COLLIDE"]; [_group] call btc_fnc_civ_addWP; _group setVariable ["suicider", true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf index 0986837ab..e76a1b5c5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf @@ -41,13 +41,11 @@ for "_i" from 1 to _number do { selectRandom _type_units; }; - private _unit = _group createUnit [_unit_type, _pos, [], 0, "CARGO"]; - [_unit] joinSilent _group; - - if (canSuspend) then { - sleep 1; - }; + [_group, _unit_type, _pos] call btc_fnc_createUnit; }; -[_group] call btc_fnc_mil_unit_create; + +[{ + _this call btc_fnc_mil_unit_create; +}, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; _group diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 35e581143..877344cdd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -38,8 +38,6 @@ if (btc_debug_log) then { [format ["_random = %1 _active_city %2 _area %3 btc_patrol_active = %4", _random, _active_city, _area, count btc_patrol_active], __FILE__, [false]] call btc_fnc_debug_message; }; -sleep 5 + random 10; - //Remove if too far from player if ([_active_city, grpNull, _area] call btc_fnc_patrol_playersInAreaCityGroup) exitWith {false}; From 52428ab39fc1d71f316ebebd9a5be3f7dcb00ed2 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 28 Dec 2019 14:08:12 +0100 Subject: [PATCH 007/264] Migrete ProgressBar From ACE to CBA --- .../core/fnc/info/search_for_intel.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf index 3dc31a7e3..443347aec 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf @@ -38,7 +38,7 @@ private _condition = { params ["_args"]; _args params ["_target", "_player", "_radius"]; - _target distance _player < _radius + (_target distance _player < _radius) && {!([_player, objNull, ["isnotinside"]] call ace_common_fnc_canInteractWith)} }; -[btc_int_search_intel_time, [_target, player, _radius], _onFinish, {}, localize "STR_BTC_HAM_CON_INFO_SEARCH_BAR", _condition, ["isnotinside"]] call ace_common_fnc_progressBar; +[localize "STR_BTC_HAM_CON_INFO_SEARCH_BAR", btc_int_search_intel_time, _condition, _onFinish, {}, [_target, player, _radius]] call CBA_fnc_progressBar; From 84915418dea3a2b2d2fb096c16dea274bf4b8f79 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 2 Jan 2020 12:49:38 +0100 Subject: [PATCH 008/264] Wrong not --- .../core/fnc/info/search_for_intel.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf index 443347aec..de9a1468c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/search_for_intel.sqf @@ -38,7 +38,7 @@ private _condition = { params ["_args"]; _args params ["_target", "_player", "_radius"]; - (_target distance _player < _radius) && {!([_player, objNull, ["isnotinside"]] call ace_common_fnc_canInteractWith)} + (_target distance _player < _radius) && {[_player, objNull, ["isnotinside"]] call ace_common_fnc_canInteractWith} }; [localize "STR_BTC_HAM_CON_INFO_SEARCH_BAR", btc_int_search_intel_time, _condition, _onFinish, {}, [_target, player, _radius]] call CBA_fnc_progressBar; From 95535f2dc50279d3f5407bd3d096845e84b60d3f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 2 Jan 2020 13:25:36 +0100 Subject: [PATCH 009/264] FIX:drone error --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf index 36753792c..88b634cbe 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf @@ -26,7 +26,7 @@ Author: params [ ["_city", objNull, [objNull]], ["_area", 300, [0]], - ["_rpos", [], [[]]], + ["_rpos", [], [[]]] ]; if (btc_debug_log) then { From 4653fb0d322009f72a63313bc5ba58aede9e427a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 2 Jan 2020 13:55:08 +0100 Subject: [PATCH 010/264] FIX: Wrong parameter --- .../core/fnc/common/createUnit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf index 9ab3d75c7..38bd227de 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf @@ -27,7 +27,7 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; [{ params [ ["_group", grpNull, [grpNull]], - ["_unit_type", "", [[]]], + ["_unit_type", "", [""]], ["_pos", [0, 0, 0], [[]]], ["_special", "CARGO", [""]] ]; From e4d6e83cc64a11a08368c5609faf16dad9da4e72 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 3 Jan 2020 23:27:31 +0100 Subject: [PATCH 011/264] FIX the first implementation - fix city are clear too fast - fix group empty never clean up - fix empty group addWp - Increase delay to 1s - unitcreate is delayed slightly lower (0.01s) to be sure those are created before others waitAndExecute - Remove clearwaypoints for new unit in spawn_group - delay set groupOwner Co-Authored-By: pterolatypus --- .../core/fnc/city/activate.sqf | 22 ++++++++++--------- .../core/fnc/city/cleanUp.sqf | 2 +- .../core/fnc/civ/populate.sqf | 2 +- .../core/fnc/common/createUnit.sqf | 8 +++---- .../core/fnc/data/spawn_group.sqf | 2 -- .../core/fnc/mil/create_patrol.sqf | 7 +++--- .../core/fnc/mil/send.sqf | 4 +++- 7 files changed, 25 insertions(+), 22 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 76554c2f0..04f85b41c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -129,14 +129,6 @@ if !(_data_units isEqualTo []) then { }; }; -if (_has_en) then { - private _trigger = createTrigger ["EmptyDetector", getPos _city]; - _trigger setTriggerArea [_radius_x + _radius_y, _radius_x + _radius_y, 0, false]; - _trigger setTriggerActivation [str btc_enemy_side, "NOT PRESENT", false]; - _trigger setTriggerStatements ["this", format ["[%1] call btc_fnc_city_set_clear", _id], ""]; - _city setVariable ["trigger", _trigger]; -}; - if (_city getVariable ["spawn_more", false]) then { _city setVariable ["spawn_more", false]; for "_i" from 1 to (round (_p_mil_group_ratio * (2 + random 3))) do { @@ -207,8 +199,18 @@ if !(_city getVariable ["has_suicider", false]) then { }; [{ - _this setVariable ["activating", false]; -}, _city, btc_delay_createUnit] call CBA_fnc_waitAndExecute; + params ["_has_en", "_city", "_radius_x", "_radius_y"]; + + if (_has_en) then { + private _trigger = createTrigger ["EmptyDetector", getPos _city]; + _trigger setTriggerArea [_radius_x + _radius_y, _radius_x + _radius_y, 0, false]; + _trigger setTriggerActivation [str btc_enemy_side, "NOT PRESENT", false]; + _trigger setTriggerStatements ["this", format ["[%1] call btc_fnc_city_set_clear", _id], ""]; + _city setVariable ["trigger", _trigger]; + }; + + _city setVariable ["activating", false]; +}, [_has_en, _city, _radius_x, _radius_y], btc_delay_createUnit] call CBA_fnc_waitAndExecute; //Patrol btc_patrol_active = btc_patrol_active - [grpNull]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf index cb6a8952f..397367ba2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf @@ -36,7 +36,7 @@ _toRemove append (allDead select { (_playableUnits inAreaArray [getPosWorld _dead, 500, 500]) isEqualTo [] && !(_dead getVariable ["btc_dont_delete", false]) }); -if (btc_delay_createUnit > 0) then { // Don't remove group during units creation. +if (btc_delay_createUnit < 0.01) then { // Don't remove group during units creation. _toRemove append (allGroups select { units _x select {alive _x} isEqualTo [] && !( diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index d8d148ef1..9107809e9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -52,7 +52,7 @@ for "_i" from 1 to _n do { private _pos = _house buildingPos 0; private _group = createGroup civilian; _group setVariable ["btc_data_inhouse", [_pos]]; - [_group] call btc_fnc_civ_addWP; + [_group, _pos] call btc_fnc_civ_addWP; [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_createUnit; [{ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf index 38bd227de..4a7f2a584 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf @@ -22,7 +22,7 @@ Author: ---------------------------------------------------------------------------- */ -btc_delay_createUnit = btc_delay_createUnit + 0.3; +btc_delay_createUnit = btc_delay_createUnit + 1; [{ params [ @@ -34,12 +34,12 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; if (btc_debug_log) then { if (isNull _group) then { - [format ["_this = %1", _this], __FILE__, [false]] call btc_fnc_debug_message; + [format ["isNull _group _this = %1", _this], __FILE__, [btc_debug]] call btc_fnc_debug_message; }; }; private _unit = _group createUnit [_unit_type, _pos, [], 0, _special]; [_unit] joinSilent _group; - btc_delay_createUnit = btc_delay_createUnit - 0.3; -}, _this, btc_delay_createUnit] call CBA_fnc_waitAndExecute; + btc_delay_createUnit = btc_delay_createUnit - 1; +}, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 3ad095352..23a5e9591 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -122,13 +122,11 @@ for "_i" from _start to (count _array_pos - 1) do { }; }; if (_type isEqualTo 3) then { - [_group] call CBA_fnc_clearWaypoints; [_group, nearestObject [_array_pos select 0, _array_veh]] call btc_fnc_house_addWP; _group setVariable ["btc_inHouse", _array_veh]; }; if (_type isEqualTo 4) then {[[0, 0, 0], 0, units _group] call btc_fnc_civ_get_weapons;}; if (_type isEqualTo 6) then { - [_group] call CBA_fnc_clearWaypoints; [_group, _array_veh select 0] call btc_fnc_civ_addWP; _group setVariable ["btc_data_inhouse", _array_veh]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 877344cdd..7e6f4d6bb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -96,8 +96,9 @@ switch (_random) do { }; }; -[_group, [_start_city, _active_city], _area, _pos_isWater] call btc_fnc_patrol_init; - -[[_group]] call btc_fnc_set_groupsOwner; +[{ + _this call btc_fnc_patrol_init; + [[_this select 0]] call btc_fnc_set_groupsOwner; +}, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit] call CBA_fnc_waitAndExecute; true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index f34323c22..d63dd5893 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -61,6 +61,8 @@ switch (_typeOf_patrol) do { }; }; -[[_group]] call btc_fnc_set_groupsOwner; +[{ + _this call btc_fnc_set_groupsOwner; +}, [[_group]], btc_delay_createUnit] call CBA_fnc_waitAndExecute; _group From ec2ab52a5a65a46a479cbfb11ef2f93bf733fbbb Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 4 Jan 2020 23:30:20 +0100 Subject: [PATCH 012/264] Make Drone and suicider database compatible --- .../core/fnc/city/activate.sqf | 5 +- .../core/fnc/data/spawn_group.sqf | 57 +++++++++---------- .../core/fnc/ied/drone_create.sqf | 5 +- .../core/fnc/ied/suicider_create.sqf | 17 ++++-- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 7987e8b9f..f17583065 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -96,10 +96,7 @@ if !(_ieds isEqualTo []) then { if !(_data_units isEqualTo []) then { { - (_x call btc_fnc_data_spawn_group) params ["_leader", "_type"]; - if (_type in [5, 7]) then { - [_leader, "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; - }; + [_x, _id] call btc_fnc_data_spawn_group; } forEach _data_units; } else { // Maximum number of enemy group diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index acb041c35..3fea86928 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -1,19 +1,22 @@ /* ---------------------------------------------------------------------------- + Function: btc_fnc_data_spawn_group Description: Create group previously saved by btc_fnc_data_get_group. Parameters: - _type - Type of group (3: in house group, 4: civilian with weapon, 5: suicider ...). [Number] - _array_pos - Position on units. [Array] - _array_type - Type of units. [Array] - _side - Side of the group. [Side] - _array_dam - Damage of units. [Array] - _behaviour - Behaviour of units. [Array] - _array_wp - Waypoints of group. [Array] - _array_veh - Vehicle occupied by the group. [Array, String] + _data_unit - All data listed above. [Array] + _type - Type of group (3: in house group, 4: civilian with weapon, 5: suicider ...). [Number] + _array_pos - Position on units. [Array] + _array_type - Type of units. [Array] + _side - Side of the group. [Side] + _array_dam - Damage of units. [Array] + _behaviour - Behaviour of units. [Array] + _array_wp - Waypoints of group. [Array] + _array_veh - Vehicle occupied by the group. [Array, String] + _cityID - City ID. [Number] Returns: leader of the group and type of group. [Array] @@ -25,10 +28,13 @@ Examples: Author: Giallustio - ---------------------------------------------------------------------------- */ params [ + ["_data_unit", [], [[]]], + ["_cityID", 0, [0]] +]; +_data_unit params [ ["_type", 1, [0]], ["_array_pos", [], [[]]], ["_array_type", [], [[]]], @@ -39,6 +45,17 @@ params [ ["_array_veh", [], [[], ""]] ]; +if (_type isEqualTo 5) exitWith { + [ + [objNull, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create, + "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; +}; +if (_type isEqualTo 7) exitWith { + [ + [objNull, 100, _array_pos select 0] call btc_fnc_ied_drone_create, + "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; +}; + private _group = createGroup _side; for "_i" from 0 to (count _array_pos - 1) do { @@ -102,33 +119,11 @@ if (_type isEqualTo 3) then { _group setVariable ["btc_inHouse", _array_veh]; }; if (_type isEqualTo 4) then {[[0, 0, 0], 0, units _group] call btc_fnc_civ_get_weapons;}; -if (_type isEqualTo 5) then { - _group spawn { - _this setVariable ["suicider", true]; - - private _suicider = leader _this; - - //Main check - - private _cond = false; - - while {alive _suicider && !isNull _suicider && !_cond} do { - sleep 5; - if !((getPos _suicider nearEntities ["SoldierWB", 25]) isEqualTo []) then { - _cond = true; - _suicider spawn btc_fnc_ied_suicider_active - }; - }; - }; -}; if (_type isEqualTo 6) then { [_group] call CBA_fnc_clearWaypoints; [_group, _array_veh select 0] call btc_fnc_civ_addWP; _group setVariable ["btc_data_inhouse", _array_veh]; }; -if (_type isEqualTo 7) then { - [objNull, 100, _array_pos select 0, _group] call btc_fnc_ied_drone_create; -}; _group setBehaviour (_behaviour select 0); _group setCombatMode (_behaviour select 1); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf index 9e8fba35f..88b634cbe 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf @@ -9,7 +9,6 @@ Parameters: _city - City where the drone is created. [Object] _area - Area around the city where the drone is created randomly. [Number] _rpos - Create the drone at this position. [Array] - _group - Group used for drone crew. [Group] Returns: _leader - return the leader of the group. [Object] @@ -27,8 +26,7 @@ Author: params [ ["_city", objNull, [objNull]], ["_area", 300, [0]], - ["_rpos", [], [[]]], - ["_group", createGroup [btc_enemy_side, true], [grpNull]] + ["_rpos", [], [[]]] ]; if (btc_debug_log) then { @@ -39,6 +37,7 @@ if (_rpos isEqualTo []) then { _rpos = [position _city, _area] call btc_fnc_randomize_pos; }; +private _group = createGroup [btc_enemy_side, true]; private _drone = createVehicle ["C_IDAP_UAV_06_antimine_F", _rpos, [], 0, "FLY"]; createVehicleCrew _drone; [driver _drone] joinSilent _group; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf index 17d22a11b..727c84abc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf @@ -8,6 +8,8 @@ Description: Parameters: _city - City where the suicider is created. [Object] _area - Area around the city the suicider is created randomly. [Number] + _rpos - Create the suicider at this position. [Array] + _type_units - Type of units. [Group] Returns: _suicider - Created suicider. [Object] @@ -24,17 +26,24 @@ Author: params [ ["_city", objNull, [objNull]], - ["_area", 100, [0]] + ["_area", 100, [0]], + ["_rpos", [], [[]]], + ["_type_units", "", [""]] ]; if (btc_debug_log) then { [format ["_name = %1 _area %2", _city getVariable ["name", "name"], _area], __FILE__, [false]] call btc_fnc_debug_message; }; -private _rpos = [position _city, _area] call btc_fnc_randomize_pos; +if (_rpos isEqualTo []) then { + _rpos = [position _city, _area] call btc_fnc_randomize_pos; +}; +if (_type_units isEqualTo "") then { + _type_units = selectRandom btc_civ_type_units; +}; -private _group = createGroup civilian; -private _suicider = _group createUnit [selectRandom btc_civ_type_units, _rpos, [], 0, "CAN_COLLIDE"]; +private _group = createGroup [civilian, true]; +private _suicider = _group createUnit [_type_units, _rpos, [], 0, "CAN_COLLIDE"]; [_group] call btc_fnc_civ_addWP; _group setVariable ["suicider", true]; From 49fdc2f1fcae65ee84fb2239f0c4762ac8b4f02e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 5 Jan 2020 15:30:18 +0100 Subject: [PATCH 013/264] Scheduled vehicle --- .../core/fnc/city/cleanUp.sqf | 1 + .../core/fnc/common/createUnit.sqf | 6 +- .../core/fnc/common/createVehicle.sqf | 96 +++++++++++++++++++ .../core/fnc/compile.sqf | 1 + .../core/fnc/data/spawn_group.sqf | 47 ++------- .../core/fnc/debug/dlg.hpp | 2 +- .../core/fnc/debug/units.sqf | 3 +- .../core/fnc/mil/createVehicle.sqf | 37 ++++--- .../core/fnc/mil/create_patrol.sqf | 9 +- .../core/fnc/mil/create_static.sqf | 6 +- .../core/fnc/mil/send.sqf | 2 +- .../core/fnc/side/capture_officer.sqf | 6 +- .../core/fnc/side/checkpoint.sqf | 6 +- .../core/fnc/side/convoy.sqf | 5 +- 14 files changed, 144 insertions(+), 83 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf index 397367ba2..ffd5f9bca 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf @@ -37,6 +37,7 @@ _toRemove append (allDead select { }); if (btc_delay_createUnit < 0.01) then { // Don't remove group during units creation. + [format ["btc_delay_createUnit = %1", btc_delay_createUnit], __FILE__, [btc_debug]] call btc_fnc_debug_message; _toRemove append (allGroups select { units _x select {alive _x} isEqualTo [] && !( diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf index 4a7f2a584..000bb6a1e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf @@ -29,7 +29,8 @@ btc_delay_createUnit = btc_delay_createUnit + 1; ["_group", grpNull, [grpNull]], ["_unit_type", "", [""]], ["_pos", [0, 0, 0], [[]]], - ["_special", "CARGO", [""]] + ["_special", "CARGO", [""]], + ["_vehicle", objNull, [objNull]] ]; if (btc_debug_log) then { @@ -39,6 +40,9 @@ btc_delay_createUnit = btc_delay_createUnit + 1; }; private _unit = _group createUnit [_unit_type, _pos, [], 0, _special]; + if !(isNull _vehicle) then { + _unit moveInAny _vehicle; + }; [_unit] joinSilent _group; btc_delay_createUnit = btc_delay_createUnit - 1; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf new file mode 100644 index 000000000..3a32d4f8e --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf @@ -0,0 +1,96 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_createVehicle + +Description: + Create vehicle and crew when all previous units have been created. btc_delay_createUnit define the time (in second) when the vehicle and crew will be created. + +Parameters: + _group - Group to store crews. [Group] + _vehicle_type - Vehicle type. [String] + _units_type - Array of unit type will be use to fill the vehicle. [Array] + _position - Position of creation. [Array] + _code - Code to apply on vehicle after creation. [Code] + _direction - Direction of spawn. [Number] + _fuel - Fuel level. [Array] + _p_chem - Allow chemical propagation. [Boolean] + +Returns: + +Examples: + (begin example) + [createGroup (side player), "O_G_Van_01_transport_F", (btc_type_units + btc_type_units) select [0, ["O_G_Van_01_transport_F",true] call BIS_fnc_crewCount], player getPos [10, direction player]] call btc_fnc_createVehicle; + [createGroup (side player), "B_Heli_Transport_01_camo_F", (btc_type_units + btc_type_units) select [0, ["B_Heli_Transport_01_camo_F",true] call BIS_fnc_crewCount], player getPos [10, direction player]] call btc_fnc_createVehicle; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +btc_delay_createUnit = btc_delay_createUnit + 1; + +[{ + params [ + ["_group", grpNull, [grpNull]], + ["_vehicle_type", "", [""]], + ["_units_type", [], [[]]], + ["_position", [0, 0, 0], [[]]], + ["_code", {}, [{}]], + ["_direction", 0, [0]], + ["_fuel", 1, [0]], + ["_p_chem", btc_p_chem, [false]] + ]; + + private _veh = createVehicle [_vehicle_type, _position, [], 0, ["CAN_COLLIDE", "FLY"] select (_vehicle_type isKindOf "Air")]; + if !(_vehicle_type isKindOf "Air") then { + _veh setDir _direction; + _veh setVectorUp surfaceNormal position _veh; + }; + _veh setFuel _fuel; + [_veh, "", []] call BIS_fnc_initvehicle; + if (_p_chem) then { + _veh addEventHandler ["GetIn", { + [_this select 0, _this select 2] call btc_fnc_chem_propagate; + _this + }]; + }; + + ["driver", "commander", "gunner", "turret", "cargo"] apply {count (fullCrew [_veh, _x, true]);} params ["_driverCount", "_commanderCount", "_gunnerCount", "_turretCount", "_cargoCount"]; + private _crews = _driverCount + _commanderCount + _gunnerCount; + private _numberOfUnits = count _units_type; + for "_i" from 0 to ((_crews min _numberOfUnits) - 1) do { + private _unit = _group createUnit [_units_type select _i, _position, [], 0, "CAN_COLLIDE"]; + + if (_veh emptyPositions "driver" > 0) then { + _unit moveinDriver _veh; + _unit assignAsDriver _veh; + } else { + if (_veh emptyPositions "gunner" > 0) then { + _unit moveinGunner _veh; + _unit assignAsGunner _veh; + } else { + if (_veh emptyPositions "commander" > 0) then { + _unit moveinCommander _veh; + _unit assignAsCommander _veh; + }; + }; + }; + }; + _group selectLeader (driver _veh); + (units _group) joinSilent _group; + + if !(_code isEqualTo {}) then { + [_veh, _group] call _code; + }; + + private _crews_and_turret = _crews + _turretCount; + for "_i" from _crews to ((_crews_and_turret min _numberOfUnits) - 1) do { + [_group, _units_type select _i, _position, "CAN_COLLIDE", _veh] call btc_fnc_createUnit; + }; + for "_i" from _crews_and_turret to (_numberOfUnits - 1) do { + [_group, _units_type select _i, _position] call btc_fnc_createUnit; + }; + + btc_delay_createUnit = btc_delay_createUnit - 1; +}, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 8a3707a87..5806552f4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -23,6 +23,7 @@ if (isServer) then { btc_fnc_getVehProperties = compile preprocessFileLineNumbers "core\fnc\common\getVehProperties.sqf"; btc_fnc_setVehProperties = compile preprocessFileLineNumbers "core\fnc\common\setVehProperties.sqf"; btc_fnc_createUnit = compile preprocessFileLineNumbers "core\fnc\common\createUnit.sqf"; + btc_fnc_createVehicle = compile preprocessFileLineNumbers "core\fnc\common\createVehicle.sqf"; //CHEM btc_fnc_chem_checkLoop = compile preprocessFileLineNumbers "core\fnc\chem\checkLoop.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 23a5e9591..3d33bd9be 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -55,47 +55,16 @@ if (_type isEqualTo 7) exitWith { }; private _group = createGroup _side; -private _special = "CAN_COLLIDE"; -private _start = 0; - if (_type isEqualTo 1) then { - private _veh = createVehicle [_array_veh select 0, _array_veh select 1, [], 0, "FLY"]; - _group addVehicle _veh; - for "_i" from 0 to ((count _array_pos - 1) - (_veh emptyPositions "cargo")) do { - private _unit = _group createUnit [_array_type select _i, _array_pos select _i, [], 0, "CARGO"]; - - if (_veh emptyPositions "driver" > 0) then { - _unit moveinDriver _veh; - _unit assignAsDriver _veh; - } else { - if (_veh emptyPositions "gunner" > 0) then { - _unit moveinGunner _veh; - _unit assignAsGunner _veh; - } else { - if (_veh emptyPositions "commander" > 0) then { - _unit moveinCommander _veh; - _unit assignAsCommander _veh; - }; - }; + [_group, _array_veh select 0, _array_type, _array_veh select 1, {}, _array_veh select 2, _array_veh select 3] call btc_fnc_createVehicle; +} else { + for "_i" from 0 to (count _array_pos - 1) do { + [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_createUnit; + //_u setDamage (_array_dam select _i); + + if (btc_debug_log) then { + [format ["pos %1 in %2 ", _array_pos select _i], __FILE__, [false]] call btc_fnc_debug_message; }; - _start = _forEachIndex; - }; - (units _group) joinSilent _group; - private _special = "CARGO"; - - if !(_veh isKindOf "Plane") then { - _veh setPosATL (_array_veh select 1); - _veh setDir (_array_veh select 2); - }; - _veh setFuel (_array_veh select 3); -}; - -for "_i" from _start to (count _array_pos - 1) do { - [_group, _array_type select _i, _array_pos select _i, _special] call btc_fnc_createUnit; - //_u setDamage (_array_dam select _i); - - if (btc_debug_log) then { - [format ["pos %1 in %2 ", _array_pos select _i, getPos _u], __FILE__, [false]] call btc_fnc_debug_message; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/dlg.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/dlg.hpp index 1a33c6e53..0f6488821 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/dlg.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/dlg.hpp @@ -43,7 +43,7 @@ class TER_fpscounter class TXT_units: RscText { idc = 1002; - text = "UNITS:0 NOT-ON-SERVER:0 | GROUPS:0 | Patrol:0 Traffic:0"; + text = "DELAY:0s UNITS:0 NOT-ON-SERVER:0 | GROUPS:0 | Patrol:0 Traffic:0"; x = (0.5525 + 0.085) * safezoneW + safezoneX; y = 0.71 * safezoneH + safezoneY; w = (0.0590625 + 0.4) * safezoneW; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf index 81f81dd4b..7f94766e7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf @@ -35,7 +35,8 @@ if (isNull _display || !btc_debug_graph) exitWith { [10, objNull, "btc_units_owners"] remoteExecCall ["btc_fnc_int_ask_var", 2]; ["btc_patrol_active", objNull, "btc_patrol_active"] remoteExecCall ["btc_fnc_int_ask_var", 2]; ["btc_civ_veh_active", objNull, "btc_civ_veh_active"] remoteExecCall ["btc_fnc_int_ask_var", 2]; +["btc_delay_createUnit", objNull, "btc_delay_createUnitDebug"] remoteExecCall ["btc_fnc_int_ask_var", 2]; private _count_units = {(_x select 0) isKindOf "man"} count btc_units_owners; private _count_units_own = {((_x select 1) isEqualTo 2) && ((_x select 0) isKindOf "man")} count btc_units_owners; -_TXTunits ctrlSetText format ["UNITS:%1 NOT-ON-SERVER:%2 | GROUPS:%3 | Patrol:%4 Traffic:%5", _count_units, _count_units - _count_units_own, count allGroups, count btc_patrol_active, count btc_civ_veh_active]; +_TXTunits ctrlSetText format ["DELAY:%1s UNITS:%2 NOT-ON-SERVER:%3 | GROUPS:%4 | Patrol:%5 Traffic:%6", btc_delay_createUnitDebug, _count_units, _count_units - _count_units_own, count allGroups, count btc_patrol_active, count btc_civ_veh_active]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index df2a674ec..be2481dd7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -9,17 +9,18 @@ Parameters: _group - Group to store crews. [Group] _pos - Position of creation. [Array] _veh_type - Vehicle type. [String] + _code - Code to apply on vehicle after creation. [Code] _dir - Direction of spawn. [Number] _type_units - Array of available unit type for cargo. [Array] _type_divers - Units used for submarine. [Array] _type_crewmen - Array of available crews type. [Array] + _p_chem - Allow chemical propagation. [Boolean] Returns: - _veh - Vehicle created. [Object] Examples: (begin example) - _veh = [createGroup [btc_enemy_side, true], getPosATL player] call btc_fnc_mil_createVehicle; + [createGroup [btc_enemy_side, true], getPosATL player] call btc_fnc_mil_createVehicle; (end) Author: @@ -31,6 +32,7 @@ params [ ["_group", grpNull, [grpNull]], ["_pos", [0, 0, 0], [[]]], ["_veh_type", selectRandom btc_type_motorized, [""]], + ["_code", {}, [{}]], ["_dir", 0, [0]], ["_type_units", btc_type_units, [[]]], ["_type_divers", btc_type_divers, [[]]], @@ -39,27 +41,20 @@ params [ ]; private _needdiver = getText (configFile >> "CfgVehicles" >> _veh_type >> "simulation") isEqualTo "submarinex"; -if (_veh_type isKindOf "Van_02_vehicle_base_F") then { - _veh_type = "I_C_Van_02_transport_F"; // https://feedback.bistudio.com/T129141 -}; +_type_crewmen = [_type_crewmen, _type_divers select 0] select _needdiver; -private _veh = createVehicle [_veh_type, _pos, [], 0, "FLY"]; -if !(_veh_type isKindOf "Plane") then { - _veh setDir _dir; - _veh setVectorUp surfaceNormal position _veh; +private _units_type = []; +private _crewSeats = [_veh_type, false] call BIS_fnc_crewCount; +private _totalSeats = [_veh_type, true] call BIS_fnc_crewCount; +for "_i" from 0 to (_crewSeats - 1) do { + _units_type pushBack _type_crewmen }; -if (_p_chem) then { - _veh addEventHandler ["GetIn", { - [_this select 0, _this select 2] call btc_fnc_chem_propagate; - _this - }]; +for "_i" from _crewSeats to (_totalSeats - 1) do { + _units_type pushBack selectRandom _type_units; }; -private _units = [_veh, _group, false, "", [_type_crewmen, _type_divers select 0] select _needdiver] call BIS_fnc_spawnCrew; -_group selectLeader (driver _veh); -_units joinSilent _group; - -private _cargo = _veh emptyPositions "cargo"; -[_group, _pos, _cargo, _needdiver, _type_units, _type_divers] call btc_fnc_mil_createUnits; +[_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_createVehicle; -_veh +[{ + _this call btc_fnc_mil_unit_create; +}, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 7e6f4d6bb..3fefb9216 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -89,10 +89,11 @@ switch (_random) do { _pos = getPos selectRandom _roads; }; }; - private _veh = [_group, _pos, _veh_type] call btc_fnc_mil_createVehicle; - _veh setVariable ["btc_crews", _group]; - - [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; + [_group, _pos, _veh_type, { + params ["_veh", "_group"]; + _veh setVariable ["btc_crews", _group]; + [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; + }] call btc_fnc_mil_createVehicle; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf index 87bd091d6..0b38e23a4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf @@ -30,13 +30,11 @@ params [ ]; private _group = createGroup btc_enemy_side; -private _static = [_group, _pos, selectRandom _statics_type, _dir] call btc_fnc_mil_createVehicle; +[_group, _pos, selectRandom _statics_type, {}, _dir] call btc_fnc_mil_createVehicle; _group setBehaviour "COMBAT"; _group setCombatMode "RED"; if (btc_debug_log) then { - [format ["POS %1 _type %2", _pos, typeOf _static], __FILE__, [false]] call btc_fnc_debug_message; + [format ["POS %1", _pos], __FILE__, [false]] call btc_fnc_debug_message; }; - -_static diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index d63dd5893..9d23e9a88 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -52,7 +52,7 @@ switch (_typeOf_patrol) do { private _return_pos = [_pos, 10, 500, 13, false] call btc_fnc_findsafepos; - private _veh = [_group, _return_pos, _veh_type] call btc_fnc_mil_createVehicle; + [_group, _return_pos, _veh_type] call btc_fnc_mil_createVehicle; [_group, _dest, 60, "MOVE", "AWARE", "RED", "NORMAL", "NO CHANGE", "(group this) call btc_fnc_data_add_group;"] call CBA_fnc_addWaypoint; [_group, _dest, 60, "GETOUT"] call CBA_fnc_addWaypoint; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 2fea293ad..9739d792a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -70,12 +70,9 @@ private _markers = [_marker1, _marker2, _area]; private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; -private _vehs = []; private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; for "_i" from 0 to (1 + round random 1) do { - private _veh = [_group, _pos1, selectRandom _veh_types, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; - - _vehs pushBack _veh; + private _veh = [_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; @@ -126,6 +123,7 @@ waitUntil {sleep 5; (!(alive _captive) || (_captive inArea [getPosWorld btc_crea _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); +private _vehs = assignedVehicle leader _group; if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { deleteVehicle _trigger; [_markers, _vehs + [_group]] call btc_fnc_delete; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf index 76a5453ea..7ef23798c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf @@ -81,12 +81,10 @@ for "_i" from 1 to (1 + round random 2) do { //// Create checkpoint with static at _pos \\\\ _pos params ["_x", "_y", "_z"]; private _posStatic = [_x -2.39185*cos(-_direction) - 2.33984*sin(-_direction), _y + 2.33984 *cos(-_direction) -2.39185*sin(-_direction), _z]; - private _static = [_posStatic, _statics, _direction + 180] call btc_fnc_mil_create_static; - _static setPos _posStatic; + [_posStatic, _statics, _direction + 180] call btc_fnc_mil_create_static; private _posStatic = [_x + 2.72949*cos(-_direction) - -2.03857*sin(-_direction), _y -2.03857*cos(-_direction) +2.72949*sin(-_direction), _z]; - private _static = [_posStatic, _statics, _direction] call btc_fnc_mil_create_static; - _static setPos _posStatic; + [_posStatic, _statics, _direction] call btc_fnc_mil_create_static; _composition append ([_pos, _direction, _composition_checkpoint] call btc_fnc_create_composition); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 64142e887..060cdb2c1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -73,9 +73,7 @@ _group setVariable ["no_cache", true]; private _vehs = []; private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; for "_i" from 0 to (2 + round random 2) do { - private _veh = [_group, _pos1, selectRandom _veh_types, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; - - _vehs pushBack _veh; + [_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; @@ -95,6 +93,7 @@ waitUntil {sleep 5; (_taskID call BIS_fnc_taskCompleted || (_vehs select {canMov _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); +private _vehs = assignedVehicle leader _group; if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { [_markers, _vehs + [_group, _agent]] call btc_fnc_delete; }; From 21a1146c6f18e15ae3cf0e25b7a0f2ffeb758b6b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 8 Jan 2020 23:39:14 +0100 Subject: [PATCH 014/264] Use btc_fnc_createVehicle --- .../core/fnc/city/cleanUp.sqf | 1 - .../core/fnc/civ/create_patrol.sqf | 35 ++++++++----------- .../core/fnc/common/createUnit.sqf | 8 +++-- .../core/fnc/debug/graph.sqf | 2 +- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf index ffd5f9bca..397367ba2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf @@ -37,7 +37,6 @@ _toRemove append (allDead select { }); if (btc_delay_createUnit < 0.01) then { // Don't remove group during units creation. - [format ["btc_delay_createUnit = %1", btc_delay_createUnit], __FILE__, [btc_debug]] call btc_fnc_debug_message; _toRemove append (allGroups select { units _x select {alive _x} isEqualTo [] && !( diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index 2cfc07457..3bf090da2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -57,32 +57,25 @@ if (_roads isEqualTo []) then { _veh_type = selectRandom btc_civ_type_veh; }; -private _veh = createVehicle [_veh_type, _safe_pos, [], 0, "FLY"]; -[_veh, "", []] call BIS_fnc_initvehicle; - private _group = createGroup [civilian, true]; btc_civ_veh_active pushBack _group; _group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_civilian_id, btc_debug]; btc_civilian_id = btc_civilian_id - 1; -(selectRandom btc_civ_type_units) createUnit [_safe_pos, _group, "this moveinDriver _veh; this assignAsDriver _veh;"]; -_veh setVariable ["btc_crews", _group]; - -[_group] call btc_fnc_civ_unit_create; - -[_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; -[_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; -[_veh, "GetOut", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; -[_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; -if (_p_chem) then { - _veh addEventHandler ["GetIn", { - [_this select 0, _this select 2] call btc_fnc_chem_propagate; - _this - }]; -}; - -[_group, [_start_city, _active_city], _area, _pos_isWater] call btc_fnc_patrol_init; -[[_group]] call btc_fnc_set_groupsOwner; +[_group, _veh_type, [selectRandom btc_civ_type_units], _safe_pos, { + params ["_veh", "_group"]; + _veh setVariable ["btc_crews", _group]; + [_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; + [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; + [_veh, "GetOut", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; + [_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; +}] call btc_fnc_createVehicle; + +[{ + [_this select 0] call btc_fnc_civ_unit_create; + _this call btc_fnc_patrol_init; + [[_this select 0]] call btc_fnc_set_groupsOwner; +}, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit] call CBA_fnc_waitAndExecute; true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf index 000bb6a1e..47bc7d962 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf @@ -6,9 +6,11 @@ Description: Create unit when all previous units have been created. btc_delay_createUnit define the time (in second) when the unit will be created. Parameters: - _group - [Group] - _unit_type - [Array] - _pos - [Array] + _group - Group to add unit. [Group] + _unit_type - Type of units to create. [Array] + _pos - Position of creation. [Array] + _special - Unit placement special. [String] + _vehicle - Vehicle where unit can be load in. [Object] Returns: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/graph.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/graph.sqf index 170b34499..49ddd1719 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/graph.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/graph.sqf @@ -34,6 +34,6 @@ private _maxFps = 60; private _maxWidth = ctrlPosition _GRPframes select 2; private _width = _maxWidth/300; -[btc_fnc_debug_fps, 0.5, [_display, _maxFps, _maxWidth, _width, _barArray, _GRPframes, _TXTfps]] call CBA_fnc_addPerFrameHandler; +[btc_fnc_debug_fps, [0.5, 0.1] select (isServer), [_display, _maxFps, _maxWidth, _width, _barArray, _GRPframes, _TXTfps]] call CBA_fnc_addPerFrameHandler; [btc_fnc_debug_units, 1, [_display, _TXTunits]] call CBA_fnc_addPerFrameHandler; From 9d0d145d77977c623913e02d9210c81fb35dfe09 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 11 Jan 2020 09:54:28 +0100 Subject: [PATCH 015/264] migrate to delay folder --- .../core/fnc/civ/create_patrol.sqf | 2 +- .../core/fnc/civ/populate.sqf | 2 +- .../core/fnc/compile.sqf | 6 ++++-- .../core/fnc/data/spawn_group.sqf | 4 ++-- .../core/fnc/debug/units.sqf | 2 +- .../core/fnc/{common => delay}/createUnit.sqf | 15 +++++++-------- .../core/fnc/{common => delay}/createVehicle.sqf | 14 +++++++------- .../core/fnc/mil/createUnits.sqf | 2 +- .../core/fnc/mil/createVehicle.sqf | 2 +- 9 files changed, 25 insertions(+), 24 deletions(-) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/{common => delay}/createUnit.sqf (75%) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/{common => delay}/createVehicle.sqf (92%) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index 3bf090da2..695686761 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -70,7 +70,7 @@ btc_civilian_id = btc_civilian_id - 1; [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; [_veh, "GetOut", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; [_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; -}] call btc_fnc_createVehicle; +}] call btc_fnc_delay_createVehicle; [{ [_this select 0] call btc_fnc_civ_unit_create; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index 9107809e9..213ba1525 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -53,7 +53,7 @@ for "_i" from 1 to _n do { private _group = createGroup civilian; _group setVariable ["btc_data_inhouse", [_pos]]; [_group, _pos] call btc_fnc_civ_addWP; - [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_createUnit; + [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_delay_createUnit; [{ _this call btc_fnc_civ_unit_create; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 5806552f4..bd5c3493e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -22,8 +22,6 @@ if (isServer) then { btc_fnc_typeOf = compile preprocessFileLineNumbers "core\fnc\common\typeOf.sqf"; btc_fnc_getVehProperties = compile preprocessFileLineNumbers "core\fnc\common\getVehProperties.sqf"; btc_fnc_setVehProperties = compile preprocessFileLineNumbers "core\fnc\common\setVehProperties.sqf"; - btc_fnc_createUnit = compile preprocessFileLineNumbers "core\fnc\common\createUnit.sqf"; - btc_fnc_createVehicle = compile preprocessFileLineNumbers "core\fnc\common\createVehicle.sqf"; //CHEM btc_fnc_chem_checkLoop = compile preprocessFileLineNumbers "core\fnc\chem\checkLoop.sqf"; @@ -67,6 +65,10 @@ if (isServer) then { btc_fnc_db_saveObjectStatus = compile preprocessFileLineNumbers "core\fnc\db\saveObjectStatus.sqf"; btc_fnc_db_loadCargo = compile preprocessFileLineNumbers "core\fnc\db\loadcargo.sqf"; + //DELAY + btc_fnc_delay_createUnit = compile preprocessFileLineNumbers "core\fnc\delay\createUnit.sqf"; + btc_fnc_delay_createVehicle = compile preprocessFileLineNumbers "core\fnc\delay\createVehicle.sqf"; + //EH btc_fnc_eh_veh_add_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_add_respawn.sqf"; btc_fnc_eh_veh_killed = compile preprocessFileLineNumbers "core\fnc\eh\veh_killed.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 3d33bd9be..745c70182 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -56,10 +56,10 @@ if (_type isEqualTo 7) exitWith { private _group = createGroup _side; if (_type isEqualTo 1) then { - [_group, _array_veh select 0, _array_type, _array_veh select 1, {}, _array_veh select 2, _array_veh select 3] call btc_fnc_createVehicle; + [_group, _array_veh select 0, _array_type, _array_veh select 1, {}, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; } else { for "_i" from 0 to (count _array_pos - 1) do { - [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_createUnit; + [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; //_u setDamage (_array_dam select _i); if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf index 7f94766e7..d03606344 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/units.sqf @@ -39,4 +39,4 @@ if (isNull _display || !btc_debug_graph) exitWith { private _count_units = {(_x select 0) isKindOf "man"} count btc_units_owners; private _count_units_own = {((_x select 1) isEqualTo 2) && ((_x select 0) isKindOf "man")} count btc_units_owners; -_TXTunits ctrlSetText format ["DELAY:%1s UNITS:%2 NOT-ON-SERVER:%3 | GROUPS:%4 | Patrol:%5 Traffic:%6", btc_delay_createUnitDebug, _count_units, _count_units - _count_units_own, count allGroups, count btc_patrol_active, count btc_civ_veh_active]; +_TXTunits ctrlSetText format ["DELAY:%1s UNITS:%2 NOT-ON-SERVER:%3 | GROUPS:%4 | Patrol:%5 Traffic:%6", [btc_delay_createUnitDebug, 0] select (btc_delay_createUnitDebug < 0.001), _count_units, _count_units - _count_units_own, count allGroups, count btc_patrol_active, count btc_civ_veh_active]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf similarity index 75% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf index 47bc7d962..0a72396a2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_createUnit +Function: btc_fnc_delay_createUnit Description: Create unit when all previous units have been created. btc_delay_createUnit define the time (in second) when the unit will be created. @@ -16,7 +16,7 @@ Returns: Examples: (begin example) - [createGroup (side player), typeOf player, getPosATL player] call btc_fnc_createUnit; + [createGroup (side player), typeOf player, getPosATL player] call btc_fnc_delay_createUnit; (end) Author: @@ -24,7 +24,7 @@ Author: ---------------------------------------------------------------------------- */ -btc_delay_createUnit = btc_delay_createUnit + 1; +btc_delay_createUnit = btc_delay_createUnit + 0.3; [{ params [ @@ -35,10 +35,9 @@ btc_delay_createUnit = btc_delay_createUnit + 1; ["_vehicle", objNull, [objNull]] ]; - if (btc_debug_log) then { - if (isNull _group) then { - [format ["isNull _group _this = %1", _this], __FILE__, [btc_debug]] call btc_fnc_debug_message; - }; + if (isNull _group) exitWith { + [format ["isNull _group _this = %1", _this], __FILE__, [btc_debug]] call btc_fnc_debug_message; + btc_delay_createUnit = btc_delay_createUnit - 0.3; }; private _unit = _group createUnit [_unit_type, _pos, [], 0, _special]; @@ -47,5 +46,5 @@ btc_delay_createUnit = btc_delay_createUnit + 1; }; [_unit] joinSilent _group; - btc_delay_createUnit = btc_delay_createUnit - 1; + btc_delay_createUnit = btc_delay_createUnit - 0.3; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf similarity index 92% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index 3a32d4f8e..9a916a1cf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_createVehicle +Function: btc_fnc_delay_createVehicle Description: Create vehicle and crew when all previous units have been created. btc_delay_createUnit define the time (in second) when the vehicle and crew will be created. @@ -19,8 +19,8 @@ Returns: Examples: (begin example) - [createGroup (side player), "O_G_Van_01_transport_F", (btc_type_units + btc_type_units) select [0, ["O_G_Van_01_transport_F",true] call BIS_fnc_crewCount], player getPos [10, direction player]] call btc_fnc_createVehicle; - [createGroup (side player), "B_Heli_Transport_01_camo_F", (btc_type_units + btc_type_units) select [0, ["B_Heli_Transport_01_camo_F",true] call BIS_fnc_crewCount], player getPos [10, direction player]] call btc_fnc_createVehicle; + [createGroup (side player), "O_G_Van_01_transport_F", (btc_type_units + btc_type_units) select [0, ["O_G_Van_01_transport_F",true] call BIS_fnc_crewCount], player getPos [10, direction player]] call btc_fnc_delay_createVehicle; + [createGroup (side player), "B_Heli_Transport_01_camo_F", (btc_type_units + btc_type_units) select [0, ["B_Heli_Transport_01_camo_F",true] call BIS_fnc_crewCount], player getPos [10, direction player]] call btc_fnc_delay_createVehicle; (end) Author: @@ -28,7 +28,7 @@ Author: ---------------------------------------------------------------------------- */ -btc_delay_createUnit = btc_delay_createUnit + 1; +btc_delay_createUnit = btc_delay_createUnit + 0.3; [{ params [ @@ -86,11 +86,11 @@ btc_delay_createUnit = btc_delay_createUnit + 1; private _crews_and_turret = _crews + _turretCount; for "_i" from _crews to ((_crews_and_turret min _numberOfUnits) - 1) do { - [_group, _units_type select _i, _position, "CAN_COLLIDE", _veh] call btc_fnc_createUnit; + [_group, _units_type select _i, _position, "CAN_COLLIDE", _veh] call btc_fnc_delay_createUnit; }; for "_i" from _crews_and_turret to (_numberOfUnits - 1) do { - [_group, _units_type select _i, _position] call btc_fnc_createUnit; + [_group, _units_type select _i, _position] call btc_fnc_delay_createUnit; }; - btc_delay_createUnit = btc_delay_createUnit - 1; + btc_delay_createUnit = btc_delay_createUnit - 0.3; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf index e76a1b5c5..f83bcabc5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf @@ -41,7 +41,7 @@ for "_i" from 1 to _number do { selectRandom _type_units; }; - [_group, _unit_type, _pos] call btc_fnc_createUnit; + [_group, _unit_type, _pos] call btc_fnc_delay_createUnit; }; [{ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index be2481dd7..e0e39d680 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -53,7 +53,7 @@ for "_i" from _crewSeats to (_totalSeats - 1) do { _units_type pushBack selectRandom _type_units; }; -[_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_createVehicle; +[_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle; [{ _this call btc_fnc_mil_unit_create; From a33bfb1f8ad5ef099838a25a60c383285072a82d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 12 Jan 2020 15:20:48 +0100 Subject: [PATCH 016/264] fix line --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 3fea86928..071f82bee 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -1,6 +1,5 @@ /* ---------------------------------------------------------------------------- - Function: btc_fnc_data_spawn_group Description: @@ -28,6 +27,7 @@ Examples: Author: Giallustio + ---------------------------------------------------------------------------- */ params [ From 50cf8356592eb960de8b3a148cf9fb254ddbfaec Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 12 Jan 2020 18:27:48 +0100 Subject: [PATCH 017/264] FIX: addwaypoint --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 745c70182..82198225f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -85,7 +85,7 @@ if (_type isEqualTo 1) then { if !(_side isEqualTo civilian && {vehicle leader _group isEqualTo leader _group}) then { if (count (_array_wp select 1) > 1) then { { - [_group, _x select 0, 0, _x select 1, _x select 5, _x select 4, _x select 2, _x select 3, "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; + [_group, _x select 0, -1, _x select 1, _x select 5, _x select 4, _x select 2, _x select 3, "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; } forEach (_array_wp select 1); _group setCurrentWaypoint [_group, _array_wp select 0]; }; From 74c99ac5632b264f84fa87bf5474e68b0571d825 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 19 Jan 2020 11:38:13 +0100 Subject: [PATCH 018/264] Tweak header --- .../core/fnc/delay/createVehicle.sqf | 5 +++-- .../core/fnc/mil/createVehicle.sqf | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index 9a916a1cf..b3c2a2353 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -42,8 +42,9 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ["_p_chem", btc_p_chem, [false]] ]; - private _veh = createVehicle [_vehicle_type, _position, [], 0, ["CAN_COLLIDE", "FLY"] select (_vehicle_type isKindOf "Air")]; - if !(_vehicle_type isKindOf "Air") then { + private _isAir = _vehicle_type isKindOf "Air"; + private _veh = createVehicle [_vehicle_type, _position, [], 0, ["CAN_COLLIDE", "FLY"] select _isAir]; + if !(_isAir) then { _veh setDir _direction; _veh setVectorUp surfaceNormal position _veh; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index e0e39d680..4772c2412 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -20,7 +20,7 @@ Returns: Examples: (begin example) - [createGroup [btc_enemy_side, true], getPosATL player] call btc_fnc_mil_createVehicle; + [createGroup [btc_enemy_side, true], player getPos [10, direction player]] call btc_fnc_mil_createVehicle; (end) Author: From c473949e65fe9f91ac1868fea79b485c7390fc9c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 2 Feb 2020 17:07:34 +0100 Subject: [PATCH 019/264] Fix syntaxe error CBA_fnc_waitAndExecute --- .../core/fnc/log/create_apply.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf index 88fe27394..6ac9b2ba2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf @@ -23,7 +23,7 @@ private _class = lbData [72, lbCurSel 72]; closeDialog 0; [{ - params ["_class", "", [""]]; + params [["_class", "", [""]]]; if (_class isEqualTo btc_supplies_cargo) then { btc_supplies_mat params ["_food", "_water"]; @@ -40,4 +40,4 @@ closeDialog 0; } else { [_class] remoteExecCall ["btc_fnc_log_create_s", 2]; }; -}, 0.2, _class] call CBA_fnc_waitAndExecute; +}, [_class], 0.2] call CBA_fnc_waitAndExecute; From be32d978548801d01ad0120901f2f16c1a76c715 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 7 Mar 2020 15:47:31 +0100 Subject: [PATCH 020/264] add bi respawn --- .../core/fnc/common/strategicMapOpen.sqf | 701 ------------------ .../core/fnc/compile.sqf | 3 - .../core/fnc/eh/player.sqf | 13 - .../core/fnc/eh/player_respawn.sqf | 1 - .../core/fnc/fob/create_s.sqf | 5 +- .../core/fnc/fob/init.sqf | 50 -- .../core/fnc/fob/killed.sqf | 1 + .../core/fnc/fob/redeploy.sqf | 142 ---- .../core/fnc/int/add_actions.sqf | 2 +- .../core/init_server.sqf | 8 +- .../description.ext | 5 + =BTC=co@30_Hearts_and_Minds.Altis/mission.sqm | 4 +- .../mission_RHSUS_Altis.sqm | 4 +- .../mission_RHSUS_Tanoa.sqm | 4 +- 14 files changed, 18 insertions(+), 925 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/strategicMapOpen.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/init.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/strategicMapOpen.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/strategicMapOpen.sqf deleted file mode 100644 index 8f3f45527..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/strategicMapOpen.sqf +++ /dev/null @@ -1,701 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_strategicMapOpen - -Description: - Show strategic map with the possibility to navigate freely on the map. - -Parameters: - 0: DISPLAY - parent display. When empty, mission display is used. - 1: ARRAY - default view position in format [x,y,y] or [x,y] - 2: ARRAY - list of missions in format: - 0: ARRAY - mission position in format [x,y,y] or [x,y] - 1: CODE - expression executed when user clicks on mission icon - 2: STRING - mission name - 3: STRING - short description - 4: STRING - name of mission's player - 5: STRING - path to overview image - 6: NUMBER - size multiplier, 1 means default size - 7: ARRAY - parameters for the -on click- code; referenced from the script as (_this select 9) - 3: ARRAY - list of ORBAT groups in format: - 0: ARRAY - group position in format [x,y,y] or [x,y] - 1: CONFIG - preview CfgORBAT group - 2: CONFIG - topmost displayed CfgORBAT group - 3: ARRAY - list of allowed tags - 4: NUMBER - maximum number of displayed tiers - 4: ARRAY - list of markers revealed in strategic map (will be hidden when map is closed) - 5: ARRAY - list of custom images in format: - 0: STRING - texture path - 1: ARRAY - color in format [R,G,B,A] - 2: ARRAY - image position - 3: NUMBER - image width (in metres) - 4: NUMBER - image height (in metres) - 5: NUMBER - image angle (in degrees) - 6: STRING - text displayed next to the image - 7: BOOL - true to display shadow - 6: NUMBER - value in range <0-1> defining weather on strategic map (i.e. density of clouds) - 7: BOOL - true for night version of strategic map (darker with blue tone) - 8: NUMBER - default map scale coeficient (1 is automatic scale) - 9: BOOL - true to enable simulation while the map is opened (default: false) - 10: STRING - bottom bar action label text (default: "Select a mission") - 11: BOOL - true to show icon label as a mission name (default: true) - 12: STRING - path to mission icon texture (default: "\A3\Ui_f\data\Map\GroupIcons\badge_rotate_%1_gs.paa") - %1 - animation frame from 0-6 (optional) - %2 - index from 1-9 (optional) - -Returns: - _display - RscDisplayStrategicMap [Display] - -Examples: - (begin example) - _result = [] call btc_fnc_strategicMapOpen; - (end) - -Author: - Karel Moricky - ----------------------------------------------------------------------------- */ - -private ["_parentDisplayDefault","_parentDisplay","_mapCenter","_missions","_ORBAT","_markers","_images","_overcast","_scale","_defaultScale","_simulationEnabled","_displayClass","_display","_playerIcon","_playerColor","_cloudTextures","_cloudsGrid","_cloudsMax","_cloudsSize","_map","_fade","_actionText","_missionIcon","_showIconText"]; -disableserialization; - -_parentDisplayDefault = switch false do { - case isnull (finddisplay 37): {finddisplay 37}; //--- GetReady - case isnull (finddisplay 52): {finddisplay 52}; //--- ServerGetReady - case isnull (finddisplay 53): {finddisplay 53}; //--- ClientGetReady - default {[] call bis_fnc_displayMission}; //--- Mission -}; -_parentDisplay = _this param [0,_parentDisplayDefault,[displaynull]]; -_mapCenter = _this param [1,position player]; -_mapCenter = _mapCenter call bis_fnc_position; -_missions = _this param [2,[],[[]]]; -_ORBAT = _this param [3,[],[[]]]; -_markers = _this param [4,[],[[]]]; -_images = _this param [5,[],[[]]]; -_overcast = (_this param [6,overcast,[0]]) max 0 min 1; -_isNight = _this param [7,false,[false]]; -_defaultScale = _this param [8,1,[0]]; -_simulationEnabled = _this param [9,false,[false]]; -_actionText = _this param [10,localize "str_a3_rscdisplaystrategicmap_missions",[""]]; -_showIconText = _this param [11,true,[true]]; -_missionIcon = _this param [12,"\A3\Ui_f\data\Map\GroupIcons\badge_rotate_%1_gs.paa",[""]]; - -BIS_fnc_strategicMapOpen_showIconText = _showIconText; -BIS_fnc_strategicMapOpen_missionIcon = _missionIcon; - -//--- Calculate terrain size and outside color -_mapSize = worldSize; -BIS_fnc_strategicMapOpen_mapSize = _mapSize; -BIS_fnc_strategicMapOpen_isNight = _isNight; - -_scale = 3500 / _mapSize / safezoneH; -_scale = _scale * (_defaultScale max 0 min 1); -_maxSatelliteAlpha = if (_isNight) then {0.75} else {1}; - -_colorOutside = configfile >> "CfgWorlds" >> worldname >> "OutsideTerrain" >> "colorOutside"; -_colorOutside = if (isarray _colorOutside) then { - _colorOutside call bis_fnc_colorCOnfigToRGBA; -} else { - ["colorOutside param is mission in ""CfgWorlds"" >> ""%1"" >> ""OutsideTerrain""",worldname] call bis_fnc_error; - [0,0,0,1] -}; - -with uinamespace do { - RscDisplayStrategicMap_scaleMin = 0; - RscDisplayStrategicMap_scaleMax = 1; - RscDisplayStrategicMap_scaleDefault = _scale; - RscDisplayStrategicMap_maxSatelliteAlpha = _maxSatelliteAlpha; - - RscDisplayStrategicMap_colorOutside_R = _colorOutside select 0; - RscDisplayStrategicMap_colorOutside_G = _colorOutside select 1; - RscDisplayStrategicMap_colorOutside_B = _colorOutside select 2; -}; - -//--- Create the viewer -_displayClass = if (_simulationEnabled) then {"RscDisplayStrategicMapSimulation"} else {"RscDisplayStrategicMap"}; -_parentDisplay createdisplay _displayClass; -_display = finddisplay 506; -if (isnull _display) exitwith {"Unable to create 'RscDisplayStrategicMap' display." call (uinamespace getvariable "bis_fnc_error"); displaynull}; - -//--- Life, calculations and everything -startloadingscreen ["","RscDisplayLoadingBlack"]; - -BIS_fnc_strategicMapOpen_player = player; -//selectnoplayer; - -//--- Process ORBAT -BIS_fnc_strategicMapOpen_ORBAT = []; -_onClick = []; -{ - private ["_pos","_class","_parent","_tags","_tiers","_classParams","_text","_texture","_size","_color","_sizeLocal","_sizeParams","_sizeTexture"]; - _pos = _x param [0,player]; - _pos = _pos call bis_fnc_position; - - _class = _x param [1,configfile >> "CfgORBAT",[configfile]]; - _parent = _x param [2,_class,[configfile]]; - _tags = _x param [3,[],[[]]]; - _tiers = _x param [4,-1,[0]]; - - _classParams = _class call bis_fnc_ORBATGetGroupParams; - _text = _classParams select ("text" call bis_fnc_ORBATGetGroupParams); - _texture = _classParams select ("texture" call bis_fnc_ORBATGetGroupParams); - _size = _classParams select ("size" call bis_fnc_ORBATGetGroupParams); - _color = _classParams select ("color" call bis_fnc_ORBATGetGroupParams); - - _iconSize = sqrt (_size + 1) * 32; - - //--- Group size - //_sizeLocal = _size max 0 min (count (BIS_fnc_ORBATGetGroupParams_sizes) - 1); - //_sizeParams = BIS_fnc_ORBATGetGroupParams_sizes select _sizeLocal; - //_sizeTexture = _sizeParams select 0; - - BIS_fnc_strategicMapOpen_ORBAT set [ - count BIS_fnc_strategicMapOpen_ORBAT, - [ - _class, - [_parent,_tags,_tiers], - [ - _texture, - _color, - _pos, - _iconSize, - _iconSize, - 0, - "", - false - ], - _classParams - ] - ]; - - //--- Create shortcut from ORBAT viewer - _onClick set [count _onClick,_class]; - _onClick set [count _onClick,{[_this select 0,1] spawn bis_fnc_strategicMapAnimate; true}]; -} foreach _ORBAT; -BIS_fnc_strategicMapOpen_ORBATonClick = _onClick; - -//--- Process Missions -BIS_fnc_strategicMapOpen_missions = []; -if (count _missions > 0) then { - _playerIcon = gettext (configfile >> "CfgInGameUI" >> "IslandMap" >> "iconPlayer"); - _playerColor = (getarray (configfile >> "cfgingameui" >> "islandmap" >> "colorMe")) call BIS_fnc_colorRGBAtoHTML; - - _ctrlBackground = _display displayctrl 1000; - _ctrlBackground ctrlshow false; - - _ctrlMissions = _display displayctrl 1500; - _lbadd = _ctrlMissions lbadd _actionText; - _ctrlMissions lbsetvalue [_lbadd,-1]; - _ctrlMissions lbsetcolor [_lbadd,[1,1,1,0.5]]; - { - private ["_pos","_code","_title","_description","_player","_picture","_iconSize","_infoText","_codeParams"]; - _pos = _x param [0,player]; - _pos = _pos call bis_fnc_position; - - _code = _x param [1,{},[{}]]; - _title = _x param [2,"ERROR: MISSING TITLE",[""]]; - _description = _x param [3,"",[""]]; - _player = _x param [4,"",[""]]; - _picture = _x param [5,"",[""]]; - _iconSize = _x param [6,1,[1]]; - _codeParams = _x param [7,[],[[]]]; - - _infoText = _title; - if (_player != "") then {_infoText = _infoText + format ["
-
%1",_player,_playerIcon,_playerColor];}; - if (_description != "") then {_infoText = _infoText + format ["
-
%1",_description];}; - //if (_picture != "") then {_infoText = _infoText + format ["
",_picture];}; - - BIS_fnc_strategicMapOpen_missions set [ - count BIS_fnc_strategicMapOpen_missions, - [ - _pos, - _code, - _title, - _iconSize, - _picture, - 0, - 0, - 0, - _infoText, - _codeParams - ] - ]; - - _lbadd = _ctrlMissions lbadd format ["%1 (%2/%3)",_title,_foreachindex + 1,count _missions]; - _ctrlMissions lbsetvalue [_lbAdd,_foreachindex]; - - } foreach _missions; - - _ctrlMissions lbsetcursel 0; - _ctrlMissions ctrladdeventhandler [ - "lbselchanged", - " - _ctrlMissions = _this select 0; - _cursel = _this select 1; - if ((_ctrlMissions lbvalue 0) < 0) exitwith {_ctrlMissions lbdelete 0; _ctrlMissions lbsetcursel 0;}; - _mission = BIS_fnc_strategicMapOpen_missions select (_ctrlMissions lbvalue _cursel); - [_mission select 0,1] spawn bis_fnc_strategicmapanimate; - " - ]; -}; - -//--- Process Images -BIS_fnc_strategicMapOpen_images = []; -{ - private ["_texture","_color","_pos","_w","_h","_dir","_text","_shadow"]; - _texture = _x param [0,"#(argb,8,8,3)color(0,0,0,0)",[""]]; - _color = _x param [1,[1,1,1,1],[[]]]; - _pos = _x param [2,position player]; - _w = _x param [3,0,[0]]; - _h = _x param [4,0,[0]]; - _dir = _x param [5,0,[0]]; - _text = _x param [6,"",[""]]; - _shadow = _x param [7,false,[false]]; - - _pos = _pos call bis_fnc_position; - _color = _color call bis_fnc_colorConfigToRGBA; - _coef = (0.182 * safezoneH); //--- Magic constant to make kilometer a kilometer - _w = _w * _coef; - _h = _h * _coef; - - BIS_fnc_strategicMapOpen_images set [ - count BIS_fnc_strategicMapOpen_images, - [_texture,_color,_pos,_w,_h,_dir,_text,_shadow] - ]; -} foreach _images; - -//--- Random clouds -_cloudTextures = [ - "\A3\data_f\mrak_01_ca.paa", - "\A3\data_f\mrak_02_ca.paa", - "\A3\data_f\mrak_03_ca.paa", - "\A3\data_f\mrak_04_ca.paa" -]; -_cloudsGrid = 500; -_cloudsMax = (_mapSize / _cloudsGrid) * _overcast; -_cloudsSize = (_cloudsGrid / 2) + (_cloudsGrid * _overcast); -BIS_fnc_strategicMapOpen_overcast = _overcast; -BIS_fnc_strategicMapOpen_clouds = []; - -for "_i" from 1 to (_cloudsMax) do { - BIS_fnc_strategicMapOpen_clouds set [ - count BIS_fnc_strategicMapOpen_clouds, - [ - _cloudTextures call bis_fnc_selectrandom, - (random _mapSize), - ((_mapSize / _cloudsMax) * _i), - random 360, - _cloudsSize + (_cloudsSize * _overcast), - [1,1,1,0.25] - ] - ]; -}; - - -BIS_fnc_strategicMapOpen_indexSizeTexture = ("sizeTexture" call bis_fnc_ORBATGetGroupParams); -BIS_fnc_strategicMapOpen_indexTextureSize = ("textureSize" call bis_fnc_ORBATGetGroupParams); - -BIS_fnc_strategicMapOpen_draw = { - scriptname "bis_fnc_strategicMapOpen - Draw"; - _map = _this select 0; - _mapSize = BIS_fnc_strategicMapOpen_mapSize / 2; - _display = ctrlparent _map; - _time = diag_ticktime; - - //_tooltip = (ctrlparent _map) displayctrl 2350; - //_tooltip ctrlsetfade 1; - //_tooltip ctrlcommit 0; - - _mousePos = _map ctrlmapscreentoworld BIS_fnc_strategicMapOpen_mousePos; - //_mouseLimit = BIS_fnc_strategicMapOpen_mapSize / 3400; - _mouseLimit = 2.5 / safezoneh; - _selected = []; - - //--- Cross grid - _map drawRectangle [ - [_mapSize,_mapSize,0], - _mapSize, - _mapSize, - 0, - [1,1,1,0.42], - "\A3\Ui_f\data\GUI\Rsc\RscDisplayStrategicMap\cross_ca.paa" - ]; - - //--- Images - { - _map drawicon _x; - } foreach BIS_fnc_strategicMapOpen_images; - - //--- ORBAT groups - { - _class = _x select 0; - _iconParams = +(_x select 2); - _classParams = +(_x select 3); - - _pos = _iconParams select 2; - _iconSize = _iconParams select 3; - - if (((_iconParams select 2) distance _mousePos) < (_mouseLimit * _iconSize)) then { - _iconParams set [3,(_iconParams select 3) * 1.2]; - _iconParams set [4,(_iconParams select 4) * 1.2]; - _selected = _x; - }; - - _textureSize = _classParams select BIS_fnc_strategicMapOpen_indexTextureSize; - _iconSizeParams = +_iconParams; - _iconParams set [3,(_iconParams select 3) * _textureSize]; - _iconParams set [4,(_iconParams select 4) * _textureSize]; - - _map drawIcon _iconParams; - - //--- Draw size texture - _size = _classParams select 5; - if (_size >= 0) then { - _sizeTexture = _classParams select BIS_fnc_strategicMapOpen_indexSizeTexture; - _iconSizeParams set [0,_sizeTexture]; - _map drawIcon _iconSizeParams; - }; - - } foreach BIS_fnc_strategicMapOpen_ORBAT; - - //--- Clouds - _cloudSpeed = sin _time * (1138 + 2000 * BIS_fnc_strategicMapOpen_overcast); - { - _texture = _x select 0; - _posX = _x select 1; - _posY = _x select 2; - _dir = _x select 3; - _size = _x select 4; - _color = _x select 5; - - _map drawIcon [ - _texture, - _color, - [ - _posX + _cloudSpeed, - _posY - ], - _size, - _size, - _dir + (_time * _foreachindex) / (count BIS_fnc_strategicMapOpen_clouds * 3), - "", - false - ]; - } foreach BIS_fnc_strategicMapOpen_clouds; - - //--- Missions - _textureAnimPhase = abs(6 - floor (_time * 16) % 12); - { - _pos = _x select 0; - _title = _x select 2; - _size = (_x select 3) * 32; - _dir = 0; - _alpha = 0.75; - _texture = format [BIS_fnc_strategicMapOpen_missionIcon,_textureAnimPhase,_foreachindex + 1]; - - //--- Icon is under cursor - if ((_pos distance _mousePos) < (_mouseLimit * _size)) then { - _size = _size * 1.2; - _alpha = 1; - _selected = _x; - }; - - //--- Outside of the screen area - _mappos = _map ctrlmapworldtoscreen _pos; - _mapposX = _mappos select 0; - _mapposY = _mappos select 1; - - _borderLeft = safezoneX; - _borderRight = safezoneX + safezoneW; - _borderTop = safezoneY; - _borderBottom = safezoneY + safezoneH; - - if ( - _mapposX < _borderLeft || _mapposX > _borderRight - || - _mapposY < _borderTop || _mapposY > _borderBottom - ) then { - _texture = gettext (configfile >> "CfgInGameUI" >> "Cursor" >> "outArrow"); - _mapposX = _mapposX max safezoneX min (safezoneX + safezoneW); - _mapposY = _mapposY max safezoneY min (safezoneY + safezoneH); - _title = ""; - - _offset = (_size / 1200); - _offsetDefX = _offset; - _offsetDefY = _offset * 4/3; - _offsetX = 0; - _offsetY = 0; - _dir = -([[0.5,0.5],_mappos] call bis_fnc_dirto) - 90; - - switch (true) do { - case (_mapposX <= _borderLeft): { - _offsetX = +_offsetDefX; - _mapposY = _mapposY min (_borderBottom - _offsetDefY) max (_borderTop + _offsetDefY); - }; - case (_mapposX >= _borderRight): { - _offsetX = -_offsetDefX; - _mapposY = _mapposY min (_borderBottom - _offsetDefY) max (_borderTop + _offsetDefY); - }; - case (_mapposY <= _borderTop): { - _offsetY = +_offsetDefY; - _mapposX = _mapposX min (_borderRight - _offsetDefX) max (_borderLeft + _offsetDefX); - }; - case (_mapposY >= _borderBottom): { - _offsetY = -_offsetDefY; - _mapposX = _mapposX min (_borderRight - _offsetDefX) max (_borderLeft + _offsetDefX); - }; - }; - - _pos = _map ctrlmapscreentoworld [ - _mapposX + _offsetX, - _mapposY + _offsetY - ]; - }; - - _map drawIcon [ - _texture, - [1,1,1,_alpha], - _pos, - _size, - _size, - _dir, - if (BIS_fnc_strategicMapOpen_showIconText) then {" " + _title} else {""}, - 2, - 0.08, - "PuristaBold" - ]; - } foreach BIS_fnc_strategicMapOpen_missions; - - //--- Night - if (BIS_fnc_strategicMapOpen_isNight) then { - _map drawRectangle [ - [_mapSize,_mapSize,0], - 99999, - 99999, - 0, - [0,0.05,0.2,0.42], - "#(argb,8,8,3)color(1,1,1,1)" - ]; - }; - - //--- Tooltip - if (count _selected > 0 && !BIS_fnc_strategicMapOpen_mouseClickDisable) then { - switch (count _selected) do { - - //--- ORBAT - case 4: { - _class = _selected select 0; - _classParams = _selected select 3; - - [_classParams,_display,BIS_fnc_strategicMapOpen_mousePos] call bis_fnc_ORBATTooltip; - }; - - //--- Mission - case 10; - case 9: { - [_selected,_display,BIS_fnc_strategicMapOpen_mousePos] call bis_fnc_ORBATTooltip; - }; - }; - } else { - [[],_display] call bis_fnc_ORBATTooltip; - }; - _info ctrlcommit 0; - BIS_fnc_strategicMapOpen_selected = _selected; -}; - -//--- Mouse click on icon -BIS_fnc_strategicMapOpen_mouseClickDisable = false; -BIS_fnc_strategicMapOpen_selected = []; -BIS_fnc_strategicMapOpen_mousePos = [0,0]; -BIS_fnc_strategicMapOpen_mouse = { - BIS_fnc_strategicMapOpen_mousePos = [_this select 1,_this select 2]; -}; - -#define DIK_H 0x23 -#define DIK_NUMPAD5 0x4C - -BIS_fnc_strategicMapOpen_keyDown = { - _display = _this select 0; - _key = _this select 1; - - //--- H - switch _key do { - case DIK_H: { - _fade = ceil ctrlfade (_display displayctrl 2); - _fade = (_fade + 1) % 2; - { - (_display displayctrl _x) ctrlsetfade _fade; - (_display displayctrl _x) ctrlcommit 0.3; - } foreach [2,1000,1500,2350,2301]; - }; - case DIK_NUMPAD5: { - [BIS_fnc_strategicMapOpen_mapCenter,1] spawn bis_fnc_strategicMapAnimate; - }; - }; - false -}; - - -_map = _display displayctrl 51; -_map ctrlmapanimadd [0,_scale,_mapCenter]; -ctrlmapanimcommit _map; -BIS_fnc_strategicMapOpen_mapCenter = _mapCenter; - -_map ctrladdeventhandler ["draw","_this call BIS_fnc_strategicMapOpen_draw;"]; -_map ctrladdeventhandler ["mousemoving","_this call BIS_fnc_strategicMapOpen_mouse;"]; -_map ctrladdeventhandler ["mouseholding","_this call BIS_fnc_strategicMapOpen_mouse;"]; -_map ctrladdeventhandler ["mousebuttonclick","[nil,_this] spawn BIS_fnc_strategicMapMouseButtonClick;"]; -_display displayaddeventhandler ["keydown","_this call BIS_fnc_strategicMapOpen_keyDown"]; - -if (_isNight) then { - _map ctrlsetbackgroundcolor [0,0,0,1]; - _map ctrlcommit 0; -}; - -//--- Measure -[_display] spawn { - disableserialization; - _display = _this select 0; - _showMiles = false; - - _map = _display displayctrl 51; - waituntil {ctrlmapanimdone _map}; - - _xStart = (_map ctrlmapworldtoscreen [0,0,0]) select 0; - _xEnd = (_map ctrlmapworldtoscreen [1000,0,0]) select 0; - _w1km = abs (_xstart - _xEnd); - _w1m = _w1km * 1.60934; - if !(_showMiles) then {_w1m = 0.01}; - _h = 0.01; - - _measure = _display displayctrl 2301; - _measure ctrlsetposition [ - safezoneX + 0.02125, - safezoneY + safezoneH - 3.5 * 0.04, - 1, - _h * 5 - ]; - //_measure ctrlsetfade 0.25; - _measure ctrlcommit 0; - _measure ctrlenable false; - - _colors = ["#(argb,8,8,3)color(0,0,0,1)","\A3\Ui_f\data\GUI\Rsc\RscDisplayStrategicMap\measure_ca.paa"]; - _kmSegment = _w1km / 5; - for "_i" from 0 to 4 do { - _km = _display displayctrl (1200 + _i); - _km ctrlsettext (_colors select (_i % 2)); - _km ctrlsetposition [ - _w1m + _kmSegment * _i, - _h, - _kmSegment, - _h - ]; - _km ctrlcommit 0; - }; - - _text_0 = _display displayctrl 1002; - _text_0 ctrlsetposition [ - _w1m - _w1km, - _h * 3, - 2 * _w1km, - _h * 2 - ]; - _text_0 ctrlcommit 0; - _text_km = _display displayctrl 1004; - _text_km ctrlsetposition [ - _w1m - _w1km + (safezoneH / 30), - _h * 3, - 2 * _w1km, - _h * 2 - ]; - _text_km ctrlcommit 0; - - if (_showMiles) then { - _m0 = _display displayctrl 1205; - _m0 ctrlsettext "#(argb,8,8,3)color(1,1,1,1)"; - _m0 ctrlsetposition [ - 0, - _h, - _w1m, - _h - ]; - _m0 ctrlcommit 0; - _text_m = _display displayctrl 1003; - _text_m ctrlsetposition [ - 0, - _h * 3, - 2 * _w1m, - _h * 2 - ]; - _text_m ctrlcommit 0; - }; -}; - -//--- Show markers -{ - _x setmarkeralpha 1; -} foreach _markers; -BIS_fnc_strategicMapOpen_markers = _markers; - -//--- Fade in -_fade = _display displayctrl 1099; -_fade ctrlsetfade 1; -_fade ctrlcommit 2; - -//--- Create upward looking camera (increases FPS, as no scene is drawn) -BIS_fnc_strategicMapOpen_camera = if (count allmissionobjects "Camera" == 0) then { - _camera = "camera" camcreate position player; - _camera cameraeffect ["internal","back"]; - _camera campreparepos [position player select 0,position player select 1,(position player select 2) + 10]; - _camera campreparetarget [position player select 0,(position player select 1) + 1,(position player select 2) + 1000]; - _camera campreparefov 0.1; - _camera camcommitprepared 0; - _camera -} else { - objnull -}; - -//--- Garbage collector -_display displayaddeventhandler [ - "unload", - " - { - _x setmarkeralpha 0; - } foreach BIS_fnc_strategicMapOpen_markers; - - BIS_fnc_strategicMapOpen_camera cameraeffect ['terminate','back']; - camdestroy BIS_fnc_strategicMapOpen_camera; - - BIS_fnc_strategicMapOpen_camera = nil; - BIS_fnc_strategicMapOpen_player = nil; - BIS_fnc_strategicMapOpen_mapSize = nil; - BIS_fnc_strategicMapOpen_mapCenter = nil; - BIS_fnc_strategicMapOpen_isNight = nil; - BIS_fnc_strategicMapOpen_ORBAT = nil; - BIS_fnc_strategicMapOpen_ORBATOverlay = nil; - BIS_fnc_strategicMapOpen_missions = nil; - BIS_fnc_strategicMapOpen_markers = nil; - BIS_fnc_strategicMapOpen_images = nil; - BIS_fnc_strategicMapOpen_draw = nil; - BIS_fnc_strategicMapOpen_clouds = nil; - BIS_fnc_strategicMapOpen_mousePos = nil; - BIS_fnc_strategicMapOpen_mouseClickDisable = nil; - BIS_fnc_strategicMapOpen_selected = nil; - BIS_fnc_strategicMapOpen_indexSizeTexture = nil; - BIS_fnc_strategicMapOpen_indexTextureSize = nil; - with uinamespace do { - RscDisplayStrategicMap_scaleMin = nil; - RscDisplayStrategicMap_scaleMax = nil; - RscDisplayStrategicMap_scaleDefault = nil; - - RscDisplayStrategicMap_colorOutside_R = nil; - RscDisplayStrategicMap_colorOutside_G = nil; - RscDisplayStrategicMap_colorOutside_B = nil; - }; - " -]; - -cuttext ["","black in"]; -endloadingscreen; - -_display \ No newline at end of file diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 063aeaeaf..4dffbf291 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -100,7 +100,6 @@ if (isServer) then { //FOB btc_fnc_fob_create_s = compile preprocessFileLineNumbers "core\fnc\fob\create_s.sqf"; btc_fnc_fob_dismantle_s = compile preprocessFileLineNumbers "core\fnc\fob\dismantle_s.sqf"; - btc_fnc_fob_init = compile preprocessFileLineNumbers "core\fnc\fob\init.sqf"; btc_fnc_fob_killed = compile preprocessFileLineNumbers "core\fnc\fob\killed.sqf"; //MIL @@ -250,7 +249,6 @@ if (!isDedicated) then { btc_fnc_intro = compile preprocessFileLineNumbers "core\fnc\common\intro.sqf"; btc_fnc_set_markerTextLocal = compile preprocessFileLineNumbers "core\fnc\common\set_markerTextLocal.sqf"; btc_fnc_showSubtitle = compile preprocessFileLineNumbers "core\fnc\common\showSubtitle.sqf"; - btc_fnc_strategicMapOpen = compile preprocessFileLineNumbers "core\fnc\common\strategicMapOpen.sqf"; btc_fnc_get_composition = compile preprocessFileLineNumbers "core\fnc\common\get_composition.sqf"; btc_fnc_checkArea = compile preprocessFileLineNumbers "core\fnc\common\checkArea.sqf"; btc_fnc_typeOfPreview = compile preprocessFileLineNumbers "core\fnc\common\typeOfPreview.sqf"; @@ -286,7 +284,6 @@ if (!isDedicated) then { //FOB btc_fnc_fob_create = compile preprocessFileLineNumbers "core\fnc\fob\create.sqf"; - btc_fnc_fob_redeploy = compile preprocessFileLineNumbers "core\fnc\fob\redeploy.sqf"; //INT btc_fnc_int_add_actions = compile preprocessFileLineNumbers "core\fnc\int\add_actions.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index ed1b6e43e..d479eeb6d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -25,22 +25,9 @@ params [ ["_player", objNull, [objNull]] ]; -_player addEventHandler ["Respawn", format ["[%1] call btc_fnc_eh_player_respawn", getPosASL player]]; _player addEventHandler ["CuratorObjectPlaced", btc_fnc_eh_CuratorObjectPlaced]; ["ace_treatmentSucceded", btc_fnc_rep_treatment] call CBA_fnc_addEventHandler; _player addEventHandler ["WeaponAssembled", btc_fnc_civ_add_leaflets]; -_player addEventHandler ["WeaponAssembled", { - params [ - ["_player", objNull, [objNull]], - ["_rallyPoint", objNull, [objNull]] - ]; - - if !(_rallyPoint isKindOf "Camping_base_F") exitWith {_this}; - - [_rallyPoint] remoteExecCall ["btc_fnc_fob_init", [0, 2] select isDedicated]; - - _this -}]; if (btc_p_chem) then { // Add biopsy diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf index 89b061d0c..5f6e2608f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf @@ -24,7 +24,6 @@ params [ ["_pos", [0, 0, 0], [[]]] ]; -player setPosASL _pos; player addRating 9999; player setCaptive false; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf index 2b0fc83be..bed083a03 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf @@ -47,7 +47,10 @@ _marker setMarkerText _FOB_name; _marker setMarkerColor "ColorBlue"; _marker setMarkerShape "ICON"; -[_struc, _flag, _marker] call btc_fnc_fob_init; +(_fobs select 0) pushBack _marker; +(_fobs select 1) pushBack _structure; +(_fobs select 2) pushBack _flag; +_flag setVariable ["BIS_fnc_IDRespawnPosition", ([missionNamespace, _flag, _FOB_name] call BIS_fnc_addRespawnPosition) select 1]; _struc addEventHandler ["Killed", btc_fnc_fob_killed]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/init.sqf deleted file mode 100644 index 0d1c498ce..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/init.sqf +++ /dev/null @@ -1,50 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_fob_init - -Description: - Store FOB data in btc_fobs global variable. - -Parameters: - _structure - Structure/rallypoint of the FOB. [Object] - _flag - Flag of the FOB. [Object] - _marker - Marker. [String] - _fobs - GLobal variable. [Array] - -Returns: - -Examples: - (begin example) - [cursorObject] call btc_fnc_fob_init; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_structure", objNull, [objNull]], - ["_flag", objNull, [objNull]], - ["_marker", "", [""]], - ["_fobs", btc_fobs, [[]]] -]; - -if ( - if (_marker isEqualTo "") then { - _marker = "respawn_" + str btc_player_side + str _structure; - _structure setVariable ["btc_fob_rallypointPos", position _structure, true]; - if (_marker in (_fobs select 0)) then { - true - } else { - _structure setVariable ["btc_tickets", btc_fob_rallypointTicket, true]; - false - } - } else { - false - } -) exitWith {}; - -(_fobs select 0) pushBack _marker; -(_fobs select 1) pushBack _structure; -(_fobs select 2) pushBack _flag; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf index 3ab0d0643..4ae13466c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf @@ -41,6 +41,7 @@ if (btc_debug || btc_debug_log) then { [format ["named %1", (_fobs select 0) select _fob_index], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; }; +[missionNamespace, ((_fobs select 2) select _fob_index) getVariable "BIS_fnc_IDRespawnPosition"] call BIS_fnc_removeRespawnPosition; deleteMarker ((_fobs select 0) deleteAt _fob_index); private _fob = (_fobs select 1) deleteAt _fob_index; deleteVehicle ((_fobs select 2) deleteAt _fob_index); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf deleted file mode 100644 index 194f2545f..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ /dev/null @@ -1,142 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_fob_redeploy - -Description: - Show user interface of the map with FOB position. - -Parameters: - -Returns: - -Examples: - (begin example) - [] spawn btc_fnc_fob_redeploy; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -btc_int_ask_data = nil; -["btc_fobs"] remoteExecCall ["btc_fnc_int_ask_var", 2]; - -[{!(isNil "btc_int_ask_data")}, { - private _fobs_marker = []; - private _fobs_markerText = []; - private _fobs_structure = []; - private _fobs_texts = []; - { - private _structure = (btc_int_ask_data select 1) select _forEachIndex; - if ((_x in allMapMarkers) || !(isNull _structure) && (_structure inArea [_structure getVariable ["btc_fob_rallypointPos", [0, 0]], 1, 1, 0, false])) then { - _fobs_marker pushBack _x; - _fobs_markerText pushBack (if (_x in allMapMarkers) then { - markerText _x; - } else { - getText (configfile >> "CfgVehicles" >> typeOf _structure >> "displayName") - }); - _fobs_structure pushBack _structure; - - private _fobs_ticket = _structure getVariable ["btc_tickets", -1]; - _fobs_texts pushBack (if (_fobs_ticket isEqualTo -1) then { - format [localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_MOVING", markerText _x] - } else { - format [localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_MOVING" + "
%2: " + localize "str_a3_rscdisplaycampaignlobby_respawn_tooltip", markerText _x, _fobs_ticket] - }); - }; - } forEach (btc_int_ask_data select 0); - - if (_fobs_marker isEqualTo []) exitWith { - (localize "STR_BTC_HAM_O_FOB_REDEPLOY_H_NOFOB") call CBA_fnc_notify; - }; - - private _respawn_positions = _fobs_structure apply { - private _positions = _x buildingPos -1; - if (_positions isEqualTo []) then { - _x modelToWorld [0, 1.5, 0] - } else { - selectRandom (_positions select {_x select 2 < 1}) - }; - }; - - private _EHid = ["btc_respawn", { - _this params ["_pos", "_structure"]; - - if (surfaceIsWater _pos) then { - player setPosASL _pos; - } else { - player setPosATL _pos; - }; - - private _ticket = _structure getVariable ["btc_tickets", -1]; - if !(_ticket isEqualTo -1) then { - _ticket = _ticket - 1; - if (_ticket <= 0) then { - [_structure, objNull, objNull, true, true] remoteExecCall ["btc_fnc_fob_killed", 2]; - } else { - _structure setVariable ["btc_tickets", _ticket, true]; - }; - }; - }] call CBA_fnc_addEventHandler; - - private _missionsData = []; - { - _missionsData pushBack [ - position _x, - {["btc_respawn", _this select 9] call CBA_fnc_localEvent;}, - _fobs_markerText select _forEachIndex, - _fobs_texts select _forEachIndex, - "", - getText (configfile >> "CfgVehicles" >> typeOf _x >> "editorPreview"), - 1, - [_respawn_positions select _forEachIndex, _x] - ] - } forEach _fobs_structure; - - disableserialization; - (date call BIS_fnc_sunriseSunsetTime) params ["_sunrise", "_sunset"]; - - private _parentDisplay = [] call bis_fnc_displayMission; - private _mapCenter = getMarkerPos btc_respawn_marker; - private _ORBAT = []; - private _markers = []; - private _images = []; - private _overcast = overcast; - private _isNight = !((_sunrise < dayTime) && (_sunset > dayTime)); - private _scale = 1; - private _simul = true; - - { - _x setMarkerAlphaLocal 0; - } forEach _fobs_marker; - - private _display = [ - _parentDisplay, - _mapCenter, - _missionsData, - _ORBAT, - _markers, - _images, - _overcast, - _isNight, - _scale, - _simul, - localize "$STR_BTC_HAM_O_FOB_REDEPLOY_LABEL", - true - ] call btc_fnc_strategicMapOpen; - - _display displayaddeventhandler [ - "unload", - format [ - " - { - _x setMarkerAlphaLocal 1; - } forEach %1; - ['btc_respawn', %2] call CBA_fnc_removeEventHandler; - ", - _fobs_marker, - _EHid - ] - ]; -}] call CBA_fnc_waitUntilAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 7c73d5edf..1232c3dbc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -125,7 +125,7 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy}, {btc_p_redeploy}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {btc_p_redeploy}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index c451b63fd..1652e5b4c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -1,5 +1,9 @@ [] call compile preprocessFileLineNumbers "core\fnc\city\init.sqf"; +"respawn_west" setMarkerPos btc_flag; +["Initialize"] call BIS_fnc_dynamicGroups; +setTimeMultiplier btc_p_acctime; + ["btc_m", -1, objNull, "", false, false] call btc_fnc_task_create; [["btc_dft", "btc_m"], 0] call btc_fnc_task_create; [["btc_dty", "btc_m"], 1] call btc_fnc_task_create; @@ -29,10 +33,6 @@ if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldN [] call btc_fnc_chem_handleShower; [] call btc_fnc_spect_checkLoop; -["Initialize"] call BIS_fnc_dynamicGroups; - -setTimeMultiplier btc_p_acctime; - {[_x, 30] call btc_fnc_eh_veh_add_respawn;} forEach btc_helo; if (btc_p_side_mission_cycle > 0) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/description.ext b/=BTC=co@30_Hearts_and_Minds.Altis/description.ext index 8f982cb35..295295f9b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/description.ext +++ b/=BTC=co@30_Hearts_and_Minds.Altis/description.ext @@ -49,6 +49,11 @@ class Extended_InitPost_EventHandlers { }; }; +respawn = "BASE"; +respawnDelay = 1; +respawnOnStart = 1; +respawnTemplates[] = {"MenuPosition"}; + // Disable BI wreck system (H&M handle it internally) wreckManagerMode = 0; corpseManagerMode = 0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm index 5e448c8ac..370d446e4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm @@ -208,10 +208,7 @@ class AddonsMetaData randomSeed=2442963; class ScenarioData { - respawnDialog=0; disabledAI=1; - respawn=3; - respawnDelay=5; class Header { gameType="Coop"; @@ -980,6 +977,7 @@ class Mission class Attributes { skill=0.60000002; + name="btc_flag"; }; id=21; type="Flag_NATO_F"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm index a0e3b354c..3e1bec64b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm @@ -200,10 +200,7 @@ class AddonsMetaData randomSeed=2442963; class ScenarioData { - respawnDialog=0; disabledAI=1; - respawn=3; - respawnDelay=5; class Header { gameType="Coop"; @@ -1354,6 +1351,7 @@ class Mission class Attributes { skill=0.60000002; + name="btc_flag"; }; id=21; type="Flag_NATO_F"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm index 04857597f..81d287bc2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm @@ -167,10 +167,7 @@ class AddonsMetaData randomSeed=2442963; class ScenarioData { - respawnDialog=0; disabledAI=1; - respawn=3; - respawnDelay=5; class Header { gameType="Coop"; @@ -1049,6 +1046,7 @@ class Mission class Attributes { skill=0.60000002; + name="btc_flag"; }; id=21; type="Flag_NATO_F"; From cfafcd5469daacd164f56ce25d79d8124c23d867 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 14 Mar 2020 18:50:24 +0100 Subject: [PATCH 021/264] FIX: game crash while searching intel Co-Authored-By: commy2 Co-Authored-By: pabstmirror --- .../core/fnc/int/add_actions.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 7c73d5edf..034cdee52 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -30,7 +30,9 @@ _action = ["request_delete", localize "STR_3DEN_Delete", "\A3\ui_f\data\igui\cfg [player, 1, ["ACE_SelfActions", "Database"], _action] call ace_interact_menu_fnc_addActionToObject; //Intel -_action = ["Search_intel", localize "STR_A3_Showcase_Marksman_BIS_tskIntel_title", "\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa", {(_this select 0) call btc_fnc_info_search_for_intel;}, {!alive (_this select 0)}] call ace_interact_menu_fnc_createAction; +_action = ["Search_intel", localize "STR_A3_Showcase_Marksman_BIS_tskIntel_title", "\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa", { + [btc_fnc_info_search_for_intel, [_this select 0]] call CBA_fnc_execNextFrame; +}, {!alive (_this select 0)}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); _action = ["Interrogate_intel", localize "STR_BTC_HAM_ACTION_INTEL_INTERROGATE", "\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa", {[(_this select 0),true] spawn btc_fnc_info_ask;}, {alive (_this select 0) && {[_this select 0] call ace_common_fnc_isAwake} && captive (_this select 0)}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); From 5b04cd1f067e2e451e7dfc5177b02308aec68e10 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 19 Mar 2020 11:50:54 +0100 Subject: [PATCH 022/264] remove sleep in repair_wreck --- .../core/fnc/log/repair_wreck.sqf | 2 +- .../core/fnc/log/server_repair_wreck.sqf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/repair_wreck.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/repair_wreck.sqf index 92c960a0d..391fb1667 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/repair_wreck.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/repair_wreck.sqf @@ -33,4 +33,4 @@ if (_array isEqualTo []) exitWith {(localize "STR_BTC_HAM_LOG_RWRECK_NOWRECK") c if (damage (_array select 0) != 1) exitWith {(localize "STR_BTC_HAM_LOG_RWRECK_NOTWRECK") call CBA_fnc_notify}; -[_array select 0] remoteExec ["btc_fnc_log_server_repair_wreck", 2]; +[_array select 0] remoteExecCall ["btc_fnc_log_server_repair_wreck", 2]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf index 156310a7e..65c5b5899 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf @@ -43,7 +43,7 @@ if (_marker != "") then { remoteExecCall ["", _marker]; }; deleteVehicle _veh; -sleep 1; -_veh = ([_type, [_x, _y, 0.5 + _z], _dir] + _vehProperties) call btc_fnc_log_createVehicle; -_veh +[{ + _this call btc_fnc_log_createVehicle; +}, [_type, [_x, _y, 0.5 + _z], _dir] + _vehProperties, 1] call CBA_fnc_waitAndExecute; From de41b162374abbaafccd94d542d94fd273289f24 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 19 Mar 2020 12:30:08 +0100 Subject: [PATCH 023/264] Remove spawn in delete --- .../core/fnc/chem/handleShower.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/delete.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/handleShower.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/handleShower.sqf index 3df02d216..8fd10fb53 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/handleShower.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/handleShower.sqf @@ -50,7 +50,7 @@ params [ }; } forEach _needActivate; { - remoteExec ["", _x]; + remoteExecCall ["", _x]; [_x] remoteExecCall ["BIN_fnc_deconShowerAnimStop", 0]; } forEach _needDesactivate; }, 2, [btc_chem_decontaminate, _minDistance]] call CBA_fnc_addPerFrameHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/delete.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/delete.sqf index 991a70fc0..33f1591a5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/delete.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/delete.sqf @@ -38,4 +38,4 @@ if (_array isEqualTo []) exitWith { ] call CBA_fnc_notify; }; -[_array select 0] remoteExec ["btc_fnc_log_server_delete", [2]]; +[_array select 0] remoteExecCall ["btc_fnc_log_server_delete", [2]]; From 32294a33e7b75d605c0b7d14ca6cb998aaf0e406 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 20 Mar 2020 23:50:45 +0100 Subject: [PATCH 024/264] Delete wreck around IED --- .../core/def/mission.sqf | 1 + .../core/fnc/compile.sqf | 2 + .../core/fnc/eh/player.sqf | 7 +++ .../core/fnc/ied/deleteLoop.sqf | 46 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index edf26274c..3bda71466 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -337,6 +337,7 @@ btc_fob_id = 0; //IED btc_type_ieds_ace = ["IEDLandBig_F", "IEDLandSmall_F"]; +btc_ied_deleteOn = -1; //Int btc_int_radius_orders = 25; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 063aeaeaf..fc0b76ad7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -278,6 +278,8 @@ if (!isDedicated) then { btc_fnc_ied_effect_rocks = compile preprocessFileLineNumbers "core\fnc\ied\effect_rocks.sqf"; btc_fnc_ied_effect_blurEffect = compile preprocessFileLineNumbers "core\fnc\ied\effect_blurEffect.sqf"; btc_fnc_ied_effect_shock_wave = compile preprocessFileLineNumbers "core\fnc\ied\effect_shock_wave.sqf"; + btc_fnc_ied_effect_shock_wave = compile preprocessFileLineNumbers "core\fnc\ied\effect_shock_wave.sqf"; + btc_fnc_ied_deleteLoop = compile preprocessFileLineNumbers "core\fnc\ied\deleteLoop.sqf"; //EH btc_fnc_eh_player_respawn = compile preprocessFileLineNumbers "core\fnc\eh\player_respawn.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index ed1b6e43e..d0e57270a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -41,6 +41,13 @@ _player addEventHandler ["WeaponAssembled", { _this }]; +_player addEventHandler ["GetInMan", {_this call btc_fnc_ied_deleteLoop}]; +_player addEventHandler ["GetOutMan", { + if (btc_ied_deleteOn > -1) then { + [btc_ied_deleteOn] call CBA_fnc_removePerFrameHandler; + btc_ied_deleteOn = -1; + }; +}]; if (btc_p_chem) then { // Add biopsy diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf new file mode 100644 index 000000000..41c78d2d3 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -0,0 +1,46 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_ied_deleteLoop + +Description: + Remove IED objects. + +Parameters: + +Returns: + +Examples: + (begin example) + [] call btc_fnc_ied_deleteLoop; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_unit", objNull, [objNull]], + ["_role", "", [""]], + ["_vehicle", objNull, [objNull]] +]; + +if !(_vehicle isKindOf "B_APC_Tracked_01_CRV_F") exitWith {}; + +if (btc_ied_deleteOn > -1) exitWith {}; + +btc_ied_deleteOn = [{ + params ["_arguments", "_idPFH"]; + _arguments params [ + ["_vehicle", objNull, [objNull]] + ]; + + private _ieds = allSimpleObjects []; + _ieds = _ieds apply {[_x distance _vehicle, _x]}; + _ieds sort true; + + private _ied = _ieds select 0; + if (_ied select 0 < 7 && {[getPos _vehicle, getDir _vehicle, 40, getPos (_ied select 1)] call BIS_fnc_inAngleSector}) then { + (_ied select 1) call CBA_fnc_deleteEntity; + }; +}, 1, [_vehicle]] call CBA_fnc_addPerFrameHandler; From 2882ec0715efa6f07940dc2e24e189f7cbca31c8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 23 Mar 2020 10:26:47 +0100 Subject: [PATCH 025/264] FIXs - null group - group with all units dead are not saved - btc_fnc_mil_createVehicle return nil --- .../core/fnc/city/activate.sqf | 6 ++--- .../core/fnc/city/cleanUp.sqf | 2 +- .../core/fnc/city/de_activate.sqf | 2 +- .../core/fnc/civ/create_patrol.sqf | 2 +- .../core/fnc/data/get_group.sqf | 22 +++++++++++-------- .../core/fnc/delay/createUnit.sqf | 2 +- .../core/fnc/mil/create_patrol.sqf | 2 +- .../core/fnc/mil/send.sqf | 2 +- .../core/fnc/patrol/init.sqf | 4 ++++ .../core/fnc/side/capture_officer.sqf | 2 +- 10 files changed, 27 insertions(+), 19 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 04f85b41c..5f3faf5ca 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -36,7 +36,7 @@ params [ _wp_ratios params ["_wp_house", "_wp_sentry"]; if (btc_debug) then { - ("Activate " + str _id) call CBA_fnc_notify; + [str _id, __FILE__, [btc_debug, btc_debug_log, true]] call btc_fnc_debug_message; }; private _city = btc_city_all select _id; @@ -199,7 +199,7 @@ if !(_city getVariable ["has_suicider", false]) then { }; [{ - params ["_has_en", "_city", "_radius_x", "_radius_y"]; + params ["_has_en", "_city", "_radius_x", "_radius_y", "_id"]; if (_has_en) then { private _trigger = createTrigger ["EmptyDetector", getPos _city]; @@ -210,7 +210,7 @@ if !(_city getVariable ["has_suicider", false]) then { }; _city setVariable ["activating", false]; -}, [_has_en, _city, _radius_x, _radius_y], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_has_en, _city, _radius_x, _radius_y, _id], btc_delay_createUnit] call CBA_fnc_waitAndExecute; //Patrol btc_patrol_active = btc_patrol_active - [grpNull]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf index 8ebbe63d1..bc05c42af 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/cleanUp.sqf @@ -37,7 +37,7 @@ _toRemove append (allDead select { (_playableUnits inAreaArray [getPosWorld _dead, 500, 500]) isEqualTo [] && !(_dead getVariable ["btc_dont_delete", false]) }); -if (btc_delay_createUnit < 0.01) then { // Don't remove group during units creation. +if (btc_delay_createUnit < 0.001) then { // Don't remove group during units creation. _toRemove append (allGroups select { units _x select {alive _x} isEqualTo [] && !( diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index 3abf527ba..500a7a1d7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -36,7 +36,7 @@ if !(_city getVariable ["active", false]) exitWith {}; params ["_city", "_id"]; if (btc_debug) then { - ("DE-Activate " + str _id) call CBA_fnc_notify; + [str _id, __FILE__, [btc_debug, btc_debug_log, true]] call btc_fnc_debug_message; }; //Save all and delete diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index 695686761..2892ca48b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -57,7 +57,7 @@ if (_roads isEqualTo []) then { _veh_type = selectRandom btc_civ_type_veh; }; -private _group = createGroup [civilian, true]; +private _group = createGroup civilian; btc_civ_veh_active pushBack _group; _group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_civilian_id, btc_debug]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf index 897368107..35db1cc7b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf @@ -25,10 +25,12 @@ params [ ]; private _units = units _group; +if (_units select {alive _x} isEqualTo []) exitWith {nil}; + private _type_db = 0; private _array_pos = []; private _array_type = []; -private _side = side (leader _group); +private _side = side _group; private _array_dam = []; private _behaviour = [behaviour (leader _group), combatMode _group, formation _group]; private _array_wp = []; @@ -37,15 +39,17 @@ private _array_veh = []; private _index_wp = 0; { - private _pos = getPosATL _x; - if (surfaceIsWater _pos) then { - _array_pos pushBack getPos _x; - } else { - _array_pos pushBack _pos; - }; + if (getDammage _x < 1) then { + private _pos = getPosATL _x; + if (surfaceIsWater _pos) then { + _array_pos pushBack getPos _x; + } else { + _array_pos pushBack _pos; + }; - _array_type pushBack typeOf _x; - _array_dam pushBack getDammage _x; + _array_type pushBack typeOf _x; + _array_dam pushBack getDammage _x; + }; } forEach _units; _index_wp = (currentWaypoint _group) + 1; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf index 0a72396a2..38adfab53 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf @@ -36,7 +36,7 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ]; if (isNull _group) exitWith { - [format ["isNull _group _this = %1", _this], __FILE__, [btc_debug]] call btc_fnc_debug_message; + [format ["isNull _group _this = %1", _this], __FILE__, [btc_debug, btc_debug_log, true]] call btc_fnc_debug_message; btc_delay_createUnit = btc_delay_createUnit - 0.3; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 3fefb9216..cad6a2f42 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -61,7 +61,7 @@ if (_pos_isWater) then { }; //Creating units -private _group = createGroup [btc_enemy_side, true]; +private _group = createGroup btc_enemy_side; btc_patrol_active pushBack _group; _group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_military_id, btc_debug]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index c6e7900d9..ad96c6770 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -45,7 +45,7 @@ switch (_typeOf_patrol) do { [_group, _dest, -1, "MOVE", "AWARE", "RED", "FULL", _infFormation, "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; }; case 1 : { - _group = createGroup [btc_enemy_side, true]; + _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; if (_veh_type isEqualTo "") then {_veh_type = selectRandom btc_type_motorized}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf index 33f6820ba..7e64ccc3d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf @@ -34,6 +34,10 @@ _cities params [ ["_active_city", objNull, [objNull]] ]; +if !(isGroupDeletedWhenEmpty _group) then { + _group deleteGroupWhenEmpty true; +}; + private _end_city = selectRandom ([[_start_city, _active_city], _area, _isBoat] call btc_fnc_patrol_usefulCity); private _pos = getPos _end_city; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index e65825895..5c72d7241 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -72,7 +72,7 @@ _group setVariable ["no_cache", true]; private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; for "_i" from 0 to (1 + round random 1) do { - private _veh = [_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; + [_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; From 76aead916cef4623c1fcfb6b4b752701b6efc82d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 23 Mar 2020 17:02:59 +0100 Subject: [PATCH 026/264] FIX side mission with convoy --- .../core/fnc/side/capture_officer.sqf | 141 ++++++++++-------- .../core/fnc/side/convoy.sqf | 32 ++-- 2 files changed, 95 insertions(+), 78 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 5c72d7241..539078e01 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -78,71 +78,80 @@ for "_i" from 0 to (1 + round random 1) do { _pos1 = getPosATL _road; }; -private _captive = selectRandom units _group; -removeAllWeapons _captive; -_group selectLeader _captive; - -private _surrender_taskID = _taskID + "su"; -[[_surrender_taskID, _taskID], 24, objNull, typeOf _captive] call btc_fnc_task_create; -private _handcuff_taskID = _taskID + "hc"; -private _back_taskID = _taskID + "bk"; - -[_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius_x / 1.5] call CBA_fnc_addWaypoint; - -//// Create trigger \\\\ -private _trigger = createTrigger ["EmptyDetector", getPos _city1]; -_trigger setVariable ["captive", _captive]; -_trigger setTriggerArea [15, 15, 0, false]; -_trigger setTriggerActivation [str btc_player_side, "PRESENT", true]; -_trigger setTriggerStatements ["this", format ["_captive = thisTrigger getVariable 'captive'; deleteVehicle thisTrigger; doStop _captive; [_captive, true] call ace_captives_fnc_setSurrendered; ['%1', 'SUCCEEDED'] call BIS_fnc_taskSetState; [['%2', '%4'], 29, _captive] call btc_fnc_task_create; [['%3', '%4'], 21, btc_create_object_point, typeOf btc_create_object_point] call btc_fnc_task_create;", _surrender_taskID, _handcuff_taskID, _back_taskID, _taskID], ""]; -_trigger attachTo [_captive, [0, 0, 0]]; - -private _agent = [leader _group, _pos2, _taskID] call btc_fnc_info_path; -_agent addEventHandler ["PathCalculated", { - params ["_agent", "_path"]; - - [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; - _agent removeEventHandler ["PathCalculated", _thisEventHandler]; -}]; - -["ace_captiveStatusChanged", { - params ["_unit", "_state", "_type"]; - _thisArgs params ["_captive", "_handcuff_taskID"]; - - if (_captive isEqualTo objNull) then { - [_thisType, _thisId] call CBA_fnc_removeEventHandler; +[{ + _this spawn { + params ["_group", "_taskID", "_radius_x", "_city1", "_pos2", "_markers"]; + + private _captive = selectRandom units _group; + removeAllWeapons _captive; + _group selectLeader _captive; + + private _surrender_taskID = _taskID + "su"; + [[_surrender_taskID, _taskID], 24, objNull, typeOf _captive] call btc_fnc_task_create; + private _handcuff_taskID = _taskID + "hc"; + private _back_taskID = _taskID + "bk"; + + [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius_x / 1.5] call CBA_fnc_addWaypoint; + + //// Create trigger \\\\ + private _trigger = createTrigger ["EmptyDetector", getPos _city1]; + _trigger setVariable ["captive", _captive]; + _trigger setTriggerArea [15, 15, 0, false]; + _trigger setTriggerActivation [str btc_player_side, "PRESENT", true]; + _trigger setTriggerStatements ["this", format ["_captive = thisTrigger getVariable 'captive'; deleteVehicle thisTrigger; doStop _captive; [_captive, true] call ace_captives_fnc_setSurrendered; ['%1', 'SUCCEEDED'] call BIS_fnc_taskSetState; [['%2', '%4'], 29, _captive] call btc_fnc_task_create; [['%3', '%4'], 21, btc_create_object_point, typeOf btc_create_object_point] call btc_fnc_task_create;", _surrender_taskID, _handcuff_taskID, _back_taskID, _taskID], ""]; + _trigger attachTo [_captive, [0, 0, 0]]; + + private _agent = [leader _group, _pos2, _taskID] call btc_fnc_info_path; + _agent addEventHandler ["PathCalculated", { + params ["_agent", "_path"]; + + [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + _agent removeEventHandler ["PathCalculated", _thisEventHandler]; + }]; + + ["ace_captiveStatusChanged", { + params ["_unit", "_state", "_type"]; + _thisArgs params ["_captive", "_handcuff_taskID"]; + + if (_captive isEqualTo objNull) then { + [_thisType, _thisId] call CBA_fnc_removeEventHandler; + }; + if (_unit isEqualTo _captive && _type isEqualTo "SetHandcuffed") then { + [_thisType, _thisId] call CBA_fnc_removeEventHandler; + [_handcuff_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; + }; + _this + }, [_captive, _handcuff_taskID]] call CBA_fnc_addEventHandlerArgs; + + waitUntil {sleep 5; (!(alive _captive) || (_captive inArea [getPosWorld btc_create_object_point, 100, 100, 0, false]) || _taskID call BIS_fnc_taskCompleted)}; + + _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); + + private _vehs = (units _group) apply {assignedVehicle _x}; + _vehs = (_vehs arrayIntersect _vehs); + if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { + deleteVehicle _trigger; + [_markers, _vehs + [_group]] call btc_fnc_delete; + }; + + if (!alive _captive || _taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { + deleteVehicle _trigger; + [_taskID, "FAILED"] call btc_fnc_task_setState; + _group setVariable ["no_cache", false]; + { + _group = createGroup btc_enemy_side; + (crew _x) joinSilent _group; + [btc_fnc_data_add_group, _group] call CBA_fnc_directCall; + } forEach _vehs; + [_markers, []] call btc_fnc_delete; + }; + + 50 call btc_fnc_rep_change; + + [_taskID, "SUCCEEDED"] call btc_fnc_task_setState; + + [_markers, _vehs + [_captive, _group]] call btc_fnc_delete; }; - if (_unit isEqualTo _captive && _type isEqualTo "SetHandcuffed") then { - [_thisType, _thisId] call CBA_fnc_removeEventHandler; - [_handcuff_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; - }; - _this -}, [_captive, _handcuff_taskID]] call CBA_fnc_addEventHandlerArgs; - -waitUntil {sleep 5; (!(alive _captive) || (_captive inArea [getPosWorld btc_create_object_point, 100, 100, 0, false]) || _taskID call BIS_fnc_taskCompleted)}; - -_markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); - -private _vehs = assignedVehicle leader _group; -if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { - deleteVehicle _trigger; - [_markers, _vehs + [_group]] call btc_fnc_delete; -}; - -if (!alive _captive || _taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { - deleteVehicle _trigger; - [_taskID, "FAILED"] call btc_fnc_task_setState; - _group setVariable ["no_cache", false]; - { - _group = createGroup btc_enemy_side; - (crew _x) joinSilent _group; - _group call btc_fnc_data_add_group; - } forEach _vehs; - [_markers, []] call btc_fnc_delete; -}; - -50 call btc_fnc_rep_change; - -[_taskID, "SUCCEEDED"] call btc_fnc_task_setState; +}, [_group, _taskID, _radius_x, _city1, _pos2, _markers], btc_delay_createUnit] call CBA_fnc_waitAndExecute; -[_markers, _vehs + [_captive, _group]] call btc_fnc_delete; +waitUntil {sleep 5; _taskID call BIS_fnc_taskCompleted}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index ac7231977..0607a1bc2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -79,23 +79,31 @@ for "_i" from 0 to (2 + round random 2) do { _pos1 = getPosATL _road; }; -private _agent = [leader _group, _pos2, _taskID] call btc_fnc_info_path; -_agent addEventHandler ["PathCalculated", { - params ["_agent", "_path"]; +[{ + params ["_group", "_pos2", "_taskID"]; + private _agent = [leader _group, _pos2, _taskID] call btc_fnc_info_path; + _agent addEventHandler ["PathCalculated", { + params ["_agent", "_path"]; - [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; - _agent removeEventHandler ["PathCalculated", _thisEventHandler]; -}]; + [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + _agent removeEventHandler ["PathCalculated", _thisEventHandler]; + }]; +}, [_group, _pos2, _taskID], btc_delay_createUnit] call CBA_fnc_waitAndExecute; [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius_x/2] call CBA_fnc_addWaypoint; -waitUntil {sleep 5; (_taskID call BIS_fnc_taskCompleted || (_vehs select {canMove _x} isEqualTo []) || (_group isEqualTo grpNull))}; +waitUntil {sleep 5; ( + _taskID call BIS_fnc_taskCompleted || + ((units _group) apply {assignedVehicle _x}) select {canMove _x} isEqualTo [] || + _group isEqualTo grpNull +)}; _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); -private _vehs = assignedVehicle leader _group; +private _vehs = (units _group) apply {assignedVehicle _x}; +_vehs = (_vehs arrayIntersect _vehs); if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { - [_markers, _vehs + [_group, _agent]] call btc_fnc_delete; + [_markers, _vehs + [_group]] call btc_fnc_delete; }; if (_taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { @@ -103,12 +111,12 @@ if (_taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { { private _group = createGroup btc_enemy_side; (crew _x) joinSilent _group; - _group call btc_fnc_data_add_group; + [btc_fnc_data_add_group, _group] call CBA_fnc_directCall; } forEach _vehs; - [_markers, _agent] call btc_fnc_delete; + [_markers] call btc_fnc_delete; }; -[_markers, _vehs + [_group, _agent]] call btc_fnc_delete; +[_markers, _vehs + [_group]] call btc_fnc_delete; if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith {}; From 90e44a68515858790955bdec24a922f5454d0e44 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 27 Mar 2020 17:11:10 +0100 Subject: [PATCH 027/264] Improve the detection thanks to boundingBoxReal https://github.com/Vdauphin/HeartsAndMinds/issues/400 --- .../core/fnc/compile.sqf | 1 - .../core/fnc/ied/deleteLoop.sqf | 22 +++++++++++++------ .../stringtable.xml | 3 ++- docs/InGame-documentation.md | 13 ++++++++--- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index fc0b76ad7..59955de97 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -278,7 +278,6 @@ if (!isDedicated) then { btc_fnc_ied_effect_rocks = compile preprocessFileLineNumbers "core\fnc\ied\effect_rocks.sqf"; btc_fnc_ied_effect_blurEffect = compile preprocessFileLineNumbers "core\fnc\ied\effect_blurEffect.sqf"; btc_fnc_ied_effect_shock_wave = compile preprocessFileLineNumbers "core\fnc\ied\effect_shock_wave.sqf"; - btc_fnc_ied_effect_shock_wave = compile preprocessFileLineNumbers "core\fnc\ied\effect_shock_wave.sqf"; btc_fnc_ied_deleteLoop = compile preprocessFileLineNumbers "core\fnc\ied\deleteLoop.sqf"; //EH diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index 41c78d2d3..d6d427fc2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -3,7 +3,7 @@ Function: btc_fnc_ied_deleteLoop Description: - Remove IED objects. + Remove wreck generated around IED. Parameters: @@ -11,7 +11,7 @@ Returns: Examples: (begin example) - [] call btc_fnc_ied_deleteLoop; + [vehicle player] call btc_fnc_ied_deleteLoop; (end) Author: @@ -29,18 +29,26 @@ if !(_vehicle isKindOf "B_APC_Tracked_01_CRV_F") exitWith {}; if (btc_ied_deleteOn > -1) exitWith {}; +(0 boundingBoxReal _vehicle) params ["_p1", "_p2"]; +private _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); +private _maxLength = abs ((_p2 select 1) - (_p1 select 1)); + btc_ied_deleteOn = [{ params ["_arguments", "_idPFH"]; _arguments params [ - ["_vehicle", objNull, [objNull]] + ["_vehicle", objNull, [objNull]], + ["_minDistance", 0, [0]] ]; private _ieds = allSimpleObjects []; _ieds = _ieds apply {[_x distance _vehicle, _x]}; _ieds sort true; - private _ied = _ieds select 0; - if (_ied select 0 < 7 && {[getPos _vehicle, getDir _vehicle, 40, getPos (_ied select 1)] call BIS_fnc_inAngleSector}) then { - (_ied select 1) call CBA_fnc_deleteEntity; + (_ieds select 0) params ["_distance", "_ied"]; + (0 boundingBoxReal _ied) params ["_p1", "_p2"]; + private _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); + private _maxLength = abs ((_p2 select 1) - (_p1 select 1)); + if (_distance < (_minDistance + (_maxWidth max _maxLength) / 2) && {[getPos _vehicle, getDir _vehicle, 40, getPos _ied] call BIS_fnc_inAngleSector}) then { + _ied call CBA_fnc_deleteEntity; }; -}, 1, [_vehicle]] call CBA_fnc_addPerFrameHandler; +}, 1, [_vehicle, (_maxWidth max _maxLength) / 2]] call CBA_fnc_addPerFrameHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index a4c4f98a6..0e950f49b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -160,7 +160,8 @@
- <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Any object could be an IED, approach it carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> If you are an engineer and have a defusal kit, you can disarm it.<br/> You can also blow them off with high caliber and explosive satchels. + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\mine_ca.paa' width='20' height='20'/> <marker name='blufor_base'>IED:</marker><br/> Any object could be an IED or a fake IED.<br/> <img image='\A3\EditorPreviews_F\Data\CfgVehicles\IEDLandSmall_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> Approach IED carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around.<br/> <img image='\z\ace\addons\minedetector\data\equip\w_vmh3_ca.paa' width='70' height='100'/> <br/><br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Defuse:</marker><br/> If you are an engineer and have a defusal kit, you can disarm it. You can also blow them off with high caliber and explosive satchels.<br/> <img image='\z\ace\addons\explosives\Data\UI\Pliers.paa' width='50' height='50'/> <br/><br/> <img image='\A3\armor_f_beta\APC_Tracked_01\Data\UI\APC_Tracked_01_CRV_ca.paa' width='30' height='20'/> <marker name='blufor_base'>Clean up:</marker><br/> You can remove wreck or object around IED or fake IED by driving a Nemmera in their direction. <img image='\A3\EditorPreviews_F\Data\CfgVehicles\B_APC_Tracked_01_CRV_F.jpg' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Cualquier objeto puede ser un artefacto explosivo improvisado, acérquese a él con cuidado (NO rote mientras camina: prefiera caminar, detenerse, rotar, volver a caminar, etc.). Encienda su detector de minas (VMH3 o VMMH3) y busque una carga en un círculo de 2 metros alrededor.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Si usted es ingeniero y tiene un kit de desactivación, puede desarmarlo.<br/> También puedes volarlos con explosivos y fuego de alto calibre. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Jedes Objekt kann eine IED sein, seien sie ensprechen Vorsichtig und machen Sie keine hastigen Bewegungen (NICHT drehen wenn man läuft: besser gehen, stop, drehen, gehen und so weiter). Schalten Sie ihren Minendetektor (VMH3 oder VMMH3) ein und suchen sie in eim 2m Radius nach der Ladung.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Wenn Sie ein Ingenieur sind und ein Entschärfungskit dabei habe, können Sie die Sprengladung entschärfen.<br/> Es is ebenfalls möglich die IED mithilfe von hohen Kalibern oder Sprengladungen zu entfernen (kontrollierte Explosion). <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Qualquer objeto pode ser um IED, aproxime-o com cuidado (NÃO vire-se enquanto estiver andando: ande, pare, olhe, ande de novo, etc.). Ative o seu detector de minas (VMH3 ou VMMH3) e procure uma carga em um círculo de 2 metros ao redor.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Se você é um engenheiro e possui um kit de desarme, você pode desarmá-lo.<br/> Também é possível destruir o IED usando grosso calibre ou explosivos (explosão controlada). diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index da8632159..3b41464fd 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -85,9 +85,16 @@ To destroy an hideout just place a satchel near the ammo box, it's close to the ## IED -Any object could be an IED, approach it carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around. -If you are an engineer and have a defusal kit, you can disarm it. -You can also blow them off with high caliber and explosive satchels. +Any object could be an IED or a fake IED. + +###Detection: +Approach IED carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around. + +###Defuse: +If you are an engineer and have a defusal kit, you can disarm it. You can also blow them off with high caliber and explosive satchels. + +###Clean up +You can remove wreck or object around IED or fake IED by driving a Nemmera in their direction. ## Intel From fb57de2d11b26e0ce0db9217c0684a897c0e2dec Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 27 Mar 2020 17:13:02 +0100 Subject: [PATCH 028/264] FIX visual of ingame doc --- docs/InGame-documentation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 3b41464fd..2da8cf952 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -87,13 +87,13 @@ To destroy an hideout just place a satchel near the ammo box, it's close to the ## IED Any object could be an IED or a fake IED. -###Detection: +### Detection: Approach IED carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around. -###Defuse: +### Defuse: If you are an engineer and have a defusal kit, you can disarm it. You can also blow them off with high caliber and explosive satchels. -###Clean up +### Clean up You can remove wreck or object around IED or fake IED by driving a Nemmera in their direction. From 6811b51209b6608eaf6213324f7baf410f41c2e2 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 28 Mar 2020 20:08:31 +0100 Subject: [PATCH 029/264] Clean up previous system --- .../core/fnc/common/intro.sqf | 49 ------------------- .../core/fnc/compile.sqf | 2 - .../core/fnc/eh/player.sqf | 1 + .../core/fnc/eh/player_respawn.sqf | 30 ------------ .../core/fnc/fob/create_s.sqf | 8 +-- .../core/init_player.sqf | 4 +- .../core/init_server.sqf | 1 - .../description.ext | 3 +- =BTC=co@30_Hearts_and_Minds.Altis/init.sqf | 2 - =BTC=co@30_Hearts_and_Minds.Altis/mission.sqm | 1 - .../mission_RHSUS_Altis.sqm | 1 - .../mission_RHSUS_Tanoa.sqm | 1 - .../stringtable.xml | 41 ---------------- 13 files changed, 10 insertions(+), 134 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf deleted file mode 100644 index 3a5c2891d..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf +++ /dev/null @@ -1,49 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_intro - -Description: - Introduction camera. - -Parameters: - _gear_object - Arsenal position. [String] - _create_object - Repair/Logistic position. [Object] - -Returns: - -Examples: - (begin example) - [] call btc_fnc_intro; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_gear_object", btc_gear_object, [""]], - ["_create_object", btc_create_object, [objNull]] -]; - -private _color = [1, 0.5, 0,1]; - -private _gear_object_pos = getPos _gear_object; -_gear_object_pos params ["_gear_object_pos_x", "_gear_object_pos_y", "_gear_object_pos_z"]; -private _create_object_pos = getPos _create_object; -_create_object_pos params ["_create_object_pos_x", "_create_object_pos_y", "_create_object_pos_z"]; - -private _array = [ - ['\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa', _color, _gear_object_pos, 1.1, 1.1, 0, localize "STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY", 1], //Arsenal/Re-deploy - ['\A3\Ui_f\data\Logos\a_64_ca.paa', _color, [_gear_object_pos_x, _gear_object_pos_y, _gear_object_pos_z + 2], 1.1, 1.1, 0, "", 1], - //['\A3\ui_f\data\map\vehicleicons\iconCar_ca.paa', _color, [_create_object_pos_x, _create_object_pos_y, _create_object_pos_z + 5], 0.9, 0.9, 90, "", 1], - ['\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa', _color, [_create_object_pos_x, _create_object_pos_y, _create_object_pos_z + 2.5], 0.9, 0.9, 0, "", 1], - ['\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa', _color, _create_object_pos, 0.9, 0.9, 0, localize "STR_BTC_HAM_INTRO_LOGPOINT", 1] //Rearm/Repair and Objects -]; -if (!isNil "btc_helo_1") then { - _array pushBack ['\A3\ui_f\data\map\vehicleicons\iconhelicopter_ca.paa', [0.7, 0, 0,1], getPos btc_helo_1, 1.1, 1.1, 0, localize "STR_BTC_HAM_INTRO_ONLYRESPAWN", 1]; //Only Respawnable -}; - -[getMarkerPos "btc_base", localize "STR_BTC_HAM_INTRO_LOADINGTXT", 20, 30, 240, 0, _array, 0] call BIS_fnc_establishingShot; - -enableSaving [false, false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 4dffbf291..0152a20e8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -246,7 +246,6 @@ if (!isDedicated) then { btc_fnc_end_mission = compile preprocessFileLineNumbers "core\fnc\common\end_mission.sqf"; btc_fnc_get_cardinal = compile preprocessFileLineNumbers "core\fnc\common\get_cardinal.sqf"; btc_fnc_show_hint = compile preprocessFileLineNumbers "core\fnc\common\show_hint.sqf"; - btc_fnc_intro = compile preprocessFileLineNumbers "core\fnc\common\intro.sqf"; btc_fnc_set_markerTextLocal = compile preprocessFileLineNumbers "core\fnc\common\set_markerTextLocal.sqf"; btc_fnc_showSubtitle = compile preprocessFileLineNumbers "core\fnc\common\showSubtitle.sqf"; btc_fnc_get_composition = compile preprocessFileLineNumbers "core\fnc\common\get_composition.sqf"; @@ -278,7 +277,6 @@ if (!isDedicated) then { btc_fnc_ied_effect_shock_wave = compile preprocessFileLineNumbers "core\fnc\ied\effect_shock_wave.sqf"; //EH - btc_fnc_eh_player_respawn = compile preprocessFileLineNumbers "core\fnc\eh\player_respawn.sqf"; btc_fnc_eh_CuratorObjectPlaced = compile preprocessFileLineNumbers "core\fnc\eh\CuratorObjectPlaced.sqf"; btc_fnc_eh_player = compile preprocessFileLineNumbers "core\fnc\eh\player.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index d479eeb6d..910b4faa6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -25,6 +25,7 @@ params [ ["_player", objNull, [objNull]] ]; +_player addEventHandler ["Respawn", {btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]}]; _player addEventHandler ["CuratorObjectPlaced", btc_fnc_eh_CuratorObjectPlaced]; ["ace_treatmentSucceded", btc_fnc_rep_treatment] call CBA_fnc_addEventHandler; _player addEventHandler ["WeaponAssembled", btc_fnc_civ_add_leaflets]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf deleted file mode 100644 index 5f6e2608f..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf +++ /dev/null @@ -1,30 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_player_respawn - -Description: - Change reputation when player respawn and set position for respawn. - -Parameters: - _pos - Respawn position. [Array] - -Returns: - -Examples: - (begin example) - _result = [] call btc_fnc_eh_player_respawn; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_pos", [0, 0, 0], [[]]] -]; - -player addRating 9999; -player setCaptive false; - -btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf index bed083a03..980b0cc1b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf @@ -36,9 +36,9 @@ params [ ]; private _flag = createVehicle [_fob_flag, _pos, [], 0, "CAN_COLLIDE"]; -private _struc = createVehicle [_fob_structure, _pos, [], 0, "CAN_COLLIDE"]; +private _structure = createVehicle [_fob_structure, _pos, [], 0, "CAN_COLLIDE"]; -_struc setDir _direction; +_structure setDir _direction; private _marker = createMarker [_FOB_name, _pos]; _marker setMarkerSize [1, 1]; @@ -52,6 +52,6 @@ _marker setMarkerShape "ICON"; (_fobs select 2) pushBack _flag; _flag setVariable ["BIS_fnc_IDRespawnPosition", ([missionNamespace, _flag, _FOB_name] call BIS_fnc_addRespawnPosition) select 1]; -_struc addEventHandler ["Killed", btc_fnc_fob_killed]; +_structure addEventHandler ["Killed", btc_fnc_fob_killed]; -[_marker, _struc, _flag] +[_marker, _structure, _flag] diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 1fdab13a4..348de4d04 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,7 +1,9 @@ [] call compile preprocessFileLineNumbers "core\doc.sqf"; -[{!isNull player}, { +btc_respawn_marker setMarkerTextLocal localize "STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY"; +[{!isNull player}, { + btc_respawn_marker setMarkerPosLocal player; player addRating 9999; ["InitializePlayer", [player]] call BIS_fnc_dynamicGroups; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index 1652e5b4c..b3d4638d8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -1,6 +1,5 @@ [] call compile preprocessFileLineNumbers "core\fnc\city\init.sqf"; -"respawn_west" setMarkerPos btc_flag; ["Initialize"] call BIS_fnc_dynamicGroups; setTimeMultiplier btc_p_acctime; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/description.ext b/=BTC=co@30_Hearts_and_Minds.Altis/description.ext index 295295f9b..1cfd1135c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/description.ext +++ b/=BTC=co@30_Hearts_and_Minds.Altis/description.ext @@ -50,7 +50,8 @@ class Extended_InitPost_EventHandlers { }; respawn = "BASE"; -respawnDelay = 1; +respawnDelay = 2; +respawnDialog = 0; respawnOnStart = 1; respawnTemplates[] = {"MenuPosition"}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf index 392aeb323..b291f2a6d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf @@ -1,7 +1,5 @@ enableSaving [false, false]; -if (hasInterface) then {btc_intro_done = [] spawn btc_fnc_intro;}; - [] call compile preprocessFileLineNumbers "core\def\mission.sqf"; [] call compile preprocessFileLineNumbers "define_mod.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm index 370d446e4..9b63d8441 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm @@ -977,7 +977,6 @@ class Mission class Attributes { skill=0.60000002; - name="btc_flag"; }; id=21; type="Flag_NATO_F"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm index 3e1bec64b..8cc2fbb25 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm @@ -1351,7 +1351,6 @@ class Mission class Attributes { skill=0.60000002; - name="btc_flag"; }; id=21; type="Flag_NATO_F"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm index 81d287bc2..6ca1ead98 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm @@ -1046,7 +1046,6 @@ class Mission class Attributes { skill=0.60000002; - name="btc_flag"; }; id=21; type="Flag_NATO_F"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index a4c4f98a6..1e6366ab0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -45,27 +45,6 @@ Arsenal/Ressurgir 军火库/重新部署 - - Rearm/Repair and Objects - Rearmado/Reparaciones y Objetos - Aufmunitionieren und Reparieren von Fahrzeugen - Municiamento e Reparação de Veículos - 弹药补给/车辆修理 - - - Only Respawnable - Solo Respawneable - Respawnt bei Zertörung - Único Respawnável - 可重生载具 - - - Base overview. Loading ... - Vista de la Base. Cargando ... - Basisübersicht. Lade ... - Visão geral da base. Carregando... - 基地总览. 加载中 ... - @@ -1664,26 +1643,6 @@ Desmontando, se afaste... 正在拆除, 请远离 ... - - No FOBs deployed - No hay FOBs desplegados - Es sind keine FOBs aufgebaut - Nenhuma FOB montada - 未部署FOB - - - Moving to %1 - Moviéndose a %1 - Verlege zu %1 - Movendo para %1 - 移动到 %1 - - - Select a FOB - FOB auswähen - 选择一个FOB: - Selecione uma FOB - Name the FOB: Nombra el FOB: From 0fa985d605cc639bb7a0930f6dbba6c7dc3c7cb2 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 29 Mar 2020 00:30:50 +0100 Subject: [PATCH 030/264] Add rallypoint timer --- .../core/def/mission.sqf | 2 +- .../core/fnc/compile.sqf | 2 + .../core/fnc/eh/player.sqf | 2 + .../core/fnc/fob/rallypointAssemble.sqf | 55 +++++++++++++++++++ .../core/fnc/fob/rallypointTimer.sqf | 46 ++++++++++++++++ .../core/init_player.sqf | 2 + =BTC=co@30_Hearts_and_Minds.Altis/init.sqf | 1 + 7 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index edf26274c..c7b677f20 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -143,7 +143,7 @@ if (isServer) then { //FOB btc_fobs = [[], [], []]; - btc_fob_rallypointTicket = 2; + btc_fob_rallypointTimer = 60 * 30; // 30min //MIL btc_p_mil_wp_ratios = [_wp_house_probability, (1 - _wp_house_probability) / 1.5 + _wp_house_probability]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 0152a20e8..e41c9264a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -101,6 +101,7 @@ if (isServer) then { btc_fnc_fob_create_s = compile preprocessFileLineNumbers "core\fnc\fob\create_s.sqf"; btc_fnc_fob_dismantle_s = compile preprocessFileLineNumbers "core\fnc\fob\dismantle_s.sqf"; btc_fnc_fob_killed = compile preprocessFileLineNumbers "core\fnc\fob\killed.sqf"; + btc_fnc_fob_rallypointTimer = compile preprocessFileLineNumbers "core\fnc\fob\rallypointTimer.sqf"; //MIL btc_fnc_mil_addWP = compile preprocessFileLineNumbers "core\fnc\mil\addWP.sqf"; @@ -282,6 +283,7 @@ if (!isDedicated) then { //FOB btc_fnc_fob_create = compile preprocessFileLineNumbers "core\fnc\fob\create.sqf"; + btc_fnc_fob_rallypointAssemble = compile preprocessFileLineNumbers "core\fnc\fob\rallypointAssemble.sqf"; //INT btc_fnc_int_add_actions = compile preprocessFileLineNumbers "core\fnc\int\add_actions.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 910b4faa6..b6d9babd7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -29,6 +29,8 @@ _player addEventHandler ["Respawn", {btc_rep_malus_player_respawn remoteExecCall _player addEventHandler ["CuratorObjectPlaced", btc_fnc_eh_CuratorObjectPlaced]; ["ace_treatmentSucceded", btc_fnc_rep_treatment] call CBA_fnc_addEventHandler; _player addEventHandler ["WeaponAssembled", btc_fnc_civ_add_leaflets]; +[_player, "WeaponAssembled", {[_thisType, _this] call btc_fnc_fob_rallypointAssemble;}] call CBA_fnc_addBISEventHandler; +[_player, "WeaponDisassembled", {[_thisType, _this] call btc_fnc_fob_rallypointAssemble;}] call CBA_fnc_addBISEventHandler; if (btc_p_chem) then { // Add biopsy diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf new file mode 100644 index 000000000..724251ba3 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf @@ -0,0 +1,55 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_fob_rallypointAssemble + +Description: + Handle assembling and disassembling of BI rallypoint. + +Parameters: + _nameEH - Name of the event. [String] + _args - Arguments passed by the event. [Array] + +Returns: + +Examples: + (begin example) + ["WeaponAssembled", [player, cursorObject]] call btc_fnc_fob_rallypointAssemble; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_nameEH", "", [""]], + ["_args", [], [[]]] +]; + +switch (_nameEH) do { + case "WeaponAssembled": { + _args params [ + ["_player", objNull, [objNull]], + ["_rallyPoint", objNull, [objNull]] + ]; + + if !(_rallyPoint isKindOf "Camping_base_F") exitWith {_this}; + _rallyPoint remoteExecCall ["btc_fnc_fob_timer", 2]; + }; + case "WeaponDisassembled": { + _args params [ + ["_player", objNull, [objNull]], + ["_bag", objNull, [objNull]] + ]; + + if !("_Respawn_" in typeOf _bag) exitWith {_this}; + + private _markers = ([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]; + private _playerPos = getPosWorld _player; + _markers = _markers apply {[_playerPos distance markerPos _x, _x]}; + _markers sort true; + deleteMarker (_markers select 0 select 1); + }; + default { + }; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf new file mode 100644 index 000000000..e2ae4e8af --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf @@ -0,0 +1,46 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_fob_rallypointTimer + +Description: + Create a timer until the object is destroyed, ie the rallypoint is destroyed. + +Parameters: + _rallypoint - Rallypoint. [Object] + _delay - Delay before the rallypoint will be destroyed. [Number] + +Returns: + +Examples: + (begin example) + [cursorObject] call btc_fnc_fob_rallypointTimer; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_rallypoint", objNull, [objNull]], + ["_delay", btc_fob_rallypointTimer, [0]] +]; + +_rallypoint setVariable ["btc_fob_isAssembled", position _rallypoint]; +private _time = serverTime; +_rallypoint setVariable ["btc_fob_assembleTime", _time]; + +[{ + params [ + ["_rallypoint", objNull, [objNull]], + ["_time", 0, [0]] + ]; + + if ( + isNull _rallypoint || + _time != _rallypoint getVariable ["btc_fob_assembleTime", -1] + ) exitWith {}; + if (_rallypoint inArea [_rallypoint getVariable ["btc_fob_isAssembled", [0, 0]], 1, 1, 0, false]) then { + deleteVehicle _rallypoint; + }; +}, [_rallypoint, _time], _delay] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 348de4d04..73c45b974 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -30,6 +30,8 @@ btc_respawn_marker setMarkerTextLocal localize "STR_BTC_HAM_INTRO_ARSENAL_REDEPL default { }; }; + + endLoadingScreen; }] call CBA_fnc_waitUntilAndExecute; if (btc_debug) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf index b291f2a6d..22e8b56bb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf @@ -1,3 +1,4 @@ +if (hasInterface) then {startLoadingScreen [""];}; enableSaving [false, false]; [] call compile preprocessFileLineNumbers "core\def\mission.sqf"; From 34679e3f9694ff5d1c8054d8788b9ba193d54836 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 29 Mar 2020 16:07:39 +0200 Subject: [PATCH 031/264] Add Intro --- .../core/fnc/common/intro.sqf | 48 +++++++++++++++++++ .../core/fnc/compile.sqf | 1 + .../core/fnc/eh/player.sqf | 9 +++- .../stringtable.xml | 21 ++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf new file mode 100644 index 000000000..2628ada98 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf @@ -0,0 +1,48 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_intro + +Description: + Introduction camera. + +Parameters: + _gear_object - Arsenal position. [String] + _create_object - Repair/Logistic position. [Object] + +Returns: + +Examples: + (begin example) + [] spawn btc_fnc_intro; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_gear_object", btc_gear_object, [""]], + ["_create_object", btc_create_object, [objNull]] +]; + +private _color = [1, 0.5, 0,1]; + +private _gear_object_pos = getPos _gear_object; +_gear_object_pos params ["_gear_object_pos_x", "_gear_object_pos_y", "_gear_object_pos_z"]; +private _create_object_pos = getPos _create_object; +_create_object_pos params ["_create_object_pos_x", "_create_object_pos_y", "_create_object_pos_z"]; + +private _array = [ + ['\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa', _color, _gear_object_pos, 1.1, 1.1, 0, localize "STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY", 1], //Arsenal/Re-deploy + ['\A3\Ui_f\data\Logos\a_64_ca.paa', _color, [_gear_object_pos_x, _gear_object_pos_y, _gear_object_pos_z + 2], 1.1, 1.1, 0, "", 1], + //['\A3\ui_f\data\map\vehicleicons\iconCar_ca.paa', _color, [_create_object_pos_x, _create_object_pos_y, _create_object_pos_z + 5], 0.9, 0.9, 90, "", 1], + ['\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa', _color, [_create_object_pos_x, _create_object_pos_y, _create_object_pos_z + 2.5], 0.9, 0.9, 0, "", 1], + ['\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa', _color, _create_object_pos, 0.9, 0.9, 0, localize "STR_BTC_HAM_INTRO_LOGPOINT", 1] //Rearm/Repair and Objects +]; +if (!isNil "btc_helo_1") then { + _array pushBack ['\A3\ui_f\data\map\vehicleicons\iconhelicopter_ca.paa', [0.7, 0, 0,1], getPos btc_helo_1, 1.1, 1.1, 0, localize "STR_BTC_HAM_INTRO_ONLYRESPAWN", 1]; //Only Respawnable +}; + +[getMarkerPos "btc_base", localize "STR_BTC_HAM_INTRO_LOADINGTXT", 20, 30, 240, 0, _array, 0] call BIS_fnc_establishingShot; +enableSaving [false, false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index e41c9264a..24fa22945 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -247,6 +247,7 @@ if (!isDedicated) then { btc_fnc_end_mission = compile preprocessFileLineNumbers "core\fnc\common\end_mission.sqf"; btc_fnc_get_cardinal = compile preprocessFileLineNumbers "core\fnc\common\get_cardinal.sqf"; btc_fnc_show_hint = compile preprocessFileLineNumbers "core\fnc\common\show_hint.sqf"; + btc_fnc_intro = compile preprocessFileLineNumbers "core\fnc\common\intro.sqf"; btc_fnc_set_markerTextLocal = compile preprocessFileLineNumbers "core\fnc\common\set_markerTextLocal.sqf"; btc_fnc_showSubtitle = compile preprocessFileLineNumbers "core\fnc\common\showSubtitle.sqf"; btc_fnc_get_composition = compile preprocessFileLineNumbers "core\fnc\common\get_composition.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index b6d9babd7..1d4f50dd6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -25,7 +25,14 @@ params [ ["_player", objNull, [objNull]] ]; -_player addEventHandler ["Respawn", {btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]}]; +[_player, "Respawn", { + player removeEventHandler [_thisType, _thisID]; + [] spawn btc_fnc_intro; +}] call CBA_fnc_addBISEventHandler; +_player addEventHandler ["Killed", { + if (isObjectHidden player) exitWith {}; + btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]; +}]; _player addEventHandler ["CuratorObjectPlaced", btc_fnc_eh_CuratorObjectPlaced]; ["ace_treatmentSucceded", btc_fnc_rep_treatment] call CBA_fnc_addEventHandler; _player addEventHandler ["WeaponAssembled", btc_fnc_civ_add_leaflets]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 1e6366ab0..87039a0bf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -45,6 +45,27 @@ Arsenal/Ressurgir 军火库/重新部署 + + Rearm/Repair and Objects + Rearmado/Reparaciones y Objetos + Aufmunitionieren und Reparieren von Fahrzeugen + Municiamento e Reparação de Veículos + 弹药补给/车辆修理 + + + Only Respawnable + Solo Respawneable + Respawnt bei Zertörung + Único Respawnável + 可重生载具 + + + Base overview. Loading ... + Vista de la Base. Cargando ... + Basisübersicht. Lade ... + Visão geral da base. Carregando... + 基地总览. 加载中 ... + From 471b32bf237b9bfa9f051062eb87184b878e3ca7 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 2 Apr 2020 02:14:20 +0200 Subject: [PATCH 032/264] Add custom respawn location and rallypoint timer self destruction --- .../core/def/mission.sqf | 10 +++-- .../core/def/param.hpp | 36 ++++++++++----- .../core/doc.sqf | 4 +- .../core/fnc/common/intro.sqf | 3 +- .../core/fnc/db/add_veh.sqf | 10 +++++ .../core/fnc/eh/player.sqf | 8 ++++ .../core/fnc/eh/veh_add_respawn.sqf | 5 +++ .../core/fnc/fob/rallypointAssemble.sqf | 9 ++-- .../core/fnc/fob/rallypointTimer.sqf | 4 +- .../core/fnc/int/add_actions.sqf | 2 +- .../core/init_player.sqf | 2 - =BTC=co@30_Hearts_and_Minds.Altis/mission.sqm | 1 + .../mission_RHSUS_Altis.sqm | 1 + .../mission_RHSUS_Tanoa.sqm | 1 + .../stringtable.xml | 45 ++++++++++++------- 15 files changed, 97 insertions(+), 44 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 320a60126..03773c776 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -9,6 +9,11 @@ btc_p_acctime = "btc_p_acctime" call BIS_fnc_getParamValue; private _p_db = ("btc_p_load" call BIS_fnc_getParamValue) isEqualTo 1; btc_p_auto_db = "btc_p_auto_db" call BIS_fnc_getParamValue isEqualTo 1; +//<< Respawn options >> +btc_p_respawn_location = "btc_p_respawn_location" call BIS_fnc_getParamValue; +btc_p_rallypointTimer = "btc_p_rallypointTimer" call BIS_fnc_getParamValue; +btc_p_respawn_arsenal = ("btc_p_respawn_arsenal" call BIS_fnc_getParamValue) isEqualTo 1; + //<< Faction options >> private _p_en = "btc_p_en" call BIS_fnc_getParamValue; private _p_en_AA = ("btc_p_AA" call BIS_fnc_getParamValue) isEqualTo 1; @@ -28,9 +33,6 @@ private _cache_info_def = "btc_p_cache_info_def" call BIS_fnc_getParamValue; private _cache_info_ratio = "btc_p_cache_info_ratio" call BIS_fnc_getParamValue; private _info_chance = "btc_p_info_chance" call BIS_fnc_getParamValue; -//<< Medical options >> -btc_p_redeploy = ("btc_p_redeploy" call BIS_fnc_getParamValue) isEqualTo 1; - //<< Skill options >> btc_p_set_skill = ("btc_p_set_skill" call BIS_fnc_getParamValue) isEqualTo 1; private _p_skill = [ @@ -144,7 +146,7 @@ if (isServer) then { //FOB btc_fobs = [[], [], []]; - btc_fob_rallypointTimer = 60 * 30; // 30min + btc_fob_rallypointTimer = 60 * btc_p_rallypointTimer; //MIL btc_p_mil_wp_ratios = [_wp_house_probability, (1 - _wp_house_probability) / 1.5 + _wp_house_probability]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index 01dbc8b2d..bd2c86da0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -29,6 +29,30 @@ class Params { texts[]={$STR_DISABLED,$STR_ENABLED}; // texts[]={"Off","On"}; default = 0; }; + class btc_p_respawn_title { // << Respawn options >> + title = $STR_BTC_HAM_RESP_TITLE; + values[]={0}; + texts[]={""}; + default = 0; + }; + class btc_p_respawn_location { // Respawn locations available: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_LOCATION"]); + values[]={0,1,2,3}; + texts[]={$STR_BTC_HAM_RESP_FOBRALLY, $STR_BTC_HAM_RESP_FOBRALLYHELO, $STR_BTC_HAM_RESP_FOBRALLYHELI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHI}; + default = 0; + }; + class btc_p_rallypointTimer { // Time before rallypoint self-destruction: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_RALLYTIMER"]); + values[]={0,5,10,30,60}; + texts[]={$STR_DISABLED,"5 min","10 min","30 min","60 min"}; + default = 30; + }; + class btc_p_respawn_arsenal { // ACE Arsenal available on respawn after been killed: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_ENABLEARSENAL"]); + values[]={0,1}; + texts[]={$STR_DISABLED,$STR_ENABLED}; + default = 0; + }; class btc_p_type_title { // << Faction options >> title = $STR_BTC_HAM_PARAM_FAC_TITLE; values[]={0}; @@ -179,18 +203,6 @@ class Params { texts[]={"100 %","90 %","80 %","70 %","60 %","50 %","40 %","30 %","20 %","10 %","0 %"}; default = 70; }; - class btc_p_medical_title { // << Medical options >> - title = $STR_BTC_HAM_MEDI_TITLE; - values[]={0}; - texts[]={""}; - default = 0; - }; - class btc_p_redeploy { // Allow re-deploy? - title = __EVAL(format [" %1", localize "STR_BTC_HAM_MEDI_REDEPLOY"]); - values[]={0,1}; - texts[]={$STR_DISABLED,$STR_ENABLED}; - default = 1; - }; class btc_p_skill_title { // << A3 Skill options >> title = $STR_BTC_HAM_PARAM_SKILL_TITLE; values[]={0}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf index 41bedce0e..c7d1580a6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf @@ -16,8 +16,8 @@ player createDiaryRecord [_MainCategory, [localize "str_a3_cfghints_command_vehi //Side Mission player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_SIDEMISSION_TITLE", localize "STR_BTC_HAM_DOC_SIDEMISSION_TEXT"]]; -//FOB -player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_FOB_TITLE", localize "STR_BTC_HAM_DOC_FOB_TEXT"]]; +//Respawn position +player createDiaryRecord [_MainCategory, [localize "str_a3_cfgvehicles_modulerespawnposition_f_0", localize "STR_BTC_HAM_DOC_FOB_TEXT"]]; //Sling loading player createDiaryRecord [_MainCategory, [localize "STR_A3_SlingLoad1", localize "STR_BTC_HAM_DOC_SLING_TEXT"]]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf index 2628ada98..3a5c2891d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/intro.sqf @@ -13,7 +13,7 @@ Returns: Examples: (begin example) - [] spawn btc_fnc_intro; + [] call btc_fnc_intro; (end) Author: @@ -45,4 +45,5 @@ if (!isNil "btc_helo_1") then { }; [getMarkerPos "btc_base", localize "STR_BTC_HAM_INTRO_LOADINGTXT", 20, 30, 240, 0, _array, 0] call BIS_fnc_establishingShot; + enableSaving [false, false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf index db3467f31..32dd05381 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf @@ -37,6 +37,16 @@ _veh addMPEventHandler ["MPKilled", { if ((isNumber (configfile >> "CfgVehicles" >> typeOf _veh >> "ace_fastroping_enabled")) && !(typeOf _veh isEqualTo "RHS_UH1Y_d")) then { [_veh] call ace_fastroping_fnc_equipFRIES }; +if (btc_p_respawn_location > 1) then { + if !(fullCrew [_veh, "cargo", true] isEqualTo []) then { + if ( + (btc_p_respawn_location isEqualTo 2) && (_veh isKindOf "Air") || + btc_p_respawn_location > 2 + ) then { + [missionNamespace, _veh] call BIS_fnc_addRespawnPosition; + }; + }; +}; if (_p_chem) then { _veh addEventHandler ["GetIn", { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index f645c2b18..3de1dad6e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -65,3 +65,11 @@ if (btc_p_spect) then { [_unit, currentWeapon _unit] call btc_fnc_spect_updateDevice; }] call CBA_fnc_addPlayerEventHandler; }; + +if (btc_p_respawn_arsenal) then { + [_player, "Respawn", { + params ["_unit", "_corpse"]; + if (isObjectHidden _corpse) exitWith {}; + [btc_gear_object, _unit] call ace_arsenal_fnc_openBox; + }] call CBA_fnc_addBISEventHandler; +}; \ No newline at end of file diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf index fac75c196..ab0eefe00 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf @@ -42,6 +42,11 @@ _vehicle setVariable ["data_respawn", [_type, _pos, _dir, _time, _vector] + _veh if ((isNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "ace_fastroping_enabled")) && !(typeOf _vehicle isEqualTo "RHS_UH1Y_d")) then {[_vehicle] call ace_fastroping_fnc_equipFRIES}; _vehicle addMPEventHandler ["MPKilled", {if (isServer) then {[_this select 0] call btc_fnc_eh_veh_respawn};}]; +if (btc_p_respawn_location > 0) then { + if !(fullCrew [_vehicle, "cargo", true] isEqualTo []) then { + [missionNamespace, _vehicle] call BIS_fnc_addRespawnPosition; + }; +}; if (_p_chem) then { _vehicle addEventHandler ["GetIn", { [_this select 0, _this select 2] call btc_fnc_chem_propagate; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf index 724251ba3..33e356c8f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointAssemble.sqf @@ -34,7 +34,11 @@ switch (_nameEH) do { ]; if !(_rallyPoint isKindOf "Camping_base_F") exitWith {_this}; - _rallyPoint remoteExecCall ["btc_fnc_fob_timer", 2]; + _rallyPoint remoteExecCall ["btc_fnc_fob_rallypointTimer", 2]; + [ + [format [localize "STR_BTC_HAM_O_FOB_SELFDESTRUCTION", btc_p_rallypointTimer]], + [""] + ] call CBA_fnc_notify; }; case "WeaponDisassembled": { _args params [ @@ -45,8 +49,7 @@ switch (_nameEH) do { if !("_Respawn_" in typeOf _bag) exitWith {_this}; private _markers = ([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]; - private _playerPos = getPosWorld _player; - _markers = _markers apply {[_playerPos distance markerPos _x, _x]}; + _markers = _markers apply {[_player distance markerPos _x, _x]}; _markers sort true; deleteMarker (_markers select 0 select 1); }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf index e2ae4e8af..a8b538f12 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf @@ -3,11 +3,11 @@ Function: btc_fnc_fob_rallypointTimer Description: - Create a timer until the object is destroyed, ie the rallypoint is destroyed. + Create a timer and when timer is up, trigger self destruction. Parameters: _rallypoint - Rallypoint. [Object] - _delay - Delay before the rallypoint will be destroyed. [Number] + _delay - Delay before the rallypoint self-destruction. [Number] Returns: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 5e7b73bb9..f6c2ff8a9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,7 +127,7 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {btc_p_redeploy}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {true}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 73c45b974..5047d4df1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,7 +1,5 @@ [] call compile preprocessFileLineNumbers "core\doc.sqf"; -btc_respawn_marker setMarkerTextLocal localize "STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY"; - [{!isNull player}, { btc_respawn_marker setMarkerPosLocal player; player addRating 9999; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm index 9b63d8441..5fa693c32 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm @@ -699,6 +699,7 @@ class Mission dataType="Marker"; position[]={8300.7275,76.093613,10061.531}; name="respawn_west"; + text=$STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY; type="Empty"; id=0; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm index 8cc2fbb25..3baf1203d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm @@ -691,6 +691,7 @@ class Mission dataType="Marker"; position[]={8300.7275,76.093613,10061.531}; name="respawn_west"; + text=$STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY; type="Empty"; id=0; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm index 6ca1ead98..706e3d5bf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm @@ -658,6 +658,7 @@ class Mission dataType="Marker"; position[]={4231.5,360.625,4011.125}; name="respawn_west"; + text=$STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY; type="Empty"; angle=33.149483; id=0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 2627e0031..da4cf43e0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -110,13 +110,9 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> 支线任务有利于提升声誉值。<br/> 军官(Officer)可以使用自我互动菜单申请支线任务。<br/> 军官(Officer)可以使用自我互动菜单随时取消支线任务。 - - - FOB/Rallypoint - FOB/集合点 - + - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> You can dismantle a FOB by interacting with the flag on the HQ roof.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Rallypoint:</marker><br/> You can also use the Zeus rallypoint backpack available in Arsenal. Those have a limited number of respawn. + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> You can dismantle a FOB by interacting with the flag on the HQ roof.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Rallypoint:</marker><br/> You can also use the Zeus rallypoint backpack available in Arsenal but they have some limitation. After some times or after player disconnected, rallypoint will self-destruct. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB. @@ -441,18 +437,30 @@ 敌军尸体携带情报的几率: - - - << Medical options >> - << Sanitäts-Einstellungen >> - << Opções Médicas >> - << 医疗设置 >> + + + << Respawn options >> + + + Respawn locations available: + + + FOB and Rallypoint + + + FOB, Rallypoint and Helo - - Allow re-deploy? - Verlegen erlauben? - Permitir ressurgimento? - 允许重新部署? + + FOB, Rallypoint and Transport helicopter + + + FOB, Rallypoint, Transport helicopter and Transport vehicle + + + Time before rallypoint self-destruction: + + + ACE Arsenal available on respawn after been killed: @@ -1672,6 +1680,9 @@ Nome da FOB: 命名FOB: + + This rallypoint will self-destruct in %1min. + From f1231931b5de7b7cb80ac8f52415c48261a3f49d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 4 Apr 2020 14:48:43 +0200 Subject: [PATCH 033/264] Remove a space --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 3de1dad6e..bc4ed2fbc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -50,7 +50,7 @@ if (btc_p_chem) then { // Add biopsy [missionnamespace, "probingEnded", btc_fnc_chem_biopsy] call BIS_fnc_addScriptedEventHandler; - // Disable BI shower + // Disable BI shower ["DeconShower_01_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction', true];}] call CBA_fnc_addClassEventHandler; ["DeconShower_02_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction', true];}] call CBA_fnc_addClassEventHandler; From 2cf5a261e9b65dffc1c3b3614a0da8059732a202 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 10 Apr 2020 16:52:17 +0200 Subject: [PATCH 034/264] Add loadout for drone and CBRN --- .../core/fnc/arsenal/loadout.sqf | 33 ++++++++++++++++--- .../core/fnc/arsenal/trait.sqf | 6 ++++ .../core/fnc/chem/damage.sqf | 2 +- .../define_mod.sqf | 6 +++- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf index bb4f7df38..ec8ce101c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf @@ -6,7 +6,7 @@ Description: Generate a loadout from an array of defined loadout depending on trait, medical level, color and hour of the day. Parameters: - _type - Type of loadout: 0 - Rifleman, 1 - Medic, 2 - Repair, 3 - Engineer, 4 - Anti-Tank, 5 - Anti Air, 6 - Sniper, 7 - Machine gunner. [Number] + _type - Type of loadout: 0 - Rifleman, 1 - Medic, 2 - Repair, 3 - Engineer, 4 - Anti-Tank, 5 - Anti Air, 6 - Sniper, 7 - Machine gunner, 8 - CBRN, 9 - Drone hacker. [Number] _color - Color of skin loadout: 0 - Desert, 1 - Tropic, 2 - Black, 3 - Forest. [Number] _isDay - Select night (false) or day (true) loadout. [Boolean] _medicalParameters - Select the correct medical stuff depends on ACE3 medical parameters. [Array] @@ -30,7 +30,7 @@ Examples: sleep 1; } forEach [false,true]; } forEach [0,1,2,3]; - } forEach [0,1,2,3,4,5,6,7]; + } forEach [0,1,2,3,4,5,6,7,8,9]; }; (end) @@ -65,7 +65,7 @@ if (_color < 0) then { } }; -(_arsenal_loadout apply {_x select _color}) params ["_uniform", "_vest", "_helmet", "_hood", "_laserdesignator", "_night_vision", "_weapon", "_weapon_sniper", "_weapon_machineGunner", "_bipod", "_pistol", "_launcher_AT", "_launcher_AA", "_backpack", "_backpack_big", "_radio"]; +(_arsenal_loadout apply {_x select _color}) params ["_uniform", "_uniformCBRN", "_uniformSniper", "_vest", "_helmet", "_hood", "_hoodCBRN", "_laserdesignator", "_night_vision", "_weapon", "_weapon_sniper", "_weapon_machineGunner", "_bipod", "_pistol", "_launcher_AT", "_launcher_AA", "_backpack", "_backpack_big", "_backpackCBRN", "_radio"]; if (_isDay isEqualType 0) then { (date call BIS_fnc_sunriseSunsetTime) params ["_sunrise", "_sunset"]; @@ -95,7 +95,28 @@ if (_fractures > 0) then { }; _cargo_uniform append _medical; -//Choose appropriats weapon/optics depends on _type +private _uniform = switch (_type) do { + case 6: { + _uniformSniper + }; + case 8: { + _uniformCBRN + }; + default { + _uniform + }; +}; + +private _hood = switch (_type) do { + case 8: { + _hoodCBRN + }; + default { + _hood + }; +}; + +//Choose appropriate weapon/optics depends on _type private _array = switch (_type) do { case 6: { [_weapon_sniper, ["ACE_optic_Hamr_2D", "ACE_optic_LRPS_2D"]]; @@ -150,7 +171,9 @@ private _cargos = [ [_backpack, [[_launcherMagazines param [1, _launcherMagazine], 1, _launcherCount], [_launcherMagazine, 1, _launcherCount]]], [_backpack_big, [[_launcherMagazine, 2, _launcherCount]]], [_backpack, [["ACE_Sandbag_empty", 1], ["ACE_Kestrel4500", 1], ["ACE_ATragMX", 1], ["ACE_RangeCard", 1], ["ACE_EntrenchingTool", 1]]], - [] + [], + [_backpackCBRN, []], + [_backpack, [["muzzle_antenna_02_f", 1], ["muzzle_antenna_01_f", 1], [["hgun_esd_01_F", "", "", "", [], [], ""], 1]]] ]; private _binocular_array = [_laserdesignator, "", "", "", ["Laserbatteries", 1], [], ""]; private _launcher_array = [_launcher, "", "", "", [_launcherMagazine, _launcherCount], [], ""]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/trait.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/trait.sqf index faf1a31e0..5e559cb52 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/trait.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/trait.sqf @@ -48,6 +48,12 @@ switch (true) do { case ([typeOf _player, ["MachineGun", ""]] call btc_fnc_mil_ammoUsage): { _type_ammoUsageAllowed = [7, [["MachineGun", ""]]]; }; + case ("cbrn" in toLower uniform _player): { + _type_ammoUsageAllowed = [8, [["AssaultRifle", "", [false, "Rifle_Long_Base_F"]]]]; + }; + case (_player getUnitTrait "UAVHacker"): { + _type_ammoUsageAllowed = [9, [["AssaultRifle", "", [false, "Rifle_Long_Base_F"]]]]; + }; default { _type_ammoUsageAllowed = [0, [["AssaultRifle", "", [false, "Rifle_Long_Base_F"]], ["RocketLauncher", ""]]]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf index 449210b17..370394761 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf @@ -38,7 +38,7 @@ private _hasProtection = [ backpack _unit isKindOf "B_SCBA_01_base_F" || backpack _unit isKindOf "B_CombinationUnitRespirator_01_Base_F" ), - uniform _unit find "CBRN" > -1 + "cbrn" in toLower uniform _unit ]; if !(false in _hasProtection) exitWith {_this}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf index c1ec4aab8..7a2d37b8d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf @@ -42,9 +42,12 @@ btc_custom_arsenal = [_weapons, _magazines, _items, _backpacks]; private _radio = ["tf_anprc152", "ACRE_PRC148"] select (isClass(configFile >> "cfgPatches" >> "acre_main")); //Array of colored item: 0 - Desert, 1 - Tropic, 2 - Black, 3 - forest private _uniforms = ["U_B_CombatUniform_mcam", "U_B_CTRG_Soldier_F", "U_B_CTRG_1", "U_B_CombatUniform_mcam_wdl_f"]; +private _uniformsCBRN = ["U_B_CBRN_Suit_01_MTP_F", "U_B_CBRN_Suit_01_Tropic_F", "U_C_CBRN_Suit_01_Blue_F", "U_B_CBRN_Suit_01_Wdl_F"]; +private _uniformsSniper = ["U_B_FullGhillie_sard", "U_B_FullGhillie_lsh", "U_B_T_FullGhillie_tna_F", "U_B_T_FullGhillie_tna_F"]; private _vests = ["V_PlateCarrierH_CTRG", "V_PlateCarrier2_rgr_noflag_F", "V_PlateCarrierH_CTRG", "V_PlateCarrier2_wdl"]; private _helmets = ["H_HelmetSpecB_paint2", "H_HelmetB_Enh_tna_F", "H_HelmetSpecB_blk", "H_HelmetSpecB_wdl"]; private _hoods = ["G_Balaclava_combat", "G_Balaclava_TI_G_tna_F", "G_Balaclava_combat", "G_Balaclava_combat"]; +private _hoodCBRN = "G_AirPurifyingRespirator_01_F"; private _laserdesignators = ["Laserdesignator", "Laserdesignator_03", "Laserdesignator_01_khk_F", "Laserdesignator_01_khk_F"]; private _night_visions = ["NVGoggles", "NVGoggles_INDEP", "NVGoggles_OPFOR", "NVGoggles_INDEP"]; private _weapons = ["arifle_MXC_F", "arifle_MXC_khk_F", "arifle_MXC_Black_F", "arifle_MXC_Black_F"]; @@ -56,5 +59,6 @@ private _launcher_AT = ["launch_B_Titan_short_F", "launch_B_Titan_short_tna_F", private _launcher_AA = ["launch_B_Titan_F", "launch_B_Titan_tna_F", "launch_O_Titan_F", "launch_B_Titan_tna_F"]; private _backpacks = ["B_AssaultPack_Kerry", "B_AssaultPack_eaf_F", "B_AssaultPack_blk", "B_AssaultPack_wdl_F"]; private _backpacks_big = ["B_Kitbag_mcamo", "B_Kitbag_rgr", "B_Kitbag_rgr", "B_Kitbag_rgr"]; +private _backpackCBRN = "B_CombinationUnitRespirator_01_F"; -btc_arsenal_loadout = [_uniforms, _vests, _helmets, _hoods, _laserdesignators, _night_visions, _weapons, _weapons_sniper, _weapons_machineGunner, _bipods, _pistols, _launcher_AT, _launcher_AA, _backpacks, _backpacks_big, [_radio, _radio, _radio, _radio]]; +btc_arsenal_loadout = [_uniforms, _uniformsCBRN, _uniformsSniper, _vests, _helmets, _hoods, [_hoodCBRN, _hoodCBRN, _hoodCBRN, _hoodCBRN], _laserdesignators, _night_visions, _weapons, _weapons_sniper, _weapons_machineGunner, _bipods, _pistols, _launcher_AT, _launcher_AA, _backpacks, _backpacks_big, [_backpackCBRN, _backpackCBRN, _backpackCBRN, _backpackCBRN], [_radio, _radio, _radio, _radio]]; From fbd9eae968fb0ac884b8bb41eabd898377e64a0a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 13 Apr 2020 11:59:33 +0200 Subject: [PATCH 035/264] Add autorestart --- .../core/def/mission.sqf | 2 + .../core/fnc/compile.sqf | 1 + .../core/fnc/db/autoRestart.sqf | 43 +++++++++++++++++++ .../core/init_server.sqf | 5 +++ 4 files changed, 51 insertions(+) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index b7727dea3..ce22a80bf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -8,6 +8,7 @@ btc_p_time = "btc_p_time" call BIS_fnc_getParamValue; btc_p_acctime = "btc_p_acctime" call BIS_fnc_getParamValue; private _p_db = ("btc_p_load" call BIS_fnc_getParamValue) isEqualTo 1; btc_p_auto_db = "btc_p_auto_db" call BIS_fnc_getParamValue isEqualTo 1; +btc_p_db_autoRestart = "btc_p_db_autoRestart" call BIS_fnc_getParamValue; //<< Faction options >> private _p_en = "btc_p_en" call BIS_fnc_getParamValue; @@ -121,6 +122,7 @@ if (isServer) then { //Database btc_db_is_saving = false; btc_db_load = _p_db; + btc_db_serverCommandPassword = "btc_password"; //Define the same password in server.cfg like this: serverCommandPassword = "btc_password"; //Hideout btc_hideouts = []; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 1e91b6209..5d0283be5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -63,6 +63,7 @@ if (isServer) then { btc_fnc_db_loadObjectStatus = compile preprocessFileLineNumbers "core\fnc\db\loadObjectStatus.sqf"; btc_fnc_db_saveObjectStatus = compile preprocessFileLineNumbers "core\fnc\db\saveObjectStatus.sqf"; btc_fnc_db_loadCargo = compile preprocessFileLineNumbers "core\fnc\db\loadcargo.sqf"; + btc_fnc_db_autoRestart = compile preprocessFileLineNumbers "core\fnc\db\autoRestart.sqf"; //DELAY btc_fnc_delay_createUnit = compile preprocessFileLineNumbers "core\fnc\delay\createUnit.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf new file mode 100644 index 000000000..7861e649e --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf @@ -0,0 +1,43 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_db_autoRestart + +Description: + Restart server. + +Parameters: + _p_autoRestart - 0 no auto restart, 1 autorestart, 2 auto save and restart. [Number] + _serverCommandPassword - Password defineed in server.cfg. [String] + +Returns: + +Examples: + (begin example) + [] call btc_fnc_db_autoRestart; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_p_autoRestart", btc_p_db_autoRestart, [0]], + ["_serverCommandPassword", btc_db_serverCommandPassword, ""] +]; + +if (_p_autoRestart isEqualTo 2) then { + if !(btc_db_is_saving) then { + btc_db_is_saving = true; + [] spawn btc_fnc_db_save; + }; + [{!btc_db_is_saving}, { + if !(_this serverCommand "#restartserver") then { + ["STR_STEAM_RESULT_INVALID_PASSWORD", {systemChat localize _this}] remoteExecCall ["call", [0, -2] select isDedicated]; + }; + }, _serverCommandPassword] call CBA_fnc_waitUntilAndExecute; +} else { + if !(_serverCommandPassword serverCommand "#restartserver") then { + ["STR_STEAM_RESULT_INVALID_PASSWORD", {systemChat localize _this}] remoteExecCall ["call", [0, -2] select isDedicated]; + }; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index c451b63fd..dc28f46e3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -28,6 +28,11 @@ if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldN [] call btc_fnc_chem_checkLoop; [] call btc_fnc_chem_handleShower; [] call btc_fnc_spect_checkLoop; +if (btc_p_db_autoRestart > 0) then { + [{ + [] call btc_fnc_db_autoRestart; + }, [], 24 * 60 * 60] call CBA_fnc_waitAndExecute; +}; ["Initialize"] call BIS_fnc_dynamicGroups; From cf4f2b7f345352814c50731d221dc8aadd403cab Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 13 Apr 2020 14:08:16 +0200 Subject: [PATCH 036/264] Use objectParent --- .../core/fnc/fob/rallypointTimer.sqf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf index a8b538f12..4cef9f9ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/rallypointTimer.sqf @@ -26,7 +26,6 @@ params [ ["_delay", btc_fob_rallypointTimer, [0]] ]; -_rallypoint setVariable ["btc_fob_isAssembled", position _rallypoint]; private _time = serverTime; _rallypoint setVariable ["btc_fob_assembleTime", _time]; @@ -40,7 +39,7 @@ _rallypoint setVariable ["btc_fob_assembleTime", _time]; isNull _rallypoint || _time != _rallypoint getVariable ["btc_fob_assembleTime", -1] ) exitWith {}; - if (_rallypoint inArea [_rallypoint getVariable ["btc_fob_isAssembled", [0, 0]], 1, 1, 0, false]) then { + if (objectParent _rallypoint isEqualTo objNull) then { deleteVehicle _rallypoint; }; }, [_rallypoint, _time], _delay] call CBA_fnc_waitAndExecute; From 015a07e9acfc5e28c4955fd886edd3ea8328e45d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 13 Apr 2020 16:02:03 +0200 Subject: [PATCH 037/264] Add param restart shutdown --- .../core/def/mission.sqf | 1 + .../core/def/param.hpp | 12 ++++++++ .../core/fnc/common/show_hint.sqf | 5 ++++ .../core/fnc/db/autoRestart.sqf | 29 ++++++++++++------- .../core/init_server.sqf | 7 +++-- .../stringtable.xml | 18 ++++++++++++ 6 files changed, 60 insertions(+), 12 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index ce22a80bf..7cb4779e7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -9,6 +9,7 @@ btc_p_acctime = "btc_p_acctime" call BIS_fnc_getParamValue; private _p_db = ("btc_p_load" call BIS_fnc_getParamValue) isEqualTo 1; btc_p_auto_db = "btc_p_auto_db" call BIS_fnc_getParamValue isEqualTo 1; btc_p_db_autoRestart = "btc_p_db_autoRestart" call BIS_fnc_getParamValue; +btc_p_db_autoRestartTime = "btc_p_db_autoRestartTime" call BIS_fnc_getParamValue; //<< Faction options >> private _p_en = "btc_p_en" call BIS_fnc_getParamValue; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index a9bac4a78..d51932ae6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -29,6 +29,18 @@ class Params { texts[]={$STR_DISABLED,$STR_ENABLED}; // texts[]={"Off","On"}; default = 0; }; + class btc_p_db_autoRestart { // Auto restart/shutdown server (Must define in server.cfg: serverCommandPassword = "btc_password") + title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_DB_ARESTART"]); + values[]={0,1,2,3,4}; + texts[]={$STR_DISABLED,$STR_DISP_MP_DS_RESTART,$STR_BTC_HAM_PARAM_DB_SHUTDOWN,$STR_BTC_HAM_PARAM_DB_SAVERESTART, $STR_BTC_HAM_PARAM_DB_SAVESHUTDOWN}; // texts[]={"Off","Restart", "Shutdown","Save and restart", "Save and shutdown"}; + default = 0; + }; + class btc_p_db_autoRestartTime { // Time before auto restart/shutdown server + title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_DB_ARESTARTTIME"]); + values[]={1,2,3,4,5,6,7,8,9,10,11,12,24,48,72}; + texts[]={"1h","2h","3h","4h","5h","6h","7h","8h","9h","10h","11h","12h","24h","48h","72h"}; + default = 72; + }; class btc_p_type_title { // << Faction options >> title = $STR_BTC_HAM_PARAM_FAC_TITLE; values[]={0}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf index 19b0424c9..8d6ea8de7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf @@ -94,6 +94,11 @@ private _text = switch (_type) do { case 18 : { localize "STR_BTC_HAM_O_FOB_DISMANTLE_H_PROC"; }; + case 19 : { + [ + localize "STR_BTC_HAM_O_COMMON_REBOOT", 1.5, [1, 0, 0] + ]; + }; }; _text call CBA_fnc_notify; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf index 7861e649e..9fe7f9074 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf @@ -3,17 +3,17 @@ Function: btc_fnc_db_autoRestart Description: - Restart server. + Save or not and restart/shutdown server. Parameters: - _p_autoRestart - 0 no auto restart, 1 autorestart, 2 auto save and restart. [Number] - _serverCommandPassword - Password defineed in server.cfg. [String] + _p_autoRestart - 0: "Off", 1: "Restart", 2: "Shutdown", 3: "Save and restart", 4: "Save and shutdown". [Number] + _serverCommandPassword - Password defined in server.cfg. [String] Returns: Examples: (begin example) - [] call btc_fnc_db_autoRestart; + [4] call btc_fnc_db_autoRestart; (end) Author: @@ -26,18 +26,27 @@ params [ ["_serverCommandPassword", btc_db_serverCommandPassword, ""] ]; -if (_p_autoRestart isEqualTo 2) then { +if (_p_autoRestart isEqualTo 0) exitWith {}; + +private _serverCommand = if (_p_autoRestart in [1, 3]) then { + "#restartserver" +} else { + "#shutdown" +}; + +if (_p_autoRestart > 2) then { if !(btc_db_is_saving) then { btc_db_is_saving = true; [] spawn btc_fnc_db_save; }; [{!btc_db_is_saving}, { - if !(_this serverCommand "#restartserver") then { - ["STR_STEAM_RESULT_INVALID_PASSWORD", {systemChat localize _this}] remoteExecCall ["call", [0, -2] select isDedicated]; + params ["_serverCommandPassword", "_serverCommand"]; + if !(_serverCommandPassword serverCommand _serverCommand) then { + ["Invalid password", __FILE__, [true, true, true]] call btc_fnc_debug_message; }; - }, _serverCommandPassword] call CBA_fnc_waitUntilAndExecute; + }, [_serverCommandPassword, _serverCommand]] call CBA_fnc_waitUntilAndExecute; } else { - if !(_serverCommandPassword serverCommand "#restartserver") then { - ["STR_STEAM_RESULT_INVALID_PASSWORD", {systemChat localize _this}] remoteExecCall ["call", [0, -2] select isDedicated]; + if !(_serverCommandPassword serverCommand _serverCommand) then { + ["Invalid password", __FILE__, [true, true, true]] call btc_fnc_debug_message; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index dc28f46e3..93ec64fb1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -30,8 +30,11 @@ if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldN [] call btc_fnc_spect_checkLoop; if (btc_p_db_autoRestart > 0) then { [{ - [] call btc_fnc_db_autoRestart; - }, [], 24 * 60 * 60] call CBA_fnc_waitAndExecute; + [19] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + [{ + [] call btc_fnc_db_autoRestart; + }, [], 5 * 60] call CBA_fnc_waitAndExecute; + }, [], btc_p_db_autoRestartTime * 60 * 60 - 5 * 60] call CBA_fnc_waitAndExecute; }; ["Initialize"] call BIS_fnc_dynamicGroups; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 0e950f49b..96a7e417f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -262,6 +262,21 @@ Spiel wird automatisch Gespeichert, wenn alle Spieler das Spiel verlassen 所有玩家离线后自动存档 + + Auto restart/shutdown server (Must define in server.cfg: serverCommandPassword = "btc_password") + + + Shutdown + + + Save and restart + + + Save and shutdown + + + Time before auto restart/shutdown server + @@ -1791,6 +1806,9 @@ Nur Nebenmissionen können abgebrochen werden 只能中止支线任务 + + Server reboot in 5min, leave it NOW! + From 3b68c70ac367410bad7abaad2431e4cda621ddee Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 13 Apr 2020 22:02:22 +0200 Subject: [PATCH 038/264] Avoid saving when a save already occur --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf index 8256a556c..0ceb2f5d4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf @@ -23,7 +23,9 @@ Author: if ((allPlayers - entities "HeadlessClient_F") isEqualTo []) then { removeMissionEventHandler ["HandleDisconnect", _thisEventHandler]; [] spawn { - [] call btc_fnc_db_save; + if !(btc_db_is_saving) then { + [] call btc_fnc_db_save; + }; addMissionEventHandler ["HandleDisconnect", btc_fnc_db_autosave]; }; }; From 1d4252d84aa7776cbc4e29b5c5d7291123ca6464 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 16 Apr 2020 17:48:45 +0200 Subject: [PATCH 039/264] resolve tracy error --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index bf24a6a53..04dcd1ef8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,7 +127,7 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {!(btc_log_placing)}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal From 368017e81cceeefc0221d47ba9b5fc6a71e9e0d6 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 16 Apr 2020 17:56:14 +0200 Subject: [PATCH 040/264] FIX the fix --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 1 + =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 0a11eb632..4b2c87daf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -44,6 +44,7 @@ _player addEventHandler ["GetOutMan", { [btc_ied_deleteOn] call CBA_fnc_removePerFrameHandler; btc_ied_deleteOn = -1; }; +}]; _player addEventHandler ["WeaponAssembled", { params [ ["_player", objNull, [objNull]], diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 04dcd1ef8..bf24a6a53 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,7 +127,7 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {!(btc_log_placing)}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal From c29e08c1040ab21f182f4e6e777869c75a537b69 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 20 Apr 2020 15:15:31 +0200 Subject: [PATCH 041/264] Remove spawn command --- .../core/fnc/eh/veh_init.sqf | 4 ++-- .../core/fnc/int/ask_var.sqf | 1 - .../core/fnc/tow/ropeCreate.sqf | 18 +++++++----------- .../core/fnc/tow/unhook.sqf | 18 +++++++----------- 4 files changed, 16 insertions(+), 25 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index a79fabb3c..c085931b4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -32,7 +32,7 @@ switch true do { case (_type isKindOf "StaticWeapon") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) spawn btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; @@ -42,7 +42,7 @@ switch true do { case (_type isKindOf "LandVehicle") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) spawn btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf index b4973cb7c..4e45dae46 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf @@ -40,7 +40,6 @@ private _data = switch (_id) do { _hd; }; case 3 : {_target getVariable ["cargo", []];}; - case 4 : {_target getVariable ["tow", objNull];}; case 8 : {count btc_hideouts;}; case 9 : {[_target] call btc_fnc_db_saveObjectStatus;}; case 10 : { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index a4804d39f..bd01a4d88 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -13,7 +13,7 @@ Returns: Examples: (begin example) - [cursorObject] spawn btc_fnc_tow_ropeCreate; + [cursorObject] call btc_fnc_tow_ropeCreate; (end) Author: @@ -28,12 +28,8 @@ params [ if !((isVehicleCargo btc_log_vehicle_selected) isEqualTo objNull) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; if (_tower setVehicleCargo btc_log_vehicle_selected) exitWith {}; -btc_int_ask_data = nil; -[4, _tower] remoteExecCall ["btc_fnc_int_ask_var", 2]; - -waitUntil {!(isNil "btc_int_ask_data")}; - -if (!isNull btc_int_ask_data) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; +private _towing = _tower getVariable ["btc_towing", objNull]; +if (!isNull _towing) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; private _model_rear_tower = ([_tower] call btc_fnc_tow_hitch_points) select 1; private _model_front_selected = ([btc_log_vehicle_selected] call btc_fnc_tow_hitch_points) select 0; @@ -49,8 +45,8 @@ private _distance = 0.3 + (_pos_front distance _pos_rear); ropeCreate [_tower, _model_rear_tower, _tower, [_model_front_selected_x - 0.4, _model_front_selected_y, _model_front_selected_z], _distance]; ropeCreate [_tower, _model_rear_tower, _tower, [_model_front_selected_x + 0.4, _model_front_selected_y, _model_front_selected_z], _distance]; -[_tower, ["tow", btc_log_vehicle_selected]] remoteExecCall ["setVariable", 2]; -[btc_log_vehicle_selected, ["tow", _tower]] remoteExecCall ["setVariable", 2]; +_tower setVariable ["btc_towing", btc_log_vehicle_selected, true]; +btc_log_vehicle_selected setVariable ["btc_towing", _tower, true]; [_tower, "RopeBreak", { params ["_tower", "_rope"]; @@ -68,6 +64,6 @@ ropeCreate [_tower, _model_rear_tower, _tower, [_model_front_selected_x + 0.4, _ [_towed, [0, 0, 0.01]] remoteExecCall ["setVelocity", _towed]; }; - [_towed, ["tow", objNull]] remoteExecCall ["setVariable", 2]; - [_tower, ["tow", objNull]] remoteExecCall ["setVariable", 2]; + _towed setVariable ["btc_towing", objNull, true]; + _tower setVariable ["btc_towing", objNull, true]; }, [btc_log_vehicle_selected]] call CBA_fnc_addBISEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf index 865945851..b2bf0be6e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf @@ -24,16 +24,12 @@ params [ ["_veh", objNull, [objNull]] ]; -btc_int_ask_data = nil; -[4, _veh] remoteExecCall ["btc_fnc_int_ask_var", 2]; +private _towing = _veh getVariable ["btc_towing", objNull]; +if (isNull _towing) exitWith {(localize "STR_BTC_HAM_LOG_UNHOOK_NOROPE") call CBA_fnc_notify;}; -[{!(isNil "btc_int_ask_data")}, { - if (isNull btc_int_ask_data) exitWith {(localize "STR_BTC_HAM_LOG_UNHOOK_NOROPE") call CBA_fnc_notify;}; +private _ropes = ropes _this; +if (_ropes isEqualTo []) then { + _ropes = ropes _towing; +}; - private _ropes = ropes _this; - if (_ropes isEqualTo []) then { - _ropes = ropes btc_int_ask_data; - }; - - _ropes apply {ropeDestroy _x}; -}, _veh] call CBA_fnc_waitUntilAndExecute; +_ropes apply {ropeDestroy _x}; From dfb253202c02d6841ca1f7a5f1d1b2acaeb48f59 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 20 Apr 2020 15:25:21 +0200 Subject: [PATCH 042/264] FIX missing } --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 6d9bbb29a..4c9b39d3e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -47,6 +47,7 @@ _player addEventHandler ["GetOutMan", { [btc_ied_deleteOn] call CBA_fnc_removePerFrameHandler; btc_ied_deleteOn = -1; }; +}; _player addEventHandler ["WeaponAssembled", { params [ ["_player", objNull, [objNull]], From be93bf039b583dcde463743583e96c430d2a5fba Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 20 Apr 2020 15:27:03 +0200 Subject: [PATCH 043/264] fix missing ] --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 4c9b39d3e..e065d1e9d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -47,7 +47,7 @@ _player addEventHandler ["GetOutMan", { [btc_ied_deleteOn] call CBA_fnc_removePerFrameHandler; btc_ied_deleteOn = -1; }; -}; +}]; _player addEventHandler ["WeaponAssembled", { params [ ["_player", objNull, [objNull]], From 8dd450167eb96dca0c967676b54f016acc9d5808 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 22 Apr 2020 14:24:14 +0200 Subject: [PATCH 044/264] Add Advanced towing --- .../core/fnc/compile.sqf | 1 + .../core/fnc/log/get_corner_points.sqf | 2 +- .../core/fnc/tow/ropeCreate.sqf | 62 +++++++++++-------- .../core/fnc/tow/unwind.sqf | 48 ++++++++++++++ 4 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 1e91b6209..06c0f2d43 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -354,4 +354,5 @@ if (!isDedicated) then { btc_fnc_tow_ropeCreate = compile preprocessFileLineNumbers "core\fnc\tow\ropeCreate.sqf"; btc_fnc_tow_hitch_points = compile preprocessFileLineNumbers "core\fnc\tow\hitch_points.sqf"; btc_fnc_tow_unhook = compile preprocessFileLineNumbers "core\fnc\tow\unhook.sqf"; + btc_fnc_tow_unwind = compile preprocessFileLineNumbers "core\fnc\tow\unwind.sqf"; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf index 27a80fb09..fc897da97 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf @@ -36,7 +36,7 @@ if (_vehicle isKindOf "Helicopter") then { }; (getCenterOfMass _vehicle) params ["_centerOfMass_x", "_centerOfMass_y", "_centerOfMass_z"]; -(boundingBoxReal _vehicle) params ["_p1", "_p2"]; +(0 boundingBoxReal _vehicle) params ["_p1", "_p2"]; ([0, 1] apply {abs ((_p2 select _x) - (_p1 select _x))}) params ["_maxWidth", "_maxLength"]; private _widthOffset = ((_maxWidth / 2) - abs _centerOfMass_x) * _widthFactor; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index bd01a4d88..af075d553 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -25,45 +25,53 @@ params [ ["_tower", objNull, [objNull]] ]; -if !((isVehicleCargo btc_log_vehicle_selected) isEqualTo objNull) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; -if (_tower setVehicleCargo btc_log_vehicle_selected) exitWith {}; - private _towing = _tower getVariable ["btc_towing", objNull]; -if (!isNull _towing) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; - -private _model_rear_tower = ([_tower] call btc_fnc_tow_hitch_points) select 1; -private _model_front_selected = ([btc_log_vehicle_selected] call btc_fnc_tow_hitch_points) select 0; -private _relative_pos = - (_model_front_selected select 1) + (_model_rear_tower select 1) - ((btc_log_vehicle_selected modelToWorld _model_front_selected) distance (_tower modelToWorld _model_rear_tower)); +if ( + !((isVehicleCargo btc_log_vehicle_selected) isEqualTo objNull) || + !isNull _towing +) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; +if (_tower setVehicleCargo btc_log_vehicle_selected) exitWith {}; -btc_log_vehicle_selected attachTo [_tower, [0, _relative_pos, 0.2 + ((btc_log_vehicle_selected modelToWorld [0, 0, 0]) select 2) - ((_tower modelToWorld [0, 0, 0]) select 2)]]; +private _flat = createVehicle ["Truck_01_Rack_F", getPosATL btc_log_vehicle_selected, [], 0, "CAN_COLLIDE"]; +_flat setDir getDir btc_log_vehicle_selected; +//_flat setObjectTextureGlobal [0, ""]; +//_flat setObjectTextureGlobal [1, ""]; -private _pos_rear = _tower modelToWorld _model_rear_tower; -private _pos_front = btc_log_vehicle_selected modelToWorld _model_front_selected; -private _distance = 0.3 + (_pos_front distance _pos_rear); -(_tower worldToModel _pos_front) params ["_model_front_selected_x", "_model_front_selected_y", "_model_front_selected_z"]; +private _model_corners_tower = [_tower] call btc_fnc_log_get_corner_points; +private _model_corners_flat = [_flat] call btc_fnc_log_get_corner_points; +private _model_selected = (0 boundingBoxReal btc_log_vehicle_selected) select 1; +private _model_flat = (0 boundingBoxReal _flat) select 1; +private _attachTo = [0, (_model_flat select 1) - (_model_selected select 1), (_model_selected select 2) - (_model_flat select 2) + 0.2]; -ropeCreate [_tower, _model_rear_tower, _tower, [_model_front_selected_x - 0.4, _model_front_selected_y, _model_front_selected_z], _distance]; -ropeCreate [_tower, _model_rear_tower, _tower, [_model_front_selected_x + 0.4, _model_front_selected_y, _model_front_selected_z], _distance]; +btc_log_vehicle_selected attachTo [_flat, _attachTo]; +private _rope1 = ropeCreate [_tower, (_model_corners_tower select 0) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 2) vectorAdd [0.2, 0.05, 0.6]]; +private _rope2 = ropeCreate [_tower, (_model_corners_tower select 1) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 3) vectorAdd [-0.2, 0.05, 0.6]]; +private _shortRope = [_rope1, _rope2] select (ropeLength _rope1 > ropeLength _rope2); +ropeUnwind [_shortRope, 2, ropeLength _rope1 max ropeLength _rope2, false]; _tower setVariable ["btc_towing", btc_log_vehicle_selected, true]; btc_log_vehicle_selected setVariable ["btc_towing", _tower, true]; [_tower, "RopeBreak", { - params ["_tower", "_rope"]; - _thisArgs params ["_towed"]; + params ["_tower", "_rope", "_flat"]; + _thisArgs params ["_vehicle_selected"]; _tower removeEventHandler ["RopeBreak", _thisId]; - deTach _towed; - - (getPos _towed) params ["_x", "_y", "_z"]; + deleteVehicle _flat; + deTach _vehicle_selected; + _vehicle_selected setVectorUp surfaceNormal position _vehicle_selected; - if (_z < -0.05) then { - _towed setPosASL [_x, _y, ((getPosASL _tower) select 2) - _z]; - } else { - [_towed, [0, 0, 0.01]] remoteExecCall ["setVelocity", _towed]; - }; - - _towed setVariable ["btc_towing", objNull, true]; + _vehicle_selected setVariable ["btc_towing", objNull, true]; _tower setVariable ["btc_towing", objNull, true]; }, [btc_log_vehicle_selected]] call CBA_fnc_addBISEventHandler; + +[{ + params ["_flat", "_rope1", "_rope2"]; + + [_flat, _rope1, _rope2, + (_flat call BIS_fnc_getPitchBank) select 0 + ] call btc_fnc_tow_unwind; +}, [_flat, _rope1, _rope2], 2] call CBA_fnc_waitAndExecute; + +btc_log_vehicle_selected = objNull; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf new file mode 100644 index 000000000..3e55f3a4c --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf @@ -0,0 +1,48 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_tow_unwind + +Description: + Tow a vehicle. + +Parameters: + _tower - Vehicle. [Object] + +Returns: + _thisId - ID of the event handler. [Number] + +Examples: + (begin example) + [cursorObject] call btc_fnc_tow_unwind; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +[{ + ropeUnwound (_this select 1) && + ropeUnwound (_this select 2) +}, { + params ["_flat", "_rope1", "_rope2", "_initialPitch"]; + + private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; + if (0.5 in ([_rope1, _rope2] apply {ropeLength _x})) exitWith {}; + if (_actualPitch - _initialPitch > 3) exitWith { + [{ + params ["_flat", "_rope1", "_rope2", "_initialPitch"]; + + private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; + _actualPitch - _initialPitch < 3 + }, { + _this call btc_fnc_tow_unwind; + }, _this, 1, { + ["btc_tow_unwindDone", _this] call CBA_fnc_localEvent; + }] call CBA_fnc_waitUntilAndExecute; + }; + + ropeUnwind [_rope1, 0.2, -0.02, true]; + ropeUnwind [_rope2, 0.2, -0.02, true]; + _this call btc_fnc_tow_unwind; +}, _this] call CBA_fnc_waitUntilAndExecute; \ No newline at end of file From b082b019622cbf20e76d12b10e2cb005225ba297 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 22 Apr 2020 23:03:55 +0200 Subject: [PATCH 045/264] Add custom location to map --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf index 9ff0e8e80..bc1d0bb25 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf @@ -76,7 +76,13 @@ for "_id" from 0 to (count _locations - 1) do { }; if !(isNil "btc_custom_loc") then { - {_x call btc_fnc_city_create} forEach btc_custom_loc; + { + _x call btc_fnc_city_create; + + _x params ["_pos", "_cityType", "_cityName", "_sizeX", "_sizeY"]; + private _location = createLocation [_cityType, _pos, _sizeX, _sizeY]; + _location setText _cityName; + } forEach btc_custom_loc; }; btc_city_all = btc_city_all apply {if (isNil "_x") then {objNull} else {_x}}; From 897f59625c70f27d9e7871216599e48aa9ccfa90 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 23 Apr 2020 18:32:39 +0200 Subject: [PATCH 046/264] FIX: missing call of unit create for patrol units --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index cad6a2f42..8c0879eeb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -98,6 +98,7 @@ switch (_random) do { }; [{ + [_this select 0] call btc_fnc_mil_unit_create; _this call btc_fnc_patrol_init; [[_this select 0]] call btc_fnc_set_groupsOwner; }, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit] call CBA_fnc_waitAndExecute; From 04755a97c9c8614dbe6a878db91723de04fb688b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 23 Apr 2020 20:15:55 +0200 Subject: [PATCH 047/264] FIX: missing btc_fnc_mil_unit_create --- .../core/fnc/delay/createVehicle.sqf | 4 ++++ .../core/fnc/mil/createVehicle.sqf | 4 ---- .../core/fnc/mil/create_patrol.sqf | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index b3c2a2353..56787d466 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -93,5 +93,9 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; [_group, _units_type select _i, _position] call btc_fnc_delay_createUnit; }; + [{ + _this call btc_fnc_mil_unit_create; + }, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; + btc_delay_createUnit = btc_delay_createUnit - 0.3; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index 4772c2412..9983df450 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -54,7 +54,3 @@ for "_i" from _crewSeats to (_totalSeats - 1) do { }; [_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle; - -[{ - _this call btc_fnc_mil_unit_create; -}, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 8c0879eeb..cad6a2f42 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -98,7 +98,6 @@ switch (_random) do { }; [{ - [_this select 0] call btc_fnc_mil_unit_create; _this call btc_fnc_patrol_init; [[_this select 0]] call btc_fnc_set_groupsOwner; }, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit] call CBA_fnc_waitAndExecute; From 971d2da7acadfbcc9798adde040e76c6f3176bcc Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 23 Apr 2020 22:57:03 +0200 Subject: [PATCH 048/264] Add notification delay --- .../core/def/mission.sqf | 2 + .../core/def/param.hpp | 6 +++ .../core/fnc/common/show_hint.sqf | 16 +++++++- .../core/fnc/compile.sqf | 1 + .../core/fnc/rep/change.sqf | 16 +++++++- .../core/fnc/rep/notify.sqf | 39 +++++++++++++++++++ .../stringtable.xml | 3 ++ 7 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 7cb4779e7..525b91fde 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -72,6 +72,7 @@ btc_p_autoloadout = "btc_p_autoloadout" call BIS_fnc_getParamValue; //<< Other options >> private _p_rep = "btc_p_rep" call BIS_fnc_getParamValue; +btc_p_rep_notify = ("btc_p_rep_notify" call BIS_fnc_getParamValue) isEqualTo 1; private _p_city_radius = ("btc_p_city_radius" call BIS_fnc_getParamValue) * 100; btc_p_trigger = if (("btc_p_trigger" call BIS_fnc_getParamValue) isEqualTo 1) then { "this && !btc_db_is_saving && (false in (thisList apply {_x isKindOf 'Plane'})) && (false in (thisList apply {(_x isKindOf 'Helicopter') && (speed _x > 190)}))" @@ -163,6 +164,7 @@ if (isServer) then { btc_global_reputation = _p_rep; btc_rep_militia_call_time = 600; btc_rep_militia_called = - btc_rep_militia_call_time; + btc_rep_delayed = 0; //Chem btc_chem_decontaminate = [btc_bigShower]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index d51932ae6..a29c6d210 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -347,6 +347,12 @@ class Params { texts[]={$STR_ACE_ViewDistance_object_verylow,$STR_A3_TIME_TRIALS_MISCTT_ROF_25,$STR_3DEN_ATTRIBUTES_SPEEDMODE_NORMAL,$STR_A3_TIME_TRIALS_MISCTT_ROF_21}; //texts[]={"Very Low","Low","Normal","High"}; default = 200; }; + class btc_p_rep_notify { // Show reputation change: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_OTHER_SHOWREP"]); + values[]={0, 1}; + texts[]={$STR_DISABLED,$STR_ENABLED}; + default = 0; + }; class btc_p_city_radius { // Spawn city radius offset: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_OTHER_SPAWNRAD"]); values[]={0,1,2,3,4,5,6,7,8}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf index 8d6ea8de7..ca6b6b1ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf @@ -25,7 +25,7 @@ if (isDedicated) exitWith {}; params [ ["_type", 0, [0]], - ["_custom", 0, [0, ""]] + ["_custom", 0, [0, "", []]] ]; private _text = switch (_type) do { @@ -99,6 +99,20 @@ private _text = switch (_type) do { localize "STR_BTC_HAM_O_COMMON_REBOOT", 1.5, [1, 0, 0] ]; }; + case 20 : { + [ + [" "], + ["\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa", 5, _custom], + [" "] + ]; + }; + case 21 : { + [ + [" "], + ["\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa", 5, _custom], + [" "] + ]; + }; }; _text call CBA_fnc_notify; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 5d0283be5..e8a3c4ab9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -144,6 +144,7 @@ if (isServer) then { btc_fnc_rep_remove_eh = compile preprocessFileLineNumbers "core\fnc\rep\remove_eh.sqf"; btc_fnc_rep_buildingchanged = compile preprocessFileLineNumbers "core\fnc\rep\buildingchanged.sqf"; btc_fnc_rep_explosives_defuse = compile preprocessFileLineNumbers "core\fnc\rep\explosives_defuse.sqf"; + btc_fnc_rep_notify = compile preprocessFileLineNumbers "core\fnc\rep\notify.sqf"; //SIDE btc_fnc_side_create = compile preprocessFileLineNumbers "core\fnc\side\create.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf index e713ba304..ce52d28fc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf @@ -24,9 +24,21 @@ params [ ["_reputation", 0, [0]] ]; -if (btc_debug_log) then { - [format ["GLOBAL %1 - CHANGE %2", btc_global_reputation, _reputation], __FILE__, [false]] call btc_fnc_debug_message; +if (btc_debug || btc_debug_log) then { + [format ["GLOBAL %1 - CHANGE %2", btc_global_reputation, _reputation], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; }; + btc_global_reputation = btc_global_reputation + _reputation; +if (btc_p_rep_notify) then { + if (btc_rep_delayed isEqualTo 0) then { + [{abs(btc_rep_delayed) > 3}, { + btc_rep_delayed call btc_fnc_rep_notify; + }, [], 10 * 60, { + btc_rep_delayed call btc_fnc_rep_notify; + }] call CBA_fnc_waitUntilAndExecute; + }; + btc_rep_delayed = btc_rep_delayed + _reputation; +}; + true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf new file mode 100644 index 000000000..9fd7c45fb --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf @@ -0,0 +1,39 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_rep_notify + +Description: + Show reputation change with a picture and color nuance. + +Parameters: + _reputation - Reputation number. [Number] + +Returns: + +Examples: + (begin example) + [-10] call btc_fnc_rep_notify; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_reputation", btc_rep_delayed, [0]] +]; + +private _hint = []; +if (_reputation >= 0) then { + _hint pushBack 20; + private _minRep = _reputation min 100; + _hint pushBack [1 - _minRep / 100, 1, 1 - _minRep / 100]; +} else { + _hint pushBack 21; + private _minRep = _reputation max -25; + _hint pushBack [1, 1 + _minRep / 25, 1 + _minRep / 25]; +}; +_hint remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + +btc_rep_delayed = 0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 07df17040..9ecbde6f5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -640,6 +640,9 @@ Reputação inicial: 初始声誉: + + Show reputation change: + Spawn city radius offset: Radius zum Spawnen von Einheiten: From d823831b560273efd3cc7ac0a0906cabfcf93886 Mon Sep 17 00:00:00 2001 From: dF Date: Sat, 25 Apr 2020 02:13:57 +0300 Subject: [PATCH 049/264] FIX: Voted admin can see the database self interaction menu --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index c68fe0577..7c7f45562 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -21,7 +21,7 @@ Author: //Database -private _action = ["Database", localize "STR_BTC_HAM_ACTION_DATA_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\D_ca.paa", {}, {serverCommandAvailable "#logout" || !isMultiplayer}] call ace_interact_menu_fnc_createAction; +private _action = ["Database", localize "STR_BTC_HAM_ACTION_DATA_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\D_ca.paa", {}, {(call BIS_fnc_admin) == 2 || !isMultiplayer}] call ace_interact_menu_fnc_createAction; [player, 1, ["ACE_SelfActions"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["request_save", localize "str_3den_display3den_menubar_missionsave_text", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", {[] remoteExec ["btc_fnc_db_save", 2]}, {true}] call ace_interact_menu_fnc_createAction; From 1e7737d2c2d662c2641d28b589dc125d489debf8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 26 Apr 2020 17:03:26 +0200 Subject: [PATCH 050/264] Add player name --- .../core/def/mission.sqf | 2 +- .../core/fnc/common/show_hint.sqf | 10 ++++++---- .../core/fnc/eh/player_respawn.sqf | 2 +- .../core/fnc/eh/veh_killed.sqf | 8 +++++--- .../core/fnc/mil/hd_hideout.sqf | 2 +- .../core/fnc/mil/unit_killed.sqf | 4 ++-- .../core/fnc/rep/change.sqf | 15 +++++++++----- .../core/fnc/rep/explosives_defuse.sqf | 2 +- .../core/fnc/rep/firednear.sqf | 2 +- .../core/fnc/rep/hd.sqf | 2 +- .../core/fnc/rep/hh.sqf | 2 +- .../core/fnc/rep/killed.sqf | 2 +- .../core/fnc/rep/notify.sqf | 20 +++++++++++++------ 13 files changed, 45 insertions(+), 28 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 525b91fde..e20c257cc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -164,7 +164,7 @@ if (isServer) then { btc_global_reputation = _p_rep; btc_rep_militia_call_time = 600; btc_rep_militia_called = - btc_rep_militia_call_time; - btc_rep_delayed = 0; + btc_rep_delayed = [0, []]; //Chem btc_chem_decontaminate = [btc_bigShower]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf index ca6b6b1ae..9e846460d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf @@ -100,16 +100,18 @@ private _text = switch (_type) do { ]; }; case 20 : { + _custom params ["_color", "_player"]; [ - [" "], - ["\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa", 5, _custom], + [[name _player], [" "]] select (isNull _player), + ["\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa", 4, _color], [" "] ]; }; case 21 : { + _custom params ["_color", "_player"]; [ - [" "], - ["\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa", 5, _custom], + [[name _player], [" "]] select (isNull _player), + ["\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa", 4, _color], [" "] ]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf index 89b061d0c..29b68436e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player_respawn.sqf @@ -28,4 +28,4 @@ player setPosASL _pos; player addRating 9999; player setCaptive false; -btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]; +[btc_rep_malus_player_respawn, player] remoteExecCall ["btc_fnc_rep_change", 2]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf index e40819542..e720fed5d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf @@ -7,6 +7,7 @@ Description: Parameters: _vehicle - Vehicle object. [Object] + _killer - Killer. [Object] Returns: @@ -21,7 +22,8 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_vehicle", objNull, [objNull]] + ["_vehicle", objNull, [objNull]], + ["_killer", objNull, [objNull]] ]; private _marker = createMarker [format ["m_%1", _vehicle], getPos _vehicle]; @@ -32,7 +34,7 @@ _marker setMarkerColor "ColorRed"; _vehicle setVariable ["marker", _marker]; if (isServer) then { - btc_rep_malus_veh_killed call btc_fnc_rep_change; + [btc_rep_malus_veh_killed, _killer] call btc_fnc_rep_change; } else { - btc_rep_malus_veh_killed remoteExecCall ["btc_fnc_rep_change", 2]; + [btc_rep_malus_veh_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf index afe5fff19..c09cf53f1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf @@ -44,7 +44,7 @@ private _explosive = getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") if (_explosive && {_damage > 0.6}) then { btc_hideouts deleteAt (btc_hideouts find _hideout); - btc_rep_bonus_hideout call btc_fnc_rep_change; + [btc_rep_bonus_hideout, _source] call btc_fnc_rep_change; private _id = _hideout getVariable "id"; private _marker = createMarker [format ["btc_hideout_%1_destroyed", _id], getPos _hideout]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf index 795157834..220fa6146 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf @@ -38,9 +38,9 @@ if (random 100 > btc_info_intel_chance) then { if (isPlayer _killer) then { if (isServer) then { - btc_rep_bonus_mil_killed call btc_fnc_rep_change; + [btc_rep_bonus_mil_killed, _killer] call btc_fnc_rep_change; } else { - btc_rep_bonus_mil_killed remoteExecCall ["btc_fnc_rep_change", 2]; + [btc_rep_bonus_mil_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf index ce52d28fc..001ebcff4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf @@ -7,12 +7,13 @@ Description: Parameters: _reputation - Number to add or substrat to the reputation level. [Number] + _player - Player triggered the reputation change. [Number] Returns: Examples: (begin example) - [-10] call btc_fnc_rep_change; + [-10, player] call btc_fnc_rep_change; (end) Author: @@ -21,7 +22,8 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_reputation", 0, [0]] + ["_reputation", 0, [0]], + ["_player", objNull, [objNull]] ]; if (btc_debug || btc_debug_log) then { @@ -31,14 +33,17 @@ if (btc_debug || btc_debug_log) then { btc_global_reputation = btc_global_reputation + _reputation; if (btc_p_rep_notify) then { - if (btc_rep_delayed isEqualTo 0) then { - [{abs(btc_rep_delayed) > 3}, { + if ((btc_rep_delayed select 0) isEqualTo 0) then { + [{ + abs(btc_rep_delayed select 0) > 3 + }, { btc_rep_delayed call btc_fnc_rep_notify; }, [], 10 * 60, { btc_rep_delayed call btc_fnc_rep_notify; }] call CBA_fnc_waitUntilAndExecute; }; - btc_rep_delayed = btc_rep_delayed + _reputation; + btc_rep_delayed set [0, (btc_rep_delayed select 0) + _reputation]; + (btc_rep_delayed select 1) pushBack [_reputation, _player]; }; true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/explosives_defuse.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/explosives_defuse.sqf index 7b1ddc272..fc70ee8de 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/explosives_defuse.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/explosives_defuse.sqf @@ -28,5 +28,5 @@ params [ private _type_ied = typeOf _ied; if ((_type_ied select [0, _type_ied find "_"]) in (btc_type_ieds_ace apply {_x select [0, _x find "_"]})) then { - btc_rep_bonus_disarm call btc_fnc_rep_change; + [btc_rep_bonus_disarm, _unit] call btc_fnc_rep_change; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf index 5ab00a5ec..904f66019 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf @@ -50,7 +50,7 @@ if (!(side _civ isEqualTo civilian) || (random 3 < 1)) exitWith {}; if (side _gunner isEqualTo btc_player_side) then { if ((_gunner findNearestEnemy getPos _civ) distance _civ > 300) then { if (abs((_gunner getDir _civ) - getDir _gunner) < 300/_distance) then { - btc_rep_malus_civ_firenear call btc_fnc_rep_change; + [btc_rep_malus_civ_firenear, _gunner] call btc_fnc_rep_change; [getPos _civ] call btc_fnc_rep_eh_effects; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 01beca868..776eed13f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -38,7 +38,7 @@ if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_ste _this remoteExecCall ["btc_fnc_rep_hd", 2]; }; - btc_rep_malus_civ_hd call btc_fnc_rep_change; + [btc_rep_malus_civ_hd, _injurer] call btc_fnc_rep_change; if (btc_global_reputation < 600) then {[getPos _unit] call btc_fnc_rep_eh_effects;}; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hh.sqf index d1f6b58e9..f920d6cd7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hh.sqf @@ -25,7 +25,7 @@ params [ ]; if (isPlayer _healer) then { - btc_rep_bonus_civ_hh call btc_fnc_rep_change; + [btc_rep_bonus_civ_hh, _healer] call btc_fnc_rep_change; if (btc_debug_log) then { [format ["GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf index 86b393d3f..19ff6336f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf @@ -31,7 +31,7 @@ if (!isServer) exitWith { }; if (isPlayer _killer) then { - btc_rep_malus_civ_killed call btc_fnc_rep_change; + [btc_rep_malus_civ_killed, _killer] call btc_fnc_rep_change; if (btc_global_reputation < 600) then { [getPos _unit] call btc_fnc_rep_eh_effects; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf index 9fd7c45fb..6e3dc88ef 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf @@ -7,6 +7,7 @@ Description: Parameters: _reputation - Reputation number. [Number] + _players - List of players triggered the reputation change. [Array] Returns: @@ -21,19 +22,26 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_reputation", btc_rep_delayed, [0]] + ["_reputation", 0, [0]], + ["_players", [], [[]]] ]; +_players sort (_reputation <= 0); +private _player = _players select 0 select 1; + private _hint = []; if (_reputation >= 0) then { - _hint pushBack 20; private _minRep = _reputation min 100; - _hint pushBack [1 - _minRep / 100, 1, 1 - _minRep / 100]; + + _hint pushBack 20; + _hint pushBack [[1 - _minRep / 100, 1, 1 - _minRep / 100], _player]; } else { - _hint pushBack 21; private _minRep = _reputation max -25; - _hint pushBack [1, 1 + _minRep / 25, 1 + _minRep / 25]; + + _hint pushBack 21; + _hint pushBack [[1, 1 + _minRep / 25, 1 + _minRep / 25], _player]; }; + _hint remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; -btc_rep_delayed = 0; +btc_rep_delayed = [0, []]; From 991501312766221ed34957f8c80f9e575ddbc75f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 26 Apr 2020 17:07:08 +0200 Subject: [PATCH 051/264] Remove useless params --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf index afe5fff19..0e204ddf5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf @@ -37,7 +37,6 @@ params [ ["_instigator", objNull, [objNull]], ["_hitPoint", "", [""]] ]; -params ["_hideout", "_selection", "_damage", "_source", "_ammo", "_hitIndex", "_instigator", "_hitPoint"]; private _explosive = getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") > 0; From da7c2653e612b27244085c30d140e3ea89da3874 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Mon, 27 Apr 2020 22:09:53 +0800 Subject: [PATCH 052/264] Fix: Chinesesimp Translation Update Add: Missing Chinesesimp entry for auto restart/shutdown #835 Fix: Chinesesimp for boundingBoxReal (commit 90e44a6) Fix: removed several unnecessary spaces in Chinesesimp Translation --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 07df17040..9dbd3d268 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -91,7 +91,7 @@ <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Cuando un vehículo es destruido no va a reaparecer en la base, es necesario remolcarlo o transportarlo de vuelta a la base y repararlo cerca del punto logístico (Interactuar con la caja roja). Los destrozos de helicópteros sólo pueden ser transportados por vía aérea.. <br/> El Chinook es la única excepción, reaparecerá después de 30 segundos.. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> También puede rearmarlos generando el calibre correspondiente en el punto logístico (Interactuar con la caja roja, seleccionar el tipo y calibre del vehículo). Lleva la munición creada e interactúa con el vehículo para rearmarlo. Esto sólo funciona si el rearme se está ajustando en todo el cargador o en una cantidad basada en el calibre (no para el ajuste de todo el vehículo). <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Wenn ein Fahrzeug zersört wurde, wird dies nicht Respawnen. Es muss durch Abschleppen oder Anheben(Sling-Load) zum Logisik-Punkt gebracht und dort repariert werden (mit der roten Box interagieren). Wracks von Hubschraubern können nur angehoben werden (Sling-Load). <br/> Die einzigste Ausnahme hierbei ist der Chinook. Er respawnt nach 30 Sekunden. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Aufmunitionieren:</marker><br/> Fahrzeuge können Aufmunitioniert werden, in dem man das entsprechende Kaliber am Logisik-Punk anfordert (mit der Roten Box interagieren: Fahzeug und Kaliber auswählen). Nun muss man nur noch die erstellte Munition zum Fahrzeug bringen und mit diesem interagieren um das aufmunitionieren zu beginnen.<br/>ANMERKUNG: Das funktioiert nur wenn die Aufmunitionierungseinstellung auf 'Gesamtes Magazin' oder 'Kalieberbasierte Anzahl' gestellt ist (get nicht für 'Gesamtes Fahrzeug'). <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Quando um veículo é destruído ele não reaparecerá na base, você precisa rebocá-lo/levá-lo de volta à base e repará-lo perto do ponto logístico (Interagir com a caixa vermelha). Os destroços de helicóptero só podem ser levantados. <br/> O Chinook é a única exceção, ele reaparecerá depois de 30 segundos. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> Você também pode rearmar-los, gerando o calibre correspondente no ponto logístico (Interaja com a caixa vermelha, selecione o tipo de veículo e calibre). Leve a munição criada e interaja com o veículo para rearmar. Isso só funciona se o rearme estiver configurado em um depósito inteiro ou em um valor baseado em calibre (não para toda a configuração do veículo). - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> 载具重生:</marker><br/> 当载具损毁时, 它不会自行在基地重生。你需要采用车辆牵引或直升机吊挂的方式将其残骸运回基地, 并在后勤点对其进行维修(与后勤点的红色箱子进行互动)。直升机的残骸只能使用吊挂的方式运输。 <br/> 支奴干(Chinook)是唯一的例外, 它会在损毁后30秒于基地重生。 <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> 弹药补给:</marker><br/> 你可以在后勤点生成对应口径的弹药, 对载具进行弹药补给。与红色箱子互动, 选择对应的载具类型及口径, 弹药箱将会生成。将生成的弹药箱搬到载具附近, 与载具互动, 即可执行补给。注意: 如需启用此功能, 需要将任务参数中的弹药补给选项设置为 "Total Magazine" 或 "Calibre Based Number" (而非 "Entire Vehicle")。 + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> 载具重生:</marker><br/> 当载具损毁时, 它不会自行在基地重生。你需要采用车辆牵引或直升机吊挂的方式将其残骸运回基地, 并在后勤点对其进行维修(与后勤点的红色箱子进行互动)。直升机的残骸只能使用吊挂的方式运输。<br/> 支奴干(Chinook)是唯一的例外, 它会在损毁后30秒于基地重生。<br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> 弹药补给:</marker><br/> 你可以在后勤点生成对应口径的弹药, 对载具进行弹药补给。与红色箱子互动, 选择对应的载具类型及口径, 弹药箱将会生成。将生成的弹药箱搬到载具附近, 与载具互动, 即可执行补给。注意: 如需启用此功能, 需要将任务参数中的弹药补给选项设置为 "Total Magazine" 或 "Calibre Based Number" (而非 "Entire Vehicle")。 @@ -146,7 +146,7 @@ <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> To tow a vehicle interact with it and select the option 'HOOK'.<br/>After that place the tow vehicle in front of it and select 'TOW' in the interaction menu.<br/> If the two vehicles are too far away or the vehicle can't tow that load (Car can't tow truck or tank), the option will be disabled.<br/> To unhook interact with one of the two vehicles and select the option 'UNHOOK'.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> With this option you can move heavy objects to build small outpost or base.<br/> When you select the option an hint will show all the keys required to move the object. <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Fracht-System:</marker><br/>Siehe ACE3 Dokumentation. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abschleppsystem:</marker><br/> Um ein Fahrzeug abzuschleppen muss man mit diesem interagieren und 'EINHACKEN' auswählen.<br/>Als nächstes muss man das Zugfahrzeug vor das abzuschleppende Fahrzeug stellen und über das Interagtionsmenü die Option 'ABSCHLEPPEN' aktivieren.<br/> Zu beachten ist dabei, dass die beiden Fahrzeuge nicht zu weit von einander entfernt sein dürfen. Ebenso ist daruf zu achten, dass das Zugfahrzeug auch das andere Fahrzeug abschleppen kann (zB. Autos können keine Lkw/Panzer abschleppen).<br/> Um das Abschleppseil wieder zu entfernen muss man einen bei einem der beiden Fahrzeuge die Option 'AUSHACKEN' auswählen.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Platzierung von Objekten:</marker><br/> Mit dieser Option können Sie schwere Objekte bewegen, um einen kleinen Außenposten oder eine Basis zu bauen.<br/> Wenn Sie die Option auswählen, zeigt ein Hinweis alle Tasten an, die zum Verschieben des Objekts erforderlich sind. <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> Para rebocar um veículo, interaja com ele e selecione a opção "GANCHO".<br/> Depois disso, coloque o veículo de reboque na frente dele e selecione "REBOCAR" no menu de interação.<br/> Se os dois veículos estiverem muito distantes ou o veículo não puder rebocar essa carga (o carro não poderá rebocar o caminhão ou o tanque), a opção será desativada.<br/> Para desengatar, interaja com um dos dois veículos e selecione a opção "DESENGANCHAR".<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> Com esta opção, você pode mover objetos pesados para construir um posto avançado ou uma base pequena.<br/> Quando você selecionar a opção, uma dica mostrará todas as ações necessárias para mover o objeto. - <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>货运系统:</marker><br/> 使用ACE3货运系统。 <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>牵引系统:</marker><br/> 如需牵引一辆载具, 与其互动并选择"启用牵引"。<br/>然后, 将牵引车辆(前车)置于被牵引车辆(后车)前方, 并在互动菜单中选择"牵引"。<br/> 如果两辆车的距离过远, 或前车无法牵引这一载荷(比如汽车(Car)无法牵引卡车(Truck)或坦克(Tank)), 则该选项不可用。<br/> 如需取消牵引, 与两车之一互动并选择"取消牵引"。<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>物体放置:</marker><br/> 您可以使用该选项来移动重物, 从而建造一个小的前哨或基地。<br/> 选择该选项后, 移动对象所需键位的提示将会出现。 + <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>货运系统:</marker><br/> 使用ACE3货运系统。<br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>牵引系统:</marker><br/> 如需牵引一辆载具, 与其互动并选择"启用牵引"。<br/>然后, 将牵引车辆(前车)置于被牵引车辆(后车)前方, 并在互动菜单中选择"牵引"。<br/> 如果两辆车的距离过远, 或前车无法牵引这一载荷(比如汽车(Car)无法牵引卡车(Truck)或坦克(Tank)), 则该选项不可用。<br/> 如需取消牵引, 与两车之一互动并选择"取消牵引"。<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>物体放置:</marker><br/> 您可以使用该选项来移动重物, 从而建造一个小的前哨或基地。<br/> 选择该选项后, 移动对象所需键位的提示将会出现。 @@ -165,7 +165,8 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Cualquier objeto puede ser un artefacto explosivo improvisado, acérquese a él con cuidado (NO rote mientras camina: prefiera caminar, detenerse, rotar, volver a caminar, etc.). Encienda su detector de minas (VMH3 o VMMH3) y busque una carga en un círculo de 2 metros alrededor.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Si usted es ingeniero y tiene un kit de desactivación, puede desarmarlo.<br/> También puedes volarlos con explosivos y fuego de alto calibre. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Jedes Objekt kann eine IED sein, seien sie ensprechen Vorsichtig und machen Sie keine hastigen Bewegungen (NICHT drehen wenn man läuft: besser gehen, stop, drehen, gehen und so weiter). Schalten Sie ihren Minendetektor (VMH3 oder VMMH3) ein und suchen sie in eim 2m Radius nach der Ladung.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Wenn Sie ein Ingenieur sind und ein Entschärfungskit dabei habe, können Sie die Sprengladung entschärfen.<br/> Es is ebenfalls möglich die IED mithilfe von hohen Kalibern oder Sprengladungen zu entfernen (kontrollierte Explosion). <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Qualquer objeto pode ser um IED, aproxime-o com cuidado (NÃO vire-se enquanto estiver andando: ande, pare, olhe, ande de novo, etc.). Ative o seu detector de minas (VMH3 ou VMMH3) e procure uma carga em um círculo de 2 metros ao redor.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Se você é um engenheiro e possui um kit de desarme, você pode desarmá-lo.<br/> Também é possível destruir o IED usando grosso calibre ou explosivos (explosão controlada). - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 每个物体都可能是一个简易爆炸装置(IED), 小心地接近它(切勿在行走的同时转身, 而应当"走-停-转身-再走")。打开你的探雷器( VMH3 或 VMMH3 ), 在2米范围内寻找炸弹。<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> 如果你是工程师(Engineer)且携带了拆弹工具, 你就可以拆除它。<br/> 你也可以使用大口径子弹或炸药包来引爆它。 + + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\mine_ca.paa' width='20' height='20'/> <marker name='blufor_base'>简易爆炸装置(IED):</marker><br/> 任何物体都有可能是IED, 或者是假IED。<br/> <img image='\A3\EditorPreviews_F\Data\CfgVehicles\IEDLandSmall_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 任何物体都可能是一个简易爆炸装置(IED), 小心地接近它(切勿在行走的同时转身, 而应当"走-停下-转身-继续走")。打开你的探雷器(VMH3或VMMH3), 在2米范围内寻找炸弹。<br/> <img image='\z\ace\addons\minedetector\data\equip\w_vmh3_ca.paa' width='70' height='100'/> <br/><br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除:</marker><br/> 如果你是工程师并且携带了拆弹工具, 你就可以拆除它。你也可以使用大口径子弹或者炸药包来引爆它。<br/> <img image='\z\ace\addons\explosives\Data\UI\Pliers.paa' width='50' height='50'/> <br/><br/> <img image='\A3\armor_f_beta\APC_Tracked_01\Data\UI\APC_Tracked_01_CRV_ca.paa' width='30' height='20'/> <marker name='blufor_base'>清理:</marker><br/> 你可以通过驾驶豹式装甲车(Nemmera)朝向IED或假IED, 来移除它们周围的残骸或物体。<img image='\A3\EditorPreviews_F\Data\CfgVehicles\B_APC_Tracked_01_CRV_F.jpg' width='355' height='200'/> @@ -227,7 +228,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, mask and breather backpack) to protect you from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。 <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 @@ -264,18 +265,23 @@ Auto restart/shutdown server (Must define in server.cfg: serverCommandPassword = "btc_password") + 自动重启/关闭服务器(必须在server.cfg中定义: serverCommandPassword = "btc_password") Shutdown + 关闭 Save and restart + 保存并重启 Save and shutdown + 保存并关闭 Time before auto restart/shutdown server + 自动重启/关闭服务器前的时间 @@ -1808,6 +1814,7 @@ Server reboot in 5min, leave it NOW! + 服务器将在5分钟后重启, 请立即离开服务器! From a6eec99df6bc4ffe6d601d2bbf715231cf256751 Mon Sep 17 00:00:00 2001 From: Gold John King Date: Tue, 28 Apr 2020 09:35:04 +0800 Subject: [PATCH 053/264] Remove new line --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 9dbd3d268..f44ca67a5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -160,13 +160,11 @@ - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\mine_ca.paa' width='20' height='20'/> <marker name='blufor_base'>IED:</marker><br/> Any object could be an IED or a fake IED.<br/> <img image='\A3\EditorPreviews_F\Data\CfgVehicles\IEDLandSmall_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> Approach IED carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around.<br/> <img image='\z\ace\addons\minedetector\data\equip\w_vmh3_ca.paa' width='70' height='100'/> <br/><br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Defuse:</marker><br/> If you are an engineer and have a defusal kit, you can disarm it. You can also blow them off with high caliber and explosive satchels.<br/> <img image='\z\ace\addons\explosives\Data\UI\Pliers.paa' width='50' height='50'/> <br/><br/> <img image='\A3\armor_f_beta\APC_Tracked_01\Data\UI\APC_Tracked_01_CRV_ca.paa' width='30' height='20'/> <marker name='blufor_base'>Clean up:</marker><br/> You can remove wreck or object around IED or fake IED by driving a Nemmera in their direction. <img image='\A3\EditorPreviews_F\Data\CfgVehicles\B_APC_Tracked_01_CRV_F.jpg' width='355' height='200'/> - + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\mine_ca.paa' width='20' height='20'/> <marker name='blufor_base'>IED:</marker><br/> Any object could be an IED or a fake IED.<br/> <img image='\A3\EditorPreviews_F\Data\CfgVehicles\IEDLandSmall_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> Approach IED carefully (DO NOT rotate while you are walking: prefer walk, stop, rotate, walk again etc). Turn On your mine detector (VMH3 or VMMH3) and search for a charge in a circle of 2 meter around.<br/> <img image='\z\ace\addons\minedetector\data\equip\w_vmh3_ca.paa' width='70' height='100'/> <br/><br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Defuse:</marker><br/> If you are an engineer and have a defusal kit, you can disarm it. You can also blow them off with high caliber and explosive satchels.<br/> <img image='\z\ace\addons\explosives\Data\UI\Pliers.paa' width='50' height='50'/> <br/><br/> <img image='\A3\armor_f_beta\APC_Tracked_01\Data\UI\APC_Tracked_01_CRV_ca.paa' width='30' height='20'/> <marker name='blufor_base'>Clean up:</marker><br/> You can remove wreck or object around IED or fake IED by driving a Nemmera in their direction. <img image='\A3\EditorPreviews_F\Data\CfgVehicles\B_APC_Tracked_01_CRV_F.jpg' width='355' height='200'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Cualquier objeto puede ser un artefacto explosivo improvisado, acérquese a él con cuidado (NO rote mientras camina: prefiera caminar, detenerse, rotar, volver a caminar, etc.). Encienda su detector de minas (VMH3 o VMMH3) y busque una carga en un círculo de 2 metros alrededor.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Si usted es ingeniero y tiene un kit de desactivación, puede desarmarlo.<br/> También puedes volarlos con explosivos y fuego de alto calibre. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Jedes Objekt kann eine IED sein, seien sie ensprechen Vorsichtig und machen Sie keine hastigen Bewegungen (NICHT drehen wenn man läuft: besser gehen, stop, drehen, gehen und so weiter). Schalten Sie ihren Minendetektor (VMH3 oder VMMH3) ein und suchen sie in eim 2m Radius nach der Ladung.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Wenn Sie ein Ingenieur sind und ein Entschärfungskit dabei habe, können Sie die Sprengladung entschärfen.<br/> Es is ebenfalls möglich die IED mithilfe von hohen Kalibern oder Sprengladungen zu entfernen (kontrollierte Explosion). <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Qualquer objeto pode ser um IED, aproxime-o com cuidado (NÃO vire-se enquanto estiver andando: ande, pare, olhe, ande de novo, etc.). Ative o seu detector de minas (VMH3 ou VMMH3) e procure uma carga em um círculo de 2 metros ao redor.<br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> Se você é um engenheiro e possui um kit de desarme, você pode desarmá-lo.<br/> Também é possível destruir o IED usando grosso calibre ou explosivos (explosão controlada). - - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\mine_ca.paa' width='20' height='20'/> <marker name='blufor_base'>简易爆炸装置(IED):</marker><br/> 任何物体都有可能是IED, 或者是假IED。<br/> <img image='\A3\EditorPreviews_F\Data\CfgVehicles\IEDLandSmall_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 任何物体都可能是一个简易爆炸装置(IED), 小心地接近它(切勿在行走的同时转身, 而应当"走-停下-转身-继续走")。打开你的探雷器(VMH3或VMMH3), 在2米范围内寻找炸弹。<br/> <img image='\z\ace\addons\minedetector\data\equip\w_vmh3_ca.paa' width='70' height='100'/> <br/><br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除:</marker><br/> 如果你是工程师并且携带了拆弹工具, 你就可以拆除它。你也可以使用大口径子弹或者炸药包来引爆它。<br/> <img image='\z\ace\addons\explosives\Data\UI\Pliers.paa' width='50' height='50'/> <br/><br/> <img image='\A3\armor_f_beta\APC_Tracked_01\Data\UI\APC_Tracked_01_CRV_ca.paa' width='30' height='20'/> <marker name='blufor_base'>清理:</marker><br/> 你可以通过驾驶豹式装甲车(Nemmera)朝向IED或假IED, 来移除它们周围的残骸或物体。<img image='\A3\EditorPreviews_F\Data\CfgVehicles\B_APC_Tracked_01_CRV_F.jpg' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\mine_ca.paa' width='20' height='20'/> <marker name='blufor_base'>简易爆炸装置(IED):</marker><br/> 任何物体都有可能是IED, 或者是假IED。<br/> <img image='\A3\EditorPreviews_F\Data\CfgVehicles\IEDLandSmall_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 任何物体都可能是一个简易爆炸装置(IED), 小心地接近它(切勿在行走的同时转身, 而应当"走-停下-转身-继续走")。打开你的探雷器(VMH3或VMMH3), 在2米范围内寻找炸弹。<br/> <img image='\z\ace\addons\minedetector\data\equip\w_vmh3_ca.paa' width='70' height='100'/> <br/><br/> <img image='\z\ace\addons\explosives\UI\Defuse_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除:</marker><br/> 如果你是工程师并且携带了拆弹工具, 你就可以拆除它。你也可以使用大口径子弹或者炸药包来引爆它。<br/> <img image='\z\ace\addons\explosives\Data\UI\Pliers.paa' width='50' height='50'/> <br/><br/> <img image='\A3\armor_f_beta\APC_Tracked_01\Data\UI\APC_Tracked_01_CRV_ca.paa' width='30' height='20'/> <marker name='blufor_base'>清理:</marker><br/> 你可以通过驾驶豹式装甲车(Nemmera)朝向IED或假IED, 来移除它们周围的残骸或物体。<img image='\A3\EditorPreviews_F\Data\CfgVehicles\B_APC_Tracked_01_CRV_F.jpg' width='355' height='200'/> From a52c025960974cab928c3223737cc2ed524e9cc1 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 28 Apr 2020 11:17:11 +0200 Subject: [PATCH 054/264] Remove useless global variable --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 7cb4779e7..a16f67d6c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -135,7 +135,6 @@ if (isServer) then { }; btc_hideout_safezone = 4000; btc_hideout_range = 3500; - btc_hideout_rinf_time = 600; btc_hideout_cap_time = 1800; btc_hideout_cap_checking = false; From 30e0d160245cb5b629fce84f07bfa7a707d7e7e0 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 29 Apr 2020 20:28:12 +0200 Subject: [PATCH 055/264] Update the documentation --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- docs/InGame-documentation.md | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 9ecbde6f5..5831a9e17 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -186,7 +186,7 @@ 声誉 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Reputation can be ask to civilian<br/> Bad actions cause bad effects.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Helping the local population by fighting the Oplitas and disarming IED's will rise your reputation; killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing vehicles, player respawns will decrease your repution. At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead.<br/> Aborting a side mission does not affect reputation. + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 122fb3990..eb3efe92a 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -114,12 +114,12 @@ When you destroy an hideout or an ammo cache, all the markers related to it will ## Reputation -Reputation can be ask to civilian. Bad actions cause bad effects. - -Helping the local population, fighting the Oplitas, disarming IED will rise your reputation; killing civilians, mutilate alive/dead civilian, firing near civilians for no reason, damaging/destroying buildings, losing vehicles, respawns will decrease your repution. At the beginning you have a very low reputation level, so civilians won't help you revealing important information about Oplitas, they will likely lie instead. - -Aborting a side mission does not affect reputation. - +### System: +At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. +### Good actions: +Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. +### Bad actions: +Bad actions cause bad effects: killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. ## Civil Orders Any player can give orders to civilians. To do this, just open your self interaction menu and select 'ORDERS' or use one of the shortcuts. Shortcuts can changed under 'configure >> controls>> configure addons >> Hearts and Minds: Mission (drop down menu)'. Your options are: From 52ef26be8441aebc0e223db5155de787b8cf80c3 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 30 Apr 2020 02:08:06 +0200 Subject: [PATCH 056/264] Add picture to the doc --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index b2fc122d0..e86760d4a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -112,11 +112,11 @@ - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> You can dismantle a FOB by interacting with the flag on the HQ roof.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Rallypoint:</marker><br/> You can also use the Zeus rallypoint backpack available in Arsenal but they have some limitation. After some times or after player disconnected, rallypoint will self-destruct. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署:</marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除:</marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> You can dismantle a FOB by interacting with the flag on the HQ roof.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Rallypoint:</marker><br/> You can also use the Zeus rallypoint backpack available in Arsenal but they have some limitation. After some times or after player disconnected, rallypoint will self-destruct.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署:</marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除:</marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> From 275dceba4a502f64300665aaa714af73657bb9d0 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 30 Apr 2020 10:47:03 +0200 Subject: [PATCH 057/264] Add a picture for FOB --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index e86760d4a..298605482 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -112,7 +112,7 @@ - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> You can dismantle a FOB by interacting with the flag on the HQ roof.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Rallypoint:</marker><br/> You can also use the Zeus rallypoint backpack available in Arsenal but they have some limitation. After some times or after player disconnected, rallypoint will self-destruct.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_ft_owned.jpg' width='355' height='180'/> <br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> You can dismantle a FOB by interacting with the flag on the HQ roof.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Rallypoint:</marker><br/> You can also use the Zeus rallypoint backpack available in Arsenal but they have some limitation. After some times or after player disconnected, rallypoint will self-destruct.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> From 20b9b8c07b8a414bccc42d43f69ace690560ff82 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 30 Apr 2020 11:59:18 +0200 Subject: [PATCH 058/264] Add picture in documentation --- .../stringtable.xml | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index f44ca67a5..b75e28b34 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -78,20 +78,20 @@ 无头客户端与数据库 - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key. - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción. - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern. - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação. - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> 任务将自动使用一台可用的无头客户端。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> 本任务内置独立的数据库系统。敌方单位、城市、藏匿点、武器箱、车辆、玩家或宙斯创建的物体以及公共频道中的地图标记(不含划线标记)将被存储。每个管理员都可以通过自我互动菜单随时保存任务进度。 + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> 任务将自动使用一台可用的无头客户端。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> 本任务内置独立的数据库系统。敌方单位、城市、藏匿点、武器箱、车辆、玩家或宙斯创建的物体以及公共频道中的地图标记(不含划线标记)将被存储。每个管理员都可以通过自我互动菜单随时保存任务进度。<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> When a vehicle is destroyed it will not respawn in base, you need to tow or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. <br/> The Chinook is the only exception, it will respawn after 30 seconds. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> You can also rearm them by spawning the corresponding caliber at logistic point (Interact with the red box, select the vehicle type and caliber). Carry the ammo created and interact with the vehicle to rearm. This only works if rearming is setting on entire magazine or amount based on caliber (not for entire vehicle setting). - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Cuando un vehículo es destruido no va a reaparecer en la base, es necesario remolcarlo o transportarlo de vuelta a la base y repararlo cerca del punto logístico (Interactuar con la caja roja). Los destrozos de helicópteros sólo pueden ser transportados por vía aérea.. <br/> El Chinook es la única excepción, reaparecerá después de 30 segundos.. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> También puede rearmarlos generando el calibre correspondiente en el punto logístico (Interactuar con la caja roja, seleccionar el tipo y calibre del vehículo). Lleva la munición creada e interactúa con el vehículo para rearmarlo. Esto sólo funciona si el rearme se está ajustando en todo el cargador o en una cantidad basada en el calibre (no para el ajuste de todo el vehículo). - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Wenn ein Fahrzeug zersört wurde, wird dies nicht Respawnen. Es muss durch Abschleppen oder Anheben(Sling-Load) zum Logisik-Punkt gebracht und dort repariert werden (mit der roten Box interagieren). Wracks von Hubschraubern können nur angehoben werden (Sling-Load). <br/> Die einzigste Ausnahme hierbei ist der Chinook. Er respawnt nach 30 Sekunden. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Aufmunitionieren:</marker><br/> Fahrzeuge können Aufmunitioniert werden, in dem man das entsprechende Kaliber am Logisik-Punk anfordert (mit der Roten Box interagieren: Fahzeug und Kaliber auswählen). Nun muss man nur noch die erstellte Munition zum Fahrzeug bringen und mit diesem interagieren um das aufmunitionieren zu beginnen.<br/>ANMERKUNG: Das funktioiert nur wenn die Aufmunitionierungseinstellung auf 'Gesamtes Magazin' oder 'Kalieberbasierte Anzahl' gestellt ist (get nicht für 'Gesamtes Fahrzeug'). - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Quando um veículo é destruído ele não reaparecerá na base, você precisa rebocá-lo/levá-lo de volta à base e repará-lo perto do ponto logístico (Interagir com a caixa vermelha). Os destroços de helicóptero só podem ser levantados. <br/> O Chinook é a única exceção, ele reaparecerá depois de 30 segundos. <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> Você também pode rearmar-los, gerando o calibre correspondente no ponto logístico (Interaja com a caixa vermelha, selecione o tipo de veículo e calibre). Leve a munição criada e interaja com o veículo para rearmar. Isso só funciona se o rearme estiver configurado em um depósito inteiro ou em um valor baseado em calibre (não para toda a configuração do veículo). - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> 载具重生:</marker><br/> 当载具损毁时, 它不会自行在基地重生。你需要采用车辆牵引或直升机吊挂的方式将其残骸运回基地, 并在后勤点对其进行维修(与后勤点的红色箱子进行互动)。直升机的残骸只能使用吊挂的方式运输。<br/> 支奴干(Chinook)是唯一的例外, 它会在损毁后30秒于基地重生。<br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> 弹药补给:</marker><br/> 你可以在后勤点生成对应口径的弹药, 对载具进行弹药补给。与红色箱子互动, 选择对应的载具类型及口径, 弹药箱将会生成。将生成的弹药箱搬到载具附近, 与载具互动, 即可执行补给。注意: 如需启用此功能, 需要将任务参数中的弹药补给选项设置为 "Total Magazine" 或 "Calibre Based Number" (而非 "Entire Vehicle")。 + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> When a vehicle is destroyed it will not respawn in base, you need to tow or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. <br/> The Chinook is the only exception, it will respawn after 30 seconds.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> You can also rearm them by spawning the corresponding caliber at logistic point (Interact with the red box, select the vehicle type and caliber). Carry the ammo created and interact with the vehicle to rearm. This only works if rearming is setting on entire magazine or amount based on caliber (not for entire vehicle setting).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Cuando un vehículo es destruido no va a reaparecer en la base, es necesario remolcarlo o transportarlo de vuelta a la base y repararlo cerca del punto logístico (Interactuar con la caja roja). Los destrozos de helicópteros sólo pueden ser transportados por vía aérea.. <br/> El Chinook es la única excepción, reaparecerá después de 30 segundos..<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> También puede rearmarlos generando el calibre correspondiente en el punto logístico (Interactuar con la caja roja, seleccionar el tipo y calibre del vehículo). Lleva la munición creada e interactúa con el vehículo para rearmarlo. Esto sólo funciona si el rearme se está ajustando en todo el cargador o en una cantidad basada en el calibre (no para el ajuste de todo el vehículo).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Wenn ein Fahrzeug zersört wurde, wird dies nicht Respawnen. Es muss durch Abschleppen oder Anheben(Sling-Load) zum Logisik-Punkt gebracht und dort repariert werden (mit der roten Box interagieren). Wracks von Hubschraubern können nur angehoben werden (Sling-Load). <br/> Die einzigste Ausnahme hierbei ist der Chinook. Er respawnt nach 30 Sekunden.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Aufmunitionieren:</marker><br/> Fahrzeuge können Aufmunitioniert werden, in dem man das entsprechende Kaliber am Logisik-Punk anfordert (mit der Roten Box interagieren: Fahzeug und Kaliber auswählen). Nun muss man nur noch die erstellte Munition zum Fahrzeug bringen und mit diesem interagieren um das aufmunitionieren zu beginnen.<br/>ANMERKUNG: Das funktioiert nur wenn die Aufmunitionierungseinstellung auf 'Gesamtes Magazin' oder 'Kalieberbasierte Anzahl' gestellt ist (get nicht für 'Gesamtes Fahrzeug').<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Quando um veículo é destruído ele não reaparecerá na base, você precisa rebocá-lo/levá-lo de volta à base e repará-lo perto do ponto logístico (Interagir com a caixa vermelha). Os destroços de helicóptero só podem ser levantados. <br/> O Chinook é a única exceção, ele reaparecerá depois de 30 segundos.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> Você também pode rearmar-los, gerando o calibre correspondente no ponto logístico (Interaja com a caixa vermelha, selecione o tipo de veículo e calibre). Leve a munição criada e interaja com o veículo para rearmar. Isso só funciona se o rearme estiver configurado em um depósito inteiro ou em um valor baseado em calibre (não para toda a configuração do veículo).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> 载具重生:</marker><br/> 当载具损毁时, 它不会自行在基地重生。你需要采用车辆牵引或直升机吊挂的方式将其残骸运回基地, 并在后勤点对其进行维修(与后勤点的红色箱子进行互动)。直升机的残骸只能使用吊挂的方式运输。<br/> 支奴干(Chinook)是唯一的例外, 它会在损毁后30秒于基地重生<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' />。<br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> 弹药补给:</marker><br/> 你可以在后勤点生成对应口径的弹药, 对载具进行弹药补给。与红色箱子互动, 选择对应的载具类型及口径, 弹药箱将会生成。将生成的弹药箱搬到载具附近, 与载具互动, 即可执行补给。注意: 如需启用此功能, 需要将任务参数中的弹药补给选项设置为 "Total Magazine" 或 "Calibre Based Number" (而非 "Entire Vehicle")。<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> @@ -103,11 +103,11 @@ 支线任务 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Side missions are really useful to raise your reputation level.<br/> A side mission can be requested by the officer with his self interaction menu.<br/> If you don't want to complete a task, assigned it to you and abort it with the self interaction menu. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Las misiones secundarias son realmente útiles para elevar tu nivel de reputación.<br/> Una misión secundaria puede ser solicitada por el oficial con su menú de auto-interacción..<br/> Si no desea completar una tarea, siempre puede abortarla con el menú de auto-interacción. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Nebenaufgaben sind sehr nütlich um das Ansehen in der Bevölkerung zu erhöhen.<br/>Diese Aufgaben können vom Offizier über das Eigen-Interaktionsmenü angefordert werden.<br/>Kann man eine Mission aus verschiedenen Gründen nicht abgeschlossen werden, so kann der Offizier sie jederzeit über das Eigen-Interaktionsmenü abbrechen. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Missões secundárias são úteis para elevar o nível de reputação.<br/> Uma missão secundária pode ser solicitada pelo Oficial usando menu de interação pessoal.<br/> Se você não quiser concluir uma tarefa, poderá sempre abortá-la usando o menu de interação. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> 支线任务有利于提升声誉值。<br/> 军官(Officer)可以使用自我互动菜单申请支线任务。<br/> 军官(Officer)可以使用自我互动菜单随时取消支线任务。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Side missions are really useful to raise your reputation level.<br/> A side mission can be requested by the officer with his self interaction menu.<br/> If you don't want to complete a task, assigned it to you and abort it with the self interaction menu.<br/><br/> <img image='\a3\Missions_F_Beta\data\img\Challenges_overview_CA.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Las misiones secundarias son realmente útiles para elevar tu nivel de reputación.<br/> Una misión secundaria puede ser solicitada por el oficial con su menú de auto-interacción..<br/> Si no desea completar una tarea, siempre puede abortarla con el menú de auto-interacción.<br/><br/> <img image='\a3\Missions_F_Beta\data\img\Challenges_overview_CA.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Nebenaufgaben sind sehr nütlich um das Ansehen in der Bevölkerung zu erhöhen.<br/>Diese Aufgaben können vom Offizier über das Eigen-Interaktionsmenü angefordert werden.<br/>Kann man eine Mission aus verschiedenen Gründen nicht abgeschlossen werden, so kann der Offizier sie jederzeit über das Eigen-Interaktionsmenü abbrechen.<br/><br/> <img image='\a3\Missions_F_Beta\data\img\Challenges_overview_CA.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> Missões secundárias são úteis para elevar o nível de reputação.<br/> Uma missão secundária pode ser solicitada pelo Oficial usando menu de interação pessoal.<br/> Se você não quiser concluir uma tarefa, poderá sempre abortá-la usando o menu de interação.<br/><br/> <img image='\a3\Missions_F_Beta\data\img\Challenges_overview_CA.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\whiteboard_ca.paa' width='20' height='20'/> 支线任务有利于提升声誉值。<br/> 军官(Officer)可以使用自我互动菜单申请支线任务。<br/> 军官(Officer)可以使用自我互动菜单随时取消支线任务。<br/><br/> <img image='\a3\Missions_F_Beta\data\img\Challenges_overview_CA.paa' width='355' height='200' /> @@ -125,28 +125,28 @@ - =BTC= Lift will not replace the A3 sling loading, you can use both.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Lifting an object is pretty simple. Get in a chopper as pilot, hover above the object and interact with the chopper to deploy ropes.<br/> When you are in the right position a new scroll wheel action will appear ('HOOK'). If you want you can open the HUD to facilitate the operation.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> To release an object open you self interaction menu and select 'CUT ROPES'. - =BTC= Lift will not replace the A3 sling loading, you can use both.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Levantar un objeto es muy sencillo. Métete en un helicóptero como piloto, sobrevuela el objeto e interactúa con el helicóptero para desplegar las cuerdas.<br/> Cuando esté en la posición correcta, aparecerá una nueva acción de la rueda de desplazamiento ('HOOK'). Si lo desea puede abrir el HUD para facilitar la operación.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> Para liberar un objeto, abra el menú de autointeracción y seleccione 'CORTAR CUERDAS'. - =BTC= Lift ersetzt nicht das A3 Sling-Load-System, du kannst beide nutzen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Das heben von Lasten ist recht einfach. Nimm dir einen Hubschrauber, schwebe über dem Objekt und lass die Seile ab indem du mit dem Hubschrauber interagierst.<br/> Wenn du in der richtigen Postion bist, erscheint im Maus-Rad-Menü die Option 'EINHACKEN' mit der du die Fracht einhacken kannst. Wenn du willst kannst du auch ein HUD öffnen, welches dir deine Arbeit erleichtert.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> Um ein eingehacktes Objekt abzulassen, wähle im Maus-Rad-Menü die Option 'SEILE TRENNEN' aus. - =BTC= O elevador não substituirá o carregamento do A3 Sling, você pode usar ambos.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Levantar um objeto é bem simples. Entre em um helicóptero como piloto, passe o mouse sobre o objeto e interaja com o helicóptero para posicionar as cordas.<br/> Quando você estiver na posição correta e rolar a roda do mouse, aparecerá a ação "GANCHO". Se você quiser, pode abrir o HUD para facilitar a operação.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> Para liberar um objeto, abra o menu de interação deste objeto e selecione "CORTAR CORDAS". - =BTC=吊挂功能不会覆盖原版吊挂功能, 二者都可以使用。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> 吊挂货物相当简单: 进入直升机飞行员座位, 于货物上方悬停, 与直升机互动并部署绳索。<br/> 当你处于正确位置时, 一个新的选项"安装挂钩"将会出现在鼠标滚轮的动作菜单中。你可也以打开HUD以方便操作。<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> 要释放一个货物, 使用自我互动菜单并选择"断开绳索"即可。 + =BTC= Lift will not replace the A3 sling loading, you can use both.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Lifting an object is pretty simple. Get in a chopper as pilot, hover above the object and interact with the chopper to deploy ropes.<br/> When you are in the right position a new scroll wheel action will appear ('HOOK'). If you want you can open the HUD to facilitate the operation.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> To release an object open you self interaction menu and select 'CUT ROPES'.<br/><br/> <img image='\a3\Missions_F_Heli\data\img\Showcase_SlingLoading_overview_CA.paa' width='355' height='200' /> + =BTC= Lift will not replace the A3 sling loading, you can use both.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Levantar un objeto es muy sencillo. Métete en un helicóptero como piloto, sobrevuela el objeto e interactúa con el helicóptero para desplegar las cuerdas.<br/> Cuando esté en la posición correcta, aparecerá una nueva acción de la rueda de desplazamiento ('HOOK'). Si lo desea puede abrir el HUD para facilitar la operación.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> Para liberar un objeto, abra el menú de autointeracción y seleccione 'CORTAR CUERDAS'.<br/><br/> <img image='\a3\Missions_F_Heli\data\img\Showcase_SlingLoading_overview_CA.paa' width='355' height='200' /> + =BTC= Lift ersetzt nicht das A3 Sling-Load-System, du kannst beide nutzen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Das heben von Lasten ist recht einfach. Nimm dir einen Hubschrauber, schwebe über dem Objekt und lass die Seile ab indem du mit dem Hubschrauber interagierst.<br/> Wenn du in der richtigen Postion bist, erscheint im Maus-Rad-Menü die Option 'EINHACKEN' mit der du die Fracht einhacken kannst. Wenn du willst kannst du auch ein HUD öffnen, welches dir deine Arbeit erleichtert.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> Um ein eingehacktes Objekt abzulassen, wähle im Maus-Rad-Menü die Option 'SEILE TRENNEN' aus.<br/><br/> <img image='\a3\Missions_F_Heli\data\img\Showcase_SlingLoading_overview_CA.paa' width='355' height='200' /> + =BTC= O elevador não substituirá o carregamento do A3 Sling, você pode usar ambos.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> Levantar um objeto é bem simples. Entre em um helicóptero como piloto, passe o mouse sobre o objeto e interaja com o helicóptero para posicionar as cordas.<br/> Quando você estiver na posição correta e rolar a roda do mouse, aparecerá a ação "GANCHO". Se você quiser, pode abrir o HUD para facilitar a operação.<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> Para liberar um objeto, abra o menu de interação deste objeto e selecione "CORTAR CORDAS".<br/><br/> <img image='\a3\Missions_F_Heli\data\img\Showcase_SlingLoading_overview_CA.paa' width='355' height='200' /> + =BTC=吊挂功能不会覆盖原版吊挂功能, 二者都可以使用。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\container_ca.paa' width='20' height='20'/> <img image='\A3\air_f_beta\Heli_Transport_01\Data\UI\Map_Heli_Transport_01_base_CA.paa' width='20' height='20'/> 吊挂货物相当简单: 进入直升机飞行员座位, 于货物上方悬停, 与直升机互动并部署绳索。<br/> 当你处于正确位置时, 一个新的选项"安装挂钩"将会出现在鼠标滚轮的动作菜单中。你可也以打开HUD以方便操作。<br/> <img image='\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa' width='20' height='20'/> 要释放一个货物, 使用自我互动菜单并选择"断开绳索"即可。<br/><br/> <img image='\a3\Missions_F_Heli\data\img\Showcase_SlingLoading_overview_CA.paa' width='355' height='200' /> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> At the logistic point you can require new objects (like ammo, fortifications, supplies for the side missions...) and repair destroyed vehicles. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> En el punto logístico puede requerir nuevos objetos (como municiones, fortificaciones, suministros para las misiones secundarias...) y reparar vehículos destruidos. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Am Logistikpunkt kann man neue Objekte (wie zB. Munition, Baumaterial, Nachschubgüter für Nebenaufgaben...) anfordern und zerstörte Fahrzeuge reparieren. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> No ponto logístico, você pode solicitar novos objetos (como munição, fortificações, suprimentos para as missões secundárias ...) e reparar veículos destruídos. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> 后勤点可以生成新的物件(如弹药、防御工事、用于支线任务的救援物资等), 也可以维修受损载具。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> At the logistic point you can require new objects (like ammo, fortifications, supplies for the side missions...) and repair destroyed vehicles.<br/><br/> <img image='A3\Missions_F_Tank\data\img\Showcase_TankDestroyers.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> En el punto logístico puede requerir nuevos objetos (como municiones, fortificaciones, suministros para las misiones secundarias...) y reparar vehículos destruidos.<br/><br/> <img image='A3\Missions_F_Tank\data\img\Showcase_TankDestroyers.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Am Logistikpunkt kann man neue Objekte (wie zB. Munition, Baumaterial, Nachschubgüter für Nebenaufgaben...) anfordern und zerstörte Fahrzeuge reparieren.<br/><br/> <img image='A3\Missions_F_Tank\data\img\Showcase_TankDestroyers.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> No ponto logístico, você pode solicitar novos objetos (como munição, fortificações, suprimentos para as missões secundárias ...) e reparar veículos destruídos.<br/><br/> <img image='A3\Missions_F_Tank\data\img\Showcase_TankDestroyers.paa' width='355' height='200' /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa' width='20' height='20'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> 后勤点可以生成新的物件(如弹药、防御工事、用于支线任务的救援物资等), 也可以维修受损载具。<br/><br/> <img image='A3\Missions_F_Tank\data\img\Showcase_TankDestroyers.paa' width='355' height='200' /> - <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> To tow a vehicle interact with it and select the option 'HOOK'.<br/>After that place the tow vehicle in front of it and select 'TOW' in the interaction menu.<br/> If the two vehicles are too far away or the vehicle can't tow that load (Car can't tow truck or tank), the option will be disabled.<br/> To unhook interact with one of the two vehicles and select the option 'UNHOOK'.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> With this option you can move heavy objects to build small outpost or base.<br/> When you select the option an hint will show all the keys required to move the object. - <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Fracht-System:</marker><br/>Siehe ACE3 Dokumentation. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abschleppsystem:</marker><br/> Um ein Fahrzeug abzuschleppen muss man mit diesem interagieren und 'EINHACKEN' auswählen.<br/>Als nächstes muss man das Zugfahrzeug vor das abzuschleppende Fahrzeug stellen und über das Interagtionsmenü die Option 'ABSCHLEPPEN' aktivieren.<br/> Zu beachten ist dabei, dass die beiden Fahrzeuge nicht zu weit von einander entfernt sein dürfen. Ebenso ist daruf zu achten, dass das Zugfahrzeug auch das andere Fahrzeug abschleppen kann (zB. Autos können keine Lkw/Panzer abschleppen).<br/> Um das Abschleppseil wieder zu entfernen muss man einen bei einem der beiden Fahrzeuge die Option 'AUSHACKEN' auswählen.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Platzierung von Objekten:</marker><br/> Mit dieser Option können Sie schwere Objekte bewegen, um einen kleinen Außenposten oder eine Basis zu bauen.<br/> Wenn Sie die Option auswählen, zeigt ein Hinweis alle Tasten an, die zum Verschieben des Objekts erforderlich sind. - <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> Para rebocar um veículo, interaja com ele e selecione a opção "GANCHO".<br/> Depois disso, coloque o veículo de reboque na frente dele e selecione "REBOCAR" no menu de interação.<br/> Se os dois veículos estiverem muito distantes ou o veículo não puder rebocar essa carga (o carro não poderá rebocar o caminhão ou o tanque), a opção será desativada.<br/> Para desengatar, interaja com um dos dois veículos e selecione a opção "DESENGANCHAR".<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> Com esta opção, você pode mover objetos pesados para construir um posto avançado ou uma base pequena.<br/> Quando você selecionar a opção, uma dica mostrará todas as ações necessárias para mover o objeto. - <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>货运系统:</marker><br/> 使用ACE3货运系统。<br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>牵引系统:</marker><br/> 如需牵引一辆载具, 与其互动并选择"启用牵引"。<br/>然后, 将牵引车辆(前车)置于被牵引车辆(后车)前方, 并在互动菜单中选择"牵引"。<br/> 如果两辆车的距离过远, 或前车无法牵引这一载荷(比如汽车(Car)无法牵引卡车(Truck)或坦克(Tank)), 则该选项不可用。<br/> 如需取消牵引, 与两车之一互动并选择"取消牵引"。<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>物体放置:</marker><br/> 您可以使用该选项来移动重物, 从而建造一个小的前哨或基地。<br/> 选择该选项后, 移动对象所需键位的提示将会出现。 + <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> To tow a vehicle interact with it and select the option 'HOOK'.<br/>After that place the tow vehicle in front of it and select 'TOW' in the interaction menu.<br/> If the two vehicles are too far away or the vehicle can't tow that load (Car can't tow truck or tank), the option will be disabled.<br/> To unhook interact with one of the two vehicles and select the option 'UNHOOK'.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> With this option you can move heavy objects to build small outpost or base.<br/> When you select the option an hint will show all the keys required to move the object.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> + <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Fracht-System:</marker><br/>Siehe ACE3 Dokumentation. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abschleppsystem:</marker><br/> Um ein Fahrzeug abzuschleppen muss man mit diesem interagieren und 'EINHACKEN' auswählen.<br/>Als nächstes muss man das Zugfahrzeug vor das abzuschleppende Fahrzeug stellen und über das Interagtionsmenü die Option 'ABSCHLEPPEN' aktivieren.<br/> Zu beachten ist dabei, dass die beiden Fahrzeuge nicht zu weit von einander entfernt sein dürfen. Ebenso ist daruf zu achten, dass das Zugfahrzeug auch das andere Fahrzeug abschleppen kann (zB. Autos können keine Lkw/Panzer abschleppen).<br/> Um das Abschleppseil wieder zu entfernen muss man einen bei einem der beiden Fahrzeuge die Option 'AUSHACKEN' auswählen.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Platzierung von Objekten:</marker><br/> Mit dieser Option können Sie schwere Objekte bewegen, um einen kleinen Außenposten oder eine Basis zu bauen.<br/> Wenn Sie die Option auswählen, zeigt ein Hinweis alle Tasten an, die zum Verschieben des Objekts erforderlich sind.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> + <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> Para rebocar um veículo, interaja com ele e selecione a opção "GANCHO".<br/> Depois disso, coloque o veículo de reboque na frente dele e selecione "REBOCAR" no menu de interação.<br/> Se os dois veículos estiverem muito distantes ou o veículo não puder rebocar essa carga (o carro não poderá rebocar o caminhão ou o tanque), a opção será desativada.<br/> Para desengatar, interaja com um dos dois veículos e selecione a opção "DESENGANCHAR".<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> Com esta opção, você pode mover objetos pesados para construir um posto avançado ou uma base pequena.<br/> Quando você selecionar a opção, uma dica mostrará todas as ações necessárias para mover o objeto.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> + <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>货运系统:</marker><br/> 使用ACE3货运系统。<br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>牵引系统:</marker><br/> 如需牵引一辆载具, 与其互动并选择"启用牵引"。<br/>然后, 将牵引车辆(前车)置于被牵引车辆(后车)前方, 并在互动菜单中选择"牵引"。<br/> 如果两辆车的距离过远, 或前车无法牵引这一载荷(比如汽车(Car)无法牵引卡车(Truck)或坦克(Tank)), 则该选项不可用。<br/> 如需取消牵引, 与两车之一互动并选择"取消牵引"。<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>物体放置:</marker><br/> 您可以使用该选项来移动重物, 从而建造一个小的前哨或基地。<br/> 选择该选项后, 移动对象所需键位的提示将会出现。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> @@ -169,11 +169,11 @@ - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> Intel can be retrieved in the following ways:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Searching dead bodies<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Interrogate prisoner<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Talking to civilians<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Keep in mind that only the interpreter can talk to civilians and they can lie if your reputation level is low.<br/><br/> When you find an intel from a dead body or interrogate a prisoner, a marker will appear in the map. Remember, prisoner have a random number of intel more or less interesting.<br/> There are two types of intel:<br/> - Red question mark (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>) and pictures under diary log map menu: ammo cache intel<br/> - Red exclamation mark (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): hideout intel<br/><br/><br/> When you destroy an hideout or an ammo cache, all the markers related to it will be deleted. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> La Inteligencia se puede recuperar de las siguientes maneras:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Registrando cadáveres<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Interrogando prisioneros<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Conversando con Civiles<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Tenga en cuenta que sólo el intérprete puede hablar con civiles y ellos pueden mentir si su nivel de reputación es bajo.<br/><br/> Cuando encuentres una información de un cadáver o interrogues a un prisionero, aparecerá un marcador en el mapa. Recuerda, los prisioneros tienen un número aleatorio de información más o menos interesante.<br/> Hay 2 tipos de marcas:<br/> - Signo de interrogacion rojo (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): intel sobre cache de municion<br/> - Signo de exclamacion rojo (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): intel sobre escondite<br/><br/><br/> Cuando destruyes un escondite o una caché de munición, todos los marcadores relacionados con él se borrarán. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> Informationen kann man auf verschiedene Arten erhalten:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Durchsuchen von toten Personen<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Verhören von Gefangenen<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Mit Zivilisten reden<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Nur der Dolmetscher kann sich mit Zivilisten unterhalten. Wenn ihr Ansehen bei der Bevölkerunge niedrig ist, so kann es auch mal vorkommen das manche Zivilisten sie belügen.<br/><br/> Wenn Sie Information erhalten, erscheint eine Markierung auf der Karte. Zur Erinnerung: Gefangene habe mal mehr und mal weniger interessante Informationen.<br/> Es gibt zwei Arten von Markierungen:<br/> - Ein rotes Fragezeichen (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): Information über ein Waffenlager <br/> - Ein rotes Ausrufezeichen (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): Information über ein Versteck <br/><br/><br/> Wenn Sie ein Versteck oder ein Waffenlager zersört haben, so werden alle relevanten Markierungen automatisch gelöscht. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> Informações podem ser obtidas de diferentes maneiras:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Procurando nos corpos dos mortos<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Interrogando prisioneiros<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Falando com civis<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Somente o intérprete pode conversar com os civis. Se a reputação entre a população é baixa, pode acontecer de alguns civis passarem informações mentirosas.<br/><br/> Quando você encontrar uma informação em um cadáver ou interrogando um prisioneiro, uma marcação aparecerá no mapa. Lembre-se, os prisioneiros possuem um número aleatório de informações que são mais ou menos importante.<br/> Existem dois tipos de marcação:<br/> - Interrogação em Vermelho (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): Informações sobre depósito de armas<br/> - Exclamação em Vermelho (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): Informações sobre um esconderijo<br/><br/><br/> Quando você destroí um esconderijo ou depósito de munição, o marcador será excluído. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> 可以通过以下方式获取情报:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> 搜查尸体<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> 审问俘虏<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> 询问平民<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> 请谨记: 只有翻译员可以与平民交谈, 而且如果你的声誉低, 他们也会说谎。<br/><br/> 当通过搜查尸体或审问俘虏得到情报时, 地图上会出现标记。记住, 俘虏所持情报的数量和价值都是随机的。<br/> 情报标记有两类:<br/> - 红色问号标记 (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): 武器箱情报<br/> - 红色叹号标记 (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): 藏匿点情报<br/><br/><br/> 当你摧毁了藏匿点或武器箱时, 与之相关的所有标记将被删除。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> Intel can be retrieved in the following ways:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Searching dead bodies<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Interrogate prisoner<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Talking to civilians<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Keep in mind that only the interpreter can talk to civilians and they can lie if your reputation level is low.<br/><br/> When you find an intel from a dead body or interrogate a prisoner, a marker will appear in the map. Remember, prisoner have a random number of intel more or less interesting.<br/> There are two types of intel:<br/> - Red question mark (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>) and pictures under diary log map menu: ammo cache intel<br/> - Red exclamation mark (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): hideout intel<br/><br/><br/> When you destroy an hideout or an ammo cache, all the markers related to it will be deleted.<br/><br/> <img image='\a3\data_f_argo\Logos\arma3_argo_artwork.jpg' width=362' height='512 /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> La Inteligencia se puede recuperar de las siguientes maneras:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Registrando cadáveres<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Interrogando prisioneros<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Conversando con Civiles<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Tenga en cuenta que sólo el intérprete puede hablar con civiles y ellos pueden mentir si su nivel de reputación es bajo.<br/><br/> Cuando encuentres una información de un cadáver o interrogues a un prisionero, aparecerá un marcador en el mapa. Recuerda, los prisioneros tienen un número aleatorio de información más o menos interesante.<br/> Hay 2 tipos de marcas:<br/> - Signo de interrogacion rojo (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): intel sobre cache de municion<br/> - Signo de exclamacion rojo (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): intel sobre escondite<br/><br/><br/> Cuando destruyes un escondite o una caché de munición, todos los marcadores relacionados con él se borrarán.<br/><br/> <img image='\a3\data_f_argo\Logos\arma3_argo_artwork.jpg' width=362' height='512 /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> Informationen kann man auf verschiedene Arten erhalten:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Durchsuchen von toten Personen<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Verhören von Gefangenen<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Mit Zivilisten reden<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Nur der Dolmetscher kann sich mit Zivilisten unterhalten. Wenn ihr Ansehen bei der Bevölkerunge niedrig ist, so kann es auch mal vorkommen das manche Zivilisten sie belügen.<br/><br/> Wenn Sie Information erhalten, erscheint eine Markierung auf der Karte. Zur Erinnerung: Gefangene habe mal mehr und mal weniger interessante Informationen.<br/> Es gibt zwei Arten von Markierungen:<br/> - Ein rotes Fragezeichen (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): Information über ein Waffenlager <br/> - Ein rotes Ausrufezeichen (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): Information über ein Versteck <br/><br/><br/> Wenn Sie ein Versteck oder ein Waffenlager zersört haben, so werden alle relevanten Markierungen automatisch gelöscht.<br/><br/> <img image='\a3\data_f_argo\Logos\arma3_argo_artwork.jpg' width=362' height='512 /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> Informações podem ser obtidas de diferentes maneiras:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> Procurando nos corpos dos mortos<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> Interrogando prisioneiros<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> Falando com civis<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Somente o intérprete pode conversar com os civis. Se a reputação entre a população é baixa, pode acontecer de alguns civis passarem informações mentirosas.<br/><br/> Quando você encontrar uma informação em um cadáver ou interrogando um prisioneiro, uma marcação aparecerá no mapa. Lembre-se, os prisioneiros possuem um número aleatório de informações que são mais ou menos importante.<br/> Existem dois tipos de marcação:<br/> - Interrogação em Vermelho (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): Informações sobre depósito de armas<br/> - Exclamação em Vermelho (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): Informações sobre um esconderijo<br/><br/><br/> Quando você destroí um esconderijo ou depósito de munição, o marcador será excluído.<br/><br/> <img image='\a3\data_f_argo\Logos\arma3_argo_artwork.jpg' width=362' height='512 /> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa' width='20' height='20'/> 可以通过以下方式获取情报:<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa' width='13' height='13'/> 搜查尸体<br/> - <img image='\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa' width='13' height='13'/> 审问俘虏<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='13' height='13'/> 询问平民<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> 请谨记: 只有翻译员可以与平民交谈, 而且如果你的声誉低, 他们也会说谎。<br/><br/> 当通过搜查尸体或审问俘虏得到情报时, 地图上会出现标记。记住, 俘虏所持情报的数量和价值都是随机的。<br/> 情报标记有两类:<br/> - 红色问号标记 (<img image='\A3\ui_f\data\map\markers\handdrawn\unknown_CA.paa' width='13' height='13' color='#ff0000'/>): 武器箱情报<br/> - 红色叹号标记 (<img image='\A3\ui_f\data\map\markers\handdrawn\warning_CA.paa' width='13' height='13' color='#ff0000'/>): 藏匿点情报<br/><br/><br/> 当你摧毁了藏匿点或武器箱时, 与之相关的所有标记将被删除。<br/><br/> <img image='\a3\data_f_argo\Logos\arma3_argo_artwork.jpg' width=362' height='512 /> @@ -194,11 +194,11 @@ - Any player can give orders to civilians.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> To do this, just open your self interaction menu and select 'ORDERS' or use one of the shortcuts. Shortcuts can changed under 'configure' >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (drop down menu).<br/> Your options are:<br/> - STOP<br/> - GET DOWN<br/> - GO AWAY<br/><br/> If you want to give an order to just one unit, interact with it (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> You can also drop leaflets to ask all civilians in a circle of 200m to evacuate to a religious building (if not available a safe area) with a AR-2 drone. - Cualquier jugador puede dar órdenes a civiles.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para ello, sólo tienes que abrir el menú de auto-interacción y seleccionar `ORDENES' o utilizar uno de los accesos directos. Los accesos directos pueden cambiarse en 'configuración'. >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (menu desplegable).<br/> Tus opciones son:<br/> - ALTO<br/> - AGACHATE<br/> - FUERA DE AQUI<br/><br/> Si quieres dar una orden a una sola unidad, interactúa con ella (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> También puede tirar panfletos para pedir a todos los civiles en un círculo de 200 metros que evacuen a un edificio religioso (si no está disponible un área segura) con un drone - Jeder Spieler kann einem Zivlisten Anweisungen geben.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Dies geht recht einfach in dem man das Eigen-Interaktionsmenü öffnet und dann 'BEFEHLE(ZIVILISTEN)' auswählt. Oder in dem man Kurztasten nutzt. Diese können unter 'Konfigurieren' >> 'Steuerung' >> 'Modifikationen anpassen' >> Hearts and Minds: Mission' (Drop-Down-Menü) geändert werden.<br/><br/> Folgende Optionen stehen zur Verfügung:<br/> - STOPP!<br/> - AUF DEN BODEN!<br/> - GEH WEG!<br/><br/> Wenn Sie einen Befehl an eine bestimmte Person geben wollen, so können Sie auch direkt mir dieser Interagieren (ACE Objekt-Interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Sie können mithilfe einer Drohne Broschüren abwerfen, um die Zivilisten im Umkreis von ca. 200 m aufzufordern, sich in dem nächsten religiösen Gebäude einzufinden (sollte kein Gebäude vorhanden sein, so wird ein sicherer Bereich festgelegt). - Qualquer jogador pode dar instruções a um civil.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para fazer isso, basta abrir o menu de interação do civil e selecionar a opção "ORDENS" ou usar tecla de atalho. Atalhos podem ser alterados no menu "CONFIGURAÇÃO" >> "CONTROLES" >> "CONFIGURAR COMPLEMENTOS (ADDONS)" >> Corações e Mentes: Missão (Menu suspenso).<br/><br/> As seguintes opções estão disponíveis: <br/> - PARE!<br/> - DEITADO!<br/> - VÁ EMBORA!<br/><br/> Se você quiser dar uma ordem para apenas uma unidade, interaja com ela (interação do objeto ACE).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Você pode usar um drone para soltar panfletos solicitando que civis, dentro de um raio de 200m, se abriguem em um prédio religioso mais próximo (se não houver prédio, uma área segura será definida). - 玩家可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。 + Any player can give orders to civilians.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> To do this, just open your self interaction menu and select 'ORDERS' or use one of the shortcuts. Shortcuts can changed under 'configure' >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (drop down menu).<br/> Your options are:<br/> - STOP<br/> - GET DOWN<br/> - GO AWAY<br/><br/> If you want to give an order to just one unit, interact with it (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> You can also drop leaflets to ask all civilians in a circle of 200m to evacuate to a religious building (if not available a safe area) with a AR-2 drone.<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> + Cualquier jugador puede dar órdenes a civiles.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para ello, sólo tienes que abrir el menú de auto-interacción y seleccionar `ORDENES' o utilizar uno de los accesos directos. Los accesos directos pueden cambiarse en 'configuración'. >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (menu desplegable).<br/> Tus opciones son:<br/> - ALTO<br/> - AGACHATE<br/> - FUERA DE AQUI<br/><br/> Si quieres dar una orden a una sola unidad, interactúa con ella (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> También puede tirar panfletos para pedir a todos los civiles en un círculo de 200 metros que evacuen a un edificio religioso (si no está disponible un área segura) con un drone<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> + Jeder Spieler kann einem Zivlisten Anweisungen geben.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Dies geht recht einfach in dem man das Eigen-Interaktionsmenü öffnet und dann 'BEFEHLE(ZIVILISTEN)' auswählt. Oder in dem man Kurztasten nutzt. Diese können unter 'Konfigurieren' >> 'Steuerung' >> 'Modifikationen anpassen' >> Hearts and Minds: Mission' (Drop-Down-Menü) geändert werden.<br/><br/> Folgende Optionen stehen zur Verfügung:<br/> - STOPP!<br/> - AUF DEN BODEN!<br/> - GEH WEG!<br/><br/> Wenn Sie einen Befehl an eine bestimmte Person geben wollen, so können Sie auch direkt mir dieser Interagieren (ACE Objekt-Interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Sie können mithilfe einer Drohne Broschüren abwerfen, um die Zivilisten im Umkreis von ca. 200 m aufzufordern, sich in dem nächsten religiösen Gebäude einzufinden (sollte kein Gebäude vorhanden sein, so wird ein sicherer Bereich festgelegt).<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> + Qualquer jogador pode dar instruções a um civil.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para fazer isso, basta abrir o menu de interação do civil e selecionar a opção "ORDENS" ou usar tecla de atalho. Atalhos podem ser alterados no menu "CONFIGURAÇÃO" >> "CONTROLES" >> "CONFIGURAR COMPLEMENTOS (ADDONS)" >> Corações e Mentes: Missão (Menu suspenso).<br/><br/> As seguintes opções estão disponíveis: <br/> - PARE!<br/> - DEITADO!<br/> - VÁ EMBORA!<br/><br/> Se você quiser dar uma ordem para apenas uma unidade, interaja com ela (interação do objeto ACE).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Você pode usar um drone para soltar panfletos solicitando que civis, dentro de um raio de 200m, se abriguem em um prédio religioso mais próximo (se não houver prédio, uma área segura será definida).<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> + 玩家可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> @@ -210,11 +210,11 @@ 交通 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Civilians are travelling by vehicle across cities. If your reputation is higher than normal, you can ask for a lift to a location chosen on the map. If you bump into a Oplitas patrol, don't worry, the civilian driver will do their best to hide you in the car.<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Los civiles viajan en vehículo a través de las ciudades. Si tu reputación es más alta de lo normal, puedes pedir que te lleven a un lugar elegido en el mapa. Si te encuentras con una patrulla de Oplitas, no te preocupes, el conductor civil hará todo lo posible para esconderte en el coche.<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Zivlisten sind mit Fahrzeugen in den Städten unterwegs. Wenn Sie ein hohes Ansehen in der Bevölkerung genießen, so sind Zivlisten auch gerne mal dazu bereit Sie mitzunehmen (nutzen sie die Karte um den Zivlisten zu zeigen wo sie hinwollen). Sollten Sie dabei durch Zufall auf Feinde stoßen, so wird der Zivilist sein Bestes geben um sie im Fahrzeug zu verstecken.<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Civis estarão viajando de veículo pelo mapa, entre uma cidade e outra. Se sua reputação com a população local for alta, eles estarão dispostos a levá-lo a qualuqer lugar do mapa (use o mapa para mostrar onde você quer ir). Se vocês encontrarem uma patrulha inimiga, o civil fará todo possível para te esconder no veículo.<br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> 平民会在城市间开车穿梭。如果你的声誉够高, 平民会乐意载你一程(用地图指出你要去的地方)。如果你在途中遭遇了Oplitas巡逻队, 不要担心, 平民会尽其所能地把你藏在车里。<br/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Civilians are travelling by vehicle across cities. If your reputation is higher than normal, you can ask for a lift to a location chosen on the map. If you bump into a Oplitas patrol, don't worry, the civilian driver will do their best to hide you in the car.<br/><br/> <img image='\A3\Data_F_Argo\Images\AssetMaldenTerrain_co.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Los civiles viajan en vehículo a través de las ciudades. Si tu reputación es más alta de lo normal, puedes pedir que te lleven a un lugar elegido en el mapa. Si te encuentras con una patrulla de Oplitas, no te preocupes, el conductor civil hará todo lo posible para esconderte en el coche.<br/><br/> <img image='\A3\Data_F_Argo\Images\AssetMaldenTerrain_co.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Zivlisten sind mit Fahrzeugen in den Städten unterwegs. Wenn Sie ein hohes Ansehen in der Bevölkerung genießen, so sind Zivlisten auch gerne mal dazu bereit Sie mitzunehmen (nutzen sie die Karte um den Zivlisten zu zeigen wo sie hinwollen). Sollten Sie dabei durch Zufall auf Feinde stoßen, so wird der Zivilist sein Bestes geben um sie im Fahrzeug zu verstecken.<br/><br/> <img image='\A3\Data_F_Argo\Images\AssetMaldenTerrain_co.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> Civis estarão viajando de veículo pelo mapa, entre uma cidade e outra. Se sua reputação com a população local for alta, eles estarão dispostos a levá-lo a qualuqer lugar do mapa (use o mapa para mostrar onde você quer ir). Se vocês encontrarem uma patrulha inimiga, o civil fará todo possível para te esconder no veículo.<br/><br/> <img image='\A3\Data_F_Argo\Images\AssetMaldenTerrain_co.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <img image='\A3\soft_f_gamma\van_01\Data\UI\map_van_01_box_CA.paa' width='20' height='20'/> 平民会在城市间开车穿梭。如果你的声誉够高, 平民会乐意载你一程(用地图指出你要去的地方)。如果你在途中遭遇了Oplitas巡逻队, 不要担心, 平民会尽其所能地把你藏在车里。<br/><br/> <img image='\A3\Data_F_Argo\Images\AssetMaldenTerrain_co.paa' width='355' height='200'/> @@ -224,9 +224,9 @@ 化学战 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, mask and breather backpack) to protect you from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, mask and breather backpack) to protect you from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> @@ -235,8 +235,8 @@ 频谱探测仪 - <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Electromagnetic field:</marker><br/> There are two types of electromagnetic field from UAV or electromagnetic pulse (EMP). UAV emit electromagnetic field from 390MHz to 500MHz due to device transmission. Electromagnetic pulse are used as weapon to create electronic failure to vehicles. The range of frequency is from 78MHz to 89MHz and is powerfull enough to turn off light, engine and avionic devices. <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Electromagnetic field from UAV are safe but EMP have a range of 500m where vehicles with engine turn ON will be affected. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can detect the origin of electromagnetic field with spectrum devices. The amplitude of the peak depend on the distance and angle between the emiter and the antenna. The maximum range is 1000m. - <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>电磁场:</marker><br/> UAV 和电磁脉冲装置(EMP)会产生两种不同的电磁场。为了传输信号, UAV 会发出频率在 390MHz 到 500MHz 之间的电磁场。电磁脉冲装置是一种能使载具上的电子设备失效的武器。它的频率范围在 78MHz 到 89MHz 之间, 其能量足以使电灯、引擎和航空电子设备实效。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护:</marker><br/> UAV 产生的电磁场是安全的, 但电磁脉冲装置将会影响500米范围内引擎开启的载具。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 你可以使用频谱探测仪来探测电磁场的源头。波形的峰值取决于发射器与天线之间的距离和角度。最大探测距离为1000米。 + <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Electromagnetic field:</marker><br/> There are two types of electromagnetic field from UAV or electromagnetic pulse (EMP). UAV emit electromagnetic field from 390MHz to 500MHz due to device transmission. Electromagnetic pulse are used as weapon to create electronic failure to vehicles. The range of frequency is from 78MHz to 89MHz and is powerfull enough to turn off light, engine and avionic devices. <img image='\A3\Data_F_Mark\Images\watermarkInfo_page14_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Electromagnetic field from UAV are safe but EMP have a range of 500m where vehicles with engine turn ON will be affected. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can detect the origin of electromagnetic field with spectrum devices. The amplitude of the peak depend on the distance and angle between the emiter and the antenna. The maximum range is 1000m. <img image='\a3\Data_F_Enoch\Images\SpectrumDevice_ca.paa' width='355' height='200'/> + <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>电磁场:</marker><br/> UAV 和电磁脉冲装置(EMP)会产生两种不同的电磁场。为了传输信号, UAV 会发出频率在 390MHz 到 500MHz 之间的电磁场。电磁脉冲装置是一种能使载具上的电子设备失效的武器。它的频率范围在 78MHz 到 89MHz 之间, 其能量足以使电灯、引擎和航空电子设备实效。 <img image='\A3\Data_F_Mark\Images\watermarkInfo_page14_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护:</marker><br/> UAV 产生的电磁场是安全的, 但电磁脉冲装置将会影响500米范围内引擎开启的载具。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 你可以使用频谱探测仪来探测电磁场的源头。波形的峰值取决于发射器与天线之间的距离和角度。最大探测距离为1000米。 <img image='\a3\Data_F_Enoch\Images\SpectrumDevice_ca.paa' width='355' height='200'/> From 7b58519a9b42613baad309933554d16fa110fef3 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 30 Apr 2020 12:56:16 +0200 Subject: [PATCH 059/264] Better pictures --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 5831a9e17..94bdeec2a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -186,7 +186,7 @@ 声誉 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. From b37e0f15062da97939e21bcf853367698636be9b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 30 Apr 2020 13:12:43 +0200 Subject: [PATCH 060/264] Add picture for version --- =BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf index 41bedce0e..6f21d355e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/doc.sqf @@ -48,6 +48,6 @@ player createDiaryRecord [_MainCategory, [localize "STR_BTC_HAM_DOC_TRAFFIC_TITL //Version player createDiaryRecord [_MainCategory, [localize "STR_A3_FM_Welcome4", - format ([" Version %1.%2.%3 "] + btc_version) + format ([" Version %1.%2.%3

"] + btc_version) ] ]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index b75e28b34..c657962ab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -194,11 +194,11 @@ - Any player can give orders to civilians.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> To do this, just open your self interaction menu and select 'ORDERS' or use one of the shortcuts. Shortcuts can changed under 'configure' >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (drop down menu).<br/> Your options are:<br/> - STOP<br/> - GET DOWN<br/> - GO AWAY<br/><br/> If you want to give an order to just one unit, interact with it (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> You can also drop leaflets to ask all civilians in a circle of 200m to evacuate to a religious building (if not available a safe area) with a AR-2 drone.<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> - Cualquier jugador puede dar órdenes a civiles.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para ello, sólo tienes que abrir el menú de auto-interacción y seleccionar `ORDENES' o utilizar uno de los accesos directos. Los accesos directos pueden cambiarse en 'configuración'. >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (menu desplegable).<br/> Tus opciones son:<br/> - ALTO<br/> - AGACHATE<br/> - FUERA DE AQUI<br/><br/> Si quieres dar una orden a una sola unidad, interactúa con ella (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> También puede tirar panfletos para pedir a todos los civiles en un círculo de 200 metros que evacuen a un edificio religioso (si no está disponible un área segura) con un drone<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> - Jeder Spieler kann einem Zivlisten Anweisungen geben.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Dies geht recht einfach in dem man das Eigen-Interaktionsmenü öffnet und dann 'BEFEHLE(ZIVILISTEN)' auswählt. Oder in dem man Kurztasten nutzt. Diese können unter 'Konfigurieren' >> 'Steuerung' >> 'Modifikationen anpassen' >> Hearts and Minds: Mission' (Drop-Down-Menü) geändert werden.<br/><br/> Folgende Optionen stehen zur Verfügung:<br/> - STOPP!<br/> - AUF DEN BODEN!<br/> - GEH WEG!<br/><br/> Wenn Sie einen Befehl an eine bestimmte Person geben wollen, so können Sie auch direkt mir dieser Interagieren (ACE Objekt-Interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Sie können mithilfe einer Drohne Broschüren abwerfen, um die Zivilisten im Umkreis von ca. 200 m aufzufordern, sich in dem nächsten religiösen Gebäude einzufinden (sollte kein Gebäude vorhanden sein, so wird ein sicherer Bereich festgelegt).<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> - Qualquer jogador pode dar instruções a um civil.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para fazer isso, basta abrir o menu de interação do civil e selecionar a opção "ORDENS" ou usar tecla de atalho. Atalhos podem ser alterados no menu "CONFIGURAÇÃO" >> "CONTROLES" >> "CONFIGURAR COMPLEMENTOS (ADDONS)" >> Corações e Mentes: Missão (Menu suspenso).<br/><br/> As seguintes opções estão disponíveis: <br/> - PARE!<br/> - DEITADO!<br/> - VÁ EMBORA!<br/><br/> Se você quiser dar uma ordem para apenas uma unidade, interaja com ela (interação do objeto ACE).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Você pode usar um drone para soltar panfletos solicitando que civis, dentro de um raio de 200m, se abriguem em um prédio religioso mais próximo (se não houver prédio, uma área segura será definida).<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> - 玩家可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\A3\Data_F_Orange\Images\Leaflets_ca.paa' width='355' height='200'/> + Any player can give orders to civilians.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> To do this, just open your self interaction menu and select 'ORDERS' or use one of the shortcuts. Shortcuts can changed under 'configure' >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (drop down menu).<br/> Your options are:<br/> - STOP<br/> - GET DOWN<br/> - GO AWAY<br/><br/> If you want to give an order to just one unit, interact with it (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> You can also drop leaflets to ask all civilians in a circle of 200m to evacuate to a religious building (if not available a safe area) with a AR-2 drone.<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> + Cualquier jugador puede dar órdenes a civiles.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para ello, sólo tienes que abrir el menú de auto-interacción y seleccionar `ORDENES' o utilizar uno de los accesos directos. Los accesos directos pueden cambiarse en 'configuración'. >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (menu desplegable).<br/> Tus opciones son:<br/> - ALTO<br/> - AGACHATE<br/> - FUERA DE AQUI<br/><br/> Si quieres dar una orden a una sola unidad, interactúa con ella (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> También puede tirar panfletos para pedir a todos los civiles en un círculo de 200 metros que evacuen a un edificio religioso (si no está disponible un área segura) con un drone<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> + Jeder Spieler kann einem Zivlisten Anweisungen geben.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Dies geht recht einfach in dem man das Eigen-Interaktionsmenü öffnet und dann 'BEFEHLE(ZIVILISTEN)' auswählt. Oder in dem man Kurztasten nutzt. Diese können unter 'Konfigurieren' >> 'Steuerung' >> 'Modifikationen anpassen' >> Hearts and Minds: Mission' (Drop-Down-Menü) geändert werden.<br/><br/> Folgende Optionen stehen zur Verfügung:<br/> - STOPP!<br/> - AUF DEN BODEN!<br/> - GEH WEG!<br/><br/> Wenn Sie einen Befehl an eine bestimmte Person geben wollen, so können Sie auch direkt mir dieser Interagieren (ACE Objekt-Interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Sie können mithilfe einer Drohne Broschüren abwerfen, um die Zivilisten im Umkreis von ca. 200 m aufzufordern, sich in dem nächsten religiösen Gebäude einzufinden (sollte kein Gebäude vorhanden sein, so wird ein sicherer Bereich festgelegt).<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> + Qualquer jogador pode dar instruções a um civil.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para fazer isso, basta abrir o menu de interação do civil e selecionar a opção "ORDENS" ou usar tecla de atalho. Atalhos podem ser alterados no menu "CONFIGURAÇÃO" >> "CONTROLES" >> "CONFIGURAR COMPLEMENTOS (ADDONS)" >> Corações e Mentes: Missão (Menu suspenso).<br/><br/> As seguintes opções estão disponíveis: <br/> - PARE!<br/> - DEITADO!<br/> - VÁ EMBORA!<br/><br/> Se você quiser dar uma ordem para apenas uma unidade, interaja com ela (interação do objeto ACE).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Você pode usar um drone para soltar panfletos solicitando que civis, dentro de um raio de 200m, se abriguem em um prédio religioso mais próximo (se não houver prédio, uma área segura será definida).<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> + 玩家可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> From b92570b546a0a2587ae716685763179c1f6ca1e9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 30 Apr 2020 14:03:49 +0200 Subject: [PATCH 061/264] FIX createlocation --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf | 8 +------- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 8 ++++++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf index bc1d0bb25..d3f8d774c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf @@ -76,13 +76,7 @@ for "_id" from 0 to (count _locations - 1) do { }; if !(isNil "btc_custom_loc") then { - { - _x call btc_fnc_city_create; - - _x params ["_pos", "_cityType", "_cityName", "_sizeX", "_sizeY"]; - private _location = createLocation [_cityType, _pos, _sizeX, _sizeY]; - _location setText _cityName; - } forEach btc_custom_loc; + {_x call btc_fnc_city_create;} forEach btc_custom_loc; }; btc_city_all = btc_city_all apply {if (isNil "_x") then {objNull} else {_x}}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 1fdab13a4..53e471f4a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,5 +1,13 @@ [] call compile preprocessFileLineNumbers "core\doc.sqf"; +if !(isNil "btc_custom_loc") then { + { + _x params ["_pos", "_cityType", "_cityName", "_sizeX", "_sizeY"]; + private _location = createLocation [_cityType, _pos, _sizeX, _sizeY]; + _location setText _cityName; + } forEach btc_custom_loc; +}; + [{!isNull player}, { player addRating 9999; From 332e6957062a70a8b82ee5442da23722bd97929e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 1 May 2020 00:42:36 +0200 Subject: [PATCH 062/264] FIX map illumination on BI respawn map --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 4 ++++ =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 1 + 2 files changed, 5 insertions(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 4b2c87daf..81eb74bf7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -25,11 +25,15 @@ params [ ["_player", objNull, [objNull]] ]; +[_player, "Respawn", { + if !(ace_map_mapIllumination) then {ace_map_mapIllumination = btc_map_mapIllumination;}; +}] call CBA_fnc_addBISEventHandler; [_player, "Respawn", { player removeEventHandler [_thisType, _thisID]; [] spawn btc_fnc_intro; }] call CBA_fnc_addBISEventHandler; _player addEventHandler ["Killed", { + if (ace_map_mapIllumination) then {ace_map_mapIllumination = false;}; if (isObjectHidden player) exitWith {}; btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]; }]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 5047d4df1..acee3e867 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,4 +1,5 @@ [] call compile preprocessFileLineNumbers "core\doc.sqf"; +btc_map_mapIllumination = ace_map_mapIllumination; [{!isNull player}, { btc_respawn_marker setMarkerPosLocal player; From d1b02ccdc30af0986493eecfa88261a4ef6d4c9c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 1 May 2020 19:12:21 +0200 Subject: [PATCH 063/264] Restor previous behavior --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 4 ---- .../core/fnc/int/add_actions.sqf | 7 ++++++- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 4 ++-- =BTC=co@30_Hearts_and_Minds.Altis/description.ext | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 81eb74bf7..70e2e8967 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -28,10 +28,6 @@ params [ [_player, "Respawn", { if !(ace_map_mapIllumination) then {ace_map_mapIllumination = btc_map_mapIllumination;}; }] call CBA_fnc_addBISEventHandler; -[_player, "Respawn", { - player removeEventHandler [_thisType, _thisID]; - [] spawn btc_fnc_intro; -}] call CBA_fnc_addBISEventHandler; _player addEventHandler ["Killed", { if (ace_map_mapIllumination) then {ace_map_mapIllumination = false;}; if (isObjectHidden player) exitWith {}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index bf24a6a53..f1e3c27dd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,7 +127,12 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {["initRespawn",[player,objnull]] call bis_fnc_selectRespawnTemplate;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { + player setPos [10,10,10]; + player hideObject true; + player enableSimulation false; + forceRespawn player; +}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index acee3e867..6c7fc019e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,5 +1,7 @@ [] call compile preprocessFileLineNumbers "core\doc.sqf"; btc_map_mapIllumination = ace_map_mapIllumination; +endLoadingScreen; +[] spawn btc_fnc_intro; [{!isNull player}, { btc_respawn_marker setMarkerPosLocal player; @@ -29,8 +31,6 @@ btc_map_mapIllumination = ace_map_mapIllumination; default { }; }; - - endLoadingScreen; }] call CBA_fnc_waitUntilAndExecute; if (btc_debug) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/description.ext b/=BTC=co@30_Hearts_and_Minds.Altis/description.ext index 1cfd1135c..bf22ba339 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/description.ext +++ b/=BTC=co@30_Hearts_and_Minds.Altis/description.ext @@ -52,7 +52,7 @@ class Extended_InitPost_EventHandlers { respawn = "BASE"; respawnDelay = 2; respawnDialog = 0; -respawnOnStart = 1; +respawnOnStart = 0; respawnTemplates[] = {"MenuPosition"}; // Disable BI wreck system (H&M handle it internally) From 0be3dd7a3398e643e1e49d3d167a4f621be31ddb Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 2 May 2020 11:59:20 +0200 Subject: [PATCH 064/264] Add min range for hideout Hideout should not overlap --- .../core/def/mission.sqf | 1 + .../core/fnc/mil/create_hideout.sqf | 48 +++++++++++++------ 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 7cb4779e7..e1be8f030 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -138,6 +138,7 @@ if (isServer) then { btc_hideout_rinf_time = 600; btc_hideout_cap_time = 1800; btc_hideout_cap_checking = false; + btc_hideout_minRange = btc_hideout_range; //IED btc_ied_suic_time = 900; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf index 1faff02d9..1cf6ce572 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf @@ -3,21 +3,27 @@ Function: btc_fnc_mil_create_hideout Description: - Fill me when you edit me ! + Create hideout randomnly or with defined position. Parameters: - _pos - [Array] - _id_hideout - [Number] - _rinf_time - [Number] - _cap_time - [Number] - _id - [Number] - _markers_saved - [Array] + _pos - Poisition of the hideout. [Array] + _id_hideout - Id of the hideout. [Number] + _rinf_time - Not used. [Number] + _cap_time - Time for next capture of city around. [Number] + _id - Id of the city where the hideout is. [Number] + _markers_saved - Merkers find by player. [Array] Returns: Examples: (begin example) - _result = [] call btc_fnc_mil_create_hideout; + [] call btc_fnc_mil_create_hideout; + (end) + (begin example) + selectMin (btc_hideouts apply { + private _ho = _x; + selectMin ((btc_hideouts - [_ho]) apply {_x distance _ho}) + }) (end) Author: @@ -37,13 +43,25 @@ params [ private _city = objNull; if (_pos isEqualTo []) then { private _useful = btc_city_all select {( - !(isNull _x) && - {!(_x getVariable ["active", false])} && - {_x distance (getMarkerPos btc_respawn_marker) > btc_hideout_safezone} && - {!(_x getVariable ["has_ho", false])} && - {_x getVariable ["type", ""] in ["NameLocal", "Hill", "NameVillage", "Airport"]} - )}; - _city = selectRandom _useful; + !(isNull _x) && + {!(_x getVariable ["active", false])} && + {_x distance (getMarkerPos btc_respawn_marker) > btc_hideout_safezone} && + {!(_x getVariable ["has_ho", false])} && + {_x getVariable ["type", ""] in ["NameLocal", "Hill", "NameVillage", "Airport"]} + )}; + private _inHoRange = btc_city_all select { + !(isNull _x) && + { + private _city = _x; + (selectMin (btc_hideouts apply {_x distance _city})) < btc_hideout_minRange + } + }; + private _usefulRange = _useful - _inHoRange; + if (_usefulRange isEqualTo []) then { + _city = selectRandom _useful; + } else { + _city = selectRandom _usefulRange; + }; private _radius = ((_city getVariable ["RadiusX", 0]) + (_city getVariable ["RadiusY", 0]))/2; private _random_pos = [getPos _city, _radius] call btc_fnc_randomize_pos; From ec172950f3edb19f83e35e5d22d136d94e431925 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 3 May 2020 17:19:04 +0200 Subject: [PATCH 065/264] Improve feedback --- .../core/fnc/compile.sqf | 1 - .../core/fnc/eh/player.sqf | 2 ++ .../core/fnc/eh/veh_init.sqf | 12 +++---- .../core/fnc/tow/check.sqf | 22 ++++-------- .../core/fnc/tow/hook.sqf | 34 ------------------- .../core/fnc/tow/ropeCreate.sqf | 26 ++++++++++++-- .../core/fnc/tow/unwind.sqf | 6 ++-- .../stringtable.xml | 2 +- 8 files changed, 42 insertions(+), 63 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/hook.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 06c0f2d43..716dab33b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -239,7 +239,6 @@ btc_fnc_rep_hd = compile preprocessFileLineNumbers "core\fnc\rep\hd.sqf"; btc_fnc_rep_killed = compile preprocessFileLineNumbers "core\fnc\rep\killed.sqf"; //TOW -btc_fnc_tow_hook = compile preprocessFileLineNumbers "core\fnc\tow\hook.sqf"; btc_fnc_tow_check = compile preprocessFileLineNumbers "core\fnc\tow\check.sqf"; //ARSENAL diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index e065d1e9d..41c694b28 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -77,3 +77,5 @@ if (btc_p_spect) then { [_unit, currentWeapon _unit] call btc_fnc_spect_updateDevice; }] call CBA_fnc_addPlayerEventHandler; }; + +["btc_tow_unwindDone", {"Towing done." call CBA_fnc_notify}] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index c085931b4..53c62a277 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -32,21 +32,21 @@ switch true do { case (_type isKindOf "StaticWeapon") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_log_vehicle_selected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; }; case (_type isKindOf "LandVehicle") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_log_vehicle_selected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; }; case (_type isKindOf "Helicopter") : { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index aa0313715..cac8b7ce5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -6,14 +6,15 @@ Description: _tower ----rope--- (hook)_towed Parameters: - _tower - [Object] - _towed - [Object] + _tower - Tower vehicle. [Object] + _towed - Tower vehicle. [Object] Returns: + _canTow - . [Array] Examples: (begin example) - _result = [] call btc_fnc_tow_check; + _canTow = [cursorObject, btc_log_vehicle_selected] call btc_fnc_tow_check; (end) Author: @@ -28,21 +29,10 @@ params [ private _array = [_tower] call btc_fnc_log_get_nottowable; -if ((_array findIf {_towed isKindOf _x}) != -1) exitWith {false}; +if ((_array findIf {_towed isKindOf _x}) != -1) exitWith {[false, false]}; private _model_rear = ([_tower] call btc_fnc_tow_hitch_points) select 1; private _model_front = ([_towed] call btc_fnc_tow_hitch_points) select 0; private _distance = (_towed modeltoworld _model_front) distance (_tower modeltoworld _model_rear); -if (btc_debug) then { - if (isNil "btc_arrow_1") then { - btc_arrow_1 = "Sign_Arrow_F" createVehicleLocal [0, 0, 0]; - btc_arrow_2 = "Sign_Arrow_F" createVehicleLocal [0, 0, 0]; - }; - btc_arrow_1 setPosASL AGLtoASL (_tower modelToWorldVisual _model_rear); - btc_arrow_2 setPosASL AGLtoASL (_towed modelToWorldVisual _model_front); -}; - -private _can_tow = (_distance > 1.3) && (_distance < 5); - -_can_tow +[_distance > 1.3, _distance < 5] diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/hook.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/hook.sqf deleted file mode 100644 index 7d2bb5cc2..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/hook.sqf +++ /dev/null @@ -1,34 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_tow_hook - -Description: - Save the vehicle selected. - -Parameters: - _towed - Vehicle will be towed. [Object] - -Returns: - -Examples: - (begin example) - [cursorObject] call btc_fnc_tow_hook; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_towed", objNull, [objNull]] -]; - -btc_log_vehicle_selected = _towed; - -private _string_array = ""; -{ - _string_array = _string_array + ", " + _x; -} forEach (([_towed] call btc_fnc_log_get_nottowable) - ["Truck_F"]); - -(format [localize "STR_BTC_HAM_LOG_HOOK_HINFO", _string_array]) call CBA_fnc_notify; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index af075d553..9fa07c86e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -25,6 +25,26 @@ params [ ["_tower", objNull, [objNull]] ]; +private _distanceCheck = [_tower, btc_log_vehicle_selected] call btc_fnc_tow_check; +if (false in _distanceCheck) exitWith { + switch (_distanceCheck) do { + case [true, false]: { + "too far" call CBA_fnc_notify; + }; + case [false,true]: { + "too close" call CBA_fnc_notify; + }; + default { + private _string_array = ""; + { + _string_array = _string_array + ", " + _x; + } forEach (([_tower] call btc_fnc_log_get_nottowable) - ["Truck_F"]); + + (format [localize "STR_BTC_HAM_LOG_HOOK_HINFO", _string_array]) call CBA_fnc_notify; + }; + }; +}; + private _towing = _tower getVariable ["btc_towing", objNull]; if ( !((isVehicleCargo btc_log_vehicle_selected) isEqualTo objNull) || @@ -32,6 +52,8 @@ if ( ) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; if (_tower setVehicleCargo btc_log_vehicle_selected) exitWith {}; +"Towing in progress, please wait..." call CBA_fnc_notify; + private _flat = createVehicle ["Truck_01_Rack_F", getPosATL btc_log_vehicle_selected, [], 0, "CAN_COLLIDE"]; _flat setDir getDir btc_log_vehicle_selected; //_flat setObjectTextureGlobal [0, ""]; @@ -44,8 +66,8 @@ private _model_flat = (0 boundingBoxReal _flat) select 1; private _attachTo = [0, (_model_flat select 1) - (_model_selected select 1), (_model_selected select 2) - (_model_flat select 2) + 0.2]; btc_log_vehicle_selected attachTo [_flat, _attachTo]; -private _rope1 = ropeCreate [_tower, (_model_corners_tower select 0) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 2) vectorAdd [0.2, 0.05, 0.6]]; -private _rope2 = ropeCreate [_tower, (_model_corners_tower select 1) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 3) vectorAdd [-0.2, 0.05, 0.6]]; +private _rope1 = ropeCreate [_tower, (_model_corners_tower select 0) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 2) vectorAdd [0, 0.05, 0.6]]; +private _rope2 = ropeCreate [_tower, (_model_corners_tower select 1) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]]; private _shortRope = [_rope1, _rope2] select (ropeLength _rope1 > ropeLength _rope2); ropeUnwind [_shortRope, 2, ropeLength _rope1 max ropeLength _rope2, false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf index 3e55f3a4c..1345d4130 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf @@ -29,12 +29,12 @@ Author: private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; if (0.5 in ([_rope1, _rope2] apply {ropeLength _x})) exitWith {}; - if (_actualPitch - _initialPitch > 3) exitWith { + if (_actualPitch - _initialPitch > 4) exitWith { [{ params ["_flat", "_rope1", "_rope2", "_initialPitch"]; private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; - _actualPitch - _initialPitch < 3 + _actualPitch - _initialPitch < 4 }, { _this call btc_fnc_tow_unwind; }, _this, 1, { @@ -45,4 +45,4 @@ Author: ropeUnwind [_rope1, 0.2, -0.02, true]; ropeUnwind [_rope2, 0.2, -0.02, true]; _this call btc_fnc_tow_unwind; -}, _this] call CBA_fnc_waitUntilAndExecute; \ No newline at end of file +}, _this] call CBA_fnc_waitUntilAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index c7d2960f7..1e7810468 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1915,7 +1915,7 @@ - Interact with a vehicle to tow it!<br/>(This vehicle can't tow %1) + Can't tow!<br/>(This vehicle can't tow %1) Interactúe con un vehículo para remolcarlo!<br/>(Este vehículo no puede remolcar %1) Interagieren Sie mit dem Zug-Fahrzeug, um es abzuschleppen!<br/>(Folgende Fahrzeuge können nicht gezogen werden: %1) Interaja com o veículo para rebocá-lo!<br/>(Este veículo não pode rebocar %1) From 806a9bdc2d840bc6cacb204ab29119a2bae9f6e8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 3 May 2020 19:11:07 +0200 Subject: [PATCH 066/264] FIX collision --- .../core/fnc/log/get_corner_points.sqf | 71 +++++++++++++++++-- .../core/fnc/tow/ropeCreate.sqf | 38 +++++----- .../core/fnc/tow/unwind.sqf | 4 +- 3 files changed, 91 insertions(+), 22 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf index fc897da97..ae56a6a6d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/get_corner_points.sqf @@ -12,7 +12,7 @@ Returns: Examples: (begin example) - _result = [] call btc_fnc_log_get_corner_points; + _result = [cursorObject] call btc_fnc_log_get_corner_points; (end) Author: @@ -36,14 +36,77 @@ if (_vehicle isKindOf "Helicopter") then { }; (getCenterOfMass _vehicle) params ["_centerOfMass_x", "_centerOfMass_y", "_centerOfMass_z"]; -(0 boundingBoxReal _vehicle) params ["_p1", "_p2"]; +(boundingBoxReal _vehicle) params ["_p1", "_p2"]; ([0, 1] apply {abs ((_p2 select _x) - (_p1 select _x))}) params ["_maxWidth", "_maxLength"]; +(0 boundingBoxReal _vehicle) params ["_p1", "_p2"]; private _widthOffset = ((_maxWidth / 2) - abs _centerOfMass_x) * _widthFactor; private _lengthOffset = ((_maxLength / 2) - abs _centerOfMass_y) * _lengthFactor; -private _rearCorner = [_centerOfMass_x + _widthOffset, _centerOfMass_y - _lengthOffset, _centerOfMass_z]; -private _rearCorner2 = [_centerOfMass_x - _widthOffset, _centerOfMass_y - _lengthOffset, _centerOfMass_z]; +private _rearCorner = [_centerOfMass_x + _widthOffset, _p1 select 1, _centerOfMass_z]; +private _rearCorner2 = [_centerOfMass_x - _widthOffset, _p1 select 1, _centerOfMass_z]; private _frontCorner = [_centerOfMass_x + _widthOffset, _centerOfMass_y + _lengthOffset, _centerOfMass_z]; private _frontCorner2 = [_centerOfMass_x - _widthOffset, _centerOfMass_y + _lengthOffset, _centerOfMass_z]; +if (btc_debug) then { + _vehicle call { + private ["_obj","_bb","_bbx","_bby","_bbz","_arr","_y","_z"]; + _obj = _this; + _bb = { + _bbx = [_this select 0 select 0, _this select 1 select 0]; + _bby = [_this select 0 select 1, _this select 1 select 1]; + _bbz = [_this select 0 select 2, _this select 1 select 2]; + _arr = []; + 0 = { + _y = _x; + 0 = { + _z = _x; + 0 = { + 0 = _arr pushBack (_obj modelToWorld [_x,_y,_z]); + } count _bbx; + } count _bbz; + reverse _bbz; + } count _bby; + _arr pushBack (_arr select 0); + _arr pushBack (_arr select 1); + _arr + }; + bbox = 0 boundingBoxReal _obj call _bb; + bboxr = [_rearCorner, _frontCorner2] call _bb; + addMissionEventHandler ["Draw3D", { + for "_i" from 0 to 7 step 2 do { + drawLine3D [ + bbox select _i, + bbox select (_i + 2), + [0,0,1,1] + ]; + drawLine3D [ + bboxr select _i, + bboxr select (_i + 2), + [0,1,0,1] + ]; + drawLine3D [ + bbox select (_i + 2), + bbox select (_i + 3), + [0,0,1,1] + ]; + drawLine3D [ + bboxr select (_i + 2), + bboxr select (_i + 3), + [0,1,0,1] + ]; + drawLine3D [ + bbox select (_i + 3), + bbox select (_i + 1), + [0,0,1,1] + ]; + drawLine3D [ + bboxr select (_i + 3), + bboxr select (_i + 1), + [0,1,0,1] + ]; + }; + }]; + }; +}; + [_rearCorner, _rearCorner2, _frontCorner, _frontCorner2]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 9fa07c86e..e00f67a2e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -22,10 +22,11 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_tower", objNull, [objNull]] + ["_tower", objNull, [objNull]], + ["_vehicle_selected", btc_log_vehicle_selected, [objNull]] ]; -private _distanceCheck = [_tower, btc_log_vehicle_selected] call btc_fnc_tow_check; +private _distanceCheck = [_tower, _vehicle_selected] call btc_fnc_tow_check; if (false in _distanceCheck) exitWith { switch (_distanceCheck) do { case [true, false]: { @@ -47,32 +48,37 @@ if (false in _distanceCheck) exitWith { private _towing = _tower getVariable ["btc_towing", objNull]; if ( - !((isVehicleCargo btc_log_vehicle_selected) isEqualTo objNull) || + !((isVehicleCargo _vehicle_selected) isEqualTo objNull) || !isNull _towing ) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; -if (_tower setVehicleCargo btc_log_vehicle_selected) exitWith {}; +if (_tower setVehicleCargo _vehicle_selected) exitWith {}; "Towing in progress, please wait..." call CBA_fnc_notify; -private _flat = createVehicle ["Truck_01_Rack_F", getPosATL btc_log_vehicle_selected, [], 0, "CAN_COLLIDE"]; -_flat setDir getDir btc_log_vehicle_selected; -//_flat setObjectTextureGlobal [0, ""]; -//_flat setObjectTextureGlobal [1, ""]; +private _vectorUp = vectorUp _vehicle_selected; +private _dirSelected = getDir _vehicle_selected; +private _model_selected = (0 boundingBoxReal _vehicle_selected) select 1; +private _model_front_selected = ([_vehicle_selected] call btc_fnc_log_get_corner_points) select 2; +private _posFlat = _vehicle_selected getPos [(_model_front_selected select 1) - (_model_selected select 1), _dirSelected]; +_posFlat set [2, (getPosATL _vehicle_selected) select 2]; + +private _flat = createVehicle ["Truck_01_Rack_F", _posFlat, [], 0, "CAN_COLLIDE"]; +_flat setDir _dirSelected; +_flat setVectorUp _vectorUp; private _model_corners_tower = [_tower] call btc_fnc_log_get_corner_points; private _model_corners_flat = [_flat] call btc_fnc_log_get_corner_points; -private _model_selected = (0 boundingBoxReal btc_log_vehicle_selected) select 1; private _model_flat = (0 boundingBoxReal _flat) select 1; -private _attachTo = [0, (_model_flat select 1) - (_model_selected select 1), (_model_selected select 2) - (_model_flat select 2) + 0.2]; +private _attachTo = [0, (_model_flat select 1) - (_model_selected select 1), (_model_selected select 2) - (_model_flat select 2)]; -btc_log_vehicle_selected attachTo [_flat, _attachTo]; -private _rope1 = ropeCreate [_tower, (_model_corners_tower select 0) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 2) vectorAdd [0, 0.05, 0.6]]; -private _rope2 = ropeCreate [_tower, (_model_corners_tower select 1) vectorAdd [0, -2, 2], _flat, (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]]; +_vehicle_selected attachTo [_flat, _attachTo]; +private _rope1 = ropeCreate [_tower, (_model_corners_tower select 0) vectorAdd [0, -1, 2], _flat, (_model_corners_flat select 2) vectorAdd [0, 0.05, 0.6]]; +private _rope2 = ropeCreate [_tower, (_model_corners_tower select 1) vectorAdd [0, -1, 2], _flat, (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]]; private _shortRope = [_rope1, _rope2] select (ropeLength _rope1 > ropeLength _rope2); ropeUnwind [_shortRope, 2, ropeLength _rope1 max ropeLength _rope2, false]; -_tower setVariable ["btc_towing", btc_log_vehicle_selected, true]; -btc_log_vehicle_selected setVariable ["btc_towing", _tower, true]; +_tower setVariable ["btc_towing", _vehicle_selected, true]; +_vehicle_selected setVariable ["btc_towing", _tower, true]; [_tower, "RopeBreak", { params ["_tower", "_rope", "_flat"]; @@ -86,7 +92,7 @@ btc_log_vehicle_selected setVariable ["btc_towing", _tower, true]; _vehicle_selected setVariable ["btc_towing", objNull, true]; _tower setVariable ["btc_towing", objNull, true]; -}, [btc_log_vehicle_selected]] call CBA_fnc_addBISEventHandler; +}, [_vehicle_selected]] call CBA_fnc_addBISEventHandler; [{ params ["_flat", "_rope1", "_rope2"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf index 1345d4130..b2639f61f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf @@ -29,12 +29,12 @@ Author: private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; if (0.5 in ([_rope1, _rope2] apply {ropeLength _x})) exitWith {}; - if (_actualPitch - _initialPitch > 4) exitWith { + if (_actualPitch - _initialPitch > 3) exitWith { [{ params ["_flat", "_rope1", "_rope2", "_initialPitch"]; private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; - _actualPitch - _initialPitch < 4 + _actualPitch - _initialPitch < 3 }, { _this call btc_fnc_tow_unwind; }, _this, 1, { From 2886e0850f2825c80a393dee7335a24b91bea1cc Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 4 May 2020 16:12:31 +0200 Subject: [PATCH 067/264] FIX: Tilting --- .../core/def/mission.sqf | 2 +- .../core/fnc/eh/veh_init.sqf | 8 ++-- .../core/fnc/tow/check.sqf | 2 +- .../core/fnc/tow/ropeCreate.sqf | 43 +++++++++++++++---- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index b7727dea3..ed08d1253 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -472,7 +472,7 @@ btc_log_def_can_load = (_c_array select 3); btc_log_def_placeable = ((_c_array select 0) + (_c_array select 3) + (_c_array select 4) + (_c_array select 5) + (_c_array select 6) + _food + _water + btc_type_hazmat) select { getNumber(_cfgVehicles >> _x >> "ace_dragging_canCarry") isEqualTo 0 }; -btc_log_vehicle_selected = objNull; +btc_tow_vehicleSelected = objNull; btc_log_placing_max_h = 12; btc_log_placing = false; btc_log_obj_created = []; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index 53c62a277..25e88328f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -32,9 +32,9 @@ switch true do { case (_type isKindOf "StaticWeapon") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_log_vehicle_selected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; @@ -42,9 +42,9 @@ switch true do { case (_type isKindOf "LandVehicle") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_log_vehicle_selected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index cac8b7ce5..d67a8aac7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -14,7 +14,7 @@ Returns: Examples: (begin example) - _canTow = [cursorObject, btc_log_vehicle_selected] call btc_fnc_tow_check; + _canTow = [cursorObject, btc_tow_vehicleSelected] call btc_fnc_tow_check; (end) Author: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index e00f67a2e..89b469184 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -23,7 +23,7 @@ Author: params [ ["_tower", objNull, [objNull]], - ["_vehicle_selected", btc_log_vehicle_selected, [objNull]] + ["_vehicle_selected", btc_tow_vehicleSelected, [objNull]] ]; private _distanceCheck = [_tower, _vehicle_selected] call btc_fnc_tow_check; @@ -55,14 +55,22 @@ if (_tower setVehicleCargo _vehicle_selected) exitWith {}; "Towing in progress, please wait..." call CBA_fnc_notify; +// Find the position of the Flat object private _vectorUp = vectorUp _vehicle_selected; private _dirSelected = getDir _vehicle_selected; private _model_selected = (0 boundingBoxReal _vehicle_selected) select 1; private _model_front_selected = ([_vehicle_selected] call btc_fnc_log_get_corner_points) select 2; -private _posFlat = _vehicle_selected getPos [(_model_front_selected select 1) - (_model_selected select 1), _dirSelected]; +private _offset = if (_model_selected select 1 > 3.06) then { + (_model_selected select 1) - 3.06 +} else { + (_model_front_selected select 1) - (_model_selected select 1) +}; +private _posFlat = _vehicle_selected getPos [_offset, _dirSelected]; _posFlat set [2, (getPosATL _vehicle_selected) select 2]; -private _flat = createVehicle ["Truck_01_Rack_F", _posFlat, [], 0, "CAN_COLLIDE"]; +private _flat = createVehicle [ + ["Truck_01_Rack_F", "Truck_01_Rack_tropic_F"] select (worldName in ["Tanoa", "lingor3", "chernarus", "Enoch", "sara"]), +_posFlat, [], 0, "CAN_COLLIDE"]; _flat setDir _dirSelected; _flat setVectorUp _vectorUp; @@ -72,8 +80,14 @@ private _model_flat = (0 boundingBoxReal _flat) select 1; private _attachTo = [0, (_model_flat select 1) - (_model_selected select 1), (_model_selected select 2) - (_model_flat select 2)]; _vehicle_selected attachTo [_flat, _attachTo]; -private _rope1 = ropeCreate [_tower, (_model_corners_tower select 0) vectorAdd [0, -1, 2], _flat, (_model_corners_flat select 2) vectorAdd [0, 0.05, 0.6]]; -private _rope2 = ropeCreate [_tower, (_model_corners_tower select 1) vectorAdd [0, -1, 2], _flat, (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]]; + +private _ropeTowerRelPos1 = (_model_corners_tower select 0) vectorAdd [0, -1, 2]; +private _ropeTowerRelPos2 = (_model_corners_tower select 1) vectorAdd [0, -1, 2]; +private _ropeFlatRelPos1 = (_model_corners_flat select 2) vectorAdd [0, 0.05, 0.6]; +private _ropeFlatRelPos2 = (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]; + +private _rope1 = ropeCreate [_tower, _ropeTowerRelPos1, _flat, _ropeFlatRelPos1, (_tower modelToWorld _ropeTowerRelPos1) distance (_flat modelToWorld _ropeFlatRelPos1)]; +private _rope2 = ropeCreate [_tower, _ropeTowerRelPos2, _flat, _ropeFlatRelPos2, (_tower modelToWorld _ropeTowerRelPos2) distance (_flat modelToWorld _ropeFlatRelPos2)]; private _shortRope = [_rope1, _rope2] select (ropeLength _rope1 > ropeLength _rope2); ropeUnwind [_shortRope, 2, ropeLength _rope1 max ropeLength _rope2, false]; @@ -82,17 +96,28 @@ _vehicle_selected setVariable ["btc_towing", _tower, true]; [_tower, "RopeBreak", { params ["_tower", "_rope", "_flat"]; - _thisArgs params ["_vehicle_selected"]; + _thisArgs params ["_vehicle_selected", "_safeDistance"]; _tower removeEventHandler ["RopeBreak", _thisId]; - deleteVehicle _flat; deTach _vehicle_selected; + + // Handle flipped vehicle + if ((vectorUp _vehicle_selected) select 2 < 0) then { + _flat setPos [0, 0, 0]; // Avoid collision with _vehicle_selected + private _towerDir = getDir _tower; + private _selectedSafePos = _tower getPos [- _safeDistance, _towerDir]; + _selectedSafePos set [2, 0.5 + (_selectedSafePos select 2)]; + _vehicle_selected setPos _selectedSafePos; + _vehicle_selected setDir _towerDir; + }; _vehicle_selected setVectorUp surfaceNormal position _vehicle_selected; + deleteVehicle _flat; + _vehicle_selected setVariable ["btc_towing", objNull, true]; _tower setVariable ["btc_towing", objNull, true]; -}, [_vehicle_selected]] call CBA_fnc_addBISEventHandler; +}, [_vehicle_selected, 2 + (_model_selected select 1) - (_model_corners_tower select 0 select 1)]] call CBA_fnc_addBISEventHandler; [{ params ["_flat", "_rope1", "_rope2"]; @@ -102,4 +127,4 @@ _vehicle_selected setVariable ["btc_towing", _tower, true]; ] call btc_fnc_tow_unwind; }, [_flat, _rope1, _rope2], 2] call CBA_fnc_waitAndExecute; -btc_log_vehicle_selected = objNull; +btc_tow_vehicleSelected = objNull; From 82985938ae21307fa7ece5b8f7e2655db10dbf88 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 4 May 2020 16:39:18 +0200 Subject: [PATCH 068/264] Refactor btc_fnc_tow_check --- .../core/fnc/tow/check.sqf | 34 ++++++++++++++++--- .../core/fnc/tow/ropeCreate.sqf | 26 +------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index d67a8aac7..fb3a7b1d1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -10,7 +10,7 @@ Parameters: _towed - Tower vehicle. [Object] Returns: - _canTow - . [Array] + _canTow - Can tow or not. [Boolean] Examples: (begin example) @@ -29,10 +29,36 @@ params [ private _array = [_tower] call btc_fnc_log_get_nottowable; -if ((_array findIf {_towed isKindOf _x}) != -1) exitWith {[false, false]}; +if ((_array findIf {_towed isKindOf _x}) != -1) exitWith { + private _string_array = ""; + { + _string_array = _string_array + ", " + _x; + } forEach (([_tower] call btc_fnc_log_get_nottowable) - ["Truck_F"]); + + (format [localize "STR_BTC_HAM_LOG_HOOK_HINFO", _string_array]) call CBA_fnc_notify; + false +}; private _model_rear = ([_tower] call btc_fnc_tow_hitch_points) select 1; private _model_front = ([_towed] call btc_fnc_tow_hitch_points) select 0; -private _distance = (_towed modeltoworld _model_front) distance (_tower modeltoworld _model_rear); +private _distance = (_towed modelToWorld _model_front) distance (_tower modelToWorld _model_rear); + +private _safeDistance = [_distance > 1.3, _distance < 5]; +if (_safeDistance isEqualTo [true, false]) exitWith { + "too far" call CBA_fnc_notify; + false +}; +if (_safeDistance isEqualTo [false, true]) exitWith { + "too close" call CBA_fnc_notify; + false +}; + +if ( + !((isVehicleCargo _towed) isEqualTo objNull) || + !isNull (_tower getVariable ["btc_towing", objNull]) +) exitWith { + (localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify; + false +}; -[_distance > 1.3, _distance < 5] +true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 89b469184..d29ecb8b0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -26,31 +26,7 @@ params [ ["_vehicle_selected", btc_tow_vehicleSelected, [objNull]] ]; -private _distanceCheck = [_tower, _vehicle_selected] call btc_fnc_tow_check; -if (false in _distanceCheck) exitWith { - switch (_distanceCheck) do { - case [true, false]: { - "too far" call CBA_fnc_notify; - }; - case [false,true]: { - "too close" call CBA_fnc_notify; - }; - default { - private _string_array = ""; - { - _string_array = _string_array + ", " + _x; - } forEach (([_tower] call btc_fnc_log_get_nottowable) - ["Truck_F"]); - - (format [localize "STR_BTC_HAM_LOG_HOOK_HINFO", _string_array]) call CBA_fnc_notify; - }; - }; -}; - -private _towing = _tower getVariable ["btc_towing", objNull]; -if ( - !((isVehicleCargo _vehicle_selected) isEqualTo objNull) || - !isNull _towing -) exitWith {(localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify;}; +if !([_tower, _vehicle_selected] call btc_fnc_tow_check) exitWith {}; if (_tower setVehicleCargo _vehicle_selected) exitWith {}; "Towing in progress, please wait..." call CBA_fnc_notify; From d511bfc6035766a85a82d4970e51747986e37a03 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 4 May 2020 23:51:21 +0200 Subject: [PATCH 069/264] Add Hunter weapon to civilian --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 5 ++++- .../core/fnc/civ/add_weapons.sqf | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 64bb6f19a..d25b07b1e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -333,7 +333,10 @@ _allclasse = [[_p_civ_veh]] call btc_fnc_civ_class; btc_civ_type_veh = _allclasse select 2; btc_civ_type_boats = _allclasse select 1; -btc_w_civs = ["V_Rangemaster_belt", "arifle_Mk20_F", "30Rnd_556x45_Stanag", "hgun_ACPC2_F", "9Rnd_45ACP_Mag"]; +btc_w_civs = [ + ["srifle_DMR_06_hunter_F", "sgun_HunterShotgun_01_F", "srifle_DMR_06_hunter_khs_F", "sgun_HunterShotgun_01_Sawedoff_F", "Hgun_PDW2000_F", "arifle_AKM_F", "arifle_AKS_F"], + ["hgun_Pistol_heavy_02_F", "hgun_Rook40_F", "hgun_Pistol_01_F"] +]; btc_g_civs = ["HandGrenade", "MiniGrenade", "ACE_M84", "ACE_M84"]; //FOB diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_weapons.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_weapons.sqf index 3d2200274..8dfbc84d9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_weapons.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_weapons.sqf @@ -25,11 +25,11 @@ params [ ]; private _playableUnits = playableUnits inAreaArray [getPosWorld _unit, 50, 50]; -_hgun = _playableUnits findIf {[_x, _unit] call btc_fnc_check_los} != -1; +private _hgun = _playableUnits findIf {[_x, _unit] call btc_fnc_check_los} != -1; -private _weapon = [btc_w_civs select 1, btc_w_civs select 3] select _hgun; -private _magazine = [btc_w_civs select 2, btc_w_civs select 4] select _hgun; +private _weapon = selectRandom ([btc_w_civs select 0, btc_w_civs select 1] select _hgun); +private _magazine = (getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines")) select 0; -(uniformContainer _unit) addMagazineCargo [_magazine, 10]; +(uniformContainer _unit) addMagazineCargo [_magazine, 5]; _unit addWeapon _weapon; _unit selectWeapon _weapon; From 649220d4e12486bb1fa95a1f276202c463254424 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 5 May 2020 16:25:42 +0200 Subject: [PATCH 070/264] FIX delay vehicle creation --- .../core/fnc/civ/create_patrol.sqf | 4 ++-- .../core/fnc/data/spawn_group.sqf | 5 +++-- .../core/fnc/delay/createUnit.sqf | 14 ++++++++------ .../core/fnc/delay/createVehicle.sqf | 9 ++++----- .../core/fnc/mil/createVehicle.sqf | 12 +++++++++++- .../core/fnc/mil/create_patrol.sqf | 9 +++++---- .../core/fnc/mil/send.sqf | 8 +++++--- .../core/fnc/side/capture_officer.sqf | 5 +++-- .../core/fnc/side/convoy.sqf | 5 +++-- 9 files changed, 44 insertions(+), 27 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index 2892ca48b..bd62b9429 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -63,7 +63,7 @@ _group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_civilian_id, btc_debug]; btc_civilian_id = btc_civilian_id - 1; -[_group, _veh_type, [selectRandom btc_civ_type_units], _safe_pos, { +private _delay = [_group, _veh_type, [selectRandom btc_civ_type_units], _safe_pos, { params ["_veh", "_group"]; _veh setVariable ["btc_crews", _group]; [_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; @@ -76,6 +76,6 @@ btc_civilian_id = btc_civilian_id - 1; [_this select 0] call btc_fnc_civ_unit_create; _this call btc_fnc_patrol_init; [[_this select 0]] call btc_fnc_set_groupsOwner; -}, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 8aec688e3..4963b97ad 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -57,8 +57,9 @@ if (_type isEqualTo 7) exitWith { }; private _group = createGroup _side; +private _delay = 0; if (_type isEqualTo 1) then { - [_group, _array_veh select 0, _array_type, _array_veh select 1, {}, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; + _delay = [_group, _array_veh select 0, _array_type, _array_veh select 1, {}, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; } else { for "_i" from 0 to (count _array_pos - 1) do { [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; @@ -108,4 +109,4 @@ if (_type isEqualTo 1) then { if (_side isEqualTo btc_enemy_side) then {[_group] call btc_fnc_mil_unit_create;}; if (_side isEqualTo civilian) then {[_group] call btc_fnc_civ_unit_create}; -}, [_data_unit, _group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_data_unit, _group], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf index 38adfab53..1ee011a0d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf @@ -10,7 +10,6 @@ Parameters: _unit_type - Type of units to create. [Array] _pos - Position of creation. [Array] _special - Unit placement special. [String] - _vehicle - Vehicle where unit can be load in. [Object] Returns: @@ -31,8 +30,7 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ["_group", grpNull, [grpNull]], ["_unit_type", "", [""]], ["_pos", [0, 0, 0], [[]]], - ["_special", "CARGO", [""]], - ["_vehicle", objNull, [objNull]] + ["_special", "CARGO", [""]] ]; if (isNull _group) exitWith { @@ -41,10 +39,14 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; }; private _unit = _group createUnit [_unit_type, _pos, [], 0, _special]; - if !(isNull _vehicle) then { - _unit moveInAny _vehicle; - }; [_unit] joinSilent _group; + private _vehicle = assignedVehicle leader _group; + if (!isNull _vehicle && {isNull assignedVehicle _unit}) then { + if !(_unit moveInAny _vehicle) then { + deleteVehicle _unit; + }; + }; + btc_delay_createUnit = btc_delay_createUnit - 0.3; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index 56787d466..e8f719bb3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -16,6 +16,7 @@ Parameters: _p_chem - Allow chemical propagation. [Boolean] Returns: + _delay_vehicle - Delay for unit creation. [Number] Examples: (begin example) @@ -87,15 +88,13 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; private _crews_and_turret = _crews + _turretCount; for "_i" from _crews to ((_crews_and_turret min _numberOfUnits) - 1) do { - [_group, _units_type select _i, _position, "CAN_COLLIDE", _veh] call btc_fnc_delay_createUnit; + [_group, _units_type select _i, _position, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; }; for "_i" from _crews_and_turret to (_numberOfUnits - 1) do { [_group, _units_type select _i, _position] call btc_fnc_delay_createUnit; }; - [{ - _this call btc_fnc_mil_unit_create; - }, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; - btc_delay_createUnit = btc_delay_createUnit - 0.3; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; + +count (_this select 2) * 0.3 diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index 9983df450..5daf81411 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -17,11 +17,15 @@ Parameters: _p_chem - Allow chemical propagation. [Boolean] Returns: + _delay_vehicle - Delay for unit creation. [Number] Examples: (begin example) [createGroup [btc_enemy_side, true], player getPos [10, direction player]] call btc_fnc_mil_createVehicle; (end) + (begin example) + [createGroup [btc_enemy_side, true], player getPos [10, direction player], "O_G_Van_02_vehicle_F"] call btc_fnc_mil_createVehicle; + (end) Author: Vdauphin @@ -53,4 +57,10 @@ for "_i" from _crewSeats to (_totalSeats - 1) do { _units_type pushBack selectRandom _type_units; }; -[_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle; +private _delay = [_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle; + +[{ + _this call btc_fnc_mil_unit_create; +}, _group, btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; + +_delay diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index cad6a2f42..3bfa4cea4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -14,7 +14,7 @@ Returns: Examples: (begin example) - _result = [] call btc_fnc_mil_create_patrol; + [2, (allPlayers#0), btc_patrol_area] call btc_fnc_mil_create_patrol; (end) Author: @@ -67,12 +67,13 @@ _group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_military_id, btc_debug]; btc_military_id = btc_military_id + 1; -switch (_random) do { +private _delay = switch (_random) do { case 1 : { private _n_units = 5 + (round random 8); _pos = [_pos, 0, 50, 10, false] call btc_fnc_findsafepos; [_group, _pos, _n_units] call btc_fnc_mil_createUnits; + 0 }; case 2 : { private _veh_type = ""; @@ -93,13 +94,13 @@ switch (_random) do { params ["_veh", "_group"]; _veh setVariable ["btc_crews", _group]; [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; - }] call btc_fnc_mil_createVehicle; + }] call btc_fnc_mil_createVehicle }; }; [{ _this call btc_fnc_patrol_init; [[_this select 0]] call btc_fnc_set_groupsOwner; -}, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index ad96c6770..d028ae7cb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -17,7 +17,7 @@ Returns: Examples: (begin example) - _result = [] call btc_fnc_mil_send; + [(allPlayers#0), getPos (allPlayers#0), 1, selectRandom btc_type_motorized] call btc_fnc_mil_send (end) Author: @@ -36,6 +36,7 @@ params [ private _pos = getPos _start; private _group = grpNull; +private _delay = 0; switch (_typeOf_patrol) do { case 0 : { _group = ([_pos, 150, 3 + round random 6, 1] call btc_fnc_mil_create_group) select 0; @@ -52,7 +53,7 @@ switch (_typeOf_patrol) do { private _return_pos = [_pos, 10, 500, 13, false] call btc_fnc_findsafepos; - [_group, _return_pos, _veh_type] call btc_fnc_mil_createVehicle; + _delay = [_group, _return_pos, _veh_type] call btc_fnc_mil_createVehicle; [_group, _dest, -1, "MOVE", "AWARE", "RED", "NORMAL", "NO CHANGE", "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; [_group, _dest, -1, "GETOUT", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; @@ -63,6 +64,7 @@ switch (_typeOf_patrol) do { [{ _this call btc_fnc_set_groupsOwner; -}, [[_group]], btc_delay_createUnit] call CBA_fnc_waitAndExecute; + (_this select 0 select 0) deleteGroupWhenEmpty true; +}, [[_group]], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; _group diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 539078e01..a45d9e506 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -71,8 +71,9 @@ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; +private _delay = 0; for "_i" from 0 to (1 + round random 1) do { - [_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; + _delay = _delay + ([_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; @@ -152,6 +153,6 @@ for "_i" from 0 to (1 + round random 1) do { [_markers, _vehs + [_captive, _group]] call btc_fnc_delete; }; -}, [_group, _taskID, _radius_x, _city1, _pos2, _markers], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_group, _taskID, _radius_x, _city1, _pos2, _markers], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; waitUntil {sleep 5; _taskID call BIS_fnc_taskCompleted}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 0607a1bc2..9f143fce2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -72,8 +72,9 @@ _group setVariable ["no_cache", true]; private _vehs = []; private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; +private _delay = 0; for "_i" from 0 to (2 + round random 2) do { - [_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle; + _delay = _delay + ([_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; @@ -88,7 +89,7 @@ for "_i" from 0 to (2 + round random 2) do { [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; _agent removeEventHandler ["PathCalculated", _thisEventHandler]; }]; -}, [_group, _pos2, _taskID], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_group, _pos2, _taskID], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius_x/2] call CBA_fnc_addWaypoint; From 48d6d320ab0497d94c1b9b5badb19b125a1f547f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 6 May 2020 12:36:19 +0200 Subject: [PATCH 071/264] FIX: Can't create multiple vehicle --- .../core/fnc/delay/createUnit.sqf | 11 +++++------ .../core/fnc/delay/createVehicle.sqf | 7 ++----- .../core/fnc/mil/createVehicle.sqf | 2 ++ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf index 1ee011a0d..6abf1514e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createUnit.sqf @@ -10,6 +10,7 @@ Parameters: _unit_type - Type of units to create. [Array] _pos - Position of creation. [Array] _special - Unit placement special. [String] + _vehicle - Vehicle where unit can be load in. [Object] Returns: @@ -30,7 +31,8 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ["_group", grpNull, [grpNull]], ["_unit_type", "", [""]], ["_pos", [0, 0, 0], [[]]], - ["_special", "CARGO", [""]] + ["_special", "CARGO", [""]], + ["_vehicle", objNull, [objNull]] ]; if (isNull _group) exitWith { @@ -41,11 +43,8 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; private _unit = _group createUnit [_unit_type, _pos, [], 0, _special]; [_unit] joinSilent _group; - private _vehicle = assignedVehicle leader _group; - if (!isNull _vehicle && {isNull assignedVehicle _unit}) then { - if !(_unit moveInAny _vehicle) then { - deleteVehicle _unit; - }; + if (!isNull _vehicle) then { + _unit moveInAny _vehicle; }; btc_delay_createUnit = btc_delay_createUnit - 0.3; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index e8f719bb3..9a8689ec4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -86,12 +86,9 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; [_veh, _group] call _code; }; - private _crews_and_turret = _crews + _turretCount; + private _crews_and_turret = _crews + _turretCount + _cargoCount; for "_i" from _crews to ((_crews_and_turret min _numberOfUnits) - 1) do { - [_group, _units_type select _i, _position, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; - }; - for "_i" from _crews_and_turret to (_numberOfUnits - 1) do { - [_group, _units_type select _i, _position] call btc_fnc_delay_createUnit; + [_group, _units_type select _i, _position, "CAN_COLLIDE", _veh] call btc_fnc_delay_createUnit; }; btc_delay_createUnit = btc_delay_createUnit - 0.3; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index 5daf81411..706f84b43 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -32,6 +32,8 @@ Author: ---------------------------------------------------------------------------- */ +if (canSuspend) exitWith {[btc_fnc_mil_createVehicle, _this] call CBA_fnc_directCall}; + params [ ["_group", grpNull, [grpNull]], ["_pos", [0, 0, 0], [[]]], From 32f372dea1c0d432e5b257851cd779f9731b0f70 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 6 May 2020 14:12:32 +0200 Subject: [PATCH 072/264] Tweak endloadingScreen --- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index e66eb0bce..3955fe7ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,8 +1,5 @@ [] call compile preprocessFileLineNumbers "core\doc.sqf"; btc_map_mapIllumination = ace_map_mapIllumination; -endLoadingScreen; -[] spawn btc_fnc_intro; - if !(isNil "btc_custom_loc") then { { _x params ["_pos", "_cityType", "_cityName", "_sizeX", "_sizeY"]; @@ -10,6 +7,8 @@ if !(isNil "btc_custom_loc") then { _location setText _cityName; } forEach btc_custom_loc; }; +endLoadingScreen; +[] spawn btc_fnc_intro; [{!isNull player}, { btc_respawn_marker setMarkerPosLocal player; From 254140b51f71814902f0888264a1655ec9a332cc Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 6 May 2020 23:42:17 +0200 Subject: [PATCH 073/264] Handle boat --- .../core/fnc/eh/veh_init.sqf | 6 ++-- .../core/fnc/tow/ropeCreate.sqf | 36 ++++++++++++++----- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index 70fb9f5bc..6e13f56ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -61,11 +61,11 @@ switch true do { case (_type isKindOf "Ship") : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index d29ecb8b0..84f06947c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -44,16 +44,23 @@ private _offset = if (_model_selected select 1 > 3.06) then { private _posFlat = _vehicle_selected getPos [_offset, _dirSelected]; _posFlat set [2, (getPosATL _vehicle_selected) select 2]; -private _flat = createVehicle [ - ["Truck_01_Rack_F", "Truck_01_Rack_tropic_F"] select (worldName in ["Tanoa", "lingor3", "chernarus", "Enoch", "sara"]), -_posFlat, [], 0, "CAN_COLLIDE"]; +private _flatType = ["Truck_01_Rack_F", "Truck_01_Rack_tropic_F"] select (worldName in ["Tanoa", "lingor3", "chernarus", "Enoch", "sara"]); +private _flat = if (_tower isKindOf "Ship") then { + _tower +} else { + createVehicle [_flatType, _posFlat, [], 0, "CAN_COLLIDE"] +}; _flat setDir _dirSelected; _flat setVectorUp _vectorUp; private _model_corners_tower = [_tower] call btc_fnc_log_get_corner_points; private _model_corners_flat = [_flat] call btc_fnc_log_get_corner_points; private _model_flat = (0 boundingBoxReal _flat) select 1; -private _attachTo = [0, (_model_flat select 1) - (_model_selected select 1), (_model_selected select 2) - (_model_flat select 2)]; +private _attachTo = [ + 0, + [(_model_flat select 1) - (_model_selected select 1), -(_model_flat select 1) -(_model_selected select 1)] select (_flat isEqualTo _tower), + (_model_selected select 2) - (_model_flat select 2) +]; _vehicle_selected attachTo [_flat, _attachTo]; @@ -62,13 +69,22 @@ private _ropeTowerRelPos2 = (_model_corners_tower select 1) vectorAdd [0, -1, 2] private _ropeFlatRelPos1 = (_model_corners_flat select 2) vectorAdd [0, 0.05, 0.6]; private _ropeFlatRelPos2 = (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]; -private _rope1 = ropeCreate [_tower, _ropeTowerRelPos1, _flat, _ropeFlatRelPos1, (_tower modelToWorld _ropeTowerRelPos1) distance (_flat modelToWorld _ropeFlatRelPos1)]; -private _rope2 = ropeCreate [_tower, _ropeTowerRelPos2, _flat, _ropeFlatRelPos2, (_tower modelToWorld _ropeTowerRelPos2) distance (_flat modelToWorld _ropeFlatRelPos2)]; +private _rope1 = ropeCreate [_tower, _ropeTowerRelPos1, + [_flat, _vehicle_selected] select (_tower isKindOf "Ship"), + _ropeFlatRelPos1, + (_tower modelToWorld _ropeTowerRelPos1) distance (_flat modelToWorld _ropeFlatRelPos1) +]; +private _rope2 = ropeCreate [_tower, _ropeTowerRelPos2, + [_flat, _vehicle_selected] select (_tower isKindOf "Ship"), + _ropeFlatRelPos2, + (_tower modelToWorld _ropeTowerRelPos2) distance (_flat modelToWorld _ropeFlatRelPos2) +]; private _shortRope = [_rope1, _rope2] select (ropeLength _rope1 > ropeLength _rope2); ropeUnwind [_shortRope, 2, ropeLength _rope1 max ropeLength _rope2, false]; _tower setVariable ["btc_towing", _vehicle_selected, true]; _vehicle_selected setVariable ["btc_towing", _tower, true]; +btc_tow_vehicleSelected = objNull; [_tower, "RopeBreak", { params ["_tower", "_rope", "_flat"]; @@ -89,12 +105,16 @@ _vehicle_selected setVariable ["btc_towing", _tower, true]; }; _vehicle_selected setVectorUp surfaceNormal position _vehicle_selected; - deleteVehicle _flat; + if !(_tower isKindOf "Ship") then { + deleteVehicle _flat; + }; _vehicle_selected setVariable ["btc_towing", objNull, true]; _tower setVariable ["btc_towing", objNull, true]; }, [_vehicle_selected, 2 + (_model_selected select 1) - (_model_corners_tower select 0 select 1)]] call CBA_fnc_addBISEventHandler; +if (_tower isKindOf "Ship") exitWith {"Towing done." call CBA_fnc_notify}; + [{ params ["_flat", "_rope1", "_rope2"]; @@ -102,5 +122,3 @@ _vehicle_selected setVariable ["btc_towing", _tower, true]; (_flat call BIS_fnc_getPitchBank) select 0 ] call btc_fnc_tow_unwind; }, [_flat, _rope1, _rope2], 2] call CBA_fnc_waitAndExecute; - -btc_tow_vehicleSelected = objNull; From 591e5863bb619b871611359d1959685dcf787de7 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 7 May 2020 12:54:15 +0200 Subject: [PATCH 074/264] Add condition to redeploy --- .../core/fnc/compile.sqf | 1 + .../core/fnc/fob/redeploy.sqf | 37 +++++++++++++++++++ .../core/fnc/int/add_actions.sqf | 7 +--- .../stringtable.xml | 9 +++++ 4 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index c90fa9c56..7f612c5b5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -292,6 +292,7 @@ if (!isDedicated) then { //FOB btc_fnc_fob_create = compile preprocessFileLineNumbers "core\fnc\fob\create.sqf"; btc_fnc_fob_rallypointAssemble = compile preprocessFileLineNumbers "core\fnc\fob\rallypointAssemble.sqf"; + btc_fnc_fob_redeploy = compile preprocessFileLineNumbers "core\fnc\fob\redeploy.sqf"; //INT btc_fnc_int_add_actions = compile preprocessFileLineNumbers "core\fnc\int\add_actions.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf new file mode 100644 index 000000000..4ce543eab --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -0,0 +1,37 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_fob_redeploy + +Description: + Show A3 respawn menu. + +Parameters: + +Returns: + +Examples: + (begin example) + [] call btc_fnc_fob_redeploy; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +if !(player call ace_medical_status_fnc_isInStableCondition) exitWith { + [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYNOTSTABLE"]] call CBA_fnc_notify; +}; + +if ( + ["leftarm", "rightarm", "leftleg", "rightleg"] findIf { + [player, player, _x] call ace_medical_treatment_fnc_canSplint + } > -1 +) exitWith { + [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYSPLINT"]] call CBA_fnc_notify; +}; + +player setPos [10,10,10]; +player hideObject true; +player enableSimulation false; +forceRespawn player; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 130ccb0a0..49007055b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,12 +127,7 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { - player setPos [10,10,10]; - player hideObject true; - player enableSimulation false; - forceRespawn player; -}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; //Arsenal diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 4340202eb..300406fdf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1705,6 +1705,15 @@ This rallypoint will self-destruct in %1min. + + Can't redeploy, + + + you need to be stabilized + + + you need to have a splint + From 8d1514d30dd38a620bf650bb6fa4da94901b72f6 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 8 May 2020 22:34:09 +0200 Subject: [PATCH 075/264] Missing player name when player killed --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index df5070ccf..7326722fe 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -31,7 +31,7 @@ params [ _player addEventHandler ["Killed", { if (ace_map_mapIllumination) then {ace_map_mapIllumination = false;}; if (isObjectHidden player) exitWith {}; - btc_rep_malus_player_respawn remoteExecCall ["btc_fnc_rep_change", 2]; + [btc_rep_malus_player_respawn, player] remoteExecCall ["btc_fnc_rep_change", 2]; }]; _player addEventHandler ["CuratorObjectPlaced", btc_fnc_eh_CuratorObjectPlaced]; ["ace_treatmentSucceded", btc_fnc_rep_treatment] call CBA_fnc_addEventHandler; From d475210a51e81b8a7fbe247d5754b9a8ea3becd4 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 8 May 2020 22:35:25 +0200 Subject: [PATCH 076/264] FIX missing injurer when cache destroyed --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf index bf935923a..6fefe2c0e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf @@ -66,7 +66,7 @@ if (isNil {_cache getVariable "btc_hd_cache"} && {_explosive} && {_damage > 0.6} [format ["DESTROYED: ID %1 POS %2", btc_cache_n, btc_cache_pos], __FILE__, [false]] call btc_fnc_debug_message; }; - btc_rep_bonus_cache call btc_fnc_rep_change; + [btc_rep_bonus_cache, _injurer] call btc_fnc_rep_change; //Notification [0] remoteExecCall ["btc_fnc_show_hint", 0]; From ebebe936a9c9e7cda95b9736c81c63fe9b6bf9f8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 8 May 2020 23:07:53 +0200 Subject: [PATCH 077/264] missing return line --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 7326722fe..22d58e836 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -84,4 +84,4 @@ if (btc_p_respawn_arsenal) then { if (isObjectHidden _corpse) exitWith {}; [btc_gear_object, _unit] call ace_arsenal_fnc_openBox; }] call CBA_fnc_addBISEventHandler; -}; \ No newline at end of file +}; From 631169940e01c98357604af1c9532e074a769acd Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 9 May 2020 11:21:09 +0200 Subject: [PATCH 078/264] Change probability depend on protection --- .../core/fnc/arsenal/loadout.sqf | 2 +- .../core/fnc/chem/damage.sqf | 37 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf index ec8ce101c..36b5e4301 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf @@ -172,7 +172,7 @@ private _cargos = [ [_backpack_big, [[_launcherMagazine, 2, _launcherCount]]], [_backpack, [["ACE_Sandbag_empty", 1], ["ACE_Kestrel4500", 1], ["ACE_ATragMX", 1], ["ACE_RangeCard", 1], ["ACE_EntrenchingTool", 1]]], [], - [_backpackCBRN, []], + [_backpackCBRN, [["G_Respirator_white_F", 5]]], [_backpack, [["muzzle_antenna_02_f", 1], ["muzzle_antenna_01_f", 1], [["hgun_esd_01_F", "", "", "", [], [], ""], 1]]] ]; private _binocular_array = [_laserdesignator, "", "", "", ["Laserbatteries", 1], [], ""]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf index 370394761..64cb0f21d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf @@ -30,23 +30,44 @@ params [ ["_cfgGlasses", configNull, [configNull]] ]; +private _googles = goggles _unit; +private _backpack = backpack _unit; +private _uniform = toLower uniform _unit; + +private _hasMask = [ + "G_Respirator_base_F" +] findIf {_googles isKindOf [_x, _cfgGlasses]} > -1; +private _hasRespirator = [ + "G_RegulatorMask_base_F", + "G_AirPurifyingRespirator_01_base_F", + "GP21_GasmaskPS", + "GP5Filter_RaspiratorPS", + "GP7_RaspiratorPS", + "SE_M17", + "Hamster_PS", + "SE_S10" +] findIf {_googles isKindOf [_x, _cfgGlasses]} > -1; + private _hasProtection = [ - ( - goggles _unit isKindOf ["G_RegulatorMask_base_F", _cfgGlasses] || - goggles _unit isKindOf ["G_AirPurifyingRespirator_01_base_F", _cfgGlasses] + _hasRespirator || {_hasMask && {random 1 > 0.7}}, ( // Mask are not perfect + [ + "B_SCBA_01_base_F", + "B_CombinationUnitRespirator_01_Base_F" + ] findIf {_backpack isKindOf _x} > -1 ), ( - backpack _unit isKindOf "B_SCBA_01_base_F" || - backpack _unit isKindOf "B_CombinationUnitRespirator_01_Base_F" + [ + "cbrn" + ] findIf {_x in _uniform} > -1 ), - "cbrn" in toLower uniform _unit + true ]; if !(false in _hasProtection) exitWith {_this}; -_hasProtection append [true, true, true]; +private _probability = [0.3, 0.1, 0.1 , 0.5]; // Probability of damage increase without protection -if (_firstDamage || !(selectRandom _hasProtection)) then { +if (_firstDamage || !(_hasProtection selectRandomWeighted _probability)) then { _this set [1, false]; [_unit, random [0.05, 0.05, 0.2], selectRandom _bodyParts, "stab"] call ace_medical_fnc_addDamageToUnit; // ropeburn }; From abad8e9466986e8badb23d6cdf9b0f08811d28c9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 15 May 2020 11:09:09 +0200 Subject: [PATCH 079/264] Add probability to take damage from chemical agent Each uniform/mask/respirator reduce probablity to take damage from chemical agent --- .../core/fnc/chem/damage.sqf | 68 +++++++++++-------- .../stringtable.xml | 2 +- docs/InGame-documentation.md | 2 +- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf index 64cb0f21d..c740667ab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damage.sqf @@ -33,41 +33,53 @@ params [ private _googles = goggles _unit; private _backpack = backpack _unit; private _uniform = toLower uniform _unit; +private _protection = 0; -private _hasMask = [ - "G_Respirator_base_F" -] findIf {_googles isKindOf [_x, _cfgGlasses]} > -1; -private _hasRespirator = [ - "G_RegulatorMask_base_F", - "G_AirPurifyingRespirator_01_base_F", - "GP21_GasmaskPS", - "GP5Filter_RaspiratorPS", - "GP7_RaspiratorPS", - "SE_M17", - "Hamster_PS", - "SE_S10" -] findIf {_googles isKindOf [_x, _cfgGlasses]} > -1; - -private _hasProtection = [ - _hasRespirator || {_hasMask && {random 1 > 0.7}}, ( // Mask are not perfect +if ( + [ + "G_Respirator_base_F" + ] findIf {_googles isKindOf [_x, _cfgGlasses]} > -1 +) then { + _protection = _protection + selectRandom [0.15, 0.3]; // Less protection than respirator +} else { + if ( [ - "B_SCBA_01_base_F", - "B_CombinationUnitRespirator_01_Base_F" - ] findIf {_backpack isKindOf _x} > -1 - ), ( + "G_RegulatorMask_base_F", + "G_AirPurifyingRespirator_01_base_F", + "GP21_GasmaskPS", + "GP5Filter_RaspiratorPS", + "GP7_RaspiratorPS", + "SE_M17", + "Hamster_PS", + "SE_S10", + "MK502" + ] findIf {_googles isKindOf [_x, _cfgGlasses]} > -1 + ) then { + _protection = _protection + 0.3; + }; +}; +if ( + [ + "B_SCBA_01_base_F", + "B_CombinationUnitRespirator_01_Base_F" + ] findIf {_backpack isKindOf _x} > -1 +) then { + _protection = _protection + 0.1; +}; +if !(_uniform isEqualTo "") then { + _protection = _protection + 0.5; + if ( [ "cbrn" ] findIf {_x in _uniform} > -1 - ), - true -]; - -if !(false in _hasProtection) exitWith {_this}; + ) then { + _protection = _protection + 0.1; + }; +}; -private _probability = [0.3, 0.1, 0.1 , 0.5]; +if (_protection >= 1) exitWith {_this}; -// Probability of damage increase without protection -if (_firstDamage || !(_hasProtection selectRandomWeighted _probability)) then { +if (_firstDamage || (random 1 > _protection)) then { _this set [1, false]; [_unit, random [0.05, 0.05, 0.2], selectRandom _bodyParts, "stab"] call ace_medical_fnc_addDamageToUnit; // ropeburn }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index f43b7822d..287c01a64 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -224,7 +224,7 @@ 化学战 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, mask and breather backpack) to protect you from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, respirator mask and breather backpack) for full protection from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> Simple mask and simple uniform can reduce from 65% to 80% the probability to take damage.<img image='\A3\Data_F_Orange\Images\Respirator_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index a89abf00c..1a84bddb4 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -10,7 +10,7 @@ This mission has a database system. Enemy units, towns, hideouts, cache, objects ### Chemical agent: A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. ### Protection: -Use CBRN gear (uniform, mask and breather backpack) to protect you from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. +Use CBRN gear (uniform, respirator mask and breather backpack) for full protection from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. Simple mask and simple uniform can reduce from 65% to 80% the probability to take damage. ### Decontaminate: You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. ### Detection: From 97948d8388b226728d604719439b5c3624420c17 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 15 May 2020 23:48:43 +0200 Subject: [PATCH 080/264] Add: CBRN, drone, wheeles APC --- .../core/def/mission.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/mission.sqm | 222 +++++++++++++++--- 2 files changed, 196 insertions(+), 28 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 3ec91b3a4..04e29542f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -270,7 +270,7 @@ if (isServer) then { btc_type_solarPanel = _allClassSorted select {_x isKindOf "Land_SolarPanel_04_base_F"}; //BTC Vehicles in missions.sqm - btc_vehicles = [btc_veh_1, btc_veh_2, btc_veh_3, btc_veh_4, btc_veh_5, btc_veh_6, btc_veh_7, btc_veh_8, btc_veh_9, btc_veh_10, btc_veh_11, btc_veh_12, btc_veh_13, btc_veh_14, btc_veh_15, btc_veh_16]; + btc_vehicles = [btc_veh_1, btc_veh_2, btc_veh_3, btc_veh_4, btc_veh_5, btc_veh_6, btc_veh_7, btc_veh_8, btc_veh_9, btc_veh_10, btc_veh_11, btc_veh_12, btc_veh_13, btc_veh_14, btc_veh_15, btc_veh_16, btc_veh_17, btc_veh_18]; btc_helo = [btc_helo_1]; // The two arrays below are prefixes of buildings and their multiplier. diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm index 5fa693c32..6c3dcf4be 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm @@ -8,7 +8,7 @@ class EditorData toggles=521; class ItemIDProvider { - nextID=226; + nextID=232; }; class MarkerIDProvider { @@ -16,10 +16,10 @@ class EditorData }; class Camera { - pos[]={8380.7012,98.929726,10101.742}; - dir[]={-0.82167125,-0.56283653,-0.089907967}; - up[]={-0.5595513,0.82653111,-0.061226442}; - aside[]={-0.1087717,-3.2095704e-007,0.99407214}; + pos[]={8310.1777,98.629913,10084.459}; + dir[]={0.098348215,-0.70036846,-0.70702177}; + up[]={0.096501924,0.7137264,-0.69374603}; + aside[]={-0.99049145,-7.9450547e-007,-0.13778168}; }; }; binarizationWanted=0; @@ -39,7 +39,7 @@ addons[]= "A3_Characters_F", "ace_explosives", "A3_Modules_F_Curator_Curator", - "A3_Characters_F_Mark", + "A3_Characters_F_Enoch", "A3_Air_F_Heli_Heli_Transport_03", "A3_Soft_F_Beta_Truck_01", "A3_Soft_F_Exp_LSV_01", @@ -49,7 +49,8 @@ addons[]= "A3_Air_F_Beta_Heli_Attack_01", "A3_Props_F_Enoch_Military_Decontamination", "A3_Signs_F", - "A3_Soft_F_Enoch_Truck_01" + "A3_Soft_F_Enoch_Truck_01", + "A3_Armor_F_Beta_APC_Tracked_01" }; class AddonsMetaData { @@ -142,8 +143,8 @@ class AddonsMetaData }; class Item12 { - className="A3_Characters_F_Mark"; - name="Arma 3 Marksmen - Characters and Clothing"; + className="A3_Characters_F_Enoch"; + name="Arma 3 Contact Platform - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; @@ -223,7 +224,7 @@ class CustomAttributes name="Multiplayer"; class Attribute0 { - property="RespawnTemplates"; + property="RespawnButton"; expression="true"; class Value { @@ -233,15 +234,16 @@ class CustomAttributes { type[]= { - "ARRAY" + "SCALAR" }; }; + value=1; }; }; }; class Attribute1 { - property="RespawnButton"; + property="RespawnTemplates"; expression="true"; class Value { @@ -251,10 +253,9 @@ class CustomAttributes { type[]= { - "SCALAR" + "ARRAY" }; }; - value=1; }; }; }; @@ -693,7 +694,7 @@ class Mission }; class Entities { - items=59; + items=61; class Item0 { dataType="Marker"; @@ -1934,8 +1935,8 @@ class Mission { isPlayable=1; }; - id=198; - type="B_Sharpshooter_F"; + id=226; + type="B_soldier_UAV_F"; class CustomAttributes { class Attribute0 @@ -2006,8 +2007,8 @@ class Mission { isPlayable=1; }; - id=197; - type="B_Sharpshooter_F"; + id=227; + type="B_soldier_UAV_F"; class CustomAttributes { class Attribute0 @@ -2073,13 +2074,55 @@ class Mission angles[]={0,5.701921,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=114; - type="B_Soldier_F"; + id=228; + type="B_W_Soldier_CBRN_F"; + class CustomAttributes + { + class Attribute0 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male05ENG"; + }; + }; + }; + class Attribute1 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; }; }; class Attributes @@ -2103,13 +2146,55 @@ class Mission angles[]={0,5.701921,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=116; - type="B_Soldier_F"; + id=229; + type="B_W_Soldier_CBRN_F"; + class CustomAttributes + { + class Attribute0 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male06ENG"; + }; + }; + }; + class Attribute1 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0.95999998; + }; + }; + }; + nAttributes=2; + }; }; }; class Attributes @@ -2760,7 +2845,7 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8295.166,78.402695,10052.533}; + position[]={8295.166,78.402374,10052.533}; angles[]={0,5.7184839,0}; }; side="Empty"; @@ -2773,7 +2858,7 @@ class Mission }; id=170; type="B_APC_Wheeled_01_cannon_F"; - atlOffset=-0.076683044; + atlOffset=-0.077003479; class CustomAttributes { class Attribute0 @@ -3134,5 +3219,88 @@ class Mission nAttributes=1; }; }; + class Item59 + { + dataType="Object"; + class PositionInfo + { + position[]={8368.6865,74.666542,10110.126}; + angles[]={0.012007865,5.5935359,6.1861625}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable [""btc_dont_delete"",true]}"; + name="btc_veh_17"; + }; + id=230; + type="B_Truck_01_medical_F"; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; + }; + }; + class Item60 + { + dataType="Object"; + class PositionInfo + { + position[]={8373.0576,74.504128,10115.97}; + angles[]={6.279171,5.5569015,6.1848359}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable [""btc_dont_delete"",true]}"; + name="btc_veh_18"; + }; + id=231; + type="B_APC_Tracked_01_CRV_F"; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""arifle_MX_F"",""arifle_MX_SW_F"",""launch_NLAW_F"",""FirstAidKit""],[2,1,1,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""MiniGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F"",""Titan_AT"",""Titan_AP"",""Titan_AA""],[24,12,6,6,6,3,3,3,3,8,8,8,8,5,2,2,2]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; + }; + }; }; }; From 40ee441bc6d15917e4a5228ff7634d21d8a4fdc8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 16 May 2020 23:31:13 +0200 Subject: [PATCH 081/264] FIX:reputation change spamming --- .../core/fnc/rep/change.sqf | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf index 001ebcff4..0cce13375 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf @@ -35,12 +35,14 @@ btc_global_reputation = btc_global_reputation + _reputation; if (btc_p_rep_notify) then { if ((btc_rep_delayed select 0) isEqualTo 0) then { [{ - abs(btc_rep_delayed select 0) > 3 - }, { - btc_rep_delayed call btc_fnc_rep_notify; - }, [], 10 * 60, { - btc_rep_delayed call btc_fnc_rep_notify; - }] call CBA_fnc_waitUntilAndExecute; + [{ + abs(btc_rep_delayed select 0) > 3 + }, { + btc_rep_delayed call btc_fnc_rep_notify; + }, [], 10 * 60, { + btc_rep_delayed call btc_fnc_rep_notify; + }] call CBA_fnc_waitUntilAndExecute; + }, [], 0.5] call CBA_fnc_waitAndExecute; }; btc_rep_delayed set [0, (btc_rep_delayed select 0) + _reputation]; (btc_rep_delayed select 1) pushBack [_reputation, _player]; From 943147c41c90a5518932c3f12404eed96a1e2a4d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 17 May 2020 00:08:50 +0200 Subject: [PATCH 082/264] Add: ambushe when IED explode --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf index 274cdcb9d..b54719a33 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf @@ -41,6 +41,9 @@ Author: speed _x > 5 } }) then { + if (0.5 < random 1) then { + [getPos _wreck] call btc_fnc_rep_call_militia; + }; [_wreck, _ied] call btc_fnc_ied_boom; }; } forEach (_ied nearEntities ["allvehicles", 10]); From 8f36c43d0c57e6f56bc1f76298d43ced399c05bc Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 20 May 2020 09:05:19 +0200 Subject: [PATCH 083/264] Add reputation when removing IED --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 3 ++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf | 1 + =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 3ec91b3a4..eed814ea1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -642,9 +642,10 @@ btc_spect_updateOn = -1; //Rep btc_rep_bonus_cache = 100; btc_rep_bonus_civ_hh = 3; -btc_rep_bonus_disarm = 25; +btc_rep_bonus_disarm = 15; btc_rep_bonus_hideout = 200; btc_rep_bonus_mil_killed = 0.25; +btc_rep_bonus_IEDCleanUp = 10; btc_rep_malus_civ_hd = - 10; btc_rep_malus_civ_killed = - 10; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index d6d427fc2..5b01397ea 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -50,5 +50,6 @@ btc_ied_deleteOn = [{ private _maxLength = abs ((_p2 select 1) - (_p1 select 1)); if (_distance < (_minDistance + (_maxWidth max _maxLength) / 2) && {[getPos _vehicle, getDir _vehicle, 40, getPos _ied] call BIS_fnc_inAngleSector}) then { _ied call CBA_fnc_deleteEntity; + [btc_rep_bonus_IEDCleanUp, _unit] remoteExecCall ["btc_fnc_rep_change", 2]; }; }, 1, [_vehicle, (_maxWidth max _maxLength) / 2]] call CBA_fnc_addPerFrameHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf index 6e3dc88ef..4c949e5ba 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/notify.sqf @@ -31,10 +31,10 @@ private _player = _players select 0 select 1; private _hint = []; if (_reputation >= 0) then { - private _minRep = _reputation min 100; + private _minRep = _reputation min 80; _hint pushBack 20; - _hint pushBack [[1 - _minRep / 100, 1, 1 - _minRep / 100], _player]; + _hint pushBack [[1 - _minRep / 80, 1, 1 - _minRep / 80], _player]; } else { private _minRep = _reputation max -25; From 66040857ce48c54cfd543785604dd99c9690b561 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 21 May 2020 15:40:43 +0200 Subject: [PATCH 084/264] Add side mission remove rubbish --- .../core/def/mission.sqf | 6 +- .../core/fnc/compile.sqf | 1 + .../core/fnc/ied/boom.sqf | 1 + .../core/fnc/ied/deleteLoop.sqf | 8 +- .../core/fnc/side/removeRubbish.sqf | 88 +++++++++++++++++++ .../core/fnc/task/setDescription.sqf | 16 ++++ .../core/fnc/task/tasktypes.hpp | 3 + .../stringtable.xml | 14 +++ README.md | 2 +- 9 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index eed814ea1..d8431639b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -201,7 +201,7 @@ if (isServer) then { //Side btc_side_ID = 0; - btc_side_list = ["supply", "mines", "vehicle", "get_city", "tower", "civtreatment", "checkpoint", "convoy", "rescue", "capture_officer", "hostage", "hack", "kill", "EMP"]; // On ground (Side "convoy" and "capture_officer" are not design for map with different islands. Start and end city can be on different islands.) + btc_side_list = ["supply", "mines", "vehicle", "get_city", "tower", "civtreatment", "checkpoint", "convoy", "rescue", "capture_officer", "hostage", "hack", "kill", "EMP", "removeRubbish"]; // On ground (Side "convoy" and "capture_officer" are not design for map with different islands. Start and end city can be on different islands.) if (btc_p_sea) then {btc_side_list append ["civtreatment_boat", "underwater_generator"]}; // On sea if (btc_p_chem) then {btc_side_list pushBack "chemicalLeak"}; btc_side_list_use = []; @@ -317,8 +317,8 @@ if (isServer) then { (toLower _x find "offroad") != -1 }) }); - _ieds = _ieds - ["Land_Garbage_line_F","Land_Garbage_square3_F","Land_Garbage_square5_F"]; - btc_model_ieds = _ieds apply {(toLower getText(_cfgVehicles >> _x >> "model")) select [1]}; + btc_type_ieds = _ieds - ["Land_Garbage_line_F","Land_Garbage_square3_F","Land_Garbage_square5_F"]; + btc_model_ieds = btc_type_ieds apply {(toLower getText(_cfgVehicles >> _x >> "model")) select [1]}; btc_groundWeaponHolder = []; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 7f612c5b5..e46222596 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -165,6 +165,7 @@ if (isServer) then { btc_fnc_side_kill = compile preprocessFileLineNumbers "core\fnc\side\kill.sqf"; btc_fnc_side_chemicalLeak = compile preprocessFileLineNumbers "core\fnc\side\chemicalLeak.sqf"; btc_fnc_side_EMP = compile preprocessFileLineNumbers "core\fnc\side\EMP.sqf"; + btc_fnc_side_removeRubbish = compile preprocessFileLineNumbers "core\fnc\side\removeRubbish.sqf"; //LOG btc_fnc_log_createVehicle = compile preprocessFileLineNumbers "core\fnc\log\createVehicle.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/boom.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/boom.sqf index 5037b07df..bbf70bbd5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/boom.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/boom.sqf @@ -37,3 +37,4 @@ deleteVehicle _wreck; [_pos] call btc_fnc_deaf_earringing; [_pos] remoteExecCall ["btc_fnc_ied_effects", [0, -2] select isDedicated]; +["btc_ied_boom", [_pos]] call CBA_fnc_localEvent; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index 5b01397ea..ff1d1eea8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -48,8 +48,14 @@ btc_ied_deleteOn = [{ (0 boundingBoxReal _ied) params ["_p1", "_p2"]; private _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); private _maxLength = abs ((_p2 select 1) - (_p1 select 1)); - if (_distance < (_minDistance + (_maxWidth max _maxLength) / 2) && {[getPos _vehicle, getDir _vehicle, 40, getPos _ied] call BIS_fnc_inAngleSector}) then { + if ( + _distance < (_minDistance + (_maxWidth max _maxLength) / 2) && + {allMines inAreaArray [getPosWorld _ied, 2.5, 2.5] isEqualTo []} && + {[getPos _vehicle, getDir _vehicle, 40, getPos _ied] call BIS_fnc_inAngleSector} + ) then { + private _pos = getPosATL _ied; _ied call CBA_fnc_deleteEntity; [btc_rep_bonus_IEDCleanUp, _unit] remoteExecCall ["btc_fnc_rep_change", 2]; + ["btc_ied_deleted", [_pos, _unit]] call CBA_fnc_serverEvent; }; }, 1, [_vehicle, (_maxWidth max _maxLength) / 2]] call CBA_fnc_addPerFrameHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf new file mode 100644 index 000000000..e2380e2f0 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf @@ -0,0 +1,88 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_side_removeRubbish + +Description: + Remove bargage on road in city with Nemmera. + +Parameters: + _taskID - Unique task ID. [String] + +Returns: + +Examples: + (begin example) + [false, "btc_fnc_side_removeRubbish"] spawn btc_fnc_side_create; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_taskID", "btc_side", [""]] +]; + +private _minNumberOfSubTask = 2; +private _useful = btc_city_all select { + !(isNull _x) && + {_x getVariable ["type", ""] != "NameMarine"} && + { + private _city = _x; + ({ + isOnRoad (_x select 0) || + {!(((_x select 0) nearRoads 6) isEqualTo [])} // Most IED are just next to road + } count (_city getVariable ["ieds", []])) >= _minNumberOfSubTask + } +}; +if (_useful isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; +private _city = selectRandom _useful; +private _ieds = (_city getVariable ["ieds", []]) select { + isOnRoad (_x select 0) || + {!(((_x select 0) nearRoads 6) isEqualTo [])} +}; +private _extra_ied = round random (((count _ieds) - 1 - _minNumberOfSubTask) min 2); + +[_taskID, 38, objNull, _city getVariable "name"] call btc_fnc_task_create; + +private _tasksID = []; +for "_i" from 0 to (_minNumberOfSubTask + _extra_ied) do { + private _clear_taskID = _taskID + "cl" + str _i; + _tasksID pushBack _clear_taskID; + [[_clear_taskID, _taskID], 39, _ieds select _i select 0, btc_type_ieds select (btc_model_ieds find (_ieds select _i select 1)), false, false] call btc_fnc_task_create; + + ["btc_ied_deleted", { + params ["_posDeleted_ied"]; + _thisArgs params ["_clear_taskID", "_pos_ied"]; + + if (!(_clear_taskID call BIS_fnc_taskCompleted) && {_pos_ied distance _posDeleted_ied < 5}) then { + [_clear_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; + if (0.5 < random 1) then { + [_posDeleted_ied] call btc_fnc_rep_call_militia; + }; + }; + }, [_clear_taskID, _ieds select _i select 0]] call CBA_fnc_addEventHandlerArgs; + ["btc_ied_boom", { + params ["_posDeleted_ied"]; + _thisArgs params ["_clear_taskID", "_pos_ied"]; + + if (!(_clear_taskID call BIS_fnc_taskCompleted) && {_pos_ied distance _posDeleted_ied < 5}) then { + [_clear_taskID, "FAILED"] call BIS_fnc_taskSetState; + }; + }, [_clear_taskID, _ieds select _i select 0]] call CBA_fnc_addEventHandlerArgs; +}; + +waitUntil {sleep 5; + _taskID call BIS_fnc_taskCompleted || + !(false in (_tasksID apply {_x call BIS_fnc_taskCompleted})) +}; + +if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith {}; +if !("SUCCEEDED" in (_tasksID apply {_x call BIS_fnc_taskState})) exitWith { + [_taskID, "FAILED"] call BIS_fnc_taskSetState; +}; + +2 call btc_fnc_rep_change; + +[_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/setDescription.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/setDescription.sqf index 0f1d6b035..d0711f49a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/setDescription.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/setDescription.sqf @@ -361,6 +361,22 @@ switch (_description) do { ]; _type = "search"; }; + case 38 : { + _description = [ + format [localize "STR_BTC_HAM_SIDE_RUBBISH_DESC", _location] + (["B_APC_Tracked_01_CRV_F"] call btc_fnc_typeOfPreview), + format [localize "STR_BTC_HAM_SIDE_RUBBISH_TITLE", _location], + format [localize "STR_BTC_HAM_SIDE_RUBBISH_TITLE", _location] + ]; + _type = "use"; + }; + case 39 : { + _description = [ + (localize "STR_BTC_HAM_SIDE_RUBBISH_SPOT_DESC") + ([_location] call btc_fnc_typeOfPreview), + localize "STR_BTC_HAM_SIDE_RUBBISH_SPOT_TITLE", + localize "STR_BTC_HAM_SIDE_RUBBISH_SPOT_TITLE" + ]; + _type = "move"; + }; }; [ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/tasktypes.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/tasktypes.hpp index a274a4a62..25a821aed 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/tasktypes.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/task/tasktypes.hpp @@ -71,4 +71,7 @@ class CfgTaskTypes { class Antenna { icon = \A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa; }; + class Use { + icon = \A3\ui_f\data\igui\cfg\simpleTasks\types\use_ca.paa; + }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 300406fdf..aa74b5d14 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1226,6 +1226,20 @@ 找到并摧毁导致电子设备失效的 EMP 发射站。
+ + + Remove rubbish in %1 + + + Civilian population reported many rubbish on road making driving difficult around %1. They are requesting your help to remove them with a Nemmera. + + + Rubbish spotted + + + A civilian spotted this rubbish as particularly annoying while driving. + + diff --git a/README.md b/README.md index c24213267..a7b462eaa 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Online [wiki available](http://vdauphin.github.io/HeartsAndMinds/). - Request a lift - Discussion (interpreter) - Fleeing - - More than 17 side mission + - More than 18 side mission - Deep ACE3 support - Use mainly ACE interaction - Rearm system From 10188b0075a4e0fb712fd39c91fbbeda9fe708a0 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 22 May 2020 09:15:46 +0200 Subject: [PATCH 085/264] Add string to the stringtable --- .../core/fnc/eh/player.sqf | 2 +- .../core/fnc/eh/veh_init.sqf | 6 +- .../core/fnc/tow/check.sqf | 12 ++-- .../core/fnc/tow/ropeCreate.sqf | 8 +-- .../core/fnc/tow/unhook.sqf | 2 +- .../core/fnc/tow/unwind.sqf | 10 ++-- .../stringtable.xml | 58 +++++++++++-------- 7 files changed, 56 insertions(+), 42 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 532e2057f..72014aa2a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -81,4 +81,4 @@ if (btc_p_spect) then { }] call CBA_fnc_addPlayerEventHandler; }; -["btc_tow_unwindDone", {"Towing done." call CBA_fnc_notify}] call CBA_fnc_addEventHandler; +["btc_tow_unwindDone", {(localize "STR_BTC_HAM_TOW_DONE") call CBA_fnc_notify}] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index 6e13f56ae..1cd833296 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -34,7 +34,7 @@ switch true do { [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0; (localize "STR_BTC_HAM_TOW_HOOK") call CBA_fnc_notify;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; @@ -44,7 +44,7 @@ switch true do { [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0; (localize "STR_BTC_HAM_TOW_HOOK") call CBA_fnc_notify;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; @@ -63,7 +63,7 @@ switch true do { [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != (_this select 0)}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {btc_tow_vehicleSelected = _this select 0; (localize "STR_BTC_HAM_TOW_HOOK") call CBA_fnc_notify;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {!isNull ((_this select 0) getVariable ["btc_towing", objNull]);}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index 9767c9f37..6b25ff7ea 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -3,11 +3,11 @@ Function: btc_fnc_tow_check Description: - _tower ----rope--- (hook)_towed + _tower ----rope--- (hook)_towed, Show feedback message when trying to tow a vehicle. Parameters: _tower - Tower vehicle. [Object] - _towed - Tower vehicle. [Object] + _towed - Towed vehicle. [Object] Returns: _canTow - Can tow or not. [Boolean] @@ -35,7 +35,7 @@ if ((_array findIf {_towed isKindOf _x}) != -1) exitWith { _string_array = _string_array + ", " + _x; } forEach (([_tower] call btc_fnc_log_get_nottowable) - ["Truck_F"]); - (format [localize "STR_BTC_HAM_LOG_HOOK_HINFO", _string_array]) call CBA_fnc_notify; + (format [localize "STR_BTC_HAM_TOW_CANT", _string_array]) call CBA_fnc_notify; false }; @@ -45,11 +45,11 @@ private _distance = (_towed modelToWorld _model_front) distance (_tower modelToW private _safeDistance = [_distance > 1.3, _distance < [5, 24] select (_tower isKindOf "Ship")]; if (_safeDistance isEqualTo [true, false]) exitWith { - "too far" call CBA_fnc_notify; + (localize "STR_BTC_HAM_TOW_TFAR") call CBA_fnc_notify; false }; if (_safeDistance isEqualTo [false, true]) exitWith { - "too close" call CBA_fnc_notify; + (localize "str_a3_showcase_vtol_x11_taruclose_xia_0") call CBA_fnc_notify; false }; @@ -57,7 +57,7 @@ if ( !((isVehicleCargo _towed) isEqualTo objNull) || !isNull (_tower getVariable ["btc_towing", objNull]) ) exitWith { - (localize "STR_BTC_HAM_LOG_TOW_ALREADYTOWED") call CBA_fnc_notify; + (localize "STR_BTC_HAM_TOW_ALREADYTOWED") call CBA_fnc_notify; false }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 84f06947c..cef94a9a1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -6,10 +6,10 @@ Description: Tow a vehicle. Parameters: - _tower - Vehicle. [Object] + _tower - Vehicle towing. [Object] + _vehicle_selected - Vehicle will be towed. [Object] Returns: - _thisId - ID of the event handler. [Number] Examples: (begin example) @@ -29,7 +29,7 @@ params [ if !([_tower, _vehicle_selected] call btc_fnc_tow_check) exitWith {}; if (_tower setVehicleCargo _vehicle_selected) exitWith {}; -"Towing in progress, please wait..." call CBA_fnc_notify; +(localize "STR_BTC_HAM_TOW_WAIT") call CBA_fnc_notify; // Find the position of the Flat object private _vectorUp = vectorUp _vehicle_selected; @@ -113,7 +113,7 @@ btc_tow_vehicleSelected = objNull; _tower setVariable ["btc_towing", objNull, true]; }, [_vehicle_selected, 2 + (_model_selected select 1) - (_model_corners_tower select 0 select 1)]] call CBA_fnc_addBISEventHandler; -if (_tower isKindOf "Ship") exitWith {"Towing done." call CBA_fnc_notify}; +if (_tower isKindOf "Ship") exitWith {(localize "STR_BTC_HAM_TOW_DONE") call CBA_fnc_notify}; [{ params ["_flat", "_rope1", "_rope2"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf index b2bf0be6e..b07f3196c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf @@ -25,7 +25,7 @@ params [ ]; private _towing = _veh getVariable ["btc_towing", objNull]; -if (isNull _towing) exitWith {(localize "STR_BTC_HAM_LOG_UNHOOK_NOROPE") call CBA_fnc_notify;}; +if (isNull _towing) exitWith {(localize "STR_BTC_HAM_TOW_NOROPE") call CBA_fnc_notify;}; private _ropes = ropes _this; if (_ropes isEqualTo []) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf index b2639f61f..03eac019d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf @@ -3,17 +3,19 @@ Function: btc_fnc_tow_unwind Description: - Tow a vehicle. + Unwind rope until the pitch is increased by 3°. Parameters: - _tower - Vehicle. [Object] + _flat - Object carrying the towed vehicle. [Object] + _rope1 - Rope to unwind. [Object] + _rope2 - Rope to unwind. [Object] + _initialPitch - Initial pitch and bank. [Number] Returns: - _thisId - ID of the event handler. [Number] Examples: (begin example) - [cursorObject] call btc_fnc_tow_unwind; + [] call btc_fnc_tow_unwind; (end) Author: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 5e7d5de2e..60191f44d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1939,13 +1939,43 @@ 在创建新的物件前, 该区域必须清空! - + Can't tow!<br/>(This vehicle can't tow %1) - Interactúe con un vehículo para remolcarlo!<br/>(Este vehículo no puede remolcar %1) - Interagieren Sie mit dem Zug-Fahrzeug, um es abzuschleppen!<br/>(Folgende Fahrzeuge können nicht gezogen werden: %1) - Interaja com o veículo para rebocá-lo!<br/>(Este veículo não pode rebocar %1) - 与牵引车(前车)互动以牵引它!<br/>(当前载具(后车)无法牵引如下类型的载具: %1) + Can't tow!<br/>(Este vehículo no puede remolcar %1) + Can't tow!<br/>(Folgende Fahrzeuge können nicht gezogen werden: %1) + Can't tow!<br/>(Este veículo não pode rebocar %1) + Can't tow!<br/>(当前载具(后车)无法牵引如下类型的载具: %1) + + + Interact with a vehicle to tow it! + Interactúe con un vehículo para remolcarlo! + Interagieren Sie mit dem Zug-Fahrzeug, um es abzuschleppen! + Interaja com o veículo para rebocá-lo! + 与牵引车(前车)互动以牵引它! + + + Too far! + + + This vehicle is already attached to another! + Este vehículo ya está unido a otro! + Dieses Fahrzeug zieht bereits ein anderes Fahrzeug! + Este veículo já está atracado a outro! + 这辆载具已经连接一辆载具了! + + + This vehicle is not attached to another! + Este vehículo no está unido a otro! + Das Fahrzeug schleppt kein anderes Fahrzeug ab! + Este veículo não está atracado a outro! + 该载具没有连接其他载具! + + + Towing in progress, please wait... + + + Towing done. @@ -2028,23 +2058,5 @@ 只能删除由后勤点创建的物件 - - - This vehicle is already attached to another! - Este vehículo ya está unido a otro! - Dieses Fahrzeug zieht bereits ein anderes Fahrzeug! - Este veículo já está atracado a outro! - 这辆载具已经连接一辆载具了! - - - - - This vehicle is not attached to another! - Este vehículo no está unido a otro! - Das Fahrzeug schleppt kein anderes Fahrzeug ab! - Este veículo não está atracado a outro! - 该载具没有连接其他载具! - - From c6e7cacde172461414c60b0a38c76d82160be041 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 22 May 2020 12:00:46 +0200 Subject: [PATCH 086/264] FIX: Missing task notification --- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 3955fe7ae..34627350c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -8,7 +8,7 @@ if !(isNil "btc_custom_loc") then { } forEach btc_custom_loc; }; endLoadingScreen; -[] spawn btc_fnc_intro; +btc_intro_done = [] spawn btc_fnc_intro; [{!isNull player}, { btc_respawn_marker setMarkerPosLocal player; From 4831492c8a74209d6d5465ce34bf4d293c521a53 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 24 May 2020 15:00:17 +0200 Subject: [PATCH 087/264] Remove rope when they break --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf | 2 +- .../core/fnc/tow/ropeCreate.sqf | 9 +++++++-- .../core/fnc/tow/unhook.sqf | 3 +-- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 9 +-------- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index 6b25ff7ea..4307eb703 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -54,7 +54,7 @@ if (_safeDistance isEqualTo [false, true]) exitWith { }; if ( - !((isVehicleCargo _towed) isEqualTo objNull) || + !(isNull (isVehicleCargo _towed)) || !isNull (_tower getVariable ["btc_towing", objNull]) ) exitWith { (localize "STR_BTC_HAM_TOW_ALREADYTOWED") call CBA_fnc_notify; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index cef94a9a1..111350773 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -88,7 +88,7 @@ btc_tow_vehicleSelected = objNull; [_tower, "RopeBreak", { params ["_tower", "_rope", "_flat"]; - _thisArgs params ["_vehicle_selected", "_safeDistance"]; + _thisArgs params ["_vehicle_selected", "_safeDistance", "_ropes"]; _tower removeEventHandler ["RopeBreak", _thisId]; @@ -108,10 +108,15 @@ btc_tow_vehicleSelected = objNull; if !(_tower isKindOf "Ship") then { deleteVehicle _flat; }; + _ropes apply {deleteVehicle _x}; _vehicle_selected setVariable ["btc_towing", objNull, true]; _tower setVariable ["btc_towing", objNull, true]; -}, [_vehicle_selected, 2 + (_model_selected select 1) - (_model_corners_tower select 0 select 1)]] call CBA_fnc_addBISEventHandler; +}, [ + _vehicle_selected, + 2 + (_model_selected select 1) - (_model_corners_tower select 0 select 1), + [_rope1, _rope2] +]] remoteExecCall ["CBA_fnc_addBISEventHandler", 2]; if (_tower isKindOf "Ship") exitWith {(localize "STR_BTC_HAM_TOW_DONE") call CBA_fnc_notify}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf index b07f3196c..5e5ab762b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unhook.sqf @@ -25,9 +25,8 @@ params [ ]; private _towing = _veh getVariable ["btc_towing", objNull]; -if (isNull _towing) exitWith {(localize "STR_BTC_HAM_TOW_NOROPE") call CBA_fnc_notify;}; -private _ropes = ropes _this; +private _ropes = ropes _veh; if (_ropes isEqualTo []) then { _ropes = ropes _towing; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 60191f44d..02f3de26c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1940,7 +1940,7 @@ - + Can't tow!<br/>(This vehicle can't tow %1) Can't tow!<br/>(Este vehículo no puede remolcar %1) Can't tow!<br/>(Folgende Fahrzeuge können nicht gezogen werden: %1) @@ -1964,13 +1964,6 @@ Este veículo já está atracado a outro! 这辆载具已经连接一辆载具了! - - This vehicle is not attached to another! - Este vehículo no está unido a otro! - Das Fahrzeug schleppt kein anderes Fahrzeug ab! - Este veículo não está atracado a outro! - 该载具没有连接其他载具! - Towing in progress, please wait... From fa39b55888a77275c7dadf8604de16b6a1e17e46 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 25 May 2020 16:50:54 +0200 Subject: [PATCH 088/264] Tweak variable name and fix nulber of rubbish --- .../core/fnc/side/removeRubbish.sqf | 14 ++++++++------ =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf index e2380e2f0..4efdf1fa4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/removeRubbish.sqf @@ -3,7 +3,7 @@ Function: btc_fnc_side_removeRubbish Description: - Remove bargage on road in city with Nemmera. + Remove rubbish on road in city with Nemmera. Parameters: _taskID - Unique task ID. [String] @@ -42,15 +42,17 @@ private _ieds = (_city getVariable ["ieds", []]) select { isOnRoad (_x select 0) || {!(((_x select 0) nearRoads 6) isEqualTo [])} }; -private _extra_ied = round random (((count _ieds) - 1 - _minNumberOfSubTask) min 2); +private _extra_ied = round random (((count _ieds) - _minNumberOfSubTask) min 2); [_taskID, 38, objNull, _city getVariable "name"] call btc_fnc_task_create; private _tasksID = []; -for "_i" from 0 to (_minNumberOfSubTask + _extra_ied) do { +for "_i" from 0 to (_minNumberOfSubTask + _extra_ied - 1) do { private _clear_taskID = _taskID + "cl" + str _i; _tasksID pushBack _clear_taskID; - [[_clear_taskID, _taskID], 39, _ieds select _i select 0, btc_type_ieds select (btc_model_ieds find (_ieds select _i select 1)), false, false] call btc_fnc_task_create; + + private _selectedIED = _ieds select _i; + [[_clear_taskID, _taskID], 39, _selectedIED select 0, btc_type_ieds select (btc_model_ieds find (_selectedIED select 1)), false, false] call btc_fnc_task_create; ["btc_ied_deleted", { params ["_posDeleted_ied"]; @@ -62,7 +64,7 @@ for "_i" from 0 to (_minNumberOfSubTask + _extra_ied) do { [_posDeleted_ied] call btc_fnc_rep_call_militia; }; }; - }, [_clear_taskID, _ieds select _i select 0]] call CBA_fnc_addEventHandlerArgs; + }, [_clear_taskID, _selectedIED select 0]] call CBA_fnc_addEventHandlerArgs; ["btc_ied_boom", { params ["_posDeleted_ied"]; _thisArgs params ["_clear_taskID", "_pos_ied"]; @@ -70,7 +72,7 @@ for "_i" from 0 to (_minNumberOfSubTask + _extra_ied) do { if (!(_clear_taskID call BIS_fnc_taskCompleted) && {_pos_ied distance _posDeleted_ied < 5}) then { [_clear_taskID, "FAILED"] call BIS_fnc_taskSetState; }; - }, [_clear_taskID, _ieds select _i select 0]] call CBA_fnc_addEventHandlerArgs; + }, [_clear_taskID, _selectedIED select 0]] call CBA_fnc_addEventHandlerArgs; }; waitUntil {sleep 5; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index aa74b5d14..c23ba1434 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1226,7 +1226,7 @@ 找到并摧毁导致电子设备失效的 EMP 发射站。 - + Remove rubbish in %1 From 254dbdf6836840c722b074feb49010890aaeca7f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 27 May 2020 01:44:57 +0200 Subject: [PATCH 089/264] btc_fnc_log_CuratorObjectPlaced_s no more exist --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 46f35957c..9c9faf6ca 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -33,4 +33,4 @@ if (btc_p_chem) then { }; ["GroundWeaponHolder", "InitPost", {btc_groundWeaponHolder append _this}] call CBA_fnc_addClassEventHandler; -["acex_fortify_objectPlaced", {[_this select 2] call btc_fnc_log_CuratorObjectPlaced_s}] call CBA_fnc_addEventHandler; +["acex_fortify_objectPlaced", {[_this select 2] call btc_fnc_log_init}] call CBA_fnc_addEventHandler; From 4e3d4f6e25980548e819f28b85c2774a7b686063 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 27 May 2020 01:52:34 +0200 Subject: [PATCH 090/264] Improve syntax --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 2 +- .../core/fnc/arsenal/loadout.sqf | 2 +- .../core/fnc/chem/damageLoop.sqf | 4 ++-- .../core/fnc/city/activate.sqf | 2 +- .../core/fnc/common/create_composition.sqf | 8 ++++---- .../core/fnc/common/showSubtitle.sqf | 2 +- .../core/fnc/db/loadObjectStatus.sqf | 3 ++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 9 +++------ .../core/fnc/fob/redeploy.sqf | 2 +- .../core/fnc/lift/hookFake.sqf | 2 +- .../core/fnc/patrol/addWP.sqf | 2 +- .../core/fnc/side/civtreatment_boat.sqf | 2 +- 12 files changed, 19 insertions(+), 21 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 3ec91b3a4..a33abe921 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -329,7 +329,7 @@ if (isServer) then { private _allfaction = ["AFGCIV","CIV_F","DEFAULT","CFP_C_AFG","CFP_C_AFRCHRISTIAN","CFP_C_AFRISLAMIC","CFP_C_ASIA","CFP_C_ME","CUP_C_RU","CUP_C_CHERNARUS","CUP_C_SAHRANI","CUP_C_TK","GM_FC_GC_CIV","GM_FC_GE_CIV","LIB_CIV","LOP_AFR_CIV","LOP_CHR_CIV","LOP_TAK_CIV","CIV_IDAP_F","OPTRE_UEG_CIV","RDS_RUS_CIV","UK3CB_CHC_C","UK3CB_TKC_C","UNSUNG_C"]; //All factions _p_civ = _allfaction select _p_civ; //Select faction selected from mission parameter _p_civ_veh = _allfaction select _p_civ_veh; //Select faction selected from mission parameter -private _allclasse = [[_p_civ]] call btc_fnc_civ_class; //Create classes from factions, you can combine factions from the SAME side : [[_p_civ , "btc_ac","LOP_TAK_CIV"]] call btc_fnc_civ_class. +private _allclasse = [[_p_civ]] call btc_fnc_civ_class; //Create classes from factions, you can combine factions from the SAME side : [[_p_civ, "btc_ac","LOP_TAK_CIV"]] call btc_fnc_civ_class. //Save class name to global variable btc_civ_type_units = _allclasse select 0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf index ec8ce101c..09f578a22 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/loadout.sqf @@ -55,7 +55,7 @@ if (_color < 0) then { case (worldName in ["Tanoa", "lingor3"]): { 1 }; - case (worldName in ["chernarus", "Enoch", "sara"]): { + case (worldName in ["chernarus", "Enoch", "sara", "vt7"]): { 3 }; default { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damageLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damageLoop.sqf index d5aefd307..ed7bf6177 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damageLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/chem/damageLoop.sqf @@ -46,11 +46,11 @@ private _handle = [{ [_handle] call CBA_fnc_removePerFrameHandler; if (btc_debug || btc_debug_log) then { - [format ["Stop: %1", _handle] , __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; + [format ["Stop: %1", _handle], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; }; }; }, [_handle, _unit]] call CBA_fnc_addEventHandlerArgs; if (btc_debug || btc_debug_log) then { - [format ["Start: %1", _handle] , __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; + [format ["Start: %1", _handle], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 5f3faf5ca..ca928f54b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -112,7 +112,7 @@ if !(_data_units isEqualTo []) then { }); if (_has_en) then { - for "_i" from 1 to (round (_p_mil_group_ratio * (1 + random _max_number_group))) do {[_city, _radius, 1 + round random [0, 1, 2] , random 1] call btc_fnc_mil_create_group;}; + for "_i" from 1 to (round (_p_mil_group_ratio * (1 + random _max_number_group))) do {[_city, _radius, 1 + round random [0, 1, 2], random 1] call btc_fnc_mil_create_group;}; }; //Spawn civilians diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/create_composition.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/create_composition.sqf index 048210241..945a14ae2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/create_composition.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/create_composition.sqf @@ -7,7 +7,7 @@ Description: Parameters: _pos - Position where the composition will be created. [Array] - _setdir - Set the direction of composition spawn. [Number] + _setDir - Set the direction of composition spawn. [Number] _array - Array of each objects in the composition. [Array] Returns: @@ -25,7 +25,7 @@ Author: params [ ["_pos", [0, 0, 0], [[]]], - ["_setdir", 0, [0]], + ["_setDir", 0, [0]], ["_array", [], [[]]] ]; _pos params ["_pos_x", "_pos_y", ["_pos_z", 0]]; @@ -35,11 +35,11 @@ _array apply { _rel_pos params ["_rel_x", "_rel_y", ["_rel_z", 0]]; //// Determine position function of setdir \\\\ - private _final = [_pos_x + _rel_x*cos(_setdir) - _rel_y*sin(- _setdir), _pos_y + _rel_y*cos(_setdir) + _rel_x*sin(- _setdir)]; + private _final = [_pos_x + _rel_x*cos(_setDir) - _rel_y*sin(- _setDir), _pos_y + _rel_y*cos(_setDir) + _rel_x*sin(- _setDir)]; _final pushBack (_pos_z + _rel_z + getTerrainHeightASL _final); private _obj = createVehicle [_type, ASLToATL _final, [], 0, "CAN_COLLIDE"]; //// Determine direction function of setdir \\\\ - _obj setDir (_dir + _setdir); + _obj setDir (_dir + _setDir); _obj setVectorUp surfaceNormal position _obj; _obj setPosASL _final; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/showSubtitle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/showSubtitle.sqf index c671d0c30..4a90ebc78 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/showSubtitle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/showSubtitle.sqf @@ -42,7 +42,7 @@ disableSerialization; params [ ["_from", "", [""]], ["_text", "", [""]], - ["_lineBreak", false , [false]], + ["_lineBreak", false, [false]], ["_colorFrom", "#d4cd00", [""]], //default color: gold ["_colorText", "#FFFFFF", [""]], //default color: white ["_fontText", "RobotoCondensedBold", [""]] diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/loadObjectStatus.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/loadObjectStatus.sqf index 3bb2bdcb3..25c9045b4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/loadObjectStatus.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/loadObjectStatus.sqf @@ -23,7 +23,8 @@ Author: params [ ["_object_data", [], [[]]] ]; -_object_data params ["_type", +_object_data params [ + "_type", "_posWorld", "_dir", "_magClass", diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 22d58e836..45e58c12d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -46,21 +46,18 @@ _player addEventHandler ["GetOutMan", { }; }]; _player addEventHandler ["WeaponAssembled", { - params [ - ["_player", objNull, [objNull]], - ["_static", objNull, [objNull]] - ]; + params ["_player", "_static"]; if !(_static isKindOf "StaticWeapon") exitWith {_this}; [_static] remoteExecCall ["btc_fnc_log_init", 2]; }]; ["ace_csw_deployWeaponSucceeded", { - _this remoteExecCall ["btc_fnc_log_init", [0, 2] select isDedicated]; + _this remoteExecCall ["btc_fnc_log_init", 2]; }] call CBA_fnc_addEventHandler; if (btc_p_chem) then { // Add biopsy - [missionnamespace, "probingEnded", btc_fnc_chem_biopsy] call BIS_fnc_addScriptedEventHandler; + [missionNamespace, "probingEnded", btc_fnc_chem_biopsy] call BIS_fnc_addScriptedEventHandler; // Disable BI shower ["DeconShower_01_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction', true];}] call CBA_fnc_addClassEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index 4ce543eab..0ea2acbf6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -31,7 +31,7 @@ if ( [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYSPLINT"]] call CBA_fnc_notify; }; -player setPos [10,10,10]; +player setPos [10, 10, 10]; player hideObject true; player enableSimulation false; forceRespawn player; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/hookFake.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/hookFake.sqf index 9b6bf4828..d8c9b3f13 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/hookFake.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/lift/hookFake.sqf @@ -26,7 +26,7 @@ params [ ["_chopper", objNull, [objNull]] ]; -private _simulation = createVehicle ["Box_EAF_AmmoVeh_F", getPosATL _cargo , [], 0, "CAN_COLLIDE"]; +private _simulation = createVehicle ["Box_EAF_AmmoVeh_F", getPosATL _cargo, [], 0, "CAN_COLLIDE"]; _simulation enableSimulation false; (getPosATL _cargo) params ["_x", "_y", "_z"]; _simulation setPosATL [_x, _y, [_z, 0] select (_z < -0.05)]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf index 80029e4d8..fe7d1492d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf @@ -53,7 +53,7 @@ if (_vehicle isKindOf "Air") then { if (btc_debug) then { if (!isNil {_group getVariable "btc_patrol_id"}) then { private _patrol_id = _group getVariable ["btc_patrol_id", 0]; - private _marker = createMarker [format ["Patrol_fant_%1", _patrol_id] , [(_pos select 0) + random 30, (_pos select 1) + random 30, 0]]; + private _marker = createMarker [format ["Patrol_fant_%1", _patrol_id], [(_pos select 0) + random 30, (_pos select 1) + random 30, 0]]; _marker setMarkerType "mil_dot"; _marker setMarkerText format ["P %1", _patrol_id]; _marker setMarkerColor (["ColorWhite", "ColorRed"] select (_patrol_id > 0)); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf index 05997f7ea..479566c5d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf @@ -34,7 +34,7 @@ private _pos = getPos _city; //// Choose a random position \\\\ private _vehpos = [_pos, 0, 600, 20, 2, 60 * (pi / 180), 0] call BIS_fnc_findSafePos; -_vehpos = [_vehpos select 0 , _vehpos select 1, 0]; +_vehpos = [_vehpos select 0, _vehpos select 1, 0]; //// Create civ on _vehpos \\\\ private _veh_type = selectRandom btc_civ_type_boats; From 2dc565f74768af185e796e90b0b88b6e2312aa35 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 27 May 2020 08:55:37 +0200 Subject: [PATCH 091/264] Use CBA ACE event killed --- .../core/fnc/city/activate.sqf | 3 +- .../core/fnc/city/de_activate.sqf | 10 +++++- .../core/fnc/compile.sqf | 7 ++-- .../core/fnc/data/spawn_group.sqf | 9 ++--- .../core/fnc/eh/CuratorObjectPlaced.sqf | 5 --- .../core/fnc/eh/server.sqf | 7 +++- .../core/fnc/ied/drone_create.sqf | 1 - .../core/fnc/ied/suiciderKilled.sqf | 36 ------------------- .../core/fnc/ied/suicider_active.sqf | 4 ++- .../core/fnc/mil/add_eh.sqf | 29 --------------- .../core/fnc/mil/createUnits.sqf | 4 --- .../core/fnc/mil/createVehicle.sqf | 8 +---- .../core/fnc/mil/unit_create.sqf | 34 ------------------ .../core/fnc/mil/unit_killed.sqf | 25 ++++--------- .../core/fnc/rep/add_eh.sqf | 1 - .../core/fnc/rep/killed.sqf | 13 +++---- .../core/fnc/rep/remove_eh.sqf | 1 - .../core/fnc/side/hostage.sqf | 1 - .../core/fnc/side/kill.sqf | 2 -- 19 files changed, 35 insertions(+), 165 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suiciderKilled.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/add_eh.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_create.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 5f3faf5ca..bfd1ac459 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -189,12 +189,11 @@ if !(_city getVariable ["has_suicider", false]) then { if ((time - btc_ied_suic_spawned) > btc_ied_suic_time && {random 1000 > btc_global_reputation}) then { btc_ied_suic_spawned = time; _city setVariable ["has_suicider", true]; - private _suicider = if (selectRandom [false, false, btc_p_ied_drone]) then { + if (selectRandom [false, false, btc_p_ied_drone]) then { [_city, _radius] call btc_fnc_ied_drone_create; } else { [_city, _radius] call btc_fnc_ied_suicider_create; }; - [_suicider, "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index 500a7a1d7..fcd64518e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -54,17 +54,25 @@ if !(_city getVariable ["active", false]) exitWith {}; private _pos_city = getPosWorld _city; private _data_units = []; + private _has_suicider = false; { - if ((leader _x) inArea [_pos_city, _radius, _radius, 0, false] && {side _x != btc_player_side} && {!(_x getVariable ["no_cache", false])}) then { + if ( + (leader _x) inArea [_pos_city, _radius, _radius, 0, false] && + {side _x != btc_player_side} && + {!(_x getVariable ["no_cache", false])} + ) then { private _data_group = _x call btc_fnc_data_get_group; _data_units pushBack _data_group; + if ((_data_group select 0) in [5, 7]) then {_has_suicider = true;}; + if (btc_debug_log) then { [format ["data units = %1", _data_units], __FILE__, [false]] call btc_fnc_debug_message; }; }; } forEach allGroups; + _city setVariable ["has_suicider", _has_suicider]; _city setVariable ["data_units", _data_units]; _city setVariable ["active", false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 7f612c5b5..a75fa6f46 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -119,12 +119,11 @@ if (isServer) then { btc_fnc_mil_create_patrol = compile preprocessFileLineNumbers "core\fnc\mil\create_patrol.sqf"; btc_fnc_mil_send = compile preprocessFileLineNumbers "core\fnc\mil\send.sqf"; btc_fnc_mil_set_skill = compile preprocessFileLineNumbers "core\fnc\mil\set_skill.sqf"; - btc_fnc_mil_unit_create = compile preprocessFileLineNumbers "core\fnc\mil\unit_create.sqf"; btc_fnc_mil_getStructures = compile preprocessFileLineNumbers "core\fnc\mil\getStructures.sqf"; btc_fnc_mil_getBuilding = compile preprocessFileLineNumbers "core\fnc\mil\getBuilding.sqf"; - btc_fnc_mil_add_eh = compile preprocessFileLineNumbers "core\fnc\mil\add_eh.sqf"; btc_fnc_mil_createVehicle = compile preprocessFileLineNumbers "core\fnc\mil\createVehicle.sqf"; btc_fnc_mil_createUnits = compile preprocessFileLineNumbers "core\fnc\mil\createUnits.sqf"; + btc_fnc_mil_unit_killed = compile preprocessFileLineNumbers "core\fnc\mil\unit_killed.sqf"; //PATROL btc_fnc_patrol_playersInAreaCityGroup = compile preprocessFileLineNumbers "core\fnc\patrol\playersInAreaCityGroup.sqf"; @@ -145,6 +144,7 @@ if (isServer) then { btc_fnc_rep_buildingchanged = compile preprocessFileLineNumbers "core\fnc\rep\buildingchanged.sqf"; btc_fnc_rep_explosives_defuse = compile preprocessFileLineNumbers "core\fnc\rep\explosives_defuse.sqf"; btc_fnc_rep_notify = compile preprocessFileLineNumbers "core\fnc\rep\notify.sqf"; + btc_fnc_rep_killed = compile preprocessFileLineNumbers "core\fnc\rep\killed.sqf"; //SIDE btc_fnc_side_create = compile preprocessFileLineNumbers "core\fnc\side\create.sqf"; @@ -217,7 +217,6 @@ btc_fnc_civ_addWP = compile preprocessFileLineNumbers "core\fnc\civ\addWP.sqf"; //IED btc_fnc_ied_belt = compile preprocessFileLineNumbers "core\fnc\ied\belt.sqf"; -btc_fnc_ied_suiciderKilled = compile preprocessFileLineNumbers "core\fnc\ied\suiciderKilled.sqf"; //INT btc_fnc_int_orders_give = compile preprocessFileLineNumbers "core\fnc\int\orders_give.sqf"; @@ -230,7 +229,6 @@ btc_fnc_log_place_destroy_camera = compile preprocessFileLineNumbers "core\fnc\l //MIL btc_fnc_mil_class = compile preprocessFileLineNumbers "core\fnc\mil\class.sqf"; btc_fnc_mil_ammoUsage = compile preprocessFileLineNumbers "core\fnc\mil\ammoUsage.sqf"; -btc_fnc_mil_unit_killed = compile preprocessFileLineNumbers "core\fnc\mil\unit_killed.sqf"; //PATROL btc_fnc_patrol_eh = compile preprocessFileLineNumbers "core\fnc\patrol\eh.sqf"; @@ -238,7 +236,6 @@ btc_fnc_patrol_disabled = compile preprocessFileLineNumbers "core\fnc\patrol\dis //REP btc_fnc_rep_hd = compile preprocessFileLineNumbers "core\fnc\rep\hd.sqf"; -btc_fnc_rep_killed = compile preprocessFileLineNumbers "core\fnc\rep\killed.sqf"; //TOW btc_fnc_tow_hook = compile preprocessFileLineNumbers "core\fnc\tow\hook.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 4963b97ad..e1988413e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -46,14 +46,10 @@ _data_unit params [ ]; if (_type isEqualTo 5) exitWith { - [ - [objNull, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create, - "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; + [objNull, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create; }; if (_type isEqualTo 7) exitWith { - [ - [objNull, 100, _array_pos select 0] call btc_fnc_ied_drone_create, - "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; + [objNull, 100, _array_pos select 0] call btc_fnc_ied_drone_create; }; private _group = createGroup _side; @@ -107,6 +103,5 @@ if (_type isEqualTo 1) then { _group setCombatMode (_behaviour select 1); _group setFormation (_behaviour select 2); - if (_side isEqualTo btc_enemy_side) then {[_group] call btc_fnc_mil_unit_create;}; if (_side isEqualTo civilian) then {[_group] call btc_fnc_civ_unit_create}; }, [_data_unit, _group], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf index 965f05142..68053f059 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf @@ -38,11 +38,6 @@ if !((_object_placed isKindOf "AllVehicles") || (_object_placed isKindOf "Module }; if (_object_placed isKindOf "Man") then { - - if (side _object_placed isEqualTo btc_enemy_side) then { - [group _object_placed] remoteExecCall ["btc_fnc_mil_unit_create", 2]; - }; - if (side _object_placed isEqualTo civilian) then { [group _object_placed] remoteExecCall ["btc_fnc_civ_unit_create", 2]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 46f35957c..369907847 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -19,10 +19,12 @@ Author: ---------------------------------------------------------------------------- */ -addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; ["ace_explosives_defuse", btc_fnc_rep_explosives_defuse] call CBA_fnc_addEventHandler; +["ace_killed", btc_fnc_rep_killed] call CBA_fnc_addEventHandler; +["ace_killed", btc_fnc_mil_unit_killed] call CBA_fnc_addEventHandler; +addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; if (btc_p_auto_db) then { addMissionEventHandler ["HandleDisconnect", btc_fnc_db_autosave]; }; @@ -34,3 +36,6 @@ if (btc_p_chem) then { ["GroundWeaponHolder", "InitPost", {btc_groundWeaponHolder append _this}] call CBA_fnc_addClassEventHandler; ["acex_fortify_objectPlaced", {[_this select 2] call btc_fnc_log_CuratorObjectPlaced_s}] call CBA_fnc_addEventHandler; +if (btc_p_set_skill) then { + ["CAManBase", "init", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf index 88b634cbe..861b6edd3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf @@ -42,7 +42,6 @@ private _drone = createVehicle ["C_IDAP_UAV_06_antimine_F", _rpos, [], 0, "FLY"] createVehicleCrew _drone; [driver _drone] joinSilent _group; _group setVariable ["btc_ied_drone", true]; -[_group] call btc_fnc_mil_unit_create; [_group, _rpos, _area, 4] call CBA_fnc_taskPatrol; _drone flyInHeight 10; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suiciderKilled.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suiciderKilled.sqf deleted file mode 100644 index a4ed68941..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suiciderKilled.sqf +++ /dev/null @@ -1,36 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_ied_suiciderKilled - -Description: - Remove the the suicider flag to the corresponding city. - -Parameters: - _id - ID of the city. [Number] - -Returns: - -Examples: - (begin example) - [0] call btc_fnc_ied_suiciderKilled; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_id", 0, [0]] -]; - -if (btc_debug || btc_debug_log) then { - [format ["Suicider killed in city %1", _id], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; -}; - -if (!isServer) exitWith { - _this remoteExecCall ["btc_fnc_ied_suiciderKilled", 2]; -}; - -private _city = btc_city_all select _id; -_city setVariable ["has_suicider", false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf index dfee22183..5406d4e17 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf @@ -24,7 +24,9 @@ params [ ["_suicider", objNull, [objNull]] ]; -[_suicider] joinSilent createGroup [btc_enemy_side, true]; +private _group = createGroup [btc_enemy_side, true]; +[_suicider] joinSilent _group; +_group setVariable ["suicider", true]; _suicider call btc_fnc_rep_remove_eh; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/add_eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/add_eh.sqf deleted file mode 100644 index aabf5f9f7..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/add_eh.sqf +++ /dev/null @@ -1,29 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_mil_add_eh - -Description: - Add EH to military unit. - -Parameters: - _unit - Unit. [Object] - -Returns: - -Examples: - (begin example) - [cursorObject] call btc_fnc_mil_add_eh; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_unit", objNull, [objNull]] -]; - -[_unit, "Killed", "btc_fnc_mil_unit_killed"] call btc_fnc_eh_persistOnLocalityChange; - -true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf index f83bcabc5..ee00f4d85 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createUnits.sqf @@ -44,8 +44,4 @@ for "_i" from 1 to _number do { [_group, _unit_type, _pos] call btc_fnc_delay_createUnit; }; -[{ - _this call btc_fnc_mil_unit_create; -}, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; - _group diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index 706f84b43..e1b27b9da 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -59,10 +59,4 @@ for "_i" from _crewSeats to (_totalSeats - 1) do { _units_type pushBack selectRandom _type_units; }; -private _delay = [_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle; - -[{ - _this call btc_fnc_mil_unit_create; -}, _group, btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; - -_delay +[_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_create.sqf deleted file mode 100644 index fc11e0018..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_create.sqf +++ /dev/null @@ -1,34 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_mil_unit_create - -Description: - Fill me when you edit me ! - -Parameters: - _group - [Object] - -Returns: - -Examples: - (begin example) - _result = [] call btc_fnc_mil_unit_create; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_group", grpNull, [grpNull]] -]; - -{ - _x setVariable ["btc_init", true]; - _x call btc_fnc_mil_add_eh; - - if (btc_p_set_skill) then { - _x call btc_fnc_mil_set_skill; - }; -} forEach (units _group select {!(_x getVariable ["btc_init", false])}); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf index 220fa6146..de48377d8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/unit_killed.sqf @@ -6,8 +6,9 @@ Description: Fill me when you edit me ! Parameters: - _unit - [Object] - _killer - [Object] + _unit - Object the event handler is assigned to. [Object] + _killer - Object that killed the unit. Contains the unit itself in case of collisions. [Object] + _instigator - Person who pulled the trigger. [Object] Returns: @@ -21,26 +22,14 @@ Author: ---------------------------------------------------------------------------- */ -params [ - ["_unit", objNull, [objNull]], - ["_killer", objNull, [objNull]] -]; +params ["_unit", "_causeOfDeath", "_killer", "_instigator"]; -private _killer = _unit getVariable ["ace_medical_lastDamageSource", _killer]; - -if (!isServer) exitWith { - [_unit, _killer] remoteExecCall ["btc_fnc_mil_unit_killed", 2]; -}; +if !(side group _unit isEqualTo btc_enemy_side) exitWith {}; if (random 100 > btc_info_intel_chance) then { _unit setVariable ["intel", true]; }; -if (isPlayer _killer) then { - if (isServer) then { - [btc_rep_bonus_mil_killed, _killer] call btc_fnc_rep_change; - } else { - [btc_rep_bonus_mil_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; - }; +if (isPlayer _instigator) then { + [btc_rep_bonus_mil_killed, _instigator] call btc_fnc_rep_change; }; - diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf index 47448d675..aedc8e539 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf @@ -25,5 +25,4 @@ params [ ]; [_civilian, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; -[_civilian, "Killed", "btc_fnc_rep_killed"] call btc_fnc_eh_persistOnLocalityChange; [_civilian, "FiredNear", "btc_fnc_rep_firednear"] call btc_fnc_eh_persistOnLocalityChange; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf index 19ff6336f..a032f3a13 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf @@ -21,17 +21,12 @@ Author: ---------------------------------------------------------------------------- */ -params [ - ["_unit", objNull, [objNull]], - ["_killer", objNull, [objNull]] -]; +params ["_unit", "_causeOfDeath", "_killer", "_instigator"]; -if (!isServer) exitWith { - _this remoteExecCall ["btc_fnc_rep_killed", 2]; -}; +if !(side group _unit isEqualTo civilian) exitWith {}; -if (isPlayer _killer) then { - [btc_rep_malus_civ_killed, _killer] call btc_fnc_rep_change; +if (isPlayer _instigator) then { + [btc_rep_malus_civ_killed, _instigator] call btc_fnc_rep_change; if (btc_global_reputation < 600) then { [getPos _unit] call btc_fnc_rep_eh_effects; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf index 9ffe26caa..b3fe49fc4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf @@ -26,4 +26,3 @@ params [ [_civilian, "FiredNear", "btc_fnc_rep_firednear"] call btc_fnc_eh_removePersistOnLocalityChange; [_civilian, "HandleDamage", "btc_fnc_rep_hd"] remoteExecCall ["btc_fnc_eh_removePersistOnLocalityChange", _civilian]; -[_civilian, "Killed", "btc_fnc_rep_killed"] remoteExecCall ["btc_fnc_eh_removePersistOnLocalityChange", _civilian]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf index 17e563828..a5e57705e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf @@ -67,7 +67,6 @@ private _group = []; [_unit] joinSilent _grp; _group pushBack _grp; _grp setVariable ["no_cache", true]; - [_grp] call btc_fnc_mil_unit_create; } forEach (_buildingPos - [_pos]); _trigger = createTrigger ["EmptyDetector", _pos]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/kill.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/kill.sqf index 571102afe..c65296c19 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/kill.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/kill.sqf @@ -54,7 +54,6 @@ private _group_officer = createGroup btc_enemy_side; _group_officer setVariable ["no_cache", true]; private _officerType = selectRandom btc_type_units; private _officer = _group_officer createUnit [_officerType, _pos, [], 0, "CAN_COLLIDE"]; -[_group_officer] call btc_fnc_mil_unit_create; //// Data side mission private _officerName = name _officer; @@ -79,7 +78,6 @@ private _group = []; [_unit] joinSilent _grp; _group pushBack _grp; _grp setVariable ["no_cache", true]; - [_grp] call btc_fnc_mil_unit_create; } forEach (_buildingPos - [_pos]); _trigger = createTrigger ["EmptyDetector", _pos]; From 22dd918751e400c3b7478b4e783ae676f006d092 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 27 May 2020 13:00:55 +0200 Subject: [PATCH 092/264] Use CBA for Event working even if object not local --- .../core/fnc/cache/hd_cache.sqf | 10 +++--- .../core/fnc/civ/add_grenade.sqf | 1 - .../core/fnc/civ/create_patrol.sqf | 5 ++- .../core/fnc/civ/get_grenade.sqf | 7 +++-- .../core/fnc/civ/get_weapons.sqf | 6 ++-- .../core/fnc/civ/populate.sqf | 4 --- .../core/fnc/civ/unit_create.sqf | 31 ------------------- .../core/fnc/compile.sqf | 6 +--- .../core/fnc/data/spawn_group.sqf | 2 -- .../core/fnc/eh/CuratorObjectPlaced.sqf | 13 -------- .../core/fnc/eh/server.sqf | 4 +++ .../core/fnc/ied/suicider_active.sqf | 2 -- .../core/fnc/ied/suicider_create.sqf | 2 -- .../core/fnc/mil/create_patrol.sqf | 2 +- .../core/fnc/patrol/disabled.sqf | 10 ++++-- .../core/fnc/patrol/eh.sqf | 16 ++++------ .../core/fnc/patrol/eh_remove.sqf | 31 ------------------- .../core/fnc/rep/add_eh.sqf | 28 ----------------- .../core/fnc/rep/eh_effects.sqf | 4 +-- .../core/fnc/rep/firednear.sqf | 7 ++--- .../core/fnc/rep/hd.sqf | 3 ++ .../core/fnc/rep/remove_eh.sqf | 28 ----------------- .../core/fnc/rep/treatment.sqf | 6 +++- .../core/fnc/side/civtreatment.sqf | 1 - .../core/fnc/side/civtreatment_boat.sqf | 2 -- .../core/fnc/side/hostage.sqf | 1 - 26 files changed, 49 insertions(+), 183 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/unit_create.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh_remove.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf index 6fefe2c0e..69cf6a27b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf @@ -34,15 +34,17 @@ params [ private _explosive = (getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") > 0); -if (isNil {_cache getVariable "btc_hd_cache"} && {_explosive} && {_damage > 0.6}) then { +if ( + !(_cache getVariable ["btc_fnc_cache_hd_cache_fired", false]) && + {_explosive} && + {_damage > 0.6} +) then { + _cache setVariable ["btc_fnc_cache_hd_cache_fired", true]; if (!isServer) exitWith { - [_cache, "HandleDamage", "btc_fnc_cache_hd_cache"] call btc_fnc_eh_removePersistOnLocalityChange; _this remoteExecCall ["btc_fnc_cache_hd_cache", 2]; }; - _cache setVariable ["btc_hd_cache", true]; - //Effects private _pos = getPosATL btc_cache_obj; "Bo_GBU12_LGB_MI10" createVehicle _pos; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf index 153b2161f..d1535c7e2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf @@ -35,7 +35,6 @@ _unit addEventHandler ["Fired", { [{ params ["_unit"]; - _unit call btc_fnc_rep_add_eh; [group _unit] call btc_fnc_civ_addWP; }, [_unit], 20] call CBA_fnc_waitAndExecute; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index bd62b9429..b2f6dbe2f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -66,14 +66,13 @@ btc_civilian_id = btc_civilian_id - 1; private _delay = [_group, _veh_type, [selectRandom btc_civ_type_units], _safe_pos, { params ["_veh", "_group"]; _veh setVariable ["btc_crews", _group]; + [_veh, "Fuel", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; + [_veh, "GetOut", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; [_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; - [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; - [_veh, "GetOut", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; [_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; }] call btc_fnc_delay_createVehicle; [{ - [_this select 0] call btc_fnc_civ_unit_create; _this call btc_fnc_patrol_init; [[_this select 0]] call btc_fnc_set_groupsOwner; }, [_group, [_start_city, _active_city], _area, _pos_isWater], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf index 28093d822..2d734c3a4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf @@ -32,7 +32,10 @@ if (_units isEqualTo []) then { _units = _pos nearEntities [btc_civ_type_units, _range]; }; -_units = _units select {side _x isEqualTo civilian}; +_units = _units select { + side group _x isEqualTo civilian && + {!(lifeState _x in ["INCAPACITATED", "DEAD"])} +}; if (_units isEqualTo []) exitWith {}; @@ -41,8 +44,6 @@ if (_units isEqualTo []) exitWith {}; [format ["%1 - %2", _x, side _x], __FILE__, [false]] call btc_fnc_debug_message; }; - _x call btc_fnc_rep_remove_eh; - [_x] call btc_fnc_civ_add_grenade; [_x] joinSilent createGroup [btc_enemy_side, true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf index b1fdea02c..6ca79c254 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf @@ -30,7 +30,10 @@ params [ if (_units isEqualTo []) then { _units = _pos nearEntities [btc_civ_type_units, _range]; - _units = _units select {side _x isEqualTo civilian}; + _units = _units select { + side group _x isEqualTo civilian && + {!(lifeState _x in ["INCAPACITATED", "DEAD"])} + }; }; { @@ -38,7 +41,6 @@ if (_units isEqualTo []) then { [format ["%1 - %2", _x, side _x], __FILE__, [false]] call btc_fnc_debug_message; }; - _x call btc_fnc_rep_remove_eh; [_x, "", 2] call ace_common_fnc_doAnimation; [_x] call btc_fnc_civ_add_weapons; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index 213ba1525..49808aa41 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -55,9 +55,5 @@ for "_i" from 1 to _n do { [_group, _pos] call btc_fnc_civ_addWP; [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_delay_createUnit; - [{ - _this call btc_fnc_civ_unit_create; - }, [_group], btc_delay_createUnit] call CBA_fnc_waitAndExecute; - _houses = _houses - [_house]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/unit_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/unit_create.sqf deleted file mode 100644 index 30d294c1c..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/unit_create.sqf +++ /dev/null @@ -1,31 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_civ_unit_create - -Description: - Initialize civilian by adding eventhandlers. - -Parameters: - _group - group to initialize. [Object] - -Returns: - -Examples: - (begin example) - [_group] call btc_fnc_civ_unit_create; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_group", grpNull, [grpNull]] -]; - -{ - _x setVariable ["btc_init", true]; - - _x call btc_fnc_rep_add_eh; -} forEach (units _group select {!(_x getVariable ["btc_init", false])}); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index a75fa6f46..bf3649bac 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -48,7 +48,6 @@ if (isServer) then { btc_fnc_civ_get_grenade = compile preprocessFileLineNumbers "core\fnc\civ\get_grenade.sqf"; btc_fnc_civ_populate = compile preprocessFileLineNumbers "core\fnc\civ\populate.sqf"; btc_fnc_civ_create_patrol = compile preprocessFileLineNumbers "core\fnc\civ\create_patrol.sqf"; - btc_fnc_civ_unit_create = compile preprocessFileLineNumbers "core\fnc\civ\unit_create.sqf"; btc_fnc_civ_evacuate = compile preprocessFileLineNumbers "core\fnc\civ\evacuate.sqf"; //DATA @@ -127,20 +126,18 @@ if (isServer) then { //PATROL btc_fnc_patrol_playersInAreaCityGroup = compile preprocessFileLineNumbers "core\fnc\patrol\playersInAreaCityGroup.sqf"; - btc_fnc_patrol_eh_remove = compile preprocessFileLineNumbers "core\fnc\patrol\eh_remove.sqf"; btc_fnc_patrol_usefulCity = compile preprocessFileLineNumbers "core\fnc\patrol\usefulCity.sqf"; btc_fnc_patrol_WPCheck = compile preprocessFileLineNumbers "core\fnc\patrol\WPCheck.sqf"; btc_fnc_patrol_init = compile preprocessFileLineNumbers "core\fnc\patrol\init.sqf"; btc_fnc_patrol_addWP = compile preprocessFileLineNumbers "core\fnc\patrol\addWP.sqf"; + btc_fnc_patrol_eh = compile preprocessFileLineNumbers "core\fnc\patrol\eh.sqf"; //REP - btc_fnc_rep_add_eh = compile preprocessFileLineNumbers "core\fnc\rep\add_eh.sqf"; btc_fnc_rep_call_militia = compile preprocessFileLineNumbers "core\fnc\rep\call_militia.sqf"; btc_fnc_rep_change = compile preprocessFileLineNumbers "core\fnc\rep\change.sqf"; btc_fnc_rep_eh_effects = compile preprocessFileLineNumbers "core\fnc\rep\eh_effects.sqf"; btc_fnc_rep_hh = compile preprocessFileLineNumbers "core\fnc\rep\hh.sqf"; btc_fnc_rep_firednear = compile preprocessFileLineNumbers "core\fnc\rep\firednear.sqf"; - btc_fnc_rep_remove_eh = compile preprocessFileLineNumbers "core\fnc\rep\remove_eh.sqf"; btc_fnc_rep_buildingchanged = compile preprocessFileLineNumbers "core\fnc\rep\buildingchanged.sqf"; btc_fnc_rep_explosives_defuse = compile preprocessFileLineNumbers "core\fnc\rep\explosives_defuse.sqf"; btc_fnc_rep_notify = compile preprocessFileLineNumbers "core\fnc\rep\notify.sqf"; @@ -231,7 +228,6 @@ btc_fnc_mil_class = compile preprocessFileLineNumbers "core\fnc\mil\class.sqf"; btc_fnc_mil_ammoUsage = compile preprocessFileLineNumbers "core\fnc\mil\ammoUsage.sqf"; //PATROL -btc_fnc_patrol_eh = compile preprocessFileLineNumbers "core\fnc\patrol\eh.sqf"; btc_fnc_patrol_disabled = compile preprocessFileLineNumbers "core\fnc\patrol\disabled.sqf"; //REP diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index e1988413e..5331b4873 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -102,6 +102,4 @@ if (_type isEqualTo 1) then { _group setBehaviour (_behaviour select 0); _group setCombatMode (_behaviour select 1); _group setFormation (_behaviour select 2); - - if (_side isEqualTo civilian) then {[_group] call btc_fnc_civ_unit_create}; }, [_data_unit, _group], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf index 68053f059..75712bd9f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/CuratorObjectPlaced.sqf @@ -36,16 +36,3 @@ if !((_object_placed isKindOf "AllVehicles") || (_object_placed isKindOf "Module [str _object_placed, __FILE__, [btc_debug, false]] call btc_fnc_debug_message; }; }; - -if (_object_placed isKindOf "Man") then { - if (side _object_placed isEqualTo civilian) then { - [group _object_placed] remoteExecCall ["btc_fnc_civ_unit_create", 2]; - }; - - if (btc_debug_log) then { - [format ["MAN %1", _object_placed], __FILE__, [false]] call btc_fnc_debug_message; - }; - if (btc_debug) then { - [str _object_placed, __FILE__, [btc_debug, false]] call btc_fnc_debug_message; - }; -}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 369907847..10b59de22 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -22,6 +22,10 @@ Author: addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; ["ace_explosives_defuse", btc_fnc_rep_explosives_defuse] call CBA_fnc_addEventHandler; ["ace_killed", btc_fnc_rep_killed] call CBA_fnc_addEventHandler; +["Civilian", "InitPost", { + [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; + [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; +}] call CBA_fnc_addClassEventHandler; ["ace_killed", btc_fnc_mil_unit_killed] call CBA_fnc_addEventHandler; addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf index 5406d4e17..1a015db95 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_active.sqf @@ -28,8 +28,6 @@ private _group = createGroup [btc_enemy_side, true]; [_suicider] joinSilent _group; _group setVariable ["suicider", true]; -_suicider call btc_fnc_rep_remove_eh; - [group _suicider] call CBA_fnc_clearWaypoints; private _trigger = createTrigger ["EmptyDetector", getPos _suicider]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf index 727c84abc..b7cfc4cd4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf @@ -48,8 +48,6 @@ private _suicider = _group createUnit [_type_units, _rpos, [], 0, "CAN_COLLIDE"] [_group] call btc_fnc_civ_addWP; _group setVariable ["suicider", true]; -[_group] call btc_fnc_civ_unit_create; - [_suicider] call btc_fnc_ied_suiciderLoop; _suicider diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 3bfa4cea4..e8109e66d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -93,7 +93,7 @@ private _delay = switch (_random) do { [_group, _pos, _veh_type, { params ["_veh", "_group"]; _veh setVariable ["btc_crews", _group]; - [_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_persistOnLocalityChange; + [_veh, "Fuel", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; }] call btc_fnc_mil_createVehicle }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/disabled.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/disabled.sqf index 4b3003f86..4515e763b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/disabled.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/disabled.sqf @@ -26,9 +26,15 @@ params [ ["_damage", 0.2, [0]] ]; +if (_veh getVariable ["btc_fnc_patrol_disabled_fired", false]) exitWith {}; + if (_damage > 0.1) then { - [_veh, "HandleDamage", "btc_fnc_patrol_disabled", false] call btc_fnc_eh_removePersistOnLocalityChange; - [_veh] call btc_fnc_patrol_eh; + _veh setVariable ["btc_fnc_patrol_disabled_fired", true, true]; + if (isServer) then { + [_veh] call btc_fnc_patrol_eh; + } else { + [_veh] remoteExecCall ["btc_fnc_patrol_eh", 2]; + }; }; _damage diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf index 4bf4a3338..2799d8592 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf @@ -24,26 +24,22 @@ params [ ["_veh", objNull, [objNull, grpNull]] ]; -if (!isServer) exitWith { - _this remoteExecCall ["btc_fnc_patrol_eh", 2]; - - if (btc_debug_log) then { - [format ["%1, RECall", _veh, isRemoteExecuted], __FILE__, [false]] call btc_fnc_debug_message; - }; -}; +if (_veh getVariable ["btc_fnc_patrol_eh_fired", false]) exitWith {}; if (btc_debug_log) then { [format ["%1, isRE %2", _veh, isRemoteExecuted], __FILE__, [false]] call btc_fnc_debug_message; }; +_veh setVariable ["btc_fnc_patrol_eh_fired", true, true]; + if (_veh isEqualType objNull) then { if (btc_debug) then { deleteMarker format ["Patrol_fant_%1", (_veh getVariable ["btc_crews", grpNull]) getVariable ["btc_patrol_id", 0]]; }; - _veh call btc_fnc_patrol_eh_remove; [[], [_veh, _veh getVariable ["btc_crews", grpNull]]] call btc_fnc_delete; } else { - (assignedVehicle leader _veh) call btc_fnc_patrol_eh_remove; - [[], [assignedVehicle leader _veh, _veh]] call btc_fnc_delete; + private _vehicle = (assignedVehicle leader _veh); + _vehicle setVariable ["btc_fnc_patrol_eh_fired", true, true]; + [[], [_vehicle, _veh]] call btc_fnc_delete; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh_remove.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh_remove.sqf deleted file mode 100644 index b61cef028..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh_remove.sqf +++ /dev/null @@ -1,31 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_patrol_eh_remove - -Description: - Remove events. - -Parameters: - _veh - Object with events. [Object] - -Returns: - _bool - Events ID found. [Boolean] - -Examples: - (begin example) - [cursorTarget] call btc_fnc_patrol_eh_remove; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_veh", objNull, [objNull]] -]; - -[_veh, "Fuel", "btc_fnc_patrol_eh"] call btc_fnc_eh_removePersistOnLocalityChange; -[_veh, "GetOut", "btc_fnc_patrol_eh"] call btc_fnc_eh_removePersistOnLocalityChange; -[_veh, "HandleDamage", "btc_fnc_patrol_disabled"] remoteExecCall ["btc_fnc_eh_removePersistOnLocalityChange", _veh]; -[_veh, "HandleDamage", "btc_fnc_rep_hd"] remoteExecCall ["btc_fnc_eh_removePersistOnLocalityChange", _veh]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf deleted file mode 100644 index aedc8e539..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/add_eh.sqf +++ /dev/null @@ -1,28 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_rep_add_eh - -Description: - Add event handler link to the reputation system to a unit not initialised. - -Parameters: - _civilian - Unit. [Object] - -Returns: - -Examples: - (begin example) - [curosrTarget] call btc_fnc_rep_add_eh; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_civilian", objNull, [objNull]] -]; - -[_civilian, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; -[_civilian, "FiredNear", "btc_fnc_rep_firednear"] call btc_fnc_eh_persistOnLocalityChange; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf index 728e0e02f..c4ed416a9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf @@ -38,11 +38,11 @@ if (time > (btc_rep_militia_called + btc_rep_militia_call_time)) then { }; if (btc_global_reputation < 300) then { if (_random > 4) then { //GET WEAPONS - [_pos, 300] call btc_fnc_civ_get_weapons; + [btc_fnc_civ_get_weapons, [_pos, 300]] call CBA_fnc_execNextFrame; }; } else { if (_random > 1) then { //GET GRENADE - [_pos, 300] call btc_fnc_civ_get_grenade; + [btc_fnc_civ_get_grenade, [_pos, 300]] call CBA_fnc_execNextFrame; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf index 904f66019..36a7e0c4e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf @@ -40,14 +40,13 @@ params [ if (_ammo isKindOf "SmokeShell") exitWith {}; -//Remove the eventHandler to prevent spamming -[_civ, "FiredNear", "btc_fnc_rep_firednear"] call btc_fnc_eh_removePersistOnLocalityChange; +_civ removeEventHandler ["FiredNear", _thisEventHandler]; -if (!(side _civ isEqualTo civilian) || (random 3 < 1)) exitWith {}; +if (!(side group _civ isEqualTo civilian) || (random 3 < 1)) exitWith {}; [_civ, selectRandom ["ApanPknlMstpSnonWnonDnon_G01", "ApanPknlMstpSnonWnonDnon_G02", "ApanPknlMstpSnonWnonDnon_G03", "ApanPpneMstpSnonWnonDnon_G01", "ApanPpneMstpSnonWnonDnon_G02", "ApanPpneMstpSnonWnonDnon_G03"], 1] call ace_common_fnc_doAnimation; -if (side _gunner isEqualTo btc_player_side) then { +if (side group _gunner isEqualTo btc_player_side) then { if ((_gunner findNearestEnemy getPos _civ) distance _civ > 300) then { if (abs((_gunner getDir _civ) - getDir _gunner) < 300/_distance) then { [btc_rep_malus_civ_firenear, _gunner] call btc_fnc_rep_change; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 776eed13f..241e6b1dd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -32,10 +32,13 @@ params [ ["_ammo", "", [""]] ]; +if !(side group _unit isEqualTo civilian) exitWith {_dam}; + if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_steering", "wheel_2_2_steering", "palivo", "engine", "glass1", "glass2", "glass3", "glass4", "karoserie", "palivo", "fuel_hitpoint", "engine_hitpoint", "body_hitpoint"]) then { if (isPlayer _injurer && {_dam > 0.01}) then { if (!isServer) exitWith { _this remoteExecCall ["btc_fnc_rep_hd", 2]; + _dam }; [btc_rep_malus_civ_hd, _injurer] call btc_fnc_rep_change; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf deleted file mode 100644 index b3fe49fc4..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/remove_eh.sqf +++ /dev/null @@ -1,28 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_rep_remove_eh - -Description: - Remove event to civilian. - -Parameters: - _civilian - Civilian. [Object] - -Returns: - -Examples: - (begin example) - [cursorObject] call btc_fnc_rep_remove_eh; - (end) - -Author: - Giallustio - ----------------------------------------------------------------------------- */ - -params [ - ["_civilian", objNull, [objNull]] -]; - -[_civilian, "FiredNear", "btc_fnc_rep_firednear"] call btc_fnc_eh_removePersistOnLocalityChange; -[_civilian, "HandleDamage", "btc_fnc_rep_hd"] remoteExecCall ["btc_fnc_eh_removePersistOnLocalityChange", _civilian]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/treatment.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/treatment.sqf index d54d11bab..a35ca9a8c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/treatment.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/treatment.sqf @@ -31,6 +31,10 @@ params [ ]; if (isPlayer _target) exitWith {}; -if ((alive _target) && (side _target isEqualTo civilian) && !(_className in ["CheckPulse", "CheckBloodPressure", "CheckResponse"])) then { +if ( + alive _target && + side group _target isEqualTo civilian && + !(_className in ["CheckPulse", "CheckBloodPressure", "CheckResponse"]) +) then { _this remoteExecCall ["btc_fnc_rep_hh", 2]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment.sqf index 5cfdb0245..8940f6257 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment.sqf @@ -77,7 +77,6 @@ private _unit =_group createUnit [_unit_type, _pos, [], 0, "CAN_COLLIDE"]; _unit setBehaviour "CARELESS"; _unit setDir (random 360); _unit setUnitPos "DOWN"; -[_group] call btc_fnc_civ_unit_create; [_taskID, 8, _unit, [_city getVariable "name", _unit_type]] call btc_fnc_task_create; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf index 05997f7ea..c2e018499 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/civtreatment_boat.sqf @@ -57,8 +57,6 @@ waitUntil {sleep 5; (_taskID call BIS_fnc_taskCompleted || !(playableUnits inAre [_unit] call btc_fnc_set_damage; -[_group] call btc_fnc_civ_unit_create; - waitUntil {sleep 5; (_taskID call BIS_fnc_taskCompleted || !alive _unit || {_unit call ace_medical_status_fnc_isInStableCondition && [_unit] call ace_common_fnc_isAwake})}; [[], [_veh, _group]] call btc_fnc_delete; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf index a5e57705e..118044acc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hostage.sqf @@ -55,7 +55,6 @@ private _civType = selectRandom btc_civ_type_units; private _captive = _group_civ createUnit [_civType, _pos, [], 0, "CAN_COLLIDE"]; waitUntil {local _captive}; [_captive, true] call ACE_captives_fnc_setHandcuffed; -[_group_civ] call btc_fnc_civ_unit_create; //// Data side mission [_taskID, 15, _captive, [_city getVariable "name", _civType]] call btc_fnc_task_create; From 4d89ef824dfe771719f21fe08a48f80e9feab266 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 27 May 2020 13:35:11 +0200 Subject: [PATCH 093/264] To much space --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf | 1 - =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf index 6fefe2c0e..b3f9eefe0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf @@ -58,7 +58,6 @@ if (isNil {_cache getVariable "btc_hd_cache"} && {_explosive} && {_damage > 0.6} private _marker = createMarker [format ["btc_cache_%1", btc_cache_n], btc_cache_pos]; _marker setMarkerType "hd_destroy"; [_marker, "STR_BTC_HAM_O_EH_HDCACHE_MRK", btc_cache_n] remoteExecCall ["btc_fnc_set_markerTextLocal", [0, -2] select isDedicated, _marker]; //Cached %1 destroyed - _marker setMarkerSize [1, 1]; _marker setMarkerColor "ColorRed"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 776eed13f..541f71fe1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -33,7 +33,7 @@ params [ ]; if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_steering", "wheel_2_2_steering", "palivo", "engine", "glass1", "glass2", "glass3", "glass4", "karoserie", "palivo", "fuel_hitpoint", "engine_hitpoint", "body_hitpoint"]) then { - if (isPlayer _injurer && {_dam > 0.01}) then { + if (isPlayer _injurer && {_dam > 0.01}) then { if (!isServer) exitWith { _this remoteExecCall ["btc_fnc_rep_hd", 2]; }; From caf90878a6d4f7a57b2f93de8f86ad6f61453309 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 28 May 2020 12:40:35 +0200 Subject: [PATCH 094/264] Add btc_delay_vehicleInit event --- .../core/fnc/civ/create_patrol.sqf | 9 +---- .../core/fnc/compile.sqf | 1 + .../core/fnc/data/spawn_group.sqf | 2 +- .../core/fnc/delay/createVehicle.sqf | 7 +--- .../core/fnc/eh/server.sqf | 1 + .../core/fnc/mil/createVehicle.sqf | 3 +- .../core/fnc/mil/create_patrol.sqf | 6 +--- .../core/fnc/mil/create_static.sqf | 2 +- .../core/fnc/patrol/addEH.sqf | 36 +++++++++++++++++++ .../core/fnc/rep/eh_effects.sqf | 4 +-- .../core/fnc/side/capture_officer.sqf | 2 +- .../core/fnc/side/convoy.sqf | 2 +- 12 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index b2f6dbe2f..ab2fe4e71 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -63,14 +63,7 @@ _group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_civilian_id, btc_debug]; btc_civilian_id = btc_civilian_id - 1; -private _delay = [_group, _veh_type, [selectRandom btc_civ_type_units], _safe_pos, { - params ["_veh", "_group"]; - _veh setVariable ["btc_crews", _group]; - [_veh, "Fuel", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; - [_veh, "GetOut", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; - [_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; - [_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; -}] call btc_fnc_delay_createVehicle; +private _delay = [_group, _veh_type, [selectRandom btc_civ_type_units], _safe_pos] call btc_fnc_delay_createVehicle; [{ _this call btc_fnc_patrol_init; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index edfd0dac7..835f782d3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -131,6 +131,7 @@ if (isServer) then { btc_fnc_patrol_init = compile preprocessFileLineNumbers "core\fnc\patrol\init.sqf"; btc_fnc_patrol_addWP = compile preprocessFileLineNumbers "core\fnc\patrol\addWP.sqf"; btc_fnc_patrol_eh = compile preprocessFileLineNumbers "core\fnc\patrol\eh.sqf"; + btc_fnc_patrol_addEH = compile preprocessFileLineNumbers "core\fnc\patrol\addEH.sqf"; //REP btc_fnc_rep_call_militia = compile preprocessFileLineNumbers "core\fnc\rep\call_militia.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 5331b4873..933df9794 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -55,7 +55,7 @@ if (_type isEqualTo 7) exitWith { private _group = createGroup _side; private _delay = 0; if (_type isEqualTo 1) then { - _delay = [_group, _array_veh select 0, _array_type, _array_veh select 1, {}, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; + _delay = [_group, _array_veh select 0, _array_type, _array_veh select 1, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; } else { for "_i" from 0 to (count _array_pos - 1) do { [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index 9a8689ec4..d846f5423 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -10,7 +10,6 @@ Parameters: _vehicle_type - Vehicle type. [String] _units_type - Array of unit type will be use to fill the vehicle. [Array] _position - Position of creation. [Array] - _code - Code to apply on vehicle after creation. [Code] _direction - Direction of spawn. [Number] _fuel - Fuel level. [Array] _p_chem - Allow chemical propagation. [Boolean] @@ -37,7 +36,6 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ["_vehicle_type", "", [""]], ["_units_type", [], [[]]], ["_position", [0, 0, 0], [[]]], - ["_code", {}, [{}]], ["_direction", 0, [0]], ["_fuel", 1, [0]], ["_p_chem", btc_p_chem, [false]] @@ -82,15 +80,12 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; _group selectLeader (driver _veh); (units _group) joinSilent _group; - if !(_code isEqualTo {}) then { - [_veh, _group] call _code; - }; - private _crews_and_turret = _crews + _turretCount + _cargoCount; for "_i" from _crews to ((_crews_and_turret min _numberOfUnits) - 1) do { [_group, _units_type select _i, _position, "CAN_COLLIDE", _veh] call btc_fnc_delay_createUnit; }; + ["btc_delay_vehicleInit", [_veh, _group]] call CBA_fnc_localEvent; btc_delay_createUnit = btc_delay_createUnit - 0.3; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 23f5212f1..25457a30a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -43,3 +43,4 @@ if (btc_p_chem) then { if (btc_p_set_skill) then { ["CAManBase", "init", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; }; +["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index e1b27b9da..73d4b41c3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -9,7 +9,6 @@ Parameters: _group - Group to store crews. [Group] _pos - Position of creation. [Array] _veh_type - Vehicle type. [String] - _code - Code to apply on vehicle after creation. [Code] _dir - Direction of spawn. [Number] _type_units - Array of available unit type for cargo. [Array] _type_divers - Units used for submarine. [Array] @@ -59,4 +58,4 @@ for "_i" from _crewSeats to (_totalSeats - 1) do { _units_type pushBack selectRandom _type_units; }; -[_group, _veh_type, _units_type, _pos, _code, _dir] call btc_fnc_delay_createVehicle +[_group, _veh_type, _units_type, _pos, _dir] call btc_fnc_delay_createVehicle diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index e8109e66d..18f7d787c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -90,11 +90,7 @@ private _delay = switch (_random) do { _pos = getPos selectRandom _roads; }; }; - [_group, _pos, _veh_type, { - params ["_veh", "_group"]; - _veh setVariable ["btc_crews", _group]; - [_veh, "Fuel", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; - }] call btc_fnc_mil_createVehicle + [_group, _pos, _veh_type] call btc_fnc_mil_createVehicle }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf index 0b38e23a4..03cc3055b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf @@ -30,7 +30,7 @@ params [ ]; private _group = createGroup btc_enemy_side; -[_group, _pos, selectRandom _statics_type, {}, _dir] call btc_fnc_mil_createVehicle; +[_group, _pos, selectRandom _statics_type, _dir] call btc_fnc_mil_createVehicle; _group setBehaviour "COMBAT"; _group setCombatMode "RED"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf new file mode 100644 index 000000000..61e1e7b65 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf @@ -0,0 +1,36 @@ +/* ---------------------------------------------------------------------------- +Function: btc_fnc_patrol_addEH + +Description: + Add events link to the patrol system. + +Parameters: + _veh - Vehicle. [Object] + _group - Group to store crews. [Group] + +Returns: + +Examples: + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_veh", objNull, [objNull]], + ["_group", grpNull, [grpNull]] +]; + +if ( + !(_group in btc_civ_veh_active) && + {!(_group in btc_patrol_active)} +) exitWith {}; + +_veh setVariable ["btc_crews", _group]; +[_veh, "Fuel", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; +if (side _group isEqualTo civilian) then { + [_veh, "GetOut", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; + [_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; + [_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf index c4ed416a9..0ee500de8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/eh_effects.sqf @@ -38,11 +38,11 @@ if (time > (btc_rep_militia_called + btc_rep_militia_call_time)) then { }; if (btc_global_reputation < 300) then { if (_random > 4) then { //GET WEAPONS - [btc_fnc_civ_get_weapons, [_pos, 300]] call CBA_fnc_execNextFrame; + [btc_fnc_civ_get_weapons, [_pos, 300], 5] call CBA_fnc_waitAndExecute; }; } else { if (_random > 1) then { //GET GRENADE - [btc_fnc_civ_get_grenade, [_pos, 300]] call CBA_fnc_execNextFrame; + [btc_fnc_civ_get_grenade, [_pos, 300], 5] call CBA_fnc_waitAndExecute; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index a45d9e506..50456cf1d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -73,7 +73,7 @@ _group setVariable ["no_cache", true]; private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; private _delay = 0; for "_i" from 0 to (1 + round random 1) do { - _delay = _delay + ([_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); + _delay = _delay + ([_group, _pos1, selectRandom _veh_types, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 9f143fce2..fbfc38955 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -74,7 +74,7 @@ private _vehs = []; private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; private _delay = 0; for "_i" from 0 to (2 + round random 2) do { - _delay = _delay + ([_group, _pos1, selectRandom _veh_types, {}, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); + _delay = _delay + ([_group, _pos1, selectRandom _veh_types, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); _road = (roadsConnectedTo _road) select 0; _pos1 = getPosATL _road; From 6f1115dedc2bafa355d6e7e3b89620a46fb0eeff Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 28 May 2020 15:21:26 +0200 Subject: [PATCH 095/264] Clean up interaction --- .../core/fnc/eh/veh_init.sqf | 29 ++++-------------- .../core/fnc/int/add_actions.sqf | 30 +++++++++---------- 2 files changed, 20 insertions(+), 39 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index e58875f46..e96e03c4e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -29,24 +29,15 @@ if ((btc_actions_veh pushBackUnique _type) isEqualTo -1) exitWith {}; switch true do { case (_type isKindOf "UGV_02_Base_F") : {}; - case (_type isKindOf "StaticWeapon") : { + case (_type isKindOf "StaticWeapon") : {}; + case (_type isKindOf "LandVehicle" || {_type isKindOf "Ship"}) : { private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; + _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {_target call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != _target} && {[_target, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {_target call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - }; - case (_type isKindOf "LandVehicle") : { - private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; + _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {_target call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; }; case (_type isKindOf "Helicopter") : { @@ -58,14 +49,4 @@ switch true do { _action = ["Cut_ropes", localize "STR_ACE_Fastroping_Interaction_cutRopes", "\z\ace\addons\logistics_wirecutter\ui\wirecutter_ca.paa", {[] call btc_fnc_lift_destroyRopes;}, {btc_ropes_deployed && {(driver vehicle player) isEqualTo player}}] call ace_interact_menu_fnc_createAction; [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; }; - case (_type isKindOf "Ship") : { - private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_ropeCreate;}, {!isNull btc_log_vehicle_selected && {btc_log_vehicle_selected != (_this select 0)} && {[_this select 0, btc_log_vehicle_selected] call btc_fnc_tow_check}}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_HOOK", "\z\ace\addons\attach\UI\attach_ca.paa", {(_this select 0) call btc_fnc_tow_hook;}, {true}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["log_hook", localize "STR_BTC_HAM_ACTION_VEHINIT_UHOOK", "\z\ace\addons\attach\UI\detach_ca.paa", {(_this select 0) call btc_fnc_tow_unhook;}, {true}] call ace_interact_menu_fnc_createAction; - [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; - }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 49007055b..c01dfbccd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -31,10 +31,10 @@ _action = ["request_delete", localize "STR_3DEN_Delete", "\A3\ui_f\data\igui\cfg //Intel _action = ["Search_intel", localize "STR_A3_Showcase_Marksman_BIS_tskIntel_title", "\A3\ui_f\data\igui\cfg\simpleTasks\types\search_ca.paa", { - [btc_fnc_info_search_for_intel, [_this select 0]] call CBA_fnc_execNextFrame; -}, {!alive (_this select 0)}] call ace_interact_menu_fnc_createAction; + [btc_fnc_info_search_for_intel, [_target]] call CBA_fnc_execNextFrame; +}, {!alive _target}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); -_action = ["Interrogate_intel", localize "STR_BTC_HAM_ACTION_INTEL_INTERROGATE", "\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa", {[(_this select 0),true] spawn btc_fnc_info_ask;}, {alive (_this select 0) && {[_this select 0] call ace_common_fnc_isAwake} && captive (_this select 0)}] call ace_interact_menu_fnc_createAction; +_action = ["Interrogate_intel", localize "STR_BTC_HAM_ACTION_INTEL_INTERROGATE", "\a3\Ui_f\data\GUI\Cfg\CommunicationMenu\instructor_ca.paa", {[_target,true] spawn btc_fnc_info_ask;}, {alive _target && {[_target] call ace_common_fnc_isAwake} && captive _target}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); //Log point @@ -58,23 +58,23 @@ _action = ["Require_delete", localize "STR_3DEN_Delete", "\z\ace\addons\arsenal\ //Logistic _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach btc_log_def_loadable; -_action = ["Place", localize "STR_ACE_Dragging_Carry", "\z\ace\addons\dragging\UI\icons\box_carry.paa", {(_this select 0) call btc_fnc_log_place}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; +_action = ["Place", localize "STR_ACE_Dragging_Carry", "\z\ace\addons\dragging\UI\icons\box_carry.paa", {_target call btc_fnc_log_place}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach btc_log_def_placeable; //Shower -_action = ["Shower_act", getText(configfile >> "CfgVehicles" >> "DeconShower_01_F" >> "UserActions" >> "Activate" >> "displayName"), "", {player playActionNow 'PutDown'; [_this select 0, 1.5, 9] remoteExec ["BIN_fnc_deconShowerAnim", 0]}, {alive (_this select 0) AND {(_this select 0) animationSourcePhase 'valve_source' isEqualTo 0}}] call ace_interact_menu_fnc_createAction; +_action = ["Shower_act", getText(configfile >> "CfgVehicles" >> "DeconShower_01_F" >> "UserActions" >> "Activate" >> "displayName"), "", {player playActionNow 'PutDown'; [_target, 1.5, 9] remoteExec ["BIN_fnc_deconShowerAnim", 0]}, {alive _target AND {_target animationSourcePhase 'valve_source' isEqualTo 0}}] call ace_interact_menu_fnc_createAction; ["DeconShower_01_F", 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; -_action = ["Shower_act", getText(configfile >> "CfgVehicles" >> "DeconShower_02_F" >> "UserActions" >> "Activate" >> "displayName"), "", {player playActionNow 'PutDown'; [_this select 0, 5.4, 4, 2, true] remoteExec ["BIN_fnc_deconShowerAnimLarge", 0]}, {alive (_this select 0) AND {(_this select 0) animationSourcePhase 'valve_source' isEqualTo 0}}] call ace_interact_menu_fnc_createAction; +_action = ["Shower_act", getText(configfile >> "CfgVehicles" >> "DeconShower_02_F" >> "UserActions" >> "Activate" >> "displayName"), "", {player playActionNow 'PutDown'; [_target, 5.4, 4, 2, true] remoteExec ["BIN_fnc_deconShowerAnimLarge", 0]}, {alive _target AND {_target animationSourcePhase 'valve_source' isEqualTo 0}}] call ace_interact_menu_fnc_createAction; ["DeconShower_02_F", 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; { - _action = ["Shower_desact", getText(configfile >> "CfgVehicles" >> "DeconShower_01_F" >> "UserActions" >> "Deactivate" >> "displayName"), "", {player playActionNow 'PutDown'; [_this select 0] remoteExecCall ["BIN_fnc_deconShowerAnimStop", 0]}, {alive (_this select 0) AND {(_this select 0) animationSourcePhase 'valve_source' > 0}}] call ace_interact_menu_fnc_createAction; + _action = ["Shower_desact", getText(configfile >> "CfgVehicles" >> "DeconShower_01_F" >> "UserActions" >> "Deactivate" >> "displayName"), "", {player playActionNow 'PutDown'; [_target] remoteExecCall ["BIN_fnc_deconShowerAnimStop", 0]}, {alive _target AND {_target animationSourcePhase 'valve_source' > 0}}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; } forEach ["DeconShower_01_F", "DeconShower_02_F"]; //FOB -_action = ["Mount_FOB", localize "STR_BTC_HAM_ACTION_FOB_MOUNT", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {(_this select 0) spawn btc_fnc_fob_create}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; +_action = ["Mount_FOB", localize "STR_BTC_HAM_ACTION_FOB_MOUNT", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {_target spawn btc_fnc_fob_create}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; [btc_fob_mat, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; -_action = ["Dismantle_FOB", localize "STR_BTC_HAM_ACTION_FOB_DISMANTLE", "", {(_this select 0) remoteExecCall ["btc_fnc_fob_dismantle_s", 2]}, {true}, {}, [], [0, 0, -2], 5] call ace_interact_menu_fnc_createAction; +_action = ["Dismantle_FOB", localize "STR_BTC_HAM_ACTION_FOB_DISMANTLE", "", {_target remoteExecCall ["btc_fnc_fob_dismantle_s", 2]}, {true}, {}, [], [0, 0, -2], 5] call ace_interact_menu_fnc_createAction; [btc_fob_flag, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; //Orders @@ -91,17 +91,17 @@ _action = ["Civil_Go_away", localize "STR_BTC_HAM_ACTION_ORDERS_GOAWAY", "\A3\ui { //Actions attachted to AI _action = ["Civil_Orders", localize "STR_BTC_HAM_ACTION_ORDERS_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Civil_taxi", localize "STR_BTC_HAM_ACTION_ORDERS_TAXI", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk4_ca.paa", {[4, (_this select 0)] call btc_fnc_int_orders;}, {(alive (_this select 0)) && !((vehicle (_this select 0)) isEqualTo (_this select 0))}] call ace_interact_menu_fnc_createAction; + _action = ["Civil_taxi", localize "STR_BTC_HAM_ACTION_ORDERS_TAXI", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk4_ca.paa", {[4, _target] call btc_fnc_int_orders;}, {(alive _target) && !((vehicle _target) isEqualTo _target)}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions", "Civil_Orders"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Civil_Stop", localize "STR_BTC_HAM_ACTION_ORDERS_STOP", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk3_ca.paa", {[1, (_this select 0)] call btc_fnc_int_orders;}, {alive (_this select 0)}] call ace_interact_menu_fnc_createAction; + _action = ["Civil_Stop", localize "STR_BTC_HAM_ACTION_ORDERS_STOP", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk3_ca.paa", {[1, _target] call btc_fnc_int_orders;}, {alive _target}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions", "Civil_Orders"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Civil_Get_down", localize "STR_BTC_HAM_ACTION_ORDERS_GETDOWN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk2_ca.paa", {[2, (_this select 0)] call btc_fnc_int_orders;}, {alive (_this select 0)}] call ace_interact_menu_fnc_createAction; + _action = ["Civil_Get_down", localize "STR_BTC_HAM_ACTION_ORDERS_GETDOWN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk2_ca.paa", {[2, _target] call btc_fnc_int_orders;}, {alive _target}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions", "Civil_Orders"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Civil_Go_away", localize "STR_BTC_HAM_ACTION_ORDERS_GOAWAY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk1_ca.paa", {[3, (_this select 0)] call btc_fnc_int_orders;}, {alive (_this select 0)}] call ace_interact_menu_fnc_createAction; + _action = ["Civil_Go_away", localize "STR_BTC_HAM_ACTION_ORDERS_GOAWAY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk1_ca.paa", {[3, _target] call btc_fnc_int_orders;}, {alive _target}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions", "Civil_Orders"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Ask_Info", localize "STR_BTC_HAM_ACTION_ORDERS_ASKINFO", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa", {[(_this select 0),false] spawn btc_fnc_info_ask;}, {alive (_this select 0) && {[_this select 0] call ace_common_fnc_isAwake} && {side (_this select 0) isEqualTo civilian}}] call ace_interact_menu_fnc_createAction; + _action = ["Ask_Info", localize "STR_BTC_HAM_ACTION_ORDERS_ASKINFO", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa", {[_target,false] spawn btc_fnc_info_ask;}, {alive _target && {[_target] call ace_common_fnc_isAwake} && {side _target isEqualTo civilian}}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; - _action = ["Ask_Reputation", localize "STR_BTC_HAM_ACTION_ORDERS_ASKREP", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa", {[_this select 0] spawn btc_fnc_info_ask_reputation;}, {alive (_this select 0) && {[_this select 0] call ace_common_fnc_isAwake} && {side (_this select 0) isEqualTo civilian}}] call ace_interact_menu_fnc_createAction; + _action = ["Ask_Reputation", localize "STR_BTC_HAM_ACTION_ORDERS_ASKREP", "\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa", {[_target] spawn btc_fnc_info_ask_reputation;}, {alive _target && {[_target] call ace_common_fnc_isAwake} && {side _target isEqualTo civilian}}] call ace_interact_menu_fnc_createAction; [_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; //remove ace3 "get down" order From 5f098f7c7936ac86f0cc15f12d2ea31a43951378 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Fri, 29 May 2020 16:00:22 +0800 Subject: [PATCH 096/264] Update: Simplified Chinese Translation for BI Respawn(#825) Update: Simplified Chinese Translation for BI Respawn(#825) --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index dc760d15d..58dbe1e28 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -116,7 +116,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署:</marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除:</marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB: </marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_ft_owned.jpg' width='355' height='180'/> <br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署: </marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除: </marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>集合点: </marker><br/> 你也可以使用军火库中的宙斯集合点背包,但是它们有使用限制。在玩家离线一段时间后,集合点将会自毁。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> @@ -459,27 +459,35 @@ << Respawn options >> + << 重生选项 >> Respawn locations available: + 可用的重生位置 FOB and Rallypoint + FOB 和 集合点 FOB, Rallypoint and Helo + FOB、集合点和直升飞机 FOB, Rallypoint and Transport helicopter + FOB、集合点和运输直升机 FOB, Rallypoint, Transport helicopter and Transport vehicle + FOB、集合点、运输直升机和运输车辆 Time before rallypoint self-destruction: + 集合点自毁时间: ACE Arsenal available on respawn after been killed: + ACE军火库在玩家死亡重生后可用: @@ -1718,15 +1726,19 @@ This rallypoint will self-destruct in %1min. + 该集合点将在 %1 分钟后自毁。 Can't redeploy, + 无法重新部署, you need to be stabilized + 需要稳定伤势 you need to have a splint + 需要佩戴固定夹板 From 12b468a49d0a89a5f4f683b4df6f9139aa3ae285 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Fri, 29 May 2020 19:42:14 +0800 Subject: [PATCH 097/264] Fix: Add Simplified Chinese Translation for #849, #870, #876 Fix: Add Simplified Chinese Translation for #849, #870, #876 --- .../stringtable.xml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 58dbe1e28..633ce4f1c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -116,7 +116,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB: </marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_ft_owned.jpg' width='355' height='180'/> <br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署: </marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除: </marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>集合点: </marker><br/> 你也可以使用军火库中的宙斯集合点背包,但是它们有使用限制。在玩家离线一段时间后,集合点将会自毁。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB: </marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_ft_owned.jpg' width='355' height='180'/> <br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署: </marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除: </marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>集合点: </marker><br/> 你也可以使用军火库中的宙斯集合点背包, 但是它们有使用限制。在玩家离线一段时间后, 集合点将会自毁。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> @@ -194,7 +194,7 @@ Cualquier jugador puede dar órdenes a civiles.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para ello, sólo tienes que abrir el menú de auto-interacción y seleccionar `ORDENES' o utilizar uno de los accesos directos. Los accesos directos pueden cambiarse en 'configuración'. >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (menu desplegable).<br/> Tus opciones son:<br/> - ALTO<br/> - AGACHATE<br/> - FUERA DE AQUI<br/><br/> Si quieres dar una orden a una sola unidad, interactúa con ella (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> También puede tirar panfletos para pedir a todos los civiles en un círculo de 200 metros que evacuen a un edificio religioso (si no está disponible un área segura) con un drone<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> Jeder Spieler kann einem Zivlisten Anweisungen geben.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Dies geht recht einfach in dem man das Eigen-Interaktionsmenü öffnet und dann 'BEFEHLE(ZIVILISTEN)' auswählt. Oder in dem man Kurztasten nutzt. Diese können unter 'Konfigurieren' >> 'Steuerung' >> 'Modifikationen anpassen' >> Hearts and Minds: Mission' (Drop-Down-Menü) geändert werden.<br/><br/> Folgende Optionen stehen zur Verfügung:<br/> - STOPP!<br/> - AUF DEN BODEN!<br/> - GEH WEG!<br/><br/> Wenn Sie einen Befehl an eine bestimmte Person geben wollen, so können Sie auch direkt mir dieser Interagieren (ACE Objekt-Interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Sie können mithilfe einer Drohne Broschüren abwerfen, um die Zivilisten im Umkreis von ca. 200 m aufzufordern, sich in dem nächsten religiösen Gebäude einzufinden (sollte kein Gebäude vorhanden sein, so wird ein sicherer Bereich festgelegt).<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> Qualquer jogador pode dar instruções a um civil.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para fazer isso, basta abrir o menu de interação do civil e selecionar a opção "ORDENS" ou usar tecla de atalho. Atalhos podem ser alterados no menu "CONFIGURAÇÃO" >> "CONTROLES" >> "CONFIGURAR COMPLEMENTOS (ADDONS)" >> Corações e Mentes: Missão (Menu suspenso).<br/><br/> As seguintes opções estão disponíveis: <br/> - PARE!<br/> - DEITADO!<br/> - VÁ EMBORA!<br/><br/> Se você quiser dar uma ordem para apenas uma unidade, interaja com ela (interação do objeto ACE).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Você pode usar um drone para soltar panfletos solicitando que civis, dentro de um raio de 200m, se abriguem em um prédio religioso mais próximo (se não houver prédio, uma área segura será definida).<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> - 玩家可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> + 任何玩家都可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> @@ -222,7 +222,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, respirator mask and breather backpack) for full protection from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> Simple mask and simple uniform can reduce from 65% to 80% the probability to take damage.<img image='\A3\Data_F_Orange\Images\Respirator_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装、口罩、面具和呼吸器背包)可以保护您完全免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。普通的面具和制服会将受到伤害的可能性减免60%至80%。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> @@ -483,11 +483,11 @@ Time before rallypoint self-destruction: - 集合点自毁时间: + 集合点自毁时间: ACE Arsenal available on respawn after been killed: - ACE军火库在玩家死亡重生后可用: + ACE军火库在玩家死亡重生后可用: @@ -662,6 +662,7 @@ Show reputation change: + 显示声誉变化: Spawn city radius offset: @@ -1237,15 +1238,19 @@ Remove rubbish in %1 + 清除 %1 地区的垃圾 Civilian population reported many rubbish on road making driving difficult around %1. They are requesting your help to remove them with a Nemmera. + 平民报告称 %1 附近的道路上有许多垃圾, 导致行车困难。平民请求您派遣豹式装甲车(Nemmera)来清除这些垃圾。 Rubbish spotted + 垃圾目击地点 A civilian spotted this rubbish as particularly annoying while driving. + 一位平民发现这些垃圾非常阻碍行车。 @@ -1730,7 +1735,7 @@ Can't redeploy, - 无法重新部署, + 无法重新部署, you need to be stabilized From e93f61126cfd679185fc8dce22f19a81f2b9ab12 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Fri, 29 May 2020 19:42:14 +0800 Subject: [PATCH 098/264] Fix: Add Simplified Chinese Translation for #849, #870, #876 Fix: Add Simplified Chinese Translation for #849, #870, #876 --- .../stringtable.xml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 58dbe1e28..e4ba77494 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -116,7 +116,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> En esta misión un FOB es un punto de respawn avanzado, para crear un FOB se aproxima a la caja roja en el punto logístico y requiere un contenedor azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> Muévelo donde quieras desplegar un nuevo FOB e interactúa con él para configurarlo. Tenga en cuenta que no puede desplegar un FOB cerca de la base principal (2.500m) y el terreno debe ser plano.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> Puede desmontar un FOB interactuando con la bandera en el techo del HQ.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Eine FOB (Forward Operating Base / vorgeschobene Operationsbasis) dient in dieser Mission als Spawn-Punkt. Um eine FOB zu erstellen muss am Logistikpunkt ein ensprechnender Frachtcontainer(Blau) angefordert werden<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Aufbau:</marker> <br/> Der Aufbau kann nur statfinden, wenn man sich mindestens 2,5km von der Basis entfernt hat und das Gelände relativ flach ist. Um den Aufbau zu beginnen: einfach mit dem Frachtcontainer interagieren und 'FOB aufbauen' auswählen.<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abbau:</marker> <br/> Auf dem Dach der FOB kann man mit der Flagge interagieren um den Abbau zu beginnen.<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>Sammelpunkt:</marker><br/> Nutzen Sie den im Arsenal erhältlichen Lager-Rucksack aus dem Zeus-DLC. Die Anzahl der Respawns bei den Sammelpunkten ist beschränkt.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB:</marker><br/> Nesta missão, uma FOB é um ponto de surgimento. Para criar uma FOB, aproxime-se da caixa vermelha no ponto logístico, solicite um container azul.<br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>Deploy:</marker> <br/> A construção só pode acontecer se você se deslocar 2.500m da FOB principal e o terreno deve ser plano. Para começar a criar a nova FOB, basta interagir com o cônteiner e selecionar: "Build FOB" (Criar FOB).<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dismantle:</marker> <br/> No telhado da FOB, você pode interagir com a bandeira para iniciar a desmontagem da FOB.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB: </marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_ft_owned.jpg' width='355' height='180'/> <br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署: </marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除: </marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>集合点: </marker><br/> 你也可以使用军火库中的宙斯集合点背包,但是它们有使用限制。在玩家离线一段时间后,集合点将会自毁。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move1_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\move2_ca.paa' width='20' height='20' /> <marker name='blufor_base'>FOB: </marker><br/> FOB 可作为前线复活点使用。要创建FOB, 请在后勤点申请蓝色货运集装箱。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_ft_owned.jpg' width='355' height='180'/> <br/><br/> - <img image='\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa' width='20' height='20'/> <marker name='blufor_base'>部署: </marker> <br/> 将FOB集装箱移动至部署位置并与其互动即可建造FOB。请谨记: 只有在主基地2500米范围外的地形平坦区域才能建立FOB。<br/><br/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> <marker name='blufor_base'>拆除: </marker> <br/> 你可以与指挥部(HQ)屋顶的旗杆互动, 以拆除FOB。<br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa' width='20' height='20' /> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa' width='20' height='20' /> <marker name='blufor_base'>集合点: </marker><br/> 你也可以使用军火库中的宙斯集合点背包, 但是它们有使用限制。在玩家离线一段时间后, 集合点将会自毁。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureRespawn_co.paa' width='355' height='180'/> @@ -194,7 +194,7 @@ Cualquier jugador puede dar órdenes a civiles.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para ello, sólo tienes que abrir el menú de auto-interacción y seleccionar `ORDENES' o utilizar uno de los accesos directos. Los accesos directos pueden cambiarse en 'configuración'. >> 'controls' >> 'configure addons' >> 'Hearts and Minds: Mission' (menu desplegable).<br/> Tus opciones son:<br/> - ALTO<br/> - AGACHATE<br/> - FUERA DE AQUI<br/><br/> Si quieres dar una orden a una sola unidad, interactúa con ella (ace object interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> También puede tirar panfletos para pedir a todos los civiles en un círculo de 200 metros que evacuen a un edificio religioso (si no está disponible un área segura) con un drone<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> Jeder Spieler kann einem Zivlisten Anweisungen geben.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Dies geht recht einfach in dem man das Eigen-Interaktionsmenü öffnet und dann 'BEFEHLE(ZIVILISTEN)' auswählt. Oder in dem man Kurztasten nutzt. Diese können unter 'Konfigurieren' >> 'Steuerung' >> 'Modifikationen anpassen' >> Hearts and Minds: Mission' (Drop-Down-Menü) geändert werden.<br/><br/> Folgende Optionen stehen zur Verfügung:<br/> - STOPP!<br/> - AUF DEN BODEN!<br/> - GEH WEG!<br/><br/> Wenn Sie einen Befehl an eine bestimmte Person geben wollen, so können Sie auch direkt mir dieser Interagieren (ACE Objekt-Interaction).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Sie können mithilfe einer Drohne Broschüren abwerfen, um die Zivilisten im Umkreis von ca. 200 m aufzufordern, sich in dem nächsten religiösen Gebäude einzufinden (sollte kein Gebäude vorhanden sein, so wird ein sicherer Bereich festgelegt).<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> Qualquer jogador pode dar instruções a um civil.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> Para fazer isso, basta abrir o menu de interação do civil e selecionar a opção "ORDENS" ou usar tecla de atalho. Atalhos podem ser alterados no menu "CONFIGURAÇÃO" >> "CONTROLES" >> "CONFIGURAR COMPLEMENTOS (ADDONS)" >> Corações e Mentes: Missão (Menu suspenso).<br/><br/> As seguintes opções estão disponíveis: <br/> - PARE!<br/> - DEITADO!<br/> - VÁ EMBORA!<br/><br/> Se você quiser dar uma ordem para apenas uma unidade, interaja com ela (interação do objeto ACE).<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Você pode usar um drone para soltar panfletos solicitando que civis, dentro de um raio de 200m, se abriguem em um prédio religioso mais próximo (se não houver prédio, uma área segura será definida).<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> - 玩家可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> + 任何玩家都可以向平民发出指令。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\interact_ca.paa' width='20' height='20'/> 如要向平民发出指令, 只需打开自我互动菜单并选择"命令平民", 或使用已设定的快捷键即可。快捷键可以在"设置" >> "控制设定" >> "模组设定选项" >> "Hearts and Minds: Mission"(下拉菜单) 中进行变更。<br/> 可以使用的命令如下:<br/> - 站住<br/> - 趴下<br/> - 走开<br/><br/> 如果你希望只对某个单位发出指令, 与该单位进行互动即可(ACE物体互动)。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 你也可以使用 AR-2 无人机投放传单, 要求200米范围内的平民疏散至最近的宗教建筑避难(若无宗教建筑, 则前往安全区域)。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\orange_leaflets_overview_ca.paa' width='355' height='200'/> @@ -222,7 +222,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, respirator mask and breather backpack) for full protection from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> Simple mask and simple uniform can reduce from 65% to 80% the probability to take damage.<img image='\A3\Data_F_Orange\Images\Respirator_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装, 面具和呼吸器背包)可以保护您免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装、口罩、面具和呼吸器背包)可以保护您完全免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。普通的面具和制服会将受到伤害的可能性减免60%至80%。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> @@ -471,7 +471,7 @@ FOB, Rallypoint and Helo - FOB、集合点和直升飞机 + FOB、集合点和可重生载具 FOB, Rallypoint and Transport helicopter @@ -483,11 +483,11 @@ Time before rallypoint self-destruction: - 集合点自毁时间: + 集合点自毁时间: ACE Arsenal available on respawn after been killed: - ACE军火库在玩家死亡重生后可用: + ACE军火库在玩家死亡重生后可用: @@ -662,6 +662,7 @@ Show reputation change: + 显示声誉变化: Spawn city radius offset: @@ -1237,15 +1238,19 @@ Remove rubbish in %1 + 清除 %1 地区的垃圾 Civilian population reported many rubbish on road making driving difficult around %1. They are requesting your help to remove them with a Nemmera. + 平民报告称 %1 附近的道路上有许多垃圾, 导致行车困难。平民请求您派遣豹式装甲车(Nemmera)来清除这些垃圾。 Rubbish spotted + 垃圾目击地点 A civilian spotted this rubbish as particularly annoying while driving. + 一位平民发现这些垃圾非常阻碍行车。 @@ -1730,7 +1735,7 @@ Can't redeploy, - 无法重新部署, + 无法重新部署, you need to be stabilized From 65acd459f57f45f1ae3c57010c28c94d42df7e54 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 30 May 2020 16:30:56 +0200 Subject: [PATCH 099/264] Improve syntaxe of ied init --- .../core/fnc/ied/init_area.sqf | 97 ++++--------------- 1 file changed, 20 insertions(+), 77 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf index 2bc297730..d43d31669 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf @@ -31,93 +31,36 @@ params [ private _pos = getPos _city; private _array = _city getVariable ["ieds", []]; -private _active = true; - -for "_i" from 1 to _n do { - private _sel_pos = _pos; - _sel_pos = [_pos, _area] call btc_fnc_randomize_pos; - _sel_pos = [_sel_pos, 30, 150, 1, false] call btc_fnc_findsafepos; - - private _type_ied = selectRandom btc_model_ieds; - - private _dir = random 360; - - if (random 1 > 0.3) then { - private _roads = _sel_pos nearRoads _area; - if !(_roads isEqualTo []) then { +{ + for "_i" from 1 to _n do { + private _sel_pos = _pos; + _sel_pos = [_pos, _area] call btc_fnc_randomize_pos; + private _dir = random 360; + + private _roads = _sel_pos nearRoads 50; + if (_roads isEqualTo []) then { + _sel_pos = [_sel_pos, 0, 100, 1, false] call btc_fnc_findsafepos; + } else { private _obj = selectRandom _roads; private _arr = _obj call btc_fnc_ied_randomRoadPos; _sel_pos = _arr select 0; _dir = _arr select 1; }; - } else { - if (isOnRoad _sel_pos) then { - private _roads = _sel_pos nearRoads 15; - if !(_roads isEqualTo []) then { - private _obj = selectRandom _roads; - if (isNull _obj) exitWith {}; + _array pushBack [_sel_pos, selectRandom btc_model_ieds, _dir, _x]; - private _arr = _obj call btc_fnc_ied_randomRoadPos; - _sel_pos = _arr select 0; - _dir = _arr select 1; - }; + if (btc_debug) then { + private _marker = createMarker [format ["btc_ied_%1", _sel_pos], _sel_pos]; + _marker setMarkerType "mil_warning"; + _marker setMarkerColor (["ColorBlue", "ColorRed"] select _x); + _marker setMarkerText (["IED (fake)", "IED"] select _x); + _marker setMarkerSize [0.8, 0.8]; }; - }; - - - if (btc_debug) then { - private _marker = createMarker [format ["btc_ied_%1", _sel_pos], _sel_pos]; - _marker setMarkerType "mil_warning"; - _marker setMarkerColor "ColorRed"; - _marker setMarkerText "IED"; - _marker setMarkerSize [0.8, 0.8]; - }; - - if (btc_debug_log) then { - [format ["_this = %1 POS %2 N %3(%4)", _this, _sel_pos, _i, _n], __FILE__, [false]] call btc_fnc_debug_message; - }; - - _array pushBack [_sel_pos, _type_ied, _dir, _active]; -}; - -_active = false; - -for "_i" from 1 to _n do { - private _sel_pos = _pos; - _sel_pos = [_pos, _area] call btc_fnc_randomize_pos; - _sel_pos = [_sel_pos, 30, 150, 1, false] call btc_fnc_findsafepos; - - private _type_ied = selectRandom btc_model_ieds; - - private _dir = random 360; - - if (random 1 > 0.3) then { - private _roads = _sel_pos nearRoads _area; - if !(_roads isEqualTo []) then { - private _obj = selectRandom _roads; - - private _arr = _obj call btc_fnc_ied_randomRoadPos; - _sel_pos = _arr select 0; - _dir = _arr select 1; + if (btc_debug_log) then { + [format ["_this = %1 POS %2 N %3(%4)", _this, _sel_pos, _i, _n], __FILE__, [false]] call btc_fnc_debug_message; }; }; - - - if (btc_debug) then { - private _marker = createMarker [format ["btc_ied_%1", _sel_pos], _sel_pos]; - _marker setMarkerType "mil_warning"; - _marker setMarkerColor "ColorBlue"; - _marker setMarkerText "IED (fake)"; - _marker setMarkerSize [0.8, 0.8]; - }; - - if (btc_debug_log) then { - [format ["_this = %1 ; POS %2 ; N %3(%4)", _this, _sel_pos, _i, _n], __FILE__, [false]] call btc_fnc_debug_message; - }; - - _array pushBack [_sel_pos, _type_ied, _dir, _active]; -}; +} forEach [true, false]; _city setVariable ["ieds", _array]; From bf724db371938068c36dc6ac5b8faca8799de09f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 30 May 2020 16:59:08 +0200 Subject: [PATCH 100/264] Improve populate fnc --- .../core/fnc/civ/populate.sqf | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index 213ba1525..ee6ade876 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -24,23 +24,12 @@ Author: params [ ["_city", objNull, [objNull]], - ["_area", 0, [0]], + ["_area", 50, [0]], ["_n", 0, [0]] ]; private _pos = position _city; -private _houses = []; - -for [{_i = 25}, {_i < _area}, {_i = _i + 50}] do { - private _hs = [[(_pos select 0) + _i, (_pos select 1) + _i, 0], 50] call btc_fnc_getHouses; - _houses append _hs; - _hs = [[(_pos select 0) + _i, (_pos select 1) - _i, 0], 50] call btc_fnc_getHouses; - _houses append _hs; - _hs = [[(_pos select 0) - _i, (_pos select 1) - _i, 0], 50] call btc_fnc_getHouses; - _houses append _hs; - _hs = [[(_pos select 0) - _i, (_pos select 1) + _i, 0], 50] call btc_fnc_getHouses; - _houses append _hs; -}; +private _houses = [_pos, _area] call btc_fnc_getHouses; if (_houses isEqualTo []) exitWith {}; From 012af7f5d8b9521969da08a7646f13f397629d8a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 5 Jun 2020 16:58:12 +0200 Subject: [PATCH 101/264] Tweak syntaxe --- .../core/fnc/ied/init_area.sqf | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf index d43d31669..7ba396133 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf @@ -6,9 +6,9 @@ Description: Initialize positions of IEDS. Parameters: - _city - [Object] - _area - [Number] - _n - [Number] + _city - City to initialise. [Object] + _area - Area to create IED. [Number] + _n - Number of IED, real and fake. [Number] Returns: @@ -33,17 +33,14 @@ private _array = _city getVariable ["ieds", []]; { for "_i" from 1 to _n do { - private _sel_pos = _pos; - _sel_pos = [_pos, _area] call btc_fnc_randomize_pos; + private _sel_pos = [_pos, _area] call btc_fnc_randomize_pos; private _dir = random 360; private _roads = _sel_pos nearRoads 50; if (_roads isEqualTo []) then { _sel_pos = [_sel_pos, 0, 100, 1, false] call btc_fnc_findsafepos; } else { - private _obj = selectRandom _roads; - - private _arr = _obj call btc_fnc_ied_randomRoadPos; + private _arr = (selectRandom _roads) call btc_fnc_ied_randomRoadPos; _sel_pos = _arr select 0; _dir = _arr select 1; }; @@ -58,7 +55,7 @@ private _array = _city getVariable ["ieds", []]; _marker setMarkerSize [0.8, 0.8]; }; if (btc_debug_log) then { - [format ["_this = %1 POS %2 N %3(%4)", _this, _sel_pos, _i, _n], __FILE__, [false]] call btc_fnc_debug_message; + [format ["_this = %1 POS %2 N %3(%4)", _this, _sel_pos, _i, _n], __FILE__, [false]] call btc_fnc_debug_message; }; }; } forEach [true, false]; From fd7a9dd9d1981e6ce22ef6254af5ea8846bfdd2f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 5 Jun 2020 18:47:30 +0200 Subject: [PATCH 102/264] Remove radius_x and radius_y --- .../core/def/mission.sqf | 2 +- .../core/fnc/cache/find_pos.sqf | 5 ++-- .../core/fnc/city/activate.sqf | 29 +++++++++---------- .../core/fnc/city/create.sqf | 15 ++++------ .../core/fnc/city/de_activate.sqf | 5 +--- .../core/fnc/city/init.sqf | 11 ++----- .../core/fnc/city/trigger_player_side.sqf | 12 ++++---- .../core/fnc/common/final_phase.sqf | 5 ++-- .../core/fnc/mil/create_hideout.sqf | 6 ++-- .../core/fnc/mil/create_patrol.sqf | 2 +- .../core/fnc/patrol/init.sqf | 2 +- .../core/fnc/side/EMP.sqf | 4 +-- .../core/fnc/side/capture_officer.sqf | 14 ++++----- .../core/fnc/side/checkpoint.sqf | 6 ++-- .../core/fnc/side/convoy.sqf | 10 +++---- .../core/fnc/side/rescue.sqf | 2 +- .../define_mod.sqf | 4 +-- 17 files changed, 57 insertions(+), 77 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 92799a77d..e960c5a41 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -131,7 +131,7 @@ if (isServer) then { //Hideout btc_hideouts = []; btc_hideouts_id = 0; - btc_hideouts_radius = 400; + btc_hideouts_radius = 800; btc_hideout_n = _hideout_n; if (btc_hideout_n isEqualTo 99) then { btc_hideout_n = round random 5; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/find_pos.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/find_pos.sqf index cee373fed..05accff74 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/find_pos.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/find_pos.sqf @@ -36,9 +36,8 @@ if (_city getVariable ["type", ""] in ["NameLocal", "Hill", "NameMarine"]) exitW [] call btc_fnc_cache_find_pos; }; -private _xx = _city getVariable ["RadiusX", 500]; -private _yy = _city getVariable ["RadiusY", 500]; -private _pos = [getPos _city, _xx + _yy] call btc_fnc_randomize_pos; +private _radius = _city getVariable ["radius", 200]; +private _pos = [getPos _city, _radius] call btc_fnc_randomize_pos; private _houses = [_pos, 50] call btc_fnc_getHouses; if (_houses isEqualTo []) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index ca928f54b..99a6162e8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -48,12 +48,11 @@ _city setVariable ["activating", true]; private _is_init = _city getVariable ["initialized", false]; private _data_units = _city getVariable ["data_units", []]; private _type = _city getVariable ["type", ""]; -private _radius_x = _city getVariable ["RadiusX", 0]; -private _radius_y = _city getVariable ["RadiusY", 0]; +private _radius = _city getVariable ["radius", 100]; private _has_en = _city getVariable ["occupied", false]; private _has_ho = _city getVariable ["has_ho", false]; private _ieds = _city getVariable ["ieds", []]; -private _radius = (_radius_x + _radius_y)/2; +private _spawningRadius = _radius/2; if (!_is_init) then { private _ratio = (switch _type do { @@ -81,7 +80,7 @@ if (!_is_init) then { }; _ratio_ied = _ratio_ied * btc_p_ied; - if (_ratio_ied > 0) then {[_city, _radius, (_ratio_ied / 2) + (random _ratio_ied)] call btc_fnc_ied_init_area}; + if (_ratio_ied > 0) then {[_city, _spawningRadius, (_ratio_ied / 2) + (random _ratio_ied)] call btc_fnc_ied_init_area}; _ieds = _city getVariable ["ieds", []]; _city setVariable ["initialized", true]; @@ -112,7 +111,7 @@ if !(_data_units isEqualTo []) then { }); if (_has_en) then { - for "_i" from 1 to (round (_p_mil_group_ratio * (1 + random _max_number_group))) do {[_city, _radius, 1 + round random [0, 1, 2], random 1] call btc_fnc_mil_create_group;}; + for "_i" from 1 to (round (_p_mil_group_ratio * (1 + random _max_number_group))) do {[_city, _spawningRadius, 1 + round random [0, 1, 2], random 1] call btc_fnc_mil_create_group;}; }; //Spawn civilians @@ -125,14 +124,14 @@ if !(_data_units isEqualTo []) then { case "Airport" : {6}; default {2}; }); - [_city, _radius/3, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; + [_city, _spawningRadius/3, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; }; }; if (_city getVariable ["spawn_more", false]) then { _city setVariable ["spawn_more", false]; for "_i" from 1 to (round (_p_mil_group_ratio * (2 + random 3))) do { - [_city, _radius, 4 + round random 3, random 1] call btc_fnc_mil_create_group; + [_city, _spawningRadius, 4 + round random 3, random 1] call btc_fnc_mil_create_group; }; if (btc_p_veh_armed_spawn_more) then { private _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; @@ -143,7 +142,7 @@ if (_city getVariable ["spawn_more", false]) then { }; if !(btc_cache_pos isEqualTo [] && {!(btc_cache_obj getVariable ["btc_cache_unitsSpawned", false])}) then { - if (_city inArea [btc_cache_pos, _radius_x + _radius_y, _radius_x + _radius_y, 0, false]) then { + if (_city inArea [btc_cache_pos, _radius, _radius, 0, false]) then { btc_cache_obj setVariable ["btc_cache_unitsSpawned", true]; [btc_cache_pos, 8, 3, _wp_house] call btc_fnc_mil_create_group; @@ -190,27 +189,27 @@ if !(_city getVariable ["has_suicider", false]) then { btc_ied_suic_spawned = time; _city setVariable ["has_suicider", true]; private _suicider = if (selectRandom [false, false, btc_p_ied_drone]) then { - [_city, _radius] call btc_fnc_ied_drone_create; + [_city, _spawningRadius] call btc_fnc_ied_drone_create; } else { - [_city, _radius] call btc_fnc_ied_suicider_create; + [_city, _spawningRadius] call btc_fnc_ied_suicider_create; }; [_suicider, "killed", "btc_fnc_ied_suiciderKilled", [_id]] call btc_fnc_eh_persistOnLocalityChange; }; }; [{ - params ["_has_en", "_city", "_radius_x", "_radius_y", "_id"]; + params ["_has_en", "_city", "_radius", "_id"]; if (_has_en) then { private _trigger = createTrigger ["EmptyDetector", getPos _city]; - _trigger setTriggerArea [_radius_x + _radius_y, _radius_x + _radius_y, 0, false]; + _trigger setTriggerArea [_radius, _radius, 0, false]; _trigger setTriggerActivation [str btc_enemy_side, "NOT PRESENT", false]; _trigger setTriggerStatements ["this", format ["[%1] call btc_fnc_city_set_clear", _id], ""]; _city setVariable ["trigger", _trigger]; }; _city setVariable ["activating", false]; -}, [_has_en, _city, _radius_x, _radius_y, _id], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_has_en, _city, _radius, _id], btc_delay_createUnit] call CBA_fnc_waitAndExecute; //Patrol btc_patrol_active = btc_patrol_active - [grpNull]; @@ -223,7 +222,7 @@ if (_number_patrol_active < _p_patrol_max) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [1 + round random 1, _city, _radius_x + _radius_y + btc_patrol_area] call btc_fnc_mil_create_patrol; + [1 + round random 1, _city, _radius + btc_patrol_area] call btc_fnc_mil_create_patrol; }; if (btc_debug_log) then { @@ -241,7 +240,7 @@ if (_number_civ_veh_active < _p_civ_max_veh) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [_city, _radius_x+_radius_y + btc_patrol_area] call btc_fnc_civ_create_patrol; + [_city, _radius + btc_patrol_area] call btc_fnc_civ_create_patrol; }; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf index 391b4ffae..fc05939dc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf @@ -9,8 +9,7 @@ Parameters: _position - The position where the city will be created. [Array] _type - Type of city. [String] _name - The name of the city. [String] - _radius_x - The city radius along x. [Number] - _radius_y - The city radius along y. [Number] + _radius - The city radius. [Number] _has_en - If the city is occupied by enemies. [Boolean] _id - ID of the city in the cfgworlds. [Number] @@ -19,7 +18,7 @@ Returns: Examples: (begin example) - _city = [[0, 0, 0], "NameCityCapital", "BTC Capital", 500, 500, true] call btc_fnc_city_create; + _city = [[0, 0, 0], "NameCityCapital", "BTC Capital", 500, true] call btc_fnc_city_create; (end) Author: @@ -31,8 +30,7 @@ params [ ["_position", [0, 0, 0], [[]]], ["_type", "", [""]], ["_name", "", [""]], - ["_radius_x", 0, [0]], - ["_radius_y", 0, [0]], + ["_radius", 0, [0]], ["_has_en", false, [false]], ["_id", count btc_city_all, [0]] ]; @@ -43,8 +41,7 @@ _city setVariable ["activating", false]; _city setVariable ["initialized", false]; _city setVariable ["id", _id]; _city setVariable ["name", _name]; -_city setVariable ["RadiusX", _radius_x]; -_city setVariable ["RadiusY", _radius_y]; +_city setVariable ["radius", _radius]; _city setVariable ["active", false]; _city setVariable ["type", _type]; _city setVariable ["spawn_more", false]; @@ -52,10 +49,10 @@ _city setVariable ["data_units", []]; _city setVariable ["occupied", _has_en]; if (btc_p_sea) then { - _city setVariable ["hasbeach", ((selectBestPlaces [_position, 0.8 * (_radius_x + _radius_y), "sea", 10, 1]) select 0 select 1) isEqualTo 1]; + _city setVariable ["hasbeach", ((selectBestPlaces [_position, 0.8 * _radius, "sea", 10, 1]) select 0 select 1) isEqualTo 1]; }; btc_city_all set [_id, _city]; -[_position, _radius_x, _radius_y, _city, _has_en, _name, _type, _id] call btc_fnc_city_trigger_player_side; +[_position, _radius, _city, _has_en, _name, _type, _id] call btc_fnc_city_trigger_player_side; _city diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index 500a7a1d7..11b3acc21 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -40,10 +40,7 @@ if !(_city getVariable ["active", false]) exitWith {}; }; //Save all and delete - private _radius_x = _city getVariable ["RadiusX", 0]; - private _radius_y = _city getVariable ["RadiusY", 0]; - private _radius = _radius_x + _radius_y; - + private _radius = _city getVariable ["radius", 0]; private _has_en = _city getVariable ["occupied", false]; if (_has_en) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf index d3f8d774c..2d1c96394 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf @@ -56,8 +56,8 @@ for "_id" from 0 to (count _locations - 1) do { }; }; private _name = getText(_current >> "name"); - private _radius_x = getNumber(_current >> "RadiusA"); - private _radius_y = getNumber(_current >> "RadiusB"); + private _radius = getNumber(_current >> "RadiusA") + getNumber(_current >> "RadiusB"); + _radius = (_radius max 160) min btc_hideouts_radius; if (btc_city_blacklist find _name >= 0) exitWith {}; @@ -66,12 +66,7 @@ for "_id" from 0 to (count _locations - 1) do { if ((getMarkerPos "YOUR_MARKER_AREA") inArea [_position, 500, 500, 0, false]) exitWith {}; */ - if (_radius_x < 80 || _radius_y < 80) then { - _radius_x = 80; - _radius_y = 80; - }; - - [_position, _type, _name, _radius_x, _radius_y, random 1 > _is_free_probability, _id] call btc_fnc_city_create; + [_position, _type, _name, _radius, random 1 > _is_free_probability, _id] call btc_fnc_city_create; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf index c43de3468..ec1708524 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/trigger_player_side.sqf @@ -7,8 +7,7 @@ Description: Parameters: _position - Position where the trigger is created. [Array] - _radius_x - Radius of the location along x. [Number] - _radius_y - Radius of the location along y. [Number] + _radius - Radius of the location. [Number] _city - City object where the trigger will be stored. [Object] _has_en - City is occupied. [Boolean] _name - Name of the city. [String] @@ -19,7 +18,7 @@ Returns: Examples: (begin example) - [_position, _radius_x, _radius_y, _city, _has_en, _name, _type, _id] call btc_fnc_city_trigger_player_side; + [_position, _radius, _city, _has_en, _name, _type, _id] call btc_fnc_city_trigger_player_side; (end) Author: @@ -29,8 +28,7 @@ Author: params [ ["_position", [0, 0, 0], [[]]], - ["_radius_x", 0, [0]], - ["_radius_y", 0, [0]], + ["_radius", 0, [0]], ["_city", objNull, [objNull]], ["_has_en", false, [false]], ["_name", "", [""]], @@ -39,7 +37,7 @@ params [ ]; private _trigger = createTrigger ["EmptyDetector", _position]; -_trigger setTriggerArea [_radius_x + _radius_y + btc_city_radius, _radius_x + _radius_y + btc_city_radius, 0, false]; +_trigger setTriggerArea [_radius + btc_city_radius, _radius + btc_city_radius, 0, false]; _trigger setTriggerActivation ["ANYPLAYER", "PRESENT", true]; _trigger setTriggerStatements [btc_p_trigger, format ["[%1] call btc_fnc_city_activate", _id], format ["[%1] call btc_fnc_city_de_activate", _id]]; _city setVariable ["trigger_player_side", _trigger]; @@ -48,7 +46,7 @@ if (btc_debug) then { private _marker = createMarker [format ["loc_%1", _id], _position]; _marker setMarkerShape "ELLIPSE"; _marker setMarkerBrush "SolidBorder"; - _marker setMarkerSize [_radius_x + _radius_y + btc_city_radius, _radius_x + _radius_y + btc_city_radius]; + _marker setMarkerSize [_radius + btc_city_radius, _radius + btc_city_radius]; _marker setMarkerAlpha 0.3; if (_has_en) then { _marker setMarkerColor "colorRed"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/final_phase.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/final_phase.sqf index fafc9fcc6..0c37304f4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/final_phase.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/final_phase.sqf @@ -30,13 +30,12 @@ btc_city_remaining = []; if (_x getVariable ["marker", ""] != "") then { deleteMarker (_x getVariable ["marker", ""]); }; - private _radius_x = _x getVariable ["RadiusX", 500]; - private _radius_y = _x getVariable ["RadiusY", 500]; + private _radius = _x getVariable ["radius", 500]; private _marker = createMarker [format ["city_%1", position _x], position _x]; _marker setMarkerShape "ELLIPSE"; _marker setMarkerBrush "SolidBorder"; - _marker setMarkerSize [_radius_x + _radius_y, _radius_x + _radius_y]; + _marker setMarkerSize [_radius, _radius]; _marker setMarkerAlpha 0.3; if (_x getVariable ["occupied", false]) then { _marker setMarkerColor "colorRed"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf index 1cf6ce572..a0722105c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf @@ -63,8 +63,8 @@ if (_pos isEqualTo []) then { _city = selectRandom _usefulRange; }; - private _radius = ((_city getVariable ["RadiusX", 0]) + (_city getVariable ["RadiusY", 0]))/2; - private _random_pos = [getPos _city, _radius] call btc_fnc_randomize_pos; + private _radius = _city getVariable ["radius", 0]; + private _random_pos = [getPos _city, _radius/2] call btc_fnc_randomize_pos; _pos = [_random_pos, 0, 100, 2, false] call btc_fnc_findsafepos; _id = _city getVariable ["id", 0]; @@ -80,7 +80,7 @@ _city setVariable ["ho_pos", _pos]; if (btc_debug) then {deleteMarker format ["loc_%1", _id];}; deleteVehicle (_city getVariable ["trigger_player_side", objNull]); -[_pos, btc_hideouts_radius, btc_hideouts_radius, _city, _city getVariable "occupied", _city getVariable "name", _city getVariable "type", _city getVariable "id"] call btc_fnc_city_trigger_player_side; +[_pos, btc_hideouts_radius, _city, _city getVariable "occupied", _city getVariable "name", _city getVariable "type", _city getVariable "id"] call btc_fnc_city_trigger_player_side; private _hideout = [_pos] call btc_fnc_mil_create_hideout_composition; clearWeaponCargoGlobal _hideout; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 3bfa4cea4..153f3f507 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -50,7 +50,7 @@ if (_usefuls isEqualTo []) exitWith {false}; private _start_city = selectRandom _usefuls; private _pos = []; if (_start_city getVariable ["hasbeach", false]) then { - _pos = [getPos _start_city, (_start_city getVariable ["RadiusX", 0]) + (_start_city getVariable ["RadiusY", 0]), btc_p_sea] call btc_fnc_randomize_pos; + _pos = [getPos _start_city, _start_city getVariable ["radius", 100], btc_p_sea] call btc_fnc_randomize_pos; } else { _pos = getPos _start_city; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf index 7e64ccc3d..1986cf783 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/init.sqf @@ -42,7 +42,7 @@ private _end_city = selectRandom ([[_start_city, _active_city], _area, _isBoat] private _pos = getPos _end_city; if (_isBoat) then { - ((selectBestPlaces [_pos, (_end_city getVariable ["RadiusX", 0]) + (_end_city getVariable ["RadiusY", 0]), "sea", 10, 1]) select 0 select 0) params ["_x", "_y"]; + ((selectBestPlaces [_pos, _end_city getVariable ["radius", 100], "sea", 10, 1]) select 0 select 0) params ["_x", "_y"]; _pos = [_x, _y, 0]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/EMP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/EMP.sqf index e2fda6547..2d149fca8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/EMP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/EMP.sqf @@ -32,9 +32,7 @@ private _city = selectRandom _useful; _city setVariable ["spawn_more", true]; -private _radius_x = _city getVariable ["RadiusX", 0]; -private _radius_y = _city getVariable ["RadiusY", 0]; -private _radius = _radius_x + _radius_y; +private _radius = _city getVariable ["radius", 0]; private _composition = []; private _tasksID = []; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index a45d9e506..987ac4a4b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -36,9 +36,9 @@ if (_usefuls isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _city1 = selectRandom _usefuls; //// Find roads \\\\ -private _radius_x = _city1 getVariable ["RadiusX",0]; -private _roads = _city1 nearRoads (_radius_x * 2); -_roads = _roads select {(_x distance _city1 > _radius_x) && isOnRoad _x}; +private _radius = (_city1 getVariable ["radius",0])/2; +private _roads = _city1 nearRoads (_radius * 2); +_roads = _roads select {(_x distance _city1 > _radius) && isOnRoad _x}; if (_roads isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _road = selectRandom _roads; private _pos1 = getPosATL _road; @@ -60,7 +60,7 @@ _marker2 setMarkerSize [0.6, 0.6]; private _area = createMarker [format ["sm_%1", _pos2], _pos2]; _area setMarkerShape "ELLIPSE"; _area setMarkerBrush "SolidBorder"; -_area setMarkerSize [_radius_x/1.5, _radius_x/1.5]; +_area setMarkerSize [_radius/1.5, _radius/1.5]; _area setMarkerAlpha 0.3; _area setmarkercolor "colorBlue"; @@ -81,7 +81,7 @@ for "_i" from 0 to (1 + round random 1) do { [{ _this spawn { - params ["_group", "_taskID", "_radius_x", "_city1", "_pos2", "_markers"]; + params ["_group", "_taskID", "_radius", "_city1", "_pos2", "_markers"]; private _captive = selectRandom units _group; removeAllWeapons _captive; @@ -92,7 +92,7 @@ for "_i" from 0 to (1 + round random 1) do { private _handcuff_taskID = _taskID + "hc"; private _back_taskID = _taskID + "bk"; - [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius_x / 1.5] call CBA_fnc_addWaypoint; + [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius / 1.5] call CBA_fnc_addWaypoint; //// Create trigger \\\\ private _trigger = createTrigger ["EmptyDetector", getPos _city1]; @@ -153,6 +153,6 @@ for "_i" from 0 to (1 + round random 1) do { [_markers, _vehs + [_captive, _group]] call btc_fnc_delete; }; -}, [_group, _taskID, _radius_x, _city1, _pos2, _markers], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; +}, [_group, _taskID, _radius, _city1, _pos2, _markers], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; waitUntil {sleep 5; _taskID call BIS_fnc_taskCompleted}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf index 7ef23798c..aea6e6b02 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/checkpoint.sqf @@ -35,15 +35,13 @@ private _pos = getPos _city; _city setVariable ["spawn_more", true]; private _statics = btc_type_gl + btc_type_mg; -private _radius_x = _city getVariable ["RadiusX", 0]; -private _radius_y = _city getVariable ["RadiusY", 0]; -private _radius = (_radius_x + _radius_y)/4; +private _radius = _city getVariable ["radius", 0]; private _boxes = []; private _composition = []; for "_i" from 1 to (1 + round random 2) do { //// Choose a road \\\\ - private _pos = [getPos _city, _radius] call btc_fnc_randomize_pos; + private _pos = [getPos _city, _radius/4] call btc_fnc_randomize_pos; private _roads = _pos nearRoads 200; _roads = _roads select {isOnRoad _x}; if (_roads isEqualTo []) exitWith {_boxes pushBack objNull}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 9f143fce2..336f8f3f4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -36,9 +36,9 @@ if (_usefuls isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _city1 = selectRandom _usefuls; //// Find Road \\\\ -private _radius_x = _city1 getVariable ["RadiusX", 0]; -private _roads = _city1 nearRoads (_radius_x * 2); -_roads = _roads select {(_x distance _city1 > _radius_x) && isOnRoad _x}; +private _radius = (_city1 getVariable ["radius", 0])/2; +private _roads = _city1 nearRoads (_radius * 2); +_roads = _roads select {(_x distance _city1 > _radius) && isOnRoad _x}; if (_roads isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _road = selectRandom _roads; private _pos1 = getPosATL _road; @@ -60,7 +60,7 @@ _marker2 setMarkerSize [0.6, 0.6]; private _area = createMarker [format ["sm_%1", _pos2], _pos2]; _area setMarkerShape "ELLIPSE"; _area setMarkerBrush "SolidBorder"; -_area setMarkerSize [_radius_x/2, _radius_x/2]; +_area setMarkerSize [_radius/2, _radius/2]; _area setMarkerAlpha 0.3; _area setmarkercolor "colorBlue"; @@ -91,7 +91,7 @@ for "_i" from 0 to (2 + round random 2) do { }]; }, [_group, _pos2, _taskID], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; -[_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius_x/2] call CBA_fnc_addWaypoint; +[_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2] call CBA_fnc_addWaypoint; waitUntil {sleep 5; ( _taskID call BIS_fnc_taskCompleted || diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/rescue.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/rescue.sqf index 0e4ddb84e..69370ca7c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/rescue.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/rescue.sqf @@ -32,7 +32,7 @@ if (_useful isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _city = selectRandom _useful; //// Randomise position \\\\ -private _pos = [getPos _city, (((_city getVariable ["RadiusX", 0]) + (_city getVariable ["RadiusY", 0]))/2) - 100] call btc_fnc_randomize_pos; +private _pos = [getPos _city, (_city getVariable ["radius", 0])/2 - 100] call btc_fnc_randomize_pos; _pos = [_pos, 0, 50, 13, 0, 60 * (pi / 180), 0] call btc_fnc_findsafepos; _city setVariable ["spawn_more", true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf index 7a2d37b8d..d6671d9e9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf @@ -1,8 +1,8 @@ btc_custom_loc = [ /* - DESCRIPTION: [POS(Array),TYPE(String),NAME(String),RADIUS X(Number),RADIUS X(Number),IS OCCUPIED(Bool)] + DESCRIPTION: [POS(Array),TYPE(String),NAME(String),RADIUS (Number),IS OCCUPIED(Bool)] Possible types: "NameVillage","NameCity","NameCityCapital","NameLocal","Hill","Airport","NameMarine" - EXAMPLE: [[13132.8,3315.07,0.00128174],"NameVillage","Mountain 1",800,800,true] + EXAMPLE: [[13132.8,3315.07,0.00128174],"NameVillage","Mountain 1",800,true] */ ]; From 430e4a00e19fc63113a42bb8341da083c27f9c69 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 5 Jun 2020 19:28:12 +0200 Subject: [PATCH 103/264] Limit city radius of spawn to 800m --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf index 2d1c96394..e7b99e155 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf @@ -57,7 +57,7 @@ for "_id" from 0 to (count _locations - 1) do { }; private _name = getText(_current >> "name"); private _radius = getNumber(_current >> "RadiusA") + getNumber(_current >> "RadiusB"); - _radius = (_radius max 160) min btc_hideouts_radius; + _radius = (_radius max 160) min 800; if (btc_city_blacklist find _name >= 0) exitWith {}; From e54a27b0db4e17897df67241a21a91ae9c9ae987 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 5 Jun 2020 23:23:56 +0200 Subject: [PATCH 104/264] Redeploy from FOB --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index c01dfbccd..4d4893122 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -129,6 +129,9 @@ if (btc_debug) then { //Re-deploy _action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; +if (true) then { + [btc_fob_flag, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; +}; //Arsenal //BIS From d7b3e68e0fcd680fb5583371be3de9ef6c06dd3a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 6 Jun 2020 13:24:08 +0200 Subject: [PATCH 105/264] Split Rallypoint, Base, FOB/Vehicle in ACE node --- .../core/fnc/db/add_veh.sqf | 2 +- .../core/fnc/eh/veh_add_respawn.sqf | 2 +- .../core/fnc/fob/create_s.sqf | 2 +- .../core/fnc/fob/killed.sqf | 2 +- .../core/fnc/int/add_actions.sqf | 46 ++++++++++++++++++- 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf index 32dd05381..a4cb4a26b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf @@ -43,7 +43,7 @@ if (btc_p_respawn_location > 1) then { (btc_p_respawn_location isEqualTo 2) && (_veh isKindOf "Air") || btc_p_respawn_location > 2 ) then { - [missionNamespace, _veh] call BIS_fnc_addRespawnPosition; + [btc_player_side, _veh] call BIS_fnc_addRespawnPosition; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf index ab0eefe00..6e103a7db 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf @@ -44,7 +44,7 @@ if ((isNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "ace_fastroping _vehicle addMPEventHandler ["MPKilled", {if (isServer) then {[_this select 0] call btc_fnc_eh_veh_respawn};}]; if (btc_p_respawn_location > 0) then { if !(fullCrew [_vehicle, "cargo", true] isEqualTo []) then { - [missionNamespace, _vehicle] call BIS_fnc_addRespawnPosition; + [btc_player_side, _vehicle] call BIS_fnc_addRespawnPosition; }; }; if (_p_chem) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf index 980b0cc1b..73178dedb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf @@ -50,7 +50,7 @@ _marker setMarkerShape "ICON"; (_fobs select 0) pushBack _marker; (_fobs select 1) pushBack _structure; (_fobs select 2) pushBack _flag; -_flag setVariable ["BIS_fnc_IDRespawnPosition", ([missionNamespace, _flag, _FOB_name] call BIS_fnc_addRespawnPosition) select 1]; +_flag setVariable ["BIS_fnc_IDRespawnPosition", ([btc_player_side, _flag, _FOB_name] call BIS_fnc_addRespawnPosition) select 1]; _structure addEventHandler ["Killed", btc_fnc_fob_killed]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf index 4ae13466c..56eb50c09 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf @@ -41,7 +41,7 @@ if (btc_debug || btc_debug_log) then { [format ["named %1", (_fobs select 0) select _fob_index], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; }; -[missionNamespace, ((_fobs select 2) select _fob_index) getVariable "BIS_fnc_IDRespawnPosition"] call BIS_fnc_removeRespawnPosition; +[btc_player_side, ((_fobs select 2) select _fob_index) getVariable "BIS_fnc_IDRespawnPosition"] call BIS_fnc_removeRespawnPosition; deleteMarker ((_fobs select 0) deleteAt _fob_index); private _fob = (_fobs select 1) deleteAt _fob_index; deleteVehicle ((_fobs select 2) deleteAt _fob_index); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 4d4893122..c6b09bb8e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,12 +127,54 @@ if (btc_debug) then { }; //Re-deploy -_action = ["fob_redeploy", localize "STR_BTC_HAM_ACTION_REDEPLOY_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["redeploy", "BI re-deploy", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; +_action = ["base", "Re-deploy base", "", {_player setPosATL getMarkerPos [btc_respawn_marker, true];}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; +_insertChildren = { + params ["_target", "_player", "_params"]; + + private _actions = []; + { + private _childStatement = { + params ["_target", "_player", "_params"]; + + _player setPosATL getMarkerPos [_params, true]; + }; + private _action = [markerText _x, markerText _x, "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; + _actions pushBack [_action, [], _target]; + } forEach (([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]); + + _actions +}; +_action = ["rallypoints", "Re-deploy rallypoints", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, _insertChildren] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; +_insertChildren = { + params ["_target", "_player", "_params"]; + + private _actions = []; + { + private _childStatement = { + params ["_target", "_player", "_params"]; + + _player setPosATL getPosATL _params; + }; + private ["_identity", "_name", "_pic", "_showName", "_respawnPositions", "_respawnPositionNames", "_respawnPositionNameShow", "_pos"]; + (_x call BIS_fnc_showRespawnMenuPositionName) params ["_FOBName", "_icon"]; + private _action = [_FOBName, _FOBName, _icon, _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; + _actions pushBack [_action, [], _target]; + } forEach (btc_player_side call BIS_fnc_getRespawnPositions); + + _actions +}; +_action = ["FOB", "Redeploy FOB/vehicles", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}, _insertChildren] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; + +/* if (true) then { [btc_fob_flag, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; }; - +*/ //Arsenal //BIS if (btc_p_arsenal_Type < 3) then { From 2f226c7884b9fe71de08ca96fd4d37250c4a8bf7 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 6 Jun 2020 14:12:43 +0200 Subject: [PATCH 106/264] Split in cardinal --- .../core/fnc/compile.sqf | 2 + .../core/fnc/fob/redeploy.sqf | 53 +++++++++++++----- .../core/fnc/fob/redeployCheck.sqf | 37 +++++++++++++ .../core/fnc/int/add_actions.sqf | 55 ++++++------------- 4 files changed, 97 insertions(+), 50 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index e46222596..7957ca61f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -294,6 +294,8 @@ if (!isDedicated) then { btc_fnc_fob_create = compile preprocessFileLineNumbers "core\fnc\fob\create.sqf"; btc_fnc_fob_rallypointAssemble = compile preprocessFileLineNumbers "core\fnc\fob\rallypointAssemble.sqf"; btc_fnc_fob_redeploy = compile preprocessFileLineNumbers "core\fnc\fob\redeploy.sqf"; + btc_fnc_fob_redeploy = compile preprocessFileLineNumbers "core\fnc\fob\redeploy.sqf"; + btc_fnc_fob_redeployCheck = compile preprocessFileLineNumbers "core\fnc\fob\redeployCheck.sqf"; //INT btc_fnc_int_add_actions = compile preprocessFileLineNumbers "core\fnc\int\add_actions.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index 0ea2acbf6..a93542976 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -3,11 +3,15 @@ Function: btc_fnc_fob_redeploy Description: - Show A3 respawn menu. + Create child statement to reploy. Parameters: + _target - is the object being interacted with. [Object] + _player - is ace_player. [Object] + _params - is the optional action parameters. (default []) Returns: + _actions - Action generated for redeploy. [Boolean] Examples: (begin example) @@ -19,19 +23,42 @@ Author: ---------------------------------------------------------------------------- */ -if !(player call ace_medical_status_fnc_isInStableCondition) exitWith { - [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYNOTSTABLE"]] call CBA_fnc_notify; +params [ + "_target", + "_player", + "_params" +]; + +private _actions = []; +private _childStatement = { + params ["_target", "_player", "_params"]; + + [_player, _params] call BIS_fnc_moveToRespawnPosition; +}; + +if (_params isEqualType "") exitWith { // Redeploy on marker like rallypoints + { + private _action = [markerText _x, markerText _x, "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; + _actions pushBack [_action, [], _target]; + } forEach (([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]); + + _actions }; -if ( - ["leftarm", "rightarm", "leftleg", "rightleg"] findIf { - [player, player, _x] call ace_medical_treatment_fnc_canSplint - } > -1 -) exitWith { - [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYSPLINT"]] call CBA_fnc_notify; +// Redeploy on object like FOB/Vehicles +private _center = [worldSize / 2, worldsize / 2, 0]; +_params params ["_min", "_max"]; +private _positions = (btc_player_side call BIS_fnc_getRespawnPositions) select { + private _dir = _center getDir _x; + _min < _dir && + {_dir < _max} }; -player setPos [10, 10, 10]; -player hideObject true; -player enableSimulation false; -forceRespawn player; +{ + private ["_identity", "_name", "_pic", "_showName", "_respawnPositions", "_respawnPositionNames", "_respawnPositionNameShow", "_pos"]; + (_x call BIS_fnc_showRespawnMenuPositionName) params ["_FOBName", "_icon"]; + private _action = [_FOBName, _FOBName, _icon, _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; + _actions pushBack [_action, [], _target]; +} forEach (_positions); + +_actions diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf new file mode 100644 index 000000000..2572e0988 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf @@ -0,0 +1,37 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_fob_redeployCheck + +Description: + Check if player can redeploy. + +Parameters: + +Returns: + _canRedeploy - Can redeploy. [Boolean] + +Examples: + (begin example) + [] call btc_fnc_fob_redeployCheck; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +if !(player call ace_medical_status_fnc_isInStableCondition) exitWith { + [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYNOTSTABLE"]] call CBA_fnc_notify; + false +}; + +if ( + ["leftarm", "rightarm", "leftleg", "rightleg"] findIf { + [player, player, _x] call ace_medical_treatment_fnc_canSplint + } > -1 +) exitWith { + [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYSPLINT"]] call CBA_fnc_notify; + false +}; + +true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index c6b09bb8e..27025fda4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,48 +127,29 @@ if (btc_debug) then { }; //Re-deploy -_action = ["redeploy", "BI re-deploy", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", {[] call btc_fnc_fob_redeploy;}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; +_action = ["redeploy", "BI re-deploy", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { + if ([] call btc_fnc_fob_redeployCheck) then { + player setPos [10, 10, 10]; + player hideObject true; + player enableSimulation false; + forceRespawn player; + }; +}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["base", "Re-deploy base", "", {_player setPosATL getMarkerPos [btc_respawn_marker, true];}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_insertChildren = { - params ["_target", "_player", "_params"]; - - private _actions = []; - { - private _childStatement = { - params ["_target", "_player", "_params"]; - - _player setPosATL getMarkerPos [_params, true]; - }; - private _action = [markerText _x, markerText _x, "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; - _actions pushBack [_action, [], _target]; - } forEach (([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]); - - _actions -}; -_action = ["rallypoints", "Re-deploy rallypoints", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, _insertChildren] call ace_interact_menu_fnc_createAction; +_action = ["rallypoints", "Re-deploy rallypoints", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, {_this call btc_fnc_fob_redeploy}, ""] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_insertChildren = { - params ["_target", "_player", "_params"]; - - private _actions = []; - { - private _childStatement = { - params ["_target", "_player", "_params"]; - - _player setPosATL getPosATL _params; - }; - private ["_identity", "_name", "_pic", "_showName", "_respawnPositions", "_respawnPositionNames", "_respawnPositionNameShow", "_pos"]; - (_x call BIS_fnc_showRespawnMenuPositionName) params ["_FOBName", "_icon"]; - private _action = [_FOBName, _FOBName, _icon, _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; - _actions pushBack [_action, [], _target]; - } forEach (btc_player_side call BIS_fnc_getRespawnPositions); - - _actions -}; -_action = ["FOB", "Redeploy FOB/vehicles", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}, _insertChildren] call ace_interact_menu_fnc_createAction; +_action = ["FOB", "Redeploy FOB/vehicles", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; +_action = ["FOB NE", "NE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [0, 90]] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; +_action = ["FOB SE", "SE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [90, 180]] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; +_action = ["FOB SW", "SW", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [180, 270]] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; +_action = ["FOB NW", "NW", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [270, 360]] call ace_interact_menu_fnc_createAction; +[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; /* if (true) then { From 063e7160f6a110e61ec5c1ed4553a9acdd6167a5 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 6 Jun 2020 14:38:31 +0200 Subject: [PATCH 107/264] Prevent redeploy of destroyed FOB --- .../core/fnc/fob/redeploy.sqf | 39 ++++++++++--------- .../core/fnc/int/add_actions.sqf | 6 ++- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index a93542976..2c7523473 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -33,32 +33,33 @@ private _actions = []; private _childStatement = { params ["_target", "_player", "_params"]; - [_player, _params] call BIS_fnc_moveToRespawnPosition; + if ([] call btc_fnc_fob_redeployCheck) then {[_player, _params, false] call BIS_fnc_moveToRespawnPosition}; }; -if (_params isEqualType "") exitWith { // Redeploy on marker like rallypoints +if (_params isEqualType "") then { // Redeploy on marker like rallypoints { private _action = [markerText _x, markerText _x, "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; _actions pushBack [_action, [], _target]; } forEach (([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]); +} else { // Redeploy on object like FOB/Vehicles + private _center = [worldSize / 2, worldsize / 2, 0]; + _params params ["_min", "_max"]; + private _positions = (btc_player_side call BIS_fnc_getRespawnPositions) select { + if (alive _x) then { + private _dir = _center getDir _x; + _min <= _dir && + {_dir < _max} + } else { + false + }; + }; - _actions -}; - -// Redeploy on object like FOB/Vehicles -private _center = [worldSize / 2, worldsize / 2, 0]; -_params params ["_min", "_max"]; -private _positions = (btc_player_side call BIS_fnc_getRespawnPositions) select { - private _dir = _center getDir _x; - _min < _dir && - {_dir < _max} + { + private ["_identity", "_name", "_pic", "_showName", "_respawnPositions", "_respawnPositionNames", "_respawnPositionNameShow", "_pos"]; + (_x call BIS_fnc_showRespawnMenuPositionName) params ["_FOBName", "_icon"]; + private _action = [_FOBName, _FOBName, _icon, _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; + _actions pushBack [_action, [], _target]; + } forEach _positions; }; -{ - private ["_identity", "_name", "_pic", "_showName", "_respawnPositions", "_respawnPositionNames", "_respawnPositionNameShow", "_pos"]; - (_x call BIS_fnc_showRespawnMenuPositionName) params ["_FOBName", "_icon"]; - private _action = [_FOBName, _FOBName, _icon, _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; - _actions pushBack [_action, [], _target]; -} forEach (_positions); - _actions diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 27025fda4..6706a6a07 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -136,11 +136,13 @@ _action = ["redeploy", "BI re-deploy", "\A3\ui_f\data\igui\cfg\simpleTasks\types }; }, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["base", "Re-deploy base", "", {_player setPosATL getMarkerPos [btc_respawn_marker, true];}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; +_action = ["base", "Re-deploy base", getText (configfile >> "CfgMarkers" >> getMarkerType "btc_base" >> "icon"), { + if ([] call btc_fnc_fob_redeployCheck) then {[_player, btc_respawn_marker, false] call BIS_fnc_moveToRespawnPosition}; +}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["rallypoints", "Re-deploy rallypoints", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, {_this call btc_fnc_fob_redeploy}, ""] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["FOB", "Redeploy FOB/vehicles", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; +_action = ["FOB", "Re-deploy FOB/vehicles", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["FOB NE", "NE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [0, 90]] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; From f37c948bbeba0650a1fb3938d055fd1488819867 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 6 Jun 2020 15:17:40 +0200 Subject: [PATCH 108/264] Localize string --- .../core/def/mission.sqf | 1 + .../core/def/param.hpp | 6 +++ .../core/fnc/int/add_actions.sqf | 48 +++++++++---------- .../stringtable.xml | 24 +++++++--- 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 92799a77d..a0926ac57 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -13,6 +13,7 @@ btc_p_db_autoRestartTime = "btc_p_db_autoRestartTime" call BIS_fnc_getParamValue //<< Respawn options >> btc_p_respawn_location = "btc_p_respawn_location" call BIS_fnc_getParamValue; +btc_p_respawn_fromFOBToBase = ("btc_p_respawn_fromFOBToBase" call BIS_fnc_getParamValue) isEqualTo 1; btc_p_rallypointTimer = "btc_p_rallypointTimer" call BIS_fnc_getParamValue; btc_p_respawn_arsenal = ("btc_p_respawn_arsenal" call BIS_fnc_getParamValue) isEqualTo 1; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index b3c87e7fa..f45895775 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -53,6 +53,12 @@ class Params { texts[]={$STR_BTC_HAM_RESP_FOBRALLY, $STR_BTC_HAM_RESP_FOBRALLYHELO, $STR_BTC_HAM_RESP_FOBRALLYHELI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHI}; default = 0; }; + class btc_p_respawn_fromFOBToBase { // Allow respawn from FOB to base: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_FOBTOBASE"]); + values[]={0,1}; + texts[]={$STR_DISABLED, $STR_ENABLED}; + default = 0; + }; class btc_p_rallypointTimer { // Time before rallypoint self-destruction: title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_RALLYTIMER"]); values[]={0,5,10,30,60}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 6706a6a07..d54ace7e6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -127,37 +127,37 @@ if (btc_debug) then { }; //Re-deploy -_action = ["redeploy", "BI re-deploy", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { +private _actions = []; +_actions pushBack ["redeploy", localize "STR_BTC_HAM_ACTION_BIREDEPLOY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { if ([] call btc_fnc_fob_redeployCheck) then { player setPos [10, 10, 10]; player hideObject true; player enableSimulation false; forceRespawn player; }; -}, {!btc_log_placing}, {}, [], [0.4, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["base", "Re-deploy base", getText (configfile >> "CfgMarkers" >> getMarkerType "btc_base" >> "icon"), { +}, {!btc_log_placing}]; +_actions pushBack ["base", localize "STR_BTC_HAM_ACTION_REDEPLOYBASE", getText (configfile >> "CfgMarkers" >> getMarkerType "btc_base" >> "icon"), { if ([] call btc_fnc_fob_redeployCheck) then {[_player, btc_respawn_marker, false] call BIS_fnc_moveToRespawnPosition}; -}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["rallypoints", "Re-deploy rallypoints", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, {_this call btc_fnc_fob_redeploy}, ""] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["FOB", "Re-deploy FOB/vehicles", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["FOB NE", "NE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [0, 90]] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["FOB SE", "SE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [90, 180]] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["FOB SW", "SW", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [180, 270]] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["FOB NW", "NW", "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, [270, 360]] call ace_interact_menu_fnc_createAction; -[btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; - -/* -if (true) then { - [btc_fob_flag, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; -}; -*/ +}, {!btc_log_placing}]; +_actions pushBack ["rallypoints", localize "STR_BTC_HAM_ACTION_REDEPLOYRALLY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, {_this call btc_fnc_fob_redeploy}, ""]; +_actions pushBack ["FOB", localize "STR_BTC_HAM_ACTION_REDEPLOYFOB", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}]; +{ + private _action = _x call ace_interact_menu_fnc_createAction; + [btc_gear_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; + if (btc_p_respawn_fromFOBToBase) then { + [btc_fob_flag, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; + }; +} forEach _actions; +{ + _x params ["_cardinal", "_degrees"]; + + _action = ["FOB" + _cardinal, _cardinal, "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, _degrees] call ace_interact_menu_fnc_createAction; + [btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; + if (btc_p_respawn_fromFOBToBase) then { + [btc_fob_flag, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToClass; + }; +} forEach [[localize "str_q_north_east", [0, 90]], [localize "str_q_south_east", [90, 180]], [localize "str_q_south_west", [180, 270]], [localize "str_q_north_west", [270, 360]]]; + //Arsenal //BIS if (btc_p_arsenal_Type < 3) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index e4ba77494..37e56af91 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -465,6 +465,9 @@ Respawn locations available: 可用的重生位置 + + Allow respawn from FOB to base: + FOB and Rallypoint FOB 和 集合点 @@ -1386,12 +1389,21 @@ - - Re-deploy - Re-deploy - Verlegen - Ressurgir na FOB - 重新部署 + + BI Re-deploy + BI Re-deploy + BI Verlegen + BI Ressurgir na FOB + BI 重新部署 + + + Re-deploy base + + + Re-deploy rallypoints + + + Re-deploy FOB/vehicles From 50eb9dd6af7746df6d5815b8df6368d523424829 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 7 Jun 2020 12:06:30 +0200 Subject: [PATCH 109/264] Update documentation since add BI respawn https://github.com/Vdauphin/HeartsAndMinds/pull/825 --- docs/InGame-documentation.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 1a84bddb4..6f4bb6920 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -39,16 +39,15 @@ A side mission can be requested by the officer with his self interaction menu. If you don't want to complete a task, you can always abort it with the self interaction menu. -## FOB/Rallypoint +## Respawn position - FOB: In this mission a FOB is a forward spawn point, to create a FOB approach the red box at the logistic point and require a blue container. - Deploy: - Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat. + Move it where you want to deploy a new FOB and interact with it to set it up. Keep in mind that you can not deploy a FOB close to the main base (2.500m) and the terrain needs to be flat. - Dismantle: - You can dismantle a FOB by interacting with the flag on the HQ roof. - + You can dismantle a FOB by interacting with the flag on the HQ roof. - Rallypoint: - You can also use the Zeus rallypoint backpack available in Arsenal. Those have a limited number of respawn. + You can also use the Zeus rallypoint backpack available in Arsenal but they have some limitation. After some times or after player disconnected, rallypoint will self-destruct. ## Sling loading From 83b16e40ab1f6c14b7c981ff1d7e0a6a7d012f6e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 7 Jun 2020 12:26:15 +0200 Subject: [PATCH 110/264] Switch from BI redeploy name to BI respawn --- .../core/fnc/fob/redeploy.sqf | 10 +++++----- .../core/fnc/fob/redeployCheck.sqf | 4 ++-- .../core/fnc/int/add_actions.sqf | 6 +++--- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 14 +++++--------- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index 2c7523473..5e0c054be 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -3,15 +3,15 @@ Function: btc_fnc_fob_redeploy Description: - Create child statement to reploy. + Create child statement to redeploy. Parameters: - _target - is the object being interacted with. [Object] - _player - is ace_player. [Object] - _params - is the optional action parameters. (default []) + _target - Is the object being interacted with. [Object] + _player - Is ace_player. [Object] + _params - Is the optional action parameters. (default []) Returns: - _actions - Action generated for redeploy. [Boolean] + _actions - ACE action generated for redeploy. [Boolean] Examples: (begin example) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf index 2572e0988..eea89ce91 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeployCheck.sqf @@ -21,7 +21,7 @@ Author: ---------------------------------------------------------------------------- */ if !(player call ace_medical_status_fnc_isInStableCondition) exitWith { - [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYNOTSTABLE"]] call CBA_fnc_notify; + [[localize "STR_BTC_HAM_O_FOB_CANTREDEPLOY"], [localize "STR_BTC_HAM_O_FOB_REDEPLOYNOTSTABLE"]] call CBA_fnc_notify; false }; @@ -30,7 +30,7 @@ if ( [player, player, _x] call ace_medical_treatment_fnc_canSplint } > -1 ) exitWith { - [[localize "STR_BTC_HAM_O_FOB_CANTREPLOY"], [localize "STR_BTC_HAM_O_FOB_REPLOYSPLINT"]] call CBA_fnc_notify; + [[localize "STR_BTC_HAM_O_FOB_CANTREDEPLOY"], [localize "STR_BTC_HAM_O_FOB_REDEPLOYSPLINT"]] call CBA_fnc_notify; false }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index d54ace7e6..36d5b81a3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -128,7 +128,7 @@ if (btc_debug) then { //Re-deploy private _actions = []; -_actions pushBack ["redeploy", localize "STR_BTC_HAM_ACTION_BIREDEPLOY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { +_actions pushBack ["redeploy", localize "STR_BTC_HAM_ACTION_BIRESPAWN", "\A3\ui_f\data\igui\cfg\simpleTasks\types\run_ca.paa", { if ([] call btc_fnc_fob_redeployCheck) then { player setPos [10, 10, 10]; player hideObject true; @@ -151,12 +151,12 @@ _actions pushBack ["FOB", localize "STR_BTC_HAM_ACTION_REDEPLOYFOB", "\A3\Ui_f\d { _x params ["_cardinal", "_degrees"]; - _action = ["FOB" + _cardinal, _cardinal, "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, _degrees] call ace_interact_menu_fnc_createAction; + _action = ["FOB" + _cardinal, localize _cardinal, "\A3\ui_f\data\igui\cfg\simpleTasks\types\map_ca.paa", {}, {true}, {_this call btc_fnc_fob_redeploy}, _degrees] call ace_interact_menu_fnc_createAction; [btc_gear_object, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToObject; if (btc_p_respawn_fromFOBToBase) then { [btc_fob_flag, 0, ["ACE_MainActions", "FOB"], _action] call ace_interact_menu_fnc_addActionToClass; }; -} forEach [[localize "str_q_north_east", [0, 90]], [localize "str_q_south_east", [90, 180]], [localize "str_q_south_west", [180, 270]], [localize "str_q_north_west", [270, 360]]]; +} forEach [["str_q_north_east", [0, 90]], ["str_q_south_east", [90, 180]], ["str_q_south_west", [180, 270]], ["str_q_north_west", [270, 360]]]; //Arsenal //BIS diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 37e56af91..5d5cc6c65 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1389,12 +1389,8 @@ - - BI Re-deploy - BI Re-deploy - BI Verlegen - BI Ressurgir na FOB - BI 重新部署 + + BI respawn Re-deploy base @@ -1745,15 +1741,15 @@ This rallypoint will self-destruct in %1min. 该集合点将在 %1 分钟后自毁。 - + Can't redeploy, 无法重新部署, - + you need to be stabilized 需要稳定伤势 - + you need to have a splint 需要佩戴固定夹板 From 90c48f2eb5974736e7feb920338646b96006bda9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 7 Jun 2020 19:36:17 +0200 Subject: [PATCH 111/264] FIX: Skill not apply --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 25457a30a..7e080e731 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -41,6 +41,6 @@ if (btc_p_chem) then { ["GroundWeaponHolder", "InitPost", {btc_groundWeaponHolder append _this}] call CBA_fnc_addClassEventHandler; ["acex_fortify_objectPlaced", {[_this select 2] call btc_fnc_log_init}] call CBA_fnc_addEventHandler; if (btc_p_set_skill) then { - ["CAManBase", "init", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; + ["CAManBase", "InitPost", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; }; ["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; From da128b7e2e2a09d00432f1b9ff2d0eedab026953 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 10 Jun 2020 00:54:55 +0200 Subject: [PATCH 112/264] FIX: size X Y doesn't exite anymore --- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 34627350c..71d75def7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -2,8 +2,8 @@ btc_map_mapIllumination = ace_map_mapIllumination; if !(isNil "btc_custom_loc") then { { - _x params ["_pos", "_cityType", "_cityName", "_sizeX", "_sizeY"]; - private _location = createLocation [_cityType, _pos, _sizeX, _sizeY]; + _x params ["_pos", "_cityType", "_cityName", "_radius"]; + private _location = createLocation [_cityType, _pos, _radius, _radius]; _location setText _cityName; } forEach btc_custom_loc; }; From 57ca61257305cde784475ed5e476e36c849a258a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 16 Jun 2020 18:22:43 +0200 Subject: [PATCH 113/264] Tweak flat spawn and add Air support --- .../core/fnc/compile.sqf | 7 +- .../core/fnc/tow/ropeBreak.sqf | 49 ++++++++++++++ .../core/fnc/tow/ropeCreate.sqf | 66 ++++++------------- .../core/fnc/tow/unwind.sqf | 18 ++++- .../stringtable.xml | 2 +- 5 files changed, 89 insertions(+), 53 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index e2d7f8b38..486684e6e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -184,6 +184,9 @@ if (isServer) then { //TASK btc_fnc_task_create = compile preprocessFileLineNumbers "core\fnc\task\create.sqf"; btc_fnc_task_setState = compile preprocessFileLineNumbers "core\fnc\task\setState.sqf"; + + //TOW + btc_fnc_tow_ropeBreak = compile preprocessFileLineNumbers "core\fnc\tow\ropeBreak.sqf"; }; /////////////////////CLIENT AND SERVER\\\\\\\\\\\\\\\\\\\\\ @@ -241,9 +244,6 @@ btc_fnc_patrol_disabled = compile preprocessFileLineNumbers "core\fnc\patrol\dis btc_fnc_rep_hd = compile preprocessFileLineNumbers "core\fnc\rep\hd.sqf"; btc_fnc_rep_killed = compile preprocessFileLineNumbers "core\fnc\rep\killed.sqf"; -//TOW -btc_fnc_tow_check = compile preprocessFileLineNumbers "core\fnc\tow\check.sqf"; - //ARSENAL btc_fnc_arsenal_ammoUsage = compile preprocessFileLineNumbers "core\fnc\arsenal\ammoUsage.sqf"; @@ -356,4 +356,5 @@ if (!isDedicated) then { btc_fnc_tow_hitch_points = compile preprocessFileLineNumbers "core\fnc\tow\hitch_points.sqf"; btc_fnc_tow_unhook = compile preprocessFileLineNumbers "core\fnc\tow\unhook.sqf"; btc_fnc_tow_unwind = compile preprocessFileLineNumbers "core\fnc\tow\unwind.sqf"; + btc_fnc_tow_check = compile preprocessFileLineNumbers "core\fnc\tow\check.sqf"; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf new file mode 100644 index 000000000..347d59f79 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf @@ -0,0 +1,49 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_tow_ropeBreak + +Description: + Handle towing rope when they break. + +Parameters: + _thisBI - BI parameters. [Array] + _thisArgsCBA - CBA parameters. [Array] + +Returns: + +Examples: + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params ["_thisBI", "_thisArgsCBA"]; +_thisBI params ["_tower", "_rope", "_flat"]; +_thisArgsCBA params ["_vehicleSelected", "_safeDistance", "_ropes"]; + +_tower removeEventHandler ["RopeBreak", _thisId]; + +deTach _vehicleSelected; + +// Handle flipped vehicle +if ((vectorUp _vehicleSelected) select 2 < 0) then { + _flat setPos [0, 0, 0]; // Avoid collision with _vehicleSelected + private _towerDir = getDir _tower; + private _selectedSafePos = _tower getPos [- _safeDistance, _towerDir]; + _selectedSafePos set [2, 0.5 + (_selectedSafePos select 2)]; + _vehicleSelected setPos _selectedSafePos; + _vehicleSelected setDir _towerDir; +}; +_vehicleSelected setVectorUp surfaceNormal position _vehicleSelected; + +if !( + _tower isKindOf "Ship" || + _tower isKindOf "Air" +) then { + deleteVehicle _flat; +}; +_ropes apply {deleteVehicle _x}; + +_vehicleSelected setVariable ["btc_towing", objNull, true]; +_tower setVariable ["btc_towing", objNull, true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 111350773..bfe2b3aab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -7,7 +7,7 @@ Description: Parameters: _tower - Vehicle towing. [Object] - _vehicle_selected - Vehicle will be towed. [Object] + _vehicleSelected - Vehicle will be towed. [Object] Returns: @@ -23,35 +23,35 @@ Author: params [ ["_tower", objNull, [objNull]], - ["_vehicle_selected", btc_tow_vehicleSelected, [objNull]] + ["_vehicleSelected", btc_tow_vehicleSelected, [objNull]] ]; -if !([_tower, _vehicle_selected] call btc_fnc_tow_check) exitWith {}; -if (_tower setVehicleCargo _vehicle_selected) exitWith {}; +if !([_tower, _vehicleSelected] call btc_fnc_tow_check) exitWith {}; +if (_tower setVehicleCargo _vehicleSelected) exitWith {}; (localize "STR_BTC_HAM_TOW_WAIT") call CBA_fnc_notify; // Find the position of the Flat object -private _vectorUp = vectorUp _vehicle_selected; -private _dirSelected = getDir _vehicle_selected; -private _model_selected = (0 boundingBoxReal _vehicle_selected) select 1; -private _model_front_selected = ([_vehicle_selected] call btc_fnc_log_get_corner_points) select 2; +private _dirSelected = getDir _vehicleSelected; +private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; +private _model_front_selected = ([_vehicleSelected] call btc_fnc_log_get_corner_points) select 2; private _offset = if (_model_selected select 1 > 3.06) then { (_model_selected select 1) - 3.06 } else { (_model_front_selected select 1) - (_model_selected select 1) }; -private _posFlat = _vehicle_selected getPos [_offset, _dirSelected]; -_posFlat set [2, (getPosATL _vehicle_selected) select 2]; +private _posFlat = _vehicleSelected getPos [_offset, _dirSelected]; +_posFlat set [2, 0.2 + ((getPosATL _vehicleSelected) select 2)]; private _flatType = ["Truck_01_Rack_F", "Truck_01_Rack_tropic_F"] select (worldName in ["Tanoa", "lingor3", "chernarus", "Enoch", "sara"]); -private _flat = if (_tower isKindOf "Ship") then { +private _isShipOrAir = _tower isKindOf "Ship" || _tower isKindOf "Air"; +private _flat = if (_isShipOrAir) then { _tower } else { createVehicle [_flatType, _posFlat, [], 0, "CAN_COLLIDE"] }; _flat setDir _dirSelected; -_flat setVectorUp _vectorUp; +_flat setVectorUp surfaceNormal _posFlat; private _model_corners_tower = [_tower] call btc_fnc_log_get_corner_points; private _model_corners_flat = [_flat] call btc_fnc_log_get_corner_points; @@ -62,7 +62,7 @@ private _attachTo = [ (_model_selected select 2) - (_model_flat select 2) ]; -_vehicle_selected attachTo [_flat, _attachTo]; +_vehicleSelected attachTo [_flat, _attachTo]; private _ropeTowerRelPos1 = (_model_corners_tower select 0) vectorAdd [0, -1, 2]; private _ropeTowerRelPos2 = (_model_corners_tower select 1) vectorAdd [0, -1, 2]; @@ -70,55 +70,29 @@ private _ropeFlatRelPos1 = (_model_corners_flat select 2) vectorAdd [0, 0.05, 0. private _ropeFlatRelPos2 = (_model_corners_flat select 3) vectorAdd [0, 0.05, 0.6]; private _rope1 = ropeCreate [_tower, _ropeTowerRelPos1, - [_flat, _vehicle_selected] select (_tower isKindOf "Ship"), + [_flat, _vehicleSelected] select _isShipOrAir, _ropeFlatRelPos1, (_tower modelToWorld _ropeTowerRelPos1) distance (_flat modelToWorld _ropeFlatRelPos1) ]; private _rope2 = ropeCreate [_tower, _ropeTowerRelPos2, - [_flat, _vehicle_selected] select (_tower isKindOf "Ship"), + [_flat, _vehicleSelected] select _isShipOrAir, _ropeFlatRelPos2, (_tower modelToWorld _ropeTowerRelPos2) distance (_flat modelToWorld _ropeFlatRelPos2) ]; private _shortRope = [_rope1, _rope2] select (ropeLength _rope1 > ropeLength _rope2); ropeUnwind [_shortRope, 2, ropeLength _rope1 max ropeLength _rope2, false]; -_tower setVariable ["btc_towing", _vehicle_selected, true]; -_vehicle_selected setVariable ["btc_towing", _tower, true]; +_tower setVariable ["btc_towing", _vehicleSelected, true]; +_vehicleSelected setVariable ["btc_towing", _tower, true]; btc_tow_vehicleSelected = objNull; -[_tower, "RopeBreak", { - params ["_tower", "_rope", "_flat"]; - _thisArgs params ["_vehicle_selected", "_safeDistance", "_ropes"]; - - _tower removeEventHandler ["RopeBreak", _thisId]; - - deTach _vehicle_selected; - - // Handle flipped vehicle - if ((vectorUp _vehicle_selected) select 2 < 0) then { - _flat setPos [0, 0, 0]; // Avoid collision with _vehicle_selected - private _towerDir = getDir _tower; - private _selectedSafePos = _tower getPos [- _safeDistance, _towerDir]; - _selectedSafePos set [2, 0.5 + (_selectedSafePos select 2)]; - _vehicle_selected setPos _selectedSafePos; - _vehicle_selected setDir _towerDir; - }; - _vehicle_selected setVectorUp surfaceNormal position _vehicle_selected; - - if !(_tower isKindOf "Ship") then { - deleteVehicle _flat; - }; - _ropes apply {deleteVehicle _x}; - - _vehicle_selected setVariable ["btc_towing", objNull, true]; - _tower setVariable ["btc_towing", objNull, true]; -}, [ - _vehicle_selected, +[_tower, "RopeBreak", {[_this, _thisArgs] call btc_fnc_tow_ropeBreak}, [ + _vehicleSelected, 2 + (_model_selected select 1) - (_model_corners_tower select 0 select 1), [_rope1, _rope2] ]] remoteExecCall ["CBA_fnc_addBISEventHandler", 2]; -if (_tower isKindOf "Ship") exitWith {(localize "STR_BTC_HAM_TOW_DONE") call CBA_fnc_notify}; +if (_isShipOrAir) exitWith {(localize "STR_BTC_HAM_TOW_DONE") call CBA_fnc_notify}; [{ params ["_flat", "_rope1", "_rope2"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf index 03eac019d..2cacdbd20 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/unwind.sqf @@ -24,13 +24,21 @@ Author: ---------------------------------------------------------------------------- */ [{ - ropeUnwound (_this select 1) && - ropeUnwound (_this select 2) + isNull (_this select 1) || + {isNull (_this select 2)} || + { + ropeUnwound (_this select 1) && + ropeUnwound (_this select 2) + } }, { params ["_flat", "_rope1", "_rope2", "_initialPitch"]; private _actualPitch = (_flat call BIS_fnc_getPitchBank) select 0; - if (0.5 in ([_rope1, _rope2] apply {ropeLength _x})) exitWith {}; + if ( + isNull _rope1 || + {isNull _rope2} || + {0.5 in ([_rope1, _rope2] apply {ropeLength _x})} + ) exitWith {}; if (_actualPitch - _initialPitch > 3) exitWith { [{ params ["_flat", "_rope1", "_rope2", "_initialPitch"]; @@ -40,6 +48,10 @@ Author: }, { _this call btc_fnc_tow_unwind; }, _this, 1, { + params ["_flat", "_rope1", "_rope2"]; + + private _longRope = [_rope2, _rope1] select (ropeLength _rope1 > ropeLength _rope2); + ropeUnwind [_longRope, 1, ropeLength _rope1 min ropeLength _rope2, false]; ["btc_tow_unwindDone", _this] call CBA_fnc_localEvent; }] call CBA_fnc_waitUntilAndExecute; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index f8019c5cd..836613cdf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1982,7 +1982,7 @@ Towing in progress, please wait... - Towing done. + Towing done From 3968b4e99a4de9abdaa56514e5e4447d167c8724 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 22 Jun 2020 18:28:39 +0200 Subject: [PATCH 114/264] Sperate vehicle at base and in the battelfiel --- .../core/def/mission.sqf | 1 + .../core/fnc/fob/create.sqf | 2 +- .../core/fnc/fob/redeploy.sqf | 27 ++++++++++++------- .../core/fnc/int/add_actions.sqf | 2 +- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index a0926ac57..75799d7a4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -349,6 +349,7 @@ btc_fob_mat = "Land_Cargo20_blue_F"; btc_fob_structure = "Land_Cargo_HQ_V1_F"; btc_fob_flag = "Flag_NATO_F"; btc_fob_id = 0; +btc_fob_minDistance = 1500; //IED btc_type_ieds_ace = ["IEDLandBig_F", "IEDLandSmall_F"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create.sqf index f18afb58b..03f5e30ad 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create.sqf @@ -26,7 +26,7 @@ params [ if (((position _mat) isFlatEmpty [1, 0, 0.9, 1, 0, false, _mat]) isEqualTo []) exitWith {(localize "STR_BTC_HAM_O_FOB_CREATE_H_AREA") call CBA_fnc_notify;}; -if (_mat inArea [getMarkerPos "btc_base", 2000, 2000, 0, false]) exitWith {(localize "STR_BTC_HAM_O_FOB_CREATE_H_DBASE") call CBA_fnc_notify;}; +if (_mat inArea [getMarkerPos "btc_base", btc_fob_minDistance, btc_fob_minDistance, 0, false]) exitWith {(localize "STR_BTC_HAM_O_FOB_CREATE_H_DBASE") call CBA_fnc_notify;}; if ((nearestObjects [position _mat, ["LandVehicle", "Air"], 10]) findIf {!(_x isKindOf "ace_fastroping_helper")} != -1) exitWith { (format [localize "STR_BTC_HAM_O_FOB_CREATE_H_CAREA", (nearestObjects [position _mat, ["LandVehicle", "Air"], 10]) apply {typeOf _x}]) call CBA_fnc_notify diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index 5e0c054be..308ce6de5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -36,21 +36,28 @@ private _childStatement = { if ([] call btc_fnc_fob_redeployCheck) then {[_player, _params, false] call BIS_fnc_moveToRespawnPosition}; }; -if (_params isEqualType "") then { // Redeploy on marker like rallypoints +if (_params isEqualTo "") then { // Redeploy on marker like rallypoints { private _action = [markerText _x, markerText _x, "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", _childStatement, {true}, {}, _x] call ace_interact_menu_fnc_createAction; _actions pushBack [_action, [], _target]; } forEach (([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]); } else { // Redeploy on object like FOB/Vehicles - private _center = [worldSize / 2, worldsize / 2, 0]; - _params params ["_min", "_max"]; - private _positions = (btc_player_side call BIS_fnc_getRespawnPositions) select { - if (alive _x) then { - private _dir = _center getDir _x; - _min <= _dir && - {_dir < _max} - } else { - false + private _getRespawnPositions = btc_player_side call BIS_fnc_getRespawnPositions; + private _positions = if (_params isEqualTo "Base") then { + _getRespawnPositions inAreaArray [getMarkerPos "btc_base", btc_fob_minDistance, btc_fob_minDistance] + } else { + private _center = [worldSize / 2, worldsize / 2, 0]; + _params params ["_min", "_max"]; + _getRespawnPositions select { + if ( + alive _x && {!(_x inArea [getMarkerPos "btc_base", btc_fob_minDistance, btc_fob_minDistance, 0, false])} + ) then { + private _dir = _center getDir _x; + _min <= _dir && + {_dir < _max} + } else { + false + }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 36d5b81a3..588243406 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -138,7 +138,7 @@ _actions pushBack ["redeploy", localize "STR_BTC_HAM_ACTION_BIRESPAWN", "\A3\ui_ }, {!btc_log_placing}]; _actions pushBack ["base", localize "STR_BTC_HAM_ACTION_REDEPLOYBASE", getText (configfile >> "CfgMarkers" >> getMarkerType "btc_base" >> "icon"), { if ([] call btc_fnc_fob_redeployCheck) then {[_player, btc_respawn_marker, false] call BIS_fnc_moveToRespawnPosition}; -}, {!btc_log_placing}]; +}, {!btc_log_placing}, {_this call btc_fnc_fob_redeploy}, "Base"]; _actions pushBack ["rallypoints", localize "STR_BTC_HAM_ACTION_REDEPLOYRALLY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\wait_ca.paa", {}, {!btc_log_placing}, {_this call btc_fnc_fob_redeploy}, ""]; _actions pushBack ["FOB", localize "STR_BTC_HAM_ACTION_REDEPLOYFOB", "\A3\Ui_f\data\Map\Markers\NATO\b_hq.paa", {}, {!btc_log_placing}]; { From 6bbde9ef7530204adf8ba680d6bd595a1e936fc4 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Thu, 25 Jun 2020 15:58:20 +0800 Subject: [PATCH 115/264] Add: delete ied function support rhsusaf m1132 vehicle Add: delete ied function support rhsusaf m1132 vehicle --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index ff1d1eea8..a11898791 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -25,7 +25,7 @@ params [ ["_vehicle", objNull, [objNull]] ]; -if !(_vehicle isKindOf "B_APC_Tracked_01_CRV_F") exitWith {}; +if !(_vehicle isKindOf "B_APC_Tracked_01_CRV_F" || _vehicle isKindOf "rhsusf_stryker_m1132_m2_wd" || _vehicle isKindOf "rhsusf_stryker_m1132_m2_d") exitWith {}; if (btc_ied_deleteOn > -1) exitWith {}; From 7f71e597e83dd183d57151fde98bb9f37c6bca78 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 25 Jun 2020 10:19:50 +0200 Subject: [PATCH 116/264] Add support of EDENinventory for btc_vehicles --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 5 +++-- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf | 1 + .../core/fnc/log/createVehicle.sqf | 7 ++++++- .../core/fnc/log/server_repair_wreck.sqf | 3 ++- =BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf | 5 ++++- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index c6452c6ed..41efe86eb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -135,14 +135,15 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], ["_fuelSource", [], [[]]], ["_pylons", [], [[]]], ["_isContaminated", false, [false]], - ["_supplyVehicle", [], [[]]] + ["_supplyVehicle", [], [[]]], + ["_EDENinventory", [], [[]]] ]; if (btc_debug_log) then { [format ["_veh = %1", _x], __FILE__, [false]] call btc_fnc_debug_message; }; - private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle] call btc_fnc_log_createVehicle; + private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle, _EDENinventory] call btc_fnc_log_createVehicle; if ((getPos _veh) select 2 < 0) then {_veh setVectorUp surfaceNormal position _veh;}; _veh setFuel _veh_fuel; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 04cfbd4a6..cdb8ecc77 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -155,6 +155,7 @@ private _array_veh = []; private _cont = [getWeaponCargo _x, getMagazineCargo _x, getItemCargo _x]; _data pushBack _cont; _data append ([_x] call btc_fnc_getVehProperties); + _data pushBack (_x getVariable ["btc_EDENinventory", []]); _array_veh pushBack _data; if (btc_debug_log) then { [format ["VEH %1 DATA %2", _x, _data], __FILE__, [false]] call btc_fnc_debug_message; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf index be9b393b8..c06ea5f82 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf @@ -39,7 +39,8 @@ params [ ["_fuelSource", [], [[]]], ["_pylons", [], [[]]], ["_isContaminated", false, [false]], - ["_supplyVehicle", [], [[]]] + ["_supplyVehicle", [], [[]]], + ["_EDENinventory", [], [[]]] ]; private _veh = createVehicle [_type, ASLToATL _pos, [], 0, "CAN_COLLIDE"]; @@ -47,6 +48,10 @@ _veh setDir _dir; _veh setPosASL _pos; [_veh, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle] call btc_fnc_setVehProperties; +if !(_EDENinventory isEqualTo []) then { + _veh setVariable ["btc_EDENinventory", _EDENinventory]; + [_veh, _EDENinventory] call btc_fnc_log_setCargo; +}; _veh setVariable ["btc_dont_delete", true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf index 01b6ac159..586752737 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf @@ -35,6 +35,7 @@ private _dir = getDir _veh; private _marker = _veh getVariable ["marker", ""]; private _vehProperties = [_veh] call btc_fnc_getVehProperties; _vehProperties set [5, false]; +private _EDENinventory = _veh getVariable ["btc_EDENinventory", []]; btc_vehicles = btc_vehicles - [_veh]; @@ -46,4 +47,4 @@ deleteVehicle _veh; [{ _this call btc_fnc_log_createVehicle; -}, [_type, [_x, _y, 0.5 + _z], _dir] + _vehProperties, 1] call CBA_fnc_waitAndExecute; +}, [_type, [_x, _y, 0.5 + _z], _dir] + _vehProperties + [_EDENinventory], 1] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index ac767d9fb..0597e26ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -22,7 +22,10 @@ if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldN setDate _date; { - [{!isNull _this}, {_this call btc_fnc_db_add_veh;}, _x] call CBA_fnc_waitUntilAndExecute; + [{!isNull _this}, { + _this setVariable ["btc_EDENinventory", [getWeaponCargo _this, getMagazineCargo _this, getItemCargo _this]]; + _this call btc_fnc_db_add_veh; + }, _x] call CBA_fnc_waitUntilAndExecute; } forEach btc_vehicles; }; From f99ebe722b50c6b17638bb0aec747985ee3b827f Mon Sep 17 00:00:00 2001 From: Gold John King Date: Thu, 25 Jun 2020 16:38:49 +0800 Subject: [PATCH 117/264] Update =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf Use parent's classname instead. Co-authored-by: Vdauphin --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index a11898791..fe274dc01 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -25,7 +25,7 @@ params [ ["_vehicle", objNull, [objNull]] ]; -if !(_vehicle isKindOf "B_APC_Tracked_01_CRV_F" || _vehicle isKindOf "rhsusf_stryker_m1132_m2_wd" || _vehicle isKindOf "rhsusf_stryker_m1132_m2_d") exitWith {}; +if !(_vehicle isKindOf "B_APC_Tracked_01_CRV_F" || _vehicle isKindOf "rhsusf_stryker_m1132_m2_base") exitWith {}; if (btc_ied_deleteOn > -1) exitWith {}; From b7b97cc428b2298ea4648b9dc2e7714bd72a6fa4 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 25 Jun 2020 20:51:09 +0200 Subject: [PATCH 118/264] Add Helo support for EDENinventory --- .../core/fnc/eh/veh_respawn.sqf | 8 +++++++- =BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf index 33e779133..f22e9ce2a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf @@ -25,6 +25,7 @@ params [ ]; private _data = _vehicle getVariable ["data_respawn", []]; +_data pushBack (_vehicle getVariable ["btc_EDENinventory", []]); [{ params [ @@ -49,7 +50,8 @@ private _data = _vehicle getVariable ["data_respawn", []]; ["_fuelSource", [], [[]]], ["_pylons", [], [[]]], ["_isContaminated", false, [false]], - ["_supplyVehicle", [], [[]]] + ["_supplyVehicle", [], [[]]], + ["_EDENinventory", [], [[]]] ]; private _vehicle = _type createVehicle _pos; @@ -58,6 +60,10 @@ private _data = _vehicle getVariable ["data_respawn", []]; _vehicle setVectorDirAndUp _vectorPos; [_vehicle, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle] call btc_fnc_setVehProperties; + if !(_EDENinventory isEqualTo []) then { + _vehicle setVariable ["btc_EDENinventory", _EDENinventory]; + [_vehicle, _EDENinventory] call btc_fnc_log_setCargo; + }; [_vehicle, _time] call btc_fnc_eh_veh_add_respawn; }, _data, 1] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index 0597e26ae..69a58d1ef 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -43,7 +43,10 @@ if (btc_p_db_autoRestart > 0) then { }, [], btc_p_db_autoRestartTime * 60 * 60 - 5 * 60] call CBA_fnc_waitAndExecute; }; -{[_x, 30] call btc_fnc_eh_veh_add_respawn;} forEach btc_helo; +{ + _x setVariable ["btc_EDENinventory", [getWeaponCargo _x, getMagazineCargo _x, getItemCargo _x]]; + [_x, 30] call btc_fnc_eh_veh_add_respawn; +} forEach btc_helo; if (btc_p_side_mission_cycle > 0) then { for "_i" from 1 to btc_p_side_mission_cycle do { From ad1be1a0fda117a566796bf21d71398e6b1c2869 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 25 Jun 2020 21:49:27 +0200 Subject: [PATCH 119/264] Add: objects - 2 drone operator - 2 CBRN - medical truck - m1132 - replace 1237 to m1230 --- .../mission_RHSUS_Altis.sqm | 252 +++++++++++++++--- .../mission_RHSUS_Tanoa.sqm | 230 ++++++++++++---- 2 files changed, 398 insertions(+), 84 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm index 3baf1203d..cd0c7eef4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm @@ -8,7 +8,7 @@ class EditorData toggles=513; class ItemIDProvider { - nextID=176; + nextID=182; }; class MarkerIDProvider { @@ -16,10 +16,10 @@ class EditorData }; class Camera { - pos[]={8362.7832,99.01162,10135.25}; - dir[]={-0.55701196,-0.51623613,-0.65068626}; - up[]={-0.33577716,0.85639238,-0.39224473}; - aside[]={-0.75972944,-2.507586e-007,0.65036023}; + pos[]={8276.2598,88.198135,10074.074}; + dir[]={-0.012094603,-0.67814827,-0.73493671}; + up[]={-0.011160755,0.73486549,-0.67812955}; + aside[]={-0.99994618,1.5294063e-007,0.016457703}; }; }; binarizationWanted=0; @@ -42,18 +42,19 @@ addons[]= "A3_Characters_F", "ace_explosives", "A3_Modules_F_Curator_Curator", - "A3_Characters_F_Mark", + "A3_Characters_F_Enoch", "rhsusf_c_fmtv", - "rhsusf_c_RG33L", + "rhsusf_c_Caiman", "A3_Soft_F_Enoch_Truck_01", "A3_Props_F_Enoch_Military_Decontamination", - "A3_Signs_F" + "A3_Signs_F", + "rhsusf_c_stryker" }; class AddonsMetaData { class List { - items=21; + items=22; class Item0 { className="A3_Ui_F"; @@ -70,12 +71,14 @@ class AddonsMetaData { className="RHS_US_A2Port_Armor"; name="M2 Bradley IFV"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item3 { className="RHS_US_A2_AirImport"; name="RHSUSF A2 Air Ports"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item4 @@ -157,8 +160,8 @@ class AddonsMetaData }; class Item15 { - className="A3_Characters_F_Mark"; - name="Arma 3 Marksmen - Characters and Clothing"; + className="A3_Characters_F_Enoch"; + name="Arma 3 Contact Platform - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; @@ -166,12 +169,14 @@ class AddonsMetaData { className="rhsusf_c_fmtv"; name="FMTV Trucks"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item17 { - className="rhsusf_c_RG33L"; - name="RG33L MRAP"; + className="rhsusf_c_Caiman"; + name="Caiman MRAP"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item18 @@ -195,6 +200,13 @@ class AddonsMetaData author="Bohemia Interactive"; url="https://www.arma3.com"; }; + class Item21 + { + className="rhsusf_c_stryker"; + name="IAV Stryker vehicles"; + author="Red Hammer Studios"; + url="http://www.rhsmods.org/"; + }; }; }; randomSeed=2442963; @@ -215,7 +227,7 @@ class CustomAttributes name="Multiplayer"; class Attribute0 { - property="RespawnTemplates"; + property="RespawnButton"; expression="true"; class Value { @@ -225,15 +237,16 @@ class CustomAttributes { type[]= { - "ARRAY" + "SCALAR" }; }; + value=1; }; }; }; class Attribute1 { - property="RespawnButton"; + property="RespawnTemplates"; expression="true"; class Value { @@ -243,10 +256,9 @@ class CustomAttributes { type[]= { - "SCALAR" + "ARRAY" }; }; - value=1; }; }; }; @@ -685,7 +697,7 @@ class Mission }; class Entities { - items=59; + items=61; class Item0 { dataType="Marker"; @@ -2327,8 +2339,8 @@ class Mission { isPlayable=1; }; - id=167; - type="B_Sharpshooter_F"; + id=176; + type="B_soldier_UAV_F"; class CustomAttributes { class Attribute0 @@ -2399,8 +2411,8 @@ class Mission { isPlayable=1; }; - id=166; - type="B_Sharpshooter_F"; + id=177; + type="B_soldier_UAV_F"; class CustomAttributes { class Attribute0 @@ -2466,13 +2478,55 @@ class Mission angles[]={0,5.701921,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=114; - type="B_Soldier_F"; + id=178; + type="B_W_Soldier_CBRN_F"; + class CustomAttributes + { + class Attribute0 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male05ENG"; + }; + }; + }; + class Attribute1 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; }; }; class Attributes @@ -2496,13 +2550,55 @@ class Mission angles[]={0,5.701921,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=116; - type="B_Soldier_F"; + id=179; + type="B_W_Soldier_CBRN_F"; + class CustomAttributes + { + class Attribute0 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male06ENG"; + }; + }; + }; + class Attribute1 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0.95999998; + }; + }; + }; + nAttributes=2; + }; }; }; class Attributes @@ -2897,8 +2993,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8272.0283,79.696327,10065.254}; - angles[]={0.17033349,0.95726073,6.2392135}; + position[]={8272.0283,81.307152,10065.254}; + angles[]={0.12205668,0.95726073,6.2392135}; }; side="Empty"; flags=4; @@ -2909,8 +3005,7 @@ class Mission name="btc_veh_6"; }; id=154; - type="rhsusf_M1237_M2_usarmy_d"; - atlOffset=-0.032234192; + type="rhsusf_M1230_M2_usarmy_d"; class CustomAttributes { class Attribute0 @@ -2940,7 +3035,7 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8276.9688,79.675079,10059.785}; + position[]={8276.9688,81.302948,10059.785}; angles[]={0.12205668,0.35431969,6.1297355}; }; side="Empty"; @@ -2952,8 +3047,7 @@ class Mission name="btc_veh_5"; }; id=155; - type="rhsusf_M1237_M2_usarmy_d"; - atlOffset=-0.030586243; + type="rhsusf_M1230_M2_usarmy_d"; class CustomAttributes { class Attribute0 @@ -3164,5 +3258,91 @@ class Mission type="RoadCone_L_F"; atlOffset=0.00018310547; }; + class Item59 + { + dataType="Object"; + class PositionInfo + { + position[]={8369.0508,74.643921,10109.3}; + angles[]={0.012007865,5.6318107,6.1861625}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable [""btc_dont_delete"",true];}"; + name="btc_veh_17"; + }; + id=180; + type="B_Truck_01_medical_F"; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; + }; + }; + class Item60 + { + dataType="Object"; + class PositionInfo + { + position[]={8374.2168,73.823952,10113.651}; + angles[]={6.279171,5.6747112,6.1848359}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable [""btc_dont_delete"",true];}"; + name="btc_veh_18"; + reportRemoteTargets=1; + receiveRemoteTargets=1; + reportOwnPosition=1; + }; + id=181; + type="rhsusf_stryker_m1132_m2_d"; + atlOffset=7.6293945e-006; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""rhs_weap_m4"",""rhs_weap_m240B"",""rhs_weap_M136"",""rhs_weap_M320"",""rhs_weap_M590_5RD"",""FirstAidKit"",""Medikit""],[2,1,2,1,1,10,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhsusf_100Rnd_762x51"",""rhsusf_5Rnd_00Buck"",""rhs_m136_mag"",""rhs_mag_M433_HEDP"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[75,11,11,20,2,20,10,8,4,10,4,4,10]],[[""ToolKit"",""MineDetector""],[1,1]],[[""rhsusf_falconii""],[8]]],false]"; + }; + }; + }; + nAttributes=1; + }; + }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm index 706e3d5bf..e12567ead 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm @@ -8,7 +8,7 @@ class EditorData toggles=517; class ItemIDProvider { - nextID=274; + nextID=280; }; class MarkerIDProvider { @@ -16,10 +16,10 @@ class EditorData }; class Camera { - pos[]={4254.6982,68.671448,3917.1865}; - dir[]={0.0048925737,-0.60088998,0.79932052}; - up[]={0.0036780338,0.799303,0.60091674}; - aside[]={0.9999845,3.9050065e-008,-0.0061211665}; + pos[]={4207.9658,63.28899,4003.0295}; + dir[]={0.51509511,-0.70204765,-0.49179742}; + up[]={0.50780344,0.7120958,-0.48483482}; + aside[]={-0.69058174,-5.789334e-007,-0.72329694}; }; }; binarizationWanted=0; @@ -34,21 +34,22 @@ addons[]= "A3_Characters_F", "ace_explosives", "A3_Modules_F_Curator_Curator", - "A3_Characters_F_Mark", + "A3_Characters_F_Enoch", "RHS_US_A2Port_Armor", "rhsusf_vehicles", "rhsusf_c_fmtv", - "rhsusf_c_RG33L", + "rhsusf_c_Caiman", "A3_Props_F_Enoch_Military_Decontamination", "A3_Signs_F", "A3_Soft_F_Enoch_Truck_01", - "A3_Soft_F_Exp_Truck_01" + "A3_Soft_F_Exp_Truck_01", + "rhsusf_c_stryker" }; class AddonsMetaData { class List { - items=17; + items=18; class Item0 { className="A3_Ui_F"; @@ -60,6 +61,7 @@ class AddonsMetaData { className="RHS_US_A2_AirImport"; name="RHSUSF A2 Air Ports"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item2 @@ -106,8 +108,8 @@ class AddonsMetaData }; class Item8 { - className="A3_Characters_F_Mark"; - name="Arma 3 Marksmen - Characters and Clothing"; + className="A3_Characters_F_Enoch"; + name="Arma 3 Contact Platform - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; @@ -115,6 +117,7 @@ class AddonsMetaData { className="RHS_US_A2Port_Armor"; name="M2 Bradley IFV"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item10 @@ -126,12 +129,14 @@ class AddonsMetaData { className="rhsusf_c_fmtv"; name="FMTV Trucks"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item12 { - className="rhsusf_c_RG33L"; - name="RG33L MRAP"; + className="rhsusf_c_Caiman"; + name="Caiman MRAP"; + author="Red Hammer Studios"; url="http://www.rhsmods.org/"; }; class Item13 @@ -162,6 +167,13 @@ class AddonsMetaData author="Bohemia Interactive"; url="https://www.arma3.com"; }; + class Item17 + { + className="rhsusf_c_stryker"; + name="IAV Stryker vehicles"; + author="Red Hammer Studios"; + url="http://www.rhsmods.org/"; + }; }; }; randomSeed=2442963; @@ -652,7 +664,7 @@ class Mission }; class Entities { - items=59; + items=61; class Item0 { dataType="Marker"; @@ -2684,8 +2696,8 @@ class Mission { isPlayable=1; }; - id=260; - type="B_Sharpshooter_F"; + id=274; + type="B_soldier_UAV_F"; atlOffset=1.9073486e-006; class CustomAttributes { @@ -2758,8 +2770,8 @@ class Mission { isPlayable=1; }; - id=261; - type="B_Sharpshooter_F"; + id=275; + type="B_soldier_UAV_F"; class CustomAttributes { class Attribute0 @@ -2821,18 +2833,17 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4203.8584,19.552221,4018.7021}; - angles[]={0,1.2144552,0}; + position[]={4203.8579,19.552235,4018.7021}; + angles[]={0,1.2144525,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=114; - type="B_Soldier_F"; - atlOffset=-3.8146973e-006; + id=276; + type="B_W_Soldier_CBRN_F"; class CustomAttributes { class Attribute0 @@ -2855,6 +2866,25 @@ class Mission }; }; class Attribute1 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male05ENG"; + }; + }; + }; + class Attribute2 { property="pitch"; expression="_this setpitch _value;"; @@ -2873,7 +2903,7 @@ class Mission }; }; }; - class Attribute2 + class Attribute3 { property="ace_isSurrendered"; expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; @@ -2892,7 +2922,7 @@ class Mission }; }; }; - nAttributes=3; + nAttributes=4; }; }; }; @@ -2900,7 +2930,6 @@ class Mission { }; id=113; - atlOffset=-3.8146973e-006; }; class Item29 { @@ -2914,17 +2943,17 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4204.375,19.535097,4017.2998}; - angles[]={0,1.2144552,0}; + position[]={4204.375,19.535101,4017.3}; + angles[]={0,1.2144525,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=116; - type="B_Soldier_F"; + id=277; + type="B_W_Soldier_CBRN_F"; class CustomAttributes { class Attribute0 @@ -2947,6 +2976,25 @@ class Mission }; }; class Attribute1 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male06ENG"; + }; + }; + }; + class Attribute2 { property="pitch"; expression="_this setpitch _value;"; @@ -2965,7 +3013,7 @@ class Mission }; }; }; - class Attribute2 + class Attribute3 { property="ace_isSurrendered"; expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; @@ -2984,7 +3032,7 @@ class Mission }; }; }; - nAttributes=3; + nAttributes=4; }; }; }; @@ -3999,8 +4047,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4230.4194,19.875408,3979.3396}; - angles[]={6.2352238,0.38933057,0.0079936078}; + position[]={4230.8506,21.472488,3979.1021}; + angles[]={6.2352223,0.38933057,0.0080009829}; }; side="Empty"; flags=4; @@ -4011,8 +4059,7 @@ class Mission name="btc_veh_6"; }; id=247; - type="rhsusf_M1237_M2_usarmy_wd"; - atlOffset=-0.036031723; + type="rhsusf_M1230_M2_usarmy_wd"; class CustomAttributes { class Attribute0 @@ -4042,8 +4089,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4235.7686,19.755186,3975.4988}; - angles[]={6.1980653,0.46773079,0.071872659}; + position[]={4236.7793,21.469738,3976.3633}; + angles[]={6.2325621,0.46773079,0.037316564}; }; side="Empty"; flags=4; @@ -4054,8 +4101,7 @@ class Mission name="btc_veh_5"; }; id=248; - type="rhsusf_M1237_M2_usarmy_wd"; - atlOffset=-0.03014183; + type="rhsusf_M1230_M2_usarmy_wd"; class CustomAttributes { class Attribute0 @@ -4089,6 +4135,7 @@ class Mission angles[]={6.2166181,1.6537119,0.066715054}; }; side="Empty"; + flags=4; class Attributes { init="call{this setVariable ['bin_deconshower_disableAction',true];}"; @@ -4096,7 +4143,7 @@ class Mission }; id=264; type="DeconShower_02_F"; - atlOffset=0.25780678; + atlOffset=0.24474525; class CustomAttributes { class Attribute0 @@ -4171,7 +4218,7 @@ class Mission }; id=266; type="RoadCone_L_F"; - atlOffset=0.0019683838; + atlOffset=0.00046539307; }; class Item52 { @@ -4188,7 +4235,7 @@ class Mission }; id=267; type="RoadCone_L_F"; - atlOffset=0.0019683838; + atlOffset=0.00038909912; }; class Item53 { @@ -4205,7 +4252,7 @@ class Mission }; id=268; type="RoadCone_L_F"; - atlOffset=0.0019683838; + atlOffset=-0.0011043549; }; class Item54 { @@ -4222,7 +4269,7 @@ class Mission }; id=269; type="RoadCone_L_F"; - atlOffset=0.0019664764; + atlOffset=0.001871109; }; class Item55 { @@ -4242,7 +4289,7 @@ class Mission }; id=270; type="B_T_Truck_01_flatbed_F"; - atlOffset=0.0030002594; + atlOffset=0.0056362152; class CustomAttributes { class Attribute0 @@ -4396,5 +4443,92 @@ class Mission nAttributes=1; }; }; + class Item59 + { + dataType="Object"; + class PositionInfo + { + position[]={4240.8691,22.042919,3906.6191}; + angles[]={0.018657569,1.6752368,0.095713861}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable [""btc_dont_delete"",true];}"; + name="btc_veh_17"; + }; + id=278; + type="B_T_Truck_01_medical_F"; + atlOffset=-0.010112762; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; + }; + }; + class Item60 + { + dataType="Object"; + class PositionInfo + { + position[]={4243.2446,22.364164,3898.8474}; + angles[]={6.2698536,1.6556579,0.15084518}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable [""btc_dont_delete"",true];}"; + name="btc_veh_18"; + reportRemoteTargets=1; + receiveRemoteTargets=1; + reportOwnPosition=1; + }; + id=279; + type="rhsusf_stryker_m1132_m2_wd"; + atlOffset=-0.022989273; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""rhs_weap_m4"",""rhs_weap_m240B"",""rhs_weap_M136"",""rhs_weap_M320"",""rhs_weap_M590_5RD"",""FirstAidKit"",""Medikit""],[2,1,2,1,1,10,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhsusf_100Rnd_762x51"",""rhsusf_5Rnd_00Buck"",""rhs_m136_mag"",""rhs_mag_M433_HEDP"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[75,11,11,20,2,20,10,8,4,10,4,4,10]],[[""ToolKit"",""MineDetector""],[1,1]],[[""rhsusf_falconii""],[8]]],false]"; + }; + }; + }; + nAttributes=1; + }; + }; }; }; From 7d4467685fcbc7f762df2e8b38be23e52c3010e3 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Fri, 3 Jul 2020 17:23:58 +0800 Subject: [PATCH 120/264] Fix: failed to spawn enemy vehicles Fix: failed to spawn enemy vehicles --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index 73d4b41c3..67ce9a333 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -37,7 +37,6 @@ params [ ["_group", grpNull, [grpNull]], ["_pos", [0, 0, 0], [[]]], ["_veh_type", selectRandom btc_type_motorized, [""]], - ["_code", {}, [{}]], ["_dir", 0, [0]], ["_type_units", btc_type_units, [[]]], ["_type_divers", btc_type_divers, [[]]], From 06e8c16ddccb23f09a840783180c6dc986b0da78 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Sat, 4 Jul 2020 17:16:44 +0800 Subject: [PATCH 121/264] Add: Simplified Chinese Translation for Redeploy Add: Simplified Chinese Translation for Redeploy --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index ff1bfb4dd..f047b66ff 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -467,6 +467,7 @@ Allow respawn from FOB to base: + 允许从FOB重新部署至基地 FOB and Rallypoint @@ -1394,15 +1395,19 @@ BI respawn + BI重生 Re-deploy base + 重新部署至基地 Re-deploy rallypoints + 重新部署至集合点 Re-deploy FOB/vehicles + 重新部署至FOB/载具 From 4cfcf6943c8d65689db2242afa92067e31799834 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 11 Jul 2020 14:14:27 +0200 Subject: [PATCH 122/264] Share btc_hideouts --- .../core/fnc/info/ask.sqf | 12 +++--------- .../core/fnc/info/ask_reputation.sqf | 7 +------ .../core/fnc/info/hideout_asked.sqf | 14 ++++++-------- .../core/fnc/int/ask_var.sqf | 12 ------------ .../core/fnc/mil/create_hideout.sqf | 1 + .../core/fnc/mil/hd_hideout.sqf | 1 + 6 files changed, 12 insertions(+), 35 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf index 038fc3f22..dd13decc8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf @@ -71,13 +71,7 @@ if (_info_type isEqualTo "NO") exitWith { [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_NOINFO"] call btc_fnc_showSubtitle; }; -btc_int_ask_data = nil; -[8] remoteExecCall ["btc_fnc_int_ask_var", 2]; - -waitUntil {!(isNil "btc_int_ask_data")}; - -private _final_phase = btc_int_ask_data isEqualTo 0; - +private _final_phase = (count btc_hideouts) isEqualTo 0; private _info = selectRandomWeighted [ "TROOPS", 0.4, ["HIDEOUT", "TROOPS"] select _final_phase, 0.4, @@ -91,7 +85,7 @@ switch (_info_type) do { [name _man, true] call btc_fnc_info_troops; }; case "HIDEOUT" : { - [name _man, true] spawn btc_fnc_info_hideout_asked; + [name _man, true] call btc_fnc_info_hideout_asked; }; case "CACHE" : { [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_CACHEMAP"] call btc_fnc_showSubtitle; @@ -106,7 +100,7 @@ switch (_info_type) do { [name _man, false] call btc_fnc_info_troops; }; case "HIDEOUT" : { - [name _man, false] spawn btc_fnc_info_hideout_asked; + [name _man, false] call btc_fnc_info_hideout_asked; }; case "CACHE" : { [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_CACHEMAP"] call btc_fnc_showSubtitle; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask_reputation.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask_reputation.sqf index 3719d0fd8..de5da75e1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask_reputation.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask_reputation.sqf @@ -37,12 +37,7 @@ private _rep = btc_int_ask_data; private _ho_left = ""; if ((round random 1) isEqualTo 1) then { - btc_int_ask_data = nil; - [8] remoteExecCall ["btc_fnc_int_ask_var", 2]; - - waitUntil {!(isNil "btc_int_ask_data")}; - - _ho_left = format [localize "STR_BTC_HAM_CON_INFO_ASKREP_HIDEOUTS", btc_int_ask_data]; + _ho_left = format [localize "STR_BTC_HAM_CON_INFO_ASKREP_HIDEOUTS", count btc_hideouts]; }; private _info_type = switch (true) do { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/hideout_asked.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/hideout_asked.sqf index de47e346e..9da035e98 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/hideout_asked.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/hideout_asked.sqf @@ -29,13 +29,12 @@ params [ ]; if (_is_real) then { - btc_int_ask_data = nil; - [1, player] remoteExecCall ["btc_fnc_int_ask_var", 2]; - - waitUntil {!(isNil "btc_int_ask_data")}; + private _index = btc_hideouts findIf { + _x inArea [getPosWorld player, 3000, 3000, 0, false] + }; - if (!isNull btc_int_ask_data) then { - private _hideout = btc_int_ask_data; + if (_index > -1) then { + private _hideout = btc_hideouts select _index; private _dist = (player distance _hideout) + (random 500) - (random 500); private _dir = player getDir _hideout; private _card = [_dir] call btc_fnc_get_cardinal; @@ -45,8 +44,7 @@ if (_is_real) then { }; } else { if ((random 1) > 0.5) then { - private _array = ["N", "E", "W", "S", "NW", "NE", "SE", "SW"]; - private _dir = selectRandom _array; + private _dir = selectRandom ["N", "E", "W", "S", "NW", "NE", "SE", "SW"]; private _dist = 300 + (random 2000); _text = format [localize "STR_BTC_HAM_CON_INFO_ASKHIDEOUT_TRUE", _dir, round _dist]; } else { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf index 4e45dae46..2e955cce0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/ask_var.sqf @@ -29,18 +29,6 @@ params [ ]; private _data = switch (_id) do { - case 0 : {_target getVariable ["active", false];}; - case 1 : { - private _hd = objNull; - { - if (_x inArea [getPosWorld _target, 3000, 3000, 0, false]) then { - _hd = _x; - }; - } forEach btc_hideouts; - _hd; - }; - case 3 : {_target getVariable ["cargo", []];}; - case 8 : {count btc_hideouts;}; case 9 : {[_target] call btc_fnc_db_saveObjectStatus;}; case 10 : { private _units = allUnits select {alive _x}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf index a0722105c..ba2dd3ef4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf @@ -122,5 +122,6 @@ if (btc_debug_log) then { btc_hideouts_id = btc_hideouts_id + 1; btc_hideouts pushBack _hideout; +publicVariable "btc_hideouts"; true diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf index 8a7c5ce80..7f487f432 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf @@ -42,6 +42,7 @@ private _explosive = getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") if (_explosive && {_damage > 0.6}) then { btc_hideouts deleteAt (btc_hideouts find _hideout); + publicVariable "btc_hideouts"; [btc_rep_bonus_hideout, _source] call btc_fnc_rep_change; From 1156d90b24fa7336d52354f2317d76b888eab7a3 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 14 Jul 2020 17:01:38 +0200 Subject: [PATCH 123/264] Add Animals --- .../core/def/mission.sqf | 2 + .../core/fnc/city/activate.sqf | 30 ++++++++++++++- .../core/fnc/city/de_activate.sqf | 21 +++++++++++ .../core/fnc/compile.sqf | 1 + .../core/fnc/debug/marker.sqf | 17 +++++++++ .../core/fnc/delay/createAgent.sqf | 37 +++++++++++++++++++ .../core/fnc/eh/server.sqf | 7 ++++ .../core/fnc/rep/hd.sqf | 10 ++++- .../core/fnc/rep/killed.sqf | 10 ++++- .../stringtable.xml | 2 +- docs/InGame-documentation.md | 2 +- 11 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 5a918128c..c56bfb31c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -650,7 +650,9 @@ btc_rep_bonus_mil_killed = 0.25; btc_rep_bonus_IEDCleanUp = 10; btc_rep_malus_civ_hd = - 10; +btc_rep_malus_animal_hd = - 5; btc_rep_malus_civ_killed = - 10; +btc_rep_malus_animal_killed = - 5; btc_rep_malus_civ_firenear = - 5; btc_rep_malus_player_respawn = - 10; btc_rep_malus_veh_killed = - 25; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 69717a265..0b823d1dd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -47,6 +47,7 @@ _city setVariable ["activating", true]; private _is_init = _city getVariable ["initialized", false]; private _data_units = _city getVariable ["data_units", []]; +private _data_animals = _city getVariable ["data_animals", []]; private _type = _city getVariable ["type", ""]; private _radius = _city getVariable ["radius", 100]; private _has_en = _city getVariable ["occupied", false]; @@ -111,10 +112,12 @@ if !(_data_units isEqualTo []) then { }); if (_has_en) then { - for "_i" from 1 to (round (_p_mil_group_ratio * (1 + random _max_number_group))) do {[_city, _spawningRadius, 1 + round random [0, 1, 2], random 1] call btc_fnc_mil_create_group;}; + for "_i" from 1 to (round (_p_mil_group_ratio * (1 + random _max_number_group))) do { + [_city, _spawningRadius, 1 + round random [0, 1, 2], random 1] call btc_fnc_mil_create_group; + }; }; - //Spawn civilians + // Spawn civilians if (_type != "Hill") then { private _max_number_group = (switch _type do { case "NameLocal" : {3}; @@ -127,6 +130,29 @@ if !(_data_units isEqualTo []) then { [_city, _spawningRadius/3, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; }; }; +if !(_data_animals isEqualTo []) then { + { + _x call btc_fnc_delay_createAgent; + } forEach _data_animals; +} else { + // Spawn animals + private _max_number_animalsGroup = (switch _type do { + case "Hill" : {3}; + case "NameLocal" : {3}; + case "NameVillage" : {2}; + case "NameCity" : {1}; + case "NameCityCapital" : {0}; + case "Airport" : {0}; + case "NameMarine" : {0}; + default {0}; + }); + for "_i" from 1 to (round (random _max_number_animalsGroup)) do { + private _pos = [_city, _spawningRadius/3] call CBA_fnc_randPos; + for "_i" from 1 to (round (random 3)) do { + [selectRandom ["Hen_random_F","Sheep_random_F"], [_pos, 6] call CBA_fnc_randPos] call btc_fnc_delay_createAgent; + }; + }; +}; if (_city getVariable ["spawn_more", false]) then { _city setVariable ["spawn_more", false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index 8377b73b6..b89d8774d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -69,8 +69,29 @@ if !(_city getVariable ["active", false]) exitWith {}; }; } forEach allGroups; + private _data_animals = []; + { + private _agent = agent _x; + if ( + _agent inArea [_pos_city, _radius, _radius, 0, false] && + {alive _agent} && + {!(_x getVariable ["no_cache", false])} + ) then { + _data_animals pushBack [ + typeOf _agent, + getPosATL _agent + ]; + _agent call CBA_fnc_deleteEntity; + + if (btc_debug_log) then { + [format ["data animals = %1", _data_animals], __FILE__, [false]] call btc_fnc_debug_message; + }; + }; + } forEach agents; + _city setVariable ["has_suicider", _has_suicider]; _city setVariable ["data_units", _data_units]; + _city setVariable ["data_animals", _data_animals]; _city setVariable ["active", false]; if (!btc_hideout_cap_checking) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 8749be2df..73ca73ce3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -67,6 +67,7 @@ if (isServer) then { //DELAY btc_fnc_delay_createUnit = compile preprocessFileLineNumbers "core\fnc\delay\createUnit.sqf"; btc_fnc_delay_createVehicle = compile preprocessFileLineNumbers "core\fnc\delay\createVehicle.sqf"; + btc_fnc_delay_createAgent = compile preprocessFileLineNumbers "core\fnc\delay\createAgent.sqf"; //EH btc_fnc_eh_veh_add_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_add_respawn.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/marker.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/marker.sqf index 9e04dd239..2c5a1bd7f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/marker.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/debug/marker.sqf @@ -68,3 +68,20 @@ private _cfgVehicles = configFile >> "CfgVehicles"; 0.05 ]; } forEach _units; + +{ + private _agent = agent _x; + if !(isNull _agent) then { + _display drawIcon [ + getText (_cfgVehicles >> typeOf _agent >> "Icon"), + [0.5, 0.5, 0.5, [1, 0.3] select (local _agent)], + visiblePosition _agent, + 20, + 20, + direction _agent, + "", + 0, + 0.05 + ]; + }; +} forEach agents; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf new file mode 100644 index 000000000..280dec744 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf @@ -0,0 +1,37 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_delay_createAgent + +Description: + Create agent when all previous agents have been created. btc_delay_createagent define the time (in second) when the agent will be created. + +Parameters: + _agentType - Type of agents to create. [Array] + _pos - Position of creation. [Array] + _special - Agent placement special. [String] + +Returns: + +Examples: + (begin example) + ["Sheep_random_F", getPosATL player] call btc_fnc_delay_createAgent; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +btc_delay_createUnit = btc_delay_createUnit + 0.1; + +[{ + params [ + ["_agentType", "", [""]], + ["_pos", [0, 0, 0], [[]]], + ["_special", "CAN_COLLIDE", [""]] + ]; + + createAgent [_agentType, _pos, [], 0, _special]; + + btc_delay_createUnit = btc_delay_createUnit - 0.1; +}, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 7e080e731..c2fe5f16f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -26,6 +26,13 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; }] call CBA_fnc_addClassEventHandler; +["Animal", "InitPost", { + [(_this select 0), "killed", { + params ["_unit", "_killer", "_instigator"]; + [_unit, "", _killer, _instigator] call btc_fnc_rep_killed; + }] call CBA_fnc_addBISEventHandler; + [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; +}] call CBA_fnc_addClassEventHandler; ["ace_killed", btc_fnc_mil_unit_killed] call CBA_fnc_addEventHandler; addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 32fc18a91..b394d66b7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -32,7 +32,10 @@ params [ ["_ammo", "", [""]] ]; -if !(side group _unit isEqualTo civilian) exitWith {_dam}; +if ( + !(side group _unit isEqualTo civilian) && + {!isAgent teamMember _unit} +) exitWith {_dam}; if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_steering", "wheel_2_2_steering", "palivo", "engine", "glass1", "glass2", "glass3", "glass4", "karoserie", "palivo", "fuel_hitpoint", "engine_hitpoint", "body_hitpoint"]) then { if (isPlayer _injurer && {_dam > 0.01}) then { @@ -41,7 +44,10 @@ if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_ste _dam }; - [btc_rep_malus_civ_hd, _injurer] call btc_fnc_rep_change; + [ + [btc_rep_malus_civ_hd, btc_rep_malus_animal_hd] select (isAgent teamMember _unit), + _injurer + ] call btc_fnc_rep_change; if (btc_global_reputation < 600) then {[getPos _unit] call btc_fnc_rep_eh_effects;}; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf index a032f3a13..da6e652ed 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf @@ -23,10 +23,16 @@ Author: params ["_unit", "_causeOfDeath", "_killer", "_instigator"]; -if !(side group _unit isEqualTo civilian) exitWith {}; +if ( + !(side group _unit isEqualTo civilian) && + {!isAgent teamMember _unit} +) exitWith {}; if (isPlayer _instigator) then { - [btc_rep_malus_civ_killed, _instigator] call btc_fnc_rep_change; + [ + [btc_rep_malus_civ_killed, btc_rep_malus_animal_killed] select (isAgent teamMember _unit), + _instigator + ] call btc_fnc_rep_change; if (btc_global_reputation < 600) then { [getPos _unit] call btc_fnc_rep_eh_effects; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 65c54b386..985ebbdce 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -181,7 +181,7 @@ 声誉 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 6f4bb6920..2332dc7ca 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -118,7 +118,7 @@ At the beginning you have a very low reputation level, so civilians won't help y ### Good actions: Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. ### Bad actions: -Bad actions cause bad effects: killing civilians, mutilating alive/dead civilians, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. +Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. ## Civil Orders Any player can give orders to civilians. To do this, just open your self interaction menu and select 'ORDERS' or use one of the shortcuts. Shortcuts can changed under 'configure >> controls>> configure addons >> Hearts and Minds: Mission (drop down menu)'. Your options are: From 92c4cc501cfa579182a197a251157aada608a894 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 14 Jul 2020 23:03:01 +0200 Subject: [PATCH 124/264] Some civilian mode does not inerate from civilian --- .../core/fnc/eh/server.sqf | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 7e080e731..b62818647 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -22,10 +22,12 @@ Author: addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; ["ace_explosives_defuse", btc_fnc_rep_explosives_defuse] call CBA_fnc_addEventHandler; ["ace_killed", btc_fnc_rep_killed] call CBA_fnc_addEventHandler; -["Civilian", "InitPost", { - [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; - [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; -}] call CBA_fnc_addClassEventHandler; +{ + [_x, "InitPost", { + [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; + [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; + }, false] call CBA_fnc_addClassEventHandler; +} forEach btc_civ_type_units; ["ace_killed", btc_fnc_mil_unit_killed] call CBA_fnc_addEventHandler; addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; @@ -34,7 +36,7 @@ if (btc_p_auto_db) then { }; if (btc_p_chem) then { ["ace_cargoLoaded", btc_fnc_chem_propagate] call CBA_fnc_addEventHandler; - ["DeconShower_01_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction',true];}] call CBA_fnc_addClassEventHandler; + ["DeconShower_01_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction',true]}] call CBA_fnc_addClassEventHandler; ["DeconShower_02_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction',true]}] call CBA_fnc_addClassEventHandler; }; From 74af7a7f57d3ec33e74254f2c223bb2e094d1b1d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 15 Jul 2020 13:43:55 +0200 Subject: [PATCH 125/264] Add DB and animals --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 3 +++ =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf | 1 + =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 5 ++++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf | 1 + 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index c56bfb31c..6193b50c4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -344,6 +344,9 @@ btc_w_civs = [ ]; btc_g_civs = ["HandGrenade", "MiniGrenade", "ACE_M84", "ACE_M84"]; +// ANIMALS +btc_animals_type = ["Hen_random_F", "Cock_random_F", "Fin_random_F", "Alsatian_Random_F", "Goat_random_F", "Sheep_random_F"]; + //FOB btc_fob_mat = "Land_Cargo20_blue_F"; btc_fob_structure = "Land_Cargo_HQ_V1_F"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 0b823d1dd..b8847bca1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -149,7 +149,7 @@ if !(_data_animals isEqualTo []) then { for "_i" from 1 to (round (random _max_number_animalsGroup)) do { private _pos = [_city, _spawningRadius/3] call CBA_fnc_randPos; for "_i" from 1 to (round (random 3)) do { - [selectRandom ["Hen_random_F","Sheep_random_F"], [_pos, 6] call CBA_fnc_randPos] call btc_fnc_delay_createAgent; + [selectRandom btc_animals_type, [_pos, 6] call CBA_fnc_randPos] call btc_fnc_delay_createAgent; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf index fc05939dc..26cb11c86 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/create.sqf @@ -46,6 +46,7 @@ _city setVariable ["active", false]; _city setVariable ["type", _type]; _city setVariable ["spawn_more", false]; _city setVariable ["data_units", []]; +_city setVariable ["data_animals", []]; _city setVariable ["occupied", _has_en]; if (btc_p_sea) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 41efe86eb..de10a9748 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -30,7 +30,9 @@ setDate (profileNamespace getVariable [format ["btc_hm_%1_date", _name], date]); private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities", _name], []]; { - _x params ["_id", "_initialized", "_spawn_more", "_occupied", "_data_units", "_has_ho", "_ho_units_spawned", "_ieds", "_has_suicider"]; + _x params ["_id", "_initialized", "_spawn_more", "_occupied", "_data_units", "_has_ho", "_ho_units_spawned", "_ieds", "_has_suicider", + ["_data_animals", [], [[]]] + ]; private _city = btc_city_all select _id; @@ -42,6 +44,7 @@ private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities _city setVariable ["ho_units_spawned", _ho_units_spawned]; _city setVariable ["ieds", _ieds]; _city setVariable ["has_suicider", _has_suicider]; + _city setVariable ["data_animals", _data_animals]; if (btc_debug) then { private _marker = _city getVariable ["marker", ""]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 36097c200..3beb19549 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -68,6 +68,7 @@ private _cities_status = []; _city_status pushBack (_x getVariable ["ho_units_spawned", false]); _city_status pushBack (_x getVariable ["ieds", []]); _city_status pushBack (_x getVariable ["has_suicider", false]); + _city_status pushBack (_x getVariable ["data_animals", []]); _cities_status pushBack _city_status; if (btc_debug_log) then { From 8527f8a9984b703e5a6dde9a423617661c251561 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 16 Jul 2020 18:48:37 +0200 Subject: [PATCH 126/264] Fix event handle damage and add parameter --- .../core/def/mission.sqf | 5 ++- .../core/def/param.hpp | 6 +++ .../core/fnc/city/activate.sqf | 44 ++++++++++--------- .../core/fnc/rep/hd.sqf | 38 ++++++++-------- .../stringtable.xml | 3 ++ README.md | 2 +- 6 files changed, 56 insertions(+), 42 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 6193b50c4..4bba192b9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -55,6 +55,7 @@ private _p_skill = [ btc_p_is_free_prob = ("btc_p_is_free_prob" call BIS_fnc_getParamValue)/100; btc_p_mil_group_ratio = ("btc_p_mil_group_ratio" call BIS_fnc_getParamValue)/100; btc_p_civ_group_ratio = ("btc_p_civ_group_ratio" call BIS_fnc_getParamValue)/100; +btc_p_animals_group_ratio = ("btc_p_animals_group_ratio" call BIS_fnc_getParamValue)/100; private _wp_house_probability = ("btc_p_wp_house_probability" call BIS_fnc_getParamValue)/100; btc_p_veh_armed_ho = ("btc_p_veh_armed_ho" call BIS_fnc_getParamValue) isEqualTo 1; btc_p_veh_armed_spawn_more = ("btc_p_veh_armed_spawn_more" call BIS_fnc_getParamValue) isEqualTo 1; @@ -652,8 +653,8 @@ btc_rep_bonus_hideout = 200; btc_rep_bonus_mil_killed = 0.25; btc_rep_bonus_IEDCleanUp = 10; -btc_rep_malus_civ_hd = - 10; -btc_rep_malus_animal_hd = - 5; +btc_rep_malus_civ_hd = - 2; +btc_rep_malus_animal_hd = - 1; btc_rep_malus_civ_killed = - 10; btc_rep_malus_animal_killed = - 5; btc_rep_malus_civ_firenear = - 5; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index f45895775..561d4436f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -131,6 +131,12 @@ class Params { texts[]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"}; default = 100; }; + class btc_p_animals_group_ratio { // Animal density: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_SPWAN_ANIMALS_DENSITY"]); + values[]={0,10,20,30,40,50,60,70,80,90,100}; + texts[]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"}; + default = 100; + }; class btc_p_wp_house_probability { // Density of military in house: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_SPWAN_MIL_INHOUSE_DENSITY"]); values[]={0,10,20,30,40,50,60,70,80,90,100}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index b8847bca1..d1f985bbd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -9,6 +9,7 @@ Parameters: _id - Number of the city will be activated. [Number] _p_mil_group_ratio - Enemy density. [Number] _p_civ_group_ratio - Civilian density. [Number] + _p_animals_group_ratio - Animal density. [Number] _p_civ_max_veh - Maximum number of civilian patrol. [Number] _p_patrol_max - Maximum number of enemy patrol. [Number] _wp_ratios - Ratio of spawned group in and out houses. [Array] @@ -29,6 +30,7 @@ params [ ["_id", 0, [0]], ["_p_mil_group_ratio", btc_p_mil_group_ratio, [0]], ["_p_civ_group_ratio", btc_p_civ_group_ratio, [0]], + ["_p_animals_group_ratio", btc_p_animals_group_ratio, [0]], ["_p_civ_max_veh", btc_p_civ_max_veh, [0]], ["_p_patrol_max", btc_p_patrol_max, [0]], ["_wp_ratios", btc_p_mil_wp_ratios, [[]]] @@ -130,26 +132,28 @@ if !(_data_units isEqualTo []) then { [_city, _spawningRadius/3, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; }; }; -if !(_data_animals isEqualTo []) then { - { - _x call btc_fnc_delay_createAgent; - } forEach _data_animals; -} else { - // Spawn animals - private _max_number_animalsGroup = (switch _type do { - case "Hill" : {3}; - case "NameLocal" : {3}; - case "NameVillage" : {2}; - case "NameCity" : {1}; - case "NameCityCapital" : {0}; - case "Airport" : {0}; - case "NameMarine" : {0}; - default {0}; - }); - for "_i" from 1 to (round (random _max_number_animalsGroup)) do { - private _pos = [_city, _spawningRadius/3] call CBA_fnc_randPos; - for "_i" from 1 to (round (random 3)) do { - [selectRandom btc_animals_type, [_pos, 6] call CBA_fnc_randPos] call btc_fnc_delay_createAgent; +if (btc_p_animals_group_ratio > 0) then { + if !(_data_animals isEqualTo []) then { + { + _x call btc_fnc_delay_createAgent; + } forEach _data_animals; + } else { + // Spawn animals + private _max_number_animalsGroup = (switch _type do { + case "Hill" : {3}; + case "NameLocal" : {3}; + case "NameVillage" : {2}; + case "NameCity" : {1}; + case "NameCityCapital" : {0}; + case "Airport" : {0}; + case "NameMarine" : {0}; + default {0}; + }); + for "_i" from 1 to (round (random _max_number_animalsGroup)) do { + private _pos = [_city, _spawningRadius/3] call CBA_fnc_randPos; + for "_i" from 1 to (round (random 3)) do { + [selectRandom btc_animals_type, [_pos, 6] call CBA_fnc_randPos] call btc_fnc_delay_createAgent; + }; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index b394d66b7..27fcf38cf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -32,28 +32,28 @@ params [ ["_ammo", "", [""]] ]; +if (!isPlayer _injurer || {_dam <= 0.1}) exitWith {_dam}; +private _isAgent = isAgent teamMember _unit; if ( - !(side group _unit isEqualTo civilian) && - {!isAgent teamMember _unit} + !_isAgent && { + _part isEqualTo "" || + {!(side group _unit isEqualTo civilian)} + } ) exitWith {_dam}; -if (_part in ["body", "wheel_1_1_steering", "wheel_1_2_steering", "wheel_2_1_steering", "wheel_2_2_steering", "palivo", "engine", "glass1", "glass2", "glass3", "glass4", "karoserie", "palivo", "fuel_hitpoint", "engine_hitpoint", "body_hitpoint"]) then { - if (isPlayer _injurer && {_dam > 0.01}) then { - if (!isServer) exitWith { - _this remoteExecCall ["btc_fnc_rep_hd", 2]; - _dam - }; - - [ - [btc_rep_malus_civ_hd, btc_rep_malus_animal_hd] select (isAgent teamMember _unit), - _injurer - ] call btc_fnc_rep_change; - - if (btc_global_reputation < 600) then {[getPos _unit] call btc_fnc_rep_eh_effects;}; - if (btc_debug_log) then { - [format ["REP HD = GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; - }; - }; +if (!isServer) exitWith { + _this remoteExecCall ["btc_fnc_rep_hd", 2]; + _dam +}; + +[ + [btc_rep_malus_civ_hd, btc_rep_malus_animal_hd] select _isAgent, + _injurer +] call btc_fnc_rep_change; +if (btc_global_reputation < 600) then {[getPos _unit] call btc_fnc_rep_eh_effects;}; + +if (btc_debug_log) then { + [format ["REP HD = GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; }; _dam diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 985ebbdce..18f23ed5b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -340,6 +340,9 @@ 平民密度: Densidade civil: + + Animal density: + Density of military in house: Feinddichte in Gebäuden: diff --git a/README.md b/README.md index bfdece3d6..8f2cc9e34 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Online [wiki available](http://vdauphin.github.io/HeartsAndMinds/). - **Dedicated server support only** - Dynamic battlefield - - Enemies and civilian spawn randomly + - Enemies, civilian and animals spawn randomly - Random patrol and traffic - Dynamic caching system to save performance - Extend battlefield to sea (you are not safe on sea!) From c0a176aed6894a690e12c4d62a9f7538894c621c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 18 Jul 2020 18:34:25 +0200 Subject: [PATCH 127/264] Delay ied, patrol and trafffic creation --- .../core/fnc/city/activate.sqf | 16 +++++---- .../core/fnc/compile.sqf | 1 + .../core/fnc/delay/exec.sqf | 35 +++++++++++++++++++ 3 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 69717a265..d01ccc34a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -89,8 +89,12 @@ if (!_is_init) then { _city setVariable ["active", true]; if !(_ieds isEqualTo []) then { - private _ieds_data = _ieds apply {_x call btc_fnc_ied_create}; - [_city, _ieds_data] call btc_fnc_ied_check; + [[_city, _ieds], { + params ["_city", "_ieds"]; + + private _ieds_data = _ieds apply {_x call btc_fnc_ied_create}; + [_city, _ieds_data] call btc_fnc_ied_check; + }] call btc_fnc_delay_exec; }; if !(_data_units isEqualTo []) then { @@ -189,9 +193,9 @@ if !(_city getVariable ["has_suicider", false]) then { btc_ied_suic_spawned = time; _city setVariable ["has_suicider", true]; if (selectRandom [false, false, btc_p_ied_drone]) then { - [_city, _spawningRadius] call btc_fnc_ied_drone_create; + [[_city, _spawningRadius], btc_fnc_ied_drone_create] call btc_fnc_delay_exec; } else { - [_city, _spawningRadius] call btc_fnc_ied_suicider_create; + [[_city, _spawningRadius], btc_fnc_ied_suicider_create] call btc_fnc_delay_exec; }; }; }; @@ -221,7 +225,7 @@ if (_number_patrol_active < _p_patrol_max) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [1 + round random 1, _city, _radius + btc_patrol_area] call btc_fnc_mil_create_patrol; + [[1 + round random 1, _city, _radius + btc_patrol_area], btc_fnc_mil_create_patrol] call btc_fnc_delay_exec; }; if (btc_debug_log) then { @@ -239,7 +243,7 @@ if (_number_civ_veh_active < _p_civ_max_veh) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [_city, _radius + btc_patrol_area] call btc_fnc_civ_create_patrol; + [[_city, _radius + btc_patrol_area], btc_fnc_civ_create_patrol] call btc_fnc_delay_exec; }; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 8749be2df..948c96f56 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -67,6 +67,7 @@ if (isServer) then { //DELAY btc_fnc_delay_createUnit = compile preprocessFileLineNumbers "core\fnc\delay\createUnit.sqf"; btc_fnc_delay_createVehicle = compile preprocessFileLineNumbers "core\fnc\delay\createVehicle.sqf"; + btc_fnc_delay_exec = compile preprocessFileLineNumbers "core\fnc\delay\exec.sqf"; //EH btc_fnc_eh_veh_add_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_add_respawn.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf new file mode 100644 index 000000000..c7c6b587a --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf @@ -0,0 +1,35 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_delay_exec + +Description: + Execute a function when all previous units have been created. + +Parameters: + _parameters - Parameters to the function. [Array] + _code - Code to execute. [Code] + +Returns: + +Examples: + (begin example) + [[btc_city_all select 0, 100], btc_fnc_ied_drone_create] call btc_fnc_delay_exec; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +btc_delay_createUnit = btc_delay_createUnit + 0.2; + +[{ + params [ + ["_parameters", [], [[]]], + ["_code", {}, [{}]] + ]; + + _parameters call _code; + + btc_delay_createUnit = btc_delay_createUnit - 0.2; +}, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; From 03ff1cf277d581ff8feac962b97f45ea52892f5d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 19 Jul 2020 11:01:03 +0200 Subject: [PATCH 128/264] fix Van_02_vehicle_base_F --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/class.sqf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/class.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/class.sqf index 27a22355a..69ff82e94 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/class.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/class.sqf @@ -75,7 +75,10 @@ if (_enemy_side isEqualTo btc_player_side) exitWith { private _faction = _x; //Get all vehicles of the _faction selected - private _allclass_f = _allclass select {(toUpper getText (_cfgVehicles >> _x >> "faction")) isEqualTo _faction}; + private _allclass_f = _allclass select { + (toUpper getText (_cfgVehicles >> _x >> "faction")) isEqualTo _faction && + {!(_x isKindOf "Van_02_vehicle_base_F")} // https://feedback.bistudio.com/T129141 + }; //Units _divers = _allclass_f select {[_x, ["AssaultRifle", "64 + 32"]] call btc_fnc_mil_ammoUsage}; From dd644720c849daeea7e1d34c86e6c41966486d81 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 19 Jul 2020 11:01:49 +0200 Subject: [PATCH 129/264] Improve mission.sqf --- .../core/def/mission.sqf | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 5a918128c..a61655e4b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -180,23 +180,30 @@ if (isServer) then { btc_cache_type = [ _allClassSorted select { _x isKindOf "ReammoBox_F" && - getText(_cfgVehicles >> _x >> "model") isEqualTo "\A3\weapons_F\AmmoBoxes\AmmoBox_F" + {getText(_cfgVehicles >> _x >> "model") isEqualTo "\A3\weapons_F\AmmoBoxes\AmmoBox_F"} }, ["Land_PlasticCase_01_small_black_CBRN_F", "Land_PlasticCase_01_small_olive_CBRN_F", "Land_PlasticCase_01_small_CBRN_F"] ]; - private _weapons_usefull = "true" configClasses (configFile >> "CfgWeapons") select {(getNumber (_x >> 'type') isEqualTo 1) AND !(getArray(_x >> 'magazines') isEqualTo []) AND (getNumber (_x >> 'scope') isEqualTo 2)}; + private _weapons_usefull = "true" configClasses (configFile >> "CfgWeapons") select { + getNumber (_x >> 'type') isEqualTo 1 AND + {!(getArray(_x >> 'magazines') isEqualTo [])} AND + {getNumber (_x >> 'scope') isEqualTo 2} + }; btc_cache_weapons_type = _weapons_usefull apply {configName _x}; //Hideout classname btc_type_campfire = ["MetalBarrel_burning_F"] + (_allClassSorted select {_x isKindOf "Land_Campfire_F"}); btc_type_Scrapyard = _allClassSorted select { _x isKindOf "Scrapyard_base_F" && - {(toLower _x find "scrap") isEqualTo -1} + {!("scrap" in toLower _x)} }; btc_type_bigbox = ["Box_FIA_Ammo_F", "Box_East_AmmoVeh_F", "CargoNet_01_box_F", "O_CargoNet_01_ammo_F"] + btc_type_Scrapyard; btc_type_seat = ["Land_WoodenLog_F", "Land_CampingChair_V2_F", "Land_CampingChair_V1_folded_F", "Land_CampingChair_V1_F"]; btc_type_sleepingbag = _allClassSorted select {_x isKindOf "Land_Sleeping_bag_F"}; - btc_type_tent = ["Land_TentA_F", "Land_TentDome_F"] + (_allClassSorted select {_x isKindOf "Land_TentSolar_01_base_F" && !(_x isKindOf "Land_TentSolar_01_folded_base_F")}); + btc_type_tent = ["Land_TentA_F", "Land_TentDome_F"] + (_allClassSorted select { + _x isKindOf "Land_TentSolar_01_base_F" && + {!(_x isKindOf "Land_TentSolar_01_folded_base_F")} + }); btc_type_camonet = ["Land_IRMaskingCover_02_F"] + (_allClassSorted select {_x isKindOf "Shelter_base_F"}); btc_type_satelliteAntenna = _allClassSorted select {_x isKindOf "Land_SatelliteAntenna_01_F"}; @@ -223,14 +230,14 @@ if (isServer) then { btc_type_portable_light = _allClassSorted select {_x isKindOf "Land_PortableLight_single_F"}; btc_type_portableLamp = _allClassSorted select { _x isKindOf "Land_PortableLight_02_base_F" || - _x isKindOf "TentLamp_01_standing_base_F" + {_x isKindOf "TentLamp_01_standing_base_F"} }; btc_type_tentLamp = _allClassSorted select {_x isKindOf "TentLamp_01_base_F"}; btc_type_first_aid_kits = ["Land_FirstAidKit_01_open_F", "Land_FirstAidKit_01_closed_F"]; btc_type_body_bags = _allClassSorted select { _x isKindOf "Land_Bodybag_01_base_F" || - _x isKindOf "Land_Bodybag_01_empty_base_F" || - _x isKindOf "Land_Bodybag_01_folded_base_F" + {_x isKindOf "Land_Bodybag_01_empty_base_F"} || + {_x isKindOf "Land_Bodybag_01_folded_base_F"} }; btc_type_signs = _allClassSorted select {_x isKindOf "Land_Sign_Mines_F"}; btc_type_bloods = _allClassSorted select {_x isKindOf "Blood_01_Base_F"}; @@ -240,23 +247,26 @@ if (isServer) then { btc_type_foodSack = _allClassSorted select {_x isKindOf "Land_FoodSack_01_empty_base_F"}; btc_type_PaperBox = _allClassSorted select { _x isKindOf "Land_PaperBox_01_small_ransacked_base_F" || - _x isKindOf "Land_PaperBox_01_small_open_base_F" || - _x isKindOf "Land_PaperBox_01_small_destroyed_base_F" + {_x isKindOf "Land_PaperBox_01_small_open_base_F"} || + {_x isKindOf "Land_PaperBox_01_small_destroyed_base_F"} }; btc_type_EmergencyBlanket = _allClassSorted select {_x isKindOf "Land_EmergencyBlanket_01_base_F"}; - btc_type_Sponsor = _allClassSorted select {_x isKindOf "SignAd_Sponsor_F" && {(toLower _x find "idap") != -1}}; + btc_type_Sponsor = _allClassSorted select { + _x isKindOf "SignAd_Sponsor_F" && + {"idap" in toLower _x} + }; btc_type_PlasticCase = _allClassSorted select {_x isKindOf "PlasticCase_01_base_F"}; btc_type_MedicalTent = _allClassSorted select {_x isKindOf "Land_MedicalTent_01_base_F"}; btc_type_cargo_ruins = _allClassSorted select { _x isKindOf "Ruins_F" && { - (toLower _x find "cargo40") != -1 || - (toLower _x find "cargo20") != -1 + "cargo40" in toLower _x || + "cargo20" in toLower _x } }; btc_type_spill = ["Oil_Spill_F", "Land_DirtPatch_01_6x8_F"] + (_allClassSorted select { _x isKindOf "Land_DirtPatch_02_base_F" || - _x isKindOf "WaterSpill_01_Base_F" + {_x isKindOf "WaterSpill_01_Base_F"} }); btc_type_tarp = _allClassSorted select {_x isKindOf "Tarp_01_base_F"}; btc_type_SCBA = _allClassSorted select {_x isKindOf "SCBACylinder_01_base_F"}; @@ -307,15 +317,15 @@ if (isServer) then { //IED private _ieds = ["Land_GarbageContainer_closed_F", "Land_GarbageContainer_open_F", "Land_Portable_generator_F", "Land_WoodenBox_F", "Land_BarrelTrash_grey_F", "Land_Sacks_heap_F", "Land_Wreck_Skodovka_F", "Land_WheelieBin_01_F", "Land_GarbageBin_03_F"] + btc_type_pallet + btc_type_barrel + (_allClassSorted select { _x isKindOf "GasTank_base_F" || - _x isKindOf "Garbage_base_F" || + {_x isKindOf "Garbage_base_F"} || (_x isKindOf "Constructions_base_F" && { - (toLower _x find "bricks") != -1 + "bricks" in toLower _x }) || (_x isKindOf "Wreck_base_F" && { - (toLower _x find "car") != -1 || - (toLower _x find "offroad") != -1 + "car" in toLower _x || + "offroad" in toLower _x }) }); btc_type_ieds = _ieds - ["Land_Garbage_line_F","Land_Garbage_square3_F","Land_Garbage_square5_F"]; @@ -376,10 +386,10 @@ btc_supplies_mat = [ //Hazmat btc_type_hazmat = ["HazmatBag_01_F", "Land_MetalBarrel_F"] + (_allClassSorted select { _x isKindOf "Land_GarbageBarrel_02_base_F" || - _x isKindOf "Land_FoodContainer_01_F" || - _x isKindOf "Land_CanisterFuel_F" || - _x isKindOf "CBRNContainer_01_base_F" || - _x isKindOf "PlasticCase_01_base_F" + {_x isKindOf "Land_FoodContainer_01_F"} || + {_x isKindOf "Land_CanisterFuel_F"} || + {_x isKindOf "CBRNContainer_01_base_F"} || + {_x isKindOf "PlasticCase_01_base_F"} }); //Containers @@ -396,12 +406,12 @@ if (isServer) then { //"Static" ] + (_allClassSorted select {( _x isKindOf "GMG_TriPod" || - _x isKindOf "StaticMortar" || - _x isKindOf "HMG_01_base_F" || - _x isKindOf "AA_01_base_F" || - _x isKindOf "AT_01_base_F") && ( + {_x isKindOf "StaticMortar"} || + {_x isKindOf "HMG_01_base_F"} || + {_x isKindOf "AA_01_base_F"} || + {_x isKindOf "AT_01_base_F"}) && { getNumber (_cfgVehicles >> _x >> "side") isEqualTo ([east, west, independent, civilian] find btc_player_side) - ) + } }); ([_rearming_static] call btc_fnc_find_veh_with_turret) params ["_rearming_static", "_magazines_static"]; @@ -450,7 +460,11 @@ if (isServer) then { //"Ammobox" "Land_WoodenBox_F" - ] + (_allClassSorted select {_x isKindOf "ReammoBox_F" && !(_x isKindOf "Slingload_01_Base_F") && !(_x isKindOf "Pod_Heli_Transport_04_base_F")}), + ] + (_allClassSorted select { + _x isKindOf "ReammoBox_F" && + {!(_x isKindOf "Slingload_01_Base_F")} && + {!(_x isKindOf "Pod_Heli_Transport_04_base_F")} + }), [ //"Containers" From e1e1b3b3a68869e8a8070f6abf1d6beb2399884e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 19 Jul 2020 11:13:08 +0200 Subject: [PATCH 130/264] fix travis --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index a61655e4b..bd2461748 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -185,8 +185,8 @@ if (isServer) then { ["Land_PlasticCase_01_small_black_CBRN_F", "Land_PlasticCase_01_small_olive_CBRN_F", "Land_PlasticCase_01_small_CBRN_F"] ]; private _weapons_usefull = "true" configClasses (configFile >> "CfgWeapons") select { - getNumber (_x >> 'type') isEqualTo 1 AND - {!(getArray(_x >> 'magazines') isEqualTo [])} AND + getNumber (_x >> 'type') isEqualTo 1 || + {!(getArray (_x >> 'magazines') isEqualTo [])} || {getNumber (_x >> 'scope') isEqualTo 2} }; btc_cache_weapons_type = _weapons_usefull apply {configName _x}; From a820f6506d1fda58964f062a648e00cd7eb09f46 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 19 Jul 2020 12:53:38 +0200 Subject: [PATCH 131/264] simplify ied creation, fix wrong number of traffic and patrol --- .../core/fnc/city/activate.sqf | 17 +++++++++-------- .../core/fnc/civ/create_patrol.sqf | 7 +++---- .../core/fnc/ied/check.sqf | 4 +++- .../core/fnc/mil/create_patrol.sqf | 5 ++--- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index d01ccc34a..0870267fa 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -89,12 +89,7 @@ if (!_is_init) then { _city setVariable ["active", true]; if !(_ieds isEqualTo []) then { - [[_city, _ieds], { - params ["_city", "_ieds"]; - - private _ieds_data = _ieds apply {_x call btc_fnc_ied_create}; - [_city, _ieds_data] call btc_fnc_ied_check; - }] call btc_fnc_delay_exec; + [[_city, _ieds], btc_fnc_ied_check] call btc_fnc_delay_exec; }; if !(_data_units isEqualTo []) then { @@ -225,7 +220,10 @@ if (_number_patrol_active < _p_patrol_max) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [[1 + round random 1, _city, _radius + btc_patrol_area], btc_fnc_mil_create_patrol] call btc_fnc_delay_exec; + private _group = createGroup btc_enemy_side; + btc_patrol_active pushBack _group; + _group setVariable ["no_cache", true]; + [[_group, 1 + round random 1, _city, _radius + btc_patrol_area], btc_fnc_mil_create_patrol] call btc_fnc_delay_exec; }; if (btc_debug_log) then { @@ -243,7 +241,10 @@ if (_number_civ_veh_active < _p_civ_max_veh) then { private _d = _n - _av; _r = if (_d > 0) then {_n - _d;} else {_n;}; for "_i" from 1 to _r do { - [[_city, _radius + btc_patrol_area], btc_fnc_civ_create_patrol] call btc_fnc_delay_exec; + private _group = createGroup civilian; + btc_civ_veh_active pushBack _group; + _group setVariable ["no_cache", true]; + [[_group, _city, _radius + btc_patrol_area], btc_fnc_civ_create_patrol] call btc_fnc_delay_exec; }; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index ab2fe4e71..75bab5d76 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -6,6 +6,7 @@ Description: Create a civilian patrol around a city in a defined area. Parameters: + _group - Group of the traffic. [Group] _active_city - City where the patrol will be done around. [Object] _area - Area to search a start and an end city for the patrol [Number] @@ -14,7 +15,7 @@ Returns: Examples: (begin example) - _isCreated = [_active_city] call btc_fnc_civ_create_patrol; + _isCreated = [createGroup civilian, _active_city] call btc_fnc_civ_create_patrol; (end) Author: @@ -23,6 +24,7 @@ Author: ---------------------------------------------------------------------------- */ params [ + ["_group", grpNull, [grpNull]], ["_active_city", objNull, [objNull]], ["_area", btc_patrol_area, [0]], ["_p_chem", btc_p_chem, [false]] @@ -57,9 +59,6 @@ if (_roads isEqualTo []) then { _veh_type = selectRandom btc_civ_type_veh; }; -private _group = createGroup civilian; -btc_civ_veh_active pushBack _group; -_group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_civilian_id, btc_debug]; btc_civilian_id = btc_civilian_id - 1; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf index 1d1dd37be..49fd388c6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf @@ -7,7 +7,7 @@ Description: Parameters: _city - City where IED has been created. [Object] - _ieds - All IED (even FACK IED). [Array] + _ieds - All IED to create (even FACK IED). [Array] Returns: @@ -26,6 +26,8 @@ params [ ["_ieds", [objNull], [[]]] ]; +private _ieds = _ieds apply {_x call btc_fnc_ied_create}; + if (btc_debug) then { [format ["START CITY ID %1", _city getVariable "id"], __FILE__, [btc_debug, false]] call btc_fnc_debug_message; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index ce23b7a2c..1f6693b40 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -6,6 +6,7 @@ Description: Fill me when you edit me ! Parameters: + _group - Group of the patrol. [Group] _random - [Number] _active_city - [Object] _area - [Number] @@ -23,6 +24,7 @@ Author: ---------------------------------------------------------------------------- */ params [ + ["_group", grpNull, [grpNull]], ["_random", 0, [0]], ["_active_city", objNull, [objNull]], ["_area", btc_patrol_area, [0]] @@ -61,9 +63,6 @@ if (_pos_isWater) then { }; //Creating units -private _group = createGroup btc_enemy_side; -btc_patrol_active pushBack _group; -_group setVariable ["no_cache", true]; _group setVariable ["btc_patrol_id", btc_military_id, btc_debug]; btc_military_id = btc_military_id + 1; From e0d9c58fca52c836472322bd9730e882c0939c20 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 23 Jul 2020 16:11:41 +0200 Subject: [PATCH 132/264] FIX: Waypoint are added endless --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 933df9794..6952cd0db 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -81,7 +81,7 @@ if (_type isEqualTo 1) then { ]; //[waypointPosition _x,waypointType _x,waypointSpeed _x,waypointFormation _x,waypointCombatMode _x,waypointBehaviour _x] - if !(_side isEqualTo civilian && {vehicle leader _group isEqualTo leader _group}) then { + if !(_type in [3, 6]) then { if (count (_array_wp select 1) > 1) then { { [_group, _x select 0, -1, _x select 1, _x select 5, _x select 4, _x select 2, _x select 3, "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; From 89b6ac4123e26acb2d16b1d15c24ba44b94c14a0 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 25 Jul 2020 14:20:17 +0200 Subject: [PATCH 133/264] Tweak level of damage --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 27fcf38cf..0d5df13a0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -32,7 +32,7 @@ params [ ["_ammo", "", [""]] ]; -if (!isPlayer _injurer || {_dam <= 0.1}) exitWith {_dam}; +if (!isPlayer _injurer || {_dam <= 0.05}) exitWith {_dam}; private _isAgent = isAgent teamMember _unit; if ( !_isAgent && { From f226fbcd98c245243ac1011037e6f21845c50c3e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 25 Jul 2020 19:57:59 +0200 Subject: [PATCH 134/264] Improve syntaxe of patrol/traffic number --- .../core/fnc/city/activate.sqf | 40 +++++++------------ 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 0870267fa..311b8f0c3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -211,43 +211,31 @@ if !(_city getVariable ["has_suicider", false]) then { //Patrol btc_patrol_active = btc_patrol_active - [grpNull]; -private _number_patrol_active = count btc_patrol_active; -if (_number_patrol_active < _p_patrol_max) then { - private _n = 0; - private _r = 0; - if (_has_en) then {_n = round (random 3 + (3/2));} else {_n = round random 2;}; - private _av = _p_patrol_max - _number_patrol_active; - private _d = _n - _av; - _r = if (_d > 0) then {_n - _d;} else {_n;}; - for "_i" from 1 to _r do { +private _numberOfPatrol = count btc_patrol_active; +if (_numberOfPatrol < _p_patrol_max) then { + private _offset = 0; + private _max = 2; + if (_has_en) then { + _max = 3; + _offset = 3/2; + }; + private _r = (_offset + random _max) min (_p_patrol_max - _numberOfPatrol); + for "_i" from 1 to round _r do { private _group = createGroup btc_enemy_side; btc_patrol_active pushBack _group; _group setVariable ["no_cache", true]; [[_group, 1 + round random 1, _city, _radius + btc_patrol_area], btc_fnc_mil_create_patrol] call btc_fnc_delay_exec; }; - - if (btc_debug_log) then { - [format ["(patrol) _n = %1 _av %2 _d %3 _r %4", _n, _av, _d, _r], __FILE__, [false]] call btc_fnc_debug_message; - }; }; //Traffic btc_civ_veh_active = btc_civ_veh_active - [grpNull]; -private _number_civ_veh_active = count btc_civ_veh_active; -if (_number_civ_veh_active < _p_civ_max_veh) then { - private _n = 0; - private _r = 0; - _n = round (random 3 + (3/2)); - private _av = _p_civ_max_veh - _number_civ_veh_active; - private _d = _n - _av; - _r = if (_d > 0) then {_n - _d;} else {_n;}; - for "_i" from 1 to _r do { +private _numberOfCivVeh = count btc_civ_veh_active; +if (_numberOfCivVeh < _p_civ_max_veh) then { + private _r = (3/2 + random 3) min (_p_civ_max_veh - _numberOfCivVeh); + for "_i" from 1 to round _r do { private _group = createGroup civilian; btc_civ_veh_active pushBack _group; _group setVariable ["no_cache", true]; [[_group, _city, _radius + btc_patrol_area], btc_fnc_civ_create_patrol] call btc_fnc_delay_exec; }; - - if (btc_debug_log) then { - [format ["(traffic) _n = %1 _av %2 _d %3 _r %4", _n, _av, _d, _r], __FILE__, [false]] call btc_fnc_debug_message; - }; }; From 15d72cd1b21653e6baa2787590e1bfc5e283e2cd Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 26 Jul 2020 13:28:16 +0200 Subject: [PATCH 135/264] Tags are added to database system --- .../core/def/mission.sqf | 1 + .../core/fnc/db/load.sqf | 16 ++++++++++++++++ .../core/fnc/db/save.sqf | 14 ++++++++++++++ .../core/fnc/eh/server.sqf | 13 +++++++++++++ .../core/init_server.sqf | 4 ++++ .../stringtable.xml | 7 ++++++- docs/InGame-documentation.md | 2 +- 7 files changed, 55 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 5a918128c..4234e1770 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -322,6 +322,7 @@ if (isServer) then { btc_model_ieds = btc_type_ieds apply {(toLower getText(_cfgVehicles >> _x >> "model")) select [1]}; btc_groundWeaponHolder = []; + btc_tags = []; }; //Civ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 41efe86eb..f115520bd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -170,6 +170,22 @@ private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], [_x] call btc_fnc_db_loadObjectStatus; } forEach _objs; +//Player Tags +private _tags_properties = profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]; +private _id = ["ace_tagCreated", { + params ["_tag", "_texture", "_object"]; + btc_tags pushBack [_tag, _texture, _object]; +}] call CBA_fnc_addEventHandler; +{ + _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_typeObject", "_tagModel"]; + private _object = objNull; + if !(_typeObject isEqualTo "") then { + _object = nearestObject [ASLToATL _tagPosASL, _typeObject]; + }; + [_tagPosASL, _vectorDirAndUp, _texture, _object, objNull, "",_tagModel] call ace_tagging_fnc_createTag; +} forEach _tags_properties; +["ace_tagCreated", _id] call CBA_fnc_removeEventHandler; + //Player Markers private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_markers", _name], []]; { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 36097c200..5eec67400 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -176,6 +176,20 @@ private _array_obj = []; }); profileNamespace setVariable [format ["btc_hm_%1_objs", _name], _array_obj]; +//Player Tags +private _tags = btc_tags select {alive (_x select 0)}; +private _tags_properties = _tags apply { + private _tag = _x select 0; + [ + getPosASLW _tag, + [vectorDir _tag, vectorUp _tag], + _x select 1, + typeOf (_x select 2), + typeOf _tag + ] +}; +profileNamespace setVariable [format ["btc_hm_%1_tags", _name], _tags_properties]; + //Player Markers private _player_markers = allMapMarkers select {(_x select [0, 15]) isEqualTo "_USER_DEFINED #"}; private _markers_properties = _player_markers apply { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index b62818647..a044da330 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -46,3 +46,16 @@ if (btc_p_set_skill) then { ["CAManBase", "InitPost", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; }; ["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; +["ace_tagCreated", { + params ["_tag", "_texture"]; + if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { + private _distance = btc_tags apply {[_tag distance (_x select 0), _x select 0]}; + _distance sort true; + if (_distance select 0 select 0 < 5) then { + deleteVehicle (_distance select 0 select 1); + }; + deleteVehicle _tag; + } else { + btc_tags pushBack [_tag, _texture, _object]; + }; +}] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index 69a58d1ef..f96c4c5ad 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -53,3 +53,7 @@ if (btc_p_side_mission_cycle > 0) then { [true] spawn btc_fnc_side_create; }; }; + +{ + ["btc_tag_remover" + _x, "STR_BTC_HAM_ACTION_REMOVETAG", _x, ["#(rgb,8,8,3)color(0,0,0,0)"], "\A3\UI_F\Data\Map\Markers\nato\b_unknown.paa"] call ace_tagging_fnc_addCustomTag; +} forEach ["ACE_SpraypaintBlack", "ACE_SpraypaintRed", "ACE_SpraypaintGreen", "ACE_SpraypaintBlue"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 65c54b386..84bb83e04 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -78,7 +78,7 @@ 无头客户端与数据库 - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> @@ -1427,6 +1427,11 @@ <t color='#ff1111'>军火库(ACE)</t> + + + Remove tag + + Tow diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 6f4bb6920..98bb0e93e 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -3,7 +3,7 @@ ## Headless & Database This mission automatically uses one Headless client when available. -This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key. +This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key. ## Chemical Warfare From de8010986d83d90cbee6ae2bb320c795f2fcacad Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 26 Jul 2020 14:44:37 +0200 Subject: [PATCH 136/264] FIX: Tag return reputation IED --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index fe274dc01..1ef48cc9b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -40,7 +40,7 @@ btc_ied_deleteOn = [{ ["_minDistance", 0, [0]] ]; - private _ieds = allSimpleObjects []; + private _ieds = allSimpleObjects [] - allSimpleObjects ["UserTexture1m_F"]; _ieds = _ieds apply {[_x distance _vehicle, _x]}; _ieds sort true; From 8229fe2e504e91de51106ec893c39658cfa3e0ca Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 01:58:07 +0200 Subject: [PATCH 137/264] Add random tagin city --- .../core/def/mission.sqf | 3 + .../core/fnc/city/activate.sqf | 3 + .../core/fnc/compile.sqf | 3 + .../core/fnc/ied/randomRoadPos.sqf | 5 +- .../core/fnc/tag/initArea.sqf | 84 +++++++++++++++++++ 5 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 5a918128c..5a506baa4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -304,6 +304,9 @@ if (isServer) then { ]; btc_buildings_changed = []; + //TAGS + btc_type_tags = ["Land_Graffiti_01_F", "Land_Graffiti_02_F", "Land_Graffiti_03_F", "Land_Graffiti_04_F", "Land_Graffiti_05_F"]; + //IED private _ieds = ["Land_GarbageContainer_closed_F", "Land_GarbageContainer_open_F", "Land_Portable_generator_F", "Land_WoodenBox_F", "Land_BarrelTrash_grey_F", "Land_Sacks_heap_F", "Land_Wreck_Skodovka_F", "Land_WheelieBin_01_F", "Land_GarbageBin_03_F"] + btc_type_pallet + btc_type_barrel + (_allClassSorted select { _x isKindOf "GasTank_base_F" || diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 0870267fa..4c288c869 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -52,6 +52,7 @@ private _radius = _city getVariable ["radius", 100]; private _has_en = _city getVariable ["occupied", false]; private _has_ho = _city getVariable ["has_ho", false]; private _ieds = _city getVariable ["ieds", []]; +private _tags = _city getVariable ["tags", []]; private _spawningRadius = _radius/2; if (!_is_init) then { @@ -195,6 +196,8 @@ if !(_city getVariable ["has_suicider", false]) then { }; }; +[[_city, _spawningRadius, _type, _has_en, _has_ho], btc_fnc_tag_initArea] call btc_fnc_delay_exec; + [{ params ["_has_en", "_city", "_radius", "_id"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 948c96f56..0bfe350be 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -166,6 +166,9 @@ if (isServer) then { btc_fnc_side_EMP = compile preprocessFileLineNumbers "core\fnc\side\EMP.sqf"; btc_fnc_side_removeRubbish = compile preprocessFileLineNumbers "core\fnc\side\removeRubbish.sqf"; + //TAG + btc_fnc_tag_initArea = compile preprocessFileLineNumbers "core\fnc\tag\initArea.sqf"; + //LOG btc_fnc_log_createVehicle = compile preprocessFileLineNumbers "core\fnc\log\createVehicle.sqf"; btc_fnc_log_getRearmMagazines = compile preprocessFileLineNumbers "core\fnc\log\getRearmMagazines.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/randomRoadPos.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/randomRoadPos.sqf index 9beede774..ae6edc312 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/randomRoadPos.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/randomRoadPos.sqf @@ -26,12 +26,13 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_road", objNull, [objNull]] + ["_road", objNull, [objNull]], + ["_p_ied_placement", btc_p_ied_placement, [0]] ]; private _roadDir = _road call btc_fnc_road_direction; private _roadRadius = ((0 boundingBoxReal _road) select 2) * 0.4; -switch (floor random btc_p_ied_placement) do { +switch (floor random _p_ied_placement) do { case 0: { [_road getPos [_roadRadius, _roadDir + 90], _roadDir] }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf new file mode 100644 index 000000000..f0e2231c6 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -0,0 +1,84 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_ied_init_area + +Description: + Initialize positions of tagS. + +Parameters: + _city - City to initialise. [Object] + _area - Area to create IED. [Number] + _n - Number of IED, real and fake. [Number] + +Returns: + +Examples: + (begin example) + _result = [] call btc_fnc_tag_initArea; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_city", objNull, [objNull]], + ["_area", 100, [0]], + ["_type", "Hill", [""]], + ["_has_en", false, [true]], + ["_has_ho", false, [true]] +]; + +private _array = _city getVariable ["tags", []]; +if (_array isEqualTo []) then { + private _n = (switch _type do { + case "Hill" : {random 1}; + case "NameLocal" : {random 2.5}; + case "NameVillage" : {random 3.5}; + case "NameCity" : {random 5}; + case "NameCityCapital" : {random 6}; + case "Airport" : {random 6}; + case "NameMarine" : {0}; + }); + + if (_has_en) then { + _n = _n * 1.5; + }; + if (_has_ho) then { + _n = _n * 2; + }; + + for "_i" from 1 to (_n * btc_p_ied) do { + private _sel_pos = [_city, _area] call CBA_fnc_randPos; + if !(surfaceIsWater _sel_pos) then { + private _roads = _sel_pos nearRoads 50; + if !(_roads isEqualTo []) then { + private _arr = [selectRandom _roads, -1] call btc_fnc_ied_randomRoadPos; + _sel_pos = _arr select 0; + }; + + private _surface = surfaceNormal _sel_pos; + private _v1 = vectorNormalized (_surface vectorMultiply -1); + private _v3 = _v1 vectorCrossProduct [0, 0, 1]; + private _v2 = _v3 vectorCrossProduct _v1; + + _array pushBack [ATLToASL _sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; + + if (btc_debug) then { + private _marker = createMarker [format ["btc_tag_%1", _sel_pos], _sel_pos]; + _marker setMarkerType "mil_dot"; + _marker setMarkerColor "ColorBlue"; + _marker setMarkerText "Tag"; + _marker setMarkerSize [0.8, 0.8]; + }; + }; + }; + _city setVariable ["tags", _array]; +}; + +{ + _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_tagModel"]; + + [_tagPosASL, _vectorDirAndUp, _texture, objNull, objNull, "", _tagModel] call ace_tagging_fnc_createTag; +} forEach _array; From 3250fe82f30e61ab144c16c8c1a7ae6caad3e738 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 14:29:48 +0200 Subject: [PATCH 138/264] Use ASL and not ASLW --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 5eec67400..e8d1e1889 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -181,7 +181,7 @@ private _tags = btc_tags select {alive (_x select 0)}; private _tags_properties = _tags apply { private _tag = _x select 0; [ - getPosASLW _tag, + getPosASL _tag, [vectorDir _tag, vectorUp _tag], _x select 1, typeOf (_x select 2), From 03a82acb3f4febc6099287cedc1849359c326d20 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 14:36:30 +0200 Subject: [PATCH 139/264] Add database support --- .../core/def/mission.sqf | 1 + .../core/fnc/city/de_activate.sqf | 28 +++++++++++++------ .../core/fnc/db/load.sqf | 4 ++- .../core/fnc/db/save.sqf | 1 + .../core/fnc/eh/server.sqf | 4 +++ .../core/fnc/ied/deleteLoop.sqf | 2 +- .../core/fnc/tag/initArea.sqf | 11 ++++---- 7 files changed, 36 insertions(+), 15 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index a97f8c2f7..849f9bac8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -324,6 +324,7 @@ if (isServer) then { }); btc_type_ieds = _ieds - ["Land_Garbage_line_F","Land_Garbage_square3_F","Land_Garbage_square5_F"]; btc_model_ieds = btc_type_ieds apply {(toLower getText(_cfgVehicles >> _x >> "model")) select [1]}; + btc_type_blacklist = btc_type_tags + ["UserTexture1m_F"]; btc_groundWeaponHolder = []; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index b89d8774d..6f5e630ba 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -62,10 +62,6 @@ if !(_city getVariable ["active", false]) exitWith {}; _data_units pushBack _data_group; if ((_data_group select 0) in [5, 7]) then {_has_suicider = true;}; - - if (btc_debug_log) then { - [format ["data units = %1", _data_units], __FILE__, [false]] call btc_fnc_debug_message; - }; }; } forEach allGroups; @@ -82,16 +78,32 @@ if !(_city getVariable ["active", false]) exitWith {}; getPosATL _agent ]; _agent call CBA_fnc_deleteEntity; - - if (btc_debug_log) then { - [format ["data animals = %1", _data_animals], __FILE__, [false]] call btc_fnc_debug_message; - }; }; } forEach agents; + private _data_tags = []; + { + private _pos = getPos _x; + _pos set [2, 0]; + _data_tags pushBack [ + _pos, + [vectorDir _x, vectorUp _x], + _x getVariable "btc_texture", + typeOf _x + ]; + _x call CBA_fnc_deleteEntity; + } forEach ((allSimpleObjects btc_type_tags) inAreaArray [_pos_city, _radius, _radius]); + + if (btc_debug_log) then { + [format ["data units = %1", _data_units], __FILE__, [false]] call btc_fnc_debug_message; + [format ["data animals = %1", _data_animals], __FILE__, [false]] call btc_fnc_debug_message; + [format ["data tags = %1", _data_tags], __FILE__, [false]] call btc_fnc_debug_message; + }; + _city setVariable ["has_suicider", _has_suicider]; _city setVariable ["data_units", _data_units]; _city setVariable ["data_animals", _data_animals]; + _city setVariable ["data_tags", _data_tags]; _city setVariable ["active", false]; if (!btc_hideout_cap_checking) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index de10a9748..0dd57886b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -31,7 +31,8 @@ private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities { _x params ["_id", "_initialized", "_spawn_more", "_occupied", "_data_units", "_has_ho", "_ho_units_spawned", "_ieds", "_has_suicider", - ["_data_animals", [], [[]]] + ["_data_animals", [], [[]]], + ["_data_tags", [], [[]]] ]; private _city = btc_city_all select _id; @@ -45,6 +46,7 @@ private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities _city setVariable ["ieds", _ieds]; _city setVariable ["has_suicider", _has_suicider]; _city setVariable ["data_animals", _data_animals]; + _city setVariable ["data_tags", _data_tags]; if (btc_debug) then { private _marker = _city getVariable ["marker", ""]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 3beb19549..379ad8e2e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -69,6 +69,7 @@ private _cities_status = []; _city_status pushBack (_x getVariable ["ieds", []]); _city_status pushBack (_x getVariable ["has_suicider", false]); _city_status pushBack (_x getVariable ["data_animals", []]); + _city_status pushBack (_x getVariable ["data_tags", []]); _cities_status pushBack _city_status; if (btc_debug_log) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 4e7a079a5..5baa3a977 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -53,3 +53,7 @@ if (btc_p_set_skill) then { ["CAManBase", "InitPost", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; }; ["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; +["ace_tagCreated", { + params ["_tag", "_texture"]; + _tag setVariable ["btc_texture", _texture]; +}] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index 1ef48cc9b..1c79e4338 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -40,7 +40,7 @@ btc_ied_deleteOn = [{ ["_minDistance", 0, [0]] ]; - private _ieds = allSimpleObjects [] - allSimpleObjects ["UserTexture1m_F"]; + private _ieds = allSimpleObjects [] - allSimpleObjects btc_type_blacklist; _ieds = _ieds apply {[_x distance _vehicle, _x]}; _ieds sort true; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index f0e2231c6..35ce0c8e4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -30,7 +30,7 @@ params [ ["_has_ho", false, [true]] ]; -private _array = _city getVariable ["tags", []]; +private _array = _city getVariable ["data_tags", []]; if (_array isEqualTo []) then { private _n = (switch _type do { case "Hill" : {random 1}; @@ -63,22 +63,23 @@ if (_array isEqualTo []) then { private _v3 = _v1 vectorCrossProduct [0, 0, 1]; private _v2 = _v3 vectorCrossProduct _v1; - _array pushBack [ATLToASL _sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; + _sel_pos set [2, 0]; + _array pushBack [_sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; if (btc_debug) then { private _marker = createMarker [format ["btc_tag_%1", _sel_pos], _sel_pos]; _marker setMarkerType "mil_dot"; - _marker setMarkerColor "ColorBlue"; + _marker setMarkerColor "ColorGreen"; _marker setMarkerText "Tag"; _marker setMarkerSize [0.8, 0.8]; }; }; }; - _city setVariable ["tags", _array]; + _city setVariable ["data_tags", _array]; }; { _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_tagModel"]; - [_tagPosASL, _vectorDirAndUp, _texture, objNull, objNull, "", _tagModel] call ace_tagging_fnc_createTag; + [AGLToASL _tagPosASL, _vectorDirAndUp, _texture, objNull, objNull, "", _tagModel] call ace_tagging_fnc_createTag; } forEach _array; From 2746aecd0b4942e60028316980c3b334c1f05c66 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 14:40:53 +0200 Subject: [PATCH 140/264] Missing private variable --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index a044da330..284b97f78 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -47,7 +47,7 @@ if (btc_p_set_skill) then { }; ["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; ["ace_tagCreated", { - params ["_tag", "_texture"]; + params ["_tag", "_texture", "_object"]; if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { private _distance = btc_tags apply {[_tag distance (_x select 0), _x select 0]}; _distance sort true; From 6c1ed40f991da4e7204dc60d948e099dec5b08f5 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 15:37:26 +0200 Subject: [PATCH 141/264] Add reputation --- .../core/def/mission.sqf | 3 +- .../core/fnc/compile.sqf | 1 + .../core/fnc/eh/server.sqf | 19 +-------- .../core/fnc/tag/eh.sqf | 40 +++++++++++++++++++ .../core/fnc/tag/initArea.sqf | 4 +- .../stringtable.xml | 2 +- docs/InGame-documentation.md | 2 +- 7 files changed, 48 insertions(+), 23 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 749991401..7d9876267 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -307,6 +307,7 @@ if (isServer) then { //TAGS btc_type_tags = ["Land_Graffiti_01_F", "Land_Graffiti_02_F", "Land_Graffiti_03_F", "Land_Graffiti_04_F", "Land_Graffiti_05_F"]; + btc_tags = []; //IED private _ieds = ["Land_GarbageContainer_closed_F", "Land_GarbageContainer_open_F", "Land_Portable_generator_F", "Land_WoodenBox_F", "Land_BarrelTrash_grey_F", "Land_Sacks_heap_F", "Land_Wreck_Skodovka_F", "Land_WheelieBin_01_F", "Land_GarbageBin_03_F"] + btc_type_pallet + btc_type_barrel + (_allClassSorted select { @@ -327,7 +328,6 @@ if (isServer) then { btc_type_blacklist = btc_type_tags + ["UserTexture1m_F"]; btc_groundWeaponHolder = []; - btc_tags = []; }; //Civ @@ -657,6 +657,7 @@ btc_rep_bonus_disarm = 15; btc_rep_bonus_hideout = 200; btc_rep_bonus_mil_killed = 0.25; btc_rep_bonus_IEDCleanUp = 10; +btc_rep_bonus_removeTag = 3; btc_rep_malus_civ_hd = - 2; btc_rep_malus_animal_hd = - 1; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 624ab83c8..703ccd42f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -169,6 +169,7 @@ if (isServer) then { //TAG btc_fnc_tag_initArea = compile preprocessFileLineNumbers "core\fnc\tag\initArea.sqf"; + btc_fnc_tag_eh = compile preprocessFileLineNumbers "core\fnc\tag\eh.sqf"; //LOG btc_fnc_log_createVehicle = compile preprocessFileLineNumbers "core\fnc\log\createVehicle.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index e098d58a4..857801d41 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -53,21 +53,4 @@ if (btc_p_set_skill) then { ["CAManBase", "InitPost", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; }; ["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; -["ace_tagCreated", { - params ["_tag", "_texture", "_object"]; - - if (_tag isKindOf "Graffiti_base_F") then { - _tag setVariable ["btc_texture", _texture]; - } else { - if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { - private _distance = btc_tags apply {[_tag distance (_x select 0), _x select 0]}; - _distance sort true; - if (_distance select 0 select 0 < 5) then { - deleteVehicle (_distance select 0 select 1); - }; - deleteVehicle _tag; - } else { - btc_tags pushBack [_tag, _texture, _object]; - }; - } -}] call CBA_fnc_addEventHandler; +["ace_tagCreated", btc_fnc_tag_eh] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf new file mode 100644 index 000000000..3810952cd --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf @@ -0,0 +1,40 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_tag_eh + +Description: + Store texture for city de_activation, check if player try to remove a tag or store player tag to database. + +Parameters: + _tag - Tag. [Object] + _texture - Texture of the tag. [String] + _object - Object where the tag is draw. [Object] + _unit - Unit tagging. [Object] + +Returns: + +Examples: + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params ["_tag", "_texture", "_object", "_unit"]; + +if (_tag isKindOf "Graffiti_base_F") then { + _tag setVariable ["btc_texture", _texture]; //Store texture for city de_activation +} else { + if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { //Check if player want to remove a tag + private _tags = (allSimpleObjects btc_type_blacklist) inAreaArray [getPosWorld _tag, 3, 3]; + if !(_tags isEqualTo []) then { + if ((_tags select 0) isKindOf "Graffiti_base_F") then { + [btc_rep_bonus_removeTag, _unit] call btc_fnc_rep_change; + }; + deleteVehicle (_tags select 0); + }; + deleteVehicle _tag; + } else { //Store tag for database + btc_tags pushBack [_tag, _texture, _object]; + }; +}; \ No newline at end of file diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index 35ce0c8e4..8ac3ecb22 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -3,7 +3,7 @@ Function: btc_fnc_ied_init_area Description: - Initialize positions of tagS. + Initialize positions of tags. Parameters: _city - City to initialise. [Object] @@ -49,7 +49,7 @@ if (_array isEqualTo []) then { _n = _n * 2; }; - for "_i" from 1 to (_n * btc_p_ied) do { + for "_i" from 1 to (_n * 1.5) do { private _sel_pos = [_city, _area] call CBA_fnc_randPos; if !(surfaceIsWater _sel_pos) then { private _roads = _sel_pos nearRoads 50; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index c26fddd20..c4fd533fc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -181,7 +181,7 @@ 声誉 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, remove tag, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 5fbbc428a..bdfc6feb5 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -116,7 +116,7 @@ When you destroy an hideout or an ammo cache, all the markers related to it will ### System: At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. ### Good actions: -Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, succed side mission and destroy cache/hideout will rise your reputation. +Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, remove tag, succed side mission and destroy cache/hideout will rise your reputation. ### Bad actions: Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. From 096139c1f3ca5ce531f499e01983a15c86eaf537 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 16:36:55 +0200 Subject: [PATCH 142/264] Prefer road --- .../core/fnc/tag/initArea.sqf | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index 8ac3ecb22..d4b1d6bf1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -49,12 +49,20 @@ if (_array isEqualTo []) then { _n = _n * 2; }; + private _road = objNull; for "_i" from 1 to (_n * 1.5) do { private _sel_pos = [_city, _area] call CBA_fnc_randPos; if !(surfaceIsWater _sel_pos) then { - private _roads = _sel_pos nearRoads 50; - if !(_roads isEqualTo []) then { - private _arr = [selectRandom _roads, -1] call btc_fnc_ied_randomRoadPos; + if (isNull _road) then { + private _roads = _sel_pos nearRoads 50; + if !(_roads isEqualTo []) then { + _road = selectRandom _roads; + }; + } else { + _road = selectRandom roadsConnectedTo _road; + }; + if !(isNull _road) then { + private _arr = [_road, -1] call btc_fnc_ied_randomRoadPos; _sel_pos = _arr select 0; }; @@ -62,6 +70,9 @@ if (_array isEqualTo []) then { private _v1 = vectorNormalized (_surface vectorMultiply -1); private _v3 = _v1 vectorCrossProduct [0, 0, 1]; private _v2 = _v3 vectorCrossProduct _v1; + if (_v2 isEqualTo [0, 0, 0]) then { + _v2 = [0, 1, 0]; + }; _sel_pos set [2, 0]; _array pushBack [_sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; From b0630df832b849326a33e003161c6b7af1f6c414 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 27 Jul 2020 22:57:51 +0200 Subject: [PATCH 143/264] Side mission spawn outside terrain border --- .../core/fnc/side/chemicalLeak.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/supply.sqf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/chemicalLeak.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/chemicalLeak.sqf index 394859f2b..c34751370 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/chemicalLeak.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/chemicalLeak.sqf @@ -28,7 +28,7 @@ private _useful = btc_city_all select {!(isNull _x) && !(_x getVariable ["occupi if (_useful isEqualTo []) then {_useful = + (btc_city_all select {!(isNull _x)});}; private _city = selectRandom _useful; -private _pos = [getPos _city, 0, 500, 30, false] call btc_fnc_findsafepos; +private _pos = [getPos _city, 0, _city getVariable ["radius", 100], 30, false] call btc_fnc_findsafepos; [_taskID, 30, getPos _city, _city getVariable "name"] call btc_fnc_task_create; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf index cc67cb0db..ddd12feac 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf @@ -28,7 +28,7 @@ private _useful = btc_city_all select {!(isNull _x) && !((_x getVariable ["type" if (_useful isEqualTo []) then {_useful = + (btc_city_all select {!(isNull _x)});}; private _city = selectRandom _useful; -private _pos = [getPos _city, 0, 500, 30, false] call btc_fnc_findsafepos; +private _pos = [getPos _city, 0, _city getVariable ["radius", 100], 30, false] call btc_fnc_findsafepos; if (_pos select 2 > 50) exitWith {[] spawn btc_fnc_side_create;}; [_taskID, 4, _pos, _city getVariable "name"] call btc_fnc_task_create; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/supply.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/supply.sqf index c8ef10bf0..cf57c1ac5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/supply.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/supply.sqf @@ -30,7 +30,7 @@ if (_useful isEqualTo []) then {_useful = + (btc_city_all select {!(isNull _x)}) private _city = selectRandom _useful; private _pos = [getPos _city, 100] call btc_fnc_randomize_pos; -_pos = [_pos, 0, 300, 20, false] call btc_fnc_findsafepos; +_pos = [_pos, 0, _city getVariable ["radius", 100], 20, false] call btc_fnc_findsafepos; [_taskID, 3, getPos _city, _city getVariable "name"] call btc_fnc_task_create; private _move_taskID = _taskID + "mv"; From fb14ce4b3be044b7502318ff35f4da15bb6d2a67 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 28 Jul 2020 13:55:21 +0200 Subject: [PATCH 144/264] Fix wrong tag remove --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf | 8 +++++--- =BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf index 3810952cd..9507462e1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf @@ -27,11 +27,13 @@ if (_tag isKindOf "Graffiti_base_F") then { } else { if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { //Check if player want to remove a tag private _tags = (allSimpleObjects btc_type_blacklist) inAreaArray [getPosWorld _tag, 3, 3]; - if !(_tags isEqualTo []) then { - if ((_tags select 0) isKindOf "Graffiti_base_F") then { + if (count _tags > 1) then { + _tags = _tags apply {[_x distance _tag, _x]}; + _tags sort true; + if ((_tags select 1 select 1) isKindOf "Graffiti_base_F") then { [btc_rep_bonus_removeTag, _unit] call btc_fnc_rep_change; }; - deleteVehicle (_tags select 0); + deleteVehicle (_tags select 1 select 1); }; deleteVehicle _tag; } else { //Store tag for database diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index f96c4c5ad..2806556e8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -55,5 +55,5 @@ if (btc_p_side_mission_cycle > 0) then { }; { - ["btc_tag_remover" + _x, "STR_BTC_HAM_ACTION_REMOVETAG", _x, ["#(rgb,8,8,3)color(0,0,0,0)"], "\A3\UI_F\Data\Map\Markers\nato\b_unknown.paa"] call ace_tagging_fnc_addCustomTag; + ["btc_tag_remover" + _x, "STR_BTC_HAM_ACTION_REMOVETAG", _x, ["#(rgb,8,8,3)color(0,0,0,0)"], "\a3\Modules_F_Curator\Data\portraitSmoke_ca.paa"] call ace_tagging_fnc_addCustomTag; } forEach ["ACE_SpraypaintBlack", "ACE_SpraypaintRed", "ACE_SpraypaintGreen", "ACE_SpraypaintBlue"]; From d28ec4595611fcf10b5865dc74f378c171a49684 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 28 Jul 2020 16:42:03 +0200 Subject: [PATCH 145/264] Use CBA event for chemical propagation --- .../core/fnc/db/add_veh.sqf | 11 +---------- .../core/fnc/delay/createVehicle.sqf | 10 +--------- .../core/fnc/eh/server.sqf | 1 + .../core/fnc/eh/veh_add_respawn.sqf | 9 +-------- .../core/fnc/mil/createVehicle.sqf | 4 +--- 5 files changed, 5 insertions(+), 30 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf index a4cb4a26b..aeef99174 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf @@ -7,7 +7,6 @@ Description: Parameters: _veh - Vehicle to add in wreck system. [Object] - _p_chem - Activate chemical propagation. [Boolean] Returns: @@ -22,8 +21,7 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_veh", objNull, [objNull]], - ["_p_chem", btc_p_chem, [false]] + ["_veh", objNull, [objNull]] ]; if !(isServer) exitWith { @@ -47,10 +45,3 @@ if (btc_p_respawn_location > 1) then { }; }; }; - -if (_p_chem) then { - _veh addEventHandler ["GetIn", { - [_this select 0, _this select 2] call btc_fnc_chem_propagate; - _this - }]; -}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index d846f5423..124717dea 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -12,7 +12,6 @@ Parameters: _position - Position of creation. [Array] _direction - Direction of spawn. [Number] _fuel - Fuel level. [Array] - _p_chem - Allow chemical propagation. [Boolean] Returns: _delay_vehicle - Delay for unit creation. [Number] @@ -37,8 +36,7 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ["_units_type", [], [[]]], ["_position", [0, 0, 0], [[]]], ["_direction", 0, [0]], - ["_fuel", 1, [0]], - ["_p_chem", btc_p_chem, [false]] + ["_fuel", 1, [0]] ]; private _isAir = _vehicle_type isKindOf "Air"; @@ -49,12 +47,6 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; }; _veh setFuel _fuel; [_veh, "", []] call BIS_fnc_initvehicle; - if (_p_chem) then { - _veh addEventHandler ["GetIn", { - [_this select 0, _this select 2] call btc_fnc_chem_propagate; - _this - }]; - }; ["driver", "commander", "gunner", "turret", "cargo"] apply {count (fullCrew [_veh, _x, true]);} params ["_driverCount", "_commanderCount", "_gunnerCount", "_turretCount", "_cargoCount"]; private _crews = _driverCount + _commanderCount + _gunnerCount; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 4e7a079a5..f565e3451 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -43,6 +43,7 @@ if (btc_p_auto_db) then { }; if (btc_p_chem) then { ["ace_cargoLoaded", btc_fnc_chem_propagate] call CBA_fnc_addEventHandler; + ["AllVehicles", "GetIn", {[_this select 0, _this select 2] call btc_fnc_chem_propagate}] call CBA_fnc_addClassEventHandler; ["DeconShower_01_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction',true]}] call CBA_fnc_addClassEventHandler; ["DeconShower_02_F", "init", {(_this select 0) setVariable ['bin_deconshower_disableAction',true]}] call CBA_fnc_addClassEventHandler; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf index 65b9ef31f..1119ccd3b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf @@ -26,8 +26,7 @@ Author: params [ ["_vehicle", objNull, [objNull]], ["_time", 30, [0]], - ["_helo", btc_helo, [[]]], - ["_p_chem", btc_p_chem, [false]] + ["_helo", btc_helo, [[]]] ]; _helo pushBackUnique _vehicle; @@ -48,9 +47,3 @@ if (btc_p_respawn_location > 0) then { [btc_player_side, _vehicle] call BIS_fnc_addRespawnPosition; }; }; -if (_p_chem) then { - _vehicle addEventHandler ["GetIn", { - [_this select 0, _this select 2] call btc_fnc_chem_propagate; - _this - }]; -}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index 67ce9a333..df970cc36 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -13,7 +13,6 @@ Parameters: _type_units - Array of available unit type for cargo. [Array] _type_divers - Units used for submarine. [Array] _type_crewmen - Array of available crews type. [Array] - _p_chem - Allow chemical propagation. [Boolean] Returns: _delay_vehicle - Delay for unit creation. [Number] @@ -40,8 +39,7 @@ params [ ["_dir", 0, [0]], ["_type_units", btc_type_units, [[]]], ["_type_divers", btc_type_divers, [[]]], - ["_type_crewmen", btc_type_crewmen, [[]]], - ["_p_chem", btc_p_chem, [false]] + ["_type_crewmen", btc_type_crewmen, [[]]] ]; private _needdiver = getText (configFile >> "CfgVehicles" >> _veh_type >> "simulation") isEqualTo "submarinex"; From 49295e5af90f7183958865e0d97144db0705890d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 28 Jul 2020 17:49:49 +0200 Subject: [PATCH 146/264] Use CBA_fnc_addClassEventHandler for animal killed --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index f565e3451..19bba8794 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -23,12 +23,12 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; ["ace_explosives_defuse", btc_fnc_rep_explosives_defuse] call CBA_fnc_addEventHandler; ["ace_killed", btc_fnc_rep_killed] call CBA_fnc_addEventHandler; ["Animal", "InitPost", { - [(_this select 0), "killed", { - params ["_unit", "_killer", "_instigator"]; - [_unit, "", _killer, _instigator] call btc_fnc_rep_killed; - }] call CBA_fnc_addBISEventHandler; [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; }] call CBA_fnc_addClassEventHandler; +["Animal", "killed", { + params ["_unit", "_killer", "_instigator"]; + [_unit, "", _killer, _instigator] call btc_fnc_rep_killed; +}] call CBA_fnc_addClassEventHandler; { [_x, "InitPost", { [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; From 5e3a5710718c7294804d3ff8af1b0a18c19124ef Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 6 Aug 2020 11:48:11 +0200 Subject: [PATCH 147/264] FIX: Patrol and traffic not deleted when player too far --- .../core/fnc/civ/create_patrol.sqf | 5 ++++- .../core/fnc/mil/create_patrol.sqf | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf index 75bab5d76..545a856b6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/create_patrol.sqf @@ -35,7 +35,10 @@ if (isNil "btc_civilian_id") then {btc_civilian_id = -1;}; //Find a city private _cities = btc_city_all inAreaArray [getPosWorld _active_city, _area, _area]; private _usefuls = _cities select {!(_x getVariable ["active", false])}; -if (_usefuls isEqualTo []) exitWith {false}; +if (_usefuls isEqualTo []) exitWith { + _group call CBA_fnc_deleteEntity; + false +}; private _start_city = selectRandom _usefuls; private _pos = getPos _start_city; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf index 1f6693b40..bbd40a815 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_patrol.sqf @@ -41,12 +41,18 @@ if (btc_debug_log) then { }; //Remove if too far from player -if ([_active_city, grpNull, _area] call btc_fnc_patrol_playersInAreaCityGroup) exitWith {false}; +if ([_active_city, grpNull, _area] call btc_fnc_patrol_playersInAreaCityGroup) exitWith { + _group call CBA_fnc_deleteEntity; + false +}; //Find a city private _cities = btc_city_all inAreaArray [getPosWorld _active_city, _area, _area]; private _usefuls = _cities select {!(_x getVariable ["active", false]) && _x getVariable ["occupied", false]}; -if (_usefuls isEqualTo []) exitWith {false}; +if (_usefuls isEqualTo []) exitWith { + _group call CBA_fnc_deleteEntity; + false +}; //Randomize position if city has a beach, so position could be in water private _start_city = selectRandom _usefuls; From 5ca1fcfb8a1bb863b446900881ad39ec83f4e7b8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 7 Aug 2020 01:55:28 +0200 Subject: [PATCH 148/264] Improve road detection --- .../core/fnc/tag/initArea.sqf | 14 +++++++++----- .../core/init_server.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- docs/InGame-documentation.md | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index d4b1d6bf1..a878b96a9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -49,21 +49,25 @@ if (_array isEqualTo []) then { _n = _n * 2; }; - private _road = objNull; + private _roads = _city nearRoads 50; + private _road = if (_roads isEqualTo []) then { + objNull + } else { + selectRandom _roads + }; for "_i" from 1 to (_n * 1.5) do { private _sel_pos = [_city, _area] call CBA_fnc_randPos; if !(surfaceIsWater _sel_pos) then { - if (isNull _road) then { + if (isNil "_road" || {isNull _road}) then { private _roads = _sel_pos nearRoads 50; if !(_roads isEqualTo []) then { _road = selectRandom _roads; }; } else { - _road = selectRandom roadsConnectedTo _road; - }; - if !(isNull _road) then { private _arr = [_road, -1] call btc_fnc_ied_randomRoadPos; _sel_pos = _arr select 0; + private _connected = roadsConnectedTo _road; + _road = _connected select selectRandomWeighted [0, 0.6, (count _connected) - 1, 0.4]; }; private _surface = surfaceNormal _sel_pos; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index 2806556e8..ef15ecf41 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -56,4 +56,4 @@ if (btc_p_side_mission_cycle > 0) then { { ["btc_tag_remover" + _x, "STR_BTC_HAM_ACTION_REMOVETAG", _x, ["#(rgb,8,8,3)color(0,0,0,0)"], "\a3\Modules_F_Curator\Data\portraitSmoke_ca.paa"] call ace_tagging_fnc_addCustomTag; -} forEach ["ACE_SpraypaintBlack", "ACE_SpraypaintRed", "ACE_SpraypaintGreen", "ACE_SpraypaintBlue"]; +} forEach ["ACE_SpraypaintRed"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index c4fd533fc..0b5b63216 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -181,7 +181,7 @@ 声誉 - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, remove tag, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Good actions:</marker><br/> Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, remove tag with spraypaint red, succed side mission and destroy cache/hideout will rise your reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Bad actions:</marker><br/> Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. <br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index bdfc6feb5..a4037d878 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -116,7 +116,7 @@ When you destroy an hideout or an ammo cache, all the markers related to it will ### System: At the beginning you have a very low reputation level, so civilians won't help you in revealing important information about the Oplitas, they will likely lie instead. Reputation can be ask to civilian. ### Good actions: -Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, remove tag, succed side mission and destroy cache/hideout will rise your reputation. +Helping the local population by fighting the Oplitas, disarming IED's, heal civilians, remove tag with spraypaint red, succed side mission and destroy cache/hideout will rise your reputation. ### Bad actions: Bad actions cause bad effects: killing civilians/animals, mutilating alive/dead civilians/animals, firing near civilians for no reason, firing to civilian car, damaging/destroying buildings, losing player's vehicles and player respawns will decrease your reputation. Aborting a side mission does not affect reputation. From 41c3a5d4623fa7b6c48bf7518aab1c8b7286ddb1 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Fri, 7 Aug 2020 16:56:56 +0800 Subject: [PATCH 149/264] Simplified Chinese Translation for #919 and #927 Simplified Chinese Translation for #919 and #927 --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index c26fddd20..143d59d04 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -82,7 +82,7 @@ <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> 任务将自动使用一台可用的无头客户端。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> 本任务内置独立的数据库系统。敌方单位、城市、藏匿点、武器箱、车辆、玩家或宙斯创建的物体以及公共频道中的地图标记(不含划线标记)将被存储。每个管理员都可以通过自我互动菜单随时保存任务进度。<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> 任务将自动使用一台可用的无头客户端。<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> 本任务内置独立的数据库系统。敌方单位、城市、藏匿点、武器箱、车辆、标记、玩家或宙斯创建的物体以及公共频道中的地图标记(不含划线标记)将被存储。每个管理员都可以通过自我互动菜单随时保存任务进度。<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> @@ -185,7 +185,8 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> 可以向平民询问声誉状况<br/> 不良作风及恶劣行为会导致声誉下降。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 救助当地居民, 拆除IED并积极地与Oplitas作战将对声誉产生积极影响。另一方面, 攻击或击杀平民、残害平民遗体、毁坏建筑物、攻击或掠夺民用车辆、损失我方载具和玩家重生均会降低声誉。一开始, 你的声誉很低, 因此平民不会为你提供情报, 他们可能会欺骗你。<br/> 中止支线任务不会影响声誉。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> 可以向平民询问声誉状况<br/> 不良作风及恶劣行为会导致声誉下降。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 救助当地居民, 拆除IED并积极地与Oplitas作战将对声誉产生积极影响。另一方面, 攻击或击杀平民/动物、残害平民/动物遗体、毁坏建筑物、攻击或掠夺民用车辆、损失我方载具和玩家重生均会降低声誉。一开始, 你的声誉很低, 因此平民不会为你提供情报, 他们可能会欺骗你。<br/> 中止支线任务不会影响声誉。 + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> 在任务开始时, 你只有很低的声誉, 所以平民不会向你展示关于Oplitas的重要信息, 他们更倾向于说谎。可以通过询问平民来获知声誉状况。<br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>善举:</marker><br/> 帮助当地居民反抗Oplitas, 拆除IED, 救助平民, 完成支线任务和摧毁武器箱/藏匿点将会提升你的声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>恶行:</marker><br/> 恶行将会酿成恶果: 击杀或残害平民/动物、毫无理由地向平民身边射击、攻击民用车辆、毁坏或摧毁建筑物、损失我方载具和玩家重生均会降低声誉。中止支线任务不会影响声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> @@ -222,7 +223,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemical agent:</marker><br/> A chemical agent can be found in the battlefield at cache location for example. When an object is contaminated, the chemical agent propagates to people around (in a circle of 3m). Those people will be hurt constantly until they died or found a decontaminating shower (available at the logistic point) to clean up their body. When they are contaminated, they can propagate it to other people around (in a circle of 1.5m) or vehicle if they get inside. Keep in mind, dead body stay contaminated but body bag will isolate it. Also, a contaminated object loaded as cargo will contaminate the container or vehicle. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Use CBRN gear (uniform, respirator mask and breather backpack) for full protection from the contamination effect. But, don't forget to take a shower for more than 5s before removing your CBRN gear. Be aware, even with a CBRN equipment you can propagate the agent to people or vehicle, you are just protected from the effect. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> Simple mask and simple uniform can reduce from 65% to 80% the probability to take damage.<img image='\A3\Data_F_Orange\Images\Respirator_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Decontaminate:</marker><br/> You can use a small shower to decontaminate units only. Use the big shower for objects, vehicles and objects loaded as cargo. To activate them, just stay under the shower. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can analyze an object, vehicle or man with ED-1E drone to determine if it is contaminated (Note: The drone will never be contaminated.). You can also check if you are in a contaminated area by using a chemical detector (THREAT from 0.1 to 0.9: contaminated objects are around, THREAT at 1: you are in the propagating range (you will be contaminated)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Chemische Wirk- bzw. Kampfstoffe:</marker><br/> Chemische Wirk- bzw. Kampfstoffe werden immer mal wieder im Einsatz, zum Beispiel bei den Waffenkisten, gefunden. Wenn ein Objekt kontaminiert ist, dann verbreitet sich der chemische Wirkstoff auf Personen in der näheren Umgebung (in ein Umkreis von ca. 3m). Personen, welche sich ungeschützt einem solchen Objekt nähern, werden kontaminiert und erleiden Schaden, bis Sie sterben. Man kann sich mir Hilfe einer Dekontaminationsdusche (am Logistikpunkt erhältlich) von diesem Effekt befreien. Die Kontaminierung von Personen kann untereinander weitergegeben werden, wenn man nicht aufpasst (in einem Umkreis von ca. 1,5m). Das gilt auch für die Innenräume von Fahrzeugen. Denken Sie daran, dass Leichen kontaminiert bleiben, die Leichensäcke diese jedoch isolieren. Kontaminierte Objekte können beim Verladen auch den Container und das Fahrzeug verseuchen. <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Schutz:</marker><br/> Verwenden Sie CBRN-Ausrüstung (auch ABC-Ausrüstung genannt, bestehend aus Uniform, Maske und Atemgerät), um sich vor Kontamination zu schützen. Vor dem ablegen der CBRN-Ausrüstung ist es wichtig, mindestens 5 Sekunden zu duschen, um sämtliche Verseuchungen zu entfernen. Beachten Sie, dass die CBRN-Ausrüstung nur Sie selbst vor den chemischen Kampfstoffen schütz. Sie können weiterhin andere Personen und Fahrzeuge kontaminieren. <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Dekontaminierung:</marker><br/> Mit der kleinen Dekontaminationsdusche können Sie nur Personen dekontaminieren. Verwenden Sie die große Dusche für Objekte, Fahrzeuge und den Ladenraum von Fahrzeugen (oder Containern). Um die Duschen zu aktivieren, stellen Sie sich einfach darunter. <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/> <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Erkennung:</marker><br/> Sie können ein Objekt, Fahrzeug oder eine Person mit einer ED-1E-Drohne analysieren, um festzustellen, ob es kontaminiert ist (Hinweis: Die Drohne wird niemals von einer Kontamination betroffen sein). Ebenso können Sie einen Chemischen Detektor nutzen um feststellen wie stark der nähere Bereich um Sie herum kontaminiert ist. (THREAT von 0.1 bis 0.9: kontaminierte Gegenstände sind in der Nähe, THREAT von 1: Sie befinden sich in einen verseuchten Bereich (Sie sind somit selbst kontaminiert)). <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。 <img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装、口罩、面具和呼吸器背包)可以保护您完全免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。普通的面具和制服会将受到伤害的可能性减免60%至80%。 <img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。 <img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。 <img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\danger_ca.paa' width='20' height='20'/> <marker name='blufor_base'>化学试剂:</marker><br/> 化学试剂会在战场上的武器箱等位置出现。当一个物体受到污染时, 这种化学试剂会传播它到周围的人身上(3米范围内)。这些人将持续受到伤害直至死亡, 或找到一个净化淋浴(位于在后勤点)来清理他们的身体。当这些人受到污染时, 他们会将污染传播给周围的其他人(1.5米范围内)或车辆(如果他们进入车辆的话)。记住, 尸体将保持受到污染的状态, 但尸体袋可以将其隔离。此外, 作为货物装载受污染物体将会污染集装箱或车辆。<img image='\a3\Data_F_Enoch\Images\CBRNObjects_ca.paa' width='355' height='200'/><br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护措施:</marker><br/> 使用CBRN(生化核辐)装备(服装、口罩、面具和呼吸器背包)可以保护您完全免受污染影响。但是, 在取下CBRN装备之前, 不要忘记进行至少5秒的净化淋浴。请注意, 即使穿戴了CBRN装备, 您也会向人员或车辆传播化学试剂, 只有你免受污染影响。普通的面具和制服会将受到伤害的可能性减免60%至80%。<img image='\a3\Data_F_Enoch\Images\CBRNSuit_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\box_ca.paa' width='20' height='20'/> <marker name='blufor_base'>清除污染:</marker><br/> 小型淋浴器只能用来净化单兵单位。使用大型淋浴器来清洗物品、车辆和货物。要激活净化过程, 只需待在淋浴下即可。<img image='\A3\EditorPreviews_F_Enoch\Data\CfgVehicles\DeconShower_01_F.jpg' width='355' height='200'/><br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>检测:</marker><br/> 你可以使用 ED-1E 无人机分析物体、车辆或人, 以测定其是否受到污染(注: 该无人机永远不会受到污染)。您也可以使用化学探测器检测您是否处于污染区域内(威胁度介于0.1至0.9之间: 附近存在受污染物体, 威胁度等于1: 您处于传播区域内(您将受到污染))。<img image='\a3\Data_F_Enoch\Images\ChemicalDetector_ca.paa' width='355' height='200'/> @@ -232,7 +233,7 @@ <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Electromagnetic field:</marker><br/> There are two types of electromagnetic field from UAV or electromagnetic pulse (EMP). UAV emit electromagnetic field from 390MHz to 500MHz due to device transmission. Electromagnetic pulse are used as weapon to create electronic failure to vehicles. The range of frequency is from 78MHz to 89MHz and is powerfull enough to turn off light, engine and avionic devices. <img image='\A3\Data_F_Mark\Images\watermarkInfo_page14_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Protection:</marker><br/> Electromagnetic field from UAV are safe but EMP have a range of 500m where vehicles with engine turn ON will be affected. <br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>Detection:</marker><br/> You can detect the origin of electromagnetic field with spectrum devices. The amplitude of the peak depend on the distance and angle between the emiter and the antenna. The maximum range is 1000m. <img image='\a3\Data_F_Enoch\Images\SpectrumDevice_ca.paa' width='355' height='200'/> - <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>电磁场:</marker><br/> UAV 和电磁脉冲装置(EMP)会产生两种不同的电磁场。为了传输信号, UAV 会发出频率在 390MHz 到 500MHz 之间的电磁场。电磁脉冲装置是一种能使载具上的电子设备失效的武器。它的频率范围在 78MHz 到 89MHz 之间, 其能量足以使电灯、引擎和航空电子设备实效。 <img image='\A3\Data_F_Mark\Images\watermarkInfo_page14_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护:</marker><br/> UAV 产生的电磁场是安全的, 但电磁脉冲装置将会影响500米范围内引擎开启的载具。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 你可以使用频谱探测仪来探测电磁场的源头。波形的峰值取决于发射器与天线之间的距离和角度。最大探测距离为1000米。 <img image='\a3\Data_F_Enoch\Images\SpectrumDevice_ca.paa' width='355' height='200'/> + <img image='\A3\Data_F_Enoch\Logos\arma3_enoch_logo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>电磁场:</marker><br/> UAV 和电磁脉冲装置(EMP)会产生两种不同的电磁场。为了传输信号, UAV 会发出频率在 390MHz 到 500MHz 之间的电磁场。电磁脉冲装置是一种能使载具上的电子设备失效的武器。它的频率范围在 78MHz 到 89MHz 之间, 其能量足以使电灯、引擎和航空电子设备实效。<img image='\A3\Data_F_Mark\Images\watermarkInfo_page14_ca.paa' width='355' height='200'/> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\defend_ca.paa' width='20' height='20'/> <marker name='blufor_base'>防护:</marker><br/> UAV 产生的电磁场是安全的, 但电磁脉冲装置将会影响500米范围内引擎开启的载具。<br/><br/> <img image='\z\ace\addons\minedetector\ui\icon_mineDetectorOn.paa' width='20' height='20'/> <marker name='blufor_base'>探测:</marker><br/> 你可以使用频谱探测仪来探测电磁场的源头。波形的峰值取决于发射器与天线之间的距离和角度。最大探测距离为1000米。<img image='\a3\Data_F_Enoch\Images\SpectrumDevice_ca.paa' width='355' height='200'/> @@ -342,6 +343,7 @@ Animal density: + 动物密度: Density of military in house: @@ -1433,6 +1435,7 @@ Remove tag + 移除标记 From baae52eb44e9338fe9eefc44d73425ee78326b17 Mon Sep 17 00:00:00 2001 From: GoldJohnKing Date: Fri, 7 Aug 2020 18:04:09 +0800 Subject: [PATCH 150/264] Correct a fault... Correct a fault... --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 143d59d04..550fad3f3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -185,7 +185,6 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> 可以向平民询问声誉状况<br/> 不良作风及恶劣行为会导致声誉下降。<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> 救助当地居民, 拆除IED并积极地与Oplitas作战将对声誉产生积极影响。另一方面, 攻击或击杀平民/动物、残害平民/动物遗体、毁坏建筑物、攻击或掠夺民用车辆、损失我方载具和玩家重生均会降低声誉。一开始, 你的声誉很低, 因此平民不会为你提供情报, 他们可能会欺骗你。<br/> 中止支线任务不会影响声誉。 <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> 在任务开始时, 你只有很低的声誉, 所以平民不会向你展示关于Oplitas的重要信息, 他们更倾向于说谎。可以通过询问平民来获知声誉状况。<br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>善举:</marker><br/> 帮助当地居民反抗Oplitas, 拆除IED, 救助平民, 完成支线任务和摧毁武器箱/藏匿点将会提升你的声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>恶行:</marker><br/> 恶行将会酿成恶果: 击杀或残害平民/动物、毫无理由地向平民身边射击、攻击民用车辆、毁坏或摧毁建筑物、损失我方载具和玩家重生均会降低声誉。中止支线任务不会影响声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> From 7123b3f2ef35ed09509ddd2ff511bd5680c6b2f1 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 7 Aug 2020 18:20:56 +0200 Subject: [PATCH 151/264] Add: Waypoint timeout and completion radius persistant Also fix endless waypoint [0,0,0] save each activate/deactivate city --- .../core/fnc/civ/addWP.sqf | 1 + .../core/fnc/civ/evacuate.sqf | 5 +---- .../core/fnc/common/house_addWP.sqf | 1 + .../core/fnc/data/get_group.sqf | 15 ++++++++++---- .../core/fnc/data/spawn_group.sqf | 20 ++++++++++++++----- .../core/fnc/mil/addWP.sqf | 1 + .../core/fnc/mil/create_group.sqf | 5 +++-- .../core/fnc/mil/send.sqf | 1 + .../core/fnc/patrol/addWP.sqf | 1 + 9 files changed, 35 insertions(+), 15 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/addWP.sqf index 3c6c2c6a6..89b432da3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/addWP.sqf @@ -28,6 +28,7 @@ params [ ["_radius", 50, [0]] ]; +[_group] call CBA_fnc_clearWaypoints; [_group, _pos, -1, "MOVE", "SAFE", "NO CHANGE", "LIMITED"] call CBA_fnc_addWaypoint; private _houses = [_pos, _radius] call btc_fnc_getHouses; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/evacuate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/evacuate.sqf index 71f613965..bc7b7fe6b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/evacuate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/evacuate.sqf @@ -43,10 +43,7 @@ if (_position_evac isEqualTo []) then { }; { - private _group = group _x; - [_group] call CBA_fnc_clearWaypoints; - - [_group, _position_evac, 20] call btc_fnc_civ_addWP; + [group _x, _position_evac, 20] call btc_fnc_civ_addWP; } forEach _civilians; _civilians diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf index 5c95282c8..19db26451 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf @@ -26,6 +26,7 @@ params [ ["_house", objNull, [objNull]] ]; +[_group] call CBA_fnc_clearWaypoints; private _allpositions = [_group, _house] call btc_fnc_house_addWP_loop; private _wp = [_group, [_allpositions select 0, 0.2] call CBA_fnc_randPos, -1, "CYCLE", "UNCHANGED", "NO CHANGE", "UNCHANGED", "NO CHANGE", "", [15, 20, 30]] call CBA_fnc_addWaypoint; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf index 35db1cc7b..38a261dcf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf @@ -52,10 +52,17 @@ private _index_wp = 0; }; } forEach _units; -_index_wp = (currentWaypoint _group) + 1; -{ - _array_wp append [[waypointPosition _x, waypointType _x, waypointSpeed _x, waypointFormation _x, waypointCombatMode _x, waypointBehaviour _x]]; -} forEach waypoints _group; +_index_wp = currentWaypoint _group; +_array_wp = (waypoints _group) apply {[ + waypointPosition _x, + waypointType _x, + waypointSpeed _x, + waypointFormation _x, + waypointCombatMode _x, + waypointBehaviour _x, + waypointTimeout _x, + waypointCompletionRadius _x +]}; if !(_group getVariable ["btc_inHouse", ""] isEqualTo "") then {_type_db = 3; _array_veh = _group getVariable ["btc_inHouse", ""]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 6952cd0db..4f5486e41 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -80,12 +80,22 @@ if (_type isEqualTo 1) then { ["_array_veh", [], [[], ""]] ]; - //[waypointPosition _x,waypointType _x,waypointSpeed _x,waypointFormation _x,waypointCombatMode _x,waypointBehaviour _x] if !(_type in [3, 6]) then { - if (count (_array_wp select 1) > 1) then { - { - [_group, _x select 0, -1, _x select 1, _x select 5, _x select 4, _x select 2, _x select 3, "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; - } forEach (_array_wp select 1); + [_group] call CBA_fnc_clearWaypoints; + { + _x params [ + "_position", + "_type", + "_speed", + "_formation", + "_combat", + "_behaviour", + ["_timeout", [0, 0, 0], [[]], 3], + ["_compRadius", 20, [0]] + ]; + [_group, _position, -1, _type, _behaviour, _combat, _speed, _formation, "", _timeout, _compRadius] call CBA_fnc_addWaypoint; + } forEach (_array_wp select 1); + if !(_array_wp select 1 isEqualTo []) then { _group setCurrentWaypoint [_group, _array_wp select 0]; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf index 92f16560e..3cb1e25cc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/addWP.sqf @@ -51,6 +51,7 @@ switch (true) do { [_group, _rpos, _area, 2 + floor (random 4), "MOVE", "AWARE", "RED", ["LIMITED", "NORMAL"] select ((vehicle leader _group) isKindOf "Air"), "STAG COLUMN", "", [5, 10, 20]] call CBA_fnc_taskPatrol; }; case (_wp > _wp_sentry_probability) : { + [_group] call CBA_fnc_clearWaypoints; [_group, _rpos, -1, "SENTRY", "AWARE", "RED", "UNCHANGED", "WEDGE", "(group this) call btc_fnc_data_add_group;", [18000, 36000, 54000]] call CBA_fnc_addWaypoint; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf index b4b3f6c5b..50abd3d00 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf @@ -64,12 +64,13 @@ switch (true) do { }; }; case (_wp > _wp_house_probability && _wp <= _wp_sentry_probability) : { - [_group, _rpos, _n, _pos_iswater] call btc_fnc_mil_createUnits; [_group, _rpos, _area, 2 + floor (random 4), "MOVE", "SAFE", "RED", "LIMITED", "STAG COLUMN", "", [5, 10, 20]] call CBA_fnc_taskPatrol; + [_group, _rpos, _n, _pos_iswater] call btc_fnc_mil_createUnits; }; case (_wp > _wp_sentry_probability) : { - [_group, _rpos, _n, _pos_iswater] call btc_fnc_mil_createUnits; + [_group] call CBA_fnc_clearWaypoints; [_group, _rpos, -1, "SENTRY", "AWARE", "RED"] call CBA_fnc_addWaypoint; + [_group, _rpos, _n, _pos_iswater] call btc_fnc_mil_createUnits; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index d028ae7cb..355de252b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -55,6 +55,7 @@ switch (_typeOf_patrol) do { _delay = [_group, _return_pos, _veh_type] call btc_fnc_mil_createVehicle; + [_group] call CBA_fnc_clearWaypoints; [_group, _dest, -1, "MOVE", "AWARE", "RED", "NORMAL", "NO CHANGE", "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; [_group, _dest, -1, "GETOUT", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; [_group, _dest, -1, "SENTRY", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf index fe7d1492d..c4a6b7830 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf @@ -37,6 +37,7 @@ if (_vehicle isKindOf "Air" || _vehicle isKindOf "LandVehicle") then { _vehicle setFuel 1; }; _group setBehaviour "SAFE"; +[_group] call CBA_fnc_clearWaypoints; if (_vehicle isKindOf "Air") then { [_group, _pos, -1, "MOVE", "UNCHANGED", "RED", "LIMITED", "STAG COLUMN", _waypointStatements, [0, 0, 0], 20] call CBA_fnc_addWaypoint; From 5be8650f0702b911ebf9251bb4b92ea0104ff4e2 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 10 Aug 2020 16:09:44 +0200 Subject: [PATCH 152/264] CBA_fnc_clearWaypoints for side missions --- .../core/fnc/side/capture_officer.sqf | 1 + =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 963ecd7fe..081ef8d64 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -69,6 +69,7 @@ private _markers = [_marker1, _marker2, _area]; //// Create convoy \\\\ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; +[_group] call CBA_fnc_clearWaypoints; private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; private _delay = 0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index a66a5a643..242a140d7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -69,6 +69,7 @@ private _markers = [_marker1, _marker2, _area]; //// Create convoy \\\\ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; +[_group] call CBA_fnc_clearWaypoints; private _vehs = []; private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; @@ -89,10 +90,9 @@ for "_i" from 0 to (2 + round random 2) do { [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; _agent removeEventHandler ["PathCalculated", _thisEventHandler]; }]; + [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2] call CBA_fnc_addWaypoint; }, [_group, _pos2, _taskID], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; -[_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2] call CBA_fnc_addWaypoint; - waitUntil {sleep 5; ( _taskID call BIS_fnc_taskCompleted || ((units _group) apply {assignedVehicle _x}) select {canMove _x} isEqualTo [] || From 25c4e0ecc6b39ee5d83eb86675e4b38d6dcce367 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 10 Aug 2020 21:40:17 +0200 Subject: [PATCH 153/264] FIX: AI spawn stuck by each other --- .../core/fnc/patrol/addWP.sqf | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf index fe7d1492d..188b97d68 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addWP.sqf @@ -36,18 +36,16 @@ private _vehicle = vehicle leader _group; if (_vehicle isKindOf "Air" || _vehicle isKindOf "LandVehicle") then { _vehicle setFuel 1; }; -_group setBehaviour "SAFE"; if (_vehicle isKindOf "Air") then { - [_group, _pos, -1, "MOVE", "UNCHANGED", "RED", "LIMITED", "STAG COLUMN", _waypointStatements, [0, 0, 0], 20] call CBA_fnc_addWaypoint; - + [_group, _pos, -1, "MOVE", "SAFE", "RED", "LIMITED", "STAG COLUMN", _waypointStatements, [0, 0, 0], 20] call CBA_fnc_addWaypoint; } else { - [_group, _pos, -1, "MOVE", "UNCHANGED", "RED", "LIMITED", "STAG COLUMN", "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; + [_group, _pos, -1, "MOVE", "SAFE", "RED", "LIMITED", "STAG COLUMN", "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; for "_i" from 0 to (2 + (floor (random 3))) do { private _newPos = [_pos, 150] call CBA_fnc_randPos; [_group, _newPos, -1, "MOVE", "UNCHANGED", "RED", "UNCHANGED", "NO CHANGE", "", [0, 0, 0], 20] call CBA_fnc_addWaypoint; }; - private _waypoint_WPCheck = [_group, _pos, -1, "MOVE", "UNCHANGED", "NO CHANGE", "UNCHANGED", "NO CHANGE", _waypointStatements, [0, 0, 0], 20] call CBA_fnc_addWaypoint; + [_group, _pos, -1, "MOVE", "UNCHANGED", "NO CHANGE", "UNCHANGED", "NO CHANGE", _waypointStatements, [0, 0, 0], 20] call CBA_fnc_addWaypoint; }; if (btc_debug) then { From 39e8f75b0041c481b9b62cc9ac5746c30c9b229a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 10 Aug 2020 22:10:55 +0200 Subject: [PATCH 154/264] Celan up some AI behavior --- .../core/fnc/civ/get_grenade.sqf | 8 ++++---- .../core/fnc/civ/get_weapons.sqf | 9 ++++----- .../core/fnc/int/orders_behaviour.sqf | 2 -- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf index 2d734c3a4..bb81ad512 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf @@ -48,8 +48,8 @@ if (_units isEqualTo []) exitWith {}; [_x] joinSilent createGroup [btc_enemy_side, true]; - (group _x) setVariable ["getWeapons", true]; - - (group _x) setBehaviour "AWARE"; - [group _x, _pos, -1, "GUARD", "UNCHANGED", "RED", nil, nil, nil, nil, 10] call CBA_fnc_addWaypoint; + private _group = group _x; + [_group] call CBA_fnc_clearWaypoints; + _group setVariable ["getWeapons", true]; + [_group, _pos, -1, "GUARD", "AWARE", "RED", nil, nil, nil, nil, 10] call CBA_fnc_addWaypoint; } forEach [selectRandom _units]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf index 6ca79c254..bc8925982 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf @@ -45,9 +45,8 @@ if (_units isEqualTo []) then { [_x] call btc_fnc_civ_add_weapons; [_x] joinSilent createGroup [btc_enemy_side, true]; - - (group _x) setVariable ["getWeapons", true]; - - (group _x) setBehaviour "AWARE"; - [group _x, getPos _x, -1, "GUARD", "UNCHANGED", "RED", nil, nil, nil, nil, 10] call CBA_fnc_addWaypoint; + private _group = group _x; + [_group] call CBA_fnc_clearWaypoints; + _group setVariable ["getWeapons", true]; + [_group, getPos _x, -1, "GUARD", "AWARE", "RED", nil, nil, nil, nil, 10] call CBA_fnc_addWaypoint; } forEach _units; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders_behaviour.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders_behaviour.sqf index 0c7c82c46..da46de001 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders_behaviour.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/orders_behaviour.sqf @@ -75,8 +75,6 @@ if (_order isEqualTo 4) then { _unit setVariable ["order", nil]; _unit setUnitPos "AUTO"; -_unit setBehaviour _behaviour; -_unit doMove getPos _unit; if (_unit isEqualTo vehicle _unit) then { [_group] call btc_fnc_civ_addWP; From 13196c3aa49450cd3b63ea49eb0a9ff2ae53cd61 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 17 Aug 2020 10:33:58 +0200 Subject: [PATCH 155/264] Reputation delayed can be null during the check loop --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf index 0cce13375..6f1ca457e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/change.sqf @@ -33,7 +33,7 @@ if (btc_debug || btc_debug_log) then { btc_global_reputation = btc_global_reputation + _reputation; if (btc_p_rep_notify) then { - if ((btc_rep_delayed select 0) isEqualTo 0) then { + if ((btc_rep_delayed select 1) isEqualTo []) then { [{ [{ abs(btc_rep_delayed select 0) > 3 From 21528675914bfa0fcc115efe4f1da1aa36256d3e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 18 Aug 2020 11:23:18 +0200 Subject: [PATCH 156/264] Move delete vehicle from patrol to a dedicated event --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf | 8 ++++++++ =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf | 5 ----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 709e2ff78..625900016 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -54,6 +54,14 @@ if (btc_p_set_skill) then { ["CAManBase", "InitPost", btc_fnc_mil_set_skill] call CBA_fnc_addClassEventHandler; }; ["btc_delay_vehicleInit", btc_fnc_patrol_addEH] call CBA_fnc_addEventHandler; +["ace_killed", { + params ["_unit"]; + if (!(side group _unit isEqualTo civilian)) exitWith {}; + private _vehicle = assignedVehicle _unit; + if !(_vehicle isEqualTo objNull) then { + [[], [_vehicle]] call btc_fnc_delete; + }; +}] call CBA_fnc_addEventHandler; ["ace_tagCreated", { params ["_tag", "_texture", "_object"]; if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf index da6e652ed..e53082623 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/killed.sqf @@ -41,8 +41,3 @@ if (isPlayer _instigator) then { [format ["GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; }; }; - -private _vehicle = assignedVehicle _unit; -if !(_vehicle isEqualTo objNull) then { - [[], [_vehicle]] call btc_fnc_delete; -}; From 04a1a9d53d8969fe2e75d8e84d57ee37bf5b20d7 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 18 Aug 2020 11:45:19 +0200 Subject: [PATCH 157/264] Clean up load vehicle from database --- .../core/fnc/db/load.sqf | 75 ++++++++----------- .../core/fnc/eh/veh_killed.sqf | 15 ++-- .../core/fnc/log/createVehicle.sqf | 16 +++- 3 files changed, 55 insertions(+), 51 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index bb2a969d0..935a5f358 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -113,59 +113,46 @@ private _fobs = profileNamespace getVariable [format ["btc_hm_%1_fobs", _name], } forEach _fobs; //REP -private _global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _name], 0]; +btc_global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _name], 0]; //VEHICLES {deleteVehicle _x} forEach btc_vehicles; btc_vehicles = []; private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]; -[{ - params ["_vehs", "_global_reputation"]; - - { - _x params [ - "_veh_type", - "_veh_pos", - "_veh_dir", - "_veh_fuel", - "_veh_AllHitPointsDamage", - "_veh_cargo", - "_veh_cont", - "_customization", - ["_isMedicalVehicle", false, [false]], - ["_isRepairVehicle", false, [false]], - ["_fuelSource", [], [[]]], - ["_pylons", [], [[]]], - ["_isContaminated", false, [false]], - ["_supplyVehicle", [], [[]]], - ["_EDENinventory", [], [[]]] - ]; - - if (btc_debug_log) then { - [format ["_veh = %1", _x], __FILE__, [false]] call btc_fnc_debug_message; - }; +{ + _x params [ + "_veh_type", + "_veh_pos", + "_veh_dir", + "_veh_fuel", + "_veh_AllHitPointsDamage", + "_veh_cargo", + "_veh_cont", + "_customization", + ["_isMedicalVehicle", false, [false]], + ["_isRepairVehicle", false, [false]], + ["_fuelSource", [], [[]]], + ["_pylons", [], [[]]], + ["_isContaminated", false, [false]], + ["_supplyVehicle", [], [[]]], + ["_EDENinventory", [], [[]]] + ]; + + if (btc_debug_log) then { + [format ["_veh = %1", _x], __FILE__, [false]] call btc_fnc_debug_message; + }; - private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle, _EDENinventory] call btc_fnc_log_createVehicle; - if ((getPos _veh) select 2 < 0) then {_veh setVectorUp surfaceNormal position _veh;}; - _veh setFuel _veh_fuel; + private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle, _EDENinventory, _veh_AllHitPointsDamage] call btc_fnc_log_createVehicle; + if ((getPos _veh) select 2 < 0) then {_veh setVectorUp surfaceNormal position _veh;}; + _veh setFuel _veh_fuel; - [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; + [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; - //Disable explosion effect during database loading - { - [_veh, _forEachindex, _x, false] call ace_repair_fnc_setHitPointDamage; - } forEach (_veh_AllHitPointsDamage select 2); - if ((_veh_AllHitPointsDamage select 2) select {_x < 1} isEqualTo []) then { - _veh setVariable ["ace_cookoff_enable", false, true]; - _veh setVariable ["ace_cookoff_enableAmmoCookoff", false, true]; - _veh setDamage [1, false]; - }; - } forEach _vehs; - [{ - btc_global_reputation = _this; - }, _global_reputation, 0.5] call CBA_fnc_waitAndExecute; -}, [_vehs, _global_reputation], 0.5] call CBA_fnc_waitAndExecute; + if !(alive _veh) then { + [_veh, false] call btc_fnc_eh_veh_killed; + }; +} forEach _vehs; //Objects private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf index e720fed5d..1e133e98d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf @@ -8,6 +8,7 @@ Description: Parameters: _vehicle - Vehicle object. [Object] _killer - Killer. [Object] + _allowRepChange - Allow reputation change. [Boolean] Returns: @@ -23,7 +24,8 @@ Author: params [ ["_vehicle", objNull, [objNull]], - ["_killer", objNull, [objNull]] + ["_killer", objNull, [objNull]], + ["_allowRepChange", true, [false]] ]; private _marker = createMarker [format ["m_%1", _vehicle], getPos _vehicle]; @@ -32,9 +34,10 @@ _marker setMarkerColor "ColorRed"; [_marker, "STR_BTC_HAM_O_EH_VEHKILLED_MRK", getText (configFile >> "cfgVehicles" >> typeOf _vehicle >> "displayName")] remoteExecCall ["btc_fnc_set_markerTextLocal", [0, -2] select isDedicated, _marker]; // %1 wreck _vehicle setVariable ["marker", _marker]; - -if (isServer) then { - [btc_rep_malus_veh_killed, _killer] call btc_fnc_rep_change; -} else { - [btc_rep_malus_veh_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; +if (_allowRepChange) then { + if (isServer) then { + [btc_rep_malus_veh_killed, _killer] call btc_fnc_rep_change; + } else { + [btc_rep_malus_veh_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; + }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf index c06ea5f82..a45acb132 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/createVehicle.sqf @@ -16,6 +16,8 @@ Parameters: _pylons - Set pylon loadout. [Array] _isContaminated - Set a vehicle contaminated. [Boolean] _supplyVehicle - Is supply vehicle and current supply count. [Boolean] + _EDENinventory - Load EDEN inventory define in mission.sqm. [Array] + _allHitPointsDamage - Apply hit point damage to the vehicle. [Array] Returns: @@ -40,7 +42,8 @@ params [ ["_pylons", [], [[]]], ["_isContaminated", false, [false]], ["_supplyVehicle", [], [[]]], - ["_EDENinventory", [], [[]]] + ["_EDENinventory", [], [[]]], + ["_allHitPointsDamage", [], [[]]] ]; private _veh = createVehicle [_type, ASLToATL _pos, [], 0, "CAN_COLLIDE"]; @@ -59,6 +62,17 @@ if (getNumber(configFile >> "CfgVehicles" >> typeOf _veh >> "isUav") isEqualTo 1 createVehicleCrew _veh; }; +if !(_allHitPointsDamage isEqualTo []) then { + {//Disable explosion effect on vehicle creation + [_veh, _forEachindex, _x, false] call ace_repair_fnc_setHitPointDamage; + } forEach (_allHitPointsDamage select 2); + if ((_allHitPointsDamage select 2) select {_x < 1} isEqualTo []) then { + _veh setVariable ["ace_cookoff_enable", false, true]; + _veh setVariable ["ace_cookoff_enableAmmoCookoff", false, true]; + _veh setDamage [1, false]; + }; +}; + _veh call btc_fnc_db_add_veh; _veh From 0e76cc4ffd368690489e6d7e1bd3145ce3c0988f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 25 Aug 2020 18:19:34 +0200 Subject: [PATCH 158/264] Improve convoy syntaxe --- .../core/fnc/info/path.sqf | 11 +++-- .../core/fnc/side/convoy.sqf | 42 +++++++++++-------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf index c7ba5b65e..2fff8ba42 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf @@ -24,14 +24,16 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_unit", objNull, [objNull]], + ["_startPos", [0, 0, 0], [[]]], ["_endPos", [0, 0, 0], [[]]], - ["_taskID", "btc_side", [""]] + ["_taskID", "btc_side", [""]], + ["_typeVehicle", "Man", [""]], + ["_behaviour", "safe", [""]] ]; -private _parent = [configFile >> "CfgVehicles" >> typeOf vehicle _unit, true] call BIS_fnc_returnParents; +private _parent = [configFile >> "CfgVehicles" >> _typeVehicle, true] call BIS_fnc_returnParents; private _type = (_parent arrayIntersect ["Man", "Car", "Tank", "Wheeled_APC", "Boat", "Plane", "Helicopter"]) select 0; -private _agent = calculatePath [_type, behaviour _unit, getPos _unit, _endPos]; +private _agent = calculatePath [_type, _behaviour, _startPos, _endPos]; [_agent, "PathCalculated", { params ["_agent", "_path"]; @@ -40,6 +42,7 @@ private _agent = calculatePath [_type, behaviour _unit, getPos _unit, _endPos]; ]; _agent removeEventHandler ["PathCalculated", _thisId]; + _agent setVariable "btc_path"; private _color = configName selectRandom (configProperties [configFile >> "CfgMarkerColors"]); private _delta = 10; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 242a140d7..4f0a5c240 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -66,33 +66,39 @@ _area setmarkercolor "colorBlue"; private _markers = [_marker1, _marker2, _area]; +/// Show info path\\\ +private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; +private _agent = [{ + params ["_pos1", "_pos2", "_taskID", "_typeVehicle"]; + private _agent = [_pos1, _pos2, _taskID, _typeVehicle, "SAFE"] call btc_fnc_info_path; + _agent addEventHandler ["PathCalculated", { + params ["_agent", "_path"]; + + [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + _agent removeEventHandler ["PathCalculated", _thisEventHandler]; + }]; + _agent +}, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; + //// Create convoy \\\\ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; +[ + _group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", + format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 +] call CBA_fnc_addWaypoint; -private _vehs = []; -private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; +waitUntil {sleep 0.5; (_agent getVariable ["btc_path", []]) isEqualTo []}; + +private _length = count (_agent getVariable ["btc_path", []]); +private _listPositions = (_agent getVariable ["btc_path", []]) select [10 min _length, _length - 1]; private _delay = 0; for "_i" from 0 to (2 + round random 2) do { - _delay = _delay + ([_group, _pos1, selectRandom _veh_types, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); - - _road = (roadsConnectedTo _road) select 0; - _pos1 = getPosATL _road; + private _pos = _listPositions deleteAt 0; + _delay = _delay + ([_group, _pos, selectRandom _veh_types, _pos getDir (_listPositions select 0)] call btc_fnc_mil_createVehicle); }; -[{ - params ["_group", "_pos2", "_taskID"]; - private _agent = [leader _group, _pos2, _taskID] call btc_fnc_info_path; - _agent addEventHandler ["PathCalculated", { - params ["_agent", "_path"]; - - [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; - _agent removeEventHandler ["PathCalculated", _thisEventHandler]; - }]; - [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2] call CBA_fnc_addWaypoint; -}, [_group, _pos2, _taskID], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; - waitUntil {sleep 5; ( _taskID call BIS_fnc_taskCompleted || ((units _group) apply {assignedVehicle _x}) select {canMove _x} isEqualTo [] || From b855512fb0d75e593b367770fe8aa54c1b3d7208 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 26 Aug 2020 13:24:53 +0200 Subject: [PATCH 159/264] Add: Support for multiple logistic point --- .../core/fnc/log/create_apply.sqf | 16 ++++++++++------ .../core/fnc/log/dlg.hpp | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf index 6ac9b2ba2..a4f17319a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf @@ -19,25 +19,29 @@ Author: ---------------------------------------------------------------------------- */ +params [ + ["_create_object_point", btc_create_object_point, [objNull]] +]; + private _class = lbData [72, lbCurSel 72]; closeDialog 0; [{ - params [["_class", "", [""]]]; + params ["_class", "_create_object_point"]; if (_class isEqualTo btc_supplies_cargo) then { btc_supplies_mat params ["_food", "_water"]; - private _position_world = getPosWorld btc_create_object_point; + private _position_world = getPosWorld _create_object_point; _position_world params ["_xx", "_yy", "_zz"]; [[ btc_supplies_cargo, - [_xx, _yy, _zz + 1.5], getDir btc_create_object_point, + [_xx, _yy, _zz + 1.5], getDir _create_object_point, "", [selectRandom _food, selectRandom _water] apply {[_x, "", [[[], []], [[], []], [[], []]]]}, [[[], []], [[], []], [[], []]], - [vectorDir btc_create_object_point, vectorUp btc_create_object_point] + [vectorDir _create_object_point, vectorUp _create_object_point] ]] remoteExecCall ["btc_fnc_db_loadObjectStatus", 2]; } else { - [_class] remoteExecCall ["btc_fnc_log_create_s", 2]; + [_class, getPosASL _create_object_point] remoteExecCall ["btc_fnc_log_create_s", 2]; }; -}, [_class], 0.2] call CBA_fnc_waitAndExecute; +}, [_class, _create_object_point], 0.2] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp index c82267511..8c735c044 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp @@ -8,7 +8,7 @@ class btc_log_dlg_create { class btc_log_dlg_Apply : btc_dlg_button { idc = -1; text = $STR_ui_debug_but_apply; //Apply - action = "[] call btc_fnc_log_create_apply"; + action = "[btc_log_create_obj] call btc_fnc_log_create_apply"; x = 0 * safezoneW + safezoneX; y = 0.25 * safezoneH + safezoneY; default = true; From 29b5a3e2381f5d075ee2522de961f4a75b256473 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 27 Aug 2020 00:35:40 +0200 Subject: [PATCH 160/264] Improve code --- .../core/fnc/log/create_apply.sqf | 10 +++++----- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf index a4f17319a..9c995ec62 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/create_apply.sqf @@ -6,6 +6,7 @@ Description: Fill me when you edit me ! Parameters: + _create_object_point - Helipad where to create the object. [Object] Returns: @@ -20,12 +21,9 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_create_object_point", btc_create_object_point, [objNull]] + ["_create_object_point", btc_log_create_obj, [objNull]] ]; -private _class = lbData [72, lbCurSel 72]; -closeDialog 0; - [{ params ["_class", "_create_object_point"]; @@ -44,4 +42,6 @@ closeDialog 0; } else { [_class, getPosASL _create_object_point] remoteExecCall ["btc_fnc_log_create_s", 2]; }; -}, [_class, _create_object_point], 0.2] call CBA_fnc_waitAndExecute; +}, [lbData [72, lbCurSel 72], _create_object_point], 0.2] call CBA_fnc_waitAndExecute; + +closeDialog 0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp index 8c735c044..c82267511 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/dlg.hpp @@ -8,7 +8,7 @@ class btc_log_dlg_create { class btc_log_dlg_Apply : btc_dlg_button { idc = -1; text = $STR_ui_debug_but_apply; //Apply - action = "[btc_log_create_obj] call btc_fnc_log_create_apply"; + action = "[] call btc_fnc_log_create_apply"; x = 0 * safezoneW + safezoneX; y = 0.25 * safezoneH + safezoneY; default = true; From 7a719d27b2051ec021d14068f3c059820fc6c969 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 27 Aug 2020 01:37:48 +0200 Subject: [PATCH 161/264] Improve init server --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 2 +- .../core/fnc/eh/veh_killed.sqf | 2 ++ =BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf | 6 ++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 935a5f358..fc136464f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -150,7 +150,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; if !(alive _veh) then { - [_veh, false] call btc_fnc_eh_veh_killed; + [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; }; } forEach _vehs; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf index 1e133e98d..fee10b107 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf @@ -8,6 +8,7 @@ Description: Parameters: _vehicle - Vehicle object. [Object] _killer - Killer. [Object] + _instigator - Person who pulled the trigger. [Object] _allowRepChange - Allow reputation change. [Boolean] Returns: @@ -25,6 +26,7 @@ Author: params [ ["_vehicle", objNull, [objNull]], ["_killer", objNull, [objNull]], + ["_instigator", objNull, [objNull]], ["_allowRepChange", true, [false]] ]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index f96c4c5ad..c95707357 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -22,10 +22,8 @@ if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldN setDate _date; { - [{!isNull _this}, { - _this setVariable ["btc_EDENinventory", [getWeaponCargo _this, getMagazineCargo _this, getItemCargo _this]]; - _this call btc_fnc_db_add_veh; - }, _x] call CBA_fnc_waitUntilAndExecute; + _x setVariable ["btc_EDENinventory", [getWeaponCargo _x, getMagazineCargo _x, getItemCargo _x]]; + _x call btc_fnc_db_add_veh; } forEach btc_vehicles; }; From e3a4f4e66b3753d2eba48b40e09b9da43dd30e2b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 27 Aug 2020 14:03:46 +0200 Subject: [PATCH 162/264] Simplify data fnc --- .../core/fnc/common/house_addWP.sqf | 1 - .../core/fnc/data/get_group.sqf | 82 +++++++++---------- .../core/fnc/data/spawn_group.sqf | 8 -- .../core/fnc/mil/create_static.sqf | 1 + 4 files changed, 40 insertions(+), 52 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf index 19db26451..27e066354 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/house_addWP.sqf @@ -31,4 +31,3 @@ private _allpositions = [_group, _house] call btc_fnc_house_addWP_loop; private _wp = [_group, [_allpositions select 0, 0.2] call CBA_fnc_randPos, -1, "CYCLE", "UNCHANGED", "NO CHANGE", "UNCHANGED", "NO CHANGE", "", [15, 20, 30]] call CBA_fnc_addWaypoint; _wp waypointAttachObject _house; -_wp setWaypointHousePosition 0; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf index 38a261dcf..6ec16733c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf @@ -24,36 +24,20 @@ params [ ["_group", grpNull, [grpNull]] ]; -private _units = units _group; -if (_units select {alive _x} isEqualTo []) exitWith {nil}; - -private _type_db = 0; -private _array_pos = []; -private _array_type = []; -private _side = side _group; -private _array_dam = []; -private _behaviour = [behaviour (leader _group), combatMode _group, formation _group]; -private _array_wp = []; -private _array_in_veh = []; -private _array_veh = []; -private _index_wp = 0; - -{ - if (getDammage _x < 1) then { - private _pos = getPosATL _x; - if (surfaceIsWater _pos) then { - _array_pos pushBack getPos _x; - } else { - _array_pos pushBack _pos; - }; - - _array_type pushBack typeOf _x; - _array_dam pushBack getDammage _x; - }; -} forEach _units; - -_index_wp = currentWaypoint _group; -_array_wp = (waypoints _group) apply {[ +private _units = (units _group) select {alive _x}; +if (_units isEqualTo []) exitWith {nil}; +private _leader = leader _group; +private _vehicle = vehicle _leader; + +private _type_db = 0; +private _array_pos = []; +private _array_type = []; +private _side = side _group; +private _array_dam = []; +private _array_in_veh = []; +private _array_veh = []; +private _index_wp = currentWaypoint _group; +private _array_wp = (waypoints _group) apply {[ waypointPosition _x, waypointType _x, waypointSpeed _x, @@ -64,25 +48,37 @@ _array_wp = (waypoints _group) apply {[ waypointCompletionRadius _x ]}; -if !(_group getVariable ["btc_inHouse", ""] isEqualTo "") then {_type_db = 3; +{ + private _pos = getPosATL _x; + if (surfaceIsWater _pos) then { + _array_pos pushBack getPos _x; + } else { + _array_pos pushBack _pos; + }; + + _array_type pushBack typeOf _x; + _array_dam pushBack getDammage _x; +} forEach _units; + +if !(_group getVariable ["btc_inHouse", ""] isEqualTo "") then { + _type_db = 3; _array_veh = _group getVariable ["btc_inHouse", ""]; }; if (_group getVariable ["getWeapons", false]) then {_type_db = 4;}; if (_group getVariable ["suicider", false]) then {_type_db = 5;}; -if !(_group getVariable ["btc_data_inhouse", []] isEqualTo []) then {_type_db = 6; +if !(_group getVariable ["btc_data_inhouse", []] isEqualTo []) then { + _type_db = 6; _array_veh = _group getVariable ["btc_data_inhouse", []]; }; if (_group getVariable ["btc_ied_drone", false]) then {_type_db = 7;}; -if ((vehicle leader _group != leader _group) && !(_type_db isEqualTo 7)) then {_type_db = 1;}; - -if (_type_db isEqualTo 1) then { - private _veh = vehicle leader _group; - private _type = typeOf _veh; - private _pos = getPosATL _veh; - private _dir = getDir _veh; - private _fuel = fuel _veh; - _array_veh = [_type, _pos, _dir, _fuel]; +if ( + _vehicle != _leader && + {!(_type_db isEqualTo 7)} +) then { + _type_db = 1; + _array_veh = [typeOf _vehicle, getPosATL _vehicle, getDir _vehicle, fuel _vehicle]; }; -[vehicle leader _group, _group] call CBA_fnc_deleteEntity; -[_type_db, _array_pos, _array_type, _side, _array_dam, _behaviour, [_index_wp, _array_wp], _array_veh] +[_vehicle, _group] call CBA_fnc_deleteEntity; + +[_type_db, _array_pos, _array_type, _side, _array_dam, [], [_index_wp, _array_wp], _array_veh] diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 4f5486e41..0d00b3475 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -60,10 +60,6 @@ if (_type isEqualTo 1) then { for "_i" from 0 to (count _array_pos - 1) do { [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; //_u setDamage (_array_dam select _i); - - if (btc_debug_log) then { - [format ["pos %1 in %2 ", _array_pos select _i], __FILE__, [false]] call btc_fnc_debug_message; - }; }; }; @@ -108,8 +104,4 @@ if (_type isEqualTo 1) then { [_group, _array_veh select 0] call btc_fnc_civ_addWP; _group setVariable ["btc_data_inhouse", _array_veh]; }; - - _group setBehaviour (_behaviour select 0); - _group setCombatMode (_behaviour select 1); - _group setFormation (_behaviour select 2); }, [_data_unit, _group], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf index 03cc3055b..482680c07 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf @@ -30,6 +30,7 @@ params [ ]; private _group = createGroup btc_enemy_side; +[_group] call CBA_fnc_clearWaypoints; [_group, _pos, selectRandom _statics_type, _dir] call btc_fnc_mil_createVehicle; _group setBehaviour "COMBAT"; From edf40df09c988caff87e67e382cafd8b0fe23717 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 28 Aug 2020 16:53:28 +0200 Subject: [PATCH 163/264] Add: Unscheduled save --- .../core/def/mission.sqf | 5 ++- .../core/fnc/compile.sqf | 1 - .../core/fnc/db/autoRestart.sqf | 19 +++-------- .../core/fnc/db/autosave.sqf | 33 ------------------- .../core/fnc/db/save.sqf | 21 +++--------- .../core/fnc/eh/server.sqf | 6 +++- .../core/fnc/int/add_actions.sqf | 2 +- 7 files changed, 18 insertions(+), 69 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index f2676ba1a..fb8666f38 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -79,9 +79,9 @@ private _p_rep = "btc_p_rep" call BIS_fnc_getParamValue; btc_p_rep_notify = ("btc_p_rep_notify" call BIS_fnc_getParamValue) isEqualTo 1; private _p_city_radius = ("btc_p_city_radius" call BIS_fnc_getParamValue) * 100; btc_p_trigger = if (("btc_p_trigger" call BIS_fnc_getParamValue) isEqualTo 1) then { - "this && !btc_db_is_saving && (false in (thisList apply {_x isKindOf 'Plane'})) && (false in (thisList apply {(_x isKindOf 'Helicopter') && (speed _x > 190)}))" + "this && (false in (thisList apply {_x isKindOf 'Plane'})) && (false in (thisList apply {(_x isKindOf 'Helicopter') && (speed _x > 190)}))" } else { - "this && !btc_db_is_saving" + "this" }; btc_p_auto_headless = ("btc_p_auto_headless" call BIS_fnc_getParamValue) isEqualTo 1; btc_p_debug = "btc_p_debug" call BIS_fnc_getParamValue; @@ -126,7 +126,6 @@ if (isServer) then { btc_civ_veh_active = []; //Database - btc_db_is_saving = false; btc_db_load = _p_db; btc_db_serverCommandPassword = "btc_password"; //Define the same password in server.cfg like this: serverCommandPassword = "btc_password"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index aa4ffde76..3baf417c5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -58,7 +58,6 @@ if (isServer) then { //DB btc_fnc_db_save = compile preprocessFileLineNumbers "core\fnc\db\save.sqf"; btc_fnc_db_delete = compile preprocessFileLineNumbers "core\fnc\db\delete.sqf"; - btc_fnc_db_autosave = compile preprocessFileLineNumbers "core\fnc\db\autosave.sqf"; btc_fnc_db_loadObjectStatus = compile preprocessFileLineNumbers "core\fnc\db\loadObjectStatus.sqf"; btc_fnc_db_saveObjectStatus = compile preprocessFileLineNumbers "core\fnc\db\saveObjectStatus.sqf"; btc_fnc_db_loadCargo = compile preprocessFileLineNumbers "core\fnc\db\loadcargo.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf index 9fe7f9074..b751ed506 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autoRestart.sqf @@ -35,18 +35,9 @@ private _serverCommand = if (_p_autoRestart in [1, 3]) then { }; if (_p_autoRestart > 2) then { - if !(btc_db_is_saving) then { - btc_db_is_saving = true; - [] spawn btc_fnc_db_save; - }; - [{!btc_db_is_saving}, { - params ["_serverCommandPassword", "_serverCommand"]; - if !(_serverCommandPassword serverCommand _serverCommand) then { - ["Invalid password", __FILE__, [true, true, true]] call btc_fnc_debug_message; - }; - }, [_serverCommandPassword, _serverCommand]] call CBA_fnc_waitUntilAndExecute; -} else { - if !(_serverCommandPassword serverCommand _serverCommand) then { - ["Invalid password", __FILE__, [true, true, true]] call btc_fnc_debug_message; - }; + [] call btc_fnc_db_save; +}; + +if !(_serverCommandPassword serverCommand _serverCommand) then { + ["Invalid password", __FILE__, [true, true, true]] call btc_fnc_debug_message; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf deleted file mode 100644 index 0ceb2f5d4..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/autosave.sqf +++ /dev/null @@ -1,33 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_db_autosave - -Description: - Save game when all players disconnected. - -Parameters: - -Returns: - _this - Passed arguments. [Array] - -Examples: - (begin example) - [] call btc_fnc_db_autosave; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -if ((allPlayers - entities "HeadlessClient_F") isEqualTo []) then { - removeMissionEventHandler ["HandleDisconnect", _thisEventHandler]; - [] spawn { - if !(btc_db_is_saving) then { - [] call btc_fnc_db_save; - }; - addMissionEventHandler ["HandleDisconnect", btc_fnc_db_autosave]; - }; -}; - -_this diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index cb091adc9..38d12501b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -12,7 +12,7 @@ Returns: Examples: (begin example) - [] spawn btc_fnc_db_save; + [] call btc_fnc_db_save; (end) Author: @@ -30,19 +30,6 @@ if (btc_debug) then { [8] remoteExecCall ["btc_fnc_show_hint", 0]; -btc_db_is_saving = true; - -{ - if (!isNull _x) then { - private _s = [_forEachIndex] spawn btc_fnc_city_de_activate; - waitUntil {scriptDone _s}; - }; -} forEach btc_city_all; - -if (btc_debug) then { - ["...2", __FILE__, [btc_debug, false, true]] call btc_fnc_debug_message; -}; - [false] call btc_fnc_db_delete; //Version @@ -105,6 +92,10 @@ profileNamespace setVariable [format ["btc_hm_%1_ho", _name], _array_ho]; profileNamespace setVariable [format ["btc_hm_%1_ho_sel", _name], btc_hq getVariable ["id", 0]]; +if (btc_debug) then { + ["...2", __FILE__, [btc_debug, false, true]] call btc_fnc_debug_message; +}; + //CACHE private _array_cache = []; _array_cache pushBack (getPosATL btc_cache_obj); @@ -205,5 +196,3 @@ if (btc_debug) then { ["...3", __FILE__, [btc_debug, false, true]] call btc_fnc_debug_message; }; [9] remoteExecCall ["btc_fnc_show_hint", 0]; - -btc_db_is_saving = false; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 709e2ff78..e38aa127e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -39,7 +39,11 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; if (btc_p_auto_db) then { - addMissionEventHandler ["HandleDisconnect", btc_fnc_db_autosave]; + addMissionEventHandler ["HandleDisconnect", { + if ((allPlayers - entities "HeadlessClient_F") isEqualTo []) then { + [] call btc_fnc_db_save; + }; + }]; }; if (btc_p_chem) then { ["ace_cargoLoaded", btc_fnc_chem_propagate] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 72dd33976..0dbec33e8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -24,7 +24,7 @@ Author: private _action = ["Database", localize "STR_BTC_HAM_ACTION_DATA_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\D_ca.paa", {}, {(call BIS_fnc_admin) == 2 || !isMultiplayer}] call ace_interact_menu_fnc_createAction; [player, 1, ["ACE_SelfActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["request_save", localize "str_3den_display3den_menubar_missionsave_text", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", {[] remoteExec ["btc_fnc_db_save", 2]}, {true}] call ace_interact_menu_fnc_createAction; +_action = ["request_save", localize "str_3den_display3den_menubar_missionsave_text", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", {[] remoteExecCall ["btc_fnc_db_save", 2]}, {true}] call ace_interact_menu_fnc_createAction; [player, 1, ["ACE_SelfActions", "Database"], _action] call ace_interact_menu_fnc_addActionToObject; _action = ["request_delete", localize "STR_3DEN_Delete", "\A3\ui_f\data\igui\cfg\simpleTasks\types\exit_ca.paa", {[] remoteExecCall ["btc_fnc_db_delete", 2]}, {true}] call ace_interact_menu_fnc_createAction; [player, 1, ["ACE_SelfActions", "Database"], _action] call ace_interact_menu_fnc_addActionToObject; From ab913488f2351820bb5f05ce4d0e98756f6538a2 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 28 Aug 2020 17:11:59 +0200 Subject: [PATCH 164/264] FIX: btc_fnc_mil_send must be unscheduled --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf index ddd12feac..b90e7a388 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/mines.sqf @@ -109,7 +109,7 @@ waitUntil {sleep 5; (_taskID call BIS_fnc_taskCompleted || !(playableUnits inAre private _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; for "_i" from 1 to (round random 2) do { - [_closest, _pos, 1, selectRandom btc_type_motorized] spawn btc_fnc_mil_send; + [btc_fnc_mil_send, [_closest, _pos, 1, selectRandom btc_type_motorized]] call CBA_fnc_directCall; }; waitUntil {sleep 5; (_taskID call BIS_fnc_taskCompleted || (_mines select {!isNull _x} isEqualTo []))}; From 563a8a1eab27a3fc8b5c648213d93fdab0edfb5e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 30 Aug 2020 12:10:23 +0200 Subject: [PATCH 165/264] FIX: isNull group --- .../core/fnc/city/activate.sqf | 5 ++-- .../core/fnc/data/spawn_group.sqf | 8 +++-- .../core/fnc/mil/send.sqf | 30 +++++++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 22662ad7b..4bdcc1982 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -95,9 +95,10 @@ if !(_ieds isEqualTo []) then { [[_city, _ieds], btc_fnc_ied_check] call btc_fnc_delay_exec; }; +private _delay = 0; if !(_data_units isEqualTo []) then { { - [_x, _id] call btc_fnc_data_spawn_group; + _delay = _delay + ([_x, _id] call btc_fnc_data_spawn_group); } forEach _data_units; } else { // Maximum number of enemy group @@ -237,7 +238,7 @@ if !(_city getVariable ["has_suicider", false]) then { }; _city setVariable ["activating", false]; -}, [_has_en, _city, _radius, _id], btc_delay_createUnit] call CBA_fnc_waitAndExecute; +}, [_has_en, _city, _radius, _id], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; //Patrol btc_patrol_active = btc_patrol_active - [grpNull]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 4f5486e41..38c2a0288 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -18,7 +18,7 @@ Parameters: _cityID - City ID. [Number] Returns: - leader of the group and type of group. [Array] + _delay - Delay due to vehicle spawn. [Number] Examples: (begin example) @@ -45,15 +45,17 @@ _data_unit params [ ["_array_veh", [], [[], ""]] ]; +private _delay = 0; if (_type isEqualTo 5) exitWith { [objNull, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create; + _delay }; if (_type isEqualTo 7) exitWith { [objNull, 100, _array_pos select 0] call btc_fnc_ied_drone_create; + _delay }; private _group = createGroup _side; -private _delay = 0; if (_type isEqualTo 1) then { _delay = [_group, _array_veh select 0, _array_type, _array_veh select 1, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; } else { @@ -113,3 +115,5 @@ if (_type isEqualTo 1) then { _group setCombatMode (_behaviour select 1); _group setFormation (_behaviour select 2); }, [_data_unit, _group], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; + +_delay diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index 355de252b..3644356ab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -42,30 +42,36 @@ switch (_typeOf_patrol) do { _group = ([_pos, 150, 3 + round random 6, 1] call btc_fnc_mil_create_group) select 0; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; - - [_group, _dest, -1, "MOVE", "AWARE", "RED", "FULL", _infFormation, "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; }; case 1 : { _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; + [_group] call CBA_fnc_clearWaypoints; if (_veh_type isEqualTo "") then {_veh_type = selectRandom btc_type_motorized}; - private _return_pos = [_pos, 10, 500, 13, false] call btc_fnc_findsafepos; _delay = [_group, _return_pos, _veh_type] call btc_fnc_mil_createVehicle; - - [_group] call CBA_fnc_clearWaypoints; - [_group, _dest, -1, "MOVE", "AWARE", "RED", "NORMAL", "NO CHANGE", "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; - [_group, _dest, -1, "GETOUT", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; - [_group, _dest, -1, "SENTRY", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; - }; }; [{ - _this call btc_fnc_set_groupsOwner; - (_this select 0 select 0) deleteGroupWhenEmpty true; -}, [[_group]], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; + params ["_group", "_typeOf_patrol", "_dest", "_infFormation"]; + + switch (_typeOf_patrol) do { + case 0 : { + [_group, _dest, -1, "MOVE", "AWARE", "RED", "FULL", _infFormation, "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; + }; + case 1 : { + [_group, _dest, -1, "MOVE", "AWARE", "RED", "NORMAL", "NO CHANGE", "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; + [_group, _dest, -1, "GETOUT", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; + [_group, _dest, -1, "SENTRY", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; + }; + }; + + [[_group]] call btc_fnc_set_groupsOwner; + + _group deleteGroupWhenEmpty true; +}, [_group, _typeOf_patrol, _dest, _infFormation], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; _group From afa3a3cc82c511170fb8663c5354e92e9a65e70e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 30 Aug 2020 13:24:04 +0200 Subject: [PATCH 166/264] FIX: city ca be de activate more than once --- .../core/fnc/city/activate.sqf | 7 +++---- .../core/fnc/city/de_activate.sqf | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 22662ad7b..d7ed48039 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -37,14 +37,13 @@ params [ ]; _wp_ratios params ["_wp_house", "_wp_sentry"]; +private _city = btc_city_all select _id; +if (_city getVariable "activating") exitWith {}; + if (btc_debug) then { [str _id, __FILE__, [btc_debug, btc_debug_log, true]] call btc_fnc_debug_message; }; -private _city = btc_city_all select _id; - -if (_city getVariable "activating") exitWith {}; - _city setVariable ["activating", true]; private _is_init = _city getVariable ["initialized", false]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index b89d8774d..81239395c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -35,6 +35,8 @@ if !(_city getVariable ["active", false]) exitWith {}; }, { params ["_city", "_id"]; + if !(_city getVariable ["active", false]) exitWith {}; + if (btc_debug) then { [str _id, __FILE__, [btc_debug, btc_debug_log, true]] call btc_fnc_debug_message; }; From ac5185cd54843ca6ec1895337be0a79c9c6e7f8c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 31 Aug 2020 13:40:52 +0200 Subject: [PATCH 167/264] better handle multilogistic point --- .../core/fnc/int/add_actions.sqf | 60 +++++++++++++------ 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 72dd33976..c115a87c6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -38,24 +38,48 @@ _action = ["Interrogate_intel", localize "STR_BTC_HAM_ACTION_INTEL_INTERROGATE", {[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass;} forEach (btc_type_units + btc_type_divers); //Log point -_action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Require_object", localize "STR_BTC_HAM_ACTION_LOGPOINT_REQOBJ", "\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa", {[btc_create_object_point] spawn btc_fnc_log_create}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Repair_wreck", localize "STR_BTC_HAM_ACTION_LOGPOINT_REPWRECK", "\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa", {[btc_create_object_point] call btc_fnc_log_repair_wreck}, {true}, {}, [], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Refuel", localize "STR_BTC_HAM_ACTION_LOGPOINT_REFUELSOURCE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\refuel_ca.paa", {[btc_create_object_point] call btc_fnc_log_refuelSource}, {true}, {}, [], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Require_veh", localize "STR_BTC_HAM_ACTION_LOGPOINT_REQVEH", "\A3\ui_f\data\map\vehicleicons\iconCar_ca.paa", {[btc_create_object_point] spawn btc_fnc_arsenal_garage}, {(serverCommandAvailable "#logout" || !isMultiplayer) and btc_p_garage}, {}, [], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Tool", localize "str_3den_display3den_menubar_tools_text", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\T_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Copy", localize "STR_BTC_HAM_ACTION_COPYPASTE_COPY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", {[btc_create_object_point] call btc_fnc_log_copy}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Tool"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Paste", localize "STR_BTC_HAM_ACTION_COPYPASTE_PASTE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\upload_ca.paa", {[btc_copy_container, btc_create_object_point] call btc_fnc_log_paste}, {!isNil "btc_copy_container"}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Tool"], _action] call ace_interact_menu_fnc_addActionToObject; -_action = ["Require_delete", localize "STR_3DEN_Delete", "\z\ace\addons\arsenal\data\iconClearContainer.paa", {[btc_create_object_point] call btc_fnc_log_delete}, {true}, {}, [], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; -[btc_create_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; +{ + _x params ["_object", "_helipad"]; + + _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Require_object", localize "STR_BTC_HAM_ACTION_LOGPOINT_REQOBJ", "\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa", { + params ["", "", "_params"]; + _params spawn btc_fnc_log_create + }, {true}, {}, [_helipad], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Repair_wreck", localize "STR_BTC_HAM_ACTION_LOGPOINT_REPWRECK", "\A3\ui_f\data\igui\cfg\simpleTasks\types\repair_ca.paa", { + params ["", "", "_params"]; + _params call btc_fnc_log_repair_wreck + }, {true}, {}, [_helipad], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Refuel", localize "STR_BTC_HAM_ACTION_LOGPOINT_REFUELSOURCE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\refuel_ca.paa", { + params ["", "", "_params"]; + _params call btc_fnc_log_refuelSource + }, {true}, {}, [_helipad], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Require_veh", localize "STR_BTC_HAM_ACTION_LOGPOINT_REQVEH", "\A3\ui_f\data\map\vehicleicons\iconCar_ca.paa", { + params ["", "", "_params"]; + _params spawn btc_fnc_arsenal_garage}, {(serverCommandAvailable "#logout" || !isMultiplayer) and btc_p_garage}, {}, [_helipad], [0, 0, 0], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Tool", localize "str_3den_display3den_menubar_tools_text", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\T_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Copy", localize "STR_BTC_HAM_ACTION_COPYPASTE_COPY", "\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa", { + params ["", "", "_params"]; + _params call btc_fnc_log_copy + }, {true}, {}, [_helipad], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Tool"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Paste", localize "STR_BTC_HAM_ACTION_COPYPASTE_PASTE", "\A3\ui_f\data\igui\cfg\simpleTasks\types\upload_ca.paa", { + params ["", "", "_params"]; + [btc_copy_container, _params] call btc_fnc_log_paste + }, {!isNil "btc_copy_container"}, {}, _helipad, [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Tool"], _action] call ace_interact_menu_fnc_addActionToObject; + _action = ["Require_delete", localize "STR_3DEN_Delete", "\z\ace\addons\arsenal\data\iconClearContainer.paa", { + params ["", "", "_params"]; + _params call btc_fnc_log_delete + }, {true}, {}, [_helipad], [0, 0, 0.4], 5] call ace_interact_menu_fnc_createAction; + [_object, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToObject; +} forEach [[btc_create_object, btc_create_object_point]]; //Logistic _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; From 5f1f10f3be88176832cf81ce68b5b372efd0700f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 1 Sep 2020 15:01:19 +0200 Subject: [PATCH 168/264] Set vector to vehicle --- .../core/fnc/db/load.sqf | 63 ++++++++++--------- .../core/fnc/db/save.sqf | 1 + 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index fc136464f..9c84e8af7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -120,39 +120,42 @@ btc_global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _ btc_vehicles = []; private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]; -{ - _x params [ - "_veh_type", - "_veh_pos", - "_veh_dir", - "_veh_fuel", - "_veh_AllHitPointsDamage", - "_veh_cargo", - "_veh_cont", - "_customization", - ["_isMedicalVehicle", false, [false]], - ["_isRepairVehicle", false, [false]], - ["_fuelSource", [], [[]]], - ["_pylons", [], [[]]], - ["_isContaminated", false, [false]], - ["_supplyVehicle", [], [[]]], - ["_EDENinventory", [], [[]]] - ]; - - if (btc_debug_log) then { - [format ["_veh = %1", _x], __FILE__, [false]] call btc_fnc_debug_message; - }; +[{ // Can't be executed just after because we can't delete and spawn vehicle during the same frame. + { + _x params [ + "_veh_type", + "_veh_pos", + "_veh_dir", + "_veh_fuel", + "_veh_AllHitPointsDamage", + "_veh_cargo", + "_veh_cont", + "_customization", + ["_isMedicalVehicle", false, [false]], + ["_isRepairVehicle", false, [false]], + ["_fuelSource", [], [[]]], + ["_pylons", [], [[]]], + ["_isContaminated", false, [false]], + ["_supplyVehicle", [], [[]]], + ["_EDENinventory", [], [[]]], + ["_vectorPos", [], [[]]] + ]; + + if (btc_debug_log) then { + [format ["_veh = %1", _x], __FILE__, [false]] call btc_fnc_debug_message; + }; - private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle, _EDENinventory, _veh_AllHitPointsDamage] call btc_fnc_log_createVehicle; - if ((getPos _veh) select 2 < 0) then {_veh setVectorUp surfaceNormal position _veh;}; - _veh setFuel _veh_fuel; + private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle, _EDENinventory, _veh_AllHitPointsDamage] call btc_fnc_log_createVehicle; + _veh setVectorDirAndUp _vectorPos; + _veh setFuel _veh_fuel; - [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; + [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; - if !(alive _veh) then { - [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; - }; -} forEach _vehs; + if !(alive _veh) then { + [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; + }; + } forEach _this; +}, _vehs] call CBA_fnc_execNextFrame; //Objects private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index cb091adc9..84c0954c9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -157,6 +157,7 @@ private _array_veh = []; _data pushBack _cont; _data append ([_x] call btc_fnc_getVehProperties); _data pushBack (_x getVariable ["btc_EDENinventory", []]); + _data pushBack ([vectorDir _x, vectorUp _x]); _array_veh pushBack _data; if (btc_debug_log) then { [format ["VEH %1 DATA %2", _x, _data], __FILE__, [false]] call btc_fnc_debug_message; From c709e9f0a0a7a82ed75e39dbc0795381889a27d5 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 2 Sep 2020 11:33:37 +0200 Subject: [PATCH 169/264] Add database compatibility --- .../core/def/mission.sqf | 2 +- .../core/fnc/db/load_old.sqf | 121 ++++++++++-------- .../core/init_server.sqf | 2 +- 3 files changed, 67 insertions(+), 58 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 7d9c4d437..c1b8a5bf3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -1,5 +1,5 @@ -btc_version = [1, 20, 6]; +btc_version = [1, 20.1, 6]; diag_log format (["=BTC= HEARTS AND MINDS VERSION %1.%2.%3"] + btc_version); //Param diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf index 994309aee..dee1e53c5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf @@ -29,29 +29,13 @@ setDate (profileNamespace getVariable [format ["btc_hm_%1_date", _name], date]); //CITIES private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities", _name], []]; -private _cities = ["NameVillage", "NameCity", "NameCityCapital", "NameLocal", "Hill", "Airport"]; -if (btc_p_sea) then {_cities pushBack "NameMarine";}; -private _locations = configfile >> "cfgworlds" >> worldname >> "names"; -private _oldID_to_newID = []; -// Get ID from the old system -for "_id" from 0 to (count _locations - 1) do { - private _current = _locations select _id; - private _type = getText (_current >> "type"); - - if (_type in _cities) then { - _oldID_to_newID pushBack _id; - }; -}; -private _size = count _locations; -{ - _oldID_to_newID pushBack (_forEachindex + _size); -} forEach btc_custom_loc; - { - _x params ["_id", "_initialized", "_spawn_more", "_occupied", "_data_units", "_has_ho", "_ho_units_spawned", "_ieds", "_has_suicider"]; + _x params ["_id", "_initialized", "_spawn_more", "_occupied", "_data_units", "_has_ho", "_ho_units_spawned", "_ieds", "_has_suicider", + ["_data_animals", [], [[]]], + ["_data_tags", [], [[]]] + ]; - - private _city = btc_city_all select (_oldID_to_newID select _id); + private _city = btc_city_all select _id; _city setVariable ["initialized", _initialized]; _city setVariable ["spawn_more", _spawn_more]; @@ -61,14 +45,17 @@ private _size = count _locations; _city setVariable ["ho_units_spawned", _ho_units_spawned]; _city setVariable ["ieds", _ieds]; _city setVariable ["has_suicider", _has_suicider]; + _city setVariable ["data_animals", _data_animals]; + _city setVariable ["data_tags", _data_tags]; if (btc_debug) then { + private _marker = _city getVariable ["marker", ""]; if (_city getVariable ["occupied", false]) then { - (_city getVariable ["marker", ""]) setMarkerColor "colorRed"; + _marker setMarkerColor "colorRed"; } else { - (_city getVariable ["marker", ""]) setMarkerColor "colorGreen"; + _marker setMarkerColor "colorGreen"; }; - (_city getVariable ["marker", ""]) setMarkerText format ["loc_%3 %1 %2 - [%4]", _city getVariable "name", _city getVariable "type", _id, _occupied]; + _marker setMarkerText format ["loc_%3 %1 %2 - [%4]", _city getVariable "name", _city getVariable "type", _id, _occupied]; }; if (btc_debug_log) then { [format ["ID: %1 - IsOccupied %2", _id, _occupied], __FILE__, [false]] call btc_fnc_debug_message; @@ -80,8 +67,6 @@ private _size = count _locations; private _array_ho = profileNamespace getVariable [format ["btc_hm_%1_ho", _name], []]; { - private _id = _x select 4; - _x set [4, _oldID_to_newID select _id]; _x call btc_fnc_mil_create_hideout; } forEach _array_ho; @@ -96,28 +81,30 @@ if (_select_ho isEqualTo - 1) then { if (btc_hideouts isEqualTo []) then {[] spawn btc_fnc_final_phase;}; //CACHE -btc_cache_markers = []; -btc_cache_pictures = [[], [], []]; - private _array_cache = profileNamespace getVariable [format ["btc_hm_%1_cache", _name], []]; btc_cache_pos = _array_cache select 0; btc_cache_n = _array_cache select 1; btc_cache_info = _array_cache select 2; -call btc_fnc_cache_create; +[] call btc_fnc_cache_create; +btc_cache_markers = []; { _x params ["_pos", "_marker_name"]; - private _marker = createMarker [format ["%1", _pos], _pos]; - _marker setMarkerType "hd_unknown"; - _marker setMarkerText _marker_name; - _marker setMarkerSize [0.5, 0.5]; - _marker setMarkerColor "ColorRed"; - btc_cache_markers pushBack _marker; + [_pos, 0, _marker_name] call btc_fnc_info_cacheMarker; } forEach (_array_cache select 3); +btc_cache_pictures = +(_array_cache select 4); +{ + (btc_cache_pictures select 2) pushBack ([ + _x, + btc_cache_n, + btc_cache_pictures select 1 select _forEachindex + ] remoteExecCall ["btc_fnc_info_cachePicture", [0, -2] select isDedicated, true]); +} forEach (btc_cache_pictures select 0); + //FOB private _fobs = profileNamespace getVariable [format ["btc_hm_%1_fobs", _name], []]; @@ -125,46 +112,52 @@ private _fobs = profileNamespace getVariable [format ["btc_hm_%1_fobs", _name], _x params ["_fob_name", "_pos", ["_direction", 0, [0]]]; [_pos, _direction, _fob_name] call btc_fnc_fob_create_s; -} forEach (_fobs select 0); +} forEach _fobs; //REP -private _global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _name], 0]; +btc_global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _name], 0]; //VEHICLES {deleteVehicle _x} forEach btc_vehicles; btc_vehicles = []; private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]; -[{ - params ["_vehs", "_global_reputation"]; - +[{ // Can't be executed just after because we can't delete and spawn vehicle during the same frame. { - _x params ["_veh_type", "_veh_pos", "_veh_dir", "_veh_fuel", "_veh_AllHitPointsDamage", "_veh_cargo", "_veh_cont", "_customization"]; + _x params [ + "_veh_type", + "_veh_pos", + "_veh_dir", + "_veh_fuel", + "_veh_AllHitPointsDamage", + "_veh_cargo", + "_veh_cont", + "_customization", + ["_isMedicalVehicle", false, [false]], + ["_isRepairVehicle", false, [false]], + ["_fuelSource", [], [[]]], + ["_pylons", [], [[]]], + ["_isContaminated", false, [false]], + ["_supplyVehicle", [], [[]]], + ["_EDENinventory", [], [[]]], + ["_vectorPos", [], [[]]] + ]; if (btc_debug_log) then { [format ["_veh = %1", _x], __FILE__, [false]] call btc_fnc_debug_message; }; - private _veh = [_veh_type, _veh_pos, _veh_dir, _customization] call btc_fnc_log_createVehicle; + private _veh = [_veh_type, _veh_pos, _veh_dir, _customization, _isMedicalVehicle, _isRepairVehicle, _fuelSource, _pylons, _isContaminated, _supplyVehicle, _EDENinventory, _veh_AllHitPointsDamage] call btc_fnc_log_createVehicle; if ((getPos _veh) select 2 < 0) then {_veh setVectorUp surfaceNormal position _veh;}; _veh setFuel _veh_fuel; [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; - //Disable explosion effect during database loading - { - [_veh, _forEachindex, _x, false] call ace_repair_fnc_setHitPointDamage; - } forEach (_veh_AllHitPointsDamage select 2); - if ((_veh_AllHitPointsDamage select 2) select {_x < 1} isEqualTo []) then { - _veh setVariable ["ace_cookoff_enable", false, true]; - _veh setVariable ["ace_cookoff_enableAmmoCookoff", false, true]; - _veh setDamage [1, false]; + if !(alive _veh) then { + [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; }; - } forEach _vehs; - [{ - btc_global_reputation = _this; - }, _global_reputation, 0.5] call CBA_fnc_waitAndExecute; -}, [_vehs, _global_reputation], 0.5] call CBA_fnc_waitAndExecute; + } forEach _this; +}, _vehs] call CBA_fnc_execNextFrame; //Objects private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; @@ -172,6 +165,22 @@ private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], [_x] call btc_fnc_db_loadObjectStatus; } forEach _objs; +//Player Tags +private _tags_properties = profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]; +private _id = ["ace_tagCreated", { + params ["_tag", "_texture", "_object"]; + btc_tags pushBack [_tag, _texture, _object]; +}] call CBA_fnc_addEventHandler; +{ + _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_typeObject", "_tagModel"]; + private _object = objNull; + if !(_typeObject isEqualTo "") then { + _object = nearestObject [ASLToATL _tagPosASL, _typeObject]; + }; + [_tagPosASL, _vectorDirAndUp, _texture, _object, objNull, "",_tagModel] call ace_tagging_fnc_createTag; +} forEach _tags_properties; +["ace_tagCreated", _id] call CBA_fnc_removeEventHandler; + //Player Markers private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_markers", _name], []]; { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index 0917febed..2b11e95c2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -8,7 +8,7 @@ setTimeMultiplier btc_p_acctime; [["btc_dty", "btc_m"], 1] call btc_fnc_task_create; if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldName], false]}) then { - if ((profileNamespace getVariable [format ["btc_hm_%1_version", worldName], 1.13]) in [1.193, 1.2, btc_version select 1]) then { + if ((profileNamespace getVariable [format ["btc_hm_%1_version", worldName], 1.13]) in [btc_version select 1]) then { [] call compile preprocessFileLineNumbers "core\fnc\db\load.sqf"; } else { [] call compile preprocessFileLineNumbers "core\fnc\db\load_old.sqf"; From 788e70c86787311281426e12bd1f2b8465955b29 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 2 Sep 2020 20:49:16 +0200 Subject: [PATCH 170/264] FIX: towing on boat --- .../core/fnc/tow/ropeCreate.sqf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index bfe2b3aab..ba02b33a4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -41,7 +41,8 @@ private _offset = if (_model_selected select 1 > 3.06) then { (_model_front_selected select 1) - (_model_selected select 1) }; private _posFlat = _vehicleSelected getPos [_offset, _dirSelected]; -_posFlat set [2, 0.2 + ((getPosATL _vehicleSelected) select 2)]; +private _altitude = (getPosATL _vehicleSelected) select 2; +_posFlat set [2, 0.2 + _altitude]; private _flatType = ["Truck_01_Rack_F", "Truck_01_Rack_tropic_F"] select (worldName in ["Tanoa", "lingor3", "chernarus", "Enoch", "sara"]); private _isShipOrAir = _tower isKindOf "Ship" || _tower isKindOf "Air"; @@ -51,7 +52,9 @@ private _flat = if (_isShipOrAir) then { createVehicle [_flatType, _posFlat, [], 0, "CAN_COLLIDE"] }; _flat setDir _dirSelected; -_flat setVectorUp surfaceNormal _posFlat; +if (_altitude < 0.1) then { + _flat setVectorUp surfaceNormal _posFlat; +}; private _model_corners_tower = [_tower] call btc_fnc_log_get_corner_points; private _model_corners_flat = [_flat] call btc_fnc_log_get_corner_points; From 1cef49c0092b7e5cf7fbaeee43fd2e28bcc48256 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 3 Sep 2020 14:06:02 +0200 Subject: [PATCH 171/264] FIX: Tank collide --- .../core/fnc/tow/check.sqf | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index 4307eb703..a5188d60e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -40,15 +40,24 @@ if ((_array findIf {_towed isKindOf _x}) != -1) exitWith { }; private _model_rear = ([_tower] call btc_fnc_tow_hitch_points) select 1; -private _model_front = ([_towed] call btc_fnc_tow_hitch_points) select 0; -private _distance = (_towed modelToWorld _model_front) distance (_tower modelToWorld _model_rear); +private _dirSelected = getDir _towed; +private _model_selected = (0 boundingBoxReal _towed) select 1; +private _model_front_selected = ([_towed] call btc_fnc_log_get_corner_points) select 2; +private _offset = if (_model_selected select 1 > 3.06) then { + (_model_selected select 1) - 3.06 +} else { + (_model_front_selected select 1) - (_model_selected select 1) +}; +private _posFlat = _towed getPos [_offset + 3 /*size of Truck_01_Rack_F*/, _dirSelected]; +private _distance = _posFlat distance (_tower modelToWorld _model_rear); +private _distanceTowed = _towed distance (_tower modelToWorld _model_rear); private _safeDistance = [_distance > 1.3, _distance < [5, 24] select (_tower isKindOf "Ship")]; if (_safeDistance isEqualTo [true, false]) exitWith { (localize "STR_BTC_HAM_TOW_TFAR") call CBA_fnc_notify; false }; -if (_safeDistance isEqualTo [false, true]) exitWith { +if (_distanceTowed < _offset + 3 || _safeDistance isEqualTo [false, true]) exitWith { (localize "str_a3_showcase_vtol_x11_taruclose_xia_0") call CBA_fnc_notify; false }; From b351dfb02b7189c547f02271804afddae9ab5028 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 3 Sep 2020 16:47:22 +0200 Subject: [PATCH 172/264] Fix collide on unhook --- .../core/fnc/tow/ropeBreak.sqf | 9 ++++++--- .../core/fnc/tow/ropeCreate.sqf | 7 ++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf index 347d59f79..f8ef6eaaf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf @@ -24,18 +24,22 @@ _thisArgsCBA params ["_vehicleSelected", "_safeDistance", "_ropes"]; _tower removeEventHandler ["RopeBreak", _thisId]; +private _vectorUp = vectorUp _flat; +private _vectorDir = vectorDir _flat; +_ropes apply {deleteVehicle _x}; deTach _vehicleSelected; +_flat setPos [0, 0, 0]; // Avoid collision with _vehicleSelected // Handle flipped vehicle if ((vectorUp _vehicleSelected) select 2 < 0) then { - _flat setPos [0, 0, 0]; // Avoid collision with _vehicleSelected private _towerDir = getDir _tower; private _selectedSafePos = _tower getPos [- _safeDistance, _towerDir]; _selectedSafePos set [2, 0.5 + (_selectedSafePos select 2)]; _vehicleSelected setPos _selectedSafePos; _vehicleSelected setDir _towerDir; +} else { + [_vehicleSelected, [_vectorDir, _vectorUp]] remoteExecCall ["setVectorDirAndUp", _vehicleSelected]; }; -_vehicleSelected setVectorUp surfaceNormal position _vehicleSelected; if !( _tower isKindOf "Ship" || @@ -43,7 +47,6 @@ if !( ) then { deleteVehicle _flat; }; -_ropes apply {deleteVehicle _x}; _vehicleSelected setVariable ["btc_towing", objNull, true]; _tower setVariable ["btc_towing", objNull, true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index ba02b33a4..47083e356 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -44,6 +44,9 @@ private _posFlat = _vehicleSelected getPos [_offset, _dirSelected]; private _altitude = (getPosATL _vehicleSelected) select 2; _posFlat set [2, 0.2 + _altitude]; +private _vectorUp = vectorUp _vehicleSelected; +private _vectorDir = vectorDir _vehicleSelected; + private _flatType = ["Truck_01_Rack_F", "Truck_01_Rack_tropic_F"] select (worldName in ["Tanoa", "lingor3", "chernarus", "Enoch", "sara"]); private _isShipOrAir = _tower isKindOf "Ship" || _tower isKindOf "Air"; private _flat = if (_isShipOrAir) then { @@ -52,9 +55,7 @@ private _flat = if (_isShipOrAir) then { createVehicle [_flatType, _posFlat, [], 0, "CAN_COLLIDE"] }; _flat setDir _dirSelected; -if (_altitude < 0.1) then { - _flat setVectorUp surfaceNormal _posFlat; -}; +[_flat, [_vectorDir, _vectorUp]] remoteExecCall ["setVectorDirAndUp", _flat]; private _model_corners_tower = [_tower] call btc_fnc_log_get_corner_points; private _model_corners_flat = [_flat] call btc_fnc_log_get_corner_points; From 9005694af36075bf4b23de3e477a0a00a4af1550 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 6 Sep 2020 12:51:30 +0200 Subject: [PATCH 173/264] FIX: Vehicles don't spawn on objects in btc_log_obj_created Need to wait more than a frame for vehicle spawning on objects created by btc_fnc_db_loadObjectStatus. --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 083e43b80..342ad77e3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -157,7 +157,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; }; } forEach _this; -}, _vehs] call CBA_fnc_execNextFrame; +}, _vehs, 0.5] call CBA_fnc_waitAndExecute; // Need to wait more than a frame for vehicle spawning on objects created by btc_fnc_db_loadObjectStatus. //Objects private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf index dee1e53c5..94fd21d78 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf @@ -157,7 +157,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; }; } forEach _this; -}, _vehs] call CBA_fnc_execNextFrame; +}, _vehs, 0.5] call CBA_fnc_waitAndExecute; //Objects private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; From 2303ec9ca198d0a5c12bd02af217c43b30f671f4 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 6 Sep 2020 14:16:31 +0200 Subject: [PATCH 174/264] FIX: Vehicles don't spawn on objects in btc_log_obj_created --- .../core/fnc/db/load.sqf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 342ad77e3..470e352ef 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -117,10 +117,16 @@ private _fobs = profileNamespace getVariable [format ["btc_hm_%1_fobs", _name], //REP btc_global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _name], 0]; -//VEHICLES +//Objects {deleteVehicle _x} forEach btc_vehicles; btc_vehicles = []; +private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; +{ + [_x] call btc_fnc_db_loadObjectStatus; +} forEach _objs; + +//VEHICLES private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]; [{ // Can't be executed just after because we can't delete and spawn vehicle during the same frame. { @@ -157,13 +163,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; }; } forEach _this; -}, _vehs, 0.5] call CBA_fnc_waitAndExecute; // Need to wait more than a frame for vehicle spawning on objects created by btc_fnc_db_loadObjectStatus. - -//Objects -private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; -{ - [_x] call btc_fnc_db_loadObjectStatus; -} forEach _objs; +}, _vehs] call CBA_fnc_execNextFrame; //Player Tags private _tags_properties = profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]; From 3a489a4160b1564e483b6005996809ae00e6fcae Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 7 Sep 2020 15:07:01 +0200 Subject: [PATCH 175/264] try to fix lost vehicle behind --- .../core/fnc/info/path.sqf | 2 +- .../core/fnc/side/convoy.sqf | 48 ++++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf index 2fff8ba42..100882049 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/path.sqf @@ -42,7 +42,7 @@ private _agent = calculatePath [_type, _behaviour, _startPos, _endPos]; ]; _agent removeEventHandler ["PathCalculated", _thisId]; - _agent setVariable "btc_path"; + _agent setVariable ["btc_path", _path]; private _color = configName selectRandom (configProperties [configFile >> "CfgMarkerColors"]); private _delta = 10; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 4f0a5c240..b98a51711 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -68,36 +68,40 @@ private _markers = [_marker1, _marker2, _area]; /// Show info path\\\ private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; -private _agent = [{ - params ["_pos1", "_pos2", "_taskID", "_typeVehicle"]; - private _agent = [_pos1, _pos2, _taskID, _typeVehicle, "SAFE"] call btc_fnc_info_path; - _agent addEventHandler ["PathCalculated", { - params ["_agent", "_path"]; - - [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; - _agent removeEventHandler ["PathCalculated", _thisEventHandler]; - }]; - _agent -}, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; +private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; + +waitUntil {!((_agent getVariable ["btc_path", []]) isEqualTo [])}; +private _path = _agent getVariable ["btc_path", []]; +if (count _path <= 35) exitWith { + _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); + [_taskID, "CANCELED"] call BIS_fnc_taskSetState; +}; //// Create convoy \\\\ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; -[ - _group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", - format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 -] call CBA_fnc_addWaypoint; - -waitUntil {sleep 0.5; (_agent getVariable ["btc_path", []]) isEqualTo []}; - -private _length = count (_agent getVariable ["btc_path", []]); -private _listPositions = (_agent getVariable ["btc_path", []]) select [10 min _length, _length - 1]; +private _convoyLength = 3 + round random 2; +private _listPositions = _path select [30, _convoyLength]; +reverse _listPositions; private _delay = 0; -for "_i" from 0 to (2 + round random 2) do { +for "_i" from 1 to _convoyLength do { private _pos = _listPositions deleteAt 0; - _delay = _delay + ([_group, _pos, selectRandom _veh_types, _pos getDir (_listPositions select 0)] call btc_fnc_mil_createVehicle); + _delay = _delay + ([_group, _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); }; +[{ + params ["_group", "_pos2", "_taskID", "_radius", "_path"]; + + for "_i" from 35 to (count _path) - 34 step 100 do { + [_group, _path select _i, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN"] call CBA_fnc_addWaypoint; + }; + [ + _group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", + format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 + ] call CBA_fnc_addWaypoint; + + [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; +}, [_group, _pos2, _taskID, _radius, _path], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; waitUntil {sleep 5; ( _taskID call BIS_fnc_taskCompleted || From 17a8001d4b9dc4d687a207fbdca487fb46bda421 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 7 Sep 2020 16:43:05 +0200 Subject: [PATCH 176/264] Remove useless waypoint --- .../core/fnc/side/convoy.sqf | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index b98a51711..6ece405b2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -82,7 +82,7 @@ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; private _convoyLength = 3 + round random 2; -private _listPositions = _path select [30, _convoyLength]; +private _listPositions = _path select [40, _convoyLength + 1]; reverse _listPositions; private _delay = 0; for "_i" from 1 to _convoyLength do { @@ -90,18 +90,12 @@ for "_i" from 1 to _convoyLength do { _delay = _delay + ([_group, _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); }; [{ - params ["_group", "_pos2", "_taskID", "_radius", "_path"]; - - for "_i" from 35 to (count _path) - 34 step 100 do { - [_group, _path select _i, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN"] call CBA_fnc_addWaypoint; - }; - [ - _group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", - format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 - ] call CBA_fnc_addWaypoint; - + _this call CBA_fnc_addWaypoint; [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; -}, [_group, _pos2, _taskID, _radius, _path], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; +}, [ + _group, _pos2, -1, "MOVE", "CARELESS", "RED", "LIMITED", "COLUMN", + format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 +], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; waitUntil {sleep 5; ( _taskID call BIS_fnc_taskCompleted || From eb5960a80d24179e4fba6191113efa2927f5896a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 16 Sep 2020 17:43:38 +0200 Subject: [PATCH 177/264] Add respawn to leader of the group --- .../core/def/param.hpp | 4 ++-- .../core/fnc/eh/player.sqf | 15 +++++++++++++++ =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index 561d4436f..bb970557a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -49,8 +49,8 @@ class Params { }; class btc_p_respawn_location { // Respawn locations available: title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_LOCATION"]); - values[]={0,1,2,3}; - texts[]={$STR_BTC_HAM_RESP_FOBRALLY, $STR_BTC_HAM_RESP_FOBRALLYHELO, $STR_BTC_HAM_RESP_FOBRALLYHELI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHI}; + values[]={0,1,2,3,4}; + texts[]={$STR_BTC_HAM_RESP_FOBRALLY, $STR_BTC_HAM_RESP_FOBRALLYHELO, $STR_BTC_HAM_RESP_FOBRALLYHELI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHILEADER}; default = 0; }; class btc_p_respawn_fromFOBToBase { // Allow respawn from FOB to base: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 45e58c12d..79ddf68dd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -82,3 +82,18 @@ if (btc_p_respawn_arsenal) then { [btc_gear_object, _unit] call ace_arsenal_fnc_openBox; }] call CBA_fnc_addBISEventHandler; }; + +if (btc_p_respawn_arsenal) then { + [_player, "Respawn", { + params ["_unit", "_corpse"]; + if (isObjectHidden _corpse) exitWith {}; + [btc_gear_object, _unit] call ace_arsenal_fnc_openBox; + }] call CBA_fnc_addBISEventHandler; +}; + +if (btc_p_respawn_location >= 4) then { + [_player, "Killed", { + private _group = group player; + [_group, leader _group] call BIS_fnc_addRespawnPosition; + }] call CBA_fnc_addBISEventHandler; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 0909ace91..594d13c26 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -489,6 +489,9 @@ FOB, Rallypoint, Transport helicopter and Transport vehicle FOB、集合点、运输直升机和运输车辆 + + FOB, Rallypoint, Transport helicopter, Transport vehicle and Leader + Time before rallypoint self-destruction: 集合点自毁时间: From 29d4123b67217b8ba5a3f82ca970a028fffe5513 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 16 Sep 2020 18:47:34 +0200 Subject: [PATCH 178/264] Extend ViV to more vehicle --- .../core/fnc/compile.sqf | 1 + .../core/fnc/tow/ViV.sqf | 47 +++++++++++++++++++ .../core/fnc/tow/ropeCreate.sqf | 7 +++ 3 files changed, 55 insertions(+) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 486684e6e..4102932ea 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -187,6 +187,7 @@ if (isServer) then { //TOW btc_fnc_tow_ropeBreak = compile preprocessFileLineNumbers "core\fnc\tow\ropeBreak.sqf"; + btc_fnc_tow_ViV = compile preprocessFileLineNumbers "core\fnc\tow\ViV.sqf"; }; /////////////////////CLIENT AND SERVER\\\\\\\\\\\\\\\\\\\\\ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf new file mode 100644 index 000000000..d61eb2cab --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -0,0 +1,47 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_tow_ViV + +Description: + Move selected vehicle in the tower cargo with an hiden vehicle. + +Parameters: + _vehicle_selected - Vehicle to store in the tower cargo. [Object] + _tower - Tower vehicle with cargo space to handle the hiden vehicle. [Object] + +Returns: + +Examples: + (begin example) + [btc_tow_vehicleSelected, cursorObject] call btc_fnc_tow_ViV; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_vehicle_selected", objNull, [objNull]], + ["_tower", objNull, [objNull]] +]; + +private _hideVehicle = createVehicle ["B_T_LSV_01_unarmed_F", _vehicle_selected, [], 0, "CAN_COLLIDE"]; +_hideVehicle hideObjectGlobal true; + +private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; +private _model_flat = (0 boundingBoxReal _hideVehicle) select 1; +private _attachTo = [ + 0, + (_model_flat select 1) - (_model_selected select 1), + (_model_selected select 2) - (_model_flat select 2) +]; +_vehicle_selected attachTo [_hideVehicle, _attachTo]; + +if (_tower setVehicleCargo _hideVehicle) then { + [{isNull isVehicleCargo _this}, { + deleteVehicle _this; + }, _hideVehicle] call CBA_fnc_waitUntilAndExecute; +} else { + deleteVehicle _hideVehicle; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 47083e356..8c63e8ac9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -29,6 +29,13 @@ params [ if !([_tower, _vehicleSelected] call btc_fnc_tow_check) exitWith {}; if (_tower setVehicleCargo _vehicleSelected) exitWith {}; +private _fakeVehicle = "B_T_LSV_01_unarmed_F" createVehicleLocal [0, 0, 0]; +private _canViV_wreck = _tower canVehicleCargo _fakeVehicle isEqualTo [true, true]; +deleteVehicle _fakeVehicle; +if (_canViV_wreck) exitWith { + [_vehicleSelected, _tower] remoteExecCall ["btc_fnc_tow_ViV", 2]; +}; + (localize "STR_BTC_HAM_TOW_WAIT") call CBA_fnc_notify; // Find the position of the Flat object From f2bf5001417dabaa4c0d5d8202b2d09bf8e268da Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 17 Sep 2020 12:53:46 +0200 Subject: [PATCH 179/264] Tweak visual --- .../core/fnc/tow/ViV.sqf | 22 ++++++++++--------- .../core/fnc/tow/ropeCreate.sqf | 3 ++- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index d61eb2cab..59059ea99 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -6,7 +6,7 @@ Description: Move selected vehicle in the tower cargo with an hiden vehicle. Parameters: - _vehicle_selected - Vehicle to store in the tower cargo. [Object] + _vehicleSelected - Vehicle to store in the tower cargo. [Object] _tower - Tower vehicle with cargo space to handle the hiden vehicle. [Object] Returns: @@ -22,26 +22,28 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_vehicle_selected", objNull, [objNull]], + ["_vehicleSelected", objNull, [objNull]], ["_tower", objNull, [objNull]] ]; -private _hideVehicle = createVehicle ["B_T_LSV_01_unarmed_F", _vehicle_selected, [], 0, "CAN_COLLIDE"]; +private _hideVehicle = createVehicle ["Land_Cargo10_red_F", [0, 0, 0], [], 0, "CAN_COLLIDE"]; _hideVehicle hideObjectGlobal true; private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; -private _model_flat = (0 boundingBoxReal _hideVehicle) select 1; +private _model_hide = (0 boundingBoxReal _hideVehicle) select 1; private _attachTo = [ 0, - (_model_flat select 1) - (_model_selected select 1), - (_model_selected select 2) - (_model_flat select 2) + ((_model_hide select 1) - (_model_selected select 1)) + 1, + (_model_selected select 2) - (_model_hide select 2) - 0.2 ]; -_vehicle_selected attachTo [_hideVehicle, _attachTo]; +_vehicleSelected attachTo [_hideVehicle, _attachTo]; if (_tower setVehicleCargo _hideVehicle) then { - [{isNull isVehicleCargo _this}, { - deleteVehicle _this; - }, _hideVehicle] call CBA_fnc_waitUntilAndExecute; + [{isNull isVehicleCargo (_this select 0)}, { + params ["_hideVehicle", "_vehicleSelected"]; + detach _vehicleSelected; + deleteVehicle _hideVehicle; + }, [_hideVehicle, _vehicleSelected]] call CBA_fnc_waitUntilAndExecute; } else { deleteVehicle _hideVehicle; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 8c63e8ac9..c8cc779c4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -29,11 +29,12 @@ params [ if !([_tower, _vehicleSelected] call btc_fnc_tow_check) exitWith {}; if (_tower setVehicleCargo _vehicleSelected) exitWith {}; -private _fakeVehicle = "B_T_LSV_01_unarmed_F" createVehicleLocal [0, 0, 0]; +private _fakeVehicle = "Land_Cargo10_red_F" createVehicleLocal [0, 0, 0]; private _canViV_wreck = _tower canVehicleCargo _fakeVehicle isEqualTo [true, true]; deleteVehicle _fakeVehicle; if (_canViV_wreck) exitWith { [_vehicleSelected, _tower] remoteExecCall ["btc_fnc_tow_ViV", 2]; + btc_tow_vehicleSelected = objNull; }; (localize "STR_BTC_HAM_TOW_WAIT") call CBA_fnc_notify; From 8cd3e5d5389bf85a7e5c26bfbb969b034a7282f8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 21 Sep 2020 15:16:12 +0200 Subject: [PATCH 180/264] bad copy and paste and make default show reputation and respawn in vehicle --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp | 4 ++-- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf | 8 -------- .../core/fnc/fob/redeploy.sqf | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index bb970557a..2dd54b0bf 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -51,7 +51,7 @@ class Params { title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_LOCATION"]); values[]={0,1,2,3,4}; texts[]={$STR_BTC_HAM_RESP_FOBRALLY, $STR_BTC_HAM_RESP_FOBRALLYHELO, $STR_BTC_HAM_RESP_FOBRALLYHELI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHI, $STR_BTC_HAM_RESP_FOBRALLYHELIVEHILEADER}; - default = 0; + default = 4; }; class btc_p_respawn_fromFOBToBase { // Allow respawn from FOB to base: title = __EVAL(format [" %1", localize "STR_BTC_HAM_RESP_FOBTOBASE"]); @@ -375,7 +375,7 @@ class Params { title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_OTHER_SHOWREP"]); values[]={0, 1}; texts[]={$STR_DISABLED,$STR_ENABLED}; - default = 0; + default = 1; }; class btc_p_city_radius { // Spawn city radius offset: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_OTHER_SPAWNRAD"]); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index 79ddf68dd..b64cab2d2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -83,14 +83,6 @@ if (btc_p_respawn_arsenal) then { }] call CBA_fnc_addBISEventHandler; }; -if (btc_p_respawn_arsenal) then { - [_player, "Respawn", { - params ["_unit", "_corpse"]; - if (isObjectHidden _corpse) exitWith {}; - [btc_gear_object, _unit] call ace_arsenal_fnc_openBox; - }] call CBA_fnc_addBISEventHandler; -}; - if (btc_p_respawn_location >= 4) then { [_player, "Killed", { private _group = group player; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf index 308ce6de5..304077450 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/redeploy.sqf @@ -42,7 +42,7 @@ if (_params isEqualTo "") then { // Redeploy on marker like rallypoints _actions pushBack [_action, [], _target]; } forEach (([btc_player_side, false] call BIS_fnc_getRespawnMarkers) - [btc_respawn_marker]); } else { // Redeploy on object like FOB/Vehicles - private _getRespawnPositions = btc_player_side call BIS_fnc_getRespawnPositions; + private _getRespawnPositions = _player call BIS_fnc_getRespawnPositions; private _positions = if (_params isEqualTo "Base") then { _getRespawnPositions inAreaArray [getMarkerPos "btc_base", btc_fob_minDistance, btc_fob_minDistance] } else { From 3992242183cb078284a843f7a1f5c60545b6276e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 22 Sep 2020 12:01:42 +0200 Subject: [PATCH 181/264] FIX: Spawn in the sky --- .../core/fnc/side/capture_officer.sqf | 188 ++++++++++-------- .../core/fnc/side/convoy.sqf | 16 +- 2 files changed, 112 insertions(+), 92 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 081ef8d64..93dded8a8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -16,7 +16,7 @@ Examples: (end) Author: - Giallustio + Vdauphin ---------------------------------------------------------------------------- */ @@ -30,13 +30,13 @@ if (_usefuls isEqualTo []) then {_usefuls = + (btc_city_all select {!(isNull _x) private _city2 = selectRandom _usefuls; private _area = (getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize"))/4; -private _cities = btc_city_all select {!(isNull _x) && (_x distance _city2 > _area)}; +private _cities = btc_city_all select {!(isNull _x) && _x distance _city2 > _area}; _usefuls = _cities select {!((_x getVariable ["type", ""]) in ["NameLocal", "Hill", "NameMarine"]) && (_x getVariable ["occupied", false])}; if (_usefuls isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _city1 = selectRandom _usefuls; -//// Find roads \\\\ -private _radius = (_city1 getVariable ["radius",0])/2; +//// Find Road \\\\ +private _radius = (_city1 getVariable ["radius", 0])/2; private _roads = _city1 nearRoads (_radius * 2); _roads = _roads select {(_x distance _city1 > _radius) && isOnRoad _x}; if (_roads isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; @@ -47,113 +47,129 @@ private _pos2 = getPos _city2; [_taskID, 14, _pos2, _city2 getVariable "name"] call btc_fnc_task_create; //// Create markers \\\\ -private _marker1 = createMarker [format ["sm_2_%1", getPos _city1], getPos _city1]; +private _marker1 = createMarker [format ["sm_2_%1", _pos1], _pos1]; _marker1 setMarkerType "hd_flag"; -[_marker1, "str_a3_campaign_b_m06_marker01"] remoteExecCall ["btc_fnc_set_markerTextLocal", [0, -2] select isDedicated, _marker1]; //Convoy Start +[_marker1, "str_a3_campaign_b_m06_marker01"] remoteExecCall ["btc_fnc_set_markerTextLocal", [0, -2] select isDedicated, _marker1]; //Convoy start _marker1 setMarkerSize [0.6, 0.6]; private _marker2 = createMarker [format ["sm_2_%1", _pos2], _pos2]; _marker2 setMarkerType "hd_flag"; -[_marker2, "STR_BTC_HAM_SIDE_CONVOY_MRKEND"] remoteExecCall ["btc_fnc_set_markerTextLocal", [0, -2] select isDedicated, _marker2]; //Convoy End +[_marker2, "STR_BTC_HAM_SIDE_CONVOY_MRKEND"] remoteExecCall ["btc_fnc_set_markerTextLocal", [0, -2] select isDedicated, _marker2]; //Convoy end _marker2 setMarkerSize [0.6, 0.6]; private _area = createMarker [format ["sm_%1", _pos2], _pos2]; _area setMarkerShape "ELLIPSE"; _area setMarkerBrush "SolidBorder"; -_area setMarkerSize [_radius/1.5, _radius/1.5]; +_area setMarkerSize [_radius/2, _radius/2]; _area setMarkerAlpha 0.3; _area setmarkercolor "colorBlue"; private _markers = [_marker1, _marker2, _area]; +/// Show info path\\\ +private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; +private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; + +waitUntil {!((_agent getVariable ["btc_path", []]) isEqualTo [])}; +private _path = _agent getVariable ["btc_path", []]; +if (count _path <= 35) exitWith { + _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); + [_taskID, "CANCELED"] call BIS_fnc_taskSetState; +}; + //// Create convoy \\\\ private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; - -private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; +private _convoyLength = 2 + round random 1; +private _listPositions = _path select [40, _convoyLength + 1]; +reverse _listPositions; private _delay = 0; -for "_i" from 0 to (1 + round random 1) do { - _delay = _delay + ([_group, _pos1, selectRandom _veh_types, [_road] call btc_fnc_road_direction] call btc_fnc_mil_createVehicle); - - _road = (roadsConnectedTo _road) select 0; - _pos1 = getPosATL _road; +for "_i" from 1 to _convoyLength do { + private _pos = _listPositions deleteAt 0; + _delay = _delay + ([_group, ASLToAGL _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); }; - [{ - _this spawn { - params ["_group", "_taskID", "_radius", "_city1", "_pos2", "_markers"]; - - private _captive = selectRandom units _group; - removeAllWeapons _captive; - _group selectLeader _captive; - - private _surrender_taskID = _taskID + "su"; - [[_surrender_taskID, _taskID], 24, objNull, typeOf _captive] call btc_fnc_task_create; - private _handcuff_taskID = _taskID + "hc"; - private _back_taskID = _taskID + "bk"; - - [_group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius / 1.5] call CBA_fnc_addWaypoint; - - //// Create trigger \\\\ - private _trigger = createTrigger ["EmptyDetector", getPos _city1]; - _trigger setVariable ["captive", _captive]; - _trigger setTriggerArea [15, 15, 0, false]; - _trigger setTriggerActivation [str btc_player_side, "PRESENT", true]; - _trigger setTriggerStatements ["this", format ["_captive = thisTrigger getVariable 'captive'; deleteVehicle thisTrigger; doStop _captive; [_captive, true] call ace_captives_fnc_setSurrendered; ['%1', 'SUCCEEDED'] call BIS_fnc_taskSetState; [['%2', '%4'], 29, _captive] call btc_fnc_task_create; [['%3', '%4'], 21, btc_create_object_point, typeOf btc_create_object_point] call btc_fnc_task_create;", _surrender_taskID, _handcuff_taskID, _back_taskID, _taskID], ""]; - _trigger attachTo [_captive, [0, 0, 0]]; - - private _agent = [leader _group, _pos2, _taskID] call btc_fnc_info_path; - _agent addEventHandler ["PathCalculated", { - params ["_agent", "_path"]; - - [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; - _agent removeEventHandler ["PathCalculated", _thisEventHandler]; - }]; - - ["ace_captiveStatusChanged", { - params ["_unit", "_state", "_type"]; - _thisArgs params ["_captive", "_handcuff_taskID"]; - - if (_captive isEqualTo objNull) then { - [_thisType, _thisId] call CBA_fnc_removeEventHandler; - }; - if (_unit isEqualTo _captive && _type isEqualTo "SetHandcuffed") then { - [_thisType, _thisId] call CBA_fnc_removeEventHandler; - [_handcuff_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; - }; - _this - }, [_captive, _handcuff_taskID]] call CBA_fnc_addEventHandlerArgs; - - waitUntil {sleep 5; (!(alive _captive) || (_captive inArea [getPosWorld btc_create_object_point, 100, 100, 0, false]) || _taskID call BIS_fnc_taskCompleted)}; - - _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); - - private _vehs = (units _group) apply {assignedVehicle _x}; - _vehs = (_vehs arrayIntersect _vehs); - if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { - deleteVehicle _trigger; - [_markers, _vehs + [_group]] call btc_fnc_delete; + _this call CBA_fnc_addWaypoint; + [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; +}, [ + _group, _pos2, -1, "MOVE", "CARELESS", "RED", "LIMITED", "COLUMN", + format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 +], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; + +private _trigger = createTrigger ["EmptyDetector", _pos2]; +[{ + params ["_group", "_taskID", "_trigger"]; + + private _captive = leader _group; + removeAllWeapons _captive; + private _vehs = (units _group) apply {assignedVehicle _x}; + btc_curator addCuratorEditableObjects [_vehs arrayIntersect _vehs, false]; + + private _surrender_taskID = _taskID + "su"; + [[_surrender_taskID, _taskID], 24, objNull, typeOf _captive] call btc_fnc_task_create; + private _handcuff_taskID = _taskID + "hc"; + private _back_taskID = _taskID + "bk"; + + //// Create trigger \\\\ + _trigger setVariable ["captive", _captive]; + _trigger setTriggerArea [15, 15, 0, false]; + _trigger setTriggerActivation [str btc_player_side, "PRESENT", true]; + _trigger setTriggerStatements ["this", format ["_captive = thisTrigger getVariable 'captive'; deleteVehicle thisTrigger; doStop _captive; [_captive, true] call ace_captives_fnc_setSurrendered; ['%1', 'SUCCEEDED'] call BIS_fnc_taskSetState; [['%2', '%4'], 29, _captive] call btc_fnc_task_create; [['%3', '%4'], 21, btc_create_object_point, typeOf btc_create_object_point] call btc_fnc_task_create;", _surrender_taskID, _handcuff_taskID, _back_taskID, _taskID], ""]; + _trigger attachTo [_captive, [0, 0, 0]]; + + ["ace_captiveStatusChanged", { + params ["_unit", "_state", "_type"]; + _thisArgs params ["_captive", "_handcuff_taskID"]; + + if (isNull _captive) then { + [_thisType, _thisId] call CBA_fnc_removeEventHandler; }; - - if (!alive _captive || _taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { - deleteVehicle _trigger; - [_taskID, "FAILED"] call btc_fnc_task_setState; - _group setVariable ["no_cache", false]; - { - _group = createGroup btc_enemy_side; - (crew _x) joinSilent _group; - [btc_fnc_data_add_group, _group] call CBA_fnc_directCall; - } forEach _vehs; - [_markers, []] call btc_fnc_delete; + if (_unit isEqualTo _captive && _type isEqualTo "SetHandcuffed") then { + [_thisType, _thisId] call CBA_fnc_removeEventHandler; + [_handcuff_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; }; + _this + }, [_captive, _handcuff_taskID]] call CBA_fnc_addEventHandlerArgs; +}, [ + _group, + _taskID, + _trigger +], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; + +waitUntil {sleep 5; ( + _taskID call BIS_fnc_taskCompleted || + !isNull (_trigger getVariable ["captive", objNull]) && { + private _captive = _trigger getVariable ["captive", objNull]; + !(alive _captive) || + _captive inArea [getPosWorld btc_create_object_point, 100, 100, 0, false] + } +)}; + +private _captive = _trigger getVariable ["captive", objNull]; +_markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); + +private _vehs = (units _group) apply {assignedVehicle _x}; +_vehs = (_vehs arrayIntersect _vehs); +if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { + [_markers, _vehs + [_group]] call btc_fnc_delete; +}; + +if (!alive _captive || _taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { + deleteVehicle _trigger; + _group setVariable ["no_cache", false]; + { + private _group = createGroup btc_enemy_side; + (crew _x) joinSilent _group; + [btc_fnc_data_add_group, _group] call CBA_fnc_directCall; + } forEach _vehs; + [_markers] call btc_fnc_delete; +}; - 50 call btc_fnc_rep_change; +[_markers, _vehs + [_group]] call btc_fnc_delete; - [_taskID, "SUCCEEDED"] call btc_fnc_task_setState; +if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith {}; - [_markers, _vehs + [_captive, _group]] call btc_fnc_delete; - }; -}, [_group, _taskID, _radius, _city1, _pos2, _markers], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; +50 call btc_fnc_rep_change; -waitUntil {sleep 5; _taskID call BIS_fnc_taskCompleted}; +[_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; \ No newline at end of file diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 6ece405b2..963c4cd28 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -12,7 +12,7 @@ Returns: Examples: (begin example) - [] spawn btc_fnc_side_convoy; + [false, "btc_fnc_side_convoy"] spawn btc_fnc_side_create; (end) Author: @@ -39,7 +39,7 @@ private _city1 = selectRandom _usefuls; private _radius = (_city1 getVariable ["radius", 0])/2; private _roads = _city1 nearRoads (_radius * 2); _roads = _roads select {(_x distance _city1 > _radius) && isOnRoad _x}; - if (_roads isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; +if (_roads isEqualTo []) exitWith {[] spawn btc_fnc_side_create;}; private _road = selectRandom _roads; private _pos1 = getPosATL _road; private _pos2 = getPos _city2; @@ -81,17 +81,21 @@ if (count _path <= 35) exitWith { private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; -private _convoyLength = 3 + round random 2; +private _convoyLength = 5; //3 + round random 2; private _listPositions = _path select [40, _convoyLength + 1]; reverse _listPositions; private _delay = 0; for "_i" from 1 to _convoyLength do { private _pos = _listPositions deleteAt 0; - _delay = _delay + ([_group, _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); + _delay = _delay + ([_group, ASLToAGL _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); }; [{ - _this call CBA_fnc_addWaypoint; + systemChat str waypoints (_this select 0); + //_this call CBA_fnc_addWaypoint; [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + + private _vehs = (units (_this select 0)) apply {assignedVehicle _x}; + btc_curator addCuratorEditableObjects [_vehs arrayIntersect _vehs, false]; }, [ _group, _pos2, -1, "MOVE", "CARELESS", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 @@ -100,7 +104,7 @@ for "_i" from 1 to _convoyLength do { waitUntil {sleep 5; ( _taskID call BIS_fnc_taskCompleted || ((units _group) apply {assignedVehicle _x}) select {canMove _x} isEqualTo [] || - _group isEqualTo grpNull + isNull _group )}; _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); From a34e057a1f64b1a720810a4277535fbef95e3c3d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 22 Sep 2020 13:35:31 +0200 Subject: [PATCH 182/264] sentry until all ai has spawned --- .../core/fnc/side/capture_officer.sqf | 48 +++++++++++-------- .../core/fnc/side/convoy.sqf | 14 ++++-- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 93dded8a8..a7dc0efa0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -84,20 +84,27 @@ _group setVariable ["no_cache", true]; private _convoyLength = 2 + round random 1; private _listPositions = _path select [40, _convoyLength + 1]; reverse _listPositions; +[_group, ASLToAGL (_listPositions select 0), -1, "SENTRY", "SAFE", "RED", "LIMITED", "COLUMN"] call CBA_fnc_addWaypoint; // Make sure they don't move during spawn private _delay = 0; for "_i" from 1 to _convoyLength do { private _pos = _listPositions deleteAt 0; _delay = _delay + ([_group, ASLToAGL _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); }; + [{ + params ["_group"]; + + _group call CBA_fnc_clearWaypoints; _this call CBA_fnc_addWaypoint; [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; + + private _vehs = (units _group) apply {assignedVehicle _x}; + btc_curator addCuratorEditableObjects [_vehs arrayIntersect _vehs, false]; }, [ - _group, _pos2, -1, "MOVE", "CARELESS", "RED", "LIMITED", "COLUMN", + _group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 ], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; -private _trigger = createTrigger ["EmptyDetector", _pos2]; [{ params ["_group", "_taskID", "_trigger"]; @@ -112,6 +119,7 @@ private _trigger = createTrigger ["EmptyDetector", _pos2]; private _back_taskID = _taskID + "bk"; //// Create trigger \\\\ + private _trigger = createTrigger ["EmptyDetector", _captive]; _trigger setVariable ["captive", _captive]; _trigger setTriggerArea [15, 15, 0, false]; _trigger setTriggerActivation [str btc_player_side, "PRESENT", true]; @@ -131,32 +139,36 @@ private _trigger = createTrigger ["EmptyDetector", _pos2]; }; _this }, [_captive, _handcuff_taskID]] call CBA_fnc_addEventHandlerArgs; + + [{ + !alive (_this select 0) || + isNull (_this select 0) + }, { + [_this select 1, "FAILED"] call btc_fnc_task_setState; + }, [_captive, _taskID]] call CBA_fnc_waitUntilAndExecute; + + [{ + (_this select 0) inArea [getPosWorld btc_create_object_point, 100, 100, 0, false] || + isNull (_this select 0) + }, { + [_this select 1, "SUCCEEDED"] call BIS_fnc_taskSetState; + }, [_captive, _taskID]] call CBA_fnc_waitUntilAndExecute; }, [ _group, - _taskID, - _trigger + _taskID ], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; -waitUntil {sleep 5; ( - _taskID call BIS_fnc_taskCompleted || - !isNull (_trigger getVariable ["captive", objNull]) && { - private _captive = _trigger getVariable ["captive", objNull]; - !(alive _captive) || - _captive inArea [getPosWorld btc_create_object_point, 100, 100, 0, false] - } -)}; +waitUntil {sleep 5; _taskID call BIS_fnc_taskCompleted}; -private _captive = _trigger getVariable ["captive", objNull]; _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); - private _vehs = (units _group) apply {assignedVehicle _x}; _vehs = (_vehs arrayIntersect _vehs); + if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith { [_markers, _vehs + [_group]] call btc_fnc_delete; }; -if (!alive _captive || _taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { - deleteVehicle _trigger; +if (_taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWith { _group setVariable ["no_cache", false]; { private _group = createGroup btc_enemy_side; @@ -170,6 +182,4 @@ if (!alive _captive || _taskID call BIS_fnc_taskState isEqualTo "FAILED") exitWi if (_taskID call BIS_fnc_taskState isEqualTo "CANCELED") exitWith {}; -50 call btc_fnc_rep_change; - -[_taskID, "SUCCEEDED"] call BIS_fnc_taskSetState; \ No newline at end of file +50 call btc_fnc_rep_change; \ No newline at end of file diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 963c4cd28..3b65ba409 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -81,23 +81,27 @@ if (count _path <= 35) exitWith { private _group = createGroup btc_enemy_side; _group setVariable ["no_cache", true]; [_group] call CBA_fnc_clearWaypoints; -private _convoyLength = 5; //3 + round random 2; +private _convoyLength = 3 + round random 2; private _listPositions = _path select [40, _convoyLength + 1]; reverse _listPositions; +[_group, ASLToAGL (_listPositions select 0), -1, "SENTRY", "SAFE", "RED", "LIMITED", "COLUMN"] call CBA_fnc_addWaypoint; // Make sure they don't move during spawn private _delay = 0; for "_i" from 1 to _convoyLength do { private _pos = _listPositions deleteAt 0; _delay = _delay + ([_group, ASLToAGL _pos, selectRandom _veh_types, (_listPositions select 0) getDir _pos] call btc_fnc_mil_createVehicle); }; + [{ - systemChat str waypoints (_this select 0); - //_this call CBA_fnc_addWaypoint; + params ["_group"]; + + _group call CBA_fnc_clearWaypoints; + _this call CBA_fnc_addWaypoint; [12] remoteExecCall ["btc_fnc_show_hint", [0, -2] select isDedicated]; - private _vehs = (units (_this select 0)) apply {assignedVehicle _x}; + private _vehs = (units _group) apply {assignedVehicle _x}; btc_curator addCuratorEditableObjects [_vehs arrayIntersect _vehs, false]; }, [ - _group, _pos2, -1, "MOVE", "CARELESS", "RED", "LIMITED", "COLUMN", + _group, _pos2, -1, "MOVE", "SAFE", "RED", "LIMITED", "COLUMN", format ["['%1', 'FAILED'] call BIS_fnc_taskSetState;", _taskID], [0, 0, 0], _radius/2 ], btc_delay_createUnit + _delay] call CBA_fnc_waitAndExecute; From 2f88f95e388796c65e2dc102e64b98735f35efe9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 23 Sep 2020 14:36:49 +0200 Subject: [PATCH 183/264] Fix: clipping --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index 59059ea99..fcb01e421 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -33,7 +33,7 @@ private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; private _model_hide = (0 boundingBoxReal _hideVehicle) select 1; private _attachTo = [ 0, - ((_model_hide select 1) - (_model_selected select 1)) + 1, + ((_model_hide select 1) - (_model_selected select 1)) + 0.9, (_model_selected select 2) - (_model_hide select 2) - 0.2 ]; _vehicleSelected attachTo [_hideVehicle, _attachTo]; @@ -41,8 +41,15 @@ _vehicleSelected attachTo [_hideVehicle, _attachTo]; if (_tower setVehicleCargo _hideVehicle) then { [{isNull isVehicleCargo (_this select 0)}, { params ["_hideVehicle", "_vehicleSelected"]; + + private _pos = getPosWorld _vehicleSelected; + _pos set [2, (_pos select 2) + 0.3]; + detach _vehicleSelected; deleteVehicle _hideVehicle; + + _vehicleSelected setPosWorld _pos; + [_vehicleSelected, [0, 0, 0.01]] remoteExecCall ["setVelocity", _vehicleSelected]; // Activate physic }, [_hideVehicle, _vehicleSelected]] call CBA_fnc_waitUntilAndExecute; } else { deleteVehicle _hideVehicle; From be9e1f181aa21c4de4a2277e7efb4c676abd7d42 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 23 Sep 2020 15:44:43 +0200 Subject: [PATCH 184/264] FIX: Clipping Flat HEMTT --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 47083e356..ea930faf0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -63,7 +63,7 @@ private _model_flat = (0 boundingBoxReal _flat) select 1; private _attachTo = [ 0, [(_model_flat select 1) - (_model_selected select 1), -(_model_flat select 1) -(_model_selected select 1)] select (_flat isEqualTo _tower), - (_model_selected select 2) - (_model_flat select 2) + -(_model_front_selected select 2) ]; _vehicleSelected attachTo [_flat, _attachTo]; From 3a6e910054ed17b9eca7c016f2c44cf0a309ed19 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 23 Sep 2020 16:06:28 +0200 Subject: [PATCH 185/264] Unload ViV before repair wreck --- .../core/fnc/log/server_repair_wreck.sqf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf index 586752737..ff0e6770d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/log/server_repair_wreck.sqf @@ -43,7 +43,14 @@ if (_marker != "") then { deleteMarker _marker; remoteExecCall ["", _marker]; }; -deleteVehicle _veh; + +if !((getVehicleCargo _veh) isEqualTo []) then { + _veh setVehicleCargo objNull; +}; + +[{ + deleteVehicle _this; +}, _veh] call CBA_fnc_execNextFrame; [{ _this call btc_fnc_log_createVehicle; From 159802a33c7fd7760941ac3a621d3a8b41d4cede Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 23 Sep 2020 17:42:26 +0200 Subject: [PATCH 186/264] Add ViV persistence --- .../core/fnc/db/load.sqf | 17 ++++++++++++++--- .../core/fnc/db/save.sqf | 17 +++++++++++++++-- .../core/fnc/tow/ViV.sqf | 2 ++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 470e352ef..699adf11a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -129,8 +129,8 @@ private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], //VEHICLES private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]; [{ // Can't be executed just after because we can't delete and spawn vehicle during the same frame. - { - _x params [ + private _loadVehicle = { + params [ "_veh_type", "_veh_pos", "_veh_dir", @@ -146,7 +146,8 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], ["_isContaminated", false, [false]], ["_supplyVehicle", [], [[]]], ["_EDENinventory", [], [[]]], - ["_vectorPos", [], [[]]] + ["_vectorPos", [], [[]]], + ["_ViV", [], [[]]] ]; if (btc_debug_log) then { @@ -162,6 +163,16 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], if !(alive _veh) then { [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; }; + if !(_ViV isEqualTo []) then { + { + [_x call _loadVehicle, _veh] call btc_fnc_tow_ViV; + } forEach _ViV; + }; + + _veh + }; + { + _x call _loadVehicle; } forEach _this; }, _vehs] call CBA_fnc_execNextFrame; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index f7117b3c3..c24b2f037 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -129,6 +129,11 @@ profileNamespace setVariable [format ["btc_hm_%1_fobs", _name], _fobs]; //Vehicles status private _array_veh = []; +private _vehicles = btc_vehicles - [objNull]; +private _vehiclesNotInCargo = _vehicles select { + isNull isVehicleCargo attachedTo _x +}; +private _vehiclesInCargo = _vehicles - _vehiclesNotInCargo; { private _data = []; _data pushBack (typeOf _x); @@ -150,11 +155,19 @@ private _array_veh = []; _data append ([_x] call btc_fnc_getVehProperties); _data pushBack (_x getVariable ["btc_EDENinventory", []]); _data pushBack ([vectorDir _x, vectorUp _x]); - _array_veh pushBack _data; + _data pushBack []; // ViV + + if (isNull isVehicleCargo attachedTo _x) then { + _array_veh pushBack _data; + } else { + private _index = _vehiclesNotInCargo find (isVehicleCargo attachedTo _x); + ((_array_veh select _index) select 16) pushBack _data; + }; + if (btc_debug_log) then { [format ["VEH %1 DATA %2", _x, _data], __FILE__, [false]] call btc_fnc_debug_message; }; -} forEach (btc_vehicles - [objNull]); +} forEach (_vehiclesNotInCargo + _vehiclesInCargo); profileNamespace setVariable [format ["btc_hm_%1_vehs", _name], _array_veh]; //Objects status diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index fcb01e421..4c55145f5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -26,6 +26,8 @@ params [ ["_tower", objNull, [objNull]] ]; +if (_tower setVehicleCargo _vehicleSelected) exitWith {}; + private _hideVehicle = createVehicle ["Land_Cargo10_red_F", [0, 0, 0], [], 0, "CAN_COLLIDE"]; _hideVehicle hideObjectGlobal true; From b15babab02a40ea01194d058b614fa4475ed846b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 24 Sep 2020 15:30:44 +0200 Subject: [PATCH 187/264] FIX: Tow flip vehicles --- .../core/fnc/tow/ropeBreak.sqf | 6 ++++- .../core/fnc/tow/ropeCreate.sqf | 25 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf index f8ef6eaaf..590d125df 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf @@ -31,7 +31,11 @@ deTach _vehicleSelected; _flat setPos [0, 0, 0]; // Avoid collision with _vehicleSelected // Handle flipped vehicle -if ((vectorUp _vehicleSelected) select 2 < 0) then { +private _bank = _vehicleSelected call BIS_fnc_getPitchBank select 1; +if !( + (vectorUp _vehicleSelected vectorDotProduct surfaceNormal getPos _vehicleSelected) < -0.80 && + 55 > abs _bank +) then { private _towerDir = getDir _tower; private _selectedSafePos = _tower getPos [- _safeDistance, _towerDir]; _selectedSafePos set [2, 0.5 + (_selectedSafePos select 2)]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index ea930faf0..fa1625006 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -31,6 +31,29 @@ if (_tower setVehicleCargo _vehicleSelected) exitWith {}; (localize "STR_BTC_HAM_TOW_WAIT") call CBA_fnc_notify; +private _bank = _vehicleSelected call BIS_fnc_getPitchBank select 1; +if !( + !((vectorUp _vehicleSelected vectorDotProduct surfaceNormal getPos _vehicleSelected) < -0.80) && + 55 > abs _bank +) exitWith { + [_vehicleSelected, { + params ["_vehicleSelected"]; + + private _pos = getPosWorld _vehicleSelected; + _vehicleSelected setVectorUp [0, 0, 1]; + _pos set [2, 0.5 + (_pos select 2) + (_pos select 2) - ((getPosASL _vehicleSelected) select 2)]; + _vehicleSelected setPosWorld _pos; + }] remoteExecCall ["call", _vehicleSelected]; + + [{ + params ["_tower", "_vehicleSelected"]; + + private _bank = _vehicleSelected call BIS_fnc_getPitchBank select 1; + !((vectorUp _vehicleSelected vectorDotProduct surfaceNormal getPos _vehicleSelected) < -0.80) && + 55 > abs _bank + }, btc_fnc_tow_ropeCreate, [_tower, _vehicleSelected], 10] call CBA_fnc_waitUntilAndExecute; +}; + // Find the position of the Flat object private _dirSelected = getDir _vehicleSelected; private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; @@ -63,7 +86,7 @@ private _model_flat = (0 boundingBoxReal _flat) select 1; private _attachTo = [ 0, [(_model_flat select 1) - (_model_selected select 1), -(_model_flat select 1) -(_model_selected select 1)] select (_flat isEqualTo _tower), - -(_model_front_selected select 2) + 0.1 - (_model_front_selected select 2) ]; _vehicleSelected attachTo [_flat, _attachTo]; From e5136f0ab880b0831017a3124a5562e1151af4db Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 25 Sep 2020 14:36:01 +0200 Subject: [PATCH 188/264] FIX: interaction shown for logistic --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf index ea9f6e4ca..9937bbd9a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf @@ -31,7 +31,7 @@ switch true do { case (_type isKindOf "UGV_02_Base_F") : {}; case (_type isKindOf "StaticWeapon") : {}; case (_type isKindOf "LandVehicle" || {_type isKindOf "Ship"}) : { - private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {true}] call ace_interact_menu_fnc_createAction; + private _action = ["Logistic", localize "STR_BTC_HAM_ACTION_LOC_MAIN", "\A3\ui_f\data\igui\cfg\simpleTasks\letters\L_ca.paa", {}, {isNull isVehicleCargo attachedto _target && isNull isVehicleCargo _target}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToClass; _action = ["log_tow", localize "STR_BTC_HAM_ACTION_VEHINIT_TOW", "\z\ace\addons\attach\UI\attach_ca.paa", {_target call btc_fnc_tow_ropeCreate;}, {!isNull btc_tow_vehicleSelected && {btc_tow_vehicleSelected != _target}}] call ace_interact_menu_fnc_createAction; [_type, 0, ["ACE_MainActions", "Logistic"], _action] call ace_interact_menu_fnc_addActionToClass; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index a5188d60e..c1c055da5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -63,7 +63,10 @@ if (_distanceTowed < _offset + 3 || _safeDistance isEqualTo [false, true]) exitW }; if ( - !(isNull (isVehicleCargo _towed)) || + !(isNull isVehicleCargo attachedto _tower) || + !(isNull isVehicleCargo attachedto _towed) || + !(isNull isVehicleCargo _tower) || + !(isNull isVehicleCargo _towed) || !isNull (_tower getVariable ["btc_towing", objNull]) ) exitWith { (localize "STR_BTC_HAM_TOW_ALREADYTOWED") call CBA_fnc_notify; From a30d8b35c928f3c282071bf7bf3556192c8c8dbf Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 25 Sep 2020 23:03:15 +0200 Subject: [PATCH 189/264] FIX: SUCCEDED completed task --- .../core/fnc/side/capture_officer.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index a7dc0efa0..9d51c8bb1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -151,7 +151,7 @@ for "_i" from 1 to _convoyLength do { (_this select 0) inArea [getPosWorld btc_create_object_point, 100, 100, 0, false] || isNull (_this select 0) }, { - [_this select 1, "SUCCEEDED"] call BIS_fnc_taskSetState; + [_this select 1, "SUCCEEDED"] call btc_fnc_task_setState; }, [_captive, _taskID]] call CBA_fnc_waitUntilAndExecute; }, [ _group, From 50e2ac417407d55fbc62f60405a422b376ced24c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 27 Sep 2020 11:59:34 +0200 Subject: [PATCH 190/264] FIX: btc_fnc_fob_redeploy define twice --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 32ef97108..4717cca8a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -293,7 +293,6 @@ if (!isDedicated) then { btc_fnc_fob_create = compile preprocessFileLineNumbers "core\fnc\fob\create.sqf"; btc_fnc_fob_rallypointAssemble = compile preprocessFileLineNumbers "core\fnc\fob\rallypointAssemble.sqf"; btc_fnc_fob_redeploy = compile preprocessFileLineNumbers "core\fnc\fob\redeploy.sqf"; - btc_fnc_fob_redeploy = compile preprocessFileLineNumbers "core\fnc\fob\redeploy.sqf"; btc_fnc_fob_redeployCheck = compile preprocessFileLineNumbers "core\fnc\fob\redeployCheck.sqf"; //INT From 8dec6668204de08180c1782bc0c899500195ebd7 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 1 Oct 2020 20:32:04 +0200 Subject: [PATCH 191/264] FIX: Vehicle create wrong name to respawn --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf | 2 +- .../core/fnc/eh/veh_add_respawn.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf index aeef99174..68dd2c56c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf @@ -41,7 +41,7 @@ if (btc_p_respawn_location > 1) then { (btc_p_respawn_location isEqualTo 2) && (_veh isKindOf "Air") || btc_p_respawn_location > 2 ) then { - [btc_player_side, _veh] call BIS_fnc_addRespawnPosition; + [_veh, "Deleted", {_thisArgs call BIS_fnc_removeRespawnPosition}, [btc_player_side, _veh] call BIS_fnc_addRespawnPosition] call CBA_fnc_addBISEventHandler; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf index 1119ccd3b..1d0c00d33 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf @@ -44,6 +44,6 @@ if ((isNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "ace_fastroping _vehicle addMPEventHandler ["MPKilled", {if (isServer) then {[_this select 0] call btc_fnc_eh_veh_respawn};}]; if (btc_p_respawn_location > 0) then { if !(fullCrew [_vehicle, "cargo", true] isEqualTo []) then { - [btc_player_side, _vehicle] call BIS_fnc_addRespawnPosition; + [_vehicle, "Deleted", {_thisArgs call BIS_fnc_removeRespawnPosition}, [btc_player_side, _vehicle] call BIS_fnc_addRespawnPosition] call CBA_fnc_addBISEventHandler; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf index 73178dedb..c9b618b06 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/create_s.sqf @@ -50,7 +50,7 @@ _marker setMarkerShape "ICON"; (_fobs select 0) pushBack _marker; (_fobs select 1) pushBack _structure; (_fobs select 2) pushBack _flag; -_flag setVariable ["BIS_fnc_IDRespawnPosition", ([btc_player_side, _flag, _FOB_name] call BIS_fnc_addRespawnPosition) select 1]; +[_flag, "Deleted", {[_thisArgs select 0, _thisArgs select 1] call BIS_fnc_removeRespawnPosition}, [btc_player_side, _flag, _FOB_name] call BIS_fnc_addRespawnPosition] call CBA_fnc_addBISEventHandler; _structure addEventHandler ["Killed", btc_fnc_fob_killed]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf index 56eb50c09..3ab0d0643 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/fob/killed.sqf @@ -41,7 +41,6 @@ if (btc_debug || btc_debug_log) then { [format ["named %1", (_fobs select 0) select _fob_index], __FILE__, [btc_debug, btc_debug_log]] call btc_fnc_debug_message; }; -[btc_player_side, ((_fobs select 2) select _fob_index) getVariable "BIS_fnc_IDRespawnPosition"] call BIS_fnc_removeRespawnPosition; deleteMarker ((_fobs select 0) deleteAt _fob_index); private _fob = (_fobs select 1) deleteAt _fob_index; deleteVehicle ((_fobs select 2) deleteAt _fob_index); From efa897d042e056d075316f6760cfb1a88c5a3454 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 2 Oct 2020 14:58:58 +0200 Subject: [PATCH 192/264] FIX: wrong name when leader --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf index 08090acae..0687c3944 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/int/add_actions.sqf @@ -158,7 +158,6 @@ _actions pushBack ["redeploy", localize "STR_BTC_HAM_ACTION_BIRESPAWN", "\A3\ui_ if ([] call btc_fnc_fob_redeployCheck) then { player setPos [10, 10, 10]; player hideObject true; - player enableSimulation false; forceRespawn player; }; }, {!btc_log_placing}]; From 9dd7e4aaf52cbd60fa68e6232bcd5e855dfea36b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 2 Oct 2020 23:42:54 +0200 Subject: [PATCH 193/264] FIX: Wrong name for reputation notify --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf index 9e846460d..525633371 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/show_hint.sqf @@ -110,7 +110,7 @@ private _text = switch (_type) do { case 21 : { _custom params ["_color", "_player"]; [ - [[name _player], [" "]] select (isNull _player), + [[name _player], [" "]] select (isNull _player || !(side group _player isEqualTo btc_player_side)), ["\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa", 4, _color], [" "] ]; From 0ed8c1d3b30bd1f31ccf2fcf67ede584699a5a72 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 2 Oct 2020 23:59:51 +0200 Subject: [PATCH 194/264] Add: Reputation change when helo are killed --- .../core/fnc/eh/veh_add_respawn.sqf | 2 +- .../core/fnc/eh/veh_respawn.sqf | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf index 1d0c00d33..4bbb8c013 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf @@ -41,7 +41,7 @@ _vehProperties set [5, false]; _vehicle setVariable ["data_respawn", [_type, _pos, _dir, _time, _vector] + _vehProperties]; if ((isNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "ace_fastroping_enabled")) && !(typeOf _vehicle isEqualTo "RHS_UH1Y_d")) then {[_vehicle] call ace_fastroping_fnc_equipFRIES}; -_vehicle addMPEventHandler ["MPKilled", {if (isServer) then {[_this select 0] call btc_fnc_eh_veh_respawn};}]; +_vehicle addMPEventHandler ["MPKilled", {if (isServer) then {_this call btc_fnc_eh_veh_respawn};}]; if (btc_p_respawn_location > 0) then { if !(fullCrew [_vehicle, "cargo", true] isEqualTo []) then { [_vehicle, "Deleted", {_thisArgs call BIS_fnc_removeRespawnPosition}, [btc_player_side, _vehicle] call BIS_fnc_addRespawnPosition] call CBA_fnc_addBISEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf index 8a7aa144f..5fd513144 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf @@ -6,7 +6,9 @@ Description: Respawn the vehicle passed in parameter. Parameters: - _vehicle - Vehicle to respawn. [Object] + _vehicle - Vehicle object. [Object] + _killer - Killer. [Object] + _instigator - Person who pulled the trigger. [Object] Returns: @@ -21,7 +23,9 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_vehicle", objNull, [objNull]] + ["_vehicle", objNull, [objNull]], + ["_killer", objNull, [objNull]], + ["_instigator", objNull, [objNull]] ]; private _data = _vehicle getVariable ["data_respawn", []]; @@ -58,7 +62,7 @@ _data pushBack (_vehicle getVariable ["btc_EDENinventory", []]); _vehicle setDir _dir; _vehicle setPosASL _pos; _vehicle setVectorDirAndUp _vectorPos; - + if (getNumber(configFile >> "CfgVehicles" >> _type >> "isUav") isEqualTo 1) then { createVehicleCrew _vehicle; }; @@ -72,3 +76,9 @@ _data pushBack (_vehicle getVariable ["btc_EDENinventory", []]); [_vehicle, _time] call btc_fnc_eh_veh_add_respawn; }, _data, 1] call CBA_fnc_waitAndExecute; }, [_vehicle, _data], _data select 3] call CBA_fnc_waitAndExecute; + +if (isServer) then { + [btc_rep_malus_veh_killed, _killer] call btc_fnc_rep_change; +} else { + [btc_rep_malus_veh_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; +}; From ded85019f8ac5fbc5c13031c31571b68245636e9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 4 Oct 2020 10:54:31 +0200 Subject: [PATCH 195/264] Use un scheduled environnement for init.sqf --- .../core/init.sqf | 18 ++++++++++++++++++ .../core/init_player.sqf | 15 ++++++--------- =BTC=co@30_Hearts_and_Minds.Altis/init.sqf | 19 +------------------ 3 files changed, 25 insertions(+), 27 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/init.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init.sqf new file mode 100644 index 000000000..b291f2a6d --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init.sqf @@ -0,0 +1,18 @@ +enableSaving [false, false]; + +[] call compile preprocessFileLineNumbers "core\def\mission.sqf"; +[] call compile preprocessFileLineNumbers "define_mod.sqf"; + +if (isServer) then { + [] call compile preprocessFileLineNumbers "core\init_server.sqf"; +}; + +[] call compile preprocessFileLineNumbers "core\init_common.sqf"; + +if (!isDedicated && hasInterface) then { + [] call compile preprocessFileLineNumbers "core\init_player.sqf"; +}; + +if (!isDedicated && !hasInterface) then { + [] call compile preprocessFileLineNumbers "core\init_headless.sqf"; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index 71d75def7..b21bd4357 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -7,7 +7,6 @@ if !(isNil "btc_custom_loc") then { _location setText _cityName; } forEach btc_custom_loc; }; -endLoadingScreen; btc_intro_done = [] spawn btc_fnc_intro; [{!isNull player}, { @@ -38,13 +37,11 @@ btc_intro_done = [] spawn btc_fnc_intro; default { }; }; -}] call CBA_fnc_waitUntilAndExecute; - -if (btc_debug) then { - onMapSingleClick "vehicle player setPos _pos"; - player allowDamage false; + if (btc_debug) then { + onMapSingleClick "vehicle player setPos _pos"; + player allowDamage false; - waitUntil {!isNull (findDisplay 12)}; - private _eh = ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", btc_fnc_debug_marker]; -}; + private _eh = ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", btc_fnc_debug_marker]; + }; +}] call CBA_fnc_waitUntilAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf index 22e8b56bb..97ba728d6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/init.sqf @@ -1,19 +1,2 @@ -if (hasInterface) then {startLoadingScreen [""];}; -enableSaving [false, false]; -[] call compile preprocessFileLineNumbers "core\def\mission.sqf"; -[] call compile preprocessFileLineNumbers "define_mod.sqf"; - -if (isServer) then { - [] call compile preprocessFileLineNumbers "core\init_server.sqf"; -}; - -[] call compile preprocessFileLineNumbers "core\init_common.sqf"; - -if (!isDedicated && hasInterface) then { - [] call compile preprocessFileLineNumbers "core\init_player.sqf"; -}; - -if (!isDedicated && !hasInterface) then { - [] call compile preprocessFileLineNumbers "core\init_headless.sqf"; -}; +[compile preprocessFileLineNumbers "core\init.sqf"] call CBA_fnc_directCall; From 07c1a81f212c40787f7240df9efa3f4a8570543b Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 8 Oct 2020 15:38:10 +0200 Subject: [PATCH 196/264] Wait for the diplay --- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index b21bd4357..5aa7dbe82 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -42,6 +42,8 @@ btc_intro_done = [] spawn btc_fnc_intro; onMapSingleClick "vehicle player setPos _pos"; player allowDamage false; - private _eh = ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", btc_fnc_debug_marker]; + [{!isNull (findDisplay 12)}, { + ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", btc_fnc_debug_marker]; + }] call CBA_fnc_waitUntilAndExecute; }; }] call CBA_fnc_waitUntilAndExecute; From 84edc92b4c2a43209884d9dce577a66cb8b8425d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 8 Oct 2020 15:39:00 +0200 Subject: [PATCH 197/264] FIX: no road connected --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index a878b96a9..80685c00c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -67,7 +67,11 @@ if (_array isEqualTo []) then { private _arr = [_road, -1] call btc_fnc_ied_randomRoadPos; _sel_pos = _arr select 0; private _connected = roadsConnectedTo _road; - _road = _connected select selectRandomWeighted [0, 0.6, (count _connected) - 1, 0.4]; + if (_connected isEqualTo []) then { + _road = objNull; + } else { + _road = _connected select selectRandomWeighted [0, 0.6, (count _connected) - 1, 0.4]; + }; }; private _surface = surfaceNormal _sel_pos; From 772c7b5292a22fc4dab4c9b61a4f60886a4a04d5 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 9 Oct 2020 12:20:36 +0200 Subject: [PATCH 198/264] Add documentation --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 6 +++--- README.md | 1 + docs/InGame-documentation.md | 8 +++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 59303d6bd..a69fea1ff 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -78,7 +78,7 @@ 无头客户端与数据库 - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, vehicle in vehicle, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> @@ -87,7 +87,7 @@ - <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> When a vehicle is destroyed it will not respawn in base, you need to tow or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. <br/> The Chinook is the only exception, it will respawn after 30 seconds.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> You can also rearm them by spawning the corresponding caliber at logistic point (Interact with the red box, select the vehicle type and caliber). Carry the ammo created and interact with the vehicle to rearm. This only works if rearming is setting on entire magazine or amount based on caliber (not for entire vehicle setting).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> + <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> When a vehicle is destroyed it will not respawn in base, you need to tow, use vehicle in vehicle or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. <br/> The Chinook is the only exception, it will respawn after 30 seconds.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> You can also rearm them by spawning the corresponding caliber at logistic point (Interact with the red box, select the vehicle type and caliber). Carry the ammo created and interact with the vehicle to rearm. This only works if rearming is setting on entire magazine or amount based on caliber (not for entire vehicle setting).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Cuando un vehículo es destruido no va a reaparecer en la base, es necesario remolcarlo o transportarlo de vuelta a la base y repararlo cerca del punto logístico (Interactuar con la caja roja). Los destrozos de helicópteros sólo pueden ser transportados por vía aérea.. <br/> El Chinook es la única excepción, reaparecerá después de 30 segundos..<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> También puede rearmarlos generando el calibre correspondiente en el punto logístico (Interactuar con la caja roja, seleccionar el tipo y calibre del vehículo). Lleva la munición creada e interactúa con el vehículo para rearmarlo. Esto sólo funciona si el rearme se está ajustando en todo el cargador o en una cantidad basada en el calibre (no para el ajuste de todo el vehículo).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Wenn ein Fahrzeug zersört wurde, wird dies nicht Respawnen. Es muss durch Abschleppen oder Anheben(Sling-Load) zum Logisik-Punkt gebracht und dort repariert werden (mit der roten Box interagieren). Wracks von Hubschraubern können nur angehoben werden (Sling-Load). <br/> Die einzigste Ausnahme hierbei ist der Chinook. Er respawnt nach 30 Sekunden.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Aufmunitionieren:</marker><br/> Fahrzeuge können Aufmunitioniert werden, in dem man das entsprechende Kaliber am Logisik-Punk anfordert (mit der Roten Box interagieren: Fahzeug und Kaliber auswählen). Nun muss man nur noch die erstellte Munition zum Fahrzeug bringen und mit diesem interagieren um das aufmunitionieren zu beginnen.<br/>ANMERKUNG: Das funktioiert nur wenn die Aufmunitionierungseinstellung auf 'Gesamtes Magazin' oder 'Kalieberbasierte Anzahl' gestellt ist (get nicht für 'Gesamtes Fahrzeug').<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> <marker name='blufor_base'><img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\destroy_ca.paa' width='20' height='20'/> Respawn:</marker><br/> Quando um veículo é destruído ele não reaparecerá na base, você precisa rebocá-lo/levá-lo de volta à base e repará-lo perto do ponto logístico (Interagir com a caixa vermelha). Os destroços de helicóptero só podem ser levantados. <br/> O Chinook é a única exceção, ele reaparecerá depois de 30 segundos.<br/><br/> <img image='\a3\data_f_tank\Images\Tank_contentBrowserPicture_1_co.paa' width='355' height='200' /> <br/><br/> <marker name='blufor_base'> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\rearm_ca.paa' width='20' height='20'/> Rearm:</marker><br/> Você também pode rearmar-los, gerando o calibre correspondente no ponto logístico (Interaja com a caixa vermelha, selecione o tipo de veículo e calibre). Leve a munição criada e interaja com o veículo para rearmar. Isso só funciona se o rearme estiver configurado em um depósito inteiro ou em um valor baseado em calibre (não para toda a configuração do veículo).<br/><br/> <img image='\a3\data_f_jets\Images\dlcbrowser_jets_loadouts_ca.paa' width='355' height='200' /> @@ -139,7 +139,7 @@ - <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> To tow a vehicle interact with it and select the option 'HOOK'.<br/>After that place the tow vehicle in front of it and select 'TOW' in the interaction menu.<br/> If the two vehicles are too far away or the vehicle can't tow that load (Car can't tow truck or tank), the option will be disabled.<br/> To unhook interact with one of the two vehicles and select the option 'UNHOOK'.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> With this option you can move heavy objects to build small outpost or base.<br/> When you select the option an hint will show all the keys required to move the object.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> + <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> To tow a vehicle interact with it and select the option 'HOOK'.<br/>After that place the tow vehicle in front of it and select 'TOW' in the interaction menu.<br/> If the two vehicles are too far away or the vehicle can't tow that load (Car can't tow truck or tank), the option will be disabled.<br/> To unhook interact with one of the two vehicles and select the option 'UNHOOK'.<br/><br/> <img image='\A3\Ui_f\data\IGUI\Cfg\VehicleToggles\VehicleCargoIconOn2_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Vehicle in vehicle system:</marker><br/> BI Vehicle in Vehicle (ViV) system is extended to allow load of any vehicle in a vehicle. To move ViV use the towing system. To unload, move in driver seat of the tower vehicle and select in scroll menu "unload all objects".<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /><br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> With this option you can move heavy objects to build small outpost or base.<br/> When you select the option an hint will show all the keys required to move the object. <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Fracht-System:</marker><br/>Siehe ACE3 Dokumentation. <br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Abschleppsystem:</marker><br/> Um ein Fahrzeug abzuschleppen muss man mit diesem interagieren und 'EINHACKEN' auswählen.<br/>Als nächstes muss man das Zugfahrzeug vor das abzuschleppende Fahrzeug stellen und über das Interagtionsmenü die Option 'ABSCHLEPPEN' aktivieren.<br/> Zu beachten ist dabei, dass die beiden Fahrzeuge nicht zu weit von einander entfernt sein dürfen. Ebenso ist daruf zu achten, dass das Zugfahrzeug auch das andere Fahrzeug abschleppen kann (zB. Autos können keine Lkw/Panzer abschleppen).<br/> Um das Abschleppseil wieder zu entfernen muss man einen bei einem der beiden Fahrzeuge die Option 'AUSHACKEN' auswählen.<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Platzierung von Objekten:</marker><br/> Mit dieser Option können Sie schwere Objekte bewegen, um einen kleinen Außenposten oder eine Basis zu bauen.<br/> Wenn Sie die Option auswählen, zeigt ein Hinweis alle Tasten an, die zum Verschieben des Objekts erforderlich sind.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Cargo System:</marker><br/> Use ACE 3 Cargo system. <br/><br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>Towing system:</marker><br/> Para rebocar um veículo, interaja com ele e selecione a opção "GANCHO".<br/> Depois disso, coloque o veículo de reboque na frente dele e selecione "REBOCAR" no menu de interação.<br/> Se os dois veículos estiverem muito distantes ou o veículo não puder rebocar essa carga (o carro não poderá rebocar o caminhão ou o tanque), a opção será desativada.<br/> Para desengatar, interaja com um dos dois veículos e selecione a opção "DESENGANCHAR".<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>Place option:</marker><br/> Com esta opção, você pode mover objetos pesados para construir um posto avançado ou uma base pequena.<br/> Quando você selecionar a opção, uma dica mostrará todas as ações necessárias para mover o objeto.<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> <img image='\z\ace\addons\cargo\UI\Icon_Module_Cargo_ca.paa' width='20' height='20'/> <marker name='blufor_base'>货运系统:</marker><br/> 使用ACE3货运系统。<br/><br/> <img image='\z\ace\addons\attach\UI\attach_ca.paa' width='20' height='20'/> <marker name='blufor_base'>牵引系统:</marker><br/> 如需牵引一辆载具, 与其互动并选择"启用牵引"。<br/>然后, 将牵引车辆(前车)置于被牵引车辆(后车)前方, 并在互动菜单中选择"牵引"。<br/> 如果两辆车的距离过远, 或前车无法牵引这一载荷(比如汽车(Car)无法牵引卡车(Truck)或坦克(Tank)), 则该选项不可用。<br/> 如需取消牵引, 与两车之一互动并选择"取消牵引"。<br/><br/> <img image='\z\ace\addons\dragging\UI\icons\box_carry.paa' width='20' height='20'/> <marker name='blufor_base'>物体放置:</marker><br/> 您可以使用该选项来移动重物, 从而建造一个小的前哨或基地。<br/> 选择该选项后, 移动对象所需键位的提示将会出现。<br/><br/> <img image='\A3\Data_F_Exp\Images\FeatureVehicleInVehicle_co.paa' width='355' height='200' /> diff --git a/README.md b/README.md index f400e2abe..2144d710b 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ Online [wiki available](http://vdauphin.github.io/HeartsAndMinds/). - ACEX Fortify - Logistic system - [Tow](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#towing-system) + - [Vehicle in vehicle](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#towing-system) extended - [Sling loading](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#sling-loading) - Repair [destroyed vehicles](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#respawn) - [FOB/Rallypoints](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#fobrallypoint) diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index a4037d878..b94fc7efc 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -3,8 +3,7 @@ ## Headless & Database This mission automatically uses one Headless client when available. -This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key. - +This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, vehicle in vehicle, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key. ## Chemical Warfare ### Chemical agent: @@ -28,7 +27,7 @@ You can detect the origin of electromagnetic field with spectrum devices. The am ## Vehicles ### Respawn: -When a vehicle is destroyed it will not respawn in base, you need to tow or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. The Chinook is the only exception, it will respawn after 30 seconds. +When a vehicle is destroyed it will not respawn in base, you need to tow, use vehicle in vehicle or lift it back to base and repair it near the logistic point (Interact with the red box). Helicopter wrecks can only be lifted. The Chinook is the only exception, it will respawn after 30 seconds. ### Rearm: You can also rearm them by spawning the corresponding caliber at logistic point (Interact with the red box, select the vehicle type and caliber). Carry the ammo created and interact with the vehicle to rearm. This only works if rearming is setting on entire magazine or amount based on caliber (not for entire vehicle setting). @@ -70,6 +69,9 @@ To tow a vehicle interact with it and select the option 'HOOK'.After that place If the two vehicles are too far away or the vehicle can't tow that load (Car can't tow truck or tank), the option will be disabled. To unhook interact with one of the two vehicles and select the option 'UNHOOK'. +### Vehicle in vehicle system: +BI Vehicle in Vehicle (ViV) system is extended to allow load of any vehicle in a vehicle. To move ViV use the towing system. To unload, move in driver seat of the tower vehicle and select in scroll menu "unload all objects". + ### Place option: With this option you can move heavy objects to build small outpost or base. When you select the option an hint will show all the keys required to move the object. From 35a3a025cad59b6a57d0d1e18fd15f2010e57c57 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 9 Oct 2020 21:02:30 +0200 Subject: [PATCH 199/264] Missing doc --- =BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf index b21bd4357..c61a0cbcb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_player.sqf @@ -1,4 +1,3 @@ -[] call compile preprocessFileLineNumbers "core\doc.sqf"; btc_map_mapIllumination = ace_map_mapIllumination; if !(isNil "btc_custom_loc") then { { @@ -10,6 +9,8 @@ if !(isNil "btc_custom_loc") then { btc_intro_done = [] spawn btc_fnc_intro; [{!isNull player}, { + [] call compile preprocessFileLineNumbers "core\doc.sqf"; + btc_respawn_marker setMarkerPosLocal player; player addRating 9999; ["InitializePlayer", [player]] call BIS_fnc_dynamicGroups; From 288f92398a4490d22c2da51f1346eb65e515de4d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 12 Oct 2020 21:13:14 +0200 Subject: [PATCH 200/264] Add: Enemies on roof --- .../core/def/mission.sqf | 1 + .../core/def/param.hpp | 6 ++ .../core/fnc/city/activate.sqf | 27 ++++++++- .../core/fnc/civ/populate.sqf | 14 +---- .../core/fnc/common/roof.sqf | 57 +++++++++++++++++++ .../core/fnc/compile.sqf | 2 + .../core/fnc/data/get_group.sqf | 2 +- .../core/fnc/data/spawn_group.sqf | 3 +- .../core/fnc/delay/createVehicle.sqf | 9 ++- .../core/fnc/mil/createVehicle.sqf | 4 +- .../core/fnc/mil/create_static.sqf | 6 +- .../core/fnc/mil/create_staticOnRoof.sqf | 36 ++++++++++++ .../stringtable.xml | 3 + 13 files changed, 149 insertions(+), 21 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/roof.sqf create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 05a4cc6f4..3f141f34e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -54,6 +54,7 @@ private _p_skill = [ //<< Spawn options >> btc_p_is_free_prob = ("btc_p_is_free_prob" call BIS_fnc_getParamValue)/100; btc_p_mil_group_ratio = ("btc_p_mil_group_ratio" call BIS_fnc_getParamValue)/100; +btc_p_mil_static_group_ratio = ("btc_p_mil_static_group_ratio" call BIS_fnc_getParamValue)/100; btc_p_civ_group_ratio = ("btc_p_civ_group_ratio" call BIS_fnc_getParamValue)/100; btc_p_animals_group_ratio = ("btc_p_animals_group_ratio" call BIS_fnc_getParamValue)/100; private _wp_house_probability = ("btc_p_wp_house_probability" call BIS_fnc_getParamValue)/100; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index d01c2398c..49ac63fa8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -125,6 +125,12 @@ class Params { texts[]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"}; default = 100; }; + class btc_p_mil_static_group_ratio { // Enemy static density: + title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_SPWAN_ENEMY_STATIC_DENSITY"]); + values[]={0,10,20,30,40,50,60,70,80,90,100}; + texts[]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"}; + default = 100; + }; class btc_p_civ_group_ratio { // Civilian density: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_SPWAN_CIVILIAN_DENSITY"]); values[]={0,10,20,30,40,50,60,70,80,90,100}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 48016b5a8..ef67cb9a8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -8,6 +8,7 @@ Description: Parameters: _id - Number of the city will be activated. [Number] _p_mil_group_ratio - Enemy density. [Number] + _p_mil_static_group_ratio - Enemy static density. [Number] _p_civ_group_ratio - Civilian density. [Number] _p_animals_group_ratio - Animal density. [Number] _p_civ_max_veh - Maximum number of civilian patrol. [Number] @@ -29,6 +30,7 @@ Author: params [ ["_id", 0, [0]], ["_p_mil_group_ratio", btc_p_mil_group_ratio, [0]], + ["_p_mil_static_group_ratio", btc_p_mil_static_group_ratio, [0]], ["_p_civ_group_ratio", btc_p_civ_group_ratio, [0]], ["_p_animals_group_ratio", btc_p_animals_group_ratio, [0]], ["_p_civ_max_veh", btc_p_civ_max_veh, [0]], @@ -42,6 +44,7 @@ if (_city getVariable "activating") exitWith {}; if (btc_debug) then { [str _id, __FILE__, [btc_debug, btc_debug_log, true]] call btc_fnc_debug_message; + _city setVariable ["serverTime", serverTime]; }; _city setVariable ["activating", true]; @@ -119,8 +122,22 @@ if !(_data_units isEqualTo []) then { }; }; - // Spawn civilians - if (_type != "Hill") then { + if !(_type in ["Hill", "NameMarine"]) then { + private _houses = ([position _city, _spawningRadius/3] call btc_fnc_getHouses) call BIS_fnc_arrayShuffle; + + if (_has_en) then { + private _max_number_group = (switch _type do { + case "NameLocal" : {1}; + case "NameVillage" : {2}; + case "NameCity" : {4}; + case "NameCityCapital" : {5}; + case "Airport" : {2}; + default {0}; + }); + [+_houses, round (_p_mil_static_group_ratio * random _max_number_group)] call btc_fnc_mil_create_staticOnRoof; + }; + + // Spawn civilians private _max_number_group = (switch _type do { case "NameLocal" : {3}; case "NameVillage" : {6}; @@ -129,7 +146,7 @@ if !(_data_units isEqualTo []) then { case "Airport" : {6}; default {2}; }); - [_city, _spawningRadius/3, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; + [+_houses, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; }; }; if (btc_p_animals_group_ratio > 0) then { @@ -272,3 +289,7 @@ if (_numberOfCivVeh < _p_civ_max_veh) then { [[_group, _city, _radius + btc_patrol_area], btc_fnc_civ_create_patrol] call btc_fnc_delay_exec; }; }; + +if (btc_debug) then { + [format ["%1 - %2ms", _id, (serverTime - (_city getVariable ["serverTime", serverTime])) * 1000] , __FILE__, [btc_debug, false, true]] call btc_fnc_debug_message; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index 1b9ea38b7..d7d888336 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -6,8 +6,7 @@ Description: Populate a city in an area with a defined number of civilians. Parameters: - _city - City to populate. [Object] - _area - Area to populate around a city. [Number] + _houses - Houses to populate around a city. [Number] _n - Number of civilians to generate. [Number] Returns: @@ -23,26 +22,19 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_city", objNull, [objNull]], - ["_area", 50, [0]], + ["_houses", [], [[]]], ["_n", 0, [0]] ]; -private _pos = position _city; -private _houses = [_pos, _area] call btc_fnc_getHouses; - if (_houses isEqualTo []) exitWith {}; for "_i" from 1 to _n do { if (_houses isEqualTo []) exitWith {}; - private _house = selectRandom _houses; + private _pos = (_houses deleteAt 0) buildingPos 0; - private _pos = _house buildingPos 0; private _group = createGroup civilian; _group setVariable ["btc_data_inhouse", [_pos]]; [_group, _pos] call btc_fnc_civ_addWP; [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_delay_createUnit; - - _houses = _houses - [_house]; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/roof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/roof.sqf new file mode 100644 index 000000000..092cfb068 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/roof.sqf @@ -0,0 +1,57 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_roof + +Description: + Get roof. + +Parameters: + _house - House to find the roof. [Group] + +Returns: + _spawnPos - Roof position. [Array] + _surfaceNormal - Surface normal. [Array] + +Examples: + (begin example) + _result = [([position player, 30] call btc_fnc_getHouses) select 0] call btc_fnc_roof; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_house", objNull, [objNull]] +]; + +private _positions = _house buildingPos -1; +{ + reverse _x +} forEach _positions; +_positions sort false; +private _higherPos = _positions select 0; +reverse _higherPos; +private _ASL = AGLToASL _higherPos; + +private _surface = lineIntersectsSurfaces [_ASL vectorAdd [0, 0, 10], _ASL]; + +private _spawnPos = _ASL; +private _surfaceNormal = [0, 0, 1]; +if (_surface isEqualTo []) then { // Try to find again the roof with house position + _surface = lineIntersectsSurfaces [_ASL vectorAdd [0, 0, 10], getPosASL _house]; +}; + +if !(_surface isEqualTo []) then { + private _intersect = _surface select 0; + if ( + (_intersect select 2) isEqualTo _house && + {(_spawnPos select 2) + 0.5 < (_intersect select 0 select 2)} + ) then { + _spawnPos = (_intersect select 0) vectorAdd [0, 0, 0.2]; + _surfaceNormal = _intersect select 1; + }; +}; + +[_spawnPos, _surfaceNormal] diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 4717cca8a..4d486f6c5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -22,6 +22,7 @@ if (isServer) then { btc_fnc_typeOf = compile preprocessFileLineNumbers "core\fnc\common\typeOf.sqf"; btc_fnc_getVehProperties = compile preprocessFileLineNumbers "core\fnc\common\getVehProperties.sqf"; btc_fnc_setVehProperties = compile preprocessFileLineNumbers "core\fnc\common\setVehProperties.sqf"; + btc_fnc_roof = compile preprocessFileLineNumbers "core\fnc\common\roof.sqf"; //CHEM btc_fnc_chem_checkLoop = compile preprocessFileLineNumbers "core\fnc\chem\checkLoop.sqf"; @@ -124,6 +125,7 @@ if (isServer) then { btc_fnc_mil_createVehicle = compile preprocessFileLineNumbers "core\fnc\mil\createVehicle.sqf"; btc_fnc_mil_createUnits = compile preprocessFileLineNumbers "core\fnc\mil\createUnits.sqf"; btc_fnc_mil_unit_killed = compile preprocessFileLineNumbers "core\fnc\mil\unit_killed.sqf"; + btc_fnc_mil_create_staticOnRoof = compile preprocessFileLineNumbers "core\fnc\mil\create_staticOnRoof.sqf"; //PATROL btc_fnc_patrol_playersInAreaCityGroup = compile preprocessFileLineNumbers "core\fnc\patrol\playersInAreaCityGroup.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf index 6ec16733c..2f33bf81d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/get_group.sqf @@ -76,7 +76,7 @@ if ( {!(_type_db isEqualTo 7)} ) then { _type_db = 1; - _array_veh = [typeOf _vehicle, getPosATL _vehicle, getDir _vehicle, fuel _vehicle]; + _array_veh = [typeOf _vehicle, getPosATL _vehicle, getDir _vehicle, fuel _vehicle, vectorUp _vehicle]; }; [_vehicle, _group] call CBA_fnc_deleteEntity; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 361c00546..7288aa853 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -57,7 +57,8 @@ if (_type isEqualTo 7) exitWith { private _group = createGroup _side; if (_type isEqualTo 1) then { - _delay = [_group, _array_veh select 0, _array_type, _array_veh select 1, _array_veh select 2, _array_veh select 3] call btc_fnc_delay_createVehicle; + _array_veh params ["_typeOf", "_posATL", "_dir", "_fuel", ["_vectorUp", []]]; + _delay = [_group, _typeOf, _array_type, _posATL, _dir, _fuel, _vectorUp] call btc_fnc_delay_createVehicle; } else { for "_i" from 0 to (count _array_pos - 1) do { [_group, _array_type select _i, _array_pos select _i, "CAN_COLLIDE"] call btc_fnc_delay_createUnit; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf index 124717dea..455b67ec5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createVehicle.sqf @@ -12,6 +12,7 @@ Parameters: _position - Position of creation. [Array] _direction - Direction of spawn. [Number] _fuel - Fuel level. [Array] + _surfaceNormal - Surface normal. [Array] Returns: _delay_vehicle - Delay for unit creation. [Number] @@ -36,14 +37,18 @@ btc_delay_createUnit = btc_delay_createUnit + 0.3; ["_units_type", [], [[]]], ["_position", [0, 0, 0], [[]]], ["_direction", 0, [0]], - ["_fuel", 1, [0]] + ["_fuel", 1, [0]], + ["_surfaceNormal", [], [[]]] ]; private _isAir = _vehicle_type isKindOf "Air"; private _veh = createVehicle [_vehicle_type, _position, [], 0, ["CAN_COLLIDE", "FLY"] select _isAir]; if !(_isAir) then { _veh setDir _direction; - _veh setVectorUp surfaceNormal position _veh; + if (_surfaceNormal isEqualTo []) then { + _surfaceNormal = surfaceNormal position _veh; + }; + _veh setVectorUp _surfaceNormal; }; _veh setFuel _fuel; [_veh, "", []] call BIS_fnc_initvehicle; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf index df970cc36..058a57482 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/createVehicle.sqf @@ -13,6 +13,7 @@ Parameters: _type_units - Array of available unit type for cargo. [Array] _type_divers - Units used for submarine. [Array] _type_crewmen - Array of available crews type. [Array] + _surfaceNormal - Surface normal. [Array] Returns: _delay_vehicle - Delay for unit creation. [Number] @@ -37,6 +38,7 @@ params [ ["_pos", [0, 0, 0], [[]]], ["_veh_type", selectRandom btc_type_motorized, [""]], ["_dir", 0, [0]], + ["_surfaceNormal", [], [[]]], ["_type_units", btc_type_units, [[]]], ["_type_divers", btc_type_divers, [[]]], ["_type_crewmen", btc_type_crewmen, [[]]] @@ -55,4 +57,4 @@ for "_i" from _crewSeats to (_totalSeats - 1) do { _units_type pushBack selectRandom _type_units; }; -[_group, _veh_type, _units_type, _pos, _dir] call btc_fnc_delay_createVehicle +[_group, _veh_type, _units_type, _pos, _dir, 1, _surfaceNormal] call btc_fnc_delay_createVehicle diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf index 482680c07..f36298114 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf @@ -9,6 +9,7 @@ Parameters: _pos - Position of creation. [Array] _statics_type - Type of static available. [Array] _dir - Direction of the static. [Number] + _surfaceNormal - Surface normal. [Array] Returns: _static - Created static. [Object] @@ -26,12 +27,13 @@ Author: params [ ["_pos", [0, 0, 0], [[]]], ["_statics_type", btc_type_mg, [[]]], - ["_dir", 0, [0]] + ["_dir", 0, [0]], + ["_surfaceNormal", [], [[]]] ]; private _group = createGroup btc_enemy_side; [_group] call CBA_fnc_clearWaypoints; -[_group, _pos, selectRandom _statics_type, _dir] call btc_fnc_mil_createVehicle; +[_group, _pos, selectRandom _statics_type, _dir, _surfaceNormal] call btc_fnc_mil_createVehicle; _group setBehaviour "COMBAT"; _group setCombatMode "RED"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf new file mode 100644 index 000000000..b639bd415 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf @@ -0,0 +1,36 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_mil_create_staticOnRoof + +Description: + Create static on roof. + +Parameters: + _house - House to find the roof. [Group] + _n - Number of static to generate. [Number] + +Returns: + +Examples: + (begin example) + _result = [[position player, 30] call btc_fnc_getHouses, 3] call btc_fnc_mil_create_staticOnRoof; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_houses", [], [[]]], + ["_n", 0, [0]] +]; + +for "_i" from 1 to _n do { + if (_houses isEqualTo []) exitWith {}; + + private _house = _houses deleteAt 0; + ([_house] call btc_fnc_roof) params ["_spawnPos", "_surfaceNormal"]; + + [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 594d13c26..05439fa92 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -334,6 +334,9 @@ 敌军密度: Densidade inimiga: + + Enemy static density: + Civilian density: Zivilistendichte: From 579302f56302a558d0bc9178fdb599c485fcf8a6 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 13 Oct 2020 18:47:59 +0200 Subject: [PATCH 201/264] Handle roof with high angle --- .../core/fnc/mil/create_staticOnRoof.sqf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf index b639bd415..7a597c1b9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf @@ -26,11 +26,17 @@ params [ ["_n", 0, [0]] ]; +private _j = 1; for "_i" from 1 to _n do { if (_houses isEqualTo []) exitWith {}; private _house = _houses deleteAt 0; ([_house] call btc_fnc_roof) params ["_spawnPos", "_surfaceNormal"]; - [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; + if (acos (_surfaceNormal vectorCos [0, 0, 1]) < 30) then { + [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; + _j = _i; + } else { + _i = _j; + }; }; From 2c8c0ae90c36cca4f1bf568fa450f52fbf9cb886 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 13 Oct 2020 20:42:42 +0200 Subject: [PATCH 202/264] Don't use BI EH because it fired twice --- .../core/fnc/eh/player.sqf | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf index b64cab2d2..738dbae7e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/player.sqf @@ -28,11 +28,13 @@ params [ [_player, "Respawn", { if !(ace_map_mapIllumination) then {ace_map_mapIllumination = btc_map_mapIllumination;}; }] call CBA_fnc_addBISEventHandler; -_player addEventHandler ["Killed", { +["ace_killed", { + params ["_unit"]; + if !(_unit isEqualTo player) exitWith {}; if (ace_map_mapIllumination) then {ace_map_mapIllumination = false;}; if (isObjectHidden player) exitWith {}; [btc_rep_malus_player_respawn, player] remoteExecCall ["btc_fnc_rep_change", 2]; -}]; +}] call CBA_fnc_addEventHandler; _player addEventHandler ["CuratorObjectPlaced", btc_fnc_eh_CuratorObjectPlaced]; ["ace_treatmentSucceded", btc_fnc_rep_treatment] call CBA_fnc_addEventHandler; _player addEventHandler ["WeaponAssembled", btc_fnc_civ_add_leaflets]; @@ -84,8 +86,10 @@ if (btc_p_respawn_arsenal) then { }; if (btc_p_respawn_location >= 4) then { - [_player, "Killed", { + ["ace_killed", { + params ["_unit"]; + if !(_unit isEqualTo player) exitWith {}; private _group = group player; [_group, leader _group] call BIS_fnc_addRespawnPosition; - }] call CBA_fnc_addBISEventHandler; + }] call CBA_fnc_addEventHandler; }; From 78c57c22b8fe60e8496b163e6bdd3e335ac455dc Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 16 Oct 2020 13:07:42 +0200 Subject: [PATCH 203/264] FIX: Convoy mission stuck due to empty path array --- .../core/fnc/side/capture_officer.sqf | 4 +++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 9d51c8bb1..1c0084e3f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -70,7 +70,9 @@ private _markers = [_marker1, _marker2, _area]; private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; -waitUntil {!((_agent getVariable ["btc_path", []]) isEqualTo [])}; +waitUntil { + !isNil {_agent getVariable "btc_path"} +}; private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 3b65ba409..1341f1a65 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -70,7 +70,9 @@ private _markers = [_marker1, _marker2, _area]; private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; -waitUntil {!((_agent getVariable ["btc_path", []]) isEqualTo [])}; +waitUntil { + !isNil {_agent getVariable "btc_path"} +}; private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); From 44b3d50820545458ffc08c9e079d44ceb5253600 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 18 Oct 2020 01:52:38 +0200 Subject: [PATCH 204/264] FIX: flipped vehicle more accuratly --- .../core/fnc/tow/ropeBreak.sqf | 15 +++++++++------ .../core/fnc/tow/ropeCreate.sqf | 17 +++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf index 590d125df..a59cc2ada 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeBreak.sqf @@ -24,25 +24,28 @@ _thisArgsCBA params ["_vehicleSelected", "_safeDistance", "_ropes"]; _tower removeEventHandler ["RopeBreak", _thisId]; +(_vehicleSelected call BIS_fnc_getPitchBank) params ["_pitch", "_bank"]; private _vectorUp = vectorUp _flat; private _vectorDir = vectorDir _flat; + _ropes apply {deleteVehicle _x}; deTach _vehicleSelected; _flat setPos [0, 0, 0]; // Avoid collision with _vehicleSelected // Handle flipped vehicle -private _bank = _vehicleSelected call BIS_fnc_getPitchBank select 1; -if !( - (vectorUp _vehicleSelected vectorDotProduct surfaceNormal getPos _vehicleSelected) < -0.80 && - 55 > abs _bank +if ( + _pitch < 45 && + _pitch > - 45 && + _bank < 45 && + _bank > - 45 ) then { + [_vehicleSelected, [_vectorDir, _vectorUp]] remoteExecCall ["setVectorDirAndUp", _vehicleSelected]; +} else { private _towerDir = getDir _tower; private _selectedSafePos = _tower getPos [- _safeDistance, _towerDir]; _selectedSafePos set [2, 0.5 + (_selectedSafePos select 2)]; _vehicleSelected setPos _selectedSafePos; _vehicleSelected setDir _towerDir; -} else { - [_vehicleSelected, [_vectorDir, _vectorUp]] remoteExecCall ["setVectorDirAndUp", _vehicleSelected]; }; if !( diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index fa1625006..48e1b7976 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -31,10 +31,12 @@ if (_tower setVehicleCargo _vehicleSelected) exitWith {}; (localize "STR_BTC_HAM_TOW_WAIT") call CBA_fnc_notify; -private _bank = _vehicleSelected call BIS_fnc_getPitchBank select 1; +(_vehicleSelected call BIS_fnc_getPitchBank) params ["_pitch", "_bank"]; if !( - !((vectorUp _vehicleSelected vectorDotProduct surfaceNormal getPos _vehicleSelected) < -0.80) && - 55 > abs _bank + _pitch < 45 && + _pitch > - 45 && + _bank < 45 && + _bank > - 45 ) exitWith { [_vehicleSelected, { params ["_vehicleSelected"]; @@ -48,9 +50,12 @@ if !( [{ params ["_tower", "_vehicleSelected"]; - private _bank = _vehicleSelected call BIS_fnc_getPitchBank select 1; - !((vectorUp _vehicleSelected vectorDotProduct surfaceNormal getPos _vehicleSelected) < -0.80) && - 55 > abs _bank + (_vehicleSelected call BIS_fnc_getPitchBank) params ["_pitch", "_bank"]; + + _pitch < 45 && + _pitch > - 45 && + _bank < 45 && + _bank > - 45 }, btc_fnc_tow_ropeCreate, [_tower, _vehicleSelected], 10] call CBA_fnc_waitUntilAndExecute; }; From 9729124264fe6da3848301af1bb2d21485f63444 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 19 Oct 2020 20:29:26 +0200 Subject: [PATCH 205/264] Add support for polyline and proper channel --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 5 +++-- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- docs/InGame-documentation.md | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 470e352ef..1b8d886ad 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -184,9 +184,9 @@ private _id = ["ace_tagCreated", { //Player Markers private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_markers", _name], []]; { - _x params ["_markerText", "_markerPos", "_markerColor", "_markerType", "_markerSize", "_markerAlpha", "_markerBrush", "_markerDir", "_markerShape"]; + _x params ["_markerText", "_markerPos", "_markerColor", "_markerType", "_markerSize", "_markerAlpha", "_markerBrush", "_markerDir", "_markerShape", "_markerPolyline", "_markerChannel"]; - private _marker = createMarker [format ["_USER_DEFINED #0/%1/0", _forEachindex], _markerPos]; + private _marker = createMarker [format ["_USER_DEFINED #0/%1", _forEachindex, _markerChannel], _markerPos]; _marker setMarkerText _markerText; _marker setMarkerColor _markerColor; _marker setMarkerType _markerType; @@ -195,4 +195,5 @@ private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_m _marker setMarkerBrush _markerBrush; _marker setMarkerDir _markerDir; _marker setMarkerShape _markerShape; + _marker setMarkerPolyline _markerPolyline; } forEach _markers_properties; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index f7117b3c3..316a4e8ba 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -187,7 +187,7 @@ profileNamespace setVariable [format ["btc_hm_%1_tags", _name], _tags_properties //Player Markers private _player_markers = allMapMarkers select {(_x select [0, 15]) isEqualTo "_USER_DEFINED #"}; private _markers_properties = _player_markers apply { - [markerText _x, markerPos _x, markerColor _x, markerType _x, markerSize _x, markerAlpha _x, markerBrush _x, markerDir _x, markerShape _x] + [markerText _x, markerPos _x, markerColor _x, markerType _x, markerSize _x, markerAlpha _x, markerBrush _x, markerDir _x, markerShape _x, markerPolyline _x, markerChannel _x] }; profileNamespace setVariable [format ["btc_hm_%1_markers", _name], _markers_properties]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 594d13c26..5692e96fb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -78,7 +78,7 @@ 无头客户端与数据库 - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers on global/camp channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index a4037d878..10e129290 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -3,7 +3,7 @@ ## Headless & Database This mission automatically uses one Headless client when available. -This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers (not lines) on global channel are saved. All admin can save mission progress at any time with his self interaction key. +This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers on global/camp channel are saved. All admin can save mission progress at any time with his self interaction key. ## Chemical Warfare From 872235fcf74042b2c00885e049bf9525955f33e8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 20 Oct 2020 13:45:36 +0200 Subject: [PATCH 206/264] Remove PersistOnLocalityChange --- .../core/fnc/cache/create.sqf | 2 +- .../core/fnc/compile.sqf | 8 +- .../core/fnc/eh/headless.sqf | 42 +++++++++++ .../core/fnc/eh/persistOnLocalityChange.sqf | 75 ------------------- .../fnc/eh/removePersistOnLocalityChange.sqf | 56 -------------- .../core/fnc/eh/server.sqf | 14 +++- .../core/fnc/patrol/addEH.sqf | 2 - .../core/init_headless.sqf | 2 + 8 files changed, 63 insertions(+), 138 deletions(-) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/persistOnLocalityChange.sqf delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/removePersistOnLocalityChange.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf index bddf48a65..ecea6be39 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf @@ -45,7 +45,7 @@ clearWeaponCargoGlobal btc_cache_obj; clearItemCargoGlobal btc_cache_obj; clearMagazineCargoGlobal btc_cache_obj; -[btc_cache_obj, "HandleDamage", "btc_fnc_cache_hd_cache"] call btc_fnc_eh_persistOnLocalityChange; +[btc_cache_obj, "HandleDamage", btc_fnc_cache_hd_cache] remoteExecCall ["CBA_fnc_addBISEventHandler", 0, true]; if (_isChem) then { btc_chem_contaminated pushBack btc_cache_obj; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 4717cca8a..338a80db6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -210,9 +210,8 @@ btc_fnc_debug_message = compile preprocessFileLineNumbers "core\fnc\debug\messag //DB btc_fnc_db_add_veh = compile preprocessFileLineNumbers "core\fnc\db\add_veh.sqf"; + //EH -btc_fnc_eh_persistOnLocalityChange = compile preprocessFileLineNumbers "core\fnc\eh\persistOnLocalityChange.sqf"; -btc_fnc_eh_removePersistOnLocalityChange = compile preprocessFileLineNumbers "core\fnc\eh\removePersistOnLocalityChange.sqf"; btc_fnc_eh_trackItem = compile preprocessFileLineNumbers "core\fnc\eh\trackItem.sqf"; //CIV @@ -358,3 +357,8 @@ if (!isDedicated) then { btc_fnc_tow_hitch_points = compile preprocessFileLineNumbers "core\fnc\tow\hitch_points.sqf"; btc_fnc_tow_unhook = compile preprocessFileLineNumbers "core\fnc\tow\unhook.sqf"; }; + +/////////////////////HEADLESS\\\\\\\\\\\\\\\\\\\\\ +if (!hasInterface && !isDedicated) then { + btc_fnc_eh_headless = compile preprocessFileLineNumbers "core\fnc\eh\headless.sqf"; +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf new file mode 100644 index 000000000..db48daf6a --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf @@ -0,0 +1,42 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_eh_headless + +Description: + Add local events handler to headless client. + +Parameters: + +Returns: + +Examples: + (begin example) + [] call btc_fnc_eh_headless; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +["Animal", "InitPost", { + [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; +}, true, [], true] call CBA_fnc_addClassEventHandler; + +{ + [_x, "InitPost", { + [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; + }, false, [], true] call CBA_fnc_addClassEventHandler; +} forEach btc_civ_type_units; +{ + [_x, "InitPost", { + [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; + }, false, [], true] call CBA_fnc_addClassEventHandler; +} forEach btc_civ_type_veh; + +{ + [_x, "InitPost", { + [(_this select 0), "HandleDamage", btc_fnc_patrol_disabled] call CBA_fnc_addBISEventHandler; + }, false, [], true] call CBA_fnc_addClassEventHandler; +} forEach btc_civ_type_veh; + diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/persistOnLocalityChange.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/persistOnLocalityChange.sqf deleted file mode 100644 index eceee0ca4..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/persistOnLocalityChange.sqf +++ /dev/null @@ -1,75 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_persistOnLocalityChange - -Description: - Some event handler (EH) are trigger where the unit is local. This add EH to headless or client on locality change. When locality change back to server, the EH is removed from client. EH are always keep on server in case client lost connection. - -Parameters: - _object - Object where to add the event handler. [Object] - _EH_name - Name of the event handler. [String] - _EH_fnc - Name of the function executed when the EH is triggered. [Array] - _params - Params to pass to the event. [Array] - -Returns: - _EH_IDs - Local EH ID and ID of the EH. [Array] - -Examples: - (begin example) - [cursorObject, "Killed", "btc_fnc_mil_unit_killed"] call btc_fnc_eh_persistOnLocalityChange; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_object", objNull, [objNull]], - ["_EH_name", "", [""]], - ["_EH_fnc", "", [""]], - ["_params", [], [[]]] -]; - -private _EH_IDs = [ - _object addEventHandler [_EH_name, - if (_params isEqualTo []) then { - missionNamespace getVariable [_EH_fnc, {}] - } else { - format ["%1 call %2", _params, _EH_fnc] - } - ] -]; - -if ((toLower _EH_name) in ["killed", "handledamage", "hit"]) then { // Those EH are only trigger where object is local - _EH_IDs pushBack ( - [_object, "Local", { - params ["_entity", "_isLocal"]; - - if !(_isLocal) then { - _thisArgs params [ - ["_EH_name", "", [""]], - ["_EH_fnc", "", [""]], - ["_params", [], [[]]] - ]; - - if !(isServer) then { // Keep EH on server in case owner drop connection - [_entity, _EH_name, _EH_fnc, false] call btc_fnc_eh_removePersistOnLocalityChange; - } else { - [_entity, _EH_name, _EH_fnc, _params] remoteExecCall ["btc_fnc_eh_persistOnLocalityChange", _entity]; - }; - }; - }, [_EH_name, _EH_fnc, _params]] call CBA_fnc_addBISEventHandler - ); -}; - -if (btc_debug_log) then { - [format ["%1: EH = %2, fnc = %3, isRE = %4", _object, _EH_name, _EH_fnc, isRemoteExecuted], __FILE__, [false]] call btc_fnc_debug_message; -}; - -_object setVariable [ - _EH_fnc + _EH_name, - _EH_IDs -]; - -_EH_IDs diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/removePersistOnLocalityChange.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/removePersistOnLocalityChange.sqf deleted file mode 100644 index 92785ef14..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/removePersistOnLocalityChange.sqf +++ /dev/null @@ -1,56 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_removePersistOnLocalityChange - -Description: - Remove persistant event handler from client owner and server. - -Parameters: - _object - Object where to add the event handler. [Object] - _EH_name - Name of the event handler. [String] - _EH_fnc - Name of the function executed when the EH is triggered. [Array] - _removeServerSide - Also remove the EH on the server. [Boolean] - -Returns: - _EH_IDs - Local EH ID and ID of the EH. [Array] - -Examples: - (begin example) - [cursorObject, "Killed", "btc_fnc_rep_killed"] call btc_fnc_eh_removePersistOnLocalityChange; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_object", objNull, [objNull]], - ["_EH_name", "", [""]], - ["_EH_fnc", "", [""]], - ["_removeServerSide", true, [true]] -]; - -private _EH_IDs = _object getVariable [_EH_fnc + _EH_name, []]; - -if (btc_debug_log) then { - [format ["%1: EH = %2, fnc = %3, isR = %4, IDs %5", _object, _EH_name, _EH_fnc, isRemoteExecuted, _EH_IDs], __FILE__, [false]] call btc_fnc_debug_message; -}; - -if !(_EH_IDs isEqualTo []) then { - _object removeEventHandler [_EH_name, _EH_IDs select 0]; - if (count _EH_IDs > 1) then { - _object removeEventHandler ["Local", _EH_IDs select 1]; - }; - - _object setVariable [ - _EH_fnc + _EH_name, - nil - ]; -}; - -if (!isServer && _removeServerSide) then { - [_object, _EH_name, _EH_fnc] remoteExecCall ["btc_fnc_eh_removePersistOnLocalityChange", 2]; -}; - -_EH_IDs diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 48aa8b277..3c72e2275 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -23,7 +23,7 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; ["ace_explosives_defuse", btc_fnc_rep_explosives_defuse] call CBA_fnc_addEventHandler; ["ace_killed", btc_fnc_rep_killed] call CBA_fnc_addEventHandler; ["Animal", "InitPost", { - [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; + [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; }] call CBA_fnc_addClassEventHandler; ["Animal", "killed", { params ["_unit", "_killer", "_instigator"]; @@ -32,9 +32,14 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; { [_x, "InitPost", { [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; - [(_this select 0), "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; + [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; }, false] call CBA_fnc_addClassEventHandler; } forEach btc_civ_type_units; +{ + [_x, "InitPost", { + [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; + }, false] call CBA_fnc_addClassEventHandler; +} forEach btc_civ_type_veh; ["ace_killed", btc_fnc_mil_unit_killed] call CBA_fnc_addEventHandler; addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; @@ -66,4 +71,9 @@ if (btc_p_set_skill) then { [[], [_vehicle]] call btc_fnc_delete; }; }] call CBA_fnc_addEventHandler; +{ + [_x, "InitPost", { + [(_this select 0), "HandleDamage", btc_fnc_patrol_disabled] call CBA_fnc_addBISEventHandler; + }, false] call CBA_fnc_addClassEventHandler; +} forEach btc_civ_type_veh; ["ace_tagCreated", btc_fnc_tag_eh] call CBA_fnc_addEventHandler; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf index 61e1e7b65..b8ab18a49 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/addEH.sqf @@ -31,6 +31,4 @@ _veh setVariable ["btc_crews", _group]; [_veh, "Fuel", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; if (side _group isEqualTo civilian) then { [_veh, "GetOut", btc_fnc_patrol_eh] call CBA_fnc_addBISEventHandler; - [_veh, "HandleDamage", "btc_fnc_patrol_disabled"] call btc_fnc_eh_persistOnLocalityChange; - [_veh, "HandleDamage", "btc_fnc_rep_hd"] call btc_fnc_eh_persistOnLocalityChange; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_headless.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_headless.sqf index 205066cfe..4ffb05693 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_headless.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_headless.sqf @@ -1,2 +1,4 @@ +[] call btc_fnc_eh_headless; + //Move btc_patrol_active group to HC [] remoteExecCall ["btc_fnc_set_groupsOwner", 2]; From a2d4c8a057136ff707745bd951de842997915d52 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 20 Oct 2020 13:47:44 +0200 Subject: [PATCH 207/264] Remove btc_fnc_eh_handledisconnect --- .../core/fnc/compile.sqf | 1 - .../core/fnc/eh/handledisconnect.sqf | 30 ------------------- .../core/fnc/eh/server.sqf | 7 ++++- 3 files changed, 6 insertions(+), 32 deletions(-) delete mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/handledisconnect.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 4717cca8a..e02e09436 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -73,7 +73,6 @@ if (isServer) then { btc_fnc_eh_veh_add_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_add_respawn.sqf"; btc_fnc_eh_veh_killed = compile preprocessFileLineNumbers "core\fnc\eh\veh_killed.sqf"; btc_fnc_eh_veh_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_respawn.sqf"; - btc_fnc_eh_handledisconnect = compile preprocessFileLineNumbers "core\fnc\eh\handledisconnect.sqf"; btc_fnc_eh_server = compile preprocessFileLineNumbers "core\fnc\eh\server.sqf"; //IED diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/handledisconnect.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/handledisconnect.sqf deleted file mode 100644 index 02985472a..000000000 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/handledisconnect.sqf +++ /dev/null @@ -1,30 +0,0 @@ - -/* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_handledisconnect - -Description: - Delete headless. - -Parameters: - _headless - Headless object. [Object] - -Returns: - -Examples: - (begin example) - [headless] call btc_fnc_eh_handledisconnect; - (end) - -Author: - Vdauphin - ----------------------------------------------------------------------------- */ - -params [ - ["_headless", objNull, [objNull]] -]; - -if (_headless in (entities "HeadlessClient_F")) then { - //Remove HC player when disconnect - deleteVehicle _headless; -}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index 48aa8b277..ccb81848d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -37,7 +37,12 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; } forEach btc_civ_type_units; ["ace_killed", btc_fnc_mil_unit_killed] call CBA_fnc_addEventHandler; -addMissionEventHandler ["HandleDisconnect", btc_fnc_eh_handledisconnect]; +addMissionEventHandler ["HandleDisconnect", { + params ["_headless"]; + if (_headless in (entities "HeadlessClient_F")) then { + deleteVehicle _headless; + }; +}]; if (btc_p_auto_db) then { addMissionEventHandler ["HandleDisconnect", { if ((allPlayers - entities "HeadlessClient_F") isEqualTo []) then { From 18e5e15a60a69da6e62cbbfa63ce0e67590ffec5 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 20 Oct 2020 13:59:52 +0200 Subject: [PATCH 208/264] Create a proper folder for vehicle system --- .../core/fnc/arsenal/garage.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf | 8 +++++--- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 2 +- .../core/fnc/db/load_old.sqf | 2 +- .../core/fnc/eh/functions.hpp | 4 ++-- .../core/fnc/eh/xeh_InitPost_EH_Vehicle.hpp | 2 +- .../fnc/{eh/veh_add_respawn.sqf => veh/addRespawn.sqf} | 6 +++--- .../core/fnc/{eh/veh_init.sqf => veh/init.sqf} | 4 ++-- .../core/fnc/{eh/veh_killed.sqf => veh/killed.sqf} | 4 ++-- .../core/fnc/{eh/veh_respawn.sqf => veh/respawn.sqf} | 6 +++--- =BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf | 2 +- 12 files changed, 23 insertions(+), 21 deletions(-) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/{eh/veh_add_respawn.sqf => veh/addRespawn.sqf} (92%) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/{eh/veh_init.sqf => veh/init.sqf} (97%) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/{eh/veh_killed.sqf => veh/killed.sqf} (94%) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/{eh/veh_respawn.sqf => veh/respawn.sqf} (94%) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/garage.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/garage.sqf index e1e7c7941..9939f84bd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/garage.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/arsenal/garage.sqf @@ -56,6 +56,6 @@ with uiNamespace do { _x call CBA_fnc_deleteEntity; [_type, _pos, _dir, _customization] remoteExecCall ["btc_fnc_log_createVehicle", 2]; - [_type] remoteExecCall ["btc_fnc_eh_veh_init", -2]; + [_type] remoteExecCall ["btc_fnc_veh_init", -2]; } forEach _veh_list; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 4717cca8a..20003fee0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -70,9 +70,6 @@ if (isServer) then { btc_fnc_delay_exec = compile preprocessFileLineNumbers "core\fnc\delay\exec.sqf"; //EH - btc_fnc_eh_veh_add_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_add_respawn.sqf"; - btc_fnc_eh_veh_killed = compile preprocessFileLineNumbers "core\fnc\eh\veh_killed.sqf"; - btc_fnc_eh_veh_respawn = compile preprocessFileLineNumbers "core\fnc\eh\veh_respawn.sqf"; btc_fnc_eh_handledisconnect = compile preprocessFileLineNumbers "core\fnc\eh\handledisconnect.sqf"; btc_fnc_eh_server = compile preprocessFileLineNumbers "core\fnc\eh\server.sqf"; @@ -187,6 +184,11 @@ if (isServer) then { //TASK btc_fnc_task_create = compile preprocessFileLineNumbers "core\fnc\task\create.sqf"; btc_fnc_task_setState = compile preprocessFileLineNumbers "core\fnc\task\setState.sqf"; + + //VEH + btc_fnc_veh_addRespawn = compile preprocessFileLineNumbers "core\fnc\veh\addRespawn.sqf"; + btc_fnc_veh_killed = compile preprocessFileLineNumbers "core\fnc\veh\killed.sqf"; + btc_fnc_veh_respawn = compile preprocessFileLineNumbers "core\fnc\veh\respawn.sqf"; }; /////////////////////CLIENT AND SERVER\\\\\\\\\\\\\\\\\\\\\ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf index b7445c9ca..37216b336 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/add_veh.sqf @@ -36,7 +36,7 @@ _veh addMPEventHandler ["MPKilled", { {_unit getVariable ["btc_killed", true]} // https://feedback.bistudio.com/T149510 ) then { _unit setVariable ["btc_killed", false]; - _this call btc_fnc_eh_veh_killed; + _this call btc_fnc_veh_killed; }; }]; if ((isNumber (configfile >> "CfgVehicles" >> typeOf _veh >> "ace_fastroping_enabled")) && !(typeOf _veh isEqualTo "RHS_UH1Y_d")) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 470e352ef..315cd7274 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -160,7 +160,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; if !(alive _veh) then { - [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; + [_veh, objNull, objNull, false] call btc_fnc_veh_killed; }; } forEach _this; }, _vehs] call CBA_fnc_execNextFrame; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf index 94fd21d78..e91d47492 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf @@ -154,7 +154,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], [_veh, _veh_cargo, _veh_cont] call btc_fnc_db_loadCargo; if !(alive _veh) then { - [_veh, objNull, objNull, false] call btc_fnc_eh_veh_killed; + [_veh, objNull, objNull, false] call btc_fnc_veh_killed; }; } forEach _this; }, _vehs, 0.5] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/functions.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/functions.hpp index d95847e51..18695f7fb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/functions.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/functions.hpp @@ -1,7 +1,7 @@ class btc { class misc { - class eh_veh_init { - file = "core\fnc\eh\veh_init.sqf";//preInit = 1; + class veh_init { + file = "core\fnc\veh\init.sqf";//preInit = 1; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/xeh_InitPost_EH_Vehicle.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/xeh_InitPost_EH_Vehicle.hpp index 203ffe0c2..3125399a3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/xeh_InitPost_EH_Vehicle.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/xeh_InitPost_EH_Vehicle.hpp @@ -1,3 +1,3 @@ class btc_actions { - init = "[typeOf (_this select 0)] call btc_fnc_eh_veh_init"; + init = "[typeOf (_this select 0)] call btc_fnc_veh_init"; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf similarity index 92% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf index 60ec4e0d6..9dc735487 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_add_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_veh_add_respawn +Function: btc_fnc_veh_addRespawn Description: Add a vehicle to the respawn system and save vehicle parameters. @@ -15,7 +15,7 @@ Returns: Examples: (begin example) - [cursorObject, 30] call btc_fnc_eh_veh_add_respawn; + [cursorObject, 30] call btc_fnc_veh_addRespawn; (end) Author: @@ -48,7 +48,7 @@ _vehicle addMPEventHandler ["MPKilled", { {_unit getVariable ["btc_killed", true]} // https://feedback.bistudio.com/T149510 ) then { _unit setVariable ["btc_killed", false]; - [_unit] call btc_fnc_eh_veh_respawn; + [_unit] call btc_fnc_veh_respawn; }; }]; if (btc_p_respawn_location > 0) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/init.sqf similarity index 97% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/init.sqf index e96e03c4e..f7b73b6d1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/init.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_veh_init +Function: btc_fnc_veh_init Description: Add custom ACE interaction depends one vehicle type (static weapon, land vehicle, helicopter and ship). @@ -12,7 +12,7 @@ Returns: Examples: (begin example) - ["B_Truck_01_fuel_F"] call btc_fnc_eh_veh_init; + ["B_Truck_01_fuel_F"] call btc_fnc_veh_init; (end) Author: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/killed.sqf similarity index 94% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/killed.sqf index fee10b107..36c925c2e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_killed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/killed.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_veh_killed +Function: btc_fnc_veh_killed Description: Create marker wreck and change reputation on vehicle destruction. @@ -15,7 +15,7 @@ Returns: Examples: (begin example) - [btc_veh_12] call btc_fnc_eh_veh_killed; + [btc_veh_12] call btc_fnc_veh_killed; (end) Author: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf similarity index 94% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf index 5fd513144..4187c95ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/veh_respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_eh_veh_respawn +Function: btc_fnc_veh_respawn Description: Respawn the vehicle passed in parameter. @@ -14,7 +14,7 @@ Returns: Examples: (begin example) - [cursorObject] call btc_fnc_eh_veh_respawn; + [cursorObject] call btc_fnc_veh_respawn; (end) Author: @@ -73,7 +73,7 @@ _data pushBack (_vehicle getVariable ["btc_EDENinventory", []]); [_vehicle, _EDENinventory] call btc_fnc_log_setCargo; }; - [_vehicle, _time] call btc_fnc_eh_veh_add_respawn; + [_vehicle, _time] call btc_fnc_veh_addRespawn; }, _data, 1] call CBA_fnc_waitAndExecute; }, [_vehicle, _data], _data select 3] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index 2b11e95c2..a4f37f05a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -43,7 +43,7 @@ if (btc_p_db_autoRestart > 0) then { { _x setVariable ["btc_EDENinventory", [getWeaponCargo _x, getMagazineCargo _x, getItemCargo _x]]; - [_x, 30] call btc_fnc_eh_veh_add_respawn; + [_x, 30] call btc_fnc_veh_addRespawn; } forEach btc_helo; if (btc_p_side_mission_cycle > 0) then { From f7e0495b04db62222dec35a62e7f458e6bd133a6 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 20 Oct 2020 14:43:50 +0200 Subject: [PATCH 209/264] FIX: missing killed --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf index 9dc735487..9ed468933 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/addRespawn.sqf @@ -48,7 +48,7 @@ _vehicle addMPEventHandler ["MPKilled", { {_unit getVariable ["btc_killed", true]} // https://feedback.bistudio.com/T149510 ) then { _unit setVariable ["btc_killed", false]; - [_unit] call btc_fnc_veh_respawn; + _this call btc_fnc_veh_respawn; }; }]; if (btc_p_respawn_location > 0) then { From a8a059a97bc5c7556d1132eaf60a66365c5036f0 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 20 Oct 2020 15:17:22 +0200 Subject: [PATCH 210/264] Make sure it is triggered only for patrol vehicle --- .../core/fnc/patrol/eh.sqf | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf index 2799d8592..2e1c9e234 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/patrol/eh.sqf @@ -25,19 +25,29 @@ params [ ]; if (_veh getVariable ["btc_fnc_patrol_eh_fired", false]) exitWith {}; +_veh setVariable ["btc_fnc_patrol_eh_fired", true, true]; if (btc_debug_log) then { [format ["%1, isRE %2", _veh, isRemoteExecuted], __FILE__, [false]] call btc_fnc_debug_message; }; -_veh setVariable ["btc_fnc_patrol_eh_fired", true, true]; +private _group = if (_veh isEqualType grpNull) then { + _veh +} else { + _veh getVariable ["btc_crews", grpNull] +}; + +if !( + _group in btc_patrol_active || + _group in btc_civ_veh_active +) exitWith {}; if (_veh isEqualType objNull) then { if (btc_debug) then { - deleteMarker format ["Patrol_fant_%1", (_veh getVariable ["btc_crews", grpNull]) getVariable ["btc_patrol_id", 0]]; + deleteMarker format ["Patrol_fant_%1", _group getVariable ["btc_patrol_id", 0]]; }; - [[], [_veh, _veh getVariable ["btc_crews", grpNull]]] call btc_fnc_delete; + [[], [_veh, _group]] call btc_fnc_delete; } else { private _vehicle = (assignedVehicle leader _veh); _vehicle setVariable ["btc_fnc_patrol_eh_fired", true, true]; From ea45c41323d9ad69b37517f68da8a3f9142175c8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 23 Oct 2020 18:48:03 +0200 Subject: [PATCH 211/264] wrong resolve conflic --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index a48ac2660..8bb8f58f6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -70,7 +70,6 @@ if (isServer) then { btc_fnc_delay_exec = compile preprocessFileLineNumbers "core\fnc\delay\exec.sqf"; //EH - btc_fnc_eh_handledisconnect = compile preprocessFileLineNumbers "core\fnc\eh\handledisconnect.sqf"; btc_fnc_eh_server = compile preprocessFileLineNumbers "core\fnc\eh\server.sqf"; //IED From 65e558024f901c3a7d9ce1b31b18abd3039e4e06 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 24 Oct 2020 17:14:20 +0200 Subject: [PATCH 212/264] Add letter tag --- .../core/fnc/tag/initArea.sqf | 60 +++++++++++++++---- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index 80685c00c..1d6ebb9b5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -57,6 +57,7 @@ if (_array isEqualTo []) then { }; for "_i" from 1 to (_n * 1.5) do { private _sel_pos = [_city, _area] call CBA_fnc_randPos; + private _sel_dir = 0; if !(surfaceIsWater _sel_pos) then { if (isNil "_road" || {isNull _road}) then { private _roads = _sel_pos nearRoads 50; @@ -64,26 +65,63 @@ if (_array isEqualTo []) then { _road = selectRandom _roads; }; } else { - private _arr = [_road, -1] call btc_fnc_ied_randomRoadPos; - _sel_pos = _arr select 0; private _connected = roadsConnectedTo _road; if (_connected isEqualTo []) then { + _sel_pos = ([_road, -1] call btc_fnc_ied_randomRoadPos) select 0; _road = objNull; } else { + _sel_dir = _road getDir (_connected select 0); + _sel_pos = _road getPos [ + random (_road distance (_connected select 0)), + _sel_dir + ]; + _sel_pos = _sel_pos getPos [random 1, _sel_dir + 90 * (selectRandom [1, -1])]; + private _writingDirection = ((AGLToASL _sel_pos) select 2) < ((getPosASL (_connected select 0)) select 2); + _sel_dir = _sel_dir + 90 * ([-1, 1] select _writingDirection); _road = _connected select selectRandomWeighted [0, 0.6, (count _connected) - 1, 0.4]; }; }; - private _surface = surfaceNormal _sel_pos; - private _v1 = vectorNormalized (_surface vectorMultiply -1); - private _v3 = _v1 vectorCrossProduct [0, 0, 1]; - private _v2 = _v3 vectorCrossProduct _v1; - if (_v2 isEqualTo [0, 0, 0]) then { - _v2 = [0, 1, 0]; - }; + if (!isNull _road && {/*random 1 > 0.5*/ true}) then { + private _sentences = [ + "GET OUT", + "LEAVE NOW", + "WE WILL KILL YOU", + "BE AFRAID" + ]; + private _i = 0; + { + if (_x isEqualTo " ") then { + _sel_pos = _sel_pos getPos [1.4, _sel_dir + 90]; + _i = 0; + } else { + private _letterPos = _sel_pos getPos [_i * 0.8, _sel_dir]; + _i = _i + 1; + + private _surface = surfaceNormal _letterPos; + private _v1 = vectorNormalized (_surface vectorMultiply -1); + private _v3 = _v1 vectorCrossProduct [0, 0, 1]; + private _v2 = _v3 vectorCrossProduct _v1; + if (_v2 isEqualTo [0, 0, 0]) then { + _v2 = [0, 1, 0]; + }; + + _letterPos set [2, 0]; + _array pushBack [_letterPos, [_v1, _v2], format ["\a3\ui_f\data\igui\cfg\simpletasks\letters\%1_ca.paa", _x], "UserTexture1m_F"]; + }; + } forEach ((selectRandom _sentences) splitString ""); + } else { + private _surface = surfaceNormal _sel_pos; + private _v1 = vectorNormalized (_surface vectorMultiply -1); + private _v3 = _v1 vectorCrossProduct [0, 0, 1]; + private _v2 = _v3 vectorCrossProduct _v1; + if (_v2 isEqualTo [0, 0, 0]) then { + _v2 = [0, 1, 0]; + }; - _sel_pos set [2, 0]; - _array pushBack [_sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; + _sel_pos set [2, 0]; + _array pushBack [_sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; + }; if (btc_debug) then { private _marker = createMarker [format ["btc_tag_%1", _sel_pos], _sel_pos]; From 666106c04ff1d4066d5933c07900ad67369318ba Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 25 Oct 2020 14:29:06 +0100 Subject: [PATCH 213/264] Add stringtable, databse, reputation --- .../core/def/mission.sqf | 15 +++++++++- .../core/fnc/city/de_activate.sqf | 3 +- .../core/fnc/db/load.sqf | 2 +- .../core/fnc/db/load_old.sqf | 2 +- .../core/fnc/db/save.sqf | 2 +- .../core/fnc/tag/eh.sqf | 17 +++++++---- .../core/fnc/tag/initArea.sqf | 28 +++++++----------- .../stringtable.xml | 29 +++++++++++++++++++ 8 files changed, 69 insertions(+), 29 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 35b7dba3d..26afae71b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -316,7 +316,19 @@ if (isServer) then { //TAGS btc_type_tags = ["Land_Graffiti_01_F", "Land_Graffiti_02_F", "Land_Graffiti_03_F", "Land_Graffiti_04_F", "Land_Graffiti_05_F"]; - btc_tags = []; + btc_type_tags_sentences = [ + "STR_BTC_HAM_TAG_GO", + "STR_BTC_HAM_TAG_LN", + "STR_BTC_HAM_TAG_WWKY", + "STR_BTC_HAM_TAG_BA", + "STR_BTC_HAM_TAG_GH", + "STR_BTC_HAM_TAG_IE", + "STR_BTC_HAM_TAG_DWY", + "STR_BTC_HAM_TAG_WHY", + "STR_BTC_HAM_TAG_YGD" + ]; + btc_tags_player = []; + btc_tags_server = []; //IED private _ieds = ["Land_GarbageContainer_closed_F", "Land_GarbageContainer_open_F", "Land_Portable_generator_F", "Land_WoodenBox_F", "Land_BarrelTrash_grey_F", "Land_Sacks_heap_F", "Land_Wreck_Skodovka_F", "Land_WheelieBin_01_F", "Land_GarbageBin_03_F"] + btc_type_pallet + btc_type_barrel + (_allClassSorted select { @@ -671,6 +683,7 @@ btc_rep_bonus_hideout = 200; btc_rep_bonus_mil_killed = 0.25; btc_rep_bonus_IEDCleanUp = 10; btc_rep_bonus_removeTag = 3; +btc_rep_bonus_removeTagLetter = 0.5; btc_rep_malus_civ_hd = - 2; btc_rep_malus_animal_hd = - 1; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index c94a83130..f05b43932 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -94,7 +94,8 @@ if !(_city getVariable ["active", false]) exitWith {}; typeOf _x ]; _x call CBA_fnc_deleteEntity; - } forEach ((allSimpleObjects btc_type_tags) inAreaArray [_pos_city, _radius, _radius]); + } forEach (btc_tags_server inAreaArray [_pos_city, _radius, _radius]); + btc_tags_server = btc_tags_server - [objNull]; if (btc_debug_log) then { [format ["data units = %1", _data_units], __FILE__, [false]] call btc_fnc_debug_message; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 315cd7274..5a2054476 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -169,7 +169,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], private _tags_properties = profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]; private _id = ["ace_tagCreated", { params ["_tag", "_texture", "_object"]; - btc_tags pushBack [_tag, _texture, _object]; + btc_tags_player pushBack [_tag, _texture, _object]; }] call CBA_fnc_addEventHandler; { _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_typeObject", "_tagModel"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf index e91d47492..9acd4968b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load_old.sqf @@ -169,7 +169,7 @@ private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], private _tags_properties = profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]; private _id = ["ace_tagCreated", { params ["_tag", "_texture", "_object"]; - btc_tags pushBack [_tag, _texture, _object]; + btc_tags_player pushBack [_tag, _texture, _object]; }] call CBA_fnc_addEventHandler; { _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_typeObject", "_tagModel"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index f7117b3c3..7e2fc3c8e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -171,7 +171,7 @@ private _array_obj = []; profileNamespace setVariable [format ["btc_hm_%1_objs", _name], _array_obj]; //Player Tags -private _tags = btc_tags select {alive (_x select 0)}; +private _tags = btc_tags_player select {alive (_x select 0)}; private _tags_properties = _tags apply { private _tag = _x select 0; [ diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf index 9507462e1..33ec48c6a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf @@ -22,21 +22,26 @@ Author: params ["_tag", "_texture", "_object", "_unit"]; -if (_tag isKindOf "Graffiti_base_F") then { +if (_unit in btc_city_all) then { _tag setVariable ["btc_texture", _texture]; //Store texture for city de_activation + btc_tags_server pushBack _tag; } else { if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { //Check if player want to remove a tag private _tags = (allSimpleObjects btc_type_blacklist) inAreaArray [getPosWorld _tag, 3, 3]; if (count _tags > 1) then { _tags = _tags apply {[_x distance _tag, _x]}; _tags sort true; - if ((_tags select 1 select 1) isKindOf "Graffiti_base_F") then { - [btc_rep_bonus_removeTag, _unit] call btc_fnc_rep_change; + private _tagToRemove = _tags select 1 select 1; + if (_tagToRemove in btc_tags_server) then { + [ + [btc_rep_bonus_removeTagLetter, btc_rep_bonus_removeTag] select (_tagToRemove isKindOf "Graffiti_base_F"), + _unit + ] call btc_fnc_rep_change; }; - deleteVehicle (_tags select 1 select 1); + deleteVehicle _tagToRemove; }; deleteVehicle _tag; } else { //Store tag for database - btc_tags pushBack [_tag, _texture, _object]; + btc_tags_player pushBack [_tag, _texture, _object]; }; -}; \ No newline at end of file +}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index 1d6ebb9b5..415e5488c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -82,21 +82,12 @@ if (_array isEqualTo []) then { }; }; - if (!isNull _road && {/*random 1 > 0.5*/ true}) then { - private _sentences = [ - "GET OUT", - "LEAVE NOW", - "WE WILL KILL YOU", - "BE AFRAID" - ]; - private _i = 0; + if (!isNull _road && {random 1 > 0.6}) then { // Draw sentences + private _sentences = ((localize (selectRandom btc_type_tags_sentences)) splitString " "); { - if (_x isEqualTo " ") then { - _sel_pos = _sel_pos getPos [1.4, _sel_dir + 90]; - _i = 0; - } else { - private _letterPos = _sel_pos getPos [_i * 0.8, _sel_dir]; - _i = _i + 1; + private _word = _x; + { + private _letterPos = _sel_pos getPos [_forEachIndex * (0.7 + random 0.2), _sel_dir]; private _surface = surfaceNormal _letterPos; private _v1 = vectorNormalized (_surface vectorMultiply -1); @@ -108,9 +99,10 @@ if (_array isEqualTo []) then { _letterPos set [2, 0]; _array pushBack [_letterPos, [_v1, _v2], format ["\a3\ui_f\data\igui\cfg\simpletasks\letters\%1_ca.paa", _x], "UserTexture1m_F"]; - }; - } forEach ((selectRandom _sentences) splitString ""); - } else { + } forEach (_word splitString ""); + _sel_pos = _sel_pos getPos [1.4, _sel_dir + 90]; + } forEach _sentences; + } else { // Draw simple tag private _surface = surfaceNormal _sel_pos; private _v1 = vectorNormalized (_surface vectorMultiply -1); private _v3 = _v1 vectorCrossProduct [0, 0, 1]; @@ -138,5 +130,5 @@ if (_array isEqualTo []) then { { _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_tagModel"]; - [AGLToASL _tagPosASL, _vectorDirAndUp, _texture, objNull, objNull, "", _tagModel] call ace_tagging_fnc_createTag; + [AGLToASL _tagPosASL, _vectorDirAndUp, _texture, objNull, _city, "", _tagModel] call ace_tagging_fnc_createTag; } forEach _array; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 594d13c26..80dd59bef 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -1693,6 +1693,35 @@ 不! 老子想去哪就去哪! + + + GET OUT + + + LEAVE NOW + + + WE WILL KILL YOU + + + BE AFRAID + + + GO HOME + + + IED EVERYWHERE + + + DRONE WATCHING YOU + + + WE HATE YOU + + + YOU GONNA DIE + + From 17c98cd42bc92fd6c87a01e72a02b2bfa32b4e30 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 25 Oct 2020 16:22:11 +0100 Subject: [PATCH 214/264] Remove useless getvaraible tags --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 48016b5a8..1de81cac9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -54,7 +54,6 @@ private _radius = _city getVariable ["radius", 100]; private _has_en = _city getVariable ["occupied", false]; private _has_ho = _city getVariable ["has_ho", false]; private _ieds = _city getVariable ["ieds", []]; -private _tags = _city getVariable ["tags", []]; private _spawningRadius = _radius/2; if (!_is_init) then { From b3cad21e557c507f46d6d37b6b8c012c135a1a80 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 26 Oct 2020 19:56:08 +0100 Subject: [PATCH 215/264] FIX: Weapon on ammo cache --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 35b7dba3d..887b57df8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -185,8 +185,8 @@ if (isServer) then { ["Land_PlasticCase_01_small_black_CBRN_F", "Land_PlasticCase_01_small_olive_CBRN_F", "Land_PlasticCase_01_small_CBRN_F"] ]; private _weapons_usefull = "true" configClasses (configFile >> "CfgWeapons") select { - getNumber (_x >> 'type') isEqualTo 1 || - {!(getArray (_x >> 'magazines') isEqualTo [])} || + getNumber (_x >> 'type') isEqualTo 1 && + {!(getArray (_x >> 'magazines') isEqualTo [])} && {getNumber (_x >> 'scope') isEqualTo 2} }; btc_cache_weapons_type = _weapons_usefull apply {configName _x}; From 09c3776bbf6c56506d3488417deb53137a59eba4 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 2 Nov 2020 15:11:54 +0100 Subject: [PATCH 216/264] Add: Chemical cache are persistent --- .../core/fnc/cache/create.sqf | 6 +++--- .../core/fnc/db/load.sqf | 15 +++++++++------ .../core/fnc/db/save.sqf | 1 + 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf index ecea6be39..559b833e9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf @@ -8,7 +8,7 @@ Description: Parameters: _cache_pos - Position of the cache. [Array] _p_chem - Create a chemical cache. [Boolean] - _probilityOfChemical - Probability to create a chemical cache. [Number] + _probilityNotChemical - Probability to not create a chemical cache. [Number] Returns: @@ -29,12 +29,12 @@ Author: params [ ["_cache_pos", btc_cache_pos, [[]]], ["_p_chem", btc_p_chem, [true]], - ["_probilityOfChemical", 0.7, [0]] + ["_probilityNotChemical", 0.7, [0]] ]; private _isChem = false; if (_p_chem) then { - _isChem = random 1 > _probilityOfChemical; + _isChem = random 1 > _probilityNotChemical; }; private _cacheType = selectRandom (btc_cache_type select 0); btc_cache_obj = _cacheType createVehicle _cache_pos; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 315cd7274..41470ba37 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -82,21 +82,24 @@ if (btc_hideouts isEqualTo []) then {[] spawn btc_fnc_final_phase;}; //CACHE private _array_cache = profileNamespace getVariable [format ["btc_hm_%1_cache", _name], []]; +_array_cache params ["_cache_pos", "_cache_n", "_cache_info", "_cache_markers", "_cache_pictures", + ["_isChem", false, [true]] +]; -btc_cache_pos = _array_cache select 0; -btc_cache_n = _array_cache select 1; -btc_cache_info = _array_cache select 2; +btc_cache_pos = _cache_pos; +btc_cache_n = _cache_n; +btc_cache_info = _cache_info; -[] call btc_fnc_cache_create; +[_cache_pos, btc_p_chem, [1, 0] select _isChem] call btc_fnc_cache_create; btc_cache_markers = []; { _x params ["_pos", "_marker_name"]; [_pos, 0, _marker_name] call btc_fnc_info_cacheMarker; -} forEach (_array_cache select 3); +} forEach _cache_markers; -btc_cache_pictures = +(_array_cache select 4); +btc_cache_pictures = _cache_pictures; { (btc_cache_pictures select 2) pushBack ([ _x, diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index f7117b3c3..bff7b630e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -111,6 +111,7 @@ private _cache_markers = []; } forEach btc_cache_markers; _array_cache pushBack _cache_markers; _array_cache pushBack [btc_cache_pictures select 0, btc_cache_pictures select 1, []]; +_array_cache pushBack (btc_cache_obj in btc_chem_contaminated); profileNamespace setVariable [format ["btc_hm_%1_cache", _name], +_array_cache]; //REPUTATION From 4c2054da6858f4d4ef1d36cbe338c1a9bb32ecd9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 2 Nov 2020 15:23:27 +0100 Subject: [PATCH 217/264] Don't use pointer for database --- .../core/fnc/db/load.sqf | 18 +++++++++--------- .../core/fnc/db/save.sqf | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 315cd7274..979da6ced 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -24,10 +24,10 @@ params [ ["_name", worldName, [""]] ]; -setDate (profileNamespace getVariable [format ["btc_hm_%1_date", _name], date]); +setDate +(profileNamespace getVariable [format ["btc_hm_%1_date", _name], date]); //CITIES -private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities", _name], []]; +private _cities_status = +(profileNamespace getVariable [format ["btc_hm_%1_cities", _name], []]); { _x params ["_id", "_initialized", "_spawn_more", "_occupied", "_data_units", "_has_ho", "_ho_units_spawned", "_ieds", "_has_suicider", @@ -64,7 +64,7 @@ private _cities_status = profileNamespace getVariable [format ["btc_hm_%1_cities } forEach _cities_status; //HIDEOUT -private _array_ho = profileNamespace getVariable [format ["btc_hm_%1_ho", _name], []]; +private _array_ho = +(profileNamespace getVariable [format ["btc_hm_%1_ho", _name], []]); { _x call btc_fnc_mil_create_hideout; @@ -81,7 +81,7 @@ if (_select_ho isEqualTo - 1) then { if (btc_hideouts isEqualTo []) then {[] spawn btc_fnc_final_phase;}; //CACHE -private _array_cache = profileNamespace getVariable [format ["btc_hm_%1_cache", _name], []]; +private _array_cache = +(profileNamespace getVariable [format ["btc_hm_%1_cache", _name], []]); btc_cache_pos = _array_cache select 0; btc_cache_n = _array_cache select 1; @@ -106,7 +106,7 @@ btc_cache_pictures = +(_array_cache select 4); } forEach (btc_cache_pictures select 0); //FOB -private _fobs = profileNamespace getVariable [format ["btc_hm_%1_fobs", _name], []]; +private _fobs = +(profileNamespace getVariable [format ["btc_hm_%1_fobs", _name], []]); { _x params ["_fob_name", "_pos", ["_direction", 0, [0]]]; @@ -121,13 +121,13 @@ btc_global_reputation = profileNamespace getVariable [format ["btc_hm_%1_rep", _ {deleteVehicle _x} forEach btc_vehicles; btc_vehicles = []; -private _objs = profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]; +private _objs = +(profileNamespace getVariable [format ["btc_hm_%1_objs", _name], []]); { [_x] call btc_fnc_db_loadObjectStatus; } forEach _objs; //VEHICLES -private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]; +private _vehs = +(profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], []]); [{ // Can't be executed just after because we can't delete and spawn vehicle during the same frame. { _x params [ @@ -166,7 +166,7 @@ private _vehs = profileNamespace getVariable [format ["btc_hm_%1_vehs", _name], }, _vehs] call CBA_fnc_execNextFrame; //Player Tags -private _tags_properties = profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]; +private _tags_properties = +(profileNamespace getVariable [format ["btc_hm_%1_tags", _name], []]); private _id = ["ace_tagCreated", { params ["_tag", "_texture", "_object"]; btc_tags pushBack [_tag, _texture, _object]; @@ -182,7 +182,7 @@ private _id = ["ace_tagCreated", { ["ace_tagCreated", _id] call CBA_fnc_removeEventHandler; //Player Markers -private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_markers", _name], []]; +private _markers_properties = +(profileNamespace getVariable [format ["btc_hm_%1_markers", _name], []]); { _x params ["_markerText", "_markerPos", "_markerColor", "_markerType", "_markerSize", "_markerAlpha", "_markerBrush", "_markerDir", "_markerShape"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index f7117b3c3..06245514d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -63,7 +63,7 @@ private _cities_status = []; [format ["ID %1 - IsOccupied %2", _x getVariable "id", _x getVariable "occupied"], __FILE__, [false]] call btc_fnc_debug_message; }; } forEach (btc_city_all select {!(isNull _x)}); -profileNamespace setVariable [format ["btc_hm_%1_cities", _name], _cities_status]; +profileNamespace setVariable [format ["btc_hm_%1_cities", _name], +_cities_status]; //HIDEOUT private _array_ho = []; @@ -89,7 +89,7 @@ private _array_ho = []; }; _array_ho pushBack _data; } forEach btc_hideouts; -profileNamespace setVariable [format ["btc_hm_%1_ho", _name], _array_ho]; +profileNamespace setVariable [format ["btc_hm_%1_ho", _name], +_array_ho]; profileNamespace setVariable [format ["btc_hm_%1_ho_sel", _name], btc_hq getVariable ["id", 0]]; @@ -125,7 +125,7 @@ private _fobs = []; _fobs pushBack [markerText _x, _pos, _direction]; }; } forEach (btc_fobs select 0); -profileNamespace setVariable [format ["btc_hm_%1_fobs", _name], _fobs]; +profileNamespace setVariable [format ["btc_hm_%1_fobs", _name], +_fobs]; //Vehicles status private _array_veh = []; @@ -155,7 +155,7 @@ private _array_veh = []; [format ["VEH %1 DATA %2", _x, _data], __FILE__, [false]] call btc_fnc_debug_message; }; } forEach (btc_vehicles - [objNull]); -profileNamespace setVariable [format ["btc_hm_%1_vehs", _name], _array_veh]; +profileNamespace setVariable [format ["btc_hm_%1_vehs", _name], +_array_veh]; //Objects status private _array_obj = []; @@ -168,7 +168,7 @@ private _array_obj = []; !(isObjectHidden _x) && (objectParent _x) isEqualTo objNull }); -profileNamespace setVariable [format ["btc_hm_%1_objs", _name], _array_obj]; +profileNamespace setVariable [format ["btc_hm_%1_objs", _name], +_array_obj]; //Player Tags private _tags = btc_tags select {alive (_x select 0)}; @@ -182,14 +182,14 @@ private _tags_properties = _tags apply { typeOf _tag ] }; -profileNamespace setVariable [format ["btc_hm_%1_tags", _name], _tags_properties]; +profileNamespace setVariable [format ["btc_hm_%1_tags", _name], +_tags_properties]; //Player Markers private _player_markers = allMapMarkers select {(_x select [0, 15]) isEqualTo "_USER_DEFINED #"}; private _markers_properties = _player_markers apply { [markerText _x, markerPos _x, markerColor _x, markerType _x, markerSize _x, markerAlpha _x, markerBrush _x, markerDir _x, markerShape _x] }; -profileNamespace setVariable [format ["btc_hm_%1_markers", _name], _markers_properties]; +profileNamespace setVariable [format ["btc_hm_%1_markers", _name], +_markers_properties]; //End profileNamespace setVariable [format ["btc_hm_%1_db", _name], true]; From 43caa6f16bedd9ae74c920810b87b010b1a96997 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 3 Nov 2020 14:24:55 +0100 Subject: [PATCH 218/264] Extend to RHS and avoid twice load in vehicle --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf | 4 ++-- .../core/fnc/tow/ropeCreate.sqf | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index 4c55145f5..32f725a09 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -28,7 +28,7 @@ params [ if (_tower setVehicleCargo _vehicleSelected) exitWith {}; -private _hideVehicle = createVehicle ["Land_Cargo10_red_F", [0, 0, 0], [], 0, "CAN_COLLIDE"]; +private _hideVehicle = createVehicle ["Land_WaterTank_F", [0, 0, 0], [], 0, "CAN_COLLIDE"]; _hideVehicle hideObjectGlobal true; private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; @@ -36,7 +36,7 @@ private _model_hide = (0 boundingBoxReal _hideVehicle) select 1; private _attachTo = [ 0, ((_model_hide select 1) - (_model_selected select 1)) + 0.9, - (_model_selected select 2) - (_model_hide select 2) - 0.2 + (_model_selected select 2) - (_model_hide select 2) ]; _vehicleSelected attachTo [_hideVehicle, _attachTo]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf index 562b6332a..9cca11064 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ropeCreate.sqf @@ -29,9 +29,12 @@ params [ if !([_tower, _vehicleSelected] call btc_fnc_tow_check) exitWith {}; if (_tower setVehicleCargo _vehicleSelected) exitWith {}; -private _fakeVehicle = "Land_Cargo10_red_F" createVehicleLocal [0, 0, 0]; -private _canViV_wreck = _tower canVehicleCargo _fakeVehicle isEqualTo [true, true]; -deleteVehicle _fakeVehicle; +private _canViV_wreck = false; +if ((getVehicleCargo _tower) findIf {isObjectHidden _x} isEqualTo -1) then { + private _fakeVehicle = "Land_WaterTank_F" createVehicleLocal [0, 0, 0]; + _canViV_wreck = _tower canVehicleCargo _fakeVehicle isEqualTo [true, true]; + deleteVehicle _fakeVehicle; +}; if (_canViV_wreck) exitWith { [_vehicleSelected, _tower] remoteExecCall ["btc_fnc_tow_ViV", 2]; btc_tow_vehicleSelected = objNull; From f21dd50f1f088682e023c4c1bae7e0dadd49a07f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 12 Nov 2020 15:39:47 +0100 Subject: [PATCH 219/264] FIX HEMTT Flat clipping for ViV --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index 32f725a09..efae2b8b1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -33,10 +33,12 @@ _hideVehicle hideObjectGlobal true; private _model_selected = (0 boundingBoxReal _vehicleSelected) select 1; private _model_hide = (0 boundingBoxReal _hideVehicle) select 1; +private _model_selected_z = ((0 boundingBoxReal _vehicleSelected) select 0) select 2; +private _model_hide_z = ((0 boundingBoxReal _hideVehicle) select 0) select 2; private _attachTo = [ 0, ((_model_hide select 1) - (_model_selected select 1)) + 0.9, - (_model_selected select 2) - (_model_hide select 2) + -(abs _model_hide_z - abs _model_selected_z) + 0.1 ]; _vehicleSelected attachTo [_hideVehicle, _attachTo]; From 504f75c24317a03d52ec9da79407000aa16be584 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 12 Nov 2020 16:40:54 +0100 Subject: [PATCH 220/264] FIX: When flat HEMTT is destroyed loaded the loaded vehicle through ViV spawn somewhere safely around the flat HETMTT and no more at [0,0,0] --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 9 ++++++++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index e055ab3b8..3d1c0ffca 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -168,7 +168,14 @@ private _vehs = +(profileNamespace getVariable [format ["btc_hm_%1_vehs", _name] }; if !(_ViV isEqualTo []) then { { - [_x call _loadVehicle, _veh] call btc_fnc_tow_ViV; + private _vehToLoad = _x call _loadVehicle; + if !([_vehToLoad, _veh] call btc_fnc_tow_ViV) then { + _vehToLoad setVehiclePosition [_veh, [], 100, "NONE"]; + private _marker = _vehToLoad getVariable ["marker", ""]; + if !(_marker isEqualTo "") then { + _marker setMarkerPos _vehToLoad; + }; + }; } forEach _ViV; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index efae2b8b1..88977f3f3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -26,7 +26,7 @@ params [ ["_tower", objNull, [objNull]] ]; -if (_tower setVehicleCargo _vehicleSelected) exitWith {}; +if (_tower setVehicleCargo _vehicleSelected) exitWith {true}; private _hideVehicle = createVehicle ["Land_WaterTank_F", [0, 0, 0], [], 0, "CAN_COLLIDE"]; _hideVehicle hideObjectGlobal true; @@ -55,6 +55,8 @@ if (_tower setVehicleCargo _hideVehicle) then { _vehicleSelected setPosWorld _pos; [_vehicleSelected, [0, 0, 0.01]] remoteExecCall ["setVelocity", _vehicleSelected]; // Activate physic }, [_hideVehicle, _vehicleSelected]] call CBA_fnc_waitUntilAndExecute; + true } else { deleteVehicle _hideVehicle; + false }; From cad2459b43e0bc2c9df0615f9a2ac7418525cccf Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 19 Nov 2020 12:48:26 +0100 Subject: [PATCH 221/264] Save also native ViV --- .../core/fnc/db/save.sqf | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 4072b00a1..11080de9c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -132,7 +132,8 @@ profileNamespace setVariable [format ["btc_hm_%1_fobs", _name], +_fobs]; private _array_veh = []; private _vehicles = btc_vehicles - [objNull]; private _vehiclesNotInCargo = _vehicles select { - isNull isVehicleCargo attachedTo _x + isNull isVehicleCargo _x && + {isNull isVehicleCargo attachedTo _x} }; private _vehiclesInCargo = _vehicles - _vehiclesNotInCargo; { @@ -158,10 +159,19 @@ private _vehiclesInCargo = _vehicles - _vehiclesNotInCargo; _data pushBack ([vectorDir _x, vectorUp _x]); _data pushBack []; // ViV - if (isNull isVehicleCargo attachedTo _x) then { + private _fakeViV = isVehicleCargo attachedTo _x; + if ( + isNull _fakeViV && + {isNull isVehicleCargo _x} + ) then { _array_veh pushBack _data; } else { - private _index = _vehiclesNotInCargo find (isVehicleCargo attachedTo _x); + private _vehicleCargo = if (isNull _fakeViV) then { + isVehicleCargo _x + } else { + _fakeViV + }; + private _index = _vehiclesNotInCargo find _vehicleCargo; ((_array_veh select _index) select 16) pushBack _data; }; From e9cdcecdaa1c1024613c0676a95fe0cba6df9775 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 19 Nov 2020 13:03:39 +0100 Subject: [PATCH 222/264] Avoid clipping ViV --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf index 88977f3f3..1e6a5647e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/ViV.sqf @@ -37,7 +37,7 @@ private _model_selected_z = ((0 boundingBoxReal _vehicleSelected) select 0) sele private _model_hide_z = ((0 boundingBoxReal _hideVehicle) select 0) select 2; private _attachTo = [ 0, - ((_model_hide select 1) - (_model_selected select 1)) + 0.9, + ((_model_hide select 1) - (_model_selected select 1)), -(abs _model_hide_z - abs _model_selected_z) + 0.1 ]; _vehicleSelected attachTo [_hideVehicle, _attachTo]; From 5f3d4d73314c43bb27ac431537368345e13a25cf Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 19 Nov 2020 16:22:01 +0100 Subject: [PATCH 223/264] prevent error from empty and empty databasearray --- .../core/fnc/db/load.sqf | 11 ++++++++--- .../core/fnc/db/save.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 2 +- docs/InGame-documentation.md | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 1b8d886ad..b9a677c9a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -184,9 +184,12 @@ private _id = ["ace_tagCreated", { //Player Markers private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_markers", _name], []]; { - _x params ["_markerText", "_markerPos", "_markerColor", "_markerType", "_markerSize", "_markerAlpha", "_markerBrush", "_markerDir", "_markerShape", "_markerPolyline", "_markerChannel"]; + _x params ["_markerText", "_markerPos", "_markerColor", "_markerType", "_markerSize", "_markerAlpha", "_markerBrush", "_markerDir", "_markerShape", + ["_markerPolyline", [], [[]]], + ["_markerChannel", 0, [0]] + ]; - private _marker = createMarker [format ["_USER_DEFINED #0/%1", _forEachindex, _markerChannel], _markerPos]; + private _marker = createMarker [format ["_USER_DEFINED #0/%1/%2", _forEachindex, _markerChannel], _markerPos, _markerChannel]; _marker setMarkerText _markerText; _marker setMarkerColor _markerColor; _marker setMarkerType _markerType; @@ -195,5 +198,7 @@ private _markers_properties = profileNamespace getVariable [format ["btc_hm_%1_m _marker setMarkerBrush _markerBrush; _marker setMarkerDir _markerDir; _marker setMarkerShape _markerShape; - _marker setMarkerPolyline _markerPolyline; + if !(_markerPolyline isEqualTo []) then { + _marker setMarkerPolyline _markerPolyline; + }; } forEach _markers_properties; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 316a4e8ba..97db7586c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -185,7 +185,7 @@ private _tags_properties = _tags apply { profileNamespace setVariable [format ["btc_hm_%1_tags", _name], _tags_properties]; //Player Markers -private _player_markers = allMapMarkers select {(_x select [0, 15]) isEqualTo "_USER_DEFINED #"}; +private _player_markers = allMapMarkers select {"_USER_DEFINED" in _x}; private _markers_properties = _player_markers apply { [markerText _x, markerPos _x, markerColor _x, markerType _x, markerSize _x, markerAlpha _x, markerBrush _x, markerDir _x, markerShape _x, markerPolyline _x, markerChannel _x] }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 5692e96fb..8268a7385 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -78,7 +78,7 @@ 无头客户端与数据库 - <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers on global/camp channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> + <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> This mission automatically uses one Headless client when available.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers on global channel are saved. All admin can save mission progress at any time with his self interaction key.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta mision usa automaticamente un Headless client si está disponible .<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta misión tiene un sistema de base de datos. Se guardan unidades enemigas, ciudades, escondites, caché, objetos creados por jugadores o Zeus, vehículos, marcadores de jugadores (no líneas) en el canal global. Todos los administradores pueden guardar el progreso de la misión en cualquier momento con su clave de auto interacción.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Sollte ein Headless Client vorhanden sein, so wird dieser durch die Mission automatisch genutzt.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Diese Mission verfügt über ein eingenes Datenbanksystem, in welcher folgende Dinge gespeichert werden: feindliche Einheiten, Städte, Verstecke, feindliche Waffenlager, Fahrzeuge, vom Spieler oder vom Zeus erstelle Objecte und Marker (keine Linien) vom Spieler im Globalen-Channel. Jeder Admin kann zu jeder Zeit den Missionsfortschritt über das Eigen-Interaktionsmenü speichern.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> <img image='\a3\ui_f\data\map\vehicleicons\iconvirtual_ca.paa' width='20' height='20'/> Esta missão usa automaticamente um cliente Headless quando disponível.<br/><br/> <img image='\a3\data_f_warlords\Data\preview_cp_transfer.jpg' width='355' height='200' /> <br/><br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\download_ca.paa' width='20' height='20'/> Esta missão tem um sistema de banco de dados. Unidades inimigas, cidades, esconderijos, cache, objetos criados por jogadores ou Zeus, veículos, marcação de jogadores (sem linhas) no canal global são salvos. O administrador pode salvar o progresso da missão a qualquer momento usando botão de interação.<br/><br/> <img image='\a3\data_f_mark\Images\mark_popupImage_01_ca.paa' width='355' height='200' /> diff --git a/docs/InGame-documentation.md b/docs/InGame-documentation.md index 10e129290..a04bba2dd 100644 --- a/docs/InGame-documentation.md +++ b/docs/InGame-documentation.md @@ -3,7 +3,7 @@ ## Headless & Database This mission automatically uses one Headless client when available. -This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers on global/camp channel are saved. All admin can save mission progress at any time with his self interaction key. +This mission has a database system. Enemy units, towns, hideouts, cache, objects created or static weapons assembled by players or Zeus, vehicles, tag, players markers on global channel are saved. All admin can save mission progress at any time with his self interaction key. ## Chemical Warfare From 2ee2a1793e56e0b194fc2622b5633dd5e98db3bc Mon Sep 17 00:00:00 2001 From: Gold John King Date: Sat, 21 Nov 2020 09:13:00 +0800 Subject: [PATCH 224/264] Add: Chinesesimp translation for recent merges Add: Chinesesimp translation for recent merges --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index d890ce0a0..ccee892a3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -185,7 +185,7 @@ <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> La reputación se puede solicitar a los civiles<br/> Las malas acciones causan malos efectos sobre la reputacion.<br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ayudar a la población local luchando contra los Oplitas y desarmando los artefactos explosivos improvisados aumentará tu reputación; matar civiles, mutilar civiles vivos/muertos, disparar cerca de civiles sin razón alguna, disparar a vehículos civiles, dañar/destruir edificios, perder vehículos, respawns de jugadores disminuirá tu reputación. Al principio tienes un nivel de reputación muy bajo, por lo que los civiles no te ayudarán a revelar información importante sobre los Oplitas, es probable que mientan en su lugar.<br/> Abortar una misión secundaria no afecta a la reputación. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> Ihr Ansehen bei der Bevölkerung können Sie bei Zivilisten erfragen <br/> Schlechte bzw. böse Handlungen habe zur Folge das ihr Ansehen sinkt. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Das Unterstützen der lokalen Bevölkerung, das Entschärfen von IEDs und der aktive Kampf gegen die Oplitas wird sich positiv auf ihr Ansehen auswirken. Negative Aktionen wie zb. das Töten oder verstümmeln von Zivlisten, das grundlose Abfeueren einer Waffe in der Nähe von Zivilisten, das Zerstören oder Beschädigen von Gebäuden, der Angriff auf zivile Fahrzeuge, der Verlust von Fahrzeugen im Allgemeinen oder das Respawnen haben hingegen einen nicht so guten Effekt. Zu Beginn ist Ihr Ansehen nur recht gering, weshalb es sein kann das Zivlisten eher zruückhaltend mit Informationen sind. In manchen Fällen werden die Zivilisten Sie auch einfach belügen.<br/> Das Abbrechen von Nebenaufgaben hat keine Auswirkung auf Ihr Ansehen. <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\talk_ca.paa' width='20' height='20'/> A Reputação entre a população é obtida por meio dos civis <br/> Ações ruins ou más fazem a reputação diminuir. <br/> <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> Ajudar a população local combatendo os inimigos e desarmando os IED's aumentará sua reputação. Matar civis, mutilar civis vivos/mortos, atirar perto de civis sem motivo, atirar nos veículos civis, danificar/destruir prédios, perder veículos civis, respawns de jogadores diminuirão a reputação. No começo, o nível de reputação é muito baixo, então, os civis não irão ajudá-lo a revelar informações importantes sobre os inimigos ou provavelmente irão mentir.<br/> Cancelar tarefas secundárias não afeta a reputação. - <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> 在任务开始时, 你只有很低的声誉, 所以平民不会向你展示关于Oplitas的重要信息, 他们更倾向于说谎。可以通过询问平民来获知声誉状况。<br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>善举:</marker><br/> 帮助当地居民反抗Oplitas, 拆除IED, 救助平民, 完成支线任务和摧毁武器箱/藏匿点将会提升你的声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>恶行:</marker><br/> 恶行将会酿成恶果: 击杀或残害平民/动物、毫无理由地向平民身边射击、攻击民用车辆、毁坏或摧毁建筑物、损失我方载具和玩家重生均会降低声誉。中止支线任务不会影响声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> + <img image='\A3\ui_f\data\igui\cfg\simpleTasks\types\meet_ca.paa' width='20' height='20'/> <marker name='blufor_base'>System:</marker><br/> 在任务开始时, 你只有很低的声誉, 所以平民不会向你展示关于Oplitas的重要信息, 他们更倾向于说谎。可以通过询问平民来获知声誉状况。<br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_picture_ca.paa' width='20' height='20'/> <marker name='blufor_base'>善举:</marker><br/> 帮助当地居民反抗Oplitas, 拆除IED, 救助平民, 使用红色喷漆去除涂鸦, 完成支线任务和摧毁武器箱/藏匿点将会提升你的声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_4_co.paa' width='355' height='200' /> <br/><br/> <img image='\a3\Ui_f\data\GUI\Cfg\Debriefing\endDefault_ca.paa' width='20' height='20'/> <marker name='blufor_base'>恶行:</marker><br/> 恶行将会酿成恶果: 击杀或残害平民/动物、毫无理由地向平民身边射击、攻击民用车辆、毁坏或摧毁建筑物、损失我方载具和玩家重生均会降低声誉。中止支线任务不会影响声誉。<br/><br/> <img image='\a3\missions_f_orange\Data\Img\AAN\aan_3_3_co.paa' width='355' height='200'/> <br/><br/> <img image='\A3\Data_F_Orange\Logos\arma3_orange_artwork.jpg' width='362' height='512' /> <br/><br/> @@ -336,6 +336,7 @@ Enemy static density: + 敌军固定式武器密度: Civilian density: @@ -494,6 +495,7 @@ FOB, Rallypoint, Transport helicopter, Transport vehicle and Leader + FOB、集合点、运输直升机、运输车辆和小队长 Time before rallypoint self-destruction: @@ -2038,7 +2040,7 @@ Can't tow!<br/>(Este vehículo no puede remolcar %1) Can't tow!<br/>(Folgende Fahrzeuge können nicht gezogen werden: %1) Can't tow!<br/>(Este veículo não pode rebocar %1) - Can't tow!<br/>(当前载具(后车)无法牵引如下类型的载具: %1) + 无法拖车!<br/>(当前载具(后车)无法牵引如下类型的载具: %1) Interact with a vehicle to tow it! @@ -2049,6 +2051,7 @@ Too far! + 距离太远! This vehicle is already attached to another! @@ -2059,9 +2062,11 @@ Towing in progress, please wait... + 正在拖车, 请稍后... Towing done + 拖车完成 From 22dc9847a991ddd9b78e9a9f6a51cf3f496184ec Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 27 Nov 2020 15:02:23 +0100 Subject: [PATCH 225/264] Update documentation line for 1.21 --- docs/Add-factions.md | 10 +++++----- docs/Add-vehicle-or-boat-to-H&M-system.md | 6 +++--- docs/Change-MAP-of-Hearts-and-Minds.md | 4 ++-- docs/faction_player.md | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/Add-factions.md b/docs/Add-factions.md index 9babf763e..de781300f 100644 --- a/docs/Add-factions.md +++ b/docs/Add-factions.md @@ -4,15 +4,15 @@ You have two way to add new factions. First one need to know all class name of t ## First way - Get all class names of your faction. -- Replace `_allclasse select` by the corresponding array of faction name in [/core/def/mission.sqf#L590-L598](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L590-L598). +- Replace `_allclasse select` by the corresponding array of faction name in [/core/def/mission.sqf#L639-L647](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L639-L647). ## Second way - Launch your game with all factions mods you want to have in the H&M and launch the H&M mission. - Execute locally in [debug console](https://community.bistudio.com/wiki/Mission_Editor:_Debug_Console_(Arma_3)) : `copyToClipboard str (["EN"] call btc_fnc_get_class);`. - Open a text editor and paste the result. - You have an array of 4 array: [author name, text entry for mission parameters, faction name array, corresponding number for each faction]. - - text entry for mission parameters (second array): copy and paste it in [/core/def/param.hpp#L41](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/param.hpp#L41). - - corresponding number for each faction (fourth array): copy and paste it in [/core/def/param.hpp#L40](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/param.hpp#L40). - - faction name array (third array): copy and paste it in [/core/def/mission.sqf#L585](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L585). + - text entry for mission parameters (second array): copy and paste it in [/core/def/param.hpp#L83](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/param.hpp#L83). + - corresponding number for each faction (fourth array): copy and paste it in [/core/def/param.hpp#L82](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/param.hpp#L82). + - faction name array (third array): copy and paste it in [/core/def/mission.sqf#L634](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L634). -Note: if you don't want some class name take a look here [/core/def/mission.sqf#L600-L621](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L600-L621). \ No newline at end of file +Note: if you don't want some class name take a look here [/core/def/mission.sqf#L649-L670](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L649-L670). \ No newline at end of file diff --git a/docs/Add-vehicle-or-boat-to-H&M-system.md b/docs/Add-vehicle-or-boat-to-H&M-system.md index 277959681..b091201ea 100644 --- a/docs/Add-vehicle-or-boat-to-H&M-system.md +++ b/docs/Add-vehicle-or-boat-to-H&M-system.md @@ -9,7 +9,7 @@ You can add new vehicle in the mision.sqm : - Give a unique name like: `btc_veh_16`,`btc_veh_17` ... - Add in the init field : `this setVariable ["btc_dont_delete",true]` - Save. -- Open the [/core/def/mission.sqf L265](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L265) +- Open the [/core/def/mission.sqf L285](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L285) - Add names you gave to your vehicles. - Save. @@ -20,8 +20,8 @@ A garage is available for admin only. Activate the garage through mission parame You can add a new vehicle/boat to respawn system by : - in the editor, name it like **btc_helo_2** -- in the [core/def/mission.sqf L266](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L266) file, add **btc_helo_2** to the list of btc_helo. +- in the [core/def/mission.sqf L286](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L286) file, add **btc_helo_2** to the list of btc_helo. like : btc_helo = [btc_helo_1,**btc_helo_2**]; -Note: you can tweak respawn time here: [/core/init_server.sqf L36](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/init_server.sqf#L36) by changing 30s to what you want. +Note: you can tweak respawn time here: [/core/init_server.sqf L46](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/init_server.sqf#L46) by changing 30s to what you want. diff --git a/docs/Change-MAP-of-Hearts-and-Minds.md b/docs/Change-MAP-of-Hearts-and-Minds.md index 203212edd..07f368217 100644 --- a/docs/Change-MAP-of-Hearts-and-Minds.md +++ b/docs/Change-MAP-of-Hearts-and-Minds.md @@ -11,5 +11,5 @@ # Tips : - Some map does not provide enough city. You can add new cities by using `btc_custom_loc` in [/define_mod.sqf#L1](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/define_mod.sqf#L1) like it has been talk [here](https://forums.bohemia.net/forums/topic/165948-mp-btc-hearts-and-minds/?page=39&tab=comments#comment-3280136). -- For small map, you should tweak the safezone for hideout spawn ([/core/def/mission.sqf#L132](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L132)). -- [Some map](https://forums.bohemia.net/forums/topic/165948-mp-btc-hearts-and-minds/?page=52&tab=comments#comment-3348268) use only NameCity for the type of locations but H&M hideouts system looks for "NameLocal", "Hill", "NameVillage", "Airport". You should add in the array the "NameCity" [here](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf#L44). +- For small map, you should tweak the safezone for hideout spawn ([/core/def/mission.sqf#L141](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L141)). +- [Some map](https://forums.bohemia.net/forums/topic/165948-mp-btc-hearts-and-minds/?page=52&tab=comments#comment-3348268) use only NameCity for the type of locations but H&M hideouts system looks for "NameLocal", "Hill", "NameVillage", "Airport". You should add in the array the "NameCity" [here](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout.sqf#L50). diff --git a/docs/faction_player.md b/docs/faction_player.md index 078441f1b..645bc6524 100644 --- a/docs/faction_player.md +++ b/docs/faction_player.md @@ -2,5 +2,5 @@ You can change player faction by: - Migrate all playable slot to the desired side in /mission.sqm. -- Define the correct player side in [/core/def/mission.sqf#L373](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L376). +- Define the correct player side in [/core/def/mission.sqf#L421](https://github.com/Vdauphin/HeartsAndMinds/blob/master/%3DBTC%3Dco%4030_Hearts_and_Minds.Altis/core/def/mission.sqf#L421). - Choose in mission parameter an enemy faction with a different side from player side. \ No newline at end of file From 20c3d3e5bf3ac216c61b5ba07142beceaec2c203 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 28 Nov 2020 12:15:49 +0100 Subject: [PATCH 226/264] FIX: db player tags are not deleted --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/delete.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/delete.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/delete.sqf index 47125bbe0..f24090f01 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/delete.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/delete.sqf @@ -36,6 +36,7 @@ profileNamespace setVariable [format ["btc_hm_%1_rep", _name], nil]; profileNamespace setVariable [format ["btc_hm_%1_fobs", _name], nil]; profileNamespace setVariable [format ["btc_hm_%1_vehs", _name], nil]; profileNamespace setVariable [format ["btc_hm_%1_objs", _name], nil]; +profileNamespace setVariable [format ["btc_hm_%1_tags", _name], nil]; profileNamespace setVariable [format ["btc_hm_%1_markers", _name], nil]; profileNamespace setVariable [format ["btc_hm_%1_db", _name], nil]; From 3078b2f4af6cf950d124f8ca284ef3fa62512e45 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 1 Dec 2020 11:47:06 +0100 Subject: [PATCH 227/264] Don't use church or ruins there are most of the time not flat for ruins. For church, the algorithme doesn't detect properly the roof position. --- .../core/fnc/common/typeOf.sqf | 4 +++- .../core/fnc/mil/create_staticOnRoof.sqf | 20 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/typeOf.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/typeOf.sqf index 9f1bef85b..8c4eaaf12 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/typeOf.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/common/typeOf.sqf @@ -30,6 +30,8 @@ if (isNil "btc_modelNamespace") then { btc_modelNamespace = call CBA_fnc_createNamespace; }; +private _CfgVehicles = configFile >> "CfgVehicles"; + _objectArray apply { private _type = typeOf _x; @@ -39,7 +41,7 @@ _objectArray apply { _type = btc_modelNamespace getVariable _model; if (isNil "_type") then { private _objects = configProperties [ - configFile >> "CfgVehicles", + _CfgVehicles, "(isClass _x) && {(((getText (_x >> 'model')) select [1]) == _model) || {(getText (_x >> 'model')) == _model}}", true ]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf index 7a597c1b9..ef1cdb718 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf @@ -26,16 +26,26 @@ params [ ["_n", 0, [0]] ]; +private _housesTypes = [_houses] call btc_fnc_typeOf; + private _j = 1; for "_i" from 1 to _n do { if (_houses isEqualTo []) exitWith {}; private _house = _houses deleteAt 0; - ([_house] call btc_fnc_roof) params ["_spawnPos", "_surfaceNormal"]; - - if (acos (_surfaceNormal vectorCos [0, 0, 1]) < 30) then { - [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; - _j = _i; + private _houseType = _housesTypes deleteAt 0; + if ( + !(_houseType isKindOf "Ruins") && + {!(_houseType isKindOf "Church")} + ) then { + ([_house] call btc_fnc_roof) params ["_spawnPos", "_surfaceNormal"]; + + if (acos (_surfaceNormal vectorCos [0, 0, 1]) < 30) then { + [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; + _j = _i; + } else { + _i = _j; + }; } else { _i = _j; }; From 08a343617cc943b26c23edd35e34a12d5a79298f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 1 Dec 2020 15:47:13 +0100 Subject: [PATCH 228/264] refactor the code --- .../core/fnc/mil/create_staticOnRoof.sqf | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf index ef1cdb718..a8b0805c2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf @@ -28,25 +28,23 @@ params [ private _housesTypes = [_houses] call btc_fnc_typeOf; -private _j = 1; -for "_i" from 1 to _n do { - if (_houses isEqualTo []) exitWith {}; - +private _i = 1; +while { + _i <= _n && + {!(_houses isEqualTo [])} +} do { private _house = _houses deleteAt 0; private _houseType = _housesTypes deleteAt 0; if ( !(_houseType isKindOf "Ruins") && - {!(_houseType isKindOf "Church")} + {!(_houseType isKindOf "Church")} && + {!("Chapel" in _houseType)} ) then { ([_house] call btc_fnc_roof) params ["_spawnPos", "_surfaceNormal"]; if (acos (_surfaceNormal vectorCos [0, 0, 1]) < 30) then { [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; - _j = _i; - } else { - _i = _j; + _i = _i + 1; }; - } else { - _i = _j; }; }; From d6634e147759a1565f908354f6fc1e214d80e035 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 3 Dec 2020 15:50:10 +0100 Subject: [PATCH 229/264] Typeof work on building but not on map objects --- .../core/fnc/mil/create_staticOnRoof.sqf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf index a8b0805c2..c91e78d6a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf @@ -26,15 +26,13 @@ params [ ["_n", 0, [0]] ]; -private _housesTypes = [_houses] call btc_fnc_typeOf; - private _i = 1; while { _i <= _n && {!(_houses isEqualTo [])} } do { private _house = _houses deleteAt 0; - private _houseType = _housesTypes deleteAt 0; + private _houseType = typeOf _house; if ( !(_houseType isKindOf "Ruins") && {!(_houseType isKindOf "Church")} && From d9f0bee6eccb9827793369039d44795932408f51 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 7 Dec 2020 11:58:36 +0100 Subject: [PATCH 230/264] FIX: Number of tags grow when two city overlap This attribute tag to a specific city. Before when two city was overlaping, just on city store the tag. So each time the second city is activated, it create new tags. --- .../core/fnc/city/de_activate.sqf | 20 ++++++++++--------- .../core/fnc/tag/eh.sqf | 1 + 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index f05b43932..401bab313 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -85,15 +85,17 @@ if !(_city getVariable ["active", false]) exitWith {}; private _data_tags = []; { - private _pos = getPos _x; - _pos set [2, 0]; - _data_tags pushBack [ - _pos, - [vectorDir _x, vectorUp _x], - _x getVariable "btc_texture", - typeOf _x - ]; - _x call CBA_fnc_deleteEntity; + if (_x getVariable ["btc_city", _city] isEqualTo _city) then { + private _pos = getPos _x; + _pos set [2, 0]; + _data_tags pushBack [ + _pos, + [vectorDir _x, vectorUp _x], + _x getVariable "btc_texture", + typeOf _x + ]; + _x call CBA_fnc_deleteEntity; + }; } forEach (btc_tags_server inAreaArray [_pos_city, _radius, _radius]); btc_tags_server = btc_tags_server - [objNull]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf index 33ec48c6a..1e6135de3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/eh.sqf @@ -24,6 +24,7 @@ params ["_tag", "_texture", "_object", "_unit"]; if (_unit in btc_city_all) then { _tag setVariable ["btc_texture", _texture]; //Store texture for city de_activation + _tag setVariable ["btc_city", _unit]; btc_tags_server pushBack _tag; } else { if (_texture isEqualTo "#(rgb,8,8,3)color(0,0,0,0)") then { //Check if player want to remove a tag From 7a8472c81e44fff0303763313e31f4a804ab3cd7 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 7 Dec 2020 13:49:24 +0100 Subject: [PATCH 231/264] FIX: Now AI are specific to a city Each AI is attributed to a city so even when city overlap, each AI is saved to the correct city --- .../core/fnc/city/activate.sqf | 14 +++++++------- .../core/fnc/city/de_activate.sqf | 6 ++++-- .../core/fnc/civ/add_grenade.sqf | 6 +++++- .../core/fnc/civ/get_grenade.sqf | 5 +++-- .../core/fnc/civ/get_weapons.sqf | 6 ++++-- .../core/fnc/civ/populate.sqf | 5 ++++- .../core/fnc/data/add_group.sqf | 4 +++- .../core/fnc/data/spawn_group.sqf | 9 +++++---- .../core/fnc/delay/createAgent.sqf | 6 ++++-- .../core/fnc/ied/drone_create.sqf | 1 + .../core/fnc/ied/suicider_create.sqf | 1 + .../core/fnc/mil/create_group.sqf | 6 ++++++ .../core/fnc/mil/create_static.sqf | 5 ++++- .../core/fnc/mil/create_staticOnRoof.sqf | 6 ++++-- 14 files changed, 55 insertions(+), 25 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 8be759ff1..97adaf273 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -100,7 +100,7 @@ if !(_ieds isEqualTo []) then { private _delay = 0; if !(_data_units isEqualTo []) then { { - _delay = _delay + ([_x, _id] call btc_fnc_data_spawn_group); + _delay = _delay + ([_x, _city] call btc_fnc_data_spawn_group); } forEach _data_units; } else { // Maximum number of enemy group @@ -133,7 +133,7 @@ if !(_data_units isEqualTo []) then { case "Airport" : {2}; default {0}; }); - [+_houses, round (_p_mil_static_group_ratio * random _max_number_group)] call btc_fnc_mil_create_staticOnRoof; + [+_houses, round (_p_mil_static_group_ratio * random _max_number_group), _city] call btc_fnc_mil_create_staticOnRoof; }; // Spawn civilians @@ -151,7 +151,7 @@ if !(_data_units isEqualTo []) then { if (btc_p_animals_group_ratio > 0) then { if !(_data_animals isEqualTo []) then { { - _x call btc_fnc_delay_createAgent; + (_x + [nil, _city]) call btc_fnc_delay_createAgent; } forEach _data_animals; } else { // Spawn animals @@ -168,7 +168,7 @@ if (btc_p_animals_group_ratio > 0) then { for "_i" from 1 to (round (random _max_number_animalsGroup)) do { private _pos = [_city, _spawningRadius/3] call CBA_fnc_randPos; for "_i" from 1 to (round (random 3)) do { - [selectRandom btc_animals_type, [_pos, 6] call CBA_fnc_randPos] call btc_fnc_delay_createAgent; + [selectRandom btc_animals_type, [_pos, 6] call CBA_fnc_randPos, nil, _city] call btc_fnc_delay_createAgent; }; }; }; @@ -213,12 +213,12 @@ if (_has_ho && {!(_city getVariable ["ho_units_spawned", false])}) then { case (_random <= 0.3) : {}; case (_random > 0.3 && _random <= 0.75) : { private _statics = btc_type_gl + btc_type_mg; - [[(_pos select 0) + 7, (_pos select 1) + 7, 0], _statics, 45] call btc_fnc_mil_create_static; + [[(_pos select 0) + 7, (_pos select 1) + 7, 0], _statics, 45, [], _city] call btc_fnc_mil_create_static; }; case (_random > 0.75) : { private _statics = btc_type_gl + btc_type_mg; - [[(_pos select 0) + 7, (_pos select 1) + 7, 0], _statics, 45] call btc_fnc_mil_create_static; - [[(_pos select 0) - 7, (_pos select 1) - 7, 0], _statics, 225] call btc_fnc_mil_create_static; + [[(_pos select 0) + 7, (_pos select 1) + 7, 0], _statics, 45, [], _city] call btc_fnc_mil_create_static; + [[(_pos select 0) - 7, (_pos select 1) - 7, 0], _statics, 225, [], _city] call btc_fnc_mil_create_static; }; }; if (btc_p_veh_armed_ho) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf index f05b43932..c5bac4ce2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/de_activate.sqf @@ -58,7 +58,8 @@ if !(_city getVariable ["active", false]) exitWith {}; if ( (leader _x) inArea [_pos_city, _radius, _radius, 0, false] && {side _x != btc_player_side} && - {!(_x getVariable ["no_cache", false])} + {!(_x getVariable ["no_cache", false])} && + {_x getVariable ["btc_city", _city] in [_city, objNull]} ) then { private _data_group = _x call btc_fnc_data_get_group; _data_units pushBack _data_group; @@ -73,7 +74,8 @@ if !(_city getVariable ["active", false]) exitWith {}; if ( _agent inArea [_pos_city, _radius, _radius, 0, false] && {alive _agent} && - {!(_x getVariable ["no_cache", false])} + {!(_x getVariable ["no_cache", false])} && + {_x getVariable ["btc_city", _city] in [_city, objNull]} ) then { _data_animals pushBack [ typeOf _agent, diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf index d1535c7e2..0ec743fab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/add_grenade.sqf @@ -31,7 +31,11 @@ _unit addEventHandler ["Fired", { if (_weapon isEqualTo "Throw") then { _unit removeEventHandler ["Fired", _thisEventHandler]; - [_unit] joinSilent createGroup [civilian, true]; + + private _group = createGroup [civilian, true]; + _group setVariable ["btc_city", group _unit getVariable ["btc_city", objNull]]; + [_unit] joinSilent _group; + [{ params ["_unit"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf index bb81ad512..ab9cc5382 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_grenade.sqf @@ -46,9 +46,10 @@ if (_units isEqualTo []) exitWith {}; [_x] call btc_fnc_civ_add_grenade; - [_x] joinSilent createGroup [btc_enemy_side, true]; + private _group = createGroup [btc_enemy_side, true]; + _group setVariable ["btc_city", group _x getVariable ["btc_city", objNull]]; + [_x] joinSilent _group; - private _group = group _x; [_group] call CBA_fnc_clearWaypoints; _group setVariable ["getWeapons", true]; [_group, _pos, -1, "GUARD", "AWARE", "RED", nil, nil, nil, nil, 10] call CBA_fnc_addWaypoint; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf index bc8925982..35c5fef22 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/get_weapons.sqf @@ -44,8 +44,10 @@ if (_units isEqualTo []) then { [_x, "", 2] call ace_common_fnc_doAnimation; [_x] call btc_fnc_civ_add_weapons; - [_x] joinSilent createGroup [btc_enemy_side, true]; - private _group = group _x; + private _group = createGroup [btc_enemy_side, true]; + _group setVariable ["btc_city", group _x getVariable ["btc_city", objNull]]; + [_x] joinSilent _group; + [_group] call CBA_fnc_clearWaypoints; _group setVariable ["getWeapons", true]; [_group, getPos _x, -1, "GUARD", "AWARE", "RED", nil, nil, nil, nil, 10] call CBA_fnc_addWaypoint; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf index d7d888336..a602228a9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/civ/populate.sqf @@ -8,6 +8,7 @@ Description: Parameters: _houses - Houses to populate around a city. [Number] _n - Number of civilians to generate. [Number] + _city - City where the civilian is created. [Object] Returns: @@ -23,7 +24,8 @@ Author: params [ ["_houses", [], [[]]], - ["_n", 0, [0]] + ["_n", 0, [0]], + ["_city", objNull, [objNull]] ]; if (_houses isEqualTo []) exitWith {}; @@ -34,6 +36,7 @@ for "_i" from 1 to _n do { private _pos = (_houses deleteAt 0) buildingPos 0; private _group = createGroup civilian; + _group setVariable ["btc_city", _city]; _group setVariable ["btc_data_inhouse", [_pos]]; [_group, _pos] call btc_fnc_civ_addWP; [_group, selectRandom btc_civ_type_units, _pos] call btc_fnc_delay_createUnit; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf index 5487b8474..b4ba74440 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf @@ -52,7 +52,9 @@ private _wp = if (vehicle leader _group isEqualTo leader _group) then { [_group, _city, 200, _wp] call btc_fnc_mil_addWP; -if !(_city getVariable ["active", false]) then { +if (_city getVariable ["active", false]) then { + _group setVariable ["btc_city", _city]; +} else { private _data_units = _city getVariable ["data_units", []]; private _data_group = _group call btc_fnc_data_get_group; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf index 7288aa853..0e56e24da 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/spawn_group.sqf @@ -15,7 +15,7 @@ Parameters: _behaviour - Behaviour of units. [Array] _array_wp - Waypoints of group. [Array] _array_veh - Vehicle occupied by the group. [Array, String] - _cityID - City ID. [Number] + _city - City. [Object] Returns: _delay - Delay due to vehicle spawn. [Number] @@ -32,7 +32,7 @@ Author: params [ ["_data_unit", [], [[]]], - ["_cityID", 0, [0]] + ["_city", objNull, [objNull]] ]; _data_unit params [ ["_type", 1, [0]], @@ -47,15 +47,16 @@ _data_unit params [ private _delay = 0; if (_type isEqualTo 5) exitWith { - [objNull, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create; + [_city, 100, _array_pos select 0, _array_type select 0] call btc_fnc_ied_suicider_create; _delay }; if (_type isEqualTo 7) exitWith { - [objNull, 100, _array_pos select 0] call btc_fnc_ied_drone_create; + [_city, 100, _array_pos select 0] call btc_fnc_ied_drone_create; _delay }; private _group = createGroup _side; +_group setVariable ["btc_city", _city]; if (_type isEqualTo 1) then { _array_veh params ["_typeOf", "_posATL", "_dir", "_fuel", ["_vectorUp", []]]; _delay = [_group, _typeOf, _array_type, _posATL, _dir, _fuel, _vectorUp] call btc_fnc_delay_createVehicle; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf index 280dec744..c5cb1f128 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/createAgent.sqf @@ -9,6 +9,7 @@ Parameters: _agentType - Type of agents to create. [Array] _pos - Position of creation. [Array] _special - Agent placement special. [String] + _city - City where the animal is created. [Object] Returns: @@ -28,10 +29,11 @@ btc_delay_createUnit = btc_delay_createUnit + 0.1; params [ ["_agentType", "", [""]], ["_pos", [0, 0, 0], [[]]], - ["_special", "CAN_COLLIDE", [""]] + ["_special", "CAN_COLLIDE", [""]], + ["_city", objNull, [objNull]] ]; - createAgent [_agentType, _pos, [], 0, _special]; + (createAgent [_agentType, _pos, [], 0, _special]) setVariable ["btc_city", _city]; btc_delay_createUnit = btc_delay_createUnit - 0.1; }, _this, btc_delay_createUnit - 0.01] call CBA_fnc_waitAndExecute; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf index 861b6edd3..d7b2b3ed9 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/drone_create.sqf @@ -38,6 +38,7 @@ if (_rpos isEqualTo []) then { }; private _group = createGroup [btc_enemy_side, true]; +_group setVariable ["btc_city", _city]; private _drone = createVehicle ["C_IDAP_UAV_06_antimine_F", _rpos, [], 0, "FLY"]; createVehicleCrew _drone; [driver _drone] joinSilent _group; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf index b7cfc4cd4..f064b69cd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/suicider_create.sqf @@ -43,6 +43,7 @@ if (_type_units isEqualTo "") then { }; private _group = createGroup [civilian, true]; +_group setVariable ["btc_city", _city]; private _suicider = _group createUnit [_type_units, _rpos, [], 0, "CAN_COLLIDE"]; [_group] call btc_fnc_civ_addWP; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf index 50abd3d00..1a162829b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_group.sqf @@ -45,6 +45,9 @@ _wp_ratios params ["_wp_house_probability", "_wp_sentry_probability"]; ([_city, _area] call btc_fnc_city_findPos) params ["_rpos", "_pos_iswater"]; private _group = createGroup _enemy_side; +if (_city isEqualType objNull) then { + _group setVariable ["btc_city", _city]; +}; private _groups = []; _groups pushBack _group; @@ -57,6 +60,9 @@ switch (true) do { }; for "_i" from 1 to _n do { private _grp = createGroup _enemy_side; + if (_city isEqualType objNull) then { + _grp setVariable ["btc_city", _city]; + }; [_grp, _rpos, 1] call btc_fnc_mil_createUnits; _grp setVariable ["btc_inHouse", typeOf _structure]; [_grp, _structure] call btc_fnc_house_addWP; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf index f36298114..d4e96c17d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_static.sqf @@ -10,6 +10,7 @@ Parameters: _statics_type - Type of static available. [Array] _dir - Direction of the static. [Number] _surfaceNormal - Surface normal. [Array] + _city - City where the static is created. [Object] Returns: _static - Created static. [Object] @@ -28,10 +29,12 @@ params [ ["_pos", [0, 0, 0], [[]]], ["_statics_type", btc_type_mg, [[]]], ["_dir", 0, [0]], - ["_surfaceNormal", [], [[]]] + ["_surfaceNormal", [], [[]]], + ["_city", objNull, [objNull]] ]; private _group = createGroup btc_enemy_side; +_group setVariable ["btc_city", _city]; [_group] call CBA_fnc_clearWaypoints; [_group, _pos, selectRandom _statics_type, _dir, _surfaceNormal] call btc_fnc_mil_createVehicle; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf index 7a597c1b9..08c40b041 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_staticOnRoof.sqf @@ -8,6 +8,7 @@ Description: Parameters: _house - House to find the roof. [Group] _n - Number of static to generate. [Number] + _city - City where the static is created. [Object] Returns: @@ -23,7 +24,8 @@ Author: params [ ["_houses", [], [[]]], - ["_n", 0, [0]] + ["_n", 0, [0]], + ["_city", objNull, [objNull]] ]; private _j = 1; @@ -34,7 +36,7 @@ for "_i" from 1 to _n do { ([_house] call btc_fnc_roof) params ["_spawnPos", "_surfaceNormal"]; if (acos (_surfaceNormal vectorCos [0, 0, 1]) < 30) then { - [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal] call btc_fnc_mil_create_static; + [ASLToATL _spawnPos, btc_type_mg + btc_type_gl, (_house getDir _spawnPos) + (random [-15, 0, 15]), _surfaceNormal, _city] call btc_fnc_mil_create_static; _j = _i; } else { _i = _j; From 62918465a1ee313f28f915e8a84ec0d1e22d6e7f Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 9 Dec 2020 18:31:37 +0100 Subject: [PATCH 232/264] Split tag and IED creation to reduce freeze on first activation --- .../core/fnc/city/activate.sqf | 40 +++-- .../core/fnc/compile.sqf | 3 +- .../core/fnc/ied/check.sqf | 9 +- .../fnc/ied/{init_area.sqf => initArea.sqf} | 4 +- .../core/fnc/tag/create.sqf | 32 ++++ .../core/fnc/tag/initArea.sqf | 167 ++++++++---------- 6 files changed, 141 insertions(+), 114 deletions(-) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/{init_area.sqf => initArea.sqf} (95%) create mode 100644 =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/create.sqf diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 8be759ff1..c92f93311 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -48,8 +48,8 @@ if (btc_debug) then { }; _city setVariable ["activating", true]; +_city setVariable ["active", true]; -private _is_init = _city getVariable ["initialized", false]; private _data_units = _city getVariable ["data_units", []]; private _data_animals = _city getVariable ["data_animals", []]; private _type = _city getVariable ["type", ""]; @@ -59,7 +59,7 @@ private _has_ho = _city getVariable ["has_ho", false]; private _ieds = _city getVariable ["ieds", []]; private _spawningRadius = _radius/2; -if (!_is_init) then { +if (!(_city getVariable ["initialized", false])) then { private _ratio = (switch _type do { case "Hill" : {random 1}; case "NameLocal" : {random 2.5}; @@ -85,17 +85,13 @@ if (!_is_init) then { }; _ratio_ied = _ratio_ied * btc_p_ied; - if (_ratio_ied > 0) then {[_city, _spawningRadius, (_ratio_ied / 2) + (random _ratio_ied)] call btc_fnc_ied_init_area}; + if (_ratio_ied > 0) then { + [[_city, _spawningRadius, (_ratio_ied / 2) + (random _ratio_ied)], btc_fnc_ied_initArea] call btc_fnc_delay_exec; + }; - _ieds = _city getVariable ["ieds", []]; _city setVariable ["initialized", true]; }; - -_city setVariable ["active", true]; - -if !(_ieds isEqualTo []) then { - [[_city, _ieds], btc_fnc_ied_check] call btc_fnc_delay_exec; -}; +[_city, btc_fnc_ied_check] call btc_fnc_delay_exec; private _delay = 0; if !(_data_units isEqualTo []) then { @@ -242,7 +238,29 @@ if !(_city getVariable ["has_suicider", false]) then { }; }; -[[_city, _spawningRadius, _type, _has_en, _has_ho], btc_fnc_tag_initArea] call btc_fnc_delay_exec; +if (_city getVariable ["data_tags", []] isEqualTo []) then { + private _tag_number = (switch _type do { + case "Hill" : {random 1}; + case "NameLocal" : {random 2.5}; + case "NameVillage" : {random 3.5}; + case "NameCity" : {random 5}; + case "NameCityCapital" : {random 6}; + case "Airport" : {random 6}; + case "NameMarine" : {0}; + }); + + if (_has_en) then { + _tag_number = _tag_number * 1.5; + }; + if (_has_ho) then { + _tag_number = _tag_number * 2; + }; + + if (_tag_number > 0) then { + [[_city, _spawningRadius, _type, _tag_number], btc_fnc_tag_initArea] call btc_fnc_delay_exec; + }; +}; +[_city, btc_fnc_tag_create] call btc_fnc_delay_exec; [{ params ["_has_en", "_city", "_radius", "_id"]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 7ece5e132..6a10ec6de 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -79,7 +79,7 @@ if (isServer) then { btc_fnc_ied_checkLoop = compile preprocessFileLineNumbers "core\fnc\ied\checkLoop.sqf"; btc_fnc_ied_create = compile preprocessFileLineNumbers "core\fnc\ied\create.sqf"; btc_fnc_ied_fired_near = compile preprocessFileLineNumbers "core\fnc\ied\fired_near.sqf"; - btc_fnc_ied_init_area = compile preprocessFileLineNumbers "core\fnc\ied\init_area.sqf"; + btc_fnc_ied_initArea = compile preprocessFileLineNumbers "core\fnc\ied\initArea.sqf"; btc_fnc_ied_suicider_active = compile preprocessFileLineNumbers "core\fnc\ied\suicider_active.sqf"; btc_fnc_ied_suicider_activeLoop = compile preprocessFileLineNumbers "core\fnc\ied\suicider_activeLoop.sqf"; btc_fnc_ied_suicider_create = compile preprocessFileLineNumbers "core\fnc\ied\suicider_create.sqf"; @@ -167,6 +167,7 @@ if (isServer) then { //TAG btc_fnc_tag_initArea = compile preprocessFileLineNumbers "core\fnc\tag\initArea.sqf"; btc_fnc_tag_eh = compile preprocessFileLineNumbers "core\fnc\tag\eh.sqf"; + btc_fnc_tag_create = compile preprocessFileLineNumbers "core\fnc\tag\create.sqf"; //LOG btc_fnc_log_createVehicle = compile preprocessFileLineNumbers "core\fnc\log\createVehicle.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf index 49fd388c6..e6b98bb7f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/check.sqf @@ -7,7 +7,6 @@ Description: Parameters: _city - City where IED has been created. [Object] - _ieds - All IED to create (even FACK IED). [Array] Returns: @@ -22,11 +21,13 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_city", objNull, [objNull]], - ["_ieds", [objNull], [[]]] + ["_city", objNull, [objNull]] ]; -private _ieds = _ieds apply {_x call btc_fnc_ied_create}; +private _array = _city getVariable ["ieds", []]; +if (_array isEqualTo []) exitWith {}; + +private _ieds = _array apply {_x call btc_fnc_ied_create}; if (btc_debug) then { [format ["START CITY ID %1", _city getVariable "id"], __FILE__, [btc_debug, false]] call btc_fnc_debug_message; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/initArea.sqf similarity index 95% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/initArea.sqf index 7ba396133..26c9ef7ff 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/init_area.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/initArea.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_ied_init_area +Function: btc_fnc_ied_initArea Description: Initialize positions of IEDS. @@ -14,7 +14,7 @@ Returns: Examples: (begin example) - _result = [] call btc_fnc_ied_init_area; + _result = [] call btc_fnc_ied_initArea; (end) Author: diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/create.sqf new file mode 100644 index 000000000..17d828f69 --- /dev/null +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/create.sqf @@ -0,0 +1,32 @@ + +/* ---------------------------------------------------------------------------- +Function: btc_fnc_tag_create + +Description: + Create tag stored in city namespace under "data_tags". + +Parameters: + _city - City to initialise. [Object] + +Returns: + +Examples: + (begin example) + _result = [] call btc_fnc_tag_create; + (end) + +Author: + Vdauphin + +---------------------------------------------------------------------------- */ + +params [ + ["_city", objNull, [objNull]] +]; + +private _array = _city getVariable ["data_tags", []]; +{ + _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_tagModel"]; + + [AGLToASL _tagPosASL, _vectorDirAndUp, _texture, objNull, _city, "", _tagModel] call ace_tagging_fnc_createTag; +} forEach _array; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf index 415e5488c..b9004bd77 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tag/initArea.sqf @@ -1,14 +1,14 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_ied_init_area +Function: btc_fnc_tag_initArea Description: Initialize positions of tags. Parameters: _city - City to initialise. [Object] - _area - Area to create IED. [Number] - _n - Number of IED, real and fake. [Number] + _area - Area to create tag. [Number] + _n - Number of tag. [Number] Returns: @@ -25,110 +25,85 @@ Author: params [ ["_city", objNull, [objNull]], ["_area", 100, [0]], - ["_type", "Hill", [""]], - ["_has_en", false, [true]], - ["_has_ho", false, [true]] + ["_n", 1, [0]] ]; private _array = _city getVariable ["data_tags", []]; -if (_array isEqualTo []) then { - private _n = (switch _type do { - case "Hill" : {random 1}; - case "NameLocal" : {random 2.5}; - case "NameVillage" : {random 3.5}; - case "NameCity" : {random 5}; - case "NameCityCapital" : {random 6}; - case "Airport" : {random 6}; - case "NameMarine" : {0}; - }); - - if (_has_en) then { - _n = _n * 1.5; - }; - if (_has_ho) then { - _n = _n * 2; - }; - private _roads = _city nearRoads 50; - private _road = if (_roads isEqualTo []) then { - objNull - } else { - selectRandom _roads - }; - for "_i" from 1 to (_n * 1.5) do { - private _sel_pos = [_city, _area] call CBA_fnc_randPos; - private _sel_dir = 0; - if !(surfaceIsWater _sel_pos) then { - if (isNil "_road" || {isNull _road}) then { - private _roads = _sel_pos nearRoads 50; - if !(_roads isEqualTo []) then { - _road = selectRandom _roads; - }; +private _roads = _city nearRoads 50; +private _road = if (_roads isEqualTo []) then { + objNull +} else { + selectRandom _roads +}; +for "_i" from 1 to (_n * 1.5) do { + private _sel_pos = [_city, _area] call CBA_fnc_randPos; + private _sel_dir = 0; + if !(surfaceIsWater _sel_pos) then { + if (isNil "_road" || {isNull _road}) then { + private _roads = _sel_pos nearRoads 50; + if !(_roads isEqualTo []) then { + _road = selectRandom _roads; + }; + } else { + private _connected = roadsConnectedTo _road; + if (_connected isEqualTo []) then { + _sel_pos = ([_road, -1] call btc_fnc_ied_randomRoadPos) select 0; + _road = objNull; } else { - private _connected = roadsConnectedTo _road; - if (_connected isEqualTo []) then { - _sel_pos = ([_road, -1] call btc_fnc_ied_randomRoadPos) select 0; - _road = objNull; - } else { - _sel_dir = _road getDir (_connected select 0); - _sel_pos = _road getPos [ - random (_road distance (_connected select 0)), - _sel_dir - ]; - _sel_pos = _sel_pos getPos [random 1, _sel_dir + 90 * (selectRandom [1, -1])]; - private _writingDirection = ((AGLToASL _sel_pos) select 2) < ((getPosASL (_connected select 0)) select 2); - _sel_dir = _sel_dir + 90 * ([-1, 1] select _writingDirection); - _road = _connected select selectRandomWeighted [0, 0.6, (count _connected) - 1, 0.4]; - }; + _sel_dir = _road getDir (_connected select 0); + _sel_pos = _road getPos [ + random (_road distance (_connected select 0)), + _sel_dir + ]; + _sel_pos = _sel_pos getPos [random 1, _sel_dir + 90 * (selectRandom [1, -1])]; + private _writingDirection = ((AGLToASL _sel_pos) select 2) < ((getPosASL (_connected select 0)) select 2); + _sel_dir = _sel_dir + 90 * ([-1, 1] select _writingDirection); + _road = _connected select selectRandomWeighted [0, 0.6, (count _connected) - 1, 0.4]; }; + }; - if (!isNull _road && {random 1 > 0.6}) then { // Draw sentences - private _sentences = ((localize (selectRandom btc_type_tags_sentences)) splitString " "); + if (!isNull _road && {random 1 > 0.6}) then { // Draw sentences + private _sentences = ((localize (selectRandom btc_type_tags_sentences)) splitString " "); + { + private _word = _x; { - private _word = _x; - { - private _letterPos = _sel_pos getPos [_forEachIndex * (0.7 + random 0.2), _sel_dir]; - - private _surface = surfaceNormal _letterPos; - private _v1 = vectorNormalized (_surface vectorMultiply -1); - private _v3 = _v1 vectorCrossProduct [0, 0, 1]; - private _v2 = _v3 vectorCrossProduct _v1; - if (_v2 isEqualTo [0, 0, 0]) then { - _v2 = [0, 1, 0]; - }; - - _letterPos set [2, 0]; - _array pushBack [_letterPos, [_v1, _v2], format ["\a3\ui_f\data\igui\cfg\simpletasks\letters\%1_ca.paa", _x], "UserTexture1m_F"]; - } forEach (_word splitString ""); - _sel_pos = _sel_pos getPos [1.4, _sel_dir + 90]; - } forEach _sentences; - } else { // Draw simple tag - private _surface = surfaceNormal _sel_pos; - private _v1 = vectorNormalized (_surface vectorMultiply -1); - private _v3 = _v1 vectorCrossProduct [0, 0, 1]; - private _v2 = _v3 vectorCrossProduct _v1; - if (_v2 isEqualTo [0, 0, 0]) then { - _v2 = [0, 1, 0]; - }; - - _sel_pos set [2, 0]; - _array pushBack [_sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; + private _letterPos = _sel_pos getPos [_forEachIndex * (0.7 + random 0.2), _sel_dir]; + + private _surface = surfaceNormal _letterPos; + private _v1 = vectorNormalized (_surface vectorMultiply -1); + private _v3 = _v1 vectorCrossProduct [0, 0, 1]; + private _v2 = _v3 vectorCrossProduct _v1; + if (_v2 isEqualTo [0, 0, 0]) then { + _v2 = [0, 1, 0]; + }; + + _letterPos set [2, 0]; + _array pushBack [_letterPos, [_v1, _v2], format ["\a3\ui_f\data\igui\cfg\simpletasks\letters\%1_ca.paa", _x], "UserTexture1m_F"]; + } forEach (_word splitString ""); + _sel_pos = _sel_pos getPos [1.4, _sel_dir + 90]; + } forEach _sentences; + } else { // Draw simple tag + private _surface = surfaceNormal _sel_pos; + private _v1 = vectorNormalized (_surface vectorMultiply -1); + private _v3 = _v1 vectorCrossProduct [0, 0, 1]; + private _v2 = _v3 vectorCrossProduct _v1; + if (_v2 isEqualTo [0, 0, 0]) then { + _v2 = [0, 1, 0]; }; - if (btc_debug) then { - private _marker = createMarker [format ["btc_tag_%1", _sel_pos], _sel_pos]; - _marker setMarkerType "mil_dot"; - _marker setMarkerColor "ColorGreen"; - _marker setMarkerText "Tag"; - _marker setMarkerSize [0.8, 0.8]; - }; + _sel_pos set [2, 0]; + _array pushBack [_sel_pos, [_v1, _v2], "a3\structures_f_epb\civ\graffiti\data\graffiti_ca.paa", selectRandom btc_type_tags]; + }; + + if (btc_debug) then { + private _marker = createMarker [format ["btc_tag_%1", _sel_pos], _sel_pos]; + _marker setMarkerType "mil_dot"; + _marker setMarkerColor "ColorGreen"; + _marker setMarkerText "Tag"; + _marker setMarkerSize [0.8, 0.8]; }; }; - _city setVariable ["data_tags", _array]; }; -{ - _x params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_tagModel"]; - - [AGLToASL _tagPosASL, _vectorDirAndUp, _texture, objNull, _city, "", _tagModel] call ace_tagging_fnc_createTag; -} forEach _array; +_city setVariable ["data_tags", _array]; From 87c76ea1db259a75fc1665e03c4250d7d2f47277 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 13 Dec 2020 16:19:53 +0100 Subject: [PATCH 233/264] Migrate panic animation to suppressed EH --- .../core/def/mission.sqf | 2 +- .../core/fnc/compile.sqf | 2 +- .../core/fnc/eh/server.sqf | 2 +- .../fnc/rep/{firednear.sqf => suppressed.sqf} | 38 ++++++++----------- 4 files changed, 19 insertions(+), 25 deletions(-) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/{firednear.sqf => suppressed.sqf} (55%) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 82fdd249e..89c908223 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -690,7 +690,7 @@ btc_rep_malus_civ_hd = - 2; btc_rep_malus_animal_hd = - 1; btc_rep_malus_civ_killed = - 10; btc_rep_malus_animal_killed = - 5; -btc_rep_malus_civ_firenear = - 5; +btc_rep_malus_civ_suppressed = - 5; btc_rep_malus_player_respawn = - 10; btc_rep_malus_veh_killed = - 25; btc_rep_malus_building_damaged = - 2.5; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 7ece5e132..21f10f559 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -137,7 +137,7 @@ if (isServer) then { btc_fnc_rep_change = compile preprocessFileLineNumbers "core\fnc\rep\change.sqf"; btc_fnc_rep_eh_effects = compile preprocessFileLineNumbers "core\fnc\rep\eh_effects.sqf"; btc_fnc_rep_hh = compile preprocessFileLineNumbers "core\fnc\rep\hh.sqf"; - btc_fnc_rep_firednear = compile preprocessFileLineNumbers "core\fnc\rep\firednear.sqf"; + btc_fnc_rep_suppressed = compile preprocessFileLineNumbers "core\fnc\rep\suppressed.sqf"; btc_fnc_rep_buildingchanged = compile preprocessFileLineNumbers "core\fnc\rep\buildingchanged.sqf"; btc_fnc_rep_explosives_defuse = compile preprocessFileLineNumbers "core\fnc\rep\explosives_defuse.sqf"; btc_fnc_rep_notify = compile preprocessFileLineNumbers "core\fnc\rep\notify.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf index bd9062dbf..8cee5d3ee 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/server.sqf @@ -31,7 +31,7 @@ addMissionEventHandler ["BuildingChanged", btc_fnc_rep_buildingchanged]; }] call CBA_fnc_addClassEventHandler; { [_x, "InitPost", { - [(_this select 0), "FiredNear", btc_fnc_rep_firednear] call CBA_fnc_addBISEventHandler; + [(_this select 0), "Suppressed", btc_fnc_rep_suppressed] call CBA_fnc_addBISEventHandler; [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; }, false] call CBA_fnc_addClassEventHandler; } forEach btc_civ_type_units; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf similarity index 55% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf index 36a7e0c4e..e16c33574 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/firednear.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf @@ -1,25 +1,22 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_rep_firednear +Function: btc_fnc_rep_suppressed Description: Detect if player is firing. Then add a random panic animation. If player fire in direction of a civilian without enemies around, punish him by applying reputation effect and reduce reputation. Parameters: - _civ - Unit. [Object] - _vehicle - Not used. [Object] - _distance - Distance of firing. [Number] - _weapon - Not used. [String] - _muzzle - Not used. [String] - _mode - Not used. [String] - _ammo - Type of ammo. [String] - _gunner - Unit firing around. [Object] + _unit - Unit to which the event is assigned [Object] + _distance - Distance of the projectile pass-by [Number] + _shooter - Who (or what) fired - vehicle or drone [Object] + _instigator - Who pressed the trigger. [Object] + _ammoObject - The ammunition itself [Object] Returns: Examples: (begin example) - [cursorObject, objNull, player distance cursorObject, "", "", "", "", player] call btc_fnc_rep_firednear; + [cursorObject, objNull, player distance cursorObject, "", "", "", "", player] call btc_fnc_rep_suppressed; (end) Author: @@ -29,27 +26,24 @@ Author: params [ ["_civ", objNull, [objNull]], - ["_vehicle", objNull, [objNull]], ["_distance", 0, [0]], - ["_weapon", "", [""]], - ["_muzzle", "", [""]], - ["_mode", "", [""]], - ["_ammo", "", [""]], - ["_gunner", objNull, [objNull]] + ["_shooter", objNull, [objNull]], + ["_instigator", objNull, [objNull]], + ["_ammoObject", objNull, [objNull]] ]; -if (_ammo isKindOf "SmokeShell") exitWith {}; +if (_ammoObject isKindOf "SmokeShell") exitWith {}; -_civ removeEventHandler ["FiredNear", _thisEventHandler]; +_civ removeEventHandler ["Suppressed", _thisEventHandler]; if (!(side group _civ isEqualTo civilian) || (random 3 < 1)) exitWith {}; [_civ, selectRandom ["ApanPknlMstpSnonWnonDnon_G01", "ApanPknlMstpSnonWnonDnon_G02", "ApanPknlMstpSnonWnonDnon_G03", "ApanPpneMstpSnonWnonDnon_G01", "ApanPpneMstpSnonWnonDnon_G02", "ApanPpneMstpSnonWnonDnon_G03"], 1] call ace_common_fnc_doAnimation; -if (side group _gunner isEqualTo btc_player_side) then { - if ((_gunner findNearestEnemy getPos _civ) distance _civ > 300) then { - if (abs((_gunner getDir _civ) - getDir _gunner) < 300/_distance) then { - [btc_rep_malus_civ_firenear, _gunner] call btc_fnc_rep_change; +if (side group _instigator isEqualTo btc_player_side) then { + if ((_shooter findNearestEnemy _civ) distance _civ > 300) then { + if (abs((_shooter getDir _civ) - getDir _shooter) < 300/_distance) then { + [btc_rep_malus_civ_suppressed, _shooter] call btc_fnc_rep_change; [getPos _civ] call btc_fnc_rep_eh_effects; if (btc_debug_log) then { From 7b19476462ef97b495077adb254acdd028e288a9 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 16 Dec 2020 13:41:10 +0100 Subject: [PATCH 234/264] Fix: Errors parameters --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index c92f93311..631cf960b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -257,7 +257,7 @@ if (_city getVariable ["data_tags", []] isEqualTo []) then { }; if (_tag_number > 0) then { - [[_city, _spawningRadius, _type, _tag_number], btc_fnc_tag_initArea] call btc_fnc_delay_exec; + [[_city, _spawningRadius, _tag_number], btc_fnc_tag_initArea] call btc_fnc_delay_exec; }; }; [_city, btc_fnc_tag_create] call btc_fnc_delay_exec; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf index c7c6b587a..96951854e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/delay/exec.sqf @@ -25,7 +25,7 @@ btc_delay_createUnit = btc_delay_createUnit + 0.2; [{ params [ - ["_parameters", [], [[]]], + "_parameters", ["_code", {}, [{}]] ]; From 2dda3997a66ed45cff4287d705421426c8f2abe8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 25 Dec 2020 14:33:14 +0100 Subject: [PATCH 235/264] FIX: Units pawned around cache spawn infinitly between server restart --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf | 4 +++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 68e3755f2..4a0f29b78 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -183,7 +183,7 @@ if (_city getVariable ["spawn_more", false]) then { }; }; -if !(btc_cache_pos isEqualTo [] && {!(btc_cache_obj getVariable ["btc_cache_unitsSpawned", false])}) then { +if (!(btc_cache_pos isEqualTo []) && {!(btc_cache_obj getVariable ["btc_cache_unitsSpawned", false])}) then { if (_city inArea [btc_cache_pos, _radius, _radius, 0, false]) then { btc_cache_obj setVariable ["btc_cache_unitsSpawned", true]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf index 3d1c0ffca..b96549e1d 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/load.sqf @@ -83,7 +83,8 @@ if (btc_hideouts isEqualTo []) then {[] spawn btc_fnc_final_phase;}; //CACHE private _array_cache = +(profileNamespace getVariable [format ["btc_hm_%1_cache", _name], []]); _array_cache params ["_cache_pos", "_cache_n", "_cache_info", "_cache_markers", "_cache_pictures", - ["_isChem", false, [true]] + ["_isChem", false, [true]], + ["_cache_unitsSpawned", false, [true]] ]; btc_cache_pos = _cache_pos; @@ -91,6 +92,7 @@ btc_cache_n = _cache_n; btc_cache_info = _cache_info; [_cache_pos, btc_p_chem, [1, 0] select _isChem] call btc_fnc_cache_create; +btc_cache_obj setVariable ["btc_cache_unitsSpawned", _cache_unitsSpawned]; btc_cache_markers = []; { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf index 0622f613f..4bc67deab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/db/save.sqf @@ -112,6 +112,7 @@ private _cache_markers = []; _array_cache pushBack _cache_markers; _array_cache pushBack [btc_cache_pictures select 0, btc_cache_pictures select 1, []]; _array_cache pushBack (btc_cache_obj in btc_chem_contaminated); +_array_cache pushBack (btc_cache_obj getVariable ["btc_cache_unitsSpawned", false]); profileNamespace setVariable [format ["btc_hm_%1_cache", _name], +_array_cache]; //REPUTATION From 58376e14f0fa49864b54ed5967d6efd215075122 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 25 Dec 2020 19:29:08 +0100 Subject: [PATCH 236/264] FIX: Use direct call for btc_fnc_mil_send --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hack.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hack.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hack.sqf index eabfe237b..267057e29 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hack.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/hack.sqf @@ -63,7 +63,7 @@ private _defend_taskID = _taskID + "df"; private _groups = []; private _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; for "_i" from 1 to (2 + round random 1) do { - _groups pushBack ([_closest, getPos _terminal, 1, selectRandom btc_type_motorized] call btc_fnc_mil_send); + _groups pushBack ([btc_fnc_mil_send, [_closest, getPos _terminal, 1, selectRandom btc_type_motorized]] call CBA_fnc_directCall); }; { From 7d672824e0e40ed0476aa2b7a53d122ce9a1ef0d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 26 Dec 2020 11:03:58 +0100 Subject: [PATCH 237/264] Add Suppress EH to headless --- .../core/fnc/compile.sqf | 2 +- .../core/fnc/eh/headless.sqf | 1 + .../core/fnc/rep/suppressed.sqf | 25 +++++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 21f10f559..aa731cd8a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -137,7 +137,6 @@ if (isServer) then { btc_fnc_rep_change = compile preprocessFileLineNumbers "core\fnc\rep\change.sqf"; btc_fnc_rep_eh_effects = compile preprocessFileLineNumbers "core\fnc\rep\eh_effects.sqf"; btc_fnc_rep_hh = compile preprocessFileLineNumbers "core\fnc\rep\hh.sqf"; - btc_fnc_rep_suppressed = compile preprocessFileLineNumbers "core\fnc\rep\suppressed.sqf"; btc_fnc_rep_buildingchanged = compile preprocessFileLineNumbers "core\fnc\rep\buildingchanged.sqf"; btc_fnc_rep_explosives_defuse = compile preprocessFileLineNumbers "core\fnc\rep\explosives_defuse.sqf"; btc_fnc_rep_notify = compile preprocessFileLineNumbers "core\fnc\rep\notify.sqf"; @@ -245,6 +244,7 @@ btc_fnc_patrol_disabled = compile preprocessFileLineNumbers "core\fnc\patrol\dis //REP btc_fnc_rep_hd = compile preprocessFileLineNumbers "core\fnc\rep\hd.sqf"; +btc_fnc_rep_suppressed = compile preprocessFileLineNumbers "core\fnc\rep\suppressed.sqf"; //ARSENAL btc_fnc_arsenal_ammoUsage = compile preprocessFileLineNumbers "core\fnc\arsenal\ammoUsage.sqf"; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf index db48daf6a..d10bb8641 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/eh/headless.sqf @@ -25,6 +25,7 @@ Author: { [_x, "InitPost", { + [(_this select 0), "Suppressed", btc_fnc_rep_suppressed] call CBA_fnc_addBISEventHandler; [(_this select 0), "HandleDamage", btc_fnc_rep_hd] call CBA_fnc_addBISEventHandler; }, false, [], true] call CBA_fnc_addClassEventHandler; } forEach btc_civ_type_units; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf index e16c33574..3b1684fe7 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf @@ -40,15 +40,20 @@ if (!(side group _civ isEqualTo civilian) || (random 3 < 1)) exitWith {}; [_civ, selectRandom ["ApanPknlMstpSnonWnonDnon_G01", "ApanPknlMstpSnonWnonDnon_G02", "ApanPknlMstpSnonWnonDnon_G03", "ApanPpneMstpSnonWnonDnon_G01", "ApanPpneMstpSnonWnonDnon_G02", "ApanPpneMstpSnonWnonDnon_G03"], 1] call ace_common_fnc_doAnimation; -if (side group _instigator isEqualTo btc_player_side) then { - if ((_shooter findNearestEnemy _civ) distance _civ > 300) then { - if (abs((_shooter getDir _civ) - getDir _shooter) < 300/_distance) then { - [btc_rep_malus_civ_suppressed, _shooter] call btc_fnc_rep_change; - [getPos _civ] call btc_fnc_rep_eh_effects; - - if (btc_debug_log) then { - [format ["GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; - }; - }; +if ( + side group _instigator isEqualTo btc_player_side && + {(_shooter findNearestEnemy _civ) distance _civ > 300} && + {abs((_shooter getDir _civ) - getDir _shooter) < 300/_distance} +) then { + if (isServer) then { + [btc_rep_malus_civ_suppressed, _shooter] call btc_fnc_rep_change; + [getPos _civ] call btc_fnc_rep_eh_effects; + } else { + [btc_rep_malus_civ_suppressed, _shooter] remoteExecCall ["btc_fnc_rep_change", 2]; + [getPos _civ] remoteExecCall ["btc_fnc_rep_eh_effects", 2]; + }; + + if (btc_debug_log) then { + [format ["GREP %1 THIS = %2", btc_global_reputation, _this], __FILE__, [false]] call btc_fnc_debug_message; }; }; From 22292b0c1bb9864a21741ed89995673ae1c87bc0 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 26 Dec 2020 14:09:02 +0100 Subject: [PATCH 238/264] FIX: Vehicle sended can blow up on reactivation --- .../core/fnc/city/activate.sqf | 8 ++++---- .../core/fnc/data/add_group.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf | 2 -- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index 68e3755f2..0db5775b2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -178,7 +178,7 @@ if (_city getVariable ["spawn_more", false]) then { if (btc_p_veh_armed_spawn_more) then { private _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; for "_i" from 1 to (1 + round random 2) do { - [{_this call btc_fnc_mil_send}, [_closest, getPos _city, 1, selectRandom btc_type_motorized_armed], _i * 2] call CBA_fnc_waitAndExecute; + [[_closest, [_city, _spawningRadius/3] call CBA_fnc_randPos, 1, selectRandom btc_type_motorized_armed], btc_fnc_mil_send] call btc_fnc_delay_exec; }; }; }; @@ -192,7 +192,7 @@ if !(btc_cache_pos isEqualTo [] && {!(btc_cache_obj getVariable ["btc_cache_unit if (btc_p_veh_armed_spawn_more) then { private _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; for "_i" from 1 to (1 + round random 3) do { - [{_this call btc_fnc_mil_send}, [_closest, getPos _city, 1, selectRandom btc_type_motorized_armed], _i * 2] call CBA_fnc_waitAndExecute; + [[_closest, [_city, _spawningRadius/3] call CBA_fnc_randPos, 1, selectRandom btc_type_motorized_armed], btc_fnc_mil_send] call btc_fnc_delay_exec; }; }; }; @@ -218,9 +218,9 @@ if (_has_ho && {!(_city getVariable ["ho_units_spawned", false])}) then { }; }; if (btc_p_veh_armed_ho) then { - _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; + private _closest = [_city, btc_city_all select {!(_x getVariable ["active", false])}, false] call btc_fnc_find_closecity; for "_i" from 1 to (2 + round random 3) do { - [{_this call btc_fnc_mil_send}, [_closest, _pos, 1, selectRandom btc_type_motorized_armed], _i * 2] call CBA_fnc_waitAndExecute; + [[_closest, [_pos, _spawningRadius/3] call CBA_fnc_randPos, 1, selectRandom btc_type_motorized_armed], btc_fnc_mil_send] call btc_fnc_delay_exec; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf index b4ba74440..0eda468d5 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/data/add_group.sqf @@ -28,7 +28,7 @@ params [ if (btc_debug_log) then { [format ["%1", _group], __FILE__, [false]] call btc_fnc_debug_message; }; -_group setVariable ["no_cache", Nil]; +_group setVariable ["no_cache", nil]; [_group] call CBA_fnc_clearWaypoints; private _city = [leader _group, btc_city_all, false] call btc_fnc_find_closecity; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf index 3644356ab..ceee87122 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/send.sqf @@ -64,8 +64,6 @@ switch (_typeOf_patrol) do { }; case 1 : { [_group, _dest, -1, "MOVE", "AWARE", "RED", "NORMAL", "NO CHANGE", "(group this) call btc_fnc_data_add_group;", nil, 60] call CBA_fnc_addWaypoint; - [_group, _dest, -1, "GETOUT", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; - [_group, _dest, -1, "SENTRY", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; }; }; From f98c0710ba7296e67dc2ba14c06a68542d531256 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 27 Dec 2020 10:15:51 +0100 Subject: [PATCH 239/264] Rename fnc btc_fnc_cache_hd_cache --- .../core/fnc/cache/create.sqf | 2 +- .../core/fnc/cache/{hd_cache.sqf => hd.sqf} | 10 +++++----- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) rename =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/{hd_cache.sqf => hd.sqf} (88%) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf index 559b833e9..4cb694556 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/create.sqf @@ -45,7 +45,7 @@ clearWeaponCargoGlobal btc_cache_obj; clearItemCargoGlobal btc_cache_obj; clearMagazineCargoGlobal btc_cache_obj; -[btc_cache_obj, "HandleDamage", btc_fnc_cache_hd_cache] remoteExecCall ["CBA_fnc_addBISEventHandler", 0, true]; +[btc_cache_obj, "HandleDamage", btc_fnc_cache_hd] remoteExecCall ["CBA_fnc_addBISEventHandler", 0, true]; if (_isChem) then { btc_chem_contaminated pushBack btc_cache_obj; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf similarity index 88% rename from =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf rename to =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf index df087830e..b94bf97da 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd_cache.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- -Function: btc_fnc_cache_hd_cache +Function: btc_fnc_cache_hd Description: Destroy an ammo cache only when an explposive with damage > 0.6 is used. @@ -16,7 +16,7 @@ Returns: Examples: (begin example) - _result = [] call btc_fnc_cache_hd_cache; + _result = [] call btc_fnc_cache_hd; (end) Author: @@ -35,14 +35,14 @@ params [ private _explosive = (getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") > 0); if ( - !(_cache getVariable ["btc_fnc_cache_hd_cache_fired", false]) && + !(_cache getVariable ["btc_fnc_cache_hd_fired", false]) && {_explosive} && {_damage > 0.6} ) then { - _cache setVariable ["btc_fnc_cache_hd_cache_fired", true]; + _cache setVariable ["btc_fnc_cache_hd_fired", true]; if (!isServer) exitWith { - _this remoteExecCall ["btc_fnc_cache_hd_cache", 2]; + _this remoteExecCall ["btc_fnc_cache_hd", 2]; }; //Effects diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf index 6a10ec6de..a1dae75b6 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/compile.sqf @@ -200,7 +200,7 @@ if (isServer) then { /////////////////////CLIENT AND SERVER\\\\\\\\\\\\\\\\\\\\\ //CACHE -btc_fnc_cache_hd_cache = compile preprocessFileLineNumbers "core\fnc\cache\hd_cache.sqf"; +btc_fnc_cache_hd = compile preprocessFileLineNumbers "core\fnc\cache\hd.sqf"; //COMMON btc_fnc_find_veh_with_turret = compile preprocessFileLineNumbers "core\fnc\common\find_veh_with_turret.sqf"; From e152ee5bd3a7dcdf1f97ec9eef28fbc9a81c4a8c Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 27 Dec 2020 16:01:08 +0100 Subject: [PATCH 240/264] Preserve reference For some reason, reference isn't preserved since https://github.com/Vdauphin/HeartsAndMinds/pull/968 --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 58034b19e..6274dddd3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -172,10 +172,10 @@ if (isServer) then { //Chem btc_chem_decontaminate = [btc_bigShower]; - missionNamespace setVariable ["btc_chem_contaminated", [], true]; + btc_chem_contaminated = []; publicVariable "btc_chem_contaminated"; //Preserve reference //Spect - missionNamespace setVariable ["btc_spect_emp", [], true]; + btc_spect_emp = []; publicVariable "btc_spect_emp"; //Preserve reference //Cache btc_cache_type = [ From 7d14a4386ef5029c2a89d4ca69f0bfe3529793f6 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 28 Dec 2020 22:58:32 +0100 Subject: [PATCH 241/264] Use instigator to find who killed/damage the unit --- .../core/fnc/cache/hd.sqf | 8 ++++++-- .../core/fnc/mil/hd_hideout.sqf | 20 +++++++++---------- .../core/fnc/rep/hd.sqf | 20 +++++++++++-------- .../core/fnc/veh/respawn.sqf | 4 ++-- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf index b94bf97da..5bd209c8f 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/cache/hd.sqf @@ -11,6 +11,8 @@ Parameters: _damage - Amount of damage get by the object. [Number] _injurer - Not use. [Object] _ammo - Type of ammo use to make damage. [String] + _hitIndex - Hit part index of the hit point, -1 otherwise. [Number] + _instigator - Person who pulled the trigger. [Object] Returns: @@ -29,7 +31,9 @@ params [ ["_part", "", [""]], ["_damage", 0, [0]], ["_injurer", objNull, [objNull]], - ["_ammo", "", [""]] + ["_ammo", "", [""]], + ["_hitIndex", 0, [0]], + ["_instigator", objNull, [objNull]] ]; private _explosive = (getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") > 0); @@ -67,7 +71,7 @@ if ( [format ["DESTROYED: ID %1 POS %2", btc_cache_n, btc_cache_pos], __FILE__, [false]] call btc_fnc_debug_message; }; - [btc_rep_bonus_cache, _injurer] call btc_fnc_rep_change; + [btc_rep_bonus_cache, _instigator] call btc_fnc_rep_change; //Notification [0] remoteExecCall ["btc_fnc_show_hint", 0]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf index 7f487f432..4ea7c53cb 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/hd_hideout.sqf @@ -6,14 +6,13 @@ Description: Fill me when you edit me ! Parameters: - _hideout - [Object] - _selection - [String] - _damage - [Number] - _source - [Object] - _ammo - [String] - _hitIndex - [Number] - _instigator - [Object] - _hitPoint - [String] + _hideout - Object to destroy. [Object] + _selection - Not use. [String] + _damage - Amount of damage get by the object. [Number] + _source - Not use. [Object] + _ammo - Type of ammo use to make damage. [String] + _hitIndex - Hit part index of the hit point, -1 otherwise. [Number] + _instigator - Person who pulled the trigger. [Object] Returns: @@ -34,8 +33,7 @@ params [ ["_source", objNull, [objNull]], ["_ammo", "", [""]], ["_hitIndex", 0, [0]], - ["_instigator", objNull, [objNull]], - ["_hitPoint", "", [""]] + ["_instigator", objNull, [objNull]] ]; private _explosive = getNumber(configFile >> "cfgAmmo" >> _ammo >> "explosive") > 0; @@ -44,7 +42,7 @@ if (_explosive && {_damage > 0.6}) then { btc_hideouts deleteAt (btc_hideouts find _hideout); publicVariable "btc_hideouts"; - [btc_rep_bonus_hideout, _source] call btc_fnc_rep_change; + [btc_rep_bonus_hideout, _instigator] call btc_fnc_rep_change; private _id = _hideout getVariable "id"; private _marker = createMarker [format ["btc_hideout_%1_destroyed", _id], getPos _hideout]; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf index 0d5df13a0..601b83147 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/hd.sqf @@ -6,11 +6,13 @@ Description: Handle damage. Parameters: - _unit - [Object] - _part - [String] - _dam - [Number] - _injurer - [Object] - _ammo - [String] + _unit - Object to destroy. [Object] + _part - Not use. [String] + _dam - Amount of damage get by the object. [Number] + _injurer - Not use. [Object] + _ammo - Type of ammo use to make damage. [String] + _hitIndex - Hit part index of the hit point, -1 otherwise. [Number] + _instigator - Person who pulled the trigger. [Object] Returns: @@ -29,10 +31,12 @@ params [ ["_part", "", [""]], ["_dam", 0, [0]], ["_injurer", objNull, [objNull]], - ["_ammo", "", [""]] + ["_ammo", "", [""]], + ["_hitIndex", 0, [0]], + ["_instigator", objNull, [objNull]] ]; -if (!isPlayer _injurer || {_dam <= 0.05}) exitWith {_dam}; +if (!isPlayer _instigator || {_dam <= 0.05}) exitWith {_dam}; private _isAgent = isAgent teamMember _unit; if ( !_isAgent && { @@ -48,7 +52,7 @@ if (!isServer) exitWith { [ [btc_rep_malus_civ_hd, btc_rep_malus_animal_hd] select _isAgent, - _injurer + _instigator ] call btc_fnc_rep_change; if (btc_global_reputation < 600) then {[getPos _unit] call btc_fnc_rep_eh_effects;}; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf index 4187c95ae..b3e0c0bb0 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/veh/respawn.sqf @@ -78,7 +78,7 @@ _data pushBack (_vehicle getVariable ["btc_EDENinventory", []]); }, [_vehicle, _data], _data select 3] call CBA_fnc_waitAndExecute; if (isServer) then { - [btc_rep_malus_veh_killed, _killer] call btc_fnc_rep_change; + [btc_rep_malus_veh_killed, _instigator] call btc_fnc_rep_change; } else { - [btc_rep_malus_veh_killed, _killer] remoteExecCall ["btc_fnc_rep_change", 2]; + [btc_rep_malus_veh_killed, _instigator] remoteExecCall ["btc_fnc_rep_change", 2]; }; From a47c03f76b1ea9d1e91736e9cd4f97980f01484e Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Tue, 29 Dec 2020 13:49:32 +0100 Subject: [PATCH 242/264] FIX: camonet sometimes fall --- .../fnc/mil/create_hideout_composition.sqf | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout_composition.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout_composition.sqf index ab55d6edc..898f6736e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout_composition.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/mil/create_hideout_composition.sqf @@ -3,16 +3,17 @@ Function: btc_fnc_mil_create_hideout_composition Description: - Fill me when you edit me ! + Create a random hideout composition. Parameters: - _pos - [Array] + _pos - Position. [Array] Returns: + _result - The flag. [Object] Examples: (begin example) - _result = [] call btc_fnc_mil_create_hideout_composition; + _result = [getPos (allPlayers#0)] call btc_fnc_mil_create_hideout_composition; (end) Author: @@ -25,13 +26,14 @@ params [ ]; private _type_bigbox = selectRandom ["Box_FIA_Ammo_F", "C_supplyCrate_F", "Box_East_AmmoVeh_F"]; +private _power = selectRandom btc_type_power; private _composition_hideout = [ [selectRandom btc_type_campfire,0,[-2.30957,-1.02979,0]], [_type_bigbox,121.331,[0.675781,-1.52539,0]], [selectRandom btc_type_bigbox,227.166,[2.66504,1.4126,0]], [selectRandom btc_type_sleepingbag,135.477,[0.758789,-3.91309,0]], - [selectRandom btc_type_power,77.6499,[0.418945,3.51855,0]], + [_power,77.6499,[0.418945,3.51855,0]], [selectRandom btc_type_seat,171.123,[-2.08203,-3.39795,0]], ["Flag_Red_F",0,[0,0,0]], [selectRandom btc_type_sleepingbag,161.515,[-0.726563,-4.76953,0]], @@ -44,8 +46,13 @@ private _composition_hideout = [ [selectRandom btc_type_tent,10,[-4.35303,-5.66309,0]], [selectRandom btc_type_tent,300,[-8.47949,-1.64063,0]] ]; -if (random 1 > 0.5) then { - _composition_hideout pushBack [selectRandom btc_type_camonet,0,[-0.84668,-2.16113,0]]; +if ( + random 1 > 0.2 && + {!(_power isKindOf "Land_JetEngineStarter_01_F")} && + {!(_power isKindOf "Land_DieselGroundPowerUnit_01_F")} && + {!(_power isKindOf "Land_WaterPump_01_F")} +) then { + _composition_hideout pushBack [selectRandom (btc_type_camonet - ["Land_IRMaskingCover_02_F","CamoNet_BLUFOR_F","CamoNet_OPFOR_F","CamoNet_INDP_F","CamoNet_ghex_F","CamoNet_wdl_F"]),0,[-0.84668,-2.16113,0]]; }; private _composition = [_pos, random 360, _composition_hideout] call btc_fnc_create_composition; From 785d5ee5e6acba12dfff90db3992cd25b5b3ca32 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 8 Jan 2021 11:37:23 +0100 Subject: [PATCH 243/264] FIX: Doesn't return closer enemies --- .../core/fnc/info/ask.sqf | 54 +++++++------------ .../core/fnc/info/troops.sqf | 32 +++++------ 2 files changed, 36 insertions(+), 50 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf index dd13decc8..2151a8d20 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/ask.sqf @@ -3,17 +3,17 @@ Function: btc_fnc_info_ask Description: - Fill me when you edit me ! + Ask information to an IA. Parameters: - _man - [Object] - _isInterrogate - [Boolean] + _man - Man giving information. [Object] + _isInterrogate - Is interrogated. [Boolean] Returns: Examples: (begin example) - _result = [] call btc_fnc_info_ask; + [cursorObject] call btc_fnc_info_ask; (end) Author: @@ -40,7 +40,10 @@ if !(_man call ace_medical_status_fnc_isInStableCondition) exitWith { [name _man, _complain] call btc_fnc_showSubtitle; }; -if ((_man getVariable ["btc_already_asked", false]) || (_man getVariable ["btc_already_interrogated", false])) exitWith { +if ( + _man getVariable ["btc_already_asked", false] || + _man getVariable ["btc_already_interrogated", false] +) exitWith { [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_ALLREADYANS"] call btc_fnc_showSubtitle; }; @@ -59,7 +62,6 @@ waitUntil {!(isNil "btc_int_ask_data")}; private _rep = btc_int_ask_data; private _chance = (random 300) + (random _rep) + _rep/2; -private _info = ""; private _info_type = ""; switch !(_isInterrogate) do { case (_chance < 200) : {_info_type = "NO";}; @@ -78,35 +80,17 @@ private _info = selectRandomWeighted [ "CACHE", 0.2 ]; -switch (_info_type) do { - case "REAL" : { - switch (_info) do { - case "TROOPS" : { - [name _man, true] call btc_fnc_info_troops; - }; - case "HIDEOUT" : { - [name _man, true] call btc_fnc_info_hideout_asked; - }; - case "CACHE" : { - [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_CACHEMAP"] call btc_fnc_showSubtitle; - sleep 2; - [true] remoteExecCall ["btc_fnc_info_cache", 2]; - }; - }; +_info_type = _info_type isEqualTo "REAL"; +switch (_info) do { + case "TROOPS" : { + [_man, _info_type] call btc_fnc_info_troops; }; - case "FAKE" : { - switch (_info) do { - case "TROOPS" : { - [name _man, false] call btc_fnc_info_troops; - }; - case "HIDEOUT" : { - [name _man, false] call btc_fnc_info_hideout_asked; - }; - case "CACHE" : { - [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_CACHEMAP"] call btc_fnc_showSubtitle; - sleep 2; - [false] remoteExecCall ["btc_fnc_info_cache", 2]; - }; - }; + case "HIDEOUT" : { + [name _man, _info_type] call btc_fnc_info_hideout_asked; + }; + case "CACHE" : { + [name _man, localize "STR_BTC_HAM_CON_INFO_ASK_CACHEMAP"] call btc_fnc_showSubtitle; + sleep 2; + [_info_type] remoteExecCall ["btc_fnc_info_cache", 2]; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf index 162e48793..57861a099 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf @@ -3,18 +3,18 @@ Function: btc_fnc_info_troops Description: - Fill me when you edit me ! + Show troops information. Parameters: - _name - [String] - _is_real - [Boolean] - _text - [String] + _name - IA giving the information. [Object] + _is_real - Is a real information. [Boolean] + _text - Text to show. [String] Returns: Examples: (begin example) - _result = [] call btc_fnc_info_troops; + [] call btc_fnc_info_troops; (end) Author: @@ -23,21 +23,23 @@ Author: ---------------------------------------------------------------------------- */ params [ - ["_name", "Vdauphin", [""]], + ["_man", objNull, [objNull]], ["_is_real", true, [true]], ["_text", "", [""]] ]; if (_is_real) then { - private _array = (position player) nearEntities [btc_type_units, 2500]; - if !(_array isEqualTo []) then { - private _man = _array select 0; - private _dist = (player distance _man) + (random 150) - (random 150); - private _dir = player getDir _man; + private _array = player nearEntities [btc_type_units, 2500]; + _array = _array - [_man]; + if (_array isEqualTo []) then { + _text = localize "STR_BTC_HAM_CON_INFO_TROOPS_FALSE"; + } else { + _array = _array apply {[player distance _x, _x]}; + private _nearestEnemy = _array select 0 select 1; + private _dist = player distance ([_nearestEnemy, 100] call CBA_fnc_randPos); + private _dir = player getDir _nearestEnemy; private _card = [_dir] call btc_fnc_get_cardinal; _text = format [localize "STR_BTC_HAM_CON_INFO_TROOPS_TRUE", _card, round _dist]; - } else { - _text = localize "STR_BTC_HAM_CON_INFO_TROOPS_FALSE"; }; } else { if ((random 1) > 0.5) then { @@ -52,5 +54,5 @@ if (_is_real) then { if (btc_debug) then {_text = _text + " - " + str _is_real}; -[_name, _text] call btc_fnc_showSubtitle; -player createDiaryRecord ["btc_diarylog", [str(mapGridPosition player) + " - " + _name, _text]]; \ No newline at end of file +[name _man, _text] call btc_fnc_showSubtitle; +player createDiaryRecord ["btc_diarylog", [str(mapGridPosition player) + " - " + name _man, _text]]; \ No newline at end of file From e477d364fe1fbea12502d762a6a0167fb3850349 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 8 Jan 2021 11:43:36 +0100 Subject: [PATCH 244/264] Missing ending line --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf index 57861a099..3aaa8b94e 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/info/troops.sqf @@ -55,4 +55,4 @@ if (_is_real) then { if (btc_debug) then {_text = _text + " - " + str _is_real}; [name _man, _text] call btc_fnc_showSubtitle; -player createDiaryRecord ["btc_diarylog", [str(mapGridPosition player) + " - " + name _man, _text]]; \ No newline at end of file +player createDiaryRecord ["btc_diarylog", [str(mapGridPosition player) + " - " + name _man, _text]]; From 42380f6a5d7ae0090ab86327391875eb209c14af Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 14 Jan 2021 14:33:26 +0100 Subject: [PATCH 245/264] Update to the new suppressed event --- .../core/def/mission.sqf | 2 +- .../core/fnc/rep/suppressed.sqf | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 89c908223..dc32161ec 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -690,7 +690,7 @@ btc_rep_malus_civ_hd = - 2; btc_rep_malus_animal_hd = - 1; btc_rep_malus_civ_killed = - 10; btc_rep_malus_animal_killed = - 5; -btc_rep_malus_civ_suppressed = - 5; +btc_rep_malus_civ_suppressed = - 4; btc_rep_malus_player_respawn = - 10; btc_rep_malus_veh_killed = - 25; btc_rep_malus_building_damaged = - 2.5; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf index 3b1684fe7..88477ea47 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/suppressed.sqf @@ -32,18 +32,23 @@ params [ ["_ammoObject", objNull, [objNull]] ]; +if (_civ getVariable ["btc_fnc_rep_suppressed_fired", false] isEqualTo 2) exitWith {}; if (_ammoObject isKindOf "SmokeShell") exitWith {}; +if !(side group _civ isEqualTo civilian) exitWith {_civ setVariable ["btc_fnc_rep_suppressed_fired", 2]}; -_civ removeEventHandler ["Suppressed", _thisEventHandler]; - -if (!(side group _civ isEqualTo civilian) || (random 3 < 1)) exitWith {}; - -[_civ, selectRandom ["ApanPknlMstpSnonWnonDnon_G01", "ApanPknlMstpSnonWnonDnon_G02", "ApanPknlMstpSnonWnonDnon_G03", "ApanPpneMstpSnonWnonDnon_G01", "ApanPpneMstpSnonWnonDnon_G02", "ApanPpneMstpSnonWnonDnon_G03"], 1] call ace_common_fnc_doAnimation; +if ( + _civ getVariable ["btc_fnc_rep_suppressed_fired", 0] isEqualTo 0 && + {random 3 < 1} +) then { + _civ setVariable ["btc_fnc_rep_suppressed_fired", 1]; + [_civ, selectRandom ["ApanPknlMstpSnonWnonDnon_G01", "ApanPknlMstpSnonWnonDnon_G02", "ApanPknlMstpSnonWnonDnon_G03", "ApanPpneMstpSnonWnonDnon_G01", "ApanPpneMstpSnonWnonDnon_G02", "ApanPpneMstpSnonWnonDnon_G03"], 1] call ace_common_fnc_doAnimation; +}; if ( - side group _instigator isEqualTo btc_player_side && - {(_shooter findNearestEnemy _civ) distance _civ > 300} && - {abs((_shooter getDir _civ) - getDir _shooter) < 300/_distance} + _distance < 2 && + {side group _instigator isEqualTo btc_player_side} && + {(_shooter findNearestEnemy _civ) distance _civ > 200} && + {abs((_shooter getDir _civ) - getDir _shooter) < 150/(_shooter distance _civ)} ) then { if (isServer) then { [btc_rep_malus_civ_suppressed, _shooter] call btc_fnc_rep_change; From c35099d91528fb1cb85d6fd0ce8e2e81de18ac06 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 15 Jan 2021 18:20:07 +0100 Subject: [PATCH 246/264] Add Enoch Tanoa and flated HEMTT --- =BTC=co@30_Hearts_and_Minds.Altis/mission.sqm | 42 +- ...ion_RHSUS_Altis.sqm => mission__Enoch.sqm} | 2278 +++++++------- ...ion_RHSUS_Tanoa.sqm => mission__Tanoa.sqm} | 2639 +++++------------ 3 files changed, 1883 insertions(+), 3076 deletions(-) rename =BTC=co@30_Hearts_and_Minds.Altis/{mission_RHSUS_Altis.sqm => mission__Enoch.sqm} (76%) rename =BTC=co@30_Hearts_and_Minds.Altis/{mission_RHSUS_Tanoa.sqm => mission__Tanoa.sqm} (57%) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm index 6c3dcf4be..69e9fd0bd 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm @@ -16,10 +16,10 @@ class EditorData }; class Camera { - pos[]={8310.1777,98.629913,10084.459}; - dir[]={0.098348215,-0.70036846,-0.70702177}; - up[]={0.096501924,0.7137264,-0.69374603}; - aside[]={-0.99049145,-7.9450547e-007,-0.13778168}; + pos[]={8314.7744,91.116623,10084.846}; + dir[]={-0.80029076,-0.58512336,0.13129118}; + up[]={-0.57747674,0.81089264,0.09473715}; + aside[]={0.16189197,-1.5887781e-007,0.98683923}; }; }; binarizationWanted=0; @@ -42,6 +42,7 @@ addons[]= "A3_Characters_F_Enoch", "A3_Air_F_Heli_Heli_Transport_03", "A3_Soft_F_Beta_Truck_01", + "A3_Soft_F_Enoch_Truck_01", "A3_Soft_F_Exp_LSV_01", "A3_Soft_F_MRAP_01", "A3_Armor_F_Beta_APC_Wheeled_01", @@ -49,7 +50,6 @@ addons[]= "A3_Air_F_Beta_Heli_Attack_01", "A3_Props_F_Enoch_Military_Decontamination", "A3_Signs_F", - "A3_Soft_F_Enoch_Truck_01", "A3_Armor_F_Beta_APC_Tracked_01" }; class AddonsMetaData @@ -164,43 +164,43 @@ class AddonsMetaData }; class Item15 { - className="A3_Soft_F"; - name="Arma 3 Alpha - Unarmored Land Vehicles"; + className="A3_Soft_F_Enoch"; + name="Arma 3 Contact Platform - Unarmored Land Vehicles"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; class Item16 { - className="A3_Armor_F_Beta"; - name="Arma 3 Beta - Armored Land Vehicles"; + className="A3_Soft_F"; + name="Arma 3 Alpha - Unarmored Land Vehicles"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; class Item17 { - className="A3_Air_F_Beta"; - name="Arma 3 Beta - Aircraft"; + className="A3_Armor_F_Beta"; + name="Arma 3 Beta - Armored Land Vehicles"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; class Item18 { - className="A3_Props_F_Enoch"; - name="Arma 3 Enoch - Decorative and Mission Objects"; + className="A3_Air_F_Beta"; + name="Arma 3 Beta - Aircraft"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; class Item19 { - className="A3_Signs_F"; - name="Arma 3 - Signs"; + className="A3_Props_F_Enoch"; + name="Arma 3 Contact Platform - Decorative and Mission Objects"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; class Item20 { - className="A3_Soft_F_Enoch"; - name="Arma 3 Enoch - Unarmored Land Vehicles"; + className="A3_Signs_F"; + name="Arma 3 - Signs"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; @@ -2547,8 +2547,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8299.2021,78.316971,10089.534}; - angles[]={0.0013439035,0.94247776,6.232553}; + position[]={8299.4082,78.879608,10089.423}; + angles[]={0.0013372133,0.94247776,6.2325611}; }; side="Empty"; flags=4; @@ -2558,8 +2558,8 @@ class Mission name="btc_veh_15"; }; id=160; - type="B_Truck_01_covered_F"; - atlOffset=-0.095001221; + type="B_Truck_01_flatbed_F"; + atlOffset=5.3405762e-005; class CustomAttributes { class Attribute0 diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm similarity index 76% rename from =BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm rename to =BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm index cd0c7eef4..4ee4ca019 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Altis.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm @@ -1,14 +1,14 @@ version=53; class EditorData { - moveGridStep=1; + moveGridStep=0.125; angleGridStep=0.2617994; - scaleGridStep=1; + scaleGridStep=0.1; autoGroupingDist=10; - toggles=513; + toggles=581; class ItemIDProvider { - nextID=182; + nextID=251; }; class MarkerIDProvider { @@ -16,45 +16,42 @@ class EditorData }; class Camera { - pos[]={8276.2598,88.198135,10074.074}; - dir[]={-0.012094603,-0.67814827,-0.73493671}; - up[]={-0.011160755,0.73486549,-0.67812955}; - aside[]={-0.99994618,1.5294063e-007,0.016457703}; + pos[]={7075.4238,294.67462,1090.9181}; + dir[]={0.18139009,-0.58464152,-0.7908724}; + up[]={0.130721,0.81120443,-0.56996}; + aside[]={-0.97477698,-7.2340481e-007,-0.22357322}; }; }; binarizationWanted=0; addons[]= { "A3_Ui_F", - "rhsusf_vehicles", - "RHS_US_A2Port_Armor", - "RHS_US_A2_AirImport", "A3_Structures_F_Ind_Cargo", "ace_cargo", "A3_Structures_F_Mil_Helipads", - "A3_Soft_F_Gamma_Truck_01", - "A3_Soft_F_Exp_Truck_01", - "ace_realisticnames", - "ace_rearm", - "ace_refuel", - "ace_repair", "A3_Structures_F_Mil_Flags", "A3_Characters_F", "ace_explosives", "A3_Modules_F_Curator_Curator", "A3_Characters_F_Enoch", - "rhsusf_c_fmtv", - "rhsusf_c_Caiman", - "A3_Soft_F_Enoch_Truck_01", + "A3_Air_F_Heli_Heli_Transport_03", + "ace_realisticnames", + "A3_Air_F_Beta_Heli_Transport_01", + "A3_Air_F_Beta_Heli_Attack_01", "A3_Props_F_Enoch_Military_Decontamination", "A3_Signs_F", - "rhsusf_c_stryker" + "A3_Armor_F_Exp_APC_Wheeled_01", + "A3_Soft_F_Exp_MRAP_01", + "A3_Soft_F_Exp_LSV_01", + "A3_Soft_F_Exp_Truck_01", + "A3_Soft_F_Enoch_Truck_01", + "A3_Armor_F_Exp_APC_Tracked_01" }; class AddonsMetaData { class List { - items=22; + items=15; class Item0 { className="A3_Ui_F"; @@ -63,149 +60,102 @@ class AddonsMetaData url="https://www.arma3.com"; }; class Item1 - { - className="rhsusf_vehicles"; - name="rhsusf_vehicles"; - }; - class Item2 - { - className="RHS_US_A2Port_Armor"; - name="M2 Bradley IFV"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; - }; - class Item3 - { - className="RHS_US_A2_AirImport"; - name="RHSUSF A2 Air Ports"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; - }; - class Item4 { className="A3_Structures_F_Ind"; name="Arma 3 - Industrial Structures"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item5 + class Item2 { className="ace_cargo"; name="ACE3 - Cargo"; author="ACE-Team"; url="http://ace3mod.com/"; }; - class Item6 + class Item3 { className="A3_Structures_F_Mil"; name="Arma 3 - Military Buildings and Structures"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item7 - { - className="A3_Soft_F_Gamma"; - name="Arma 3 - Unarmored Land Vehicles"; - author="Bohemia Interactive"; - url="https://www.arma3.com"; - }; - class Item8 - { - className="A3_Soft_F_Exp"; - name="Arma 3 Apex - Unarmored Land Vehicles"; - author="Bohemia Interactive"; - url="https://www.arma3.com"; - }; - class Item9 + class Item4 { className="A3_Characters_F"; name="Arma 3 Alpha - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item10 - { - className="ace_rearm"; - name="ACE3 - Rearm"; - author="ACE-Team"; - url="http://ace3mod.com/"; - }; - class Item11 - { - className="ace_refuel"; - name="ACE3 - Refuel"; - author="ACE-Team"; - url="http://ace3mod.com/"; - }; - class Item12 - { - className="ace_repair"; - name="ACE3 - Repair"; - author="ACE-Team"; - url="http://ace3mod.com/"; - }; - class Item13 + class Item5 { className="ace_explosives"; name="ACE3 - Explosives"; author="ACE-Team"; url="http://ace3mod.com/"; }; - class Item14 + class Item6 { className="A3_Modules_F_Curator"; name="Arma 3 Zeus Update - Scripted Modules"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item15 + class Item7 { className="A3_Characters_F_Enoch"; name="Arma 3 Contact Platform - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item16 - { - className="rhsusf_c_fmtv"; - name="FMTV Trucks"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; - }; - class Item17 + class Item8 { - className="rhsusf_c_Caiman"; - name="Caiman MRAP"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; + className="A3_Air_F_Heli"; + name="Arma 3 Helicopters - Aircraft"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; }; - class Item18 + class Item9 { - className="A3_Soft_F_Enoch"; - name="Arma 3 Enoch - Unarmored Land Vehicles"; + className="A3_Air_F_Beta"; + name="Arma 3 Beta - Aircraft"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item19 + class Item10 { className="A3_Props_F_Enoch"; - name="Arma 3 Enoch - Decorative and Mission Objects"; + name="Arma 3 Contact Platform - Decorative and Mission Objects"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item20 + class Item11 { className="A3_Signs_F"; name="Arma 3 - Signs"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item21 + class Item12 + { + className="A3_Armor_F_Exp"; + name="Arma 3 Apex - Armored Land Vehicles"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; + }; + class Item13 + { + className="A3_Soft_F_Exp"; + name="Arma 3 Apex - Unarmored Land Vehicles"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; + }; + class Item14 { - className="rhsusf_c_stryker"; - name="IAV Stryker vehicles"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; + className="A3_Soft_F_Enoch"; + name="Arma 3 Contact Platform - Unarmored Land Vehicles"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; }; }; }; @@ -701,24 +651,26 @@ class Mission class Item0 { dataType="Marker"; - position[]={8300.7275,76.093613,10061.531}; + position[]={7078.8252,275.73099,1076.777}; name="respawn_west"; text=$STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY; type="Empty"; id=0; + atlOffset=-3.0517578e-005; }; class Item1 { dataType="Marker"; - position[]={8313.793,75.752388,10073.04}; + position[]={7093.0591,273.832,1066.749}; name="btc_base"; type="flag_NATO"; id=1; + atlOffset=0.0002746582; }; class Item2 { dataType="Marker"; - position[]={8323.1348,73.933266,10113.239}; + position[]={7134.3281,270.61099,1067.021}; name="btc_log_point"; text=$STR_BTC_HAM_MSQM_MRK_LOGPOINT; type="mil_flag"; @@ -726,31 +678,34 @@ class Mission a=0.5; b=0.5; id=2; + atlOffset=-0.00021362305; }; class Item3 { dataType="Object"; class PositionInfo { - position[]={8303.2588,78.415161,10074.801}; - angles[]={0.0080110608,5.6580257,6.2392201}; + position[]={7127.7729,271.90936,1072.0499}; + angles[]={6.1874776,0.72975159,0.028790962}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_3"; + init="call{if (isServer) then { " \n " [this, 0] call ace_cargo_fnc_setSpace; " \n "};}"; + name="btc_create_object"; + disableSimulation=1; }; - id=3; - type="rhsusf_m1025_d_m2"; + id=13; + type="Land_CargoBox_V1_F"; + atlOffset=-0.0032958984; class CustomAttributes { class Attribute0 { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; + property="allowDamage"; + expression="_this allowdamage _value;"; class Value { class data @@ -759,36 +714,17 @@ class Mission { type[]= { - "STRING" + "BOOL" }; }; - value="NoChange"; + value=0; }; }; }; class Attribute1 { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; - }; - }; - class Attribute2 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; + property="ace_cargo_size"; + expression="[_this,_value] call ace_cargo_fnc_setSize;"; class Value { class data @@ -797,14 +733,14 @@ class Mission { type[]= { - "STRING" + "SCALAR" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; + value=-1; }; }; }; - nAttributes=3; + nAttributes=2; }; }; class Item4 @@ -812,26 +748,24 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8297.6514,78.657707,10071.11}; - angles[]={6.2418733,5.6580257,6.2325706}; + position[]={7135.5,270.80606,1071}; + angles[]={0.0080009829,2.2298627,6.1716485}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_2"; + name="btc_create_object_point"; }; - id=4; - type="rhsusf_m1025_d_m2"; - atlOffset=7.6293945e-006; + id=14; + type="Land_HelipadSquare_F"; class CustomAttributes { class Attribute0 { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; + property="ace_isRepairFacility"; + expression="if (_value != (if (isNumber (configFile >> 'CfgVehicles' >> typeOf _this >> ""ace_repair_canRepair"")) then {getNumber (configFile >> 'CfgVehicles' >> typeOf _this >> ""ace_repair_canRepair"")} else {0})) then {_this setVariable ['ace_isRepairFacility', _value, true]}"; class Value { class data @@ -840,17 +774,42 @@ class Mission { type[]= { - "STRING" + "SCALAR" }; }; - value="NoChange"; + value=1; }; }; }; - class Attribute1 + nAttributes=1; + }; + }; + class Item5 + { + dataType="Object"; + class PositionInfo + { + position[]={7081.1602,276.27856,1071.2151}; + angles[]={0.01919602,0.72975159,6.127655}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="call{if (isServer) then { " \n " [this, 0] call ace_cargo_fnc_setSpace; " \n "};}"; + name="btc_gear_object"; + disableSimulation=1; + }; + id=15; + type="Land_CargoBox_V1_F"; + atlOffset=-0.048339844; + class CustomAttributes + { + class Attribute0 { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; + property="allowDamage"; + expression="_this allowdamage _value;"; class Value { class data @@ -859,17 +818,17 @@ class Mission { type[]= { - "STRING" + "BOOL" }; }; - value="NoChange"; + value=0; }; }; }; - class Attribute2 + class Attribute1 { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; + property="ace_cargo_size"; + expression="[_this,_value] call ace_cargo_fnc_setSize;"; class Value { class data @@ -878,242 +837,247 @@ class Mission { type[]= { - "STRING" + "SCALAR" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; + value=-1; }; }; }; - nAttributes=3; + nAttributes=2; }; }; - class Item5 + class Item6 { dataType="Object"; class PositionInfo { - position[]={8295.166,77.579712,10052.532}; - angles[]={0,5.7184772,0}; + position[]={7024,280.97366,1081}; + angles[]={0.070284568,2.2298608,6.1480141}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true];"; - name="btc_veh_1"; }; - id=5; - type="RHS_M2A3"; - atlOffset=-0.15499878; + id=17; + type="Land_HelipadSquare_F"; + atlOffset=3.0517578e-005; }; - class Item6 + class Item7 { dataType="Object"; class PositionInfo { - position[]={8332.2256,78.478668,10088.2}; - angles[]={0.049293593,5.7068849,6.2325621}; + position[]={7089.8691,278.24274,1065.3191}; + angles[]={6.2735796,1.3358874,6.1401696}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - name="btc_helo_1"; }; - id=6; - type="RHS_CH_47F_10"; - atlOffset=-0.17823792; + id=21; + type="Flag_NATO_F"; }; - class Item7 + class Item8 { dataType="Object"; class PositionInfo { - position[]={8317.3643,77.782211,10084.248}; - angles[]={0.013334315,5.6580257,6.2591867}; + position[]={7054,279.31042,1061}; + angles[]={0.017595299,2.2298608,6.219274}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_4"; }; - id=7; - type="rhsusf_m1025_d_m2"; - atlOffset=7.6293945e-006; - class CustomAttributes + id=23; + type="Land_HelipadSquare_F"; + atlOffset=3.0517578e-005; + }; + class Item9 + { + dataType="Group"; + side="West"; + class Entities { - class Attribute0 - { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; - }; - }; - class Attribute1 + items=1; + class Item0 { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value + dataType="Object"; + class PositionInfo { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; + position[]={7080.8555,275.66995,1069.363}; + angles[]={0.01919602,3.8879185,6.133904}; }; - }; - class Attribute2 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value + side="West"; + flags=6; + class Attributes { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; - }; + skill=0.60000002; + init="this setVariable [""side_mission"",true]"; + description=$STR_B_OFFICER_F0; + isPlayer=1; + isPlayable=1; }; + id=25; + type="B_officer_F"; }; - nAttributes=3; }; + class Attributes + { + }; + id=24; }; - class Item8 + class Item10 { - dataType="Object"; - class PositionInfo + dataType="Group"; + side="West"; + class Entities { - position[]={8278.1641,79.440773,10076.579}; - angles[]={0.030647982,1.4514159,0.033318337}; + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={7079.2837,275.80377,1074.7056}; + angles[]={0.01919602,3.8606362,6.133904}; + }; + side="West"; + flags=6; + class Attributes + { + skill=0.60000002; + init="this setVariable [""interpreter"",true]"; + description=$STR_BTC_HAM_MSQM_INTERPRETER; + isPlayable=1; + }; + id=29; + type="B_Soldier_F"; + }; }; - side="Empty"; - flags=4; class Attributes { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_7"; }; - id=9; - type="rhsusf_m1025_d_m2"; - atlOffset=-7.6293945e-006; - class CustomAttributes + id=28; + }; + class Item11 + { + dataType="Group"; + side="West"; + class Entities { - class Attribute0 + items=1; + class Item0 { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value + dataType="Object"; + class PositionInfo { - class data + position[]={7080.2969,275.67166,1073.6476}; + angles[]={0.01919602,3.6710505,6.133904}; + }; + side="West"; + flags=6; + class Attributes + { + skill=0.60000002; + description=$STR_ACE_Repair_AssignEngineerRole_role_advanced; + isPlayable=1; + }; + id=31; + type="B_engineer_F"; + class CustomAttributes + { + class Attribute0 { - class type + property="ace_isEngineer"; + expression="if !(_value == ([0,1] select (_this getUnitTrait 'engineer'))|| {_value == -1}) then {_this setVariable ['ace_isEngineer', _value, true]}"; + class Value { - type[]= + class data { - "STRING" + class type + { + type[]= + { + "SCALAR" + }; + }; + value=2; }; }; - value="NoChange"; }; - }; - }; - class Attribute1 - { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data + class Attribute1 { - class type + property="speaker"; + expression="_this setspeaker _value;"; + class Value { - type[]= + class data { - "STRING" + class type + { + type[]= + { + "STRING" + }; + }; + value="Male02ENG"; }; }; - value="NoChange"; }; - }; - }; - class Attribute2 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value - { - class data + class Attribute2 { - class type + property="pitch"; + expression="_this setpitch _value;"; + class Value { - type[]= + class data { - "STRING" + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0.99000001; }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; }; + nAttributes=3; }; }; - nAttributes=3; }; + class Attributes + { + }; + id=30; }; - class Item9 + class Item12 { - dataType="Object"; + dataType="Logic"; class PositionInfo { - position[]={8320.2842,75.246689,10105.996}; - angles[]={0.054611351,5.6770496,6.2631841}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="call{if (isServer) then { " \n " [this, 0] call ace_cargo_fnc_setSpace; " \n "};}"; - name="btc_create_object"; - disableSimulation=1; + position[]={6924.2217,276.28888,943.07422}; + angles[]={6.104322,0,6.2176785}; }; - id=13; - type="Land_CargoBox_V1_F"; + name="btc_curator"; + init="this addEventHandler ['CuratorObjectPlaced',{_this call btc_fnc_eh_CuratorObjectPlaced}];"; + id=71; + type="ModuleCurator_F"; class CustomAttributes { class Attribute0 { - property="allowDamage"; - expression="_this allowdamage _value;"; + property="ModuleCurator_F_Owner"; + expression="_this setVariable ['Owner',_value,true];"; class Value { class data @@ -1122,17 +1086,17 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="#adminLogged"; }; }; }; class Attribute1 { - property="ace_cargo_size"; - expression="[_this,_value] call ace_cargo_fnc_setSize;"; + property="ModuleCurator_F_Forced"; + expression="_this setVariable ['Forced',_value,true];"; class Value { class data @@ -1144,36 +1108,14 @@ class Mission "SCALAR" }; }; - value=-1; + value=0; }; }; }; - nAttributes=2; - }; - }; - class Item10 - { - dataType="Object"; - class PositionInfo - { - position[]={8323.1582,73.944031,10113.102}; - angles[]={0.074525557,0.89397508,0.018657569}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - name="btc_create_object_point"; - }; - id=14; - type="Land_HelipadSquare_F"; - class CustomAttributes - { - class Attribute0 + class Attribute2 { - property="ace_isRepairFacility"; - expression="if (_value != (if (isNumber (configFile >> 'CfgVehicles' >> typeOf _this >> ""ace_repair_canRepair"")) then {getNumber (configFile >> 'CfgVehicles' >> typeOf _this >> ""ace_repair_canRepair"")} else {0})) then {_this setVariable ['ace_isRepairFacility', _value, true]}"; + property="ModuleCurator_F_Name"; + expression="_this setVariable ['Name',_value,true];"; class Value { class data @@ -1182,41 +1124,17 @@ class Mission { type[]= { - "SCALAR" + "STRING" }; }; - value=1; + value=""; }; }; }; - nAttributes=1; - }; - }; - class Item11 - { - dataType="Object"; - class PositionInfo - { - position[]={8309.2861,76.695534,10068.324}; - angles[]={0.0026703537,5.6770496,6.2392201}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="call{if (isServer) then { " \n " [this, 0] call ace_cargo_fnc_setSpace; " \n "};}"; - name="btc_gear_object"; - disableSimulation=1; - }; - id=15; - type="Land_CargoBox_V1_F"; - class CustomAttributes - { - class Attribute0 + class Attribute3 { - property="allowDamage"; - expression="_this allowdamage _value;"; + property="ModuleInfo"; + expression="false"; class Value { class data @@ -1228,14 +1146,14 @@ class Mission "BOOL" }; }; - value=0; + value=1; }; }; }; - class Attribute1 + class Attribute4 { - property="ace_cargo_size"; - expression="[_this,_value] call ace_cargo_fnc_setSize;"; + property="ModuleCurator_F_Addons"; + expression="_this setVariable ['Addons',_value,true];"; class Value { class data @@ -1247,165 +1165,44 @@ class Mission "SCALAR" }; }; - value=-1; + value=3; }; }; }; - nAttributes=2; + nAttributes=5; }; }; - class Item12 + class Item13 { - dataType="Object"; - class PositionInfo + dataType="Group"; + side="West"; + class Entities { - position[]={8213.6924,78.541695,10023.983}; - angles[]={6.2631893,5.7956276,6.2139621}; + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={7067.7832,277.27866,1072.9111}; + angles[]={0,2.3531542,0}; + }; + side="West"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=90; + type="B_medic_F"; + }; }; - side="Empty"; - flags=4; class Attributes { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_10"; - }; - id=16; - type="RHS_AH64D"; - atlOffset=-0.30741882; - }; - class Item13 - { - dataType="Object"; - class PositionInfo - { - position[]={8213.54,76.510483,10025.129}; - angles[]={6.2631893,0.89397335,6.2139621}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; }; - id=17; - type="Land_HelipadSquare_F"; + id=89; }; class Item14 - { - dataType="Object"; - class PositionInfo - { - position[]={8358.7637,75.2911,10101.058}; - angles[]={0.078505196,5.6318169,6.2445364}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_11"; - }; - id=18; - type="B_Truck_01_ammo_F"; - atlOffset=0.00021362305; - }; - class Item15 - { - dataType="Object"; - class PositionInfo - { - position[]={8353.5449,75.482399,10097.687}; - angles[]={0.025327841,5.6318169,6.247201}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_12"; - }; - id=19; - type="B_Truck_01_fuel_F"; - atlOffset=0.00020599365; - }; - class Item16 - { - dataType="Object"; - class PositionInfo - { - position[]={8348.8496,76.13974,10094.677}; - angles[]={6.247201,5.6318169,6.2418756}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_13"; - }; - id=20; - type="B_Truck_01_Repair_F"; - atlOffset=0.00020599365; - }; - class Item17 - { - dataType="Object"; - class PositionInfo - { - position[]={8317.1514,79.59433,10075.261}; - angles[]={6.2791886,0,6.2445378}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - }; - id=21; - type="Flag_NATO_F"; - atlOffset=0.0030288696; - }; - class Item18 - { - dataType="Object"; - class PositionInfo - { - position[]={8241.4199,79.564301,10048.12}; - angles[]={6.2591896,5.7956276,0.017332481}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_14"; - }; - id=22; - type="RHS_UH1Y_d"; - }; - class Item19 - { - dataType="Object"; - class PositionInfo - { - position[]={8240.2227,77.387703,10049.465}; - angles[]={6.2591896,0.89397335,0.017332481}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - }; - id=23; - type="Land_HelipadSquare_F"; - }; - class Item20 { dataType="Group"; side="West"; @@ -1417,29 +1214,25 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8311.1689,75.934975,10067.474}; - angles[]={0.0026520467,2.552031,0}; + position[]={7069.1665,277.06027,1074.3215}; + angles[]={0,2.3531542,0}; }; side="West"; - flags=6; + flags=7; class Attributes { - skill=0.60000002; - init="this setVariable [""side_mission"",true]"; - description=$STR_B_OFFICER_F0; - isPlayer=1; isPlayable=1; }; - id=25; - type="B_officer_F"; + id=92; + type="B_medic_F"; }; }; class Attributes { }; - id=24; + id=91; }; - class Item21 + class Item15 { dataType="Group"; side="West"; @@ -1451,30 +1244,69 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8305.6074,76.029839,10067.188}; - angles[]={6.2418771,2.5247488,0}; + position[]={7073.6299,276.65915,1068.4349}; + angles[]={0.006394445,0.75462294,6.1558795}; }; side="West"; flags=6; class Attributes { - skill=0.60000002; - init="this setVariable [""interpreter"",true]"; - description=$STR_BTC_HAM_MSQM_INTERPRETER; isPlayable=1; }; - id=29; - type="B_Soldier_F"; - atlOffset=-3.8146973e-005; + id=180; + type="B_engineer_F"; + atlOffset=-3.0517578e-005; + class CustomAttributes + { + class Attribute0 + { + property="speaker"; + expression="_this setspeaker _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="Male03ENG"; + }; + }; + }; + class Attribute1 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; }; }; class Attributes { }; - id=28; - atlOffset=-3.8146973e-005; + id=93; + atlOffset=-3.0517578e-005; }; - class Item22 + class Item16 { dataType="Group"; side="West"; @@ -1486,25 +1318,23 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8306.8721,76.060417,10067.928}; - angles[]={6.2418733,2.3351631,0}; + position[]={7074.8853,276.5065,1067.1881}; + angles[]={0.006394445,0.75462294,6.1558795}; }; side="West"; flags=6; class Attributes { - skill=0.60000002; - description=$STR_ACE_Repair_AssignEngineerRole_role_advanced; isPlayable=1; }; - id=31; + id=181; type="B_engineer_F"; class CustomAttributes { class Attribute0 { - property="ace_isEngineer"; - expression="if !(_value == ([0,1] select (_this getUnitTrait 'engineer'))|| {_value == -1}) then {_this setVariable ['ace_isEngineer', _value, true]}"; + property="speaker"; + expression="_this setspeaker _value;"; class Value { class data @@ -1513,14 +1343,67 @@ class Mission { type[]= { - "SCALAR" + "STRING" }; }; - value=2; + value="Male09ENG"; }; }; }; class Attribute1 + { + property="pitch"; + expression="_this setpitch _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + }; + class Attributes + { + }; + id=95; + }; + class Item17 + { + dataType="Group"; + side="West"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={7075.9946,276.36502,1066.1133}; + angles[]={0.006394445,0.75462294,6.1495872}; + }; + side="West"; + flags=6; + class Attributes + { + isPlayable=1; + }; + id=182; + type="B_soldier_AR_F"; + class CustomAttributes + { + class Attribute0 { property="speaker"; expression="_this setspeaker _value;"; @@ -1535,11 +1418,11 @@ class Mission "STRING" }; }; - value="Male02ENG"; + value="Male12ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -1554,195 +1437,24 @@ class Mission "SCALAR" }; }; - value=0.99000001; + value=1.01; }; }; }; - nAttributes=3; + nAttributes=2; }; }; }; class Attributes { }; - id=30; + id=97; }; - class Item23 + class Item18 { - dataType="Logic"; - class PositionInfo - { - position[]={8255.6289,55.908749,9942.9063}; - }; - name="btc_curator"; - init="this addEventHandler ['CuratorObjectPlaced',{_this call btc_fnc_eh_CuratorObjectPlaced}];"; - id=71; - type="ModuleCurator_F"; - class CustomAttributes - { - class Attribute0 - { - property="ModuleCurator_F_Owner"; - expression="_this setVariable ['Owner',_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="#adminLogged"; - }; - }; - }; - class Attribute1 - { - property="ModuleCurator_F_Forced"; - expression="_this setVariable ['Forced',_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=0; - }; - }; - }; - class Attribute2 - { - property="ModuleCurator_F_Name"; - expression="_this setVariable ['Name',_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value=""; - }; - }; - }; - class Attribute3 - { - property="ModuleInfo"; - expression="false"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=1; - }; - }; - }; - class Attribute4 - { - property="ModuleCurator_F_Addons"; - expression="_this setVariable ['Addons',_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=3; - }; - }; - }; - nAttributes=5; - }; - }; - class Item24 - { - dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={8304.6758,75.941444,10055.586}; - angles[]={0,1.0172668,0}; - }; - side="West"; - flags=7; - class Attributes - { - isPlayable=1; - }; - id=90; - type="B_medic_F"; - }; - }; - class Attributes - { - }; - id=89; - }; - class Item25 - { - dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={8303.626,75.941444,10057.26}; - angles[]={0,1.0172668,0}; - }; - side="West"; - flags=7; - class Attributes - { - isPlayable=1; - }; - id=92; - type="B_medic_F"; - }; - }; - class Attributes - { - }; - id=91; - }; - class Item26 - { - dataType="Group"; - side="West"; - class Entities + dataType="Group"; + side="West"; + class Entities { items=1; class Item0 @@ -1750,8 +1462,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8310.3896,75.941444,10060.23}; - angles[]={0,5.701921,0}; + position[]={7077.25,276.20419,1064.8662}; + angles[]={0.006394445,0.75462294,6.1495872}; }; side="West"; flags=6; @@ -1759,8 +1471,9 @@ class Mission { isPlayable=1; }; - id=156; - type="B_engineer_F"; + id=183; + type="B_soldier_AR_F"; + atlOffset=-3.0517578e-005; class CustomAttributes { class Attribute0 @@ -1778,7 +1491,7 @@ class Mission "STRING" }; }; - value="Male03ENG"; + value="Male09ENG"; }; }; }; @@ -1797,7 +1510,7 @@ class Mission "SCALAR" }; }; - value=1; + value=1.01; }; }; }; @@ -1808,9 +1521,10 @@ class Mission class Attributes { }; - id=93; + id=99; + atlOffset=-3.0517578e-005; }; - class Item27 + class Item19 { dataType="Group"; side="West"; @@ -1822,8 +1536,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8311.8945,75.941444,10061.161}; - angles[]={0,5.701921,0}; + position[]={7078.4614,276.04907,1063.666}; + angles[]={0.006394445,0.75462294,6.1495872}; }; side="West"; flags=6; @@ -1831,8 +1545,8 @@ class Mission { isPlayable=1; }; - id=157; - type="B_engineer_F"; + id=184; + type="B_soldier_AR_F"; class CustomAttributes { class Attribute0 @@ -1850,7 +1564,7 @@ class Mission "STRING" }; }; - value="Male09ENG"; + value="Male01ENG"; }; }; }; @@ -1869,7 +1583,7 @@ class Mission "SCALAR" }; }; - value=1; + value=0.99000001; }; }; }; @@ -1880,9 +1594,9 @@ class Mission class Attributes { }; - id=95; + id=101; }; - class Item28 + class Item20 { dataType="Group"; side="West"; @@ -1894,8 +1608,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8313.1982,75.941444,10061.99}; - angles[]={0,5.701921,0}; + position[]={7079.7178,275.88303,1062.4194}; + angles[]={6.2496004,0.75462294,6.1495867}; }; side="West"; flags=6; @@ -1903,8 +1617,8 @@ class Mission { isPlayable=1; }; - id=158; - type="B_soldier_AR_F"; + id=185; + type="B_soldier_AT_F"; class CustomAttributes { class Attribute0 @@ -1941,7 +1655,7 @@ class Mission "SCALAR" }; }; - value=1.01; + value=1.03; }; }; }; @@ -1952,9 +1666,9 @@ class Mission class Attributes { }; - id=97; + id=103; }; - class Item29 + class Item21 { dataType="Group"; side="West"; @@ -1966,8 +1680,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8314.7031,75.941444,10062.921}; - angles[]={0,5.701921,0}; + position[]={7080.8276,275.69772,1061.3444}; + angles[]={6.2496004,0.75462294,6.1495867}; }; side="West"; flags=6; @@ -1975,8 +1689,8 @@ class Mission { isPlayable=1; }; - id=159; - type="B_soldier_AR_F"; + id=186; + type="B_soldier_AT_F"; class CustomAttributes { class Attribute0 @@ -1994,7 +1708,7 @@ class Mission "STRING" }; }; - value="Male09ENG"; + value="Male11ENG"; }; }; }; @@ -2013,7 +1727,7 @@ class Mission "SCALAR" }; }; - value=1.01; + value=1.02; }; }; }; @@ -2024,9 +1738,9 @@ class Mission class Attributes { }; - id=99; + id=105; }; - class Item30 + class Item22 { dataType="Group"; side="West"; @@ -2038,8 +1752,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8316.1523,75.941444,10063.819}; - angles[]={0,5.701921,0}; + position[]={7082.083,275.50171,1060.0974}; + angles[]={6.249599,0.75462294,6.1669106}; }; side="West"; flags=6; @@ -2047,8 +1761,8 @@ class Mission { isPlayable=1; }; - id=160; - type="B_soldier_AR_F"; + id=187; + type="B_soldier_AA_F"; class CustomAttributes { class Attribute0 @@ -2066,7 +1780,7 @@ class Mission "STRING" }; }; - value="Male01ENG"; + value="Male02ENG"; }; }; }; @@ -2085,7 +1799,7 @@ class Mission "SCALAR" }; }; - value=0.99000001; + value=1.05; }; }; }; @@ -2096,9 +1810,9 @@ class Mission class Attributes { }; - id=101; + id=107; }; - class Item31 + class Item23 { dataType="Group"; side="West"; @@ -2110,8 +1824,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8317.6572,75.941444,10064.751}; - angles[]={0,5.701921,0}; + position[]={7083.2275,275.32861,1058.9235}; + angles[]={6.249599,0.75462294,6.1669106}; }; side="West"; flags=6; @@ -2119,8 +1833,9 @@ class Mission { isPlayable=1; }; - id=161; - type="B_soldier_AT_F"; + id=226; + type="B_soldier_UAV_F"; + atlOffset=3.0517578e-005; class CustomAttributes { class Attribute0 @@ -2138,7 +1853,7 @@ class Mission "STRING" }; }; - value="Male12ENG"; + value="Male08ENG"; }; }; }; @@ -2168,9 +1883,10 @@ class Mission class Attributes { }; - id=103; + id=109; + atlOffset=3.0517578e-005; }; - class Item32 + class Item24 { dataType="Group"; side="West"; @@ -2182,8 +1898,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8318.9609,75.945663,10065.58}; - angles[]={0,5.701921,0}; + position[]={7084.4829,275.14014,1057.6764}; + angles[]={6.249599,0.75462294,6.1669106}; }; side="West"; flags=6; @@ -2191,9 +1907,9 @@ class Mission { isPlayable=1; }; - id=162; - type="B_soldier_AT_F"; - atlOffset=0.028999329; + id=227; + type="B_soldier_UAV_F"; + atlOffset=3.0517578e-005; class CustomAttributes { class Attribute0 @@ -2211,7 +1927,7 @@ class Mission "STRING" }; }; - value="Male11ENG"; + value="Male08ENG"; }; }; }; @@ -2230,7 +1946,7 @@ class Mission "SCALAR" }; }; - value=1.02; + value=1; }; }; }; @@ -2241,10 +1957,10 @@ class Mission class Attributes { }; - id=105; - atlOffset=0.028999329; + id=111; + atlOffset=3.0517578e-005; }; - class Item33 + class Item25 { dataType="Group"; side="West"; @@ -2256,8 +1972,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8320.4658,75.945251,10066.511}; - angles[]={0,5.701921,0}; + position[]={7072.3545,276.83194,1066.949}; + angles[]={0.006394445,0.75462294,6.1558795}; }; side="West"; flags=6; @@ -2265,9 +1981,8 @@ class Mission { isPlayable=1; }; - id=163; - type="B_soldier_AA_F"; - atlOffset=0.071998596; + id=228; + type="B_W_Soldier_CBRN_F"; class CustomAttributes { class Attribute0 @@ -2285,7 +2000,7 @@ class Mission "STRING" }; }; - value="Male02ENG"; + value="Male05ENG"; }; }; }; @@ -2304,7 +2019,7 @@ class Mission "SCALAR" }; }; - value=1.05; + value=1; }; }; }; @@ -2315,10 +2030,9 @@ class Mission class Attributes { }; - id=107; - atlOffset=0.071998596; + id=113; }; - class Item34 + class Item26 { dataType="Group"; side="West"; @@ -2330,8 +2044,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8321.874,75.83403,10067.351}; - angles[]={0,5.701921,0}; + position[]={7073.6099,276.67917,1065.7021}; + angles[]={0.006394445,0.75462294,6.1558795}; }; side="West"; flags=6; @@ -2339,8 +2053,8 @@ class Mission { isPlayable=1; }; - id=176; - type="B_soldier_UAV_F"; + id=229; + type="B_W_Soldier_CBRN_F"; class CustomAttributes { class Attribute0 @@ -2358,7 +2072,7 @@ class Mission "STRING" }; }; - value="Male08ENG"; + value="Male06ENG"; }; }; }; @@ -2377,7 +2091,7 @@ class Mission "SCALAR" }; }; - value=1.03; + value=0.95999998; }; }; }; @@ -2388,9 +2102,9 @@ class Mission class Attributes { }; - id=109; + id=115; }; - class Item35 + class Item27 { dataType="Group"; side="West"; @@ -2402,67 +2116,25 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8323.3789,75.865822,10068.281}; - angles[]={0,5.701921,0}; + position[]={7074.7197,276.5441,1064.6271}; + angles[]={0,0.75462294,0}; }; side="West"; - flags=6; + flags=7; class Attributes { isPlayable=1; }; - id=177; - type="B_soldier_UAV_F"; - class CustomAttributes - { - class Attribute0 - { - property="speaker"; - expression="_this setspeaker _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="Male08ENG"; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1; - }; - }; - }; - nAttributes=2; - }; + id=118; + type="B_Soldier_F"; }; }; class Attributes { }; - id=111; + id=117; }; - class Item36 + class Item28 { dataType="Group"; side="West"; @@ -2474,67 +2146,25 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8311.5381,75.941444,10058.645}; - angles[]={0,5.701921,0}; + position[]={7075.9751,276.38507,1063.3802}; + angles[]={0,0.75462294,0}; }; side="West"; - flags=6; + flags=7; class Attributes { isPlayable=1; }; - id=178; - type="B_W_Soldier_CBRN_F"; - class CustomAttributes - { - class Attribute0 - { - property="speaker"; - expression="_this setspeaker _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="Male05ENG"; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1; - }; - }; - }; - nAttributes=2; - }; + id=120; + type="B_Soldier_F"; }; }; class Attributes { }; - id=113; + id=119; }; - class Item37 + class Item29 { dataType="Group"; side="West"; @@ -2546,67 +2176,25 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8313.043,75.941444,10059.575}; - angles[]={0,5.701921,0}; + position[]={7077.1875,276.21503,1062.1803}; + angles[]={0,0.75462294,0}; }; side="West"; - flags=6; + flags=7; class Attributes { isPlayable=1; }; - id=179; - type="B_W_Soldier_CBRN_F"; - class CustomAttributes - { - class Attribute0 - { - property="speaker"; - expression="_this setspeaker _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="Male06ENG"; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=0.95999998; - }; - }; - }; - nAttributes=2; - }; + id=122; + type="B_Soldier_F"; }; }; class Attributes { }; - id=115; + id=121; }; - class Item38 + class Item30 { dataType="Group"; side="West"; @@ -2618,8 +2206,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8314.3467,75.941444,10060.404}; - angles[]={0,5.701921,0}; + position[]={7078.4429,276.00446,1060.9333}; + angles[]={0,0.75462294,0}; }; side="West"; flags=7; @@ -2627,16 +2215,16 @@ class Mission { isPlayable=1; }; - id=118; + id=124; type="B_Soldier_F"; }; }; class Attributes { }; - id=117; + id=123; }; - class Item39 + class Item31 { dataType="Group"; side="West"; @@ -2648,8 +2236,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8315.8516,75.941444,10061.335}; - angles[]={0,5.701921,0}; + position[]={7079.5527,275.81915,1059.8583}; + angles[]={0,0.75462294,0}; }; side="West"; flags=7; @@ -2657,16 +2245,18 @@ class Mission { isPlayable=1; }; - id=120; + id=126; type="B_Soldier_F"; + atlOffset=3.0517578e-005; }; }; class Attributes { }; - id=119; + id=125; + atlOffset=3.0517578e-005; }; - class Item40 + class Item32 { dataType="Group"; side="West"; @@ -2678,8 +2268,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8317.3008,75.941444,10062.234}; - angles[]={0,5.701921,0}; + position[]={7080.8076,275.60858,1058.6115}; + angles[]={0,0.75462294,0}; }; side="West"; flags=7; @@ -2687,16 +2277,16 @@ class Mission { isPlayable=1; }; - id=122; + id=128; type="B_Soldier_F"; }; }; class Attributes { }; - id=121; + id=127; }; - class Item41 + class Item33 { dataType="Group"; side="West"; @@ -2708,8 +2298,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8318.8057,75.941444,10063.165}; - angles[]={0,5.701921,0}; + position[]={7081.9526,275.42758,1057.4374}; + angles[]={0,0.75462294,0}; }; side="West"; flags=7; @@ -2717,16 +2307,16 @@ class Mission { isPlayable=1; }; - id=124; + id=130; type="B_Soldier_F"; }; }; class Attributes { }; - id=123; + id=129; }; - class Item42 + class Item34 { dataType="Group"; side="West"; @@ -2738,8 +2328,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8320.1094,75.945419,10063.994}; - angles[]={0,5.701921,0}; + position[]={7083.2075,275.23737,1056.1904}; + angles[]={0,0.75462294,0}; }; side="West"; flags=7; @@ -2747,116 +2337,372 @@ class Mission { isPlayable=1; }; - id=126; + id=132; type="B_Soldier_F"; - atlOffset=0.0039749146; + atlOffset=3.0517578e-005; }; }; class Attributes { }; - id=125; - atlOffset=0.0039749146; + id=131; + atlOffset=3.0517578e-005; }; - class Item43 + class Item35 { - dataType="Group"; - side="West"; - class Entities + dataType="Logic"; + class PositionInfo { - items=1; - class Item0 + position[]={7070.6885,276.85696,1075.5607}; + angles[]={0.055942677,1.3358874,6.1795592}; + }; + name="btc_hc_1"; + isPlayable=1; + id=153; + type="HeadlessClient_F"; + }; + class Item36 + { + dataType="Object"; + class PositionInfo + { + position[]={7105.269,275.83667,1053.0665}; + angles[]={0,0.75957966,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + name="btc_helo_1"; + }; + id=156; + type="B_Heli_Transport_03_F"; + atlOffset=-0.31341553; + class CustomAttributes + { + class Attribute0 { - dataType="Object"; - class PositionInfo + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value { - position[]={8321.6143,75.945419,10064.925}; - angles[]={0,5.701921,0}; + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit"",""Medikit""],[10,1]],[[],[]],[[""ToolKit""],[1]],[[""B_Parachute""],[20]]],false]"; + }; }; - side="West"; - flags=7; - class Attributes + }; + nAttributes=1; + }; + }; + class Item37 + { + dataType="Object"; + class PositionInfo + { + position[]={7052.8164,281.54712,1058.9121}; + angles[]={0.03358667,0.84832954,6.2033553}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_14"; + }; + id=174; + type="B_Heli_Transport_01_camo_F"; + atlOffset=-0.035400391; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value { - isPlayable=1; + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""arifle_MXC_F"",""FirstAidKit"",""Medikit""],[2,8,1]],[[""SmokeShell"",""SmokeShellBlue"",""30Rnd_65x39_caseless_mag""],[2,2,4]],[[""ToolKit"",""ItemGPS""],[1,1]],[[""B_Parachute""],[8]]],false]"; + }; + }; + }; + class Attribute1 + { + property="ace_fastroping_equipFRIES"; + expression="if (_value) then {[_this] call ace_fastroping_fnc_equipFRIES}"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; }; - id=128; - type="B_Soldier_F"; - atlOffset=0.0039749146; }; + nAttributes=2; + }; + }; + class Item38 + { + dataType="Object"; + class PositionInfo + { + position[]={7023.2051,283.01917,1080.9238}; + angles[]={0.070284568,0.84832954,6.1480141}; }; + side="Empty"; + flags=4; class Attributes { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_10"; + }; + id=175; + type="B_Heli_Attack_01_dynamicLoadout_F"; + atlOffset=-0.012207031; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""arifle_MXC_F"",""FirstAidKit""],[2,2]],[[""SmokeShell"",""SmokeShellBlue"",""30Rnd_65x39_caseless_mag""],[2,2,4]],[[""ToolKit"",""ItemGPS""],[1,1]],[[""B_Parachute""],[2]]],false]"; + }; + }; + }; + nAttributes=1; }; - id=127; - atlOffset=0.0039749146; }; - class Item44 + class Item39 { - dataType="Group"; - side="West"; - class Entities + dataType="Object"; + class PositionInfo { - items=1; - class Item0 + position[]={7150.4355,270.7717,1051.0248}; + angles[]={6.1954093,0.63775539,6.2318373}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="call{this setVariable ['bin_deconshower_disableAction',true];}"; + name="btc_bigShower"; + }; + id=200; + type="DeconShower_02_F"; + atlOffset=-0.009185791; + class CustomAttributes + { + class Attribute0 { - dataType="Object"; - class PositionInfo + property="Decon_Shower_DisableUserActions"; + expression="if(_value)then{_this setVariable ['bin_deconshower_disableAction',true]};"; + class Value { - position[]={8323.0225,75.908073,10065.765}; - angles[]={0,5.701921,0}; + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; }; - side="West"; - flags=7; - class Attributes + }; + class Attribute1 + { + property="Decon_Shower"; + expression="if(_value)then{[_this,5.4,4,2,true] spawn bin_fnc_deconShowerAnimLarge;};"; + class Value { - isPlayable=1; + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; }; - id=130; - type="B_Soldier_F"; }; + nAttributes=2; + }; + }; + class Item40 + { + dataType="Object"; + class PositionInfo + { + position[]={7150.25,267.28522,1051}; + angles[]={6.1954083,0.63775539,6.2320337}; }; + side="Empty"; + flags=4; class Attributes { }; - id=129; - }; - class Item45 - { - dataType="Group"; - side="West"; - class Entities + id=203; + type="Tarp_01_Large_Black_F"; + }; + class Item41 + { + dataType="Object"; + class PositionInfo + { + position[]={7145.0352,268.19464,1053.5084}; + angles[]={6.2208681,1.3358874,6.2001739}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=213; + type="RoadCone_L_F"; + atlOffset=-0.001373291; + }; + class Item42 + { + dataType="Object"; + class PositionInfo + { + position[]={7146.917,268.26727,1056.0151}; + angles[]={6.1954083,1.3358874,6.2256513}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=214; + type="RoadCone_L_F"; + atlOffset=-0.0036621094; + }; + class Item43 + { + dataType="Object"; + class PositionInfo + { + position[]={7153.7813,266.70932,1046.6049}; + angles[]={6.0904093,1.3358874,6.2320347}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=215; + type="RoadCone_L_F"; + atlOffset=-0.0035705566; + }; + class Item44 + { + dataType="Object"; + class PositionInfo + { + position[]={7155.8037,267.14102,1049.355}; + angles[]={6.0904093,1.3358874,6.2320347}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=216; + type="RoadCone_L_F"; + atlOffset=-0.0051269531; + }; + class Item45 + { + dataType="Object"; + class PositionInfo + { + position[]={7069.064,278.51117,1087.5159}; + angles[]={0.12100255,0.77119118,6.160605}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true];"; + name="btc_veh_1"; + }; + id=232; + type="B_T_APC_Wheeled_01_cannon_F"; + atlOffset=-0.0048522949; + class CustomAttributes { - items=1; - class Item0 + class Attribute0 { - dataType="Object"; - class PositionInfo - { - position[]={8324.5273,75.919395,10066.695}; - angles[]={0,5.701921,0}; - }; - side="West"; - flags=7; - class Attributes + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value { - isPlayable=1; + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""MiniGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""Titan_AT"",""Titan_AP"",""Titan_AA""],[12,6,6,6,6,3,3,3,3,8,8,8,8,2,2,2]],[[],[]],[[],[]]],false]"; + }; }; - id=132; - type="B_Soldier_F"; }; + nAttributes=1; }; - class Attributes - { - }; - id=131; }; class Item46 { dataType="Object"; class PositionInfo { - position[]={8308.083,78.147247,10095.771}; - angles[]={0.08248426,0.94293159,6.224577}; + position[]={7064.6611,277.72958,1100.2162}; + angles[]={0.13360496,1.6902118,6.1606107}; }; side="Empty"; flags=4; @@ -2864,10 +2710,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_9"; + name="btc_veh_5"; }; - id=145; - type="rhsusf_M1078A1P2_B_M2_D_open_fmtv_usarmy"; + id=233; + type="B_T_MRAP_01_hmg_F"; + atlOffset=0.10321045; class CustomAttributes { class Attribute0 @@ -2885,7 +2732,7 @@ class Mission "STRING" }; }; - value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue""],[16,6,10,10,4,4,4,4,12,4,4,4,4]],[[],[]],[[],[]]],false]"; }; }; }; @@ -2897,8 +2744,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8288.5078,79.64241,10081.821}; - angles[]={0.058590703,0.94293159,6.2179446}; + position[]={7068.6914,275.73096,1106.2517}; + angles[]={0.14145893,2.2931533,6.1558809}; }; side="Empty"; flags=4; @@ -2906,10 +2753,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_8"; + name="btc_veh_6"; }; - id=146; - type="rhsusf_M1078A1P2_B_M2_D_open_fmtv_usarmy"; + id=234; + type="B_T_MRAP_01_hmg_F"; + atlOffset=-0.54574585; class CustomAttributes { class Attribute0 @@ -2927,7 +2775,7 @@ class Mission "STRING" }; }; - value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue""],[16,6,10,10,4,4,4,4,12,4,4,4,4]],[[],[]],[[],[]]],false]"; }; }; }; @@ -2939,19 +2787,20 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8299.1973,78.215668,10089.534}; - angles[]={0.0013439035,0.94247776,6.232553}; + position[]={7080.8252,274.54797,1103.3436}; + angles[]={0.15554373,2.7873082,6.1386023}; }; side="Empty"; flags=4; class Attributes { + skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_15"; + name="btc_veh_7"; }; - id=152; - type="rhsusf_M1078A1P2_B_D_fmtv_usarmy"; - atlOffset=-0.095359802; + id=237; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.054992676; class CustomAttributes { class Attribute0 @@ -2969,7 +2818,7 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit""],[2,4]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[10,2,2,2,4]],[[""ToolKit""],[1]],[[""rhsusf_falconii""],[1]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; @@ -2977,24 +2826,12 @@ class Mission }; }; class Item49 - { - dataType="Logic"; - class PositionInfo - { - position[]={8302.7266,75.940002,10058.99}; - }; - name="btc_hc_1"; - isPlayable=1; - id=153; - type="HeadlessClient_F"; - }; - class Item50 { dataType="Object"; class PositionInfo { - position[]={8272.0283,81.307152,10065.254}; - angles[]={0.12205668,0.95726073,6.2392135}; + position[]={7080.8096,277.03772,1083.1549}; + angles[]={0.10520844,0.710733,6.1339073}; }; side="Empty"; flags=4; @@ -3002,10 +2839,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_6"; + name="btc_veh_2"; }; - id=154; - type="rhsusf_M1230_M2_usarmy_d"; + id=238; + type="B_T_LSV_01_armed_F"; + atlOffset=0.070037842; class CustomAttributes { class Attribute0 @@ -3023,20 +2861,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit"",""Medikit""],[2,8,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_M433_HEDP"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[30,20,11,10,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[4]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item51 + class Item50 { dataType="Object"; class PositionInfo { - position[]={8276.9688,81.302948,10059.785}; - angles[]={0.12205668,0.35431969,6.1297355}; + position[]={7085.7305,276.43085,1078.4639}; + angles[]={0.067107908,0.710733,6.1214104}; }; side="Empty"; flags=4; @@ -3044,10 +2882,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_5"; + name="btc_veh_3"; }; - id=155; - type="rhsusf_M1230_M2_usarmy_d"; + id=239; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.12496948; class CustomAttributes { class Attribute0 @@ -3065,20 +2904,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit"",""Medikit""],[2,8,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_M433_HEDP"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[30,20,11,10,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[4]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item52 + class Item51 { dataType="Object"; class PositionInfo { - position[]={8363.8711,75.677399,10103.982}; - angles[]={0.0066682254,5.6318107,6.1914439}; + position[]={7098.165,275.39944,1066.9797}; + angles[]={0.0095993113,0.710733,6.1763887}; }; side="Empty"; flags=4; @@ -3086,10 +2925,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_16"; + name="btc_veh_4"; }; - id=169; - type="B_Truck_01_flatbed_F"; + id=240; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.092956543; class CustomAttributes { class Attribute0 @@ -3107,36 +2947,38 @@ class Mission "STRING" }; }; - value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item53 + class Item52 { dataType="Object"; class PositionInfo { - position[]={8346.2012,77.471329,10106.966}; - angles[]={0.0066682254,5.5850534,6.2485328}; + position[]={7088.9854,274.68829,1092.5779}; + angles[]={0.092537358,2.2788241,6.1198573}; }; side="Empty"; + flags=4; class Attributes { - init="call{this setVariable ['bin_deconshower_disableAction',true];}"; - name="btc_bigShower"; + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_8"; }; - id=170; - type="DeconShower_02_F"; - atlOffset=0.30892181; + id=241; + type="B_T_Truck_01_transport_F"; + atlOffset=0.00048828125; class CustomAttributes { class Attribute0 { - property="Decon_Shower_DisableUserActions"; - expression="if(_value)then{_this setVariable ['bin_deconshower_disableAction',true]};"; + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; class Value { class data @@ -3145,17 +2987,39 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; }; }; }; - class Attribute1 + nAttributes=1; + }; + }; + class Item53 + { + dataType="Object"; + class PositionInfo + { + position[]={7099.8633,274.62213,1084.2837}; + angles[]={0.15241256,2.2783701,6.1637564}; + }; + side="Empty"; + flags=4; + class Attributes + { + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_15"; + }; + id=243; + type="B_T_Truck_01_flatbed_F"; + class CustomAttributes + { + class Attribute0 { - property="Decon_Shower"; - expression="if(_value)then{[_this,5.4,4,2,true] spawn bin_fnc_deconShowerAnimLarge;};"; + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; class Value { class data @@ -3164,14 +3028,14 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; }; }; }; - nAttributes=2; + nAttributes=1; }; }; class Item54 @@ -3179,102 +3043,233 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8346.2598,74.000175,10106.659}; - angles[]={0.0066682254,5.5850534,6.2485328}; + position[]={7110.1313,273.8912,1076.689}; + angles[]={0.028797932,2.2788241,6.2240534}; }; side="Empty"; + flags=4; class Attributes { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_9"; + }; + id=244; + type="B_T_Truck_01_transport_F"; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; }; - id=171; - type="Tarp_01_Large_Black_F"; - atlOffset=0.32492828; }; class Item55 { dataType="Object"; class PositionInfo { - position[]={8342.9902,74.174217,10102.56}; - angles[]={0.0079935296,0,6.2472029}; + position[]={7115.6528,273.66119,1038.8058}; + angles[]={6.2543874,0.68451816,6.1684823}; }; side="Empty"; flags=4; class Attributes { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_13"; + }; + id=245; + type="B_T_Truck_01_Repair_F"; + atlOffset=-0.10299683; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; }; - id=172; - type="RoadCone_L_F"; - atlOffset=2.2888184e-005; }; class Item56 { dataType="Object"; class PositionInfo { - position[]={8341.0508,74.228027,10104.568}; - angles[]={0.0079935296,0,6.2472029}; + position[]={7119.8477,272.70474,1035.047}; + angles[]={6.249588,0.68451816,6.1716585}; }; side="Empty"; flags=4; class Attributes { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_12"; + }; + id=246; + type="B_T_Truck_01_fuel_F"; + atlOffset=-0.058990479; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; }; - id=173; - type="RoadCone_L_F"; - atlOffset=6.8664551e-005; }; class Item57 { dataType="Object"; class PositionInfo { - position[]={8351.0439,73.759438,10109.445}; - angles[]={0.033321146,0,6.2206011}; + position[]={7124.3345,272.08392,1030.8234}; + angles[]={6.2655926,0.68451816,6.1716585}; }; side="Empty"; flags=4; class Attributes { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_11"; + }; + id=247; + type="B_T_Truck_01_ammo_F"; + atlOffset=-0.050994873; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; }; - id=174; - type="RoadCone_L_F"; - atlOffset=7.6293945e-005; }; class Item58 { dataType="Object"; class PositionInfo { - position[]={8349.207,73.740791,10111.555}; - angles[]={0.074528553,0,6.2206011}; + position[]={7129.0771,272.34521,1026.9546}; + angles[]={6.2655749,0.68451816,6.1922359}; }; side="Empty"; flags=4; class Attributes { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_16"; + }; + id=248; + type="B_T_Truck_01_flatbed_F"; + atlOffset=-0.050994873; + class CustomAttributes + { + class Attribute0 + { + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; + class Value + { + class data + { + class type + { + type[]= + { + "STRING" + }; + }; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + }; + }; + }; + nAttributes=1; }; - id=175; - type="RoadCone_L_F"; - atlOffset=0.00018310547; }; class Item59 { dataType="Object"; class PositionInfo { - position[]={8369.0508,74.643921,10109.3}; - angles[]={0.012007865,5.6318107,6.1861625}; + position[]={7135.4209,270.89554,1023.1991}; + angles[]={6.2448053,0.64624304,6.1323361}; }; side="Empty"; flags=4; class Attributes { - init="call{this setVariable [""btc_dont_delete"",true];}"; + init="call{this setVariable [""btc_dont_delete"",true]}"; name="btc_veh_17"; }; - id=180; - type="B_Truck_01_medical_F"; + id=249; + type="B_T_Truck_01_medical_F"; + atlOffset=-0.091003418; class CustomAttributes { class Attribute0 @@ -3304,22 +3299,19 @@ class Mission dataType="Object"; class PositionInfo { - position[]={8374.2168,73.823952,10113.651}; - angles[]={6.279171,5.6747112,6.1848359}; + position[]={7142.0708,270.33746,1020.1888}; + angles[]={6.2448053,0.60960865,6.1669116}; }; side="Empty"; flags=4; class Attributes { - init="call{this setVariable [""btc_dont_delete"",true];}"; + init="call{this setVariable [""btc_dont_delete"",true]}"; name="btc_veh_18"; - reportRemoteTargets=1; - receiveRemoteTargets=1; - reportOwnPosition=1; }; - id=181; - type="rhsusf_stryker_m1132_m2_d"; - atlOffset=7.6293945e-006; + id=250; + type="B_T_APC_Tracked_01_CRV_F"; + atlOffset=-0.092987061; class CustomAttributes { class Attribute0 @@ -3337,7 +3329,7 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4"",""rhs_weap_m240B"",""rhs_weap_M136"",""rhs_weap_M320"",""rhs_weap_M590_5RD"",""FirstAidKit"",""Medikit""],[2,1,2,1,1,10,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhsusf_100Rnd_762x51"",""rhsusf_5Rnd_00Buck"",""rhs_m136_mag"",""rhs_mag_M433_HEDP"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[75,11,11,20,2,20,10,8,4,10,4,4,10]],[[""ToolKit"",""MineDetector""],[1,1]],[[""rhsusf_falconii""],[8]]],false]"; + value="[[[[""arifle_MX_F"",""arifle_MX_SW_F"",""launch_NLAW_F"",""FirstAidKit""],[2,1,1,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""MiniGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F"",""Titan_AT"",""Titan_AP"",""Titan_AA""],[24,12,6,6,6,3,3,3,3,8,8,8,8,5,2,2,2]],[[],[]],[[],[]]],false]"; }; }; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm similarity index 57% rename from =BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm rename to =BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm index e12567ead..f69d8bce8 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission_RHSUS_Tanoa.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm @@ -1,14 +1,14 @@ version=53; class EditorData { - moveGridStep=0.125; + moveGridStep=0.5; angleGridStep=0.2617994; scaleGridStep=0.1; autoGroupingDist=10; - toggles=517; + toggles=581; class ItemIDProvider { - nextID=280; + nextID=251; }; class MarkerIDProvider { @@ -16,17 +16,16 @@ class EditorData }; class Camera { - pos[]={4207.9658,63.28899,4003.0295}; - dir[]={0.51509511,-0.70204765,-0.49179742}; - up[]={0.50780344,0.7120958,-0.48483482}; - aside[]={-0.69058174,-5.789334e-007,-0.72329694}; + pos[]={4249.6226,27.622044,3976.6941}; + dir[]={0.39056954,-0.43001515,-0.81403327}; + up[]={0.18603939,0.90279877,-0.38774955}; + aside[]={-0.90164852,-6.7637302e-007,-0.43260601}; }; }; binarizationWanted=0; addons[]= { "A3_Ui_F", - "RHS_US_A2_AirImport", "A3_Structures_F_Ind_Cargo", "ace_cargo", "A3_Structures_F_Mil_Helipads", @@ -35,21 +34,24 @@ addons[]= "ace_explosives", "A3_Modules_F_Curator_Curator", "A3_Characters_F_Enoch", - "RHS_US_A2Port_Armor", - "rhsusf_vehicles", - "rhsusf_c_fmtv", - "rhsusf_c_Caiman", + "A3_Air_F_Heli_Heli_Transport_03", + "ace_realisticnames", + "A3_Air_F_Beta_Heli_Transport_01", + "A3_Air_F_Beta_Heli_Attack_01", "A3_Props_F_Enoch_Military_Decontamination", "A3_Signs_F", - "A3_Soft_F_Enoch_Truck_01", + "A3_Armor_F_Exp_APC_Wheeled_01", + "A3_Soft_F_Exp_MRAP_01", + "A3_Soft_F_Exp_LSV_01", "A3_Soft_F_Exp_Truck_01", - "rhsusf_c_stryker" + "A3_Soft_F_Enoch_Truck_01", + "A3_Armor_F_Exp_APC_Tracked_01" }; class AddonsMetaData { class List { - items=18; + items=15; class Item0 { className="A3_Ui_F"; @@ -58,121 +60,102 @@ class AddonsMetaData url="https://www.arma3.com"; }; class Item1 - { - className="RHS_US_A2_AirImport"; - name="RHSUSF A2 Air Ports"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; - }; - class Item2 { className="A3_Structures_F_Ind"; name="Arma 3 - Industrial Structures"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item3 + class Item2 { className="ace_cargo"; name="ACE3 - Cargo"; author="ACE-Team"; url="http://ace3mod.com/"; }; - class Item4 + class Item3 { className="A3_Structures_F_Mil"; name="Arma 3 - Military Buildings and Structures"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item5 + class Item4 { className="A3_Characters_F"; name="Arma 3 Alpha - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item6 + class Item5 { className="ace_explosives"; name="ACE3 - Explosives"; author="ACE-Team"; url="http://ace3mod.com/"; }; - class Item7 + class Item6 { className="A3_Modules_F_Curator"; name="Arma 3 Zeus Update - Scripted Modules"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item8 + class Item7 { className="A3_Characters_F_Enoch"; name="Arma 3 Contact Platform - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item9 - { - className="RHS_US_A2Port_Armor"; - name="M2 Bradley IFV"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; - }; - class Item10 - { - className="rhsusf_vehicles"; - name="rhsusf_vehicles"; - }; - class Item11 + class Item8 { - className="rhsusf_c_fmtv"; - name="FMTV Trucks"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; + className="A3_Air_F_Heli"; + name="Arma 3 Helicopters - Aircraft"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; }; - class Item12 + class Item9 { - className="rhsusf_c_Caiman"; - name="Caiman MRAP"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; + className="A3_Air_F_Beta"; + name="Arma 3 Beta - Aircraft"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; }; - class Item13 + class Item10 { className="A3_Props_F_Enoch"; - name="Arma 3 Enoch - Decorative and Mission Objects"; + name="Arma 3 Contact Platform - Decorative and Mission Objects"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item14 + class Item11 { className="A3_Signs_F"; name="Arma 3 - Signs"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item15 + class Item12 { - className="A3_Soft_F_Enoch"; - name="Arma 3 Enoch - Unarmored Land Vehicles"; + className="A3_Armor_F_Exp"; + name="Arma 3 Apex - Armored Land Vehicles"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item16 + class Item13 { className="A3_Soft_F_Exp"; name="Arma 3 Apex - Unarmored Land Vehicles"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item17 + class Item14 { - className="rhsusf_c_stryker"; - name="IAV Stryker vehicles"; - author="Red Hammer Studios"; - url="http://www.rhsmods.org/"; + className="A3_Soft_F_Enoch"; + name="Arma 3 Contact Platform - Unarmored Land Vehicles"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; }; }; }; @@ -291,7 +274,7 @@ class CustomAttributes "STRING" }; }; - value="ace_medical_enablefor"; + value="ace_respawn_savepredeathgear"; }; }; class Item1 @@ -305,7 +288,7 @@ class CustomAttributes "STRING" }; }; - value="ace_rearm_level"; + value="ace_medical_enablefor"; }; }; class Item2 @@ -319,7 +302,7 @@ class CustomAttributes "STRING" }; }; - value="ace_respawn_savepredeathgear"; + value="ace_cargo_enable"; }; }; class Item3 @@ -333,7 +316,7 @@ class CustomAttributes "STRING" }; }; - value="ace_cargo_enable"; + value="ace_rearm_level"; }; }; class Item4 @@ -389,7 +372,7 @@ class CustomAttributes { type[]= { - "SCALAR" + "BOOL" }; }; value=1; @@ -403,7 +386,7 @@ class CustomAttributes { type[]= { - "BOOL" + "SCALAR" }; }; value=1; @@ -493,7 +476,7 @@ class CustomAttributes { type[]= { - "BOOL" + "SCALAR" }; }; value=1; @@ -524,7 +507,7 @@ class CustomAttributes { type[]= { - "BOOL" + "SCALAR" }; }; value=1; @@ -538,7 +521,7 @@ class CustomAttributes { type[]= { - "SCALAR" + "BOOL" }; }; value=1; @@ -668,27 +651,26 @@ class Mission class Item0 { dataType="Marker"; - position[]={4231.5,360.625,4011.125}; + position[]={4211.2661,19.452999,4025.085}; name="respawn_west"; text=$STR_BTC_HAM_INTRO_ARSENAL_REDEPLOY; type="Empty"; - angle=33.149483; id=0; - atlOffset=341.63031; + atlOffset=-0.00034332275; }; class Item1 { dataType="Marker"; - position[]={4223.375,6.159635e+026,3993.75}; + position[]={4219.5239,19.041,4009.7571}; name="btc_base"; type="flag_NATO"; id=1; - atlOffset=6.159635e+026; + atlOffset=0.00015640259; }; class Item2 { dataType="Marker"; - position[]={4253.5,6.159635e+026,3990.375}; + position[]={4223,18.247999,3979.25}; name="btc_log_point"; text=$STR_BTC_HAM_MSQM_MRK_LOGPOINT; type="mil_flag"; @@ -696,57 +678,15 @@ class Mission a=0.5; b=0.5; id=2; - atlOffset=6.159635e+026; + atlOffset=-3.4332275e-005; }; class Item3 { dataType="Object"; class PositionInfo { - position[]={4290.125,25.662582,3962.6953}; - angles[]={6.2432079,4.8979063,0.0053265258}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - name="btc_helo_1"; - }; - id=6; - type="RHS_CH_47F_10"; - atlOffset=-0.17722511; - class CustomAttributes - { - class Attribute0 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit"",""Medikit""],[2,10,2]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[12,4,2,2,4]],[[],[]],[[""B_Parachute""],[4]]],false]"; - }; - }; - }; - nAttributes=1; - }; - }; - class Item4 - { - dataType="Object"; - class PositionInfo - { - position[]={4245.125,19.769165,3990.25}; - angles[]={0,3.7038331,0.047961645}; + position[]={4222.4121,19.440477,3987.0181}; + angles[]={6.2325621,2.080183,0.0053265258}; }; side="Empty"; flags=4; @@ -759,6 +699,7 @@ class Mission }; id=13; type="Land_CargoBox_V1_F"; + atlOffset=-0.0012397766; class CustomAttributes { class Attribute0 @@ -781,25 +722,6 @@ class Mission }; }; class Attribute1 - { - property="ace_isMedicalFacility"; - expression="_this setVariable [""ace_medical_isMedicalFacility"",_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute2 { property="ace_cargo_size"; expression="[_this,_value] call ace_cargo_fnc_setSize;"; @@ -818,16 +740,16 @@ class Mission }; }; }; - nAttributes=3; + nAttributes=2; }; }; - class Item5 + class Item4 { dataType="Object"; class PositionInfo { - position[]={4253.375,19.517353,3990.375}; - angles[]={6.2671809,0.52167892,0.058608156}; + position[]={4223,18.248034,3979.25}; + angles[]={6.2113104,3.5802941,0.023993526}; }; side="Empty"; flags=4; @@ -859,35 +781,16 @@ class Mission }; }; }; - class Attribute1 - { - property="ace_isMedicalFacility"; - expression="_this setVariable [""ace_medical_isMedicalFacility"",_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=2; + nAttributes=1; }; }; - class Item6 + class Item5 { dataType="Object"; class PositionInfo { - position[]={4225.48,19.707964,4010.2305}; - angles[]={6.2565165,1.0466565,0.0053232545}; + position[]={4210.9512,20.136942,4019.05}; + angles[]={6.2698536,1.1926365,6.2618566}; }; side="Empty"; flags=4; @@ -900,7 +803,7 @@ class Mission }; id=15; type="Land_CargoBox_V1_F"; - atlOffset=-1.9073486e-006; + atlOffset=-0.019309998; class CustomAttributes { class Attribute0 @@ -923,25 +826,6 @@ class Mission }; }; class Attribute1 - { - property="ace_isMedicalFacility"; - expression="_this setVariable [""ace_medical_isMedicalFacility"",_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute2 { property="ace_cargo_size"; expression="[_this,_value] call ace_cargo_fnc_setSize;"; @@ -960,59 +844,16 @@ class Mission }; }; }; - nAttributes=3; - }; - }; - class Item7 - { - dataType="Object"; - class PositionInfo - { - position[]={4294.6011,23.503742,3994.0601}; - angles[]={0.034652505,4.8737464,0.039977662}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_10"; - }; - id=16; - type="RHS_AH64D"; - atlOffset=-0.30885124; - class CustomAttributes - { - class Attribute0 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit""],[2,4]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_m18_green"",""rhs_mag_m18_yellow"",""rhs_mag_m18_red"",""rhs_mag_m18_purple"",""rhs_mag_an_m8hc""],[8,2,2,2,2,2]],[[],[]],[[""B_Parachute""],[2]]],false]"; - }; - }; - }; - nAttributes=1; + nAttributes=2; }; }; - class Item8 + class Item6 { dataType="Object"; class PositionInfo { - position[]={4293.625,21.394325,3994.5}; - angles[]={0.034652505,4.7827449,6.2805333}; + position[]={4338.7837,23.259531,3954.2544}; + angles[]={0,4.9561291,0.023993526}; }; side="Empty"; flags=4; @@ -1022,37 +863,15 @@ class Mission }; id=17; type="Land_HelipadSquare_F"; - class CustomAttributes - { - class Attribute0 - { - property="ace_isMedicalFacility"; - expression="_this setVariable [""ace_medical_isMedicalFacility"",_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=1; - }; + atlOffset=0.0087184906; }; - class Item9 + class Item7 { dataType="Object"; class PositionInfo { - position[]={4224.5,22.85014,4002.75}; - angles[]={6.2778587,1.6527834,0.0026520467}; + position[]={4216.0317,23.122213,4009.9016}; + angles[]={6.2671871,1.7987723,6.2511969}; }; side="Empty"; flags=4; @@ -1062,118 +881,30 @@ class Mission }; id=21; type="Flag_NATO_F"; - class CustomAttributes - { - class Attribute0 - { - property="ace_isMedicalFacility"; - expression="_this setVariable [""ace_medical_isMedicalFacility"",_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=1; - }; }; - class Item10 + class Item8 { dataType="Object"; class PositionInfo { - position[]={4321.6724,24.29775,3992.0872}; - angles[]={6.2645216,4.9720054,0.039977662}; + position[]={4303.2642,22.297966,3960.4495}; + angles[]={6.272521,4.9561291,0.031988446}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_14"; }; - id=22; - type="RHS_UH1Y_d"; - atlOffset=-0.004776001; - class CustomAttributes - { - class Attribute0 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit"",""Medikit""],[2,10,2]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[12,4,2,2,4]],[[],[]],[[""B_Parachute""],[4]]],false]"; - }; - }; - }; - nAttributes=1; - }; - }; - class Item11 - { - dataType="Object"; - class PositionInfo - { - position[]={4319.625,22.049675,3992.5}; - angles[]={6.2645183,0.1613543,0.018667053}; - }; - side="Empty"; - flags=4; - class Attributes - { - skill=0.60000002; - }; - id=23; - type="Land_HelipadSquare_F"; - class CustomAttributes - { - class Attribute0 - { - property="ace_isMedicalFacility"; - expression="_this setVariable [""ace_medical_isMedicalFacility"",_value,true];"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=1; - }; - }; - class Item12 - { - dataType="Group"; - side="West"; - class Entities + id=23; + type="Land_HelipadSquare_F"; + atlOffset=0.0087184906; + }; + class Item9 + { + dataType="Group"; + side="West"; + class Entities { items=1; class Item0 @@ -1181,8 +912,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4212.5469,19.360876,4017.093}; - angles[]={6.2698536,4.3477578,6.259192}; + position[]={4209.75,19.430765,4017.55}; + angles[]={6.272521,4.3508034,6.259192}; }; side="West"; flags=6; @@ -1196,77 +927,14 @@ class Mission }; id=25; type="B_officer_F"; - atlOffset=-3.8146973e-006; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=0.98000002; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=3; - }; }; }; class Attributes { }; id=24; - atlOffset=-3.8146973e-006; }; - class Item13 + class Item10 { dataType="Group"; side="West"; @@ -1278,8 +946,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4213.5083,19.405031,4022.5779}; - angles[]={6.2698536,4.3204784,6.2698536}; + position[]={4210.729,19.455681,4023.0322}; + angles[]={6.2778587,4.3235211,6.2671871}; }; side="West"; flags=6; @@ -1292,77 +960,16 @@ class Mission }; id=29; type="B_Soldier_F"; - atlOffset=-1.9073486e-006; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1.04; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=3; - }; + atlOffset=1.9073486e-006; }; }; class Attributes { }; id=28; - atlOffset=-1.9073486e-006; + atlOffset=1.9073486e-006; }; - class Item14 + class Item11 { dataType="Group"; side="West"; @@ -1374,8 +981,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4213.9482,19.380543,4021.1812}; - angles[]={6.2698507,4.1308804,6.2698507}; + position[]={4211.1631,19.441271,4021.6331}; + angles[]={6.2778587,4.1339355,6.2671871}; }; side="West"; flags=6; @@ -1391,25 +998,6 @@ class Mission class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="ace_isEngineer"; expression="if !(_value == ([0,1] select (_this getUnitTrait 'engineer'))|| {_value == -1}) then {_this setVariable ['ace_isEngineer', _value, true]}"; @@ -1428,7 +1016,7 @@ class Mission }; }; }; - class Attribute2 + class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -1447,7 +1035,7 @@ class Mission }; }; }; - class Attribute3 + class Attribute2 { property="pitch"; expression="_this setpitch _value;"; @@ -1466,26 +1054,7 @@ class Mission }; }; }; - class Attribute4 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=5; + nAttributes=3; }; }; }; @@ -1495,13 +1064,13 @@ class Mission id=30; atlOffset=1.9073486e-006; }; - class Item15 + class Item12 { dataType="Logic"; class PositionInfo { - position[]={3985.1992,-5.0633116,3906.0693}; - angles[]={6.272521,0,0.093063653}; + position[]={4159.5,14.44014,4017.5}; + angles[]={0.023993526,0,0.47951955}; }; name="btc_curator"; init="this addEventHandler ['CuratorObjectPlaced',{_this call btc_fnc_eh_CuratorObjectPlaced}];"; @@ -1607,523 +1176,71 @@ class Mission nAttributes=5; }; }; - class Item16 + class Item13 { dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={4202.4067,19.632608,4026.0737}; - angles[]={0,2.8130026,0}; - }; - side="West"; - flags=7; - class Attributes - { - isPlayable=1; - }; - id=90; - type="B_medic_F"; - atlOffset=1.9073486e-006; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=3; - }; - }; - }; - class Attributes - { - }; - id=89; - atlOffset=1.9073486e-006; - }; - class Item17 - { - dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={4204.2739,19.586445,4026.7244}; - angles[]={0,2.8130026,0}; - }; - side="West"; - flags=7; - class Attributes - { - isPlayable=1; - }; - id=92; - type="B_medic_F"; - atlOffset=-3.8146973e-006; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=0.98000002; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=3; - }; - }; - }; - class Attributes - { - }; - id=91; - atlOffset=-3.8146973e-006; - }; - class Item18 - { - dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={4205.6602,19.529762,4019.468}; - angles[]={0,1.2144525,0}; - }; - side="West"; - flags=6; - class Attributes - { - isPlayable=1; - }; - id=249; - type="B_engineer_F"; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="speaker"; - expression="_this setspeaker _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="Male03ENG"; - }; - }; - }; - class Attribute2 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=4; - }; - }; - }; - class Attributes - { - }; - id=93; - }; - class Item19 - { - dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={4206.125,19.507099,4017.925}; - angles[]={0,1.2144525,0}; - }; - side="West"; - flags=6; - class Attributes - { - isPlayable=1; - }; - id=250; - type="B_engineer_F"; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="speaker"; - expression="_this setspeaker _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="Male09ENG"; - }; - }; - }; - class Attribute2 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=4; - }; - }; - }; - class Attributes - { - }; - id=95; - }; - class Item20 - { - dataType="Group"; - side="West"; - class Entities - { - items=1; - class Item0 - { - dataType="Object"; - class PositionInfo - { - position[]={4206.751,19.485622,4016.3381}; - angles[]={0,1.2144525,0}; - }; - side="West"; - flags=6; - class Attributes - { - isPlayable=1; - }; - id=251; - type="B_soldier_AR_F"; - class CustomAttributes - { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="speaker"; - expression="_this setspeaker _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="Male12ENG"; - }; - }; - }; - class Attribute2 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1.01; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=4; + side="West"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={4199.6377,19.668583,4026.562}; + angles[]={0,2.8160391,0}; + }; + side="West"; + flags=7; + class Attributes + { + isPlayable=1; }; + id=90; + type="B_medic_F"; + atlOffset=-1.9073486e-006; }; }; class Attributes { }; - id=97; + id=89; + atlOffset=-1.9073486e-006; }; - class Item21 + class Item14 + { + dataType="Group"; + side="West"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={4201.5054,19.670515,4027.2063}; + angles[]={0,2.8160391,0}; + }; + side="West"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=92; + type="B_medic_F"; + atlOffset=1.9073486e-006; + }; + }; + class Attributes + { + }; + id=91; + atlOffset=1.9073486e-006; + }; + class Item15 { dataType="Group"; side="West"; @@ -2135,8 +1252,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4207.3208,19.45731,4014.6621}; - angles[]={0,1.2144525,0}; + position[]={4202.8706,19.567921,4019.9463}; + angles[]={6.2778587,1.2175078,6.2751846}; }; side="West"; flags=6; @@ -2144,30 +1261,11 @@ class Mission { isPlayable=1; }; - id=252; - type="B_soldier_AR_F"; + id=180; + type="B_engineer_F"; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2182,11 +1280,11 @@ class Mission "STRING" }; }; - value="Male09ENG"; + value="Male03ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -2201,39 +1299,20 @@ class Mission "SCALAR" }; }; - value=1.01; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=99; + id=93; }; - class Item22 + class Item16 { dataType="Group"; side="West"; @@ -2245,8 +1324,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4207.875,19.426765,4013.05}; - angles[]={0,1.2144525,0}; + position[]={4203.437,19.554443,4018.2698}; + angles[]={6.2778587,1.2175078,6.2751846}; }; side="West"; flags=6; @@ -2254,30 +1333,11 @@ class Mission { isPlayable=1; }; - id=253; - type="B_soldier_AR_F"; + id=181; + type="B_engineer_F"; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2292,11 +1352,11 @@ class Mission "STRING" }; }; - value="Male01ENG"; + value="Male09ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -2311,39 +1371,20 @@ class Mission "SCALAR" }; }; - value=0.99000001; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=101; + id=95; }; - class Item23 + class Item17 { dataType="Group"; side="West"; @@ -2355,8 +1396,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4208.4458,19.392986,4011.377}; - angles[]={0,1.2144525,0}; + position[]={4203.9497,19.540438,4016.8127}; + angles[]={6.2778478,1.2175078,6.2645216}; }; side="West"; flags=6; @@ -2364,30 +1405,11 @@ class Mission { isPlayable=1; }; - id=254; - type="B_soldier_AT_F"; + id=182; + type="B_soldier_AR_F"; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2406,7 +1428,7 @@ class Mission }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -2421,39 +1443,20 @@ class Mission "SCALAR" }; }; - value=1.03; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1.01; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=103; + id=97; }; - class Item24 + class Item18 { dataType="Group"; side="West"; @@ -2465,8 +1468,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4208.9639,19.369772,4009.9202}; - angles[]={0,1.2144525,0}; + position[]={4204.5161,19.518961,4015.1365}; + angles[]={0,1.2175078,6.253861}; }; side="West"; flags=6; @@ -2474,30 +1477,11 @@ class Mission { isPlayable=1; }; - id=255; - type="B_soldier_AT_F"; + id=183; + type="B_soldier_AR_F"; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2512,11 +1496,11 @@ class Mission "STRING" }; }; - value="Male11ENG"; + value="Male09ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -2531,39 +1515,20 @@ class Mission "SCALAR" }; }; - value=1.02; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1.01; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=105; + id=99; }; - class Item25 + class Item19 { dataType="Group"; side="West"; @@ -2575,8 +1540,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4209.5352,19.338074,4008.2461}; - angles[]={0,1.2144525,0}; + position[]={4205.064,19.502888,4013.5215}; + angles[]={0,1.2175078,6.253861}; }; side="West"; flags=6; @@ -2584,31 +1549,11 @@ class Mission { isPlayable=1; }; - id=256; - type="B_soldier_AA_F"; - atlOffset=1.9073486e-006; + id=184; + type="B_soldier_AR_F"; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2623,11 +1568,11 @@ class Mission "STRING" }; }; - value="Male02ENG"; + value="Male01ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -2642,40 +1587,20 @@ class Mission "SCALAR" }; }; - value=1.05; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=0.99000001; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=107; - atlOffset=1.9073486e-006; + id=101; }; - class Item26 + class Item20 { dataType="Group"; side="West"; @@ -2687,8 +1612,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4210.04,19.29841,4006.6851}; - angles[]={0,1.2144699,0}; + position[]={4205.6313,19.484369,4011.8452}; + angles[]={6.2805333,1.2175078,6.253861}; }; side="West"; flags=6; @@ -2696,9 +1621,9 @@ class Mission { isPlayable=1; }; - id=274; - type="B_soldier_UAV_F"; - atlOffset=1.9073486e-006; + id=185; + type="B_soldier_AT_F"; + atlOffset=-1.9073486e-006; class CustomAttributes { class Attribute0 @@ -2716,7 +1641,7 @@ class Mission "STRING" }; }; - value="Male08ENG"; + value="Male12ENG"; }; }; }; @@ -2746,10 +1671,10 @@ class Mission class Attributes { }; - id=109; - atlOffset=1.9073486e-006; + id=103; + atlOffset=-1.9073486e-006; }; - class Item27 + class Item21 { dataType="Group"; side="West"; @@ -2761,8 +1686,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4210.6108,19.249872,4005.011}; - angles[]={0,1.2144699,0}; + position[]={4206.1445,19.465431,4010.3875}; + angles[]={6.2805333,1.2175078,6.253861}; }; side="West"; flags=6; @@ -2770,8 +1695,9 @@ class Mission { isPlayable=1; }; - id=275; - type="B_soldier_UAV_F"; + id=186; + type="B_soldier_AT_F"; + atlOffset=-1.9073486e-006; class CustomAttributes { class Attribute0 @@ -2789,7 +1715,7 @@ class Mission "STRING" }; }; - value="Male08ENG"; + value="Male11ENG"; }; }; }; @@ -2808,7 +1734,7 @@ class Mission "SCALAR" }; }; - value=1; + value=1.02; }; }; }; @@ -2819,9 +1745,10 @@ class Mission class Attributes { }; - id=111; + id=105; + atlOffset=-1.9073486e-006; }; - class Item28 + class Item22 { dataType="Group"; side="West"; @@ -2833,8 +1760,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4203.8579,19.552235,4018.7021}; - angles[]={0,1.2144525,0}; + position[]={4206.7109,19.449001,4008.7114}; + angles[]={6.2618566,1.2175078,6.2458687}; }; side="West"; flags=6; @@ -2842,30 +1769,12 @@ class Mission { isPlayable=1; }; - id=276; - type="B_W_Soldier_CBRN_F"; + id=187; + type="B_soldier_AA_F"; + atlOffset=1.9073486e-006; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2880,11 +1789,11 @@ class Mission "STRING" }; }; - value="Male05ENG"; + value="Male02ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -2899,39 +1808,21 @@ class Mission "SCALAR" }; }; - value=1; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1.05; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=113; + id=107; + atlOffset=1.9073486e-006; }; - class Item29 + class Item23 { dataType="Group"; side="West"; @@ -2943,8 +1834,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4204.375,19.535101,4017.3}; - angles[]={0,1.2144525,0}; + position[]={4207.2109,19.397018,4007.1497}; + angles[]={6.2618566,1.2175078,6.2458687}; }; side="West"; flags=6; @@ -2952,30 +1843,12 @@ class Mission { isPlayable=1; }; - id=277; - type="B_W_Soldier_CBRN_F"; + id=226; + type="B_soldier_UAV_F"; + atlOffset=1.9073486e-006; class CustomAttributes { class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 { property="speaker"; expression="_this setspeaker _value;"; @@ -2990,11 +1863,11 @@ class Mission "STRING" }; }; - value="Male06ENG"; + value="Male08ENG"; }; }; }; - class Attribute2 + class Attribute1 { property="pitch"; expression="_this setpitch _value;"; @@ -3009,39 +1882,21 @@ class Mission "SCALAR" }; }; - value=0.95999998; - }; - }; - }; - class Attribute3 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1.03; }; }; }; - nAttributes=4; + nAttributes=2; }; }; }; class Attributes { }; - id=115; + id=109; + atlOffset=1.9073486e-006; }; - class Item30 + class Item24 { dataType="Group"; side="West"; @@ -3053,23 +1908,23 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4204.9468,19.511341,4015.573}; - angles[]={0,1.2144552,0}; + position[]={4207.7773,19.342335,4005.4734}; + angles[]={6.2618566,1.2175078,6.253859}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=118; - type="B_Soldier_F"; + id=227; + type="B_soldier_UAV_F"; class CustomAttributes { class Attribute0 { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; + property="speaker"; + expression="_this setspeaker _value;"; class Value { class data @@ -3078,10 +1933,10 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="Male08ENG"; }; }; }; @@ -3100,39 +1955,20 @@ class Mission "SCALAR" }; }; - value=0.95999998; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1; }; }; }; - nAttributes=3; + nAttributes=2; }; }; }; class Attributes { }; - id=117; + id=111; }; - class Item31 + class Item25 { dataType="Group"; side="West"; @@ -3144,24 +1980,23 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4205.519,19.489536,4013.8979}; - angles[]={0,1.2144552,0}; + position[]={4201.0654,19.578306,4019.186}; + angles[]={6.2778587,1.2175078,6.2751846}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=120; - type="B_Soldier_F"; - atlOffset=-3.8146973e-006; + id=228; + type="B_W_Soldier_CBRN_F"; class CustomAttributes { class Attribute0 { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; + property="speaker"; + expression="_this setspeaker _value;"; class Value { class data @@ -3170,10 +2005,10 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="Male05ENG"; }; }; }; @@ -3192,40 +2027,20 @@ class Mission "SCALAR" }; }; - value=0.97000003; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=1; }; }; }; - nAttributes=3; + nAttributes=2; }; }; }; class Attributes { }; - id=119; - atlOffset=-3.8146973e-006; + id=113; }; - class Item32 + class Item26 { dataType="Group"; side="West"; @@ -3237,24 +2052,23 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4206.125,19.470091,4011.9248}; - angles[]={0,1.2144552,0}; + position[]={4201.6323,19.55757,4017.5098}; + angles[]={6.2698579,1.2175078,0}; }; side="West"; - flags=7; + flags=6; class Attributes { isPlayable=1; }; - id=122; - type="B_Soldier_F"; - atlOffset=-3.8146973e-006; + id=229; + type="B_W_Soldier_CBRN_F"; class CustomAttributes { class Attribute0 { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; + property="speaker"; + expression="_this setspeaker _value;"; class Value { class data @@ -3263,10 +2077,10 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="Male06ENG"; }; }; }; @@ -3285,40 +2099,80 @@ class Mission "SCALAR" }; }; - value=0.99000001; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; + value=0.95999998; }; }; }; - nAttributes=3; + nAttributes=2; + }; + }; + }; + class Attributes + { + }; + id=115; + }; + class Item27 + { + dataType="Group"; + side="West"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={4202.145,19.541439,4016.0522}; + angles[]={0,1.2175078,0}; + }; + side="West"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=118; + type="B_Soldier_F"; + }; + }; + class Attributes + { + }; + id=117; + }; + class Item28 + { + dataType="Group"; + side="West"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={4202.7119,19.541439,4014.3762}; + angles[]={0,1.2175078,0}; + }; + side="West"; + flags=7; + class Attributes + { + isPlayable=1; }; + id=120; + type="B_Soldier_F"; }; }; class Attributes { }; - id=121; - atlOffset=-3.8146973e-006; + id=119; }; - class Item33 + class Item29 { dataType="Group"; side="West"; @@ -3330,8 +2184,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4206.75,19.44743,4010.2998}; - angles[]={0,1.2144552,0}; + position[]={4203.2607,19.538475,4012.761}; + angles[]={0,1.2175078,0}; }; side="West"; flags=7; @@ -3339,79 +2193,46 @@ class Mission { isPlayable=1; }; - id=124; + id=122; type="B_Soldier_F"; - atlOffset=-3.8146973e-006; - class CustomAttributes + }; + }; + class Attributes + { + }; + id=121; + }; + class Item30 + { + dataType="Group"; + side="West"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo { - class Attribute0 - { - property="ace_isHandcuffed"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleHandcuffed}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - class Attribute1 - { - property="pitch"; - expression="_this setpitch _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=1.03; - }; - }; - }; - class Attribute2 - { - property="ace_isSurrendered"; - expression="if (_value) then {[objNull, [_this], true] call ace_captives_fnc_moduleSurrender}"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; - nAttributes=3; + position[]={4203.8271,19.546366,4011.0847}; + angles[]={0,1.2175078,0}; + }; + side="West"; + flags=7; + class Attributes + { + isPlayable=1; }; + id=124; + type="B_Soldier_F"; }; }; class Attributes { }; id=123; - atlOffset=-3.8146973e-006; }; - class Item34 + class Item31 { dataType="Group"; side="West"; @@ -3423,8 +2244,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4207.1621,19.432291,4009.155}; - angles[]={0,1.2144643,0}; + position[]={4204.3403,19.534981,4009.6272}; + angles[]={0,1.2175078,0}; }; side="West"; flags=7; @@ -3434,16 +2255,14 @@ class Mission }; id=126; type="B_Soldier_F"; - atlOffset=-5.7220459e-006; }; }; class Attributes { }; id=125; - atlOffset=-5.7220459e-006; }; - class Item35 + class Item32 { dataType="Group"; side="West"; @@ -3455,8 +2274,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4207.7329,19.386436,4007.4795}; - angles[]={0,1.2144643,0}; + position[]={4204.9063,19.500166,4007.9512}; + angles[]={0,1.2175078,0}; }; side="West"; flags=7; @@ -3466,16 +2285,16 @@ class Mission }; id=128; type="B_Soldier_F"; - atlOffset=-3.8146973e-006; + atlOffset=1.9073486e-006; }; }; class Attributes { }; id=127; - atlOffset=-3.8146973e-006; + atlOffset=1.9073486e-006; }; - class Item36 + class Item33 { dataType="Group"; side="West"; @@ -3487,8 +2306,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4208.2378,19.338343,4005.9192}; - angles[]={0,1.2144643,0}; + position[]={4205.4067,19.428076,4006.3896}; + angles[]={0,1.2175078,0}; }; side="West"; flags=7; @@ -3498,16 +2317,14 @@ class Mission }; id=130; type="B_Soldier_F"; - atlOffset=5.7220459e-006; }; }; class Attributes { }; id=129; - atlOffset=5.7220459e-006; }; - class Item37 + class Item34 { dataType="Group"; side="West"; @@ -3519,8 +2336,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4208.8101,19.29657,4004.2451}; - angles[]={0,1.2144643,0}; + position[]={4205.9727,19.353239,4004.7134}; + angles[]={0,1.2175078,0}; }; side="West"; flags=7; @@ -3530,32 +2347,46 @@ class Mission }; id=132; type="B_Soldier_F"; + atlOffset=-1.9073486e-006; }; }; class Attributes { }; id=131; + atlOffset=-1.9073486e-006; }; - class Item38 + class Item35 + { + dataType="Logic"; + class PositionInfo + { + position[]={4203.4429,19.608423,4027.6301}; + angles[]={0.010664274,1.7987723,6.2511988}; + }; + name="btc_hc_1"; + isPlayable=1; + id=153; + type="HeadlessClient_F"; + }; + class Item36 { dataType="Object"; class PositionInfo { - position[]={4265.0215,22.082785,3986.5215}; - angles[]={6.2698536,3.7083344,0.079830162}; + position[]={4324.4912,25.521086,3989.5818}; + angles[]={6.2618566,5.0764017,0.013332055}; }; side="Empty"; flags=4; class Attributes { skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true];"; - name="btc_veh_1"; + name="btc_helo_1"; }; - id=213; - type="RHS_M2A3_wd"; - atlOffset=-0.16319084; + id=156; + type="B_Heli_Transport_03_F"; + atlOffset=-0.002538681; class CustomAttributes { class Attribute0 @@ -3573,20 +2404,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle_pmag"",""rhs_weap_fgm148"",""FirstAidKit"",""Medikit""],[4,2,10,2]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhsusf_100Rnd_762x51"",""rhs_fgm148_magazine_AT"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[75,11,11,4,20,8,4,10,4,4,10]],[[""ToolKit""],[1]],[[""rhsusf_falconii""],[8]]],false]"; + value="[[[[""FirstAidKit"",""Medikit""],[10,1]],[[],[]],[[""ToolKit""],[1]],[[""B_Parachute""],[20]]],false]"; }; }; }; nAttributes=1; }; }; - class Item39 + class Item37 { dataType="Object"; class PositionInfo { - position[]={4213.5605,20.973347,3988.6531}; - angles[]={6.2007008,0.836833,0.0053407075}; + position[]={4303.5229,24.441528,3962.5347}; + angles[]={0.0053265258,3.5745981,0.015998369}; }; side="Empty"; flags=4; @@ -3594,16 +2425,17 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_7"; + name="btc_veh_14"; }; - id=214; - type="rhsusf_m1025_w_m2"; + id=174; + type="B_Heli_Transport_01_camo_F"; + atlOffset=-0.00088119507; class CustomAttributes { class Attribute0 { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; class Value { class data @@ -3615,14 +2447,14 @@ class Mission "STRING" }; }; - value="NoChange"; + value="[[[[""arifle_MXC_F"",""FirstAidKit"",""Medikit""],[2,8,1]],[[""SmokeShell"",""SmokeShellBlue"",""30Rnd_65x39_caseless_mag""],[2,2,4]],[[""ToolKit"",""ItemGPS""],[1,1]],[[""B_Parachute""],[8]]],false]"; }; }; }; class Attribute1 { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; + property="ace_fastroping_equipFRIES"; + expression="if (_value) then {[_this] call ace_fastroping_fnc_equipFRIES}"; class Value { class data @@ -3631,14 +2463,38 @@ class Mission { type[]= { - "STRING" + "BOOL" }; }; - value="NoChange"; + value=0; }; }; }; - class Attribute2 + nAttributes=2; + }; + }; + class Item38 + { + dataType="Object"; + class PositionInfo + { + position[]={4339.3516,25.185259,3954.3325}; + angles[]={0,3.5745981,0.023993526}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_10"; + }; + id=175; + type="B_Heli_Attack_01_dynamicLoadout_F"; + atlOffset=-0.0016689301; + class CustomAttributes + { + class Attribute0 { property="ammoBox"; expression="[_this,_value] call bis_fnc_initAmmoBox;"; @@ -3653,37 +2509,37 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; + value="[[[[""arifle_MXC_F"",""FirstAidKit""],[2,2]],[[""SmokeShell"",""SmokeShellBlue"",""30Rnd_65x39_caseless_mag""],[2,2,4]],[[""ToolKit"",""ItemGPS""],[1,1]],[[""B_Parachute""],[2]]],false]"; }; }; }; - nAttributes=3; + nAttributes=1; }; }; - class Item40 + class Item39 { dataType="Object"; class PositionInfo { - position[]={4219.061,20.742113,3984.6533}; - angles[]={6.2405472,0.43331289,0.010663962}; + position[]={4261.6221,23.831339,3877.7671}; + angles[]={6.2591896,4.7112999,0.024003461}; }; side="Empty"; flags=4; class Attributes { - skill=0.60000002; - init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_2"; + init="call{this setVariable ['bin_deconshower_disableAction',true];}"; + name="btc_bigShower"; }; - id=215; - type="rhsusf_m1025_w_m2"; + id=200; + type="DeconShower_02_F"; + atlOffset=-0.011005402; class CustomAttributes { class Attribute0 { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; + property="Decon_Shower_DisableUserActions"; + expression="if(_value)then{_this setVariable ['bin_deconshower_disableAction',true]};"; class Value { class data @@ -3692,17 +2548,17 @@ class Mission { type[]= { - "STRING" + "BOOL" }; }; - value="NoChange"; + value=0; }; }; }; class Attribute1 { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; + property="Decon_Shower"; + expression="if(_value)then{[_this,5.4,4,2,true] spawn bin_fnc_deconShowerAnimLarge;};"; class Value { class data @@ -3711,14 +2567,122 @@ class Mission { type[]= { - "STRING" + "BOOL" }; }; - value="NoChange"; + value=0; }; }; }; - class Attribute2 + nAttributes=2; + }; + }; + class Item40 + { + dataType="Object"; + class PositionInfo + { + position[]={4261.5,20.346003,3877.5}; + angles[]={6.2591896,4.7112999,0.02399601}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=203; + type="Tarp_01_Large_Black_F"; + }; + class Item41 + { + dataType="Object"; + class PositionInfo + { + position[]={4263.5,20.663441,3872.25}; + angles[]={6.2805109,5.4094319,0.018663859}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=213; + type="RoadCone_L_F"; + atlOffset=-6.1035156e-005; + }; + class Item42 + { + dataType="Object"; + class PositionInfo + { + position[]={4260,20.590109,3872.25}; + angles[]={6.2751846,5.4094319,0.02399601}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=214; + type="RoadCone_L_F"; + atlOffset=-0.00011634827; + }; + class Item43 + { + dataType="Object"; + class PositionInfo + { + position[]={4263.25,20.986116,3883}; + angles[]={6.2671871,5.4094319,0.087773547}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=215; + type="RoadCone_L_F"; + atlOffset=-0.0013942719; + }; + class Item44 + { + dataType="Object"; + class PositionInfo + { + position[]={4260.25,20.758129,3883.25}; + angles[]={0.0053377044,5.4094319,0.06656827}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=216; + type="RoadCone_L_F"; + atlOffset=-0.00078582764; + }; + class Item45 + { + dataType="Object"; + class PositionInfo + { + position[]={4264.5,22.915401,3982.5}; + angles[]={6.2751846,3.9608302,0.087773547}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true];"; + name="btc_veh_1"; + }; + id=232; + type="B_T_APC_Wheeled_01_cannon_F"; + atlOffset=-0.0098495483; + class CustomAttributes + { + class Attribute0 { property="ammoBox"; expression="[_this,_value] call bis_fnc_initAmmoBox;"; @@ -3733,20 +2697,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""MiniGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""Titan_AT"",""Titan_AP"",""Titan_AA""],[12,6,6,6,6,3,3,3,3,8,8,8,8,2,2,2]],[[],[]],[[],[]]],false]"; }; }; }; - nAttributes=3; + nAttributes=1; }; }; - class Item41 + class Item46 { dataType="Object"; class PositionInfo { - position[]={4224.6836,20.637239,3981.2756}; - angles[]={6.2272477,0.45174354,0.0079936078}; + position[]={4259.5957,22.704597,3987.4392}; + angles[]={0,3.8548572,0.082478598}; }; side="Empty"; flags=4; @@ -3754,52 +2718,14 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_3"; + name="btc_veh_5"; }; - id=216; - type="rhsusf_m1025_w_m2"; - atlOffset=1.9073486e-006; + id=233; + type="B_T_MRAP_01_hmg_F"; + atlOffset=-0.01962471; class CustomAttributes { class Attribute0 - { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; - }; - }; - class Attribute1 - { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; - }; - }; - class Attribute2 { property="ammoBox"; expression="[_this,_value] call bis_fnc_initAmmoBox;"; @@ -3814,20 +2740,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue""],[16,6,10,10,4,4,4,4,12,4,4,4,4]],[[],[]],[[],[]]],false]"; }; }; }; - nAttributes=3; + nAttributes=1; }; }; - class Item42 + class Item47 { dataType="Object"; class PositionInfo { - position[]={4242.1729,20.918491,3972.4004}; - angles[]={6.251193,0.4537856,0.14301229}; + position[]={4255.0957,22.370762,3990.4468}; + angles[]={6.2671871,3.7254124,0.058600098}; }; side="Empty"; flags=4; @@ -3835,51 +2761,14 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_4"; + name="btc_veh_6"; }; - id=217; - type="rhsusf_m1025_w_m2"; + id=234; + type="B_T_MRAP_01_hmg_F"; + atlOffset=-0.012031555; class CustomAttributes { class Attribute0 - { - property="rhs_decalMask"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_1',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; - }; - }; - class Attribute1 - { - property="rhs_decalDoors"; - expression="if(_value != 'NoChange')then{ [_this,'unitdecals_2',_value] call rhs_fnc_hmmwv_setDecal}"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="NoChange"; - }; - }; - }; - class Attribute2 { property="ammoBox"; expression="[_this,_value] call bis_fnc_initAmmoBox;"; @@ -3894,31 +2783,32 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""rhs_weap_M136_hedp"",""FirstAidKit""],[2,2,4]],[[""rhs_m136_hedp_mag"",""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[2,20,8,16,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[2]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue""],[16,6,10,10,4,4,4,4,12,4,4,4,4]],[[],[]],[[],[]]],false]"; }; }; }; - nAttributes=3; + nAttributes=1; }; }; - class Item43 + class Item48 { dataType="Object"; class PositionInfo { - position[]={4248.0615,21.338169,3969.1675}; - angles[]={0.045302324,0.4537856,0.10890055}; + position[]={4249.1157,21.364624,3994.2046}; + angles[]={0.0026520467,3.6889343,0.093063653}; }; side="Empty"; flags=4; class Attributes { + skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_15"; + name="btc_veh_7"; }; - id=241; - type="rhsusf_M1078A1P2_B_WD_fmtv_usarmy"; - atlOffset=-0.27951813; + id=237; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.023923874; class CustomAttributes { class Attribute0 @@ -3936,20 +2826,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit""],[2,4]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[10,2,2,2,4]],[[""ToolKit""],[1]],[[""rhsusf_falconii""],[1]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item44 + class Item49 { dataType="Object"; class PositionInfo { - position[]={4233.0352,21.638979,3999.2959}; - angles[]={0,3.3611374,0.0079936078}; + position[]={4235.5518,21.07881,4001.5029}; + angles[]={0.0026520467,3.5902662,0.010664274}; }; side="Empty"; flags=4; @@ -3957,11 +2847,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_8"; + name="btc_veh_2"; }; - id=244; - type="rhsusf_M1078A1P2_B_M2_WD_open_fmtv_usarmy"; - atlOffset=3.8146973e-006; + id=238; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.016025543; class CustomAttributes { class Attribute0 @@ -3979,20 +2869,20 @@ class Mission "STRING" }; }; - value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item45 + class Item50 { dataType="Object"; class PositionInfo { - position[]={4240.4561,21.697552,3995.7307}; - angles[]={6.2805324,3.3253233,0.016004669}; + position[]={4240.5957,21.096165,3998.999}; + angles[]={6.2698536,3.6248398,0.021328852}; }; side="Empty"; flags=4; @@ -4000,11 +2890,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_9"; + name="btc_veh_3"; }; - id=245; - type="rhsusf_M1078A1P2_B_M2_WD_open_fmtv_usarmy"; - atlOffset=3.8146973e-006; + id=239; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.056703568; class CustomAttributes { class Attribute0 @@ -4022,33 +2912,20 @@ class Mission "STRING" }; }; - value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item46 - { - dataType="Logic"; - class PositionInfo - { - position[]={4206.125,19.548992,4027.375}; - angles[]={6.2805109,0,6.2618566}; - }; - name="btc_hc_1"; - isPlayable=1; - id=246; - type="HeadlessClient_F"; - }; - class Item47 + class Item51 { dataType="Object"; class PositionInfo { - position[]={4230.8506,21.472488,3979.1021}; - angles[]={6.2352223,0.38933057,0.0080009829}; + position[]={4245.0928,21.241991,3996.6523}; + angles[]={6.2698536,3.6488891,0.037314966}; }; side="Empty"; flags=4; @@ -4056,10 +2933,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_6"; + name="btc_veh_4"; }; - id=247; - type="rhsusf_M1230_M2_usarmy_wd"; + id=240; + type="B_T_LSV_01_armed_F"; + atlOffset=-0.0080337524; class CustomAttributes { class Attribute0 @@ -4077,20 +2955,20 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit"",""Medikit""],[2,8,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_M433_HEDP"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[30,20,11,10,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[4]]],false]"; + value="[[[[""arifle_MX_F"",""FirstAidKit""],[2,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""16Rnd_9x21_Mag"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F""],[16,6,10,10,4,4,4,4,12,4,4,4,4,2]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item48 + class Item52 { dataType="Object"; class PositionInfo { - position[]={4236.7793,21.469738,3976.3633}; - angles[]={6.2325621,0.46773079,0.037316564}; + position[]={4265.3164,22.575714,3970.8711}; + angles[]={6.2725158,3.2976959,0.063913256}; }; side="Empty"; flags=4; @@ -4098,10 +2976,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_5"; + name="btc_veh_8"; }; - id=248; - type="rhsusf_M1230_M2_usarmy_wd"; + id=241; + type="B_T_Truck_01_transport_F"; + atlOffset=-0.049983978; class CustomAttributes { class Attribute0 @@ -4119,37 +2998,36 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4_carryhandle"",""FirstAidKit"",""Medikit""],[2,8,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhs_mag_M433_HEDP"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[30,20,11,10,4,2,4,2,2,4]],[[],[]],[[""rhsusf_falconii""],[4]]],false]"; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; }; }; }; nAttributes=1; }; }; - class Item49 + class Item53 { dataType="Object"; class PositionInfo { - position[]={4262.375,24.223763,3880.0532}; - angles[]={6.2166181,1.6537119,0.066715054}; + position[]={4250.3638,22.626858,3965.2366}; + angles[]={0.087773547,0.7540167,0.050624419}; }; side="Empty"; flags=4; class Attributes { - init="call{this setVariable ['bin_deconshower_disableAction',true];}"; - name="btc_bigShower"; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_15"; }; - id=264; - type="DeconShower_02_F"; - atlOffset=0.24474525; + id=243; + type="B_T_Truck_01_flatbed_F"; class CustomAttributes { class Attribute0 { - property="Decon_Shower_DisableUserActions"; - expression="if(_value)then{_this setVariable ['bin_deconshower_disableAction',true]};"; + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; class Value { class data @@ -4158,17 +3036,41 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; }; }; }; - class Attribute1 + nAttributes=1; + }; + }; + class Item54 + { + dataType="Object"; + class PositionInfo + { + position[]={4245.1362,21.351154,3968.5237}; + angles[]={0.029324362,0.6698088,0.12468291}; + }; + side="Empty"; + flags=4; + class Attributes + { + skill=0.60000002; + init="this setVariable [""btc_dont_delete"",true]"; + name="btc_veh_9"; + }; + id=244; + type="B_T_Truck_01_transport_F"; + atlOffset=-0.039049149; + class CustomAttributes + { + class Attribute0 { - property="Decon_Shower"; - expression="if(_value)then{[_this,5.4,4,2,true] spawn bin_fnc_deconShowerAnimLarge;};"; + property="ammoBox"; + expression="[_this,_value] call bis_fnc_initAmmoBox;"; class Value { class data @@ -4177,107 +3079,23 @@ class Mission { type[]= { - "BOOL" + "STRING" }; }; - value=0; + value="[[[[""FirstAidKit""],[10]],[[],[]],[[],[]],[[],[]]],false]"; }; }; }; - nAttributes=2; - }; - }; - class Item50 - { - dataType="Object"; - class PositionInfo - { - position[]={4262.125,20.75,3880.25}; - angles[]={6.2166171,1.6537119,0.06656827}; - }; - side="Empty"; - class Attributes - { - }; - id=265; - type="Tarp_01_Large_Black_F"; - atlOffset=0.27495766; - }; - class Item51 - { - dataType="Object"; - class PositionInfo - { - position[]={4261.4287,20.865213,3885.4128}; - angles[]={6.2698536,2.3518438,0.087774232}; - }; - side="Empty"; - flags=4; - class Attributes - { - }; - id=266; - type="RoadCone_L_F"; - atlOffset=0.00046539307; - }; - class Item52 - { - dataType="Object"; - class PositionInfo - { - position[]={4264.2207,21.110762,3885.376}; - angles[]={6.2378831,2.3518438,0.063913256}; - }; - side="Empty"; - flags=4; - class Attributes - { - }; - id=267; - type="RoadCone_L_F"; - atlOffset=0.00038909912; - }; - class Item53 - { - dataType="Object"; - class PositionInfo - { - position[]={4260.7344,20.633039,3874.8884}; - angles[]={6.2671871,2.3518438,0.018663859}; - }; - side="Empty"; - flags=4; - class Attributes - { - }; - id=268; - type="RoadCone_L_F"; - atlOffset=-0.0011043549; - }; - class Item54 - { - dataType="Object"; - class PositionInfo - { - position[]={4263.5259,20.689226,3874.708}; - angles[]={6.2618566,2.3518438,0.02399601}; - }; - side="Empty"; - flags=4; - class Attributes - { + nAttributes=1; }; - id=269; - type="RoadCone_L_F"; - atlOffset=0.001871109; }; class Item55 { dataType="Object"; class PositionInfo { - position[]={4244.0801,23.078144,3912.1277}; - angles[]={0.016004669,1.6752368,0.14041173}; + position[]={4249.3608,22.590536,3935.8831}; + angles[]={0.0053265258,1.7390807,0.029324362}; }; side="Empty"; flags=4; @@ -4285,11 +3103,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_16"; + name="btc_veh_13"; }; - id=270; - type="B_T_Truck_01_flatbed_F"; - atlOffset=0.0056362152; + id=245; + type="B_T_Truck_01_Repair_F"; + atlOffset=-0.01051712; class CustomAttributes { class Attribute0 @@ -4319,8 +3137,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4245.2197,22.181526,3918.3215}; - angles[]={0.0079936078,1.6752368,0.090425514}; + position[]={4248.1382,22.161657,3930.3477}; + angles[]={0.095706634,1.7390807,0.095706634}; }; side="Empty"; flags=4; @@ -4328,11 +3146,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_11"; + name="btc_veh_12"; }; - id=271; - type="B_T_Truck_01_ammo_F"; - atlOffset=-0.020999908; + id=246; + type="B_T_Truck_01_fuel_F"; + atlOffset=-0.039800644; class CustomAttributes { class Attribute0 @@ -4362,8 +3180,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4245.75,21.9953,3924.8745}; - angles[]={0.021327924,1.6752368,0.14563027}; + position[]={4246.8911,22.124918,3924.3018}; + angles[]={0.039977662,1.7390807,0.12730782}; }; side="Empty"; flags=4; @@ -4371,11 +3189,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_12"; + name="btc_veh_11"; }; - id=272; - type="B_T_Truck_01_fuel_F"; - atlOffset=-0.020999908; + id=247; + type="B_T_Truck_01_ammo_F"; + atlOffset=-0.077253342; class CustomAttributes { class Attribute0 @@ -4405,8 +3223,8 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4246.6548,22.44046,3930.334}; - angles[]={0.095713861,1.6752368,0.095713861}; + position[]={4246.1084,22.954084,3918.2583}; + angles[]={0.058599081,1.7390807,0.090419561}; }; side="Empty"; flags=4; @@ -4414,11 +3232,11 @@ class Mission { skill=0.60000002; init="this setVariable [""btc_dont_delete"",true]"; - name="btc_veh_13"; + name="btc_veh_16"; }; - id=273; - type="B_T_Truck_01_Repair_F"; - atlOffset=-0.020999908; + id=248; + type="B_T_Truck_01_flatbed_F"; + atlOffset=-0.10356903; class CustomAttributes { class Attribute0 @@ -4448,19 +3266,19 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4240.8691,22.042919,3906.6191}; - angles[]={0.018657569,1.6752368,0.095713861}; + position[]={4245.4639,22.709036,3910.6943}; + angles[]={0,1.7008055,0.034652505}; }; side="Empty"; flags=4; class Attributes { - init="call{this setVariable [""btc_dont_delete"",true];}"; + init="call{this setVariable [""btc_dont_delete"",true]}"; name="btc_veh_17"; }; - id=278; + id=249; type="B_T_Truck_01_medical_F"; - atlOffset=-0.010112762; + atlOffset=-0.013309479; class CustomAttributes { class Attribute0 @@ -4490,22 +3308,19 @@ class Mission dataType="Object"; class PositionInfo { - position[]={4243.2446,22.364164,3898.8474}; - angles[]={6.2698536,1.6556579,0.15084518}; + position[]={4245.9893,23.198921,3903.3372}; + angles[]={6.2805333,1.6641712,0.0026520467}; }; side="Empty"; flags=4; class Attributes { - init="call{this setVariable [""btc_dont_delete"",true];}"; + init="call{this setVariable [""btc_dont_delete"",true]}"; name="btc_veh_18"; - reportRemoteTargets=1; - receiveRemoteTargets=1; - reportOwnPosition=1; }; - id=279; - type="rhsusf_stryker_m1132_m2_wd"; - atlOffset=-0.022989273; + id=250; + type="B_T_APC_Tracked_01_CRV_F"; + atlOffset=-0.021877289; class CustomAttributes { class Attribute0 @@ -4523,7 +3338,7 @@ class Mission "STRING" }; }; - value="[[[[""rhs_weap_m4"",""rhs_weap_m240B"",""rhs_weap_M136"",""rhs_weap_M320"",""rhs_weap_M590_5RD"",""FirstAidKit"",""Medikit""],[2,1,2,1,1,10,1]],[[""rhs_mag_30Rnd_556x45_M855A1_Stanag"",""rhsusf_100Rnd_556x45_soft_pouch"",""rhsusf_100Rnd_762x51"",""rhsusf_5Rnd_00Buck"",""rhs_m136_mag"",""rhs_mag_M433_HEDP"",""rhs_mag_M441_HE"",""rhs_mag_m714_White"",""rhs_mag_m662_red"",""rhs_mag_m67"",""rhs_mag_m18_green"",""rhs_mag_m18_red"",""rhs_mag_an_m8hc""],[75,11,11,20,2,20,10,8,4,10,4,4,10]],[[""ToolKit"",""MineDetector""],[1,1]],[[""rhsusf_falconii""],[8]]],false]"; + value="[[[[""arifle_MX_F"",""arifle_MX_SW_F"",""launch_NLAW_F"",""FirstAidKit""],[2,1,1,10]],[[""30Rnd_65x39_caseless_mag"",""100Rnd_65x39_caseless_mag"",""HandGrenade"",""MiniGrenade"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""1Rnd_SmokeOrange_Grenade_shell"",""1Rnd_SmokeBlue_Grenade_shell"",""SmokeShell"",""SmokeShellGreen"",""SmokeShellOrange"",""SmokeShellBlue"",""NLAW_F"",""Titan_AT"",""Titan_AP"",""Titan_AA""],[24,12,6,6,6,3,3,3,3,8,8,8,8,5,2,2,2]],[[],[]],[[],[]]],false]"; }; }; }; From 3030d57e61ff1b9d10ff6994700711e2b8a8f362 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 15 Jan 2021 23:00:38 +0100 Subject: [PATCH 247/264] FIX: Boom doesn't call militia in some cases --- .../core/fnc/ied/checkLoop.sqf | 2 +- .../core/fnc/ied/fired_near.sqf | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf index b54719a33..808552602 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/checkLoop.sqf @@ -41,10 +41,10 @@ Author: speed _x > 5 } }) then { + [_wreck, _ied] call btc_fnc_ied_boom; if (0.5 < random 1) then { [getPos _wreck] call btc_fnc_rep_call_militia; }; - [_wreck, _ied] call btc_fnc_ied_boom; }; } forEach (_ied nearEntities ["allvehicles", 10]); } else { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/fired_near.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/fired_near.sqf index 552473a55..01833b429 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/fired_near.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/fired_near.sqf @@ -53,7 +53,12 @@ private _cfgAmmo = configFile >> "cfgAmmo"; [{!alive (_this select 2)}, { params ["_wreck", "_ied", "_bullet", "_detected_grenade"]; - if (alive _ied) then {[_wreck, _ied] call btc_fnc_ied_boom;}; + if (alive _ied) then { + [_wreck, _ied] call btc_fnc_ied_boom; + if (0.5 < random 1) then { + [getPos _wreck] call btc_fnc_rep_call_militia; + }; + }; { if (isNull _x) then { _detected_grenade deleteAt _forEachIndex; @@ -68,6 +73,9 @@ private _cfgAmmo = configFile >> "cfgAmmo"; if (_explosive || _caliber) then { if (alive _ied) then { [_wreck, _ied] call btc_fnc_ied_boom; + if (0.5 < random 1) then { + [getPos _wreck] call btc_fnc_rep_call_militia; + }; }; }; }; From f715e2606705914ea6fa7fa11732ceda7d9fef2a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 16 Jan 2021 19:21:58 +0100 Subject: [PATCH 248/264] Remove useless waypoint --- .../core/fnc/rep/call_militia.sqf | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/call_militia.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/call_militia.sqf index 98fd1c78d..9027f3163 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/call_militia.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/rep/call_militia.sqf @@ -41,7 +41,11 @@ if (btc_debug_log) then { }; if (_start_pos isEqualTo objNull) then { - _start_pos = [_pos, btc_city_all select {!(isNull _x) && !(_x getVariable ["active", false]) && _x getVariable ["type", ""] != "NameMarine"}, false] call btc_fnc_find_closecity; + _start_pos = [_pos, btc_city_all select { + !(isNull _x) && + !(_x getVariable ["active", false]) && + _x getVariable ["type", ""] != "NameMarine" + }, false] call btc_fnc_find_closecity; }; private _ratio = if (_pos distance _start_pos > 1000) then {0.2} else {0.6}; @@ -50,19 +54,14 @@ if (btc_debug_log) then { [format ["POS : %1 STARTPOS : %2 - RATIO = %3", _pos, _start_pos, _ratio], __FILE__, [false]] call btc_fnc_debug_message; }; -if ((random 1) > _ratio) then { - //MOT - private _group = [_start_pos, _pos, 1] call btc_fnc_mil_send; - [_group, _pos, -1, "UNLOAD", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; - [_group, _pos, -1, "SAD", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; +if ((random 1) > _ratio) then { //MOT + [_start_pos, _pos, 1] call btc_fnc_mil_send; if (btc_debug_log) then { [format ["MOT %1 POS %2", _group, _pos], __FILE__, [false]] call btc_fnc_debug_message; }; -} else { - //INF - private _group = [_start_pos, _pos, 0, "", "WEDGE"] call btc_fnc_mil_send; - [_group, _pos, -1, "SAD", nil, nil, nil, nil, nil, nil, 60] call CBA_fnc_addWaypoint; +} else { //INF + [_start_pos, _pos, 0, "", "WEDGE"] call btc_fnc_mil_send; if (btc_debug_log) then { [format ["INF %1", _group], __FILE__, [false]] call btc_fnc_debug_message; From 96739813a9ac9a8ca8e63003d4529c9012281c35 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Mon, 18 Jan 2021 00:00:49 +0100 Subject: [PATCH 249/264] Missing sharp shooter in sqm --- =BTC=co@30_Hearts_and_Minds.Altis/mission.sqm | 4 ++-- =BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm | 4 ++-- =BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm index 69e9fd0bd..585796bad 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission.sqm @@ -2224,7 +2224,7 @@ class Mission isPlayable=1; }; id=118; - type="B_Soldier_F"; + type="B_Sharpshooter_F"; }; }; class Attributes @@ -2254,7 +2254,7 @@ class Mission isPlayable=1; }; id=120; - type="B_Soldier_F"; + type="B_Sharpshooter_F"; }; }; class Attributes diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm index 4ee4ca019..be874a64c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Enoch.sqm @@ -2126,7 +2126,7 @@ class Mission isPlayable=1; }; id=118; - type="B_Soldier_F"; + type="B_Sharpshooter_F"; }; }; class Attributes @@ -2156,7 +2156,7 @@ class Mission isPlayable=1; }; id=120; - type="B_Soldier_F"; + type="B_Sharpshooter_F"; }; }; class Attributes diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm index f69d8bce8..a1dd09a81 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm +++ b/=BTC=co@30_Hearts_and_Minds.Altis/mission__Tanoa.sqm @@ -2134,7 +2134,7 @@ class Mission isPlayable=1; }; id=118; - type="B_Soldier_F"; + type="B_Sharpshooter_F"; }; }; class Attributes @@ -2164,7 +2164,7 @@ class Mission isPlayable=1; }; id=120; - type="B_Soldier_F"; + type="B_Sharpshooter_F"; }; }; class Attributes From 7397c946bb80f65202d744c0b78bc6796338920a Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 22 Jan 2021 15:34:15 +0100 Subject: [PATCH 250/264] FIX: BLacktemplars site is no more maintained --- =BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml index 1fd6a4b70..df63928f4 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml +++ b/=BTC=co@30_Hearts_and_Minds.Altis/stringtable.xml @@ -10,11 +10,11 @@ 心灵与智慧 - www.blacktemplars.altervista.org - www.blacktemplars.altervista.org - www.blacktemplars.altervista.org - www.blacktemplars.altervista.org - www.blacktemplars.altervista.org + github.com/Vdauphin/HeartsAndMinds + github.com/Vdauphin/HeartsAndMinds + github.com/Vdauphin/HeartsAndMinds + github.com/Vdauphin/HeartsAndMinds + github.com/Vdauphin/HeartsAndMinds From c45c8862c86fe943aab461ef5985035edaabcd76 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 22 Jan 2021 16:03:56 +0100 Subject: [PATCH 251/264] Update faction list --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 6274dddd3..e51d7d27a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -631,7 +631,7 @@ btc_lift_HUD_y = 0.848; btc_hq = objNull; // Get all faction from mod there are currently running //copyToClipboard str (["EN"] call btc_fnc_get_class); -private _allfaction = ["BLU_G_F","IND_E_F","IND_F","IND_G_F","IND_L_F","OPF_F","OPF_G_F","TBAN","00VTN_MILFOR_USMCW","01VTN_MILFOR_USMCD","05VTN_MILFOR_TIASF","AFR_ARMY","ARA_ARMY","ARL_ARMY","BLU_F","CEC_ARMY","CFP_B_AFGPOLICE","CFP_B_CAF","CFP_B_CZARMY_WDL","CFP_B_ILIDF","CFP_B_IQARMY","CFP_B_IQPOLICE","CFP_B_KEARMY","CFP_B_MLARMY","CFP_B_NAARMY","CFP_B_PESH","CFP_B_UGARMY","CFP_B_USRANGERS_WDL","CFP_B_USSEALS_DES","CFP_B_USSEALS_WDL","CFP_B_YPG","CFP_I_ALNUSRA","CFP_I_IS","CFP_I_SDREBELS","CFP_I_SDREBELSRF","CFP_I_SSARMY","CFP_I_TUAREG","CFP_I_WESTULTRA","CFP_O_ABUSAYYAF","CFP_O_ALQAEDA","CFP_O_ALSHABAAB","CFP_O_ANSARALLAH","CFP_O_BOKOHARAM","CFP_O_CFREBELS","CFP_O_HAMAS","CFP_O_HEZBOLLAH","CFP_O_IQARMY","CFP_O_IRARMY","CFP_O_IS","CFP_O_SDARMY","CFP_O_SDMILITIA","CFP_O_SOREBEL","CFP_O_SSREBELS","CFP_O_SYARMY","CFP_O_TBAN","CUP_B_CDF","CUP_B_CZ","CUP_B_GB","CUP_B_HIL","CUP_B_RNZN","CUP_B_US_ARMY","CUP_B_USMC","CUP_I_NAPA","CUP_I_RACS","CUP_I_UN","CUP_O_CHDKZ","CUP_O_RU","CUP_O_SLA","CUP_O_TK","CUP_O_TK_MILITIA","CUP_STATIC_SHIPS","CFP_B_CDF_SNW","CFP_B_DEARMY_WDL","CFP_B_GBARMY_WDL","CFP_B_USARMY_1991_DES","CFP_B_USARMY_1991_WDL","CFP_B_USARMY_2003_DES","CFP_B_USARMY_2003_WDL","CFP_B_USCIA","CFP_B_USMC_DES","CFP_I_WAGNER","CFP_I_WAGNER_WDL","CFP_I_WAGNER_WIN","CFP_O_RUMVD","CFP_O_WAGNER","CFP_O_WAGNER_WDL","CFP_O_WAGNER_WIN","CUP_B_GER","CUP_I_PMC_ION","CUP_I_TK_GUE","CFP_B_AFARMY","CFP_B_USARMY_WDL","CFP_O_CHDKZ_SNW","CFP_O_RUARMY_DES","OPF_R_F","BLU_CTRG_F","BLU_GEN_F","BLU_T_F","CFP_O_NKARMY","OPF_GEN_F","FAP_ARMY","FOW_HEER","FOW_IJA_NAS","FOW_UK_FAA","FOW_USA_NAVY","FOW_WAFFENSS","FOW_AUS","FOW_HI","FOW_IJA","FOW_LUFTWAFFE","FOW_UK","FOW_USA","FOW_USA_P","FOW_USMC","GAL_ARMY","GANGBLUE_ARMY","GANGRED_ARMY","GM_FC_DK","GM_FC_GC","GM_FC_GC_BGS","GM_FC_GE","GM_FC_GE_BGS","GM_FC_PL","IBR_ZETABORN_FACTION","ISC_ALNUSRA_I","ISC_IP_B","ISC_IS_I","ISC_IS_O","ISC_PESH_B","ISC_YPG_B","LM_OPCAN_URA","LIB_ACI","LIB_ARR","LIB_DAK","LIB_FFI","LIB_FSJ","LIB_GUER","LIB_MKHL","LIB_NAC","LIB_NKVD","LIB_RAAF","LIB_RBAF","LIB_RKKA","LIB_RKKA_W","LIB_UK_AB","LIB_UK_AB_W","LIB_UK_ARMY","LIB_UK_ARMY_W","LIB_UK_DR","LIB_US_101AB","LIB_US_82AB","LIB_US_ARMY","LIB_US_ARMY_W","LIB_US_RANGERS","LIB_WEHRMACHT","LIB_WEHRMACHT_W","LM_OPCAN_CGC","LM_OPCAN_CMA","LM_OPCAN_CPD","LM_OPCAN_FRI","LM_OPCAN_FRI_DES","LM_OPCAN_FRI_WDL","LM_OPCAN_KOS","LM_OPCAN_SU","LM_OPCAN_UNSC_ARMY","LM_OPCAN_UNSC_ARMY_D","LM_OPCAN_UNSC_ARMY_MIX","LM_OPCAN_UNSC_ARMY_RES","LM_OPCAN_UNSC_MC","LM_OPCAN_UNSC_MC_CEA","LM_OPCAN_UNSC_MC_D","LM_OPCAN_UNSC_MC_INF","LOP_AA","LOP_AFR","LOP_AFR_OPF","LOP_AM","LOP_AM_OPF","LOP_BH","LOP_CDF","LOP_CHDKZ","LOP_GRE","LOP_IA","LOP_IRA","LOP_IRAN","LOP_ISTS","LOP_ISTS_OPF","LOP_NAPA","LOP_NK","LOP_PESH","LOP_PESH_IND","LOP_PMC","LOP_RACS","LOP_SLA","LOP_SYR","LOP_TKA","LOP_TRK","LOP_UA","LOP_UKR","LOP_UN","LOP_US","LOP_UVF","BLU_W_F","MOL_ARMY","O_CAR","OPF_T_F","OPTRE_INS","OPTRE_PD","OPTRE_UNSC","OPTRE_FC_COVENANT","ISC_IA_B","RHS_FACTION_MSV","RHS_FACTION_RVA","RHS_FACTION_TV","RHS_FACTION_VDV","RHS_FACTION_VMF","RHS_FACTION_VPVO","RHS_FACTION_VV","RHS_FACTION_VVS","RHS_FACTION_VVS_C","ISC_SAA_O","RHSGREF_FACTION_CDF_AIR","RHSGREF_FACTION_CDF_AIR_B","RHSGREF_FACTION_CHDKZ","RHSSAF_FACTION_AIRFORCE","RHSSAF_FACTION_AIRFORCE_OPFOR","RHSSAF_FACTION_ARMY","RHSSAF_FACTION_ARMY_OPFOR","RHSSAF_FACTION_UN","RHS_FACTION_SOCOM","RHS_FACTION_USAF","RHS_FACTION_USARMY_D","RHS_FACTION_USMC_D","RHS_FACTION_USN","RHSGREF_FACTION_CDF_GROUND","RHSGREF_FACTION_CDF_GROUND_B","RHSGREF_FACTION_NATIONALIST","RHSGREF_FACTION_TLA","RHSGREF_FACTION_UN","SG_STURM","SG_STURMPANZER","IND_C_F","RHS_FACTION_USARMY_WD","RHS_FACTION_USMC_WD","RHSGREF_FACTION_CDF_NG","RHSGREF_FACTION_CDF_NG_B","RHSGREF_FACTION_CHDKZ_G","RHSGREF_FACTION_HIDF","UK3CB_AAF_B","UK3CB_AAF_I","UK3CB_AAF_O","UK3CB_ADA_B","UK3CB_ADA_I","UK3CB_ADA_O","UK3CB_ADC_B","UK3CB_ADC_I","UK3CB_ADC_O","UK3CB_ADE_I","UK3CB_ADE_O","UK3CB_ADG_B","UK3CB_ADG_I","UK3CB_ADG_O","UK3CB_ADM_B","UK3CB_ADM_I","UK3CB_ADM_O","UK3CB_ADP_B","UK3CB_ADP_I","UK3CB_ADP_O","UK3CB_ADR_B","UK3CB_ADR_I","UK3CB_ADR_O","UK3CB_ANA_B","UK3CB_ANP_B","UK3CB_CCM_B","UK3CB_CCM_I","UK3CB_CCM_O","UK3CB_CHC_B","UK3CB_CHC_I","UK3CB_CHC_O","UK3CB_CPD_B","UK3CB_CPD_I","UK3CB_CPD_O","UK3CB_CW_SOV_O_EARLY","UK3CB_CW_SOV_O_LATE","UK3CB_CW_US_B_EARLY","UK3CB_CW_US_B_LATE","UK3CB_TKA_B","UK3CB_TKA_I","UK3CB_TKA_O","UK3CB_TKC_B","UK3CB_TKC_I","UK3CB_TKC_O","UK3CB_TKM_B","UK3CB_TKM_I","UK3CB_TKM_O","UK3CB_TKP_B","UK3CB_TKP_I","UK3CB_TKP_O","UK3CB_UN_B","UK3CB_UN_I","UNSUNG_AUS","UNSUNG_E","UNSUNG_EV","UNSUNG_G","UNSUNG_NZ","UNSUNG_ROK","UNSUNG_W","00VTN_MILFOR_MIW_EMR","00VTN_MILITIA_RU","01VTN_INSURGENTS_RU","01VTN_MILFOR_MIW","02VTN_MILFOR_RC","03VTN_INSURGENTS_ISIL","03VTN_MILFOR_SPPU","06VTN_MILFOR_VVS","07VTN_MILFOR_TNG"]; //All factions +private _allfaction = ["BLU_G_F","IND_E_F","IND_F","IND_G_F","IND_L_F","OPF_F","OPF_G_F","TBAN","00VTN_MILFOR_USMCW","01VTN_MILFOR_USMCD","05VTN_MILFOR_TIASF","AFR_ARMY","ARA_ARMY","ARL_ARMY","BLU_F","CEC_ARMY","CFP_B_AFGPOLICE","CFP_B_CAF","CFP_B_CZARMY_WDL","CFP_B_ILIDF","CFP_B_IQARMY","CFP_B_IQPOLICE","CFP_B_KEARMY","CFP_B_MLARMY","CFP_B_NAARMY","CFP_B_PESH","CFP_B_UGARMY","CFP_B_USRANGERS_WDL","CFP_B_USSEALS_DES","CFP_B_USSEALS_WDL","CFP_B_YPG","CFP_I_ALNUSRA","CFP_I_IS","CFP_I_SDREBELS","CFP_I_SDREBELSRF","CFP_I_SSARMY","CFP_I_TUAREG","CFP_I_WESTULTRA","CFP_O_ABUSAYYAF","CFP_O_ALQAEDA","CFP_O_ALSHABAAB","CFP_O_ANSARALLAH","CFP_O_BOKOHARAM","CFP_O_CFREBELS","CFP_O_HAMAS","CFP_O_HEZBOLLAH","CFP_O_IQARMY","CFP_O_IRARMY","CFP_O_IS","CFP_O_SDARMY","CFP_O_SDMILITIA","CFP_O_SOREBEL","CFP_O_SSREBELS","CFP_O_SYARMY","CFP_O_TBAN","CUP_B_CDF","CUP_B_CZ","CUP_B_GB","CUP_B_HIL","CUP_B_RNZN","CUP_B_US_ARMY","CUP_B_USMC","CUP_I_NAPA","CUP_I_RACS","CUP_I_UN","CUP_O_CHDKZ","CUP_O_RU","CUP_O_SLA","CUP_O_TK","CUP_O_TK_MILITIA","CUP_STATIC_SHIPS","CFP_B_CDF_SNW","CFP_B_DEARMY_WDL","CFP_B_GBARMY_WDL","CFP_B_USARMY_1991_DES","CFP_B_USARMY_1991_WDL","CFP_B_USARMY_2003_DES","CFP_B_USARMY_2003_WDL","CFP_B_USCIA","CFP_B_USMC_DES","CFP_I_WAGNER","CFP_I_WAGNER_WDL","CFP_I_WAGNER_WIN","CFP_O_RUARMY_DES","CFP_O_RUMVD","CFP_O_WAGNER","CFP_O_WAGNER_WDL","CFP_O_WAGNER_WIN","CUP_B_GER","CUP_I_PMC_ION","CUP_I_TK_GUE","CFP_B_AFARMY","CFP_B_USARMY_WDL","CFP_O_CHDKZ_SNW","OPF_R_F","BLU_CTRG_F","BLU_GEN_F","BLU_T_F","CFP_O_NKARMY","OPF_GEN_F","FAP_ARMY","FOW_HEER","FOW_IJA_NAS","FOW_UK_FAA","FOW_USA_NAVY","FOW_WAFFENSS","FOW_AUS","FOW_HI","FOW_IJA","FOW_LUFTWAFFE","FOW_UK","FOW_USA","FOW_USA_P","FOW_USMC","GAL_ARMY","GANGBLUE_ARMY","GANGRED_ARMY","GM_FC_DK","GM_FC_GC","GM_FC_GC_BGS","GM_FC_GE","GM_FC_GE_BGS","GM_FC_PL","IBR_ZETABORN_FACTION","ISC_ALNUSRA_I","ISC_IP_B","ISC_IS_I","ISC_IS_O","ISC_PESH_B","ISC_YPG_B","LM_OPCAN_URA","LIB_ACI","LIB_ARR","LIB_DAK","LIB_FFI","LIB_FSJ","LIB_GUER","LIB_MKHL","LIB_NAC","LIB_NKVD","LIB_RAAF","LIB_RBAF","LIB_RKKA","LIB_RKKA_W","LIB_UK_AB","LIB_UK_AB_W","LIB_UK_ARMY","LIB_UK_ARMY_W","LIB_UK_DR","LIB_US_101AB","LIB_US_82AB","LIB_US_ARMY","LIB_US_ARMY_W","LIB_US_RANGERS","LIB_WEHRMACHT","LIB_WEHRMACHT_W","LM_OPCAN_CGC","LM_OPCAN_CMA","LM_OPCAN_CPD","LM_OPCAN_FRI","LM_OPCAN_FRI_DES","LM_OPCAN_FRI_WDL","LM_OPCAN_KOS","LM_OPCAN_SU","LM_OPCAN_UNSC_ARMY","LM_OPCAN_UNSC_ARMY_D","LM_OPCAN_UNSC_ARMY_MIX","LM_OPCAN_UNSC_ARMY_RES","LM_OPCAN_UNSC_MC","LM_OPCAN_UNSC_MC_CEA","LM_OPCAN_UNSC_MC_D","LM_OPCAN_UNSC_MC_INF","LOP_AA","LOP_AFR","LOP_AFR_OPF","LOP_AM","LOP_AM_OPF","LOP_BH","LOP_CDF","LOP_CHDKZ","LOP_GRE","LOP_IA","LOP_IRA","LOP_IRAN","LOP_ISTS","LOP_ISTS_OPF","LOP_NAPA","LOP_NK","LOP_PESH","LOP_PESH_IND","LOP_PMC","LOP_RACS","LOP_SLA","LOP_SYR","LOP_TKA","LOP_TRK","LOP_UA","LOP_UKR","LOP_UN","LOP_US","LOP_UVF","BLU_W_F","MOL_ARMY","O_CAR","OPF_T_F","OPTRE_INS","OPTRE_PD","OPTRE_UNSC","OPTRE_FC_COVENANT","ISC_IA_B","RHS_FACTION_MSV","RHS_FACTION_RVA","RHS_FACTION_TV","RHS_FACTION_VDV","RHS_FACTION_VMF","RHS_FACTION_VPVO","RHS_FACTION_VV","RHS_FACTION_VVS","RHS_FACTION_VVS_C","ISC_SAA_O","RHSGREF_FACTION_CDF_AIR","RHSGREF_FACTION_CDF_AIR_B","RHSGREF_FACTION_CHDKZ","RHSSAF_FACTION_AIRFORCE","RHSSAF_FACTION_AIRFORCE_OPFOR","RHSSAF_FACTION_ARMY","RHSSAF_FACTION_ARMY_OPFOR","RHSSAF_FACTION_UN","RHS_FACTION_SOCOM","RHS_FACTION_USAF","RHS_FACTION_USARMY_D","RHS_FACTION_USMC_D","RHS_FACTION_USN","RHSGREF_FACTION_CDF_GROUND","RHSGREF_FACTION_CDF_GROUND_B","RHSGREF_FACTION_NATIONALIST","RHSGREF_FACTION_TLA","RHSGREF_FACTION_TLA_G","RHSGREF_FACTION_UN","SG_STURM","SG_STURMPANZER","IND_C_F","RHS_FACTION_USARMY_WD","RHS_FACTION_USMC_WD","RHSGREF_FACTION_CDF_NG","RHSGREF_FACTION_CDF_NG_B","RHSGREF_FACTION_CHDKZ_G","RHSGREF_FACTION_HIDF","UK3CB_AAF_B","UK3CB_AAF_I","UK3CB_AAF_O","UK3CB_ADA_B","UK3CB_ADA_I","UK3CB_ADA_O","UK3CB_ADC_B","UK3CB_ADC_I","UK3CB_ADC_O","UK3CB_ADE_I","UK3CB_ADE_O","UK3CB_ADG_B","UK3CB_ADG_I","UK3CB_ADG_O","UK3CB_ADM_B","UK3CB_ADM_I","UK3CB_ADM_O","UK3CB_ADP_B","UK3CB_ADP_I","UK3CB_ADP_O","UK3CB_ADR_B","UK3CB_ADR_I","UK3CB_ADR_O","UK3CB_ANA_B","UK3CB_ANP_B","UK3CB_CCM_B","UK3CB_CCM_I","UK3CB_CCM_O","UK3CB_CHC_B","UK3CB_CHC_I","UK3CB_CHC_O","UK3CB_CPD_B","UK3CB_CPD_I","UK3CB_CPD_O","UK3CB_CW_SOV_O_EARLY","UK3CB_CW_SOV_O_LATE","UK3CB_CW_US_B_EARLY","UK3CB_CW_US_B_LATE","UK3CB_TKA_B","UK3CB_TKA_I","UK3CB_TKA_O","UK3CB_TKC_B","UK3CB_TKC_I","UK3CB_TKC_O","UK3CB_TKM_B","UK3CB_TKM_I","UK3CB_TKM_O","UK3CB_TKP_B","UK3CB_TKP_I","UK3CB_TKP_O","UK3CB_UN_B","UK3CB_UN_I","UNSUNG_AUS","UNSUNG_E","UNSUNG_EV","UNSUNG_G","UNSUNG_NZ","UNSUNG_ROK","UNSUNG_W","00VTN_MILFOR_MIW_EMR","00VTN_MILITIA_RU","01VTN_INSURGENTS_RU","01VTN_MILFOR_MIW","02VTN_MILFOR_RC","03VTN_INSURGENTS_ISIL","03VTN_MILFOR_SPPU","07VTN_MILFOR_TNG"]; //All factions _p_en = _allfaction select _p_en; //Select faction selected from mission parameter _allclasse = [[_p_en], _p_en_AA, _p_en_tank] call btc_fnc_mil_class; //Create classes from factions, you can combine factions like that: [[_p_en , "IND_F"], _p_en_AA, _p_en_tank] call btc_fnc_mil_class; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index 49ac63fa8..149627130 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -80,7 +80,7 @@ class Params { class btc_p_en { // Enemy type: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_FAC_ETYPE"]); values[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314}; - texts[]={"0 - Bohemia Interactive: 2035 FIA (Side: WEST)","1 - Bohemia Interactive: LDF (Side: GUER)","2 - Bohemia Interactive: 2035 AAF (Side: GUER)","3 - Bohemia Interactive: 2035 FIA (Side: GUER)","4 - Bohemia Interactive: Pillards (Side: GUER)","5 - Bohemia Interactive: 2035 CSAT (Side: EAST)","6 - Bohemia Interactive: 2035 FIA (Side: EAST)","7 - EricJ: Taliban (Side: EAST)","8 -00VTN Bohemia Interactive: U.S.M.C. (MARPAT Woodland) (Side: WEST)","9 -01VTN Bohemia Interactive: U.S.M.C. (MARPAT Desert) (Side: WEST)","10 -05VTN Bohemia Interactive: TIA-SF (Side: WEST)","11 -AFR BIS/IceBreakr: Afrenian Army (Side: WEST)","12 -ARA Bohemia Interactive: Abramian Rebel Alliance (Side: WEST)","13 -ARL BIS/IceBreakr: ARL Lingor Rebels (Side: EAST)","14 -BLU Community Upgrade Project and ATLAS Mod: 2035 NATO (Side: WEST)","15 -CEC HcPookie: Cecanian Army (Side: EAST)","16 -CFP Drew: Afghan Police (Side: WEST)","17 -CFP CFP: Chadian Armed Forces (Side: WEST)","18 -CFP Tupolov: Army of the Czech Rep. (Jungle / Woodland) (Side: WEST)","19 -CFP CFP: Israeli Defense Force (Side: WEST)","20 -CFP Drew: Iraqi Army (Side: WEST)","21 -CFP Drew: Iraqi Police (Side: WEST)","22 -CFP Drew: Kenyan Defense Force (Side: WEST)","23 -CFP Drew: Malian Government Forces (Side: WEST)","24 -CFP CFP: Nigerian Army (Side: WEST)","25 -CFP Drew: Peshmerga (Side: WEST)","26 -CFP Drew: Uganda People's Defense Force (Side: WEST)","27 -CFP Drew: US 75th Rangers (Jungle/Woodland) (Side: WEST)","28 -CFP Drew: US Navy Seals (Arid / Desert) (Side: WEST)","29 -CFP Drew: US Navy Seals (Jungle / Woodland) (Side: WEST)","30 -CFP Drew: YPG (Side: WEST)","31 -CFP Drew: al-Nusra Front (Side: GUER)","32 -CFP Drew: Islamic State (Side: GUER)","33 -CFP Drew: Sudan People's Liberation Movement North (Side: GUER)","34 -CFP Drew: Sudan Revolutionary Front (Side: GUER)","35 -CFP Drew: South Sudan People's Defense Force (Side: GUER)","36 -CFP Drew: Tuareg Rebels (Side: GUER)","37 -CFP Tupolov: Western Ultranationalists (Side: GUER)","38 -CFP Drew: Abu Sayyaf Group (Side: EAST)","39 -CFP Drew: Al Qaeda (Side: EAST)","40 -CFP Drew: Al-Shabaab (Side: EAST)","41 -CFP Tupolov: Ansar Allah (Houthis) (Side: EAST)","42 -CFP Drew: Boko Haram (Side: EAST)","43 -CFP Drew: Central African Rebels (Side: EAST)","44 -CFP Drew: Hamas Al Qassam Brigades (Side: EAST)","45 -CFP Drew: Hezbollah (Side: EAST)","46 -CFP CFP: Iraqi Army (Hussein Regime) (Side: EAST)","47 -CFP Drew: Islamic Republic of Iran Army (Side: EAST)","48 -CFP Drew: Islamic State (Side: EAST)","49 -CFP Drew: Sudanese Armed Forces (Side: EAST)","50 -CFP CFP: Sudan Rapid Support Forces / Janjaweed (Side: EAST)","51 -CFP Drew: Somali Rebels (Side: EAST)","52 -CFP Drew: Sudan People's Liberation Movement In Opposition (Side: EAST)","53 -CFP Drew: Syrian Arab Army (Side: EAST)","54 -CFP Drew: Taliban Insurgents (Side: EAST)","55 -CUP Community Upgrade Project: Chernarus Defense Forces (Side: WEST)","56 -CUP Community Upgrade Project: Army of the Czech Rep. (Arid / Desert) (Side: WEST)","57 -CUP Community Upgrade Project: British Army (Arid / Desert) (Side: WEST)","58 -CUP Community Upgrade Project: Horizon Islands Legion (Side: WEST)","59 -CUP Community Upgrade Project: Royal New Zealand Navy (Side: WEST)","60 -CUP Community Upgrade Project: US Army (Arid / Desert) (Side: WEST)","61 -CUP Community Upgrade Project: US Marine Corps (Jungle / Woodland) (Side: WEST)","62 -CUP Community Upgrade Project: National Party of Chernarus (Side: GUER)","63 -CUP Community Upgrade Project: Royal Army Corps of Sahrani (Side: GUER)","64 -CUP Community Upgrade Project: United Nations (Side: GUER)","65 -CUP Community Upgrade Project: Chernarussian Movement of the Red Star (Side: EAST)","66 -CUP Community Upgrade Project: Russian Ground Forces (Jungle / Woodland) (Side: EAST)","67 -CUP Community Upgrade Project: Sahrani Liberation Army (Side: EAST)","68 -CUP Community Upgrade Project: Takistani Army (Side: EAST)","69 -CUP Community Upgrade Project: Takistani Militia (Side: EAST)","70 -CUP Community Upgrade Project: CUP Static Ships (Side: WEST)","71 -CUP_Units Drew: Chernarus Defense Forces [Winter] (Side: WEST)","72 -CUP_Units Community Upgrade Project: Bundeswehr (Jungle / Woodland) (Side: WEST)","73 -CUP_Units Community Upgrade Project: British Army (Jungle / Woodland) (Side: WEST)","74 -CUP_Units Drew: US Army 1991 [Arid/Desert] (Side: WEST)","75 -CUP_Units Drew: US Army 1991 [Woodland] (Side: WEST)","76 -CUP_Units Drew: US Army 2003 [Arid/Desert] (Side: WEST)","77 -CUP_Units Drew: US Army 2003 [Woodland] (Side: WEST)","78 -CUP_Units Tupolov: US CIA (Middle East) (Side: WEST)","79 -CUP_Units Tupolov: US Marine Corps (Arid / Desert) (Side: WEST)","80 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: GUER)","81 -CUP_Units Drew: PMC Wagner (Woodland) (Side: GUER)","82 -CUP_Units Drew: PMC Wagner (Winter) (Side: GUER)","83 -CUP_Units Tupolov: Russian National Guard (Side: EAST)","84 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: EAST)","85 -CUP_Units Drew: PMC Wagner (Woodland) (Side: EAST)","86 -CUP_Units Drew: PMC Wagner (Winter) (Side: EAST)","87 -CUP_Units Community Upgrade Project: Bundeswehr (Arid / Desert) (Side: WEST)","88 -CUP_Units Community Upgrade Project: ION PMC (Side: GUER)","89 -CUP_Units Community Upgrade Project: Takistani Locals (Side: GUER)","90 -CUP_Vehicles Drew: Afghan Army (Side: WEST)","91 -CUP_Vehicles Community Upgrade Project: US Army (Jungle / Woodland) (Side: WEST)","92 -CUP_Vehicles Drew: Chernarussian Movement of the Red Star [Winter] (Side: EAST)","93 -CUP_Vehicles Tupolov: Russian Ground Forces (Arid / Desert) (Side: EAST)","94 -Enoch Bohemia Interactive: Spetsnaz (Side: EAST)","95 -Expansion Bohemia Interactive: 2035 CTRG (Side: WEST)","96 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: WEST)","97 -Expansion Bohemia Interactive: 2035 NATO (Pacific) (Side: WEST)","98 -Expansion Drew: Korean People's Army (Side: EAST)","99 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: EAST)","100 -FAP nzdfcrash/icebreakr: Fapovian Army (Side: EAST)","101 -FOW Bohemia Interactive: [DE] Heer (Side: WEST)","102 -FOW Bohemia Interactive: [JP] Navy Air Service (Side: WEST)","103 -FOW Bohemia Interactive: [UK] Fleet Air Arm (Side: GUER)","104 -FOW Bohemia Interactive: [US] Navy (Side: GUER)","105 -FOW FOW Team: [DE] Waffen-SS (Side: WEST)","106 -fow_mod Bohemia Interactive: [AUS] Army (Pacific) (Side: GUER)","107 -fow_mod Bohemia Interactive: [HI] Army (Side: GUER)","108 -fow_mod FOW team: [JP] Imperial Army (Side: WEST)","109 -fow_mod Bohemia Interactive: [DE] Luftwaffe (Side: WEST)","110 -fow_mod Bohemia Interactive: [UK] Army (Side: GUER)","111 -fow_mod FOW team: [US] Army (Europe) (Side: GUER)","112 -fow_mod Bohemia Interactive: [US] Army (Pacific) (Side: GUER)","113 -fow_mod FOW team: [US] Marines Corps (Side: GUER)","114 -GAL HcPookie: GAL (Government Army of Lingor) (Side: WEST)","115 -GANGBLUE BIS/IceBreakr: Blue Gang (Side: WEST)","116 -GANGRED BIS/IceBreakr: Red Gang (Side: EAST)","117 -gm Global Mobilization: Denmark (Side: WEST)","118 -gm Global Mobilization: East Germany (Side: EAST)","119 -gm Global Mobilization: East Germany (Borderguards) (Side: EAST)","120 -gm Global Mobilization: West Germany (Side: WEST)","121 -gm Global Mobilization: West Germany (Borderguards) (Side: WEST)","122 -gm Global Mobilization: Poland (Side: EAST)","123 -IBR Bohemia Interactive: Alienz (Side: GUER)","124 -ISC Bohemia Interactive: [ISC] al-Nusra Front (Side: GUER)","125 -ISC Bohemia Interactive: [ISC] Iraqi Police (Side: WEST)","126 -ISC Bohemia Interactive: [ISC] Islamic State (Side: GUER)","127 -ISC Bohemia Interactive: [ISC] Islamic State (Side: EAST)","128 -ISC Bohemia Interactive: [ISC] Peshmerga (Side: WEST)","129 -ISC Bohemia Interactive: [ISC] YPG (Side: WEST)","130 -Jets Bravo Zero One Studios: [OPCAN] United Rebel Army (Side: EAST)","131 -LIB AWAR: ACI (Side: GUER)","132 -LIB AWAR & Lennard: ARR (Side: WEST)","133 -LIB Lennard: Deutsches Afrikakorps (Side: WEST)","134 -LIB Reyhard & Joarius: FFI (Side: GUER)","135 -LIB IFA3 Team: Fallschirmjäger (Side: WEST)","136 -LIB AWAR: Armia Krajowa (Polonais) (Side: GUER)","137 -LIB AWAR & Lennard: MKHL (Side: WEST)","138 -LIB Lennard: US North African Corps (Side: GUER)","139 -LIB Lennard: NKVD (Side: EAST)","140 -LIB AWAR: RAAF (Side: GUER)","141 -LIB AWAR & Lennard: RBAF (Side: WEST)","142 -LIB AWAR: Red Army (Side: EAST)","143 -LIB AWAR & Lennard: [Winter] Red Army (Side: EAST)","144 -LIB IFA3 Team: UK Airborne (Side: GUER)","145 -LIB El Tyranos: [Winter] UK Airborne (Side: GUER)","146 -LIB IFA3 Team: UK Army (Side: GUER)","147 -LIB El Tyranos: [Winter] UK Army (Side: GUER)","148 -LIB IFA3 Team: UK Desert Rats (Side: GUER)","149 -LIB El Tyranos: 101st Airborne Division (Side: GUER)","150 -LIB El Tyranos: 82nd Airborne Division (Side: GUER)","151 -LIB IFA3 team: US Army (Side: GUER)","152 -LIB El Tyranos: [Winter] US Army (Side: GUER)","153 -LIB Lennard: US 2nd Ranger Battalion (Side: GUER)","154 -LIB AWAR: Wehrmacht (Side: WEST)","155 -LIB AWAR & Lennard: [Winter] Wehrmacht (Side: WEST)","156 -LM J.Burgess: [OPCAN] Colonial Guard Corps (Woodland) (Side: WEST)","157 -LM J.Burgess: [OPCAN] Colonial Military Authority (Side: GUER)","158 -LM J.Burgess: [OPCAN] Colonial Police Force (Side: GUER)","159 -LM J.Burgess: [OPCAN] Fridens (Side: EAST)","160 -LM J.Burgess: [OPCAN] Fridens (Desert) (Side: EAST)","161 -LM J.Burgess: [OPCAN] Fridens (Woodland) (Side: EAST)","162 -LM J.Burgess: [OPCAN] Koslovics (Side: EAST)","163 -LM J.Burgess: [OPCAN] Secessionist Union (Side: EAST)","164 -LM J.Burgess: [OPCAN] UNSC Army (Woodland) (Side: WEST)","165 -LM J.Burgess: [OPCAN] UNSC Army (Desert) (Side: WEST)","166 -LM J.Burgess: [OPCAN] UNSC Army (Mixed) (Side: WEST)","167 -LM J.Burgess: [OPCAN] UNSC Army Peace Corps (Side: WEST)","168 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Woodland) (Side: WEST)","169 -LM J.Burgess: [OPCAN] UNSC Marine Corps (CE:A) (Side: WEST)","170 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Desert) (Side: WEST)","171 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Infinite) (Side: WEST)","172 -LOP_LeightsOPFOR Project OPFOR: Afghan National Army and Police (Side: WEST)","173 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: GUER)","174 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: EAST)","175 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: GUER)","176 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: EAST)","177 -LOP_LeightsOPFOR Project OPFOR: Boko Haram (Side: EAST)","178 -LOP_LeightsOPFOR Project OPFOR: CDF (Project OPFOR) (Side: WEST)","179 -LOP_LeightsOPFOR Project OPFOR: ChDKZ (Project OPFOR) (Side: EAST)","180 -LOP_LeightsOPFOR Project OPFOR: Hellenic Armed Forces (Side: WEST)","181 -LOP_LeightsOPFOR Project OPFOR: Iraqi Armed Forces (Side: WEST)","182 -LOP_LeightsOPFOR Project OPFOR: Irish Republican Army (Side: EAST)","183 -LOP_LeightsOPFOR Project OPFOR: Iranian Armed Forces (Side: GUER)","184 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: GUER)","185 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: EAST)","186 -LOP_LeightsOPFOR Project OPFOR: Chernarussian National Insurgents (Side: GUER)","187 -LOP_LeightsOPFOR Project OPFOR: Korean People's Army (Side: EAST)","188 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: WEST)","189 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: GUER)","190 -LOP_LeightsOPFOR Project OPFOR: Private Military Company (Side: GUER)","191 -LOP_LeightsOPFOR Project OPFOR: Royal Army Corps of Sahrani (Side: GUER)","192 -LOP_LeightsOPFOR Project OPFOR: Sahrani Liberation Army (Side: EAST)","193 -LOP_LeightsOPFOR Project OPFOR: Syrian Armed Forces (Side: EAST)","194 -LOP_LeightsOPFOR Project OPFOR: Takistani Armed Forces (Side: EAST)","195 -LOP_LeightsOPFOR Project OPFOR: Turkish Armed Forces (Side: GUER)","196 -LOP_LeightsOPFOR Project OPFOR: Ultranationalists (Side: GUER)","197 -LOP_LeightsOPFOR Project OPFOR: Ukrainian Armed Forces (Side: GUER)","198 -LOP_LeightsOPFOR Project OPFOR: United Nations (Side: GUER)","199 -LOP_LeightsOPFOR Project OPFOR: United Armed Forces of Novorossiya (Side: EAST)","200 -LOP_LeightsOPFOR Project OPFOR: Ulster Volunteer Force (Side: GUER)","201 -Mark Bohemia Interactive: OTAN (forêt) (Side: WEST)","202 -MOL HcPookie: Molatian Army (Side: EAST)","203 -O jarrad96: Central African Rebels (Side: EAST)","204 -OPF Community Upgrade Project: 2035 CSAT (Pacific) (Side: EAST)","205 -OPTRE Article 2 Studios: Insurrectionists (Side: EAST)","206 -OPTRE Article 2 Studios: Colonial Police (Side: GUER)","207 -OPTRE Article 2 Studios: UNSCDF (Side: WEST)","208 -OPTRE_FC Article 2 Studios: Covenant (Side: EAST)","209 -RHS_AFRF Red Hammer Studios: [ISC] Iraqi Army (Side: WEST)","210 -RHS_AFRF Red Hammer Studios: Russia (MSV) (Side: EAST)","211 -RHS_AFRF Red Hammer Studios: Russia (RVA) (Side: EAST)","212 -RHS_AFRF Red Hammer Studios: Russia (TV) (Side: EAST)","213 -RHS_AFRF Red Hammer Studios: Russia (VDV) (Side: EAST)","214 -RHS_AFRF Red Hammer Studios: Russia (VMF) (Side: EAST)","215 -RHS_AFRF RHS: Russia (VPVO) (Side: EAST)","216 -RHS_AFRF Red Hammer Studios: Russia (VV) (Side: EAST)","217 -RHS_AFRF Red Hammer Studios: Russia (VVS - Grey) (Side: EAST)","218 -RHS_AFRF Red Hammer Studios: Russia (VVS - Camo) (Side: EAST)","219 -RHS_GREF Red Hammer Studios: [ISC] Syrian Arab Army (Side: EAST)","220 -RHS_GREF RHS (A2 port): CDF (Air Forces) (Side: GUER)","221 -RHS_GREF Red Hammer Studios: CDF (Air Forces) (Side: WEST)","222 -RHS_GREF Red Hammer Studios: ChDKZ (Side: EAST)","223 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: GUER)","224 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: EAST)","225 -RHS_SAF Red Hammer Studios: SAF (KOV) (Side: GUER)","226 -RHS_SAF RHS (A2 port): SAF (KOV) (Side: EAST)","227 -RHS_SAF RHS (A2 port): SAF (Casques Bleus) (Side: GUER)","228 -RHS_USAF Red Hammer Studios: USA (SOCOM) (Side: WEST)","229 -RHS_USAF Red Hammer Studios: USA (USAF) (Side: WEST)","230 -RHS_USAF Red Hammer Studios: USA (Army - D) (Side: WEST)","231 -RHS_USAF Red Hammer Studios: USA (USMC - D) (Side: WEST)","232 -RHS_USAF Red Hammer Studios: USA (Navy) (Side: WEST)","233 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: GUER)","234 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: WEST)","235 -RHSGREF Red Hammer Studios: NAPA (Side: GUER)","236 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: EAST)","237 -RHSGREF Red Hammer Studios: CDF (UN) (Side: GUER)","238 -SG Stagler: Sturmtroopers (Side: WEST)","239 -SG Stagler: Tank Sturmtroopers (Side: WEST)","240 -Tank Bohemia Interactive: 2035 Syndikat (Side: GUER)","241 -UK3CB_Factions www.3commandobrigade.com: USA (Army - W) (Side: WEST)","242 -UK3CB_Factions www.3commandobrigade.com: USA (USMC - W) (Side: WEST)","243 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: GUER)","244 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: WEST)","245 -UK3CB_Factions www.3commandobrigade.com: ChDKZ (Side: GUER)","246 -UK3CB_Factions www.3commandobrigade.com: Horizon Islands Defence Force (Side: WEST)","247 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: WEST)","248 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: GUER)","249 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: EAST)","250 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: WEST)","251 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: GUER)","252 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: EAST)","253 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: WEST)","254 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: GUER)","255 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: EAST)","256 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: GUER)","257 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: EAST)","258 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: WEST)","259 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: GUER)","260 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: EAST)","261 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: WEST)","262 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: GUER)","263 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: EAST)","264 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: WEST)","265 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: GUER)","266 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: EAST)","267 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: WEST)","268 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: GUER)","269 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: EAST)","270 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Army (Side: WEST)","271 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Police (Side: WEST)","272 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Local Defence Volunteers (Side: WEST)","273 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Nationalist Militia (Side: GUER)","274 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Communist Militia (Side: EAST)","275 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: WEST)","276 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: GUER)","277 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: EAST)","278 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: WEST)","279 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: GUER)","280 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: EAST)","281 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Early (Side: EAST)","282 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Late (Side: EAST)","283 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Early (Side: WEST)","284 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Late (Side: WEST)","285 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: WEST)","286 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: GUER)","287 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: EAST)","288 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: WEST)","289 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: GUER)","290 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: EAST)","291 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Pro-Government Militia (Side: WEST)","292 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Tribal Fighters (Side: GUER)","293 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Insurgents (Side: EAST)","294 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: WEST)","295 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: GUER)","296 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: EAST)","297 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: WEST)","298 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: GUER)","299 -UNSUNG Bohemia Interactive: Australia (UNSUNG) (Side: WEST)","300 -UNSUNG Razorback: N.V.A. (UNSUNG) (Side: EAST)","301 -UNSUNG Bohemia Interactive: V.C. (UNSUNG) (Side: EAST)","302 -UNSUNG UNSUNG: A.R.V.N. (UNSUNG) (Side: GUER)","303 -UNSUNG Bohemia Interactive: New Zealand (UNSUNG) (Side: WEST)","304 -UNSUNG Bohemia Interactive: R.O.K. (UNSUNG) (Side: WEST)","305 -UNSUNG Bohemia Interactive: U.S. (UNSUNG) (Side: WEST)","306 -VTN VTN: Mechanized infantry (EMR) (Side: EAST)","307 -VTN VTN: Militia (Side: GUER)","308 -VTN VTN: Insurgents (Side: GUER)","309 -VTN VTN: Mechanized infantry (VSR-98) (Side: EAST)","310 -VTN VTN: GRU SSPB (Side: EAST)","311 -VTN VTN: ISIL (Side: GUER)","312 -VTN VTN: MVD SPPU (Side: EAST)","313 -VTN VTN: Airforce (Side: EAST)","314 -VTN VTN: Takistan national guard (Side: EAST)"}; + texts[]={"0 - Bohemia Interactive: 2035 FIA (Side: WEST)","1 - Bohemia Interactive: LDF (Side: GUER)","2 - Bohemia Interactive: 2035 AAF (Side: GUER)","3 - Bohemia Interactive: 2035 FIA (Side: GUER)","4 - Bohemia Interactive: Pillards (Side: GUER)","5 - Bohemia Interactive: 2035 CSAT (Side: EAST)","6 - Bohemia Interactive: 2035 FIA (Side: EAST)","7 - EricJ: Taliban (Side: EAST)","8 -00VTN Bohemia Interactive: U.S.M.C. (MARPAT Woodland) (Side: WEST)","9 -01VTN Bohemia Interactive: U.S.M.C. (MARPAT Desert) (Side: WEST)","10 -05VTN Bohemia Interactive: TIA-SF (Side: WEST)","11 -AFR BIS/IceBreakr: Afrenian Army (Side: WEST)","12 -ARA Bohemia Interactive: Abramian Rebel Alliance (Side: WEST)","13 -ARL BIS/IceBreakr: ARL Lingor Rebels (Side: EAST)","14 -BLU Community Upgrade Project and ATLAS Mod: 2035 NATO (Side: WEST)","15 -CEC HcPookie: Cecanian Army (Side: EAST)","16 -CFP Drew: Afghan Police (Side: WEST)","17 -CFP CFP: Chadian Armed Forces (Side: WEST)","18 -CFP Tupolov: Army of the Czech Rep. (Jungle / Woodland) (Side: WEST)","19 -CFP CFP: Israeli Defense Force (Side: WEST)","20 -CFP Drew: Iraqi Army (Side: WEST)","21 -CFP Drew: Iraqi Police (Side: WEST)","22 -CFP Drew: Kenyan Defense Force (Side: WEST)","23 -CFP Drew: Malian Government Forces (Side: WEST)","24 -CFP CFP: Nigerian Army (Side: WEST)","25 -CFP Drew: Peshmerga (Side: WEST)","26 -CFP Drew: Uganda People's Defense Force (Side: WEST)","27 -CFP Drew: US 75th Rangers (Jungle/Woodland) (Side: WEST)","28 -CFP Drew: US Navy Seals (Arid / Desert) (Side: WEST)","29 -CFP Drew: US Navy Seals (Jungle / Woodland) (Side: WEST)","30 -CFP Drew: YPG (Side: WEST)","31 -CFP Drew: al-Nusra Front (Side: GUER)","32 -CFP Drew: Islamic State (Side: GUER)","33 -CFP Drew: Sudan People's Liberation Movement North (Side: GUER)","34 -CFP Drew: Sudan Revolutionary Front (Side: GUER)","35 -CFP Drew: South Sudan People's Defense Force (Side: GUER)","36 -CFP Drew: Tuareg Rebels (Side: GUER)","37 -CFP Tupolov: Western Ultranationalists (Side: GUER)","38 -CFP Drew: Abu Sayyaf Group (Side: EAST)","39 -CFP Drew: Al Qaeda (Side: EAST)","40 -CFP Drew: Al-Shabaab (Side: EAST)","41 -CFP Tupolov: Ansar Allah (Houthis) (Side: EAST)","42 -CFP Drew: Boko Haram (Side: EAST)","43 -CFP Drew: Central African Rebels (Side: EAST)","44 -CFP Drew: Hamas Al Qassam Brigades (Side: EAST)","45 -CFP Drew: Hezbollah (Side: EAST)","46 -CFP CFP: Iraqi Army (Hussein Regime) (Side: EAST)","47 -CFP Drew: Islamic Republic of Iran Army (Side: EAST)","48 -CFP Drew: Islamic State (Side: EAST)","49 -CFP Drew: Sudanese Armed Forces (Side: EAST)","50 -CFP CFP: Sudan Rapid Support Forces / Janjaweed (Side: EAST)","51 -CFP Drew: Somali Rebels (Side: EAST)","52 -CFP Drew: Sudan People's Liberation Movement In Opposition (Side: EAST)","53 -CFP Drew: Syrian Arab Army (Side: EAST)","54 -CFP Drew: Taliban Insurgents (Side: EAST)","55 -CUP Community Upgrade Project: Chernarus Defense Forces (Side: WEST)","56 -CUP Community Upgrade Project: Army of the Czech Rep. (Arid / Desert) (Side: WEST)","57 -CUP Community Upgrade Project: British Army (Arid / Desert) (Side: WEST)","58 -CUP Community Upgrade Project: Horizon Islands Legion (Side: WEST)","59 -CUP Community Upgrade Project: Royal New Zealand Navy (Side: WEST)","60 -CUP Community Upgrade Project: US Army (Arid / Desert) (Side: WEST)","61 -CUP Community Upgrade Project: US Marine Corps (Jungle / Woodland) (Side: WEST)","62 -CUP Community Upgrade Project: National Party of Chernarus (Side: GUER)","63 -CUP Community Upgrade Project: Royal Army Corps of Sahrani (Side: GUER)","64 -CUP Community Upgrade Project: United Nations (Side: GUER)","65 -CUP Community Upgrade Project: Chernarussian Movement of the Red Star (Side: EAST)","66 -CUP Community Upgrade Project: Russian Ground Forces (Jungle / Woodland) (Side: EAST)","67 -CUP Community Upgrade Project: Sahrani Liberation Army (Side: EAST)","68 -CUP Community Upgrade Project: Takistani Army (Side: EAST)","69 -CUP Community Upgrade Project: Takistani Militia (Side: EAST)","70 -CUP Community Upgrade Project: CUP Static Ships (Side: WEST)","71 -CUP_Units Drew: Chernarus Defense Forces [Winter] (Side: WEST)","72 -CUP_Units Community Upgrade Project: Bundeswehr (Jungle / Woodland) (Side: WEST)","73 -CUP_Units Community Upgrade Project: British Army (Jungle / Woodland) (Side: WEST)","74 -CUP_Units Drew: US Army 1991 [Arid/Desert] (Side: WEST)","75 -CUP_Units Drew: US Army 1991 [Woodland] (Side: WEST)","76 -CUP_Units Drew: US Army 2003 [Arid/Desert] (Side: WEST)","77 -CUP_Units Drew: US Army 2003 [Woodland] (Side: WEST)","78 -CUP_Units Tupolov: US CIA (Middle East) (Side: WEST)","79 -CUP_Units Community Upgrade Project: US Marine Corps (Arid / Desert) (Side: WEST)","80 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: GUER)","81 -CUP_Units Drew: PMC Wagner (Woodland) (Side: GUER)","82 -CUP_Units Drew: PMC Wagner (Winter) (Side: GUER)","83 -CUP_Units Community Upgrade Project: Russian Ground Forces (Arid / Desert) (Side: EAST)","84 -CUP_Units Tupolov: Russian National Guard (Side: EAST)","85 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: EAST)","86 -CUP_Units Drew: PMC Wagner (Woodland) (Side: EAST)","87 -CUP_Units Drew: PMC Wagner (Winter) (Side: EAST)","88 -CUP_Units Community Upgrade Project: Bundeswehr (Arid / Desert) (Side: WEST)","89 -CUP_Units Community Upgrade Project: ION PMC (Side: GUER)","90 -CUP_Units Community Upgrade Project: Takistani Locals (Side: GUER)","91 -CUP_Vehicles Drew: Afghan Army (Side: WEST)","92 -CUP_Vehicles Community Upgrade Project: US Army (Jungle / Woodland) (Side: WEST)","93 -CUP_Vehicles Drew: Chernarussian Movement of the Red Star [Winter] (Side: EAST)","94 -Enoch Bohemia Interactive: Spetsnaz (Side: EAST)","95 -Expansion Bohemia Interactive: 2035 CTRG (Side: WEST)","96 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: WEST)","97 -Expansion Bohemia Interactive: 2035 NATO (Pacific) (Side: WEST)","98 -Expansion Drew: Korean People's Army (Side: EAST)","99 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: EAST)","100 -FAP nzdfcrash/icebreakr: Fapovian Army (Side: EAST)","101 -FOW Bohemia Interactive: [DE] Heer (Side: WEST)","102 -FOW Bohemia Interactive: [JP] Navy Air Service (Side: WEST)","103 -FOW Bohemia Interactive: [UK] Fleet Air Arm (Side: GUER)","104 -FOW Bohemia Interactive: [US] Navy (Side: GUER)","105 -FOW FOW Team: [DE] Waffen-SS (Side: WEST)","106 -fow_mod Bohemia Interactive: [AUS] Army (Pacific) (Side: GUER)","107 -fow_mod Bohemia Interactive: [HI] Army (Side: GUER)","108 -fow_mod FOW team: [JP] Imperial Army (Side: WEST)","109 -fow_mod Bohemia Interactive: [DE] Luftwaffe (Side: WEST)","110 -fow_mod Bohemia Interactive: [UK] Army (Side: GUER)","111 -fow_mod FOW team: [US] Army (Europe) (Side: GUER)","112 -fow_mod Bohemia Interactive: [US] Army (Pacific) (Side: GUER)","113 -fow_mod FOW team: [US] Marines Corps (Side: GUER)","114 -GAL HcPookie: GAL (Government Army of Lingor) (Side: WEST)","115 -GANGBLUE BIS/IceBreakr: Blue Gang (Side: WEST)","116 -GANGRED BIS/IceBreakr: Red Gang (Side: EAST)","117 -gm Global Mobilization: Denmark (Side: WEST)","118 -gm Global Mobilization: East Germany (Side: EAST)","119 -gm Global Mobilization: East Germany (Borderguards) (Side: EAST)","120 -gm Global Mobilization: West Germany (Side: WEST)","121 -gm Global Mobilization: West Germany (Borderguards) (Side: WEST)","122 -gm Global Mobilization: Poland (Side: EAST)","123 -IBR Bohemia Interactive: Alienz (Side: GUER)","124 -ISC Bohemia Interactive: [ISC] al-Nusra Front (Side: GUER)","125 -ISC Bohemia Interactive: [ISC] Iraqi Police (Side: WEST)","126 -ISC Bohemia Interactive: [ISC] Islamic State (Side: GUER)","127 -ISC Bohemia Interactive: [ISC] Islamic State (Side: EAST)","128 -ISC Bohemia Interactive: [ISC] Peshmerga (Side: WEST)","129 -ISC Bohemia Interactive: [ISC] YPG (Side: WEST)","130 -Jets Bravo Zero One Studios: [OPCAN] United Rebel Army (Side: EAST)","131 -LIB AWAR: ACI (Side: GUER)","132 -LIB AWAR & Lennard: ARR (Side: WEST)","133 -LIB Lennard: Deutsches Afrikakorps (Side: WEST)","134 -LIB Reyhard & Joarius: FFI (Side: GUER)","135 -LIB IFA3 Team: Fallschirmjäger (Side: WEST)","136 -LIB AWAR: Armia Krajowa (Polonais) (Side: GUER)","137 -LIB AWAR & Lennard: MKHL (Side: WEST)","138 -LIB Lennard: US North African Corps (Side: GUER)","139 -LIB Lennard: NKVD (Side: EAST)","140 -LIB AWAR: RAAF (Side: GUER)","141 -LIB AWAR & Lennard: RBAF (Side: WEST)","142 -LIB AWAR: Red Army (Side: EAST)","143 -LIB AWAR & Lennard: [Winter] Red Army (Side: EAST)","144 -LIB IFA3 Team: UK Airborne (Side: GUER)","145 -LIB El Tyranos: [Winter] UK Airborne (Side: GUER)","146 -LIB IFA3 Team: UK Army (Side: GUER)","147 -LIB El Tyranos: [Winter] UK Army (Side: GUER)","148 -LIB IFA3 Team: UK Desert Rats (Side: GUER)","149 -LIB El Tyranos: 101st Airborne Division (Side: GUER)","150 -LIB El Tyranos: 82nd Airborne Division (Side: GUER)","151 -LIB IFA3 team: US Army (Side: GUER)","152 -LIB El Tyranos: [Winter] US Army (Side: GUER)","153 -LIB Lennard: US 2nd Ranger Battalion (Side: GUER)","154 -LIB AWAR: Wehrmacht (Side: WEST)","155 -LIB AWAR & Lennard: [Winter] Wehrmacht (Side: WEST)","156 -LM J.Burgess: [OPCAN] Colonial Guard Corps (Woodland) (Side: WEST)","157 -LM J.Burgess: [OPCAN] Colonial Military Authority (Side: GUER)","158 -LM J.Burgess: [OPCAN] Colonial Police Force (Side: GUER)","159 -LM J.Burgess: [OPCAN] Fridens (Side: EAST)","160 -LM J.Burgess: [OPCAN] Fridens (Desert) (Side: EAST)","161 -LM J.Burgess: [OPCAN] Fridens (Woodland) (Side: EAST)","162 -LM J.Burgess: [OPCAN] Koslovics (Side: EAST)","163 -LM J.Burgess: [OPCAN] Secessionist Union (Side: EAST)","164 -LM J.Burgess: [OPCAN] UNSC Army (Woodland) (Side: WEST)","165 -LM J.Burgess: [OPCAN] UNSC Army (Desert) (Side: WEST)","166 -LM J.Burgess: [OPCAN] UNSC Army (Mixed) (Side: WEST)","167 -LM J.Burgess: [OPCAN] UNSC Army Peace Corps (Side: WEST)","168 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Woodland) (Side: WEST)","169 -LM J.Burgess: [OPCAN] UNSC Marine Corps (CE:A) (Side: WEST)","170 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Desert) (Side: WEST)","171 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Infinite) (Side: WEST)","172 -LOP_LeightsOPFOR Project OPFOR: Afghan National Army and Police (Side: WEST)","173 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: GUER)","174 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: EAST)","175 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: GUER)","176 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: EAST)","177 -LOP_LeightsOPFOR Project OPFOR: Boko Haram (Side: EAST)","178 -LOP_LeightsOPFOR Project OPFOR: CDF (Project OPFOR) (Side: WEST)","179 -LOP_LeightsOPFOR Project OPFOR: ChDKZ (Project OPFOR) (Side: EAST)","180 -LOP_LeightsOPFOR Project OPFOR: Hellenic Armed Forces (Side: WEST)","181 -LOP_LeightsOPFOR Project OPFOR: Iraqi Armed Forces (Side: WEST)","182 -LOP_LeightsOPFOR Project OPFOR: Irish Republican Army (Side: EAST)","183 -LOP_LeightsOPFOR Project OPFOR: Iranian Armed Forces (Side: GUER)","184 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: GUER)","185 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: EAST)","186 -LOP_LeightsOPFOR Project OPFOR: Chernarussian National Insurgents (Side: GUER)","187 -LOP_LeightsOPFOR Project OPFOR: Korean People's Army (Side: EAST)","188 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: WEST)","189 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: GUER)","190 -LOP_LeightsOPFOR Project OPFOR: Private Military Company (Side: GUER)","191 -LOP_LeightsOPFOR Project OPFOR: Royal Army Corps of Sahrani (Side: GUER)","192 -LOP_LeightsOPFOR Project OPFOR: Sahrani Liberation Army (Side: EAST)","193 -LOP_LeightsOPFOR Project OPFOR: Syrian Armed Forces (Side: EAST)","194 -LOP_LeightsOPFOR Project OPFOR: Takistani Armed Forces (Side: EAST)","195 -LOP_LeightsOPFOR Project OPFOR: Turkish Armed Forces (Side: GUER)","196 -LOP_LeightsOPFOR Project OPFOR: Ultranationalists (Side: GUER)","197 -LOP_LeightsOPFOR Project OPFOR: Ukrainian Armed Forces (Side: GUER)","198 -LOP_LeightsOPFOR Project OPFOR: United Nations (Side: GUER)","199 -LOP_LeightsOPFOR Project OPFOR: United Armed Forces of Novorossiya (Side: EAST)","200 -LOP_LeightsOPFOR Project OPFOR: Ulster Volunteer Force (Side: GUER)","201 -Mark Bohemia Interactive: OTAN (forêt) (Side: WEST)","202 -MOL HcPookie: Molatian Army (Side: EAST)","203 -O jarrad96: Central African Rebels (Side: EAST)","204 -OPF Community Upgrade Project: 2035 CSAT (Pacific) (Side: EAST)","205 -OPTRE Article 2 Studios: Insurrectionists (Side: EAST)","206 -OPTRE Article 2 Studios: Colonial Police (Side: GUER)","207 -OPTRE Article 2 Studios: UNSCDF (Side: WEST)","208 -OPTRE_FC Article 2 Studios: Covenant (Side: EAST)","209 -RHS_AFRF Red Hammer Studios: [ISC] Iraqi Army (Side: WEST)","210 -RHS_AFRF Red Hammer Studios: Russia (MSV) (Side: EAST)","211 -RHS_AFRF Red Hammer Studios: Russia (RVA) (Side: EAST)","212 -RHS_AFRF Red Hammer Studios: Russia (TV) (Side: EAST)","213 -RHS_AFRF Red Hammer Studios: Russia (VDV) (Side: EAST)","214 -RHS_AFRF Red Hammer Studios: Russia (VMF) (Side: EAST)","215 -RHS_AFRF RHS: Russia (VPVO) (Side: EAST)","216 -RHS_AFRF Red Hammer Studios: Russia (VV) (Side: EAST)","217 -RHS_AFRF Red Hammer Studios: Russia (VVS - Grey) (Side: EAST)","218 -RHS_AFRF Red Hammer Studios: Russia (VVS - Camo) (Side: EAST)","219 -RHS_GREF Red Hammer Studios: [ISC] Syrian Arab Army (Side: EAST)","220 -RHS_GREF RHS (A2 port): CDF (Air Forces) (Side: GUER)","221 -RHS_GREF Red Hammer Studios: CDF (Air Forces) (Side: WEST)","222 -RHS_GREF Red Hammer Studios: ChDKZ (Side: EAST)","223 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: GUER)","224 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: EAST)","225 -RHS_SAF Red Hammer Studios: SAF (KOV) (Side: GUER)","226 -RHS_SAF RHS (A2 port): SAF (KOV) (Side: EAST)","227 -RHS_SAF RHS (A2 port): SAF (Casques Bleus) (Side: GUER)","228 -RHS_USAF Red Hammer Studios: USA (SOCOM) (Side: WEST)","229 -RHS_USAF Red Hammer Studios: USA (USAF) (Side: WEST)","230 -RHS_USAF Red Hammer Studios: USA (Army - D) (Side: WEST)","231 -RHS_USAF Red Hammer Studios: USA (USMC - D) (Side: WEST)","232 -RHS_USAF Red Hammer Studios: USA (Navy) (Side: WEST)","233 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: GUER)","234 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: WEST)","235 -RHSGREF Red Hammer Studios: NAPA (Side: GUER)","236 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: EAST)","237 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: GUER)","238 -RHSGREF Red Hammer Studios: CDF (UN) (Side: GUER)","239 -SG Stagler: Sturmtroopers (Side: WEST)","240 -SG Stagler: Tank Sturmtroopers (Side: WEST)","241 -Tank Bohemia Interactive: 2035 Syndikat (Side: GUER)","242 -UK3CB_Factions www.3commandobrigade.com: USA (Army - W) (Side: WEST)","243 -UK3CB_Factions www.3commandobrigade.com: USA (USMC - W) (Side: WEST)","244 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: GUER)","245 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: WEST)","246 -UK3CB_Factions www.3commandobrigade.com: ChDKZ (Side: GUER)","247 -UK3CB_Factions www.3commandobrigade.com: Horizon Islands Defence Force (Side: WEST)","248 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: WEST)","249 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: GUER)","250 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: EAST)","251 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: WEST)","252 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: GUER)","253 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: EAST)","254 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: WEST)","255 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: GUER)","256 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: EAST)","257 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: GUER)","258 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: EAST)","259 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: WEST)","260 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: GUER)","261 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: EAST)","262 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: WEST)","263 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: GUER)","264 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: EAST)","265 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: WEST)","266 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: GUER)","267 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: EAST)","268 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: WEST)","269 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: GUER)","270 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: EAST)","271 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Army (Side: WEST)","272 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Police (Side: WEST)","273 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Local Defence Volunteers (Side: WEST)","274 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Nationalist Militia (Side: GUER)","275 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Communist Militia (Side: EAST)","276 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: WEST)","277 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: GUER)","278 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: EAST)","279 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: WEST)","280 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: GUER)","281 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: EAST)","282 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Early (Side: EAST)","283 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Late (Side: EAST)","284 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Early (Side: WEST)","285 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Late (Side: WEST)","286 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: WEST)","287 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: GUER)","288 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: EAST)","289 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: WEST)","290 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: GUER)","291 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: EAST)","292 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Pro-Government Militia (Side: WEST)","293 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Tribal Fighters (Side: GUER)","294 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Insurgents (Side: EAST)","295 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: WEST)","296 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: GUER)","297 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: EAST)","298 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: WEST)","299 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: GUER)","300 -UNSUNG Bohemia Interactive: Australia (UNSUNG) (Side: WEST)","301 -UNSUNG Razorback: N.V.A. (UNSUNG) (Side: EAST)","302 -UNSUNG Bohemia Interactive: V.C. (UNSUNG) (Side: EAST)","303 -UNSUNG UNSUNG: A.R.V.N. (UNSUNG) (Side: GUER)","304 -UNSUNG Bohemia Interactive: New Zealand (UNSUNG) (Side: WEST)","305 -UNSUNG Bohemia Interactive: R.O.K. (UNSUNG) (Side: WEST)","306 -UNSUNG Bohemia Interactive: U.S. (UNSUNG) (Side: WEST)","307 -VTN VTN: Mechanized infantry (EMR) (Side: EAST)","308 -VTN VTN: Militia (Side: GUER)","309 -VTN VTN: Insurgents (Side: GUER)","310 -VTN VTN: Mechanized infantry (VSR-98) (Side: EAST)","311 -VTN VTN: GRU SSPB (Side: EAST)","312 -VTN VTN: ISIL (Side: GUER)","313 -VTN VTN: MVD SPPU (Side: EAST)","314 -VTN VTN: Takistan national guard (Side: EAST)"}; default = 6; }; class btc_p_AA { // Anti-Air infantry: @@ -98,13 +98,13 @@ class Params { class btc_p_civ { // Civil type: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_FAC_CTYPE"]); values[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}; - texts[]={"0 - EricJ: Afghan Civilians (Side: CIV)","1 - Bohemia Interactive: Civils (Side: CIV)","2 - Bohemia Interactive: Autre (Side: CIV)","3 -CFP Drew: Civilians (Afghanistan) (Side: CIV)","4 -CFP Drew: Civilians (African Christian) (Side: CIV)","5 -CFP Drew: Civilians (African Islamic) (Side: CIV)","6 -CFP Drew: Civilians (Asian) (Side: CIV)","7 -CFP Drew: Civilians (Chernarus Winter) (Side: CIV)","8 -CFP Drew: Civilians (Malden) (Side: CIV)","9 -CFP Drew: Civilians (Middle Eastern) (Side: CIV)","10 -CUP_Units Community Upgrade Project: Civilians (Russian) (Side: CIV)","11 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Chernarus) (Side: CIV)","12 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Sahrani) (Side: CIV)","13 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Takistan) (Side: CIV)","14 -gm Global Mobilization: East Germany (Side: CIV)","15 -gm Global Mobilization: West Germany (Side: CIV)","16 -LIB Reyhard & Joarius: 40s Civilians (Side: CIV)","17 -LOP_LeightsOPFOR Project OPFOR: Civilians (African) (Side: CIV)","18 -LOP_LeightsOPFOR Project OPFOR: Civilians (Eastern European) (Side: CIV)","19 -LOP_LeightsOPFOR Project OPFOR: Civilians (Middle Eastern) (Side: CIV)","20 -OPTRE Article 2 Studios: IDAP (Side: CIV)","21 -OPTRE Bohemia Interactive: Civilians (UEG) (Side: CIV)","22 -RDS_CIV_PACK RDS (BIS A2 Port): Russians (Side: CIV)","23 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: CIV)","24 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: CIV)","25 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: CIV)","26 -UNSUNG Bohemia Interactive: Vietnamese (UNSUNG) (Side: CIV)"}; + texts[]={"0 - EricJ: Afghan Civilians (Side: CIV)","1 - Bohemia Interactive: Civils (Side: CIV)","2 - Bohemia Interactive: Autre (Side: CIV)","3 -CFP Drew: Civilians (Afghanistan) (Side: CIV)","4 -CFP Drew: Civilians (African Christian) (Side: CIV)","5 -CFP Drew: Civilians (African Islamic) (Side: CIV)","6 -CFP Drew: Civilians (Asian) (Side: CIV)","7 -CFP Drew: Civilians (Chernarus Winter) (Side: CIV)","8 -CFP Drew: Civilians (Malden) (Side: CIV)","9 -CFP Drew: Civilians (Middle Eastern) (Side: CIV)","10 -CUP_Units Community Upgrade Project: Civilians (Russian) (Side: CIV)","11 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Chernarus) (Side: CIV)","12 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Sahrani) (Side: CIV)","13 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Takistan) (Side: CIV)","14 -gm Global Mobilization: East Germany (Side: CIV)","15 -gm Global Mobilization: West Germany (Side: CIV)","16 -LIB Reyhard & Joarius: 40s Civilians (Side: CIV)","17 -LOP_LeightsOPFOR Project OPFOR: Civilians (African) (Side: CIV)","18 -LOP_LeightsOPFOR Project OPFOR: Civilians (Eastern European) (Side: CIV)","19 -LOP_LeightsOPFOR Project OPFOR: Civilians (Middle Eastern) (Side: CIV)","20 -OPTRE Article 2 Studios: IDAP (Side: CIV)","21 -OPTRE Article 2 Studios: Civilians (UEG) (Side: CIV)","22 -RDS_CIV_PACK RDS (BIS A2 Port): Russians (Side: CIV)","23 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: CIV)","24 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: CIV)","25 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: CIV)","26 -UNSUNG Bohemia Interactive: Vietnamese (UNSUNG) (Side: CIV)"}; default = 1; }; class btc_p_civ_veh { // Civil vehicle type: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_FAC_CTYPEVEH"]); values[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}; - texts[]={"0 - EricJ: Afghan Civilians (Side: CIV)","1 - Bohemia Interactive: Civils (Side: CIV)","2 - Bohemia Interactive: Autre (Side: CIV)","3 -CFP Drew: Civilians (Afghanistan) (Side: CIV)","4 -CFP Drew: Civilians (African Christian) (Side: CIV)","5 -CFP Drew: Civilians (African Islamic) (Side: CIV)","6 -CFP Drew: Civilians (Asian) (Side: CIV)","7 -CFP Drew: Civilians (Chernarus Winter) (Side: CIV)","8 -CFP Drew: Civilians (Malden) (Side: CIV)","9 -CFP Drew: Civilians (Middle Eastern) (Side: CIV)","10 -CUP_Units Community Upgrade Project: Civilians (Russian) (Side: CIV)","11 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Chernarus) (Side: CIV)","12 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Sahrani) (Side: CIV)","13 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Takistan) (Side: CIV)","14 -gm Global Mobilization: East Germany (Side: CIV)","15 -gm Global Mobilization: West Germany (Side: CIV)","16 -LIB Reyhard & Joarius: 40s Civilians (Side: CIV)","17 -LOP_LeightsOPFOR Project OPFOR: Civilians (African) (Side: CIV)","18 -LOP_LeightsOPFOR Project OPFOR: Civilians (Eastern European) (Side: CIV)","19 -LOP_LeightsOPFOR Project OPFOR: Civilians (Middle Eastern) (Side: CIV)","20 -OPTRE Article 2 Studios: IDAP (Side: CIV)","21 -OPTRE Bohemia Interactive: Civilians (UEG) (Side: CIV)","22 -RDS_CIV_PACK RDS (BIS A2 Port): Russians (Side: CIV)","23 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: CIV)","24 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: CIV)","25 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: CIV)","26 -UNSUNG Bohemia Interactive: Vietnamese (UNSUNG) (Side: CIV)"}; + texts[]={"0 - EricJ: Afghan Civilians (Side: CIV)","1 - Bohemia Interactive: Civils (Side: CIV)","2 - Bohemia Interactive: Autre (Side: CIV)","3 -CFP Drew: Civilians (Afghanistan) (Side: CIV)","4 -CFP Drew: Civilians (African Christian) (Side: CIV)","5 -CFP Drew: Civilians (African Islamic) (Side: CIV)","6 -CFP Drew: Civilians (Asian) (Side: CIV)","7 -CFP Drew: Civilians (Chernarus Winter) (Side: CIV)","8 -CFP Drew: Civilians (Malden) (Side: CIV)","9 -CFP Drew: Civilians (Middle Eastern) (Side: CIV)","10 -CUP_Units Community Upgrade Project: Civilians (Russian) (Side: CIV)","11 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Chernarus) (Side: CIV)","12 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Sahrani) (Side: CIV)","13 -CUP_Vehicles $CUP_AUTHOR_STRING: Civilians (Takistan) (Side: CIV)","14 -gm Global Mobilization: East Germany (Side: CIV)","15 -gm Global Mobilization: West Germany (Side: CIV)","16 -LIB Reyhard & Joarius: 40s Civilians (Side: CIV)","17 -LOP_LeightsOPFOR Project OPFOR: Civilians (African) (Side: CIV)","18 -LOP_LeightsOPFOR Project OPFOR: Civilians (Eastern European) (Side: CIV)","19 -LOP_LeightsOPFOR Project OPFOR: Civilians (Middle Eastern) (Side: CIV)","20 -OPTRE Article 2 Studios: IDAP (Side: CIV)","21 -OPTRE Article 2 Studios: Civilians (UEG) (Side: CIV)","22 -RDS_CIV_PACK RDS (BIS A2 Port): Russians (Side: CIV)","23 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: CIV)","24 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: CIV)","25 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: CIV)","26 -UNSUNG Bohemia Interactive: Vietnamese (UNSUNG) (Side: CIV)"}; default = 1; }; class btc_p_spawn_title { // << Spawn options >> From d71de4a131ca275786a1dd588ea3818455ce6616 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 29 Jan 2021 19:31:01 +0100 Subject: [PATCH 252/264] Cancel convoy side mission when no path is found after 10s --- .../core/fnc/side/capture_officer.sqf | 4 +++- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 446b79f43..ed2f16a01 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -69,9 +69,11 @@ private _markers = [_marker1, _marker2, _area]; /// Show info path\\\ private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; +private _startingPath = serverTime; waitUntil { - !isNil {_agent getVariable "btc_path"} + !isNil {_agent getVariable "btc_path"} || + {serverTime > _startingPath + 10} }; private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 449f0260e..0394121b3 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -69,9 +69,11 @@ private _markers = [_marker1, _marker2, _area]; /// Show info path\\\ private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; +private _startingPath = serverTime; waitUntil { - !isNil {_agent getVariable "btc_path"} + !isNil {_agent getVariable "btc_path"} || + {serverTime > _startingPath + 10} }; private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { From e136771709931e9a49fc7c1281a7d158e5ade3dd Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 29 Jan 2021 21:55:54 +0100 Subject: [PATCH 253/264] FIX: Marker not deleted --- .../core/fnc/side/capture_officer.sqf | 1 + =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf | 1 + 2 files changed, 2 insertions(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index ed2f16a01..8f979e29a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -78,6 +78,7 @@ waitUntil { private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); + [_markers, [_agent]] call btc_fnc_delete; [_taskID, "CANCELED"] call BIS_fnc_taskSetState; }; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index 0394121b3..ed79c7f42 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -78,6 +78,7 @@ waitUntil { private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { _markers append (allMapMarkers select {(_x select [0, count _taskID]) isEqualTo _taskID}); + [_markers, [_agent]] call btc_fnc_delete; [_taskID, "CANCELED"] call BIS_fnc_taskSetState; }; From 72c070aa61b3ce00905af3868124c20ac87a8ccc Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 31 Jan 2021 13:42:59 +0100 Subject: [PATCH 254/264] FIX: Can't tow over bridge --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf index c1c055da5..91b38b56a 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/tow/check.sqf @@ -49,6 +49,7 @@ private _offset = if (_model_selected select 1 > 3.06) then { (_model_front_selected select 1) - (_model_selected select 1) }; private _posFlat = _towed getPos [_offset + 3 /*size of Truck_01_Rack_F*/, _dirSelected]; +_posFlat set [2, 0.2 + ((getPosATL _towed) select 2)]; private _distance = _posFlat distance (_tower modelToWorld _model_rear); private _distanceTowed = _towed distance (_tower modelToWorld _model_rear); From a9e9e2b40fd540b5187b36fa76a4c21d85b580fa Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 10 Feb 2021 11:57:34 +0100 Subject: [PATCH 255/264] FIX: missing city parameter --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index d33a61033..df70c90ae 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -141,7 +141,7 @@ if !(_data_units isEqualTo []) then { case "Airport" : {6}; default {2}; }); - [+_houses, round (_p_civ_group_ratio * random _max_number_group)] call btc_fnc_civ_populate; + [+_houses, round (_p_civ_group_ratio * random _max_number_group), _city] call btc_fnc_civ_populate; }; }; if (btc_p_animals_group_ratio > 0) then { From 11a8f3530ee9a7a3756d36d4be4c37986ca62d83 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 10 Feb 2021 22:31:00 +0100 Subject: [PATCH 256/264] Add new factions --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp | 4 ++-- README.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index e51d7d27a..de2265268 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -631,7 +631,7 @@ btc_lift_HUD_y = 0.848; btc_hq = objNull; // Get all faction from mod there are currently running //copyToClipboard str (["EN"] call btc_fnc_get_class); -private _allfaction = ["BLU_G_F","IND_E_F","IND_F","IND_G_F","IND_L_F","OPF_F","OPF_G_F","TBAN","00VTN_MILFOR_USMCW","01VTN_MILFOR_USMCD","05VTN_MILFOR_TIASF","AFR_ARMY","ARA_ARMY","ARL_ARMY","BLU_F","CEC_ARMY","CFP_B_AFGPOLICE","CFP_B_CAF","CFP_B_CZARMY_WDL","CFP_B_ILIDF","CFP_B_IQARMY","CFP_B_IQPOLICE","CFP_B_KEARMY","CFP_B_MLARMY","CFP_B_NAARMY","CFP_B_PESH","CFP_B_UGARMY","CFP_B_USRANGERS_WDL","CFP_B_USSEALS_DES","CFP_B_USSEALS_WDL","CFP_B_YPG","CFP_I_ALNUSRA","CFP_I_IS","CFP_I_SDREBELS","CFP_I_SDREBELSRF","CFP_I_SSARMY","CFP_I_TUAREG","CFP_I_WESTULTRA","CFP_O_ABUSAYYAF","CFP_O_ALQAEDA","CFP_O_ALSHABAAB","CFP_O_ANSARALLAH","CFP_O_BOKOHARAM","CFP_O_CFREBELS","CFP_O_HAMAS","CFP_O_HEZBOLLAH","CFP_O_IQARMY","CFP_O_IRARMY","CFP_O_IS","CFP_O_SDARMY","CFP_O_SDMILITIA","CFP_O_SOREBEL","CFP_O_SSREBELS","CFP_O_SYARMY","CFP_O_TBAN","CUP_B_CDF","CUP_B_CZ","CUP_B_GB","CUP_B_HIL","CUP_B_RNZN","CUP_B_US_ARMY","CUP_B_USMC","CUP_I_NAPA","CUP_I_RACS","CUP_I_UN","CUP_O_CHDKZ","CUP_O_RU","CUP_O_SLA","CUP_O_TK","CUP_O_TK_MILITIA","CUP_STATIC_SHIPS","CFP_B_CDF_SNW","CFP_B_DEARMY_WDL","CFP_B_GBARMY_WDL","CFP_B_USARMY_1991_DES","CFP_B_USARMY_1991_WDL","CFP_B_USARMY_2003_DES","CFP_B_USARMY_2003_WDL","CFP_B_USCIA","CFP_B_USMC_DES","CFP_I_WAGNER","CFP_I_WAGNER_WDL","CFP_I_WAGNER_WIN","CFP_O_RUARMY_DES","CFP_O_RUMVD","CFP_O_WAGNER","CFP_O_WAGNER_WDL","CFP_O_WAGNER_WIN","CUP_B_GER","CUP_I_PMC_ION","CUP_I_TK_GUE","CFP_B_AFARMY","CFP_B_USARMY_WDL","CFP_O_CHDKZ_SNW","OPF_R_F","BLU_CTRG_F","BLU_GEN_F","BLU_T_F","CFP_O_NKARMY","OPF_GEN_F","FAP_ARMY","FOW_HEER","FOW_IJA_NAS","FOW_UK_FAA","FOW_USA_NAVY","FOW_WAFFENSS","FOW_AUS","FOW_HI","FOW_IJA","FOW_LUFTWAFFE","FOW_UK","FOW_USA","FOW_USA_P","FOW_USMC","GAL_ARMY","GANGBLUE_ARMY","GANGRED_ARMY","GM_FC_DK","GM_FC_GC","GM_FC_GC_BGS","GM_FC_GE","GM_FC_GE_BGS","GM_FC_PL","IBR_ZETABORN_FACTION","ISC_ALNUSRA_I","ISC_IP_B","ISC_IS_I","ISC_IS_O","ISC_PESH_B","ISC_YPG_B","LM_OPCAN_URA","LIB_ACI","LIB_ARR","LIB_DAK","LIB_FFI","LIB_FSJ","LIB_GUER","LIB_MKHL","LIB_NAC","LIB_NKVD","LIB_RAAF","LIB_RBAF","LIB_RKKA","LIB_RKKA_W","LIB_UK_AB","LIB_UK_AB_W","LIB_UK_ARMY","LIB_UK_ARMY_W","LIB_UK_DR","LIB_US_101AB","LIB_US_82AB","LIB_US_ARMY","LIB_US_ARMY_W","LIB_US_RANGERS","LIB_WEHRMACHT","LIB_WEHRMACHT_W","LM_OPCAN_CGC","LM_OPCAN_CMA","LM_OPCAN_CPD","LM_OPCAN_FRI","LM_OPCAN_FRI_DES","LM_OPCAN_FRI_WDL","LM_OPCAN_KOS","LM_OPCAN_SU","LM_OPCAN_UNSC_ARMY","LM_OPCAN_UNSC_ARMY_D","LM_OPCAN_UNSC_ARMY_MIX","LM_OPCAN_UNSC_ARMY_RES","LM_OPCAN_UNSC_MC","LM_OPCAN_UNSC_MC_CEA","LM_OPCAN_UNSC_MC_D","LM_OPCAN_UNSC_MC_INF","LOP_AA","LOP_AFR","LOP_AFR_OPF","LOP_AM","LOP_AM_OPF","LOP_BH","LOP_CDF","LOP_CHDKZ","LOP_GRE","LOP_IA","LOP_IRA","LOP_IRAN","LOP_ISTS","LOP_ISTS_OPF","LOP_NAPA","LOP_NK","LOP_PESH","LOP_PESH_IND","LOP_PMC","LOP_RACS","LOP_SLA","LOP_SYR","LOP_TKA","LOP_TRK","LOP_UA","LOP_UKR","LOP_UN","LOP_US","LOP_UVF","BLU_W_F","MOL_ARMY","O_CAR","OPF_T_F","OPTRE_INS","OPTRE_PD","OPTRE_UNSC","OPTRE_FC_COVENANT","ISC_IA_B","RHS_FACTION_MSV","RHS_FACTION_RVA","RHS_FACTION_TV","RHS_FACTION_VDV","RHS_FACTION_VMF","RHS_FACTION_VPVO","RHS_FACTION_VV","RHS_FACTION_VVS","RHS_FACTION_VVS_C","ISC_SAA_O","RHSGREF_FACTION_CDF_AIR","RHSGREF_FACTION_CDF_AIR_B","RHSGREF_FACTION_CHDKZ","RHSSAF_FACTION_AIRFORCE","RHSSAF_FACTION_AIRFORCE_OPFOR","RHSSAF_FACTION_ARMY","RHSSAF_FACTION_ARMY_OPFOR","RHSSAF_FACTION_UN","RHS_FACTION_SOCOM","RHS_FACTION_USAF","RHS_FACTION_USARMY_D","RHS_FACTION_USMC_D","RHS_FACTION_USN","RHSGREF_FACTION_CDF_GROUND","RHSGREF_FACTION_CDF_GROUND_B","RHSGREF_FACTION_NATIONALIST","RHSGREF_FACTION_TLA","RHSGREF_FACTION_TLA_G","RHSGREF_FACTION_UN","SG_STURM","SG_STURMPANZER","IND_C_F","RHS_FACTION_USARMY_WD","RHS_FACTION_USMC_WD","RHSGREF_FACTION_CDF_NG","RHSGREF_FACTION_CDF_NG_B","RHSGREF_FACTION_CHDKZ_G","RHSGREF_FACTION_HIDF","UK3CB_AAF_B","UK3CB_AAF_I","UK3CB_AAF_O","UK3CB_ADA_B","UK3CB_ADA_I","UK3CB_ADA_O","UK3CB_ADC_B","UK3CB_ADC_I","UK3CB_ADC_O","UK3CB_ADE_I","UK3CB_ADE_O","UK3CB_ADG_B","UK3CB_ADG_I","UK3CB_ADG_O","UK3CB_ADM_B","UK3CB_ADM_I","UK3CB_ADM_O","UK3CB_ADP_B","UK3CB_ADP_I","UK3CB_ADP_O","UK3CB_ADR_B","UK3CB_ADR_I","UK3CB_ADR_O","UK3CB_ANA_B","UK3CB_ANP_B","UK3CB_CCM_B","UK3CB_CCM_I","UK3CB_CCM_O","UK3CB_CHC_B","UK3CB_CHC_I","UK3CB_CHC_O","UK3CB_CPD_B","UK3CB_CPD_I","UK3CB_CPD_O","UK3CB_CW_SOV_O_EARLY","UK3CB_CW_SOV_O_LATE","UK3CB_CW_US_B_EARLY","UK3CB_CW_US_B_LATE","UK3CB_TKA_B","UK3CB_TKA_I","UK3CB_TKA_O","UK3CB_TKC_B","UK3CB_TKC_I","UK3CB_TKC_O","UK3CB_TKM_B","UK3CB_TKM_I","UK3CB_TKM_O","UK3CB_TKP_B","UK3CB_TKP_I","UK3CB_TKP_O","UK3CB_UN_B","UK3CB_UN_I","UNSUNG_AUS","UNSUNG_E","UNSUNG_EV","UNSUNG_G","UNSUNG_NZ","UNSUNG_ROK","UNSUNG_W","00VTN_MILFOR_MIW_EMR","00VTN_MILITIA_RU","01VTN_INSURGENTS_RU","01VTN_MILFOR_MIW","02VTN_MILFOR_RC","03VTN_INSURGENTS_ISIL","03VTN_MILFOR_SPPU","07VTN_MILFOR_TNG"]; //All factions +private _allfaction = ["BLU_G_F","IND_E_F","IND_F","IND_G_F","IND_L_F","OPF_F","OPF_G_F","TBAN","00VTN_MILFOR_USMCW","01VTN_MILFOR_USMCD","05VTN_MILFOR_TIASF","AFR_ARMY","ARA_ARMY","ARL_ARMY","BLU_F","CEC_ARMY","CFP_B_AFGPOLICE","CFP_B_CAF","CFP_B_CZARMY_WDL","CFP_B_ILIDF","CFP_B_IQARMY","CFP_B_IQPOLICE","CFP_B_KEARMY","CFP_B_MLARMY","CFP_B_NAARMY","CFP_B_PESH","CFP_B_UGARMY","CFP_B_USRANGERS_WDL","CFP_B_USSEALS_DES","CFP_B_USSEALS_WDL","CFP_B_YPG","CFP_I_ALNUSRA","CFP_I_IS","CFP_I_SDREBELS","CFP_I_SDREBELSRF","CFP_I_SSARMY","CFP_I_TUAREG","CFP_I_WESTULTRA","CFP_O_ABUSAYYAF","CFP_O_ALQAEDA","CFP_O_ALSHABAAB","CFP_O_ANSARALLAH","CFP_O_BOKOHARAM","CFP_O_CFREBELS","CFP_O_HAMAS","CFP_O_HEZBOLLAH","CFP_O_IQARMY","CFP_O_IRARMY","CFP_O_IS","CFP_O_SDARMY","CFP_O_SDMILITIA","CFP_O_SOREBEL","CFP_O_SSREBELS","CFP_O_SYARMY","CFP_O_TBAN","CUP_B_CDF","CUP_B_CZ","CUP_B_GB","CUP_B_HIL","CUP_B_RNZN","CUP_B_US_ARMY","CUP_B_USMC","CUP_I_NAPA","CUP_I_RACS","CUP_I_UN","CUP_O_CHDKZ","CUP_O_RU","CUP_O_SLA","CUP_O_TK","CUP_O_TK_MILITIA","CUP_STATIC_SHIPS","CFP_B_CDF_SNW","CFP_B_DEARMY_WDL","CFP_B_GBARMY_WDL","CFP_B_USARMY_1991_DES","CFP_B_USARMY_1991_WDL","CFP_B_USARMY_2003_DES","CFP_B_USARMY_2003_WDL","CFP_B_USCIA","CFP_B_USMC_DES","CFP_I_WAGNER","CFP_I_WAGNER_WDL","CFP_I_WAGNER_WIN","CFP_O_RUARMY_DES","CFP_O_RUMVD","CFP_O_WAGNER","CFP_O_WAGNER_WDL","CFP_O_WAGNER_WIN","CUP_B_GER","CUP_I_PMC_ION","CUP_I_TK_GUE","CFP_B_AFARMY","CFP_B_USARMY_WDL","CFP_O_CHDKZ_SNW","OPF_R_F","BLU_CTRG_F","BLU_GEN_F","BLU_T_F","CFP_O_NKARMY","OPF_GEN_F","FAP_ARMY","FOW_HEER","FOW_IJA_NAS","FOW_UK_FAA","FOW_USA_NAVY","FOW_WAFFENSS","FOW_AUS","FOW_HI","FOW_IJA","FOW_LUFTWAFFE","FOW_UK","FOW_USA","FOW_USA_P","FOW_USMC","GAL_ARMY","GANGBLUE_ARMY","GANGRED_ARMY","GM_FC_DK","GM_FC_GC","GM_FC_GC_BGS","GM_FC_GE","GM_FC_GE_BGS","GM_FC_PL","IBR_ZETABORN_FACTION","ISC_ALNUSRA_I","ISC_IP_B","ISC_IS_I","ISC_IS_O","ISC_PESH_B","ISC_YPG_B","LM_OPCAN_URA","LIB_ACI","LIB_ARR","LIB_DAK","LIB_FFI","LIB_FSJ","LIB_GUER","LIB_MKHL","LIB_NAC","LIB_NKVD","LIB_RAAF","LIB_RBAF","LIB_RKKA","LIB_RKKA_W","LIB_UK_AB","LIB_UK_AB_W","LIB_UK_ARMY","LIB_UK_ARMY_W","LIB_UK_DR","LIB_US_101AB","LIB_US_82AB","LIB_US_ARMY","LIB_US_ARMY_W","LIB_US_RANGERS","LIB_WEHRMACHT","LIB_WEHRMACHT_W","LM_OPCAN_CGC","LM_OPCAN_CMA","LM_OPCAN_CPD","LM_OPCAN_FRI","LM_OPCAN_FRI_DES","LM_OPCAN_FRI_WDL","LM_OPCAN_KOS","LM_OPCAN_SU","LM_OPCAN_UNSC_ARMY","LM_OPCAN_UNSC_ARMY_D","LM_OPCAN_UNSC_ARMY_MIX","LM_OPCAN_UNSC_ARMY_RES","LM_OPCAN_UNSC_MC","LM_OPCAN_UNSC_MC_CEA","LM_OPCAN_UNSC_MC_D","LM_OPCAN_UNSC_MC_INF","LOP_AA","LOP_AFR","LOP_AFR_OPF","LOP_AM","LOP_AM_OPF","LOP_BH","LOP_CDF","LOP_CHDKZ","LOP_GRE","LOP_IA","LOP_IRA","LOP_IRAN","LOP_ISTS","LOP_ISTS_OPF","LOP_NAPA","LOP_NK","LOP_PESH","LOP_PESH_IND","LOP_PMC","LOP_RACS","LOP_SLA","LOP_SYR","LOP_TKA","LOP_TRK","LOP_UA","LOP_UKR","LOP_UN","LOP_US","LOP_UVF","BLU_W_F","MOL_ARMY","O_CAR","OPF_T_F","OPTRE_FC_COVENANT","OPTRE_INS","OPTRE_PD","OPTRE_UNSC","ISC_IA_B","RHS_FACTION_MSV","RHS_FACTION_RVA","RHS_FACTION_TV","RHS_FACTION_VDV","RHS_FACTION_VMF","RHS_FACTION_VPVO","RHS_FACTION_VV","RHS_FACTION_VVS","RHS_FACTION_VVS_C","ISC_SAA_O","RHSGREF_FACTION_CDF_AIR","RHSGREF_FACTION_CDF_AIR_B","RHSGREF_FACTION_CHDKZ","RHSSAF_FACTION_AIRFORCE","RHSSAF_FACTION_AIRFORCE_OPFOR","RHSSAF_FACTION_ARMY","RHSSAF_FACTION_ARMY_OPFOR","RHSSAF_FACTION_UN","RHS_FACTION_SOCOM","RHS_FACTION_USAF","RHS_FACTION_USARMY_D","RHS_FACTION_USMC_D","RHS_FACTION_USN","RHSGREF_FACTION_CDF_GROUND","RHSGREF_FACTION_CDF_GROUND_B","RHSGREF_FACTION_NATIONALIST","RHSGREF_FACTION_TLA","RHSGREF_FACTION_TLA_G","RHSGREF_FACTION_UN","SG_STURM","SG_STURMPANZER","IND_C_F","RHS_FACTION_USARMY_WD","RHS_FACTION_USMC_WD","RHSGREF_FACTION_CDF_NG","RHSGREF_FACTION_CDF_NG_B","RHSGREF_FACTION_CHDKZ_G","RHSGREF_FACTION_HIDF","UK3CB_AAF_B","UK3CB_AAF_I","UK3CB_AAF_O","UK3CB_ADA_B","UK3CB_ADA_I","UK3CB_ADA_O","UK3CB_ADC_B","UK3CB_ADC_I","UK3CB_ADC_O","UK3CB_ADE_I","UK3CB_ADE_O","UK3CB_ADG_B","UK3CB_ADG_I","UK3CB_ADG_O","UK3CB_ADM_B","UK3CB_ADM_I","UK3CB_ADM_O","UK3CB_ADP_B","UK3CB_ADP_I","UK3CB_ADP_O","UK3CB_ADR_B","UK3CB_ADR_I","UK3CB_ADR_O","UK3CB_ANA_B","UK3CB_ANP_B","UK3CB_CCM_B","UK3CB_CCM_I","UK3CB_CCM_O","UK3CB_CHC_B","UK3CB_CHC_I","UK3CB_CHC_O","UK3CB_CHD_B","UK3CB_CHD_I","UK3CB_CHD_O","UK3CB_CPD_B","UK3CB_CPD_I","UK3CB_CPD_O","UK3CB_CW_SOV_O_EARLY","UK3CB_CW_SOV_O_LATE","UK3CB_CW_US_B_EARLY","UK3CB_CW_US_B_LATE","UK3CB_NAP_B","UK3CB_NAP_I","UK3CB_NAP_O","UK3CB_TKA_B","UK3CB_TKA_I","UK3CB_TKA_O","UK3CB_TKC_B","UK3CB_TKC_I","UK3CB_TKC_O","UK3CB_TKM_B","UK3CB_TKM_I","UK3CB_TKM_O","UK3CB_TKP_B","UK3CB_TKP_I","UK3CB_TKP_O","UK3CB_UN_B","UK3CB_UN_I","UNSUNG_AUS","UNSUNG_E","UNSUNG_EV","UNSUNG_G","UNSUNG_NZ","UNSUNG_ROK","UNSUNG_W","00VTN_MILFOR_MIW_EMR","00VTN_MILITIA_RU","01VTN_INSURGENTS_RU","01VTN_MILFOR_MIW","02VTN_MILFOR_RC","03VTN_INSURGENTS_ISIL","03VTN_MILFOR_SPPU","07VTN_MILFOR_TNG"]; //All factions _p_en = _allfaction select _p_en; //Select faction selected from mission parameter _allclasse = [[_p_en], _p_en_AA, _p_en_tank] call btc_fnc_mil_class; //Create classes from factions, you can combine factions like that: [[_p_en , "IND_F"], _p_en_AA, _p_en_tank] call btc_fnc_mil_class; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp index 149627130..15ca249fc 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/param.hpp @@ -79,8 +79,8 @@ class Params { }; class btc_p_en { // Enemy type: title = __EVAL(format [" %1", localize "STR_BTC_HAM_PARAM_FAC_ETYPE"]); - values[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314}; - texts[]={"0 - Bohemia Interactive: 2035 FIA (Side: WEST)","1 - Bohemia Interactive: LDF (Side: GUER)","2 - Bohemia Interactive: 2035 AAF (Side: GUER)","3 - Bohemia Interactive: 2035 FIA (Side: GUER)","4 - Bohemia Interactive: Pillards (Side: GUER)","5 - Bohemia Interactive: 2035 CSAT (Side: EAST)","6 - Bohemia Interactive: 2035 FIA (Side: EAST)","7 - EricJ: Taliban (Side: EAST)","8 -00VTN Bohemia Interactive: U.S.M.C. (MARPAT Woodland) (Side: WEST)","9 -01VTN Bohemia Interactive: U.S.M.C. (MARPAT Desert) (Side: WEST)","10 -05VTN Bohemia Interactive: TIA-SF (Side: WEST)","11 -AFR BIS/IceBreakr: Afrenian Army (Side: WEST)","12 -ARA Bohemia Interactive: Abramian Rebel Alliance (Side: WEST)","13 -ARL BIS/IceBreakr: ARL Lingor Rebels (Side: EAST)","14 -BLU Community Upgrade Project and ATLAS Mod: 2035 NATO (Side: WEST)","15 -CEC HcPookie: Cecanian Army (Side: EAST)","16 -CFP Drew: Afghan Police (Side: WEST)","17 -CFP CFP: Chadian Armed Forces (Side: WEST)","18 -CFP Tupolov: Army of the Czech Rep. (Jungle / Woodland) (Side: WEST)","19 -CFP CFP: Israeli Defense Force (Side: WEST)","20 -CFP Drew: Iraqi Army (Side: WEST)","21 -CFP Drew: Iraqi Police (Side: WEST)","22 -CFP Drew: Kenyan Defense Force (Side: WEST)","23 -CFP Drew: Malian Government Forces (Side: WEST)","24 -CFP CFP: Nigerian Army (Side: WEST)","25 -CFP Drew: Peshmerga (Side: WEST)","26 -CFP Drew: Uganda People's Defense Force (Side: WEST)","27 -CFP Drew: US 75th Rangers (Jungle/Woodland) (Side: WEST)","28 -CFP Drew: US Navy Seals (Arid / Desert) (Side: WEST)","29 -CFP Drew: US Navy Seals (Jungle / Woodland) (Side: WEST)","30 -CFP Drew: YPG (Side: WEST)","31 -CFP Drew: al-Nusra Front (Side: GUER)","32 -CFP Drew: Islamic State (Side: GUER)","33 -CFP Drew: Sudan People's Liberation Movement North (Side: GUER)","34 -CFP Drew: Sudan Revolutionary Front (Side: GUER)","35 -CFP Drew: South Sudan People's Defense Force (Side: GUER)","36 -CFP Drew: Tuareg Rebels (Side: GUER)","37 -CFP Tupolov: Western Ultranationalists (Side: GUER)","38 -CFP Drew: Abu Sayyaf Group (Side: EAST)","39 -CFP Drew: Al Qaeda (Side: EAST)","40 -CFP Drew: Al-Shabaab (Side: EAST)","41 -CFP Tupolov: Ansar Allah (Houthis) (Side: EAST)","42 -CFP Drew: Boko Haram (Side: EAST)","43 -CFP Drew: Central African Rebels (Side: EAST)","44 -CFP Drew: Hamas Al Qassam Brigades (Side: EAST)","45 -CFP Drew: Hezbollah (Side: EAST)","46 -CFP CFP: Iraqi Army (Hussein Regime) (Side: EAST)","47 -CFP Drew: Islamic Republic of Iran Army (Side: EAST)","48 -CFP Drew: Islamic State (Side: EAST)","49 -CFP Drew: Sudanese Armed Forces (Side: EAST)","50 -CFP CFP: Sudan Rapid Support Forces / Janjaweed (Side: EAST)","51 -CFP Drew: Somali Rebels (Side: EAST)","52 -CFP Drew: Sudan People's Liberation Movement In Opposition (Side: EAST)","53 -CFP Drew: Syrian Arab Army (Side: EAST)","54 -CFP Drew: Taliban Insurgents (Side: EAST)","55 -CUP Community Upgrade Project: Chernarus Defense Forces (Side: WEST)","56 -CUP Community Upgrade Project: Army of the Czech Rep. (Arid / Desert) (Side: WEST)","57 -CUP Community Upgrade Project: British Army (Arid / Desert) (Side: WEST)","58 -CUP Community Upgrade Project: Horizon Islands Legion (Side: WEST)","59 -CUP Community Upgrade Project: Royal New Zealand Navy (Side: WEST)","60 -CUP Community Upgrade Project: US Army (Arid / Desert) (Side: WEST)","61 -CUP Community Upgrade Project: US Marine Corps (Jungle / Woodland) (Side: WEST)","62 -CUP Community Upgrade Project: National Party of Chernarus (Side: GUER)","63 -CUP Community Upgrade Project: Royal Army Corps of Sahrani (Side: GUER)","64 -CUP Community Upgrade Project: United Nations (Side: GUER)","65 -CUP Community Upgrade Project: Chernarussian Movement of the Red Star (Side: EAST)","66 -CUP Community Upgrade Project: Russian Ground Forces (Jungle / Woodland) (Side: EAST)","67 -CUP Community Upgrade Project: Sahrani Liberation Army (Side: EAST)","68 -CUP Community Upgrade Project: Takistani Army (Side: EAST)","69 -CUP Community Upgrade Project: Takistani Militia (Side: EAST)","70 -CUP Community Upgrade Project: CUP Static Ships (Side: WEST)","71 -CUP_Units Drew: Chernarus Defense Forces [Winter] (Side: WEST)","72 -CUP_Units Community Upgrade Project: Bundeswehr (Jungle / Woodland) (Side: WEST)","73 -CUP_Units Community Upgrade Project: British Army (Jungle / Woodland) (Side: WEST)","74 -CUP_Units Drew: US Army 1991 [Arid/Desert] (Side: WEST)","75 -CUP_Units Drew: US Army 1991 [Woodland] (Side: WEST)","76 -CUP_Units Drew: US Army 2003 [Arid/Desert] (Side: WEST)","77 -CUP_Units Drew: US Army 2003 [Woodland] (Side: WEST)","78 -CUP_Units Tupolov: US CIA (Middle East) (Side: WEST)","79 -CUP_Units Community Upgrade Project: US Marine Corps (Arid / Desert) (Side: WEST)","80 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: GUER)","81 -CUP_Units Drew: PMC Wagner (Woodland) (Side: GUER)","82 -CUP_Units Drew: PMC Wagner (Winter) (Side: GUER)","83 -CUP_Units Community Upgrade Project: Russian Ground Forces (Arid / Desert) (Side: EAST)","84 -CUP_Units Tupolov: Russian National Guard (Side: EAST)","85 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: EAST)","86 -CUP_Units Drew: PMC Wagner (Woodland) (Side: EAST)","87 -CUP_Units Drew: PMC Wagner (Winter) (Side: EAST)","88 -CUP_Units Community Upgrade Project: Bundeswehr (Arid / Desert) (Side: WEST)","89 -CUP_Units Community Upgrade Project: ION PMC (Side: GUER)","90 -CUP_Units Community Upgrade Project: Takistani Locals (Side: GUER)","91 -CUP_Vehicles Drew: Afghan Army (Side: WEST)","92 -CUP_Vehicles Community Upgrade Project: US Army (Jungle / Woodland) (Side: WEST)","93 -CUP_Vehicles Drew: Chernarussian Movement of the Red Star [Winter] (Side: EAST)","94 -Enoch Bohemia Interactive: Spetsnaz (Side: EAST)","95 -Expansion Bohemia Interactive: 2035 CTRG (Side: WEST)","96 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: WEST)","97 -Expansion Bohemia Interactive: 2035 NATO (Pacific) (Side: WEST)","98 -Expansion Drew: Korean People's Army (Side: EAST)","99 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: EAST)","100 -FAP nzdfcrash/icebreakr: Fapovian Army (Side: EAST)","101 -FOW Bohemia Interactive: [DE] Heer (Side: WEST)","102 -FOW Bohemia Interactive: [JP] Navy Air Service (Side: WEST)","103 -FOW Bohemia Interactive: [UK] Fleet Air Arm (Side: GUER)","104 -FOW Bohemia Interactive: [US] Navy (Side: GUER)","105 -FOW FOW Team: [DE] Waffen-SS (Side: WEST)","106 -fow_mod Bohemia Interactive: [AUS] Army (Pacific) (Side: GUER)","107 -fow_mod Bohemia Interactive: [HI] Army (Side: GUER)","108 -fow_mod FOW team: [JP] Imperial Army (Side: WEST)","109 -fow_mod Bohemia Interactive: [DE] Luftwaffe (Side: WEST)","110 -fow_mod Bohemia Interactive: [UK] Army (Side: GUER)","111 -fow_mod FOW team: [US] Army (Europe) (Side: GUER)","112 -fow_mod Bohemia Interactive: [US] Army (Pacific) (Side: GUER)","113 -fow_mod FOW team: [US] Marines Corps (Side: GUER)","114 -GAL HcPookie: GAL (Government Army of Lingor) (Side: WEST)","115 -GANGBLUE BIS/IceBreakr: Blue Gang (Side: WEST)","116 -GANGRED BIS/IceBreakr: Red Gang (Side: EAST)","117 -gm Global Mobilization: Denmark (Side: WEST)","118 -gm Global Mobilization: East Germany (Side: EAST)","119 -gm Global Mobilization: East Germany (Borderguards) (Side: EAST)","120 -gm Global Mobilization: West Germany (Side: WEST)","121 -gm Global Mobilization: West Germany (Borderguards) (Side: WEST)","122 -gm Global Mobilization: Poland (Side: EAST)","123 -IBR Bohemia Interactive: Alienz (Side: GUER)","124 -ISC Bohemia Interactive: [ISC] al-Nusra Front (Side: GUER)","125 -ISC Bohemia Interactive: [ISC] Iraqi Police (Side: WEST)","126 -ISC Bohemia Interactive: [ISC] Islamic State (Side: GUER)","127 -ISC Bohemia Interactive: [ISC] Islamic State (Side: EAST)","128 -ISC Bohemia Interactive: [ISC] Peshmerga (Side: WEST)","129 -ISC Bohemia Interactive: [ISC] YPG (Side: WEST)","130 -Jets Bravo Zero One Studios: [OPCAN] United Rebel Army (Side: EAST)","131 -LIB AWAR: ACI (Side: GUER)","132 -LIB AWAR & Lennard: ARR (Side: WEST)","133 -LIB Lennard: Deutsches Afrikakorps (Side: WEST)","134 -LIB Reyhard & Joarius: FFI (Side: GUER)","135 -LIB IFA3 Team: Fallschirmjäger (Side: WEST)","136 -LIB AWAR: Armia Krajowa (Polonais) (Side: GUER)","137 -LIB AWAR & Lennard: MKHL (Side: WEST)","138 -LIB Lennard: US North African Corps (Side: GUER)","139 -LIB Lennard: NKVD (Side: EAST)","140 -LIB AWAR: RAAF (Side: GUER)","141 -LIB AWAR & Lennard: RBAF (Side: WEST)","142 -LIB AWAR: Red Army (Side: EAST)","143 -LIB AWAR & Lennard: [Winter] Red Army (Side: EAST)","144 -LIB IFA3 Team: UK Airborne (Side: GUER)","145 -LIB El Tyranos: [Winter] UK Airborne (Side: GUER)","146 -LIB IFA3 Team: UK Army (Side: GUER)","147 -LIB El Tyranos: [Winter] UK Army (Side: GUER)","148 -LIB IFA3 Team: UK Desert Rats (Side: GUER)","149 -LIB El Tyranos: 101st Airborne Division (Side: GUER)","150 -LIB El Tyranos: 82nd Airborne Division (Side: GUER)","151 -LIB IFA3 team: US Army (Side: GUER)","152 -LIB El Tyranos: [Winter] US Army (Side: GUER)","153 -LIB Lennard: US 2nd Ranger Battalion (Side: GUER)","154 -LIB AWAR: Wehrmacht (Side: WEST)","155 -LIB AWAR & Lennard: [Winter] Wehrmacht (Side: WEST)","156 -LM J.Burgess: [OPCAN] Colonial Guard Corps (Woodland) (Side: WEST)","157 -LM J.Burgess: [OPCAN] Colonial Military Authority (Side: GUER)","158 -LM J.Burgess: [OPCAN] Colonial Police Force (Side: GUER)","159 -LM J.Burgess: [OPCAN] Fridens (Side: EAST)","160 -LM J.Burgess: [OPCAN] Fridens (Desert) (Side: EAST)","161 -LM J.Burgess: [OPCAN] Fridens (Woodland) (Side: EAST)","162 -LM J.Burgess: [OPCAN] Koslovics (Side: EAST)","163 -LM J.Burgess: [OPCAN] Secessionist Union (Side: EAST)","164 -LM J.Burgess: [OPCAN] UNSC Army (Woodland) (Side: WEST)","165 -LM J.Burgess: [OPCAN] UNSC Army (Desert) (Side: WEST)","166 -LM J.Burgess: [OPCAN] UNSC Army (Mixed) (Side: WEST)","167 -LM J.Burgess: [OPCAN] UNSC Army Peace Corps (Side: WEST)","168 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Woodland) (Side: WEST)","169 -LM J.Burgess: [OPCAN] UNSC Marine Corps (CE:A) (Side: WEST)","170 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Desert) (Side: WEST)","171 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Infinite) (Side: WEST)","172 -LOP_LeightsOPFOR Project OPFOR: Afghan National Army and Police (Side: WEST)","173 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: GUER)","174 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: EAST)","175 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: GUER)","176 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: EAST)","177 -LOP_LeightsOPFOR Project OPFOR: Boko Haram (Side: EAST)","178 -LOP_LeightsOPFOR Project OPFOR: CDF (Project OPFOR) (Side: WEST)","179 -LOP_LeightsOPFOR Project OPFOR: ChDKZ (Project OPFOR) (Side: EAST)","180 -LOP_LeightsOPFOR Project OPFOR: Hellenic Armed Forces (Side: WEST)","181 -LOP_LeightsOPFOR Project OPFOR: Iraqi Armed Forces (Side: WEST)","182 -LOP_LeightsOPFOR Project OPFOR: Irish Republican Army (Side: EAST)","183 -LOP_LeightsOPFOR Project OPFOR: Iranian Armed Forces (Side: GUER)","184 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: GUER)","185 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: EAST)","186 -LOP_LeightsOPFOR Project OPFOR: Chernarussian National Insurgents (Side: GUER)","187 -LOP_LeightsOPFOR Project OPFOR: Korean People's Army (Side: EAST)","188 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: WEST)","189 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: GUER)","190 -LOP_LeightsOPFOR Project OPFOR: Private Military Company (Side: GUER)","191 -LOP_LeightsOPFOR Project OPFOR: Royal Army Corps of Sahrani (Side: GUER)","192 -LOP_LeightsOPFOR Project OPFOR: Sahrani Liberation Army (Side: EAST)","193 -LOP_LeightsOPFOR Project OPFOR: Syrian Armed Forces (Side: EAST)","194 -LOP_LeightsOPFOR Project OPFOR: Takistani Armed Forces (Side: EAST)","195 -LOP_LeightsOPFOR Project OPFOR: Turkish Armed Forces (Side: GUER)","196 -LOP_LeightsOPFOR Project OPFOR: Ultranationalists (Side: GUER)","197 -LOP_LeightsOPFOR Project OPFOR: Ukrainian Armed Forces (Side: GUER)","198 -LOP_LeightsOPFOR Project OPFOR: United Nations (Side: GUER)","199 -LOP_LeightsOPFOR Project OPFOR: United Armed Forces of Novorossiya (Side: EAST)","200 -LOP_LeightsOPFOR Project OPFOR: Ulster Volunteer Force (Side: GUER)","201 -Mark Bohemia Interactive: OTAN (forêt) (Side: WEST)","202 -MOL HcPookie: Molatian Army (Side: EAST)","203 -O jarrad96: Central African Rebels (Side: EAST)","204 -OPF Community Upgrade Project: 2035 CSAT (Pacific) (Side: EAST)","205 -OPTRE Article 2 Studios: Insurrectionists (Side: EAST)","206 -OPTRE Article 2 Studios: Colonial Police (Side: GUER)","207 -OPTRE Article 2 Studios: UNSCDF (Side: WEST)","208 -OPTRE_FC Article 2 Studios: Covenant (Side: EAST)","209 -RHS_AFRF Red Hammer Studios: [ISC] Iraqi Army (Side: WEST)","210 -RHS_AFRF Red Hammer Studios: Russia (MSV) (Side: EAST)","211 -RHS_AFRF Red Hammer Studios: Russia (RVA) (Side: EAST)","212 -RHS_AFRF Red Hammer Studios: Russia (TV) (Side: EAST)","213 -RHS_AFRF Red Hammer Studios: Russia (VDV) (Side: EAST)","214 -RHS_AFRF Red Hammer Studios: Russia (VMF) (Side: EAST)","215 -RHS_AFRF RHS: Russia (VPVO) (Side: EAST)","216 -RHS_AFRF Red Hammer Studios: Russia (VV) (Side: EAST)","217 -RHS_AFRF Red Hammer Studios: Russia (VVS - Grey) (Side: EAST)","218 -RHS_AFRF Red Hammer Studios: Russia (VVS - Camo) (Side: EAST)","219 -RHS_GREF Red Hammer Studios: [ISC] Syrian Arab Army (Side: EAST)","220 -RHS_GREF RHS (A2 port): CDF (Air Forces) (Side: GUER)","221 -RHS_GREF Red Hammer Studios: CDF (Air Forces) (Side: WEST)","222 -RHS_GREF Red Hammer Studios: ChDKZ (Side: EAST)","223 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: GUER)","224 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: EAST)","225 -RHS_SAF Red Hammer Studios: SAF (KOV) (Side: GUER)","226 -RHS_SAF RHS (A2 port): SAF (KOV) (Side: EAST)","227 -RHS_SAF RHS (A2 port): SAF (Casques Bleus) (Side: GUER)","228 -RHS_USAF Red Hammer Studios: USA (SOCOM) (Side: WEST)","229 -RHS_USAF Red Hammer Studios: USA (USAF) (Side: WEST)","230 -RHS_USAF Red Hammer Studios: USA (Army - D) (Side: WEST)","231 -RHS_USAF Red Hammer Studios: USA (USMC - D) (Side: WEST)","232 -RHS_USAF Red Hammer Studios: USA (Navy) (Side: WEST)","233 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: GUER)","234 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: WEST)","235 -RHSGREF Red Hammer Studios: NAPA (Side: GUER)","236 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: EAST)","237 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: GUER)","238 -RHSGREF Red Hammer Studios: CDF (UN) (Side: GUER)","239 -SG Stagler: Sturmtroopers (Side: WEST)","240 -SG Stagler: Tank Sturmtroopers (Side: WEST)","241 -Tank Bohemia Interactive: 2035 Syndikat (Side: GUER)","242 -UK3CB_Factions www.3commandobrigade.com: USA (Army - W) (Side: WEST)","243 -UK3CB_Factions www.3commandobrigade.com: USA (USMC - W) (Side: WEST)","244 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: GUER)","245 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: WEST)","246 -UK3CB_Factions www.3commandobrigade.com: ChDKZ (Side: GUER)","247 -UK3CB_Factions www.3commandobrigade.com: Horizon Islands Defence Force (Side: WEST)","248 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: WEST)","249 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: GUER)","250 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: EAST)","251 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: WEST)","252 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: GUER)","253 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: EAST)","254 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: WEST)","255 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: GUER)","256 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: EAST)","257 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: GUER)","258 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: EAST)","259 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: WEST)","260 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: GUER)","261 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: EAST)","262 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: WEST)","263 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: GUER)","264 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: EAST)","265 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: WEST)","266 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: GUER)","267 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: EAST)","268 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: WEST)","269 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: GUER)","270 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: EAST)","271 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Army (Side: WEST)","272 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Police (Side: WEST)","273 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Local Defence Volunteers (Side: WEST)","274 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Nationalist Militia (Side: GUER)","275 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Communist Militia (Side: EAST)","276 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: WEST)","277 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: GUER)","278 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: EAST)","279 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: WEST)","280 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: GUER)","281 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: EAST)","282 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Early (Side: EAST)","283 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Late (Side: EAST)","284 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Early (Side: WEST)","285 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Late (Side: WEST)","286 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: WEST)","287 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: GUER)","288 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: EAST)","289 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: WEST)","290 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: GUER)","291 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: EAST)","292 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Pro-Government Militia (Side: WEST)","293 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Tribal Fighters (Side: GUER)","294 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Insurgents (Side: EAST)","295 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: WEST)","296 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: GUER)","297 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: EAST)","298 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: WEST)","299 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: GUER)","300 -UNSUNG Bohemia Interactive: Australia (UNSUNG) (Side: WEST)","301 -UNSUNG Razorback: N.V.A. (UNSUNG) (Side: EAST)","302 -UNSUNG Bohemia Interactive: V.C. (UNSUNG) (Side: EAST)","303 -UNSUNG UNSUNG: A.R.V.N. (UNSUNG) (Side: GUER)","304 -UNSUNG Bohemia Interactive: New Zealand (UNSUNG) (Side: WEST)","305 -UNSUNG Bohemia Interactive: R.O.K. (UNSUNG) (Side: WEST)","306 -UNSUNG Bohemia Interactive: U.S. (UNSUNG) (Side: WEST)","307 -VTN VTN: Mechanized infantry (EMR) (Side: EAST)","308 -VTN VTN: Militia (Side: GUER)","309 -VTN VTN: Insurgents (Side: GUER)","310 -VTN VTN: Mechanized infantry (VSR-98) (Side: EAST)","311 -VTN VTN: GRU SSPB (Side: EAST)","312 -VTN VTN: ISIL (Side: GUER)","313 -VTN VTN: MVD SPPU (Side: EAST)","314 -VTN VTN: Takistan national guard (Side: EAST)"}; + values[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320}; + texts[]={"0 - Bohemia Interactive: 2035 FIA (Side: WEST)","1 - Bohemia Interactive: LDF (Side: GUER)","2 - Bohemia Interactive: 2035 AAF (Side: GUER)","3 - Bohemia Interactive: 2035 FIA (Side: GUER)","4 - Bohemia Interactive: Pillards (Side: GUER)","5 - Bohemia Interactive: 2035 CSAT (Side: EAST)","6 - Bohemia Interactive: 2035 FIA (Side: EAST)","7 - EricJ: Taliban (Side: EAST)","8 -00VTN Bohemia Interactive: U.S.M.C. (MARPAT Woodland) (Side: WEST)","9 -01VTN Bohemia Interactive: U.S.M.C. (MARPAT Desert) (Side: WEST)","10 -05VTN Bohemia Interactive: TIA-SF (Side: WEST)","11 -AFR BIS/IceBreakr: Afrenian Army (Side: WEST)","12 -ARA Bohemia Interactive: Abramian Rebel Alliance (Side: WEST)","13 -ARL BIS/IceBreakr: ARL Lingor Rebels (Side: EAST)","14 -BLU Community Upgrade Project and ATLAS Mod: 2035 NATO (Side: WEST)","15 -CEC HcPookie: Cecanian Army (Side: EAST)","16 -CFP Drew: Afghan Police (Side: WEST)","17 -CFP CFP: Chadian Armed Forces (Side: WEST)","18 -CFP Tupolov: Army of the Czech Rep. (Jungle / Woodland) (Side: WEST)","19 -CFP CFP: Israeli Defense Force (Side: WEST)","20 -CFP Drew: Iraqi Army (Side: WEST)","21 -CFP Drew: Iraqi Police (Side: WEST)","22 -CFP Drew: Kenyan Defense Force (Side: WEST)","23 -CFP Drew: Malian Government Forces (Side: WEST)","24 -CFP CFP: Nigerian Army (Side: WEST)","25 -CFP Drew: Peshmerga (Side: WEST)","26 -CFP Drew: Uganda People's Defense Force (Side: WEST)","27 -CFP Drew: US 75th Rangers (Jungle/Woodland) (Side: WEST)","28 -CFP Drew: US Navy Seals (Arid / Desert) (Side: WEST)","29 -CFP Drew: US Navy Seals (Jungle / Woodland) (Side: WEST)","30 -CFP Drew: YPG (Side: WEST)","31 -CFP Drew: al-Nusra Front (Side: GUER)","32 -CFP Drew: Islamic State (Side: GUER)","33 -CFP Drew: Sudan People's Liberation Movement North (Side: GUER)","34 -CFP Drew: Sudan Revolutionary Front (Side: GUER)","35 -CFP Drew: South Sudan People's Defense Force (Side: GUER)","36 -CFP Drew: Tuareg Rebels (Side: GUER)","37 -CFP Tupolov: Western Ultranationalists (Side: GUER)","38 -CFP Drew: Abu Sayyaf Group (Side: EAST)","39 -CFP Drew: Al Qaeda (Side: EAST)","40 -CFP Drew: Al-Shabaab (Side: EAST)","41 -CFP Tupolov: Ansar Allah (Houthis) (Side: EAST)","42 -CFP Drew: Boko Haram (Side: EAST)","43 -CFP Drew: Central African Rebels (Side: EAST)","44 -CFP Drew: Hamas Al Qassam Brigades (Side: EAST)","45 -CFP Drew: Hezbollah (Side: EAST)","46 -CFP CFP: Iraqi Army (Hussein Regime) (Side: EAST)","47 -CFP Drew: Islamic Republic of Iran Army (Side: EAST)","48 -CFP Drew: Islamic State (Side: EAST)","49 -CFP Drew: Sudanese Armed Forces (Side: EAST)","50 -CFP CFP: Sudan Rapid Support Forces / Janjaweed (Side: EAST)","51 -CFP Drew: Somali Rebels (Side: EAST)","52 -CFP Drew: Sudan People's Liberation Movement In Opposition (Side: EAST)","53 -CFP Drew: Syrian Arab Army (Side: EAST)","54 -CFP Drew: Taliban Insurgents (Side: EAST)","55 -CUP Community Upgrade Project: Chernarus Defense Forces (Side: WEST)","56 -CUP Community Upgrade Project: Army of the Czech Rep. (Arid / Desert) (Side: WEST)","57 -CUP Community Upgrade Project: British Army (Arid / Desert) (Side: WEST)","58 -CUP Community Upgrade Project: Horizon Islands Legion (Side: WEST)","59 -CUP Community Upgrade Project: Royal New Zealand Navy (Side: WEST)","60 -CUP Community Upgrade Project: US Army (Arid / Desert) (Side: WEST)","61 -CUP Community Upgrade Project: US Marine Corps (Jungle / Woodland) (Side: WEST)","62 -CUP Community Upgrade Project: National Party of Chernarus (Side: GUER)","63 -CUP Community Upgrade Project: Royal Army Corps of Sahrani (Side: GUER)","64 -CUP Community Upgrade Project: United Nations (Side: GUER)","65 -CUP Community Upgrade Project: Chernarussian Movement of the Red Star (Side: EAST)","66 -CUP Community Upgrade Project: Russian Ground Forces (Jungle / Woodland) (Side: EAST)","67 -CUP Community Upgrade Project: Sahrani Liberation Army (Side: EAST)","68 -CUP Community Upgrade Project: Takistani Army (Side: EAST)","69 -CUP Community Upgrade Project: Takistani Militia (Side: EAST)","70 -CUP Community Upgrade Project: CUP Static Ships (Side: WEST)","71 -CUP_Units Drew: Chernarus Defense Forces [Winter] (Side: WEST)","72 -CUP_Units Community Upgrade Project: Bundeswehr (Jungle / Woodland) (Side: WEST)","73 -CUP_Units Community Upgrade Project: British Army (Jungle / Woodland) (Side: WEST)","74 -CUP_Units Drew: US Army 1991 [Arid/Desert] (Side: WEST)","75 -CUP_Units Drew: US Army 1991 [Woodland] (Side: WEST)","76 -CUP_Units Drew: US Army 2003 [Arid/Desert] (Side: WEST)","77 -CUP_Units Drew: US Army 2003 [Woodland] (Side: WEST)","78 -CUP_Units Tupolov: US CIA (Middle East) (Side: WEST)","79 -CUP_Units Community Upgrade Project: US Marine Corps (Arid / Desert) (Side: WEST)","80 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: GUER)","81 -CUP_Units Drew: PMC Wagner (Woodland) (Side: GUER)","82 -CUP_Units Drew: PMC Wagner (Winter) (Side: GUER)","83 -CUP_Units Community Upgrade Project: Russian Ground Forces (Arid / Desert) (Side: EAST)","84 -CUP_Units Tupolov: Russian National Guard (Side: EAST)","85 -CUP_Units Drew: PMC Wagner (Arid / Desert) (Side: EAST)","86 -CUP_Units Drew: PMC Wagner (Woodland) (Side: EAST)","87 -CUP_Units Drew: PMC Wagner (Winter) (Side: EAST)","88 -CUP_Units Community Upgrade Project: Bundeswehr (Arid / Desert) (Side: WEST)","89 -CUP_Units Community Upgrade Project: ION PMC (Side: GUER)","90 -CUP_Units Community Upgrade Project: Takistani Locals (Side: GUER)","91 -CUP_Vehicles Drew: Afghan Army (Side: WEST)","92 -CUP_Vehicles Community Upgrade Project: US Army (Jungle / Woodland) (Side: WEST)","93 -CUP_Vehicles Drew: Chernarussian Movement of the Red Star [Winter] (Side: EAST)","94 -Enoch Bohemia Interactive: Spetsnaz (Side: EAST)","95 -Expansion Bohemia Interactive: 2035 CTRG (Side: WEST)","96 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: WEST)","97 -Expansion Bohemia Interactive: 2035 NATO (Pacific) (Side: WEST)","98 -Expansion Drew: Korean People's Army (Side: EAST)","99 -Expansion Bohemia Interactive: 2035 Gendarmerie (Side: EAST)","100 -FAP nzdfcrash/icebreakr: Fapovian Army (Side: EAST)","101 -FOW Bohemia Interactive: [DE] Heer (Side: WEST)","102 -FOW Bohemia Interactive: [JP] Navy Air Service (Side: WEST)","103 -FOW Bohemia Interactive: [UK] Fleet Air Arm (Side: GUER)","104 -FOW Bohemia Interactive: [US] Navy (Side: GUER)","105 -FOW FOW Team: [DE] Waffen-SS (Side: WEST)","106 -fow_mod Bohemia Interactive: [AUS] Army (Pacific) (Side: GUER)","107 -fow_mod Bohemia Interactive: [HI] Army (Side: GUER)","108 -fow_mod FOW team: [JP] Imperial Army (Side: WEST)","109 -fow_mod Bohemia Interactive: [DE] Luftwaffe (Side: WEST)","110 -fow_mod Bohemia Interactive: [UK] Army (Side: GUER)","111 -fow_mod FOW team: [US] Army (Europe) (Side: GUER)","112 -fow_mod Bohemia Interactive: [US] Army (Pacific) (Side: GUER)","113 -fow_mod FOW team: [US] Marines Corps (Side: GUER)","114 -GAL HcPookie: GAL (Government Army of Lingor) (Side: WEST)","115 -GANGBLUE BIS/IceBreakr: Blue Gang (Side: WEST)","116 -GANGRED BIS/IceBreakr: Red Gang (Side: EAST)","117 -gm Global Mobilization: Denmark (Side: WEST)","118 -gm Global Mobilization: East Germany (Side: EAST)","119 -gm Global Mobilization: East Germany (Borderguards) (Side: EAST)","120 -gm Global Mobilization: West Germany (Side: WEST)","121 -gm Global Mobilization: West Germany (Borderguards) (Side: WEST)","122 -gm Global Mobilization: Poland (Side: EAST)","123 -IBR Bohemia Interactive: Alienz (Side: GUER)","124 -ISC Bohemia Interactive: [ISC] al-Nusra Front (Side: GUER)","125 -ISC Bohemia Interactive: [ISC] Iraqi Police (Side: WEST)","126 -ISC Bohemia Interactive: [ISC] Islamic State (Side: GUER)","127 -ISC Bohemia Interactive: [ISC] Islamic State (Side: EAST)","128 -ISC Bohemia Interactive: [ISC] Peshmerga (Side: WEST)","129 -ISC Bohemia Interactive: [ISC] YPG (Side: WEST)","130 -Jets Bravo Zero One Studios: [OPCAN] United Rebel Army (Side: EAST)","131 -LIB AWAR: ACI (Side: GUER)","132 -LIB AWAR & Lennard: ARR (Side: WEST)","133 -LIB Lennard: Deutsches Afrikakorps (Side: WEST)","134 -LIB Reyhard & Joarius: FFI (Side: GUER)","135 -LIB IFA3 Team: Fallschirmjäger (Side: WEST)","136 -LIB AWAR: Armia Krajowa (Polonais) (Side: GUER)","137 -LIB AWAR & Lennard: MKHL (Side: WEST)","138 -LIB Lennard: US North African Corps (Side: GUER)","139 -LIB Lennard: NKVD (Side: EAST)","140 -LIB AWAR: RAAF (Side: GUER)","141 -LIB AWAR & Lennard: RBAF (Side: WEST)","142 -LIB AWAR: Red Army (Side: EAST)","143 -LIB AWAR & Lennard: [Winter] Red Army (Side: EAST)","144 -LIB IFA3 Team: UK Airborne (Side: GUER)","145 -LIB El Tyranos: [Winter] UK Airborne (Side: GUER)","146 -LIB IFA3 Team: UK Army (Side: GUER)","147 -LIB El Tyranos: [Winter] UK Army (Side: GUER)","148 -LIB IFA3 Team: UK Desert Rats (Side: GUER)","149 -LIB El Tyranos: 101st Airborne Division (Side: GUER)","150 -LIB El Tyranos: 82nd Airborne Division (Side: GUER)","151 -LIB IFA3 team: US Army (Side: GUER)","152 -LIB El Tyranos: [Winter] US Army (Side: GUER)","153 -LIB Lennard: US 2nd Ranger Battalion (Side: GUER)","154 -LIB AWAR: Wehrmacht (Side: WEST)","155 -LIB AWAR & Lennard: [Winter] Wehrmacht (Side: WEST)","156 -LM J.Burgess: [OPCAN] Colonial Guard Corps (Woodland) (Side: WEST)","157 -LM J.Burgess: [OPCAN] Colonial Military Authority (Side: GUER)","158 -LM J.Burgess: [OPCAN] Colonial Police Force (Side: GUER)","159 -LM J.Burgess: [OPCAN] Fridens (Side: EAST)","160 -LM J.Burgess: [OPCAN] Fridens (Desert) (Side: EAST)","161 -LM J.Burgess: [OPCAN] Fridens (Woodland) (Side: EAST)","162 -LM J.Burgess: [OPCAN] Koslovics (Side: EAST)","163 -LM J.Burgess: [OPCAN] Secessionist Union (Side: EAST)","164 -LM J.Burgess: [OPCAN] UNSC Army (Woodland) (Side: WEST)","165 -LM J.Burgess: [OPCAN] UNSC Army (Desert) (Side: WEST)","166 -LM J.Burgess: [OPCAN] UNSC Army (Mixed) (Side: WEST)","167 -LM J.Burgess: [OPCAN] UNSC Army Peace Corps (Side: WEST)","168 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Woodland) (Side: WEST)","169 -LM J.Burgess: [OPCAN] UNSC Marine Corps (CE:A) (Side: WEST)","170 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Desert) (Side: WEST)","171 -LM J.Burgess: [OPCAN] UNSC Marine Corps (Infinite) (Side: WEST)","172 -LOP_LeightsOPFOR Project OPFOR: Afghan National Army and Police (Side: WEST)","173 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: GUER)","174 -LOP_LeightsOPFOR Project OPFOR: African Militia (Side: EAST)","175 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: GUER)","176 -LOP_LeightsOPFOR Project OPFOR: Middle Eastern Militia (Side: EAST)","177 -LOP_LeightsOPFOR Project OPFOR: Boko Haram (Side: EAST)","178 -LOP_LeightsOPFOR Project OPFOR: CDF (Project OPFOR) (Side: WEST)","179 -LOP_LeightsOPFOR Project OPFOR: ChDKZ (Project OPFOR) (Side: EAST)","180 -LOP_LeightsOPFOR Project OPFOR: Hellenic Armed Forces (Side: WEST)","181 -LOP_LeightsOPFOR Project OPFOR: Iraqi Armed Forces (Side: WEST)","182 -LOP_LeightsOPFOR Project OPFOR: Irish Republican Army (Side: EAST)","183 -LOP_LeightsOPFOR Project OPFOR: Iranian Armed Forces (Side: GUER)","184 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: GUER)","185 -LOP_LeightsOPFOR Project OPFOR: Islamic State (Side: EAST)","186 -LOP_LeightsOPFOR Project OPFOR: Chernarussian National Insurgents (Side: GUER)","187 -LOP_LeightsOPFOR Project OPFOR: Korean People's Army (Side: EAST)","188 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: WEST)","189 -LOP_LeightsOPFOR Project OPFOR: Kurdish Peshmerga Forces (Side: GUER)","190 -LOP_LeightsOPFOR Project OPFOR: Private Military Company (Side: GUER)","191 -LOP_LeightsOPFOR Project OPFOR: Royal Army Corps of Sahrani (Side: GUER)","192 -LOP_LeightsOPFOR Project OPFOR: Sahrani Liberation Army (Side: EAST)","193 -LOP_LeightsOPFOR Project OPFOR: Syrian Armed Forces (Side: EAST)","194 -LOP_LeightsOPFOR Project OPFOR: Takistani Armed Forces (Side: EAST)","195 -LOP_LeightsOPFOR Project OPFOR: Turkish Armed Forces (Side: GUER)","196 -LOP_LeightsOPFOR Project OPFOR: Ultranationalists (Side: GUER)","197 -LOP_LeightsOPFOR Project OPFOR: Ukrainian Armed Forces (Side: GUER)","198 -LOP_LeightsOPFOR Project OPFOR: United Nations (Side: GUER)","199 -LOP_LeightsOPFOR Project OPFOR: United Armed Forces of Novorossiya (Side: EAST)","200 -LOP_LeightsOPFOR Project OPFOR: Ulster Volunteer Force (Side: GUER)","201 -Mark Bohemia Interactive: OTAN (forêt) (Side: WEST)","202 -MOL HcPookie: Molatian Army (Side: EAST)","203 -O jarrad96: Central African Rebels (Side: EAST)","204 -OPF Community Upgrade Project: 2035 CSAT (Pacific) (Side: EAST)","205 -OPTRE Article 2 Studios: Covenant (Side: EAST)","206 -OPTRE Article 2 Studios: Insurrectionists (Side: EAST)","207 -OPTRE Article 2 Studios: Colonial Police (Side: GUER)","208 -OPTRE Article 2 Studios: UNSCDF (Side: WEST)","209 -RHS_AFRF Red Hammer Studios: [ISC] Iraqi Army (Side: WEST)","210 -RHS_AFRF Red Hammer Studios: Russia (MSV) (Side: EAST)","211 -RHS_AFRF Red Hammer Studios: Russia (RVA) (Side: EAST)","212 -RHS_AFRF Red Hammer Studios: Russia (TV) (Side: EAST)","213 -RHS_AFRF Red Hammer Studios: Russia (VDV) (Side: EAST)","214 -RHS_AFRF Red Hammer Studios: Russia (VMF) (Side: EAST)","215 -RHS_AFRF RHS: Russia (VPVO) (Side: EAST)","216 -RHS_AFRF Red Hammer Studios: Russia (VV) (Side: EAST)","217 -RHS_AFRF Red Hammer Studios: Russia (VVS - Grey) (Side: EAST)","218 -RHS_AFRF Red Hammer Studios: Russia (VVS - Camo) (Side: EAST)","219 -RHS_GREF Red Hammer Studios: [ISC] Syrian Arab Army (Side: EAST)","220 -RHS_GREF RHS (A2 port): CDF (Air Forces) (Side: GUER)","221 -RHS_GREF Red Hammer Studios: CDF (Air Forces) (Side: WEST)","222 -RHS_GREF Red Hammer Studios: ChDKZ (Side: EAST)","223 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: GUER)","224 -RHS_SAF RHS (A2 port): SAF (RVIPVO) (Side: EAST)","225 -RHS_SAF Red Hammer Studios: SAF (KOV) (Side: GUER)","226 -RHS_SAF RHS (A2 port): SAF (KOV) (Side: EAST)","227 -RHS_SAF RHS (A2 port): SAF (Casques Bleus) (Side: GUER)","228 -RHS_USAF Red Hammer Studios: USA (SOCOM) (Side: WEST)","229 -RHS_USAF Red Hammer Studios: USA (USAF) (Side: WEST)","230 -RHS_USAF Red Hammer Studios: USA (Army - D) (Side: WEST)","231 -RHS_USAF Red Hammer Studios: USA (USMC - D) (Side: WEST)","232 -RHS_USAF Red Hammer Studios: USA (Navy) (Side: WEST)","233 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: GUER)","234 -RHSGREF www.3commandobrigade.com: CDF (Ground Forces) (Side: WEST)","235 -RHSGREF Red Hammer Studios: NAPA (Side: GUER)","236 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: EAST)","237 -RHSGREF Red Hammer Studios: Tanoan Liberation Army (Side: GUER)","238 -RHSGREF Red Hammer Studios: CDF (UN) (Side: GUER)","239 -SG Stagler: Sturmtroopers (Side: WEST)","240 -SG Stagler: Tank Sturmtroopers (Side: WEST)","241 -Tank Bohemia Interactive: 2035 Syndikat (Side: GUER)","242 -UK3CB_Factions www.3commandobrigade.com: USA (Army - W) (Side: WEST)","243 -UK3CB_Factions www.3commandobrigade.com: USA (USMC - W) (Side: WEST)","244 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: GUER)","245 -UK3CB_Factions www.3commandobrigade.com: CDF (National Guard) (Side: WEST)","246 -UK3CB_Factions www.3commandobrigade.com: ChDKZ (Side: GUER)","247 -UK3CB_Factions www.3commandobrigade.com: Horizon Islands Defence Force (Side: WEST)","248 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: WEST)","249 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: GUER)","250 -UK3CB_Factions www.3commandobrigade.com: 3CB AAF (Side: EAST)","251 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: WEST)","252 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: GUER)","253 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army (Side: EAST)","254 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: WEST)","255 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: GUER)","256 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilians (Side: EAST)","257 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: GUER)","258 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Extremists (Side: EAST)","259 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: WEST)","260 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: GUER)","261 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Civilian Militia (Side: EAST)","262 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: WEST)","263 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: GUER)","264 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Militia (Side: EAST)","265 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: WEST)","266 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: GUER)","267 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert National Police (Side: EAST)","268 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: WEST)","269 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: GUER)","270 -UK3CB_Factions www.3commandobrigade.com: 3CB African Desert Army Paramilitary (Side: EAST)","271 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Army (Side: WEST)","272 -UK3CB_Factions www.3commandobrigade.com: 3CB Afghan National Police (Side: WEST)","273 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Local Defence Volunteers (Side: WEST)","274 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Nationalist Militia (Side: GUER)","275 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Communist Militia (Side: EAST)","276 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: WEST)","277 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: GUER)","278 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Civilians (Side: EAST)","279 -UK3CB_Factions www.3commandobrigade.com: 3CB ChDSZ (Chernarussian Movement of the Blue Star) (Side: WEST)","280 -UK3CB_Factions www.3commandobrigade.com: 3CB ChDZZ (Chernarussian Movement of the Green Star) (Side: GUER)","281 -UK3CB_Factions www.3commandobrigade.com: 3CB ChDKZ (Chernarussian Movement of the Red Star) (Side: EAST)","282 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: WEST)","283 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: GUER)","284 -UK3CB_Factions www.3commandobrigade.com: 3CB Chernarus Police Department (Side: EAST)","285 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Early (Side: EAST)","286 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War USSR - Late (Side: EAST)","287 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Early (Side: WEST)","288 -UK3CB_Factions www.3commandobrigade.com: 3CB Cold War US - Late (Side: WEST)","289 -UK3CB_Factions www.3commandobrigade.com: 3CB NAPA (The National Party) (Side: WEST)","290 -UK3CB_Factions www.3commandobrigade.com: 3CB NAPA (The National Party) (Side: GUER)","291 -UK3CB_Factions www.3commandobrigade.com: 3CB NAPA (The National Party) (Side: EAST)","292 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: WEST)","293 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: GUER)","294 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Army (Side: EAST)","295 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: WEST)","296 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: GUER)","297 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Civilians (Side: EAST)","298 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Pro-Government Militia (Side: WEST)","299 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Tribal Fighters (Side: GUER)","300 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan Insurgents (Side: EAST)","301 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: WEST)","302 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: GUER)","303 -UK3CB_Factions www.3commandobrigade.com: 3CB Takistan National Police (Side: EAST)","304 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: WEST)","305 -UK3CB_Factions www.3commandobrigade.com: 3CB UN Peacekeepers (Side: GUER)","306 -UNSUNG Bohemia Interactive: Australia (UNSUNG) (Side: WEST)","307 -UNSUNG smicdaro, Unsung: N.V.A. (UNSUNG) (Side: EAST)","308 -UNSUNG Bohemia Interactive: V.C. (UNSUNG) (Side: EAST)","309 -UNSUNG UNSUNG: A.R.V.N. (UNSUNG) (Side: GUER)","310 -UNSUNG Bohemia Interactive: New Zealand (UNSUNG) (Side: WEST)","311 -UNSUNG Bohemia Interactive: R.O.K. (UNSUNG) (Side: WEST)","312 -UNSUNG Bohemia Interactive: U.S. (UNSUNG) (Side: WEST)","313 -VTN VTN: Mechanized infantry (EMR) (Side: EAST)","314 -VTN VTN: Militia (Side: GUER)","315 -VTN VTN: Insurgents (Side: GUER)","316 -VTN VTN: Mechanized infantry (VSR-98) (Side: EAST)","317 -VTN VTN: GRU SSPB (Side: EAST)","318 -VTN VTN: ISIL (Side: GUER)","319 -VTN VTN: MVD SPPU (Side: EAST)","320 -VTN VTN: Takistan national guard (Side: EAST)"}; default = 6; }; class btc_p_AA { // Anti-Air infantry: diff --git a/README.md b/README.md index d89be6a99..c73b03ebf 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Online [wiki available](http://vdauphin.github.io/HeartsAndMinds/). - [Spectrum devices](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#spectrum-devices) - Under the hood - A lot of optional gameplay - - More than 315 enemies and 27 civilians factions available + - More than 321 enemies and 27 civilians factions available - Full saving Database ([even player markers](http://vdauphin.github.io/HeartsAndMinds/InGame-documentation#headless--database)) - Easy map change (See [here](http://vdauphin.github.io/HeartsAndMinds/Change-MAP-of-Hearts-and-Minds)) - Auto Headless support From a5d93a2e6447a9c7ebb931589dcf60b47a4b7279 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 12 Feb 2021 01:16:28 +0100 Subject: [PATCH 257/264] FIX: Can't remove IED wreck on deidcated server --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index e51d7d27a..976f944ce 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -347,7 +347,7 @@ if (isServer) then { }); btc_type_ieds = _ieds - ["Land_Garbage_line_F","Land_Garbage_square3_F","Land_Garbage_square5_F"]; btc_model_ieds = btc_type_ieds apply {(toLower getText(_cfgVehicles >> _x >> "model")) select [1]}; - btc_type_blacklist = btc_type_tags + ["UserTexture1m_F"]; + btc_type_blacklist = btc_type_tags + ["UserTexture1m_F"]; publicVariable "btc_type_blacklist"; btc_groundWeaponHolder = []; }; From 35f2cc65ce598fe0034aeecc413562fbd90b6c95 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Fri, 12 Feb 2021 01:34:14 +0100 Subject: [PATCH 258/264] FIX: Player name not display when cleaning IED wreck --- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index 1c79e4338..a1b7c24ab 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -55,7 +55,7 @@ btc_ied_deleteOn = [{ ) then { private _pos = getPosATL _ied; _ied call CBA_fnc_deleteEntity; - [btc_rep_bonus_IEDCleanUp, _unit] remoteExecCall ["btc_fnc_rep_change", 2]; - ["btc_ied_deleted", [_pos, _unit]] call CBA_fnc_serverEvent; + [btc_rep_bonus_IEDCleanUp, player] remoteExecCall ["btc_fnc_rep_change", 2]; + ["btc_ied_deleted", [_pos, player]] call CBA_fnc_serverEvent; }; }, 1, [_vehicle, (_maxWidth max _maxLength) / 2]] call CBA_fnc_addPerFrameHandler; From bc9367bd3c5548747c322ca2af1b47f6c4c99da8 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 13 Feb 2021 10:05:29 +0100 Subject: [PATCH 259/264] Change release draft milestone --- .github/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 086016438..62d079732 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -18,7 +18,7 @@ template: | - [Iron Front 3 Lite](http://www.armaholic.com/page.php?id=24714), [Face of War WW2](http://www.armaholic.com/page.php?id=31945), - [Operation: TREBUCHET](http://www.armaholic.com/page.php?id=28614), [Operation: TREBUCHET First Contact](https://steamcommunity.com/workshop/filedetails/?id=1572627279), [OPCAN - OPTRE Reskin Pack](https://steamcommunity.com/sharedfiles/filedetails/?id=2016312756). - [Changelog](https://github.com/Vdauphin/HeartsAndMinds/milestone/62?closed=1): + [Changelog](https://github.com/Vdauphin/HeartsAndMinds/milestone/52?closed=1): - Mission.sqm/Param.hpp not changed. $CHANGES \ No newline at end of file From fc0a71ec05e55bf94b42c24a4cc76a5191f921cf Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sat, 13 Feb 2021 23:25:46 +0100 Subject: [PATCH 260/264] FIX: convoy side mission start before the game start --- .../core/fnc/side/capture_officer.sqf | 4 ++-- =BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf index 8f979e29a..491ddbfa1 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/capture_officer.sqf @@ -69,11 +69,11 @@ private _markers = [_marker1, _marker2, _area]; /// Show info path\\\ private _veh_types = btc_civ_type_veh select {!(_x isKindOf "air")}; private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; -private _startingPath = serverTime; +private _startingPath = time; waitUntil { !isNil {_agent getVariable "btc_path"} || - {serverTime > _startingPath + 10} + {time > _startingPath + 10} }; private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf index ed79c7f42..1eb6db04c 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/side/convoy.sqf @@ -69,11 +69,11 @@ private _markers = [_marker1, _marker2, _area]; /// Show info path\\\ private _veh_types = btc_type_motorized select {!(_x isKindOf "air")}; private _agent = [btc_fnc_info_path, [_pos1, _pos2, _taskID, _veh_types select 0]] call CBA_fnc_directCall; -private _startingPath = serverTime; +private _startingPath = time; waitUntil { !isNil {_agent getVariable "btc_path"} || - {serverTime > _startingPath + 10} + {time > _startingPath + 10} }; private _path = _agent getVariable ["btc_path", []]; if (count _path <= 35) exitWith { From 046fdc55cb75248bccf570ac4fa4ca08d41fb949 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 17 Feb 2021 18:18:58 +0100 Subject: [PATCH 261/264] Improve github issue message --- .github/ISSUE_TEMPLATE/bug_report.md | 8 +++----- .github/ISSUE_TEMPLATE/question.md | 3 ++- .github/pull_request_template.md | 2 +- .github/release-drafter.yml | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 47a517a42..74935d5dd 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,23 +7,21 @@ assignees: '' --- -(Use English only.) + -## Before reporting + **Arma 3 Version:** `x.xx` (stable / rc / dev) **CBA Version:** `3.x.x` (stable / dev + commit hash) **ACE3 Version:** `3.x.x` (stable / dev + commit hash) -**RHS USAF Version:** `0.x.x` (stable / dev + commit hash) **Hearts and minds Version:** `1.x.x` (stable / dev + commit hash) **Mods:** ``` - CBA_A3 - ace -- RHS USAF ``` **Description:** diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 0805f9f85..53f4e88ca 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -7,4 +7,5 @@ assignees: '' --- -(Use English only.) + + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d8df67e73..d7b202d79 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,4 +1,4 @@ -(Use English only.) + - FIX/Add: here write the line will be used in the changelog (@Author1, @Author2 ...). diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 62d079732..fd0d67af7 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -8,9 +8,9 @@ template: | Requires [ACE3](http://www.armaholic.com/page.php?id=28557). _[Optionals :](https://github.com/Vdauphin/HeartsAndMinds/files/5147451/All.Hearts.and.Minds.mods.html.zip)_ + - [CUP units and vehicles mod](https://forums.bistudio.com/topic/179326-community-upgrade-project-cup/), [Community Factions Project](https://github.com/tupolov/cfp/releases), - [RHS USAF](http://www.armaholic.com/page.php?id=27149), [RHS AFRF](http://www.armaholic.com/page.php?id=27150), [RHS GREF](http://www.armaholic.com/page.php?id=30998), [RHS SAF](http://www.armaholic.com/page.php?id=32203), - [RDS A2 Civilian Pack mod](https://forums.bistudio.com/topic/170165-rds-a2-civilian-pack/), - - [CUP units and vehicles mod](https://forums.bistudio.com/topic/179326-community-upgrade-project-cup/), [Community Factions Project](https://github.com/tupolov/cfp/releases), - [3CB Factions](https://steamcommunity.com/sharedfiles/filedetails/?id=1673456286), [Project OPFOR](https://forums.bistudio.com/topic/193185-project-opfor/), [Iraqi-Syrian Conflic](http://www.armaholic.com/page.php?id=28406), [Central African Rebels [SFF-R]](http://www.armaholic.com/page.php?id=32465), - [FAP Units (Foes & Allies Pack)](http://www.armaholic.com/page.php?id=30706), [VETERAN](https://steamcommunity.com/workshop/filedetails/?id=1132375156), - [Taliban Fighters by EricJ](http://www.armaholic.com/page.php?id=29543), From 02f3f9a0a6618789205d105054fa0d603c6fd3e6 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Thu, 18 Feb 2021 18:20:23 +0100 Subject: [PATCH 262/264] FIX: Nemmera delete blood and return reputation --- .../core/fnc/ied/deleteLoop.sqf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf index a1b7c24ab..ffeb03d89 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/ied/deleteLoop.sqf @@ -41,6 +41,11 @@ btc_ied_deleteOn = [{ ]; private _ieds = allSimpleObjects [] - allSimpleObjects btc_type_blacklist; + _ieds = (_ieds inAreaArray [getPosWorld _vehicle, 50, 50]) select { + !("ace_drop" in ((getModelInfo _x) select 0)) + }; + if (_ieds isEqualTo []) exitWith {}; + _ieds = _ieds apply {[_x distance _vehicle, _x]}; _ieds sort true; From b847e7297d237dea1bc20544df17cafb2db57cb1 Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Sun, 21 Feb 2021 11:57:05 +0100 Subject: [PATCH 263/264] FIX: Misisng some location type --- .../core/fnc/city/activate.sqf | 17 +++++++++++++++++ .../core/fnc/city/init.sqf | 2 +- .../define_mod.sqf | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf index df70c90ae..df7adca55 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/activate.sqf @@ -62,12 +62,16 @@ private _spawningRadius = _radius/2; if (!(_city getVariable ["initialized", false])) then { private _ratio = (switch _type do { case "Hill" : {random 1}; + case "VegetationFir" : {random 1}; + case "BorderCrossing" : {random 2}; case "NameLocal" : {random 2.5}; + case "StrongpointArea" : {random 3}; case "NameVillage" : {random 3.5}; case "NameCity" : {random 5}; case "NameCityCapital" : {random 6}; case "Airport" : {0}; case "NameMarine" : {0}; + default {0}; }); private _ratio_ied = _ratio; @@ -102,7 +106,10 @@ if !(_data_units isEqualTo []) then { // Maximum number of enemy group private _max_number_group = (switch _type do { case "Hill" : {1}; + case "VegetationFir" : {1}; + case "BorderCrossing" : {2}; case "NameLocal" : {2}; + case "StrongpointArea" : {3}; case "NameVillage" : {3}; case "NameCity" : {7}; case "NameCityCapital" : {15}; @@ -122,7 +129,10 @@ if !(_data_units isEqualTo []) then { if (_has_en) then { private _max_number_group = (switch _type do { + case "VegetationFir" : {1}; + case "BorderCrossing" : {2}; case "NameLocal" : {1}; + case "StrongpointArea" : {2}; case "NameVillage" : {2}; case "NameCity" : {4}; case "NameCityCapital" : {5}; @@ -134,7 +144,10 @@ if !(_data_units isEqualTo []) then { // Spawn civilians private _max_number_group = (switch _type do { + case "VegetationFir" : {1}; + case "BorderCrossing" : {0}; case "NameLocal" : {3}; + case "StrongpointArea" : {0}; case "NameVillage" : {6}; case "NameCity" : {10}; case "NameCityCapital" : {19}; @@ -153,6 +166,7 @@ if (btc_p_animals_group_ratio > 0) then { // Spawn animals private _max_number_animalsGroup = (switch _type do { case "Hill" : {3}; + case "VegetationFir" : {3}; case "NameLocal" : {3}; case "NameVillage" : {2}; case "NameCity" : {1}; @@ -241,12 +255,15 @@ if !(_city getVariable ["has_suicider", false]) then { if (_city getVariable ["data_tags", []] isEqualTo []) then { private _tag_number = (switch _type do { case "Hill" : {random 1}; + case "BorderCrossing" : {random 1}; case "NameLocal" : {random 2.5}; + case "StrongpointArea" : {random 3}; case "NameVillage" : {random 3.5}; case "NameCity" : {random 5}; case "NameCityCapital" : {random 6}; case "Airport" : {random 6}; case "NameMarine" : {0}; + default {0}; }); if (_has_en) then { diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf index e7b99e155..ba312642b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/fnc/city/init.sqf @@ -26,7 +26,7 @@ params [ private _locations = configfile >> "cfgworlds" >> worldname >> "names"; -private _cities = ["NameVillage", "NameCity", "NameCityCapital", "NameLocal", "Hill", "Airport"]; +private _cities = ["NameVillage", "NameCity", "NameCityCapital", "NameLocal", "Hill", "Airport", "StrongpointArea", "BorderCrossing", "VegetationFir"]; if (btc_p_sea) then {_cities pushBack "NameMarine";}; btc_city_all = []; diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf index d6671d9e9..49bad806b 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/define_mod.sqf @@ -1,7 +1,7 @@ btc_custom_loc = [ /* DESCRIPTION: [POS(Array),TYPE(String),NAME(String),RADIUS (Number),IS OCCUPIED(Bool)] - Possible types: "NameVillage","NameCity","NameCityCapital","NameLocal","Hill","Airport","NameMarine" + Possible types: "NameVillage","NameCity","NameCityCapital","NameLocal","Hill","Airport","NameMarine", "StrongpointArea", "BorderCrossing", "VegetationFir" EXAMPLE: [[13132.8,3315.07,0.00128174],"NameVillage","Mountain 1",800,true] */ ]; From 6d8d477ddb29abd9e20a1c3c1179c08a19337a3d Mon Sep 17 00:00:00 2001 From: Vdauphin Date: Wed, 24 Feb 2021 14:51:52 +0100 Subject: [PATCH 264/264] Add: 1.21 --- =BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf | 2 +- =BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf index 404093c82..361020af2 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/def/mission.sqf @@ -1,5 +1,5 @@ -btc_version = [1, 20.1, 10]; +btc_version = [1, 21, 0]; diag_log format (["=BTC= HEARTS AND MINDS VERSION %1.%2.%3"] + btc_version); //Param diff --git a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf index a4f37f05a..021e1ea87 100644 --- a/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf +++ b/=BTC=co@30_Hearts_and_Minds.Altis/core/init_server.sqf @@ -8,7 +8,7 @@ setTimeMultiplier btc_p_acctime; [["btc_dty", "btc_m"], 1] call btc_fnc_task_create; if (btc_db_load && {profileNamespace getVariable [format ["btc_hm_%1_db", worldName], false]}) then { - if ((profileNamespace getVariable [format ["btc_hm_%1_version", worldName], 1.13]) in [btc_version select 1]) then { + if ((profileNamespace getVariable [format ["btc_hm_%1_version", worldName], 1.13]) in [btc_version select 1, 20.1]) then { [] call compile preprocessFileLineNumbers "core\fnc\db\load.sqf"; } else { [] call compile preprocessFileLineNumbers "core\fnc\db\load_old.sqf"; diff --git a/README.md b/README.md index 982721025..cfd45e15b 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@

- - H&M Version + + H&M Version H&M Downloads