From f051a5f4bfcc4422081cd38bd341be96c0d23526 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 08:55:39 +0100 Subject: [PATCH 01/18] Create vehicles component with car alarm WIP --- addons/vehicles/$PBOPREFIX$ | 1 + addons/vehicles/CfgEventHandlers.hpp | 15 +++++++ addons/vehicles/CfgSounds.hpp | 9 ++++ addons/vehicles/XEH_PREP.hpp | 2 + addons/vehicles/XEH_postInit.sqf | 9 ++++ addons/vehicles/XEH_preInit.sqf | 4 ++ addons/vehicles/XEH_preStart.sqf | 2 + addons/vehicles/assets/sounds/CarAlarm.ogg | Bin 0 -> 72298 bytes addons/vehicles/config.cpp | 17 ++++++++ addons/vehicles/functions/fnc_carAlarm.sqf | 26 ++++++++++++ .../vehicles/functions/fnc_carAlarmLoop.sqf | 40 ++++++++++++++++++ .../vehicles/functions/script_component.hpp | 1 + addons/vehicles/script_component.hpp | 14 ++++++ 13 files changed, 140 insertions(+) create mode 100644 addons/vehicles/$PBOPREFIX$ create mode 100644 addons/vehicles/CfgEventHandlers.hpp create mode 100644 addons/vehicles/CfgSounds.hpp create mode 100644 addons/vehicles/XEH_PREP.hpp create mode 100644 addons/vehicles/XEH_postInit.sqf create mode 100644 addons/vehicles/XEH_preInit.sqf create mode 100644 addons/vehicles/XEH_preStart.sqf create mode 100644 addons/vehicles/assets/sounds/CarAlarm.ogg create mode 100644 addons/vehicles/config.cpp create mode 100644 addons/vehicles/functions/fnc_carAlarm.sqf create mode 100644 addons/vehicles/functions/fnc_carAlarmLoop.sqf create mode 100644 addons/vehicles/functions/script_component.hpp create mode 100644 addons/vehicles/script_component.hpp diff --git a/addons/vehicles/$PBOPREFIX$ b/addons/vehicles/$PBOPREFIX$ new file mode 100644 index 00000000..2da77398 --- /dev/null +++ b/addons/vehicles/$PBOPREFIX$ @@ -0,0 +1 @@ +z\afsk\addons\vehicles \ No newline at end of file diff --git a/addons/vehicles/CfgEventHandlers.hpp b/addons/vehicles/CfgEventHandlers.hpp new file mode 100644 index 00000000..e90bed41 --- /dev/null +++ b/addons/vehicles/CfgEventHandlers.hpp @@ -0,0 +1,15 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/vehicles/CfgSounds.hpp b/addons/vehicles/CfgSounds.hpp new file mode 100644 index 00000000..8593d26b --- /dev/null +++ b/addons/vehicles/CfgSounds.hpp @@ -0,0 +1,9 @@ +class CfgSounds +{ + class CarAlarm + { + name = "CarAlarm"; + sound[] = {QPATHTOF(assets\sounds\Caralarm.ogg), "db+10", 1.0}; + titles[] = {}; + }; +}; diff --git a/addons/vehicles/XEH_PREP.hpp b/addons/vehicles/XEH_PREP.hpp new file mode 100644 index 00000000..95e15d02 --- /dev/null +++ b/addons/vehicles/XEH_PREP.hpp @@ -0,0 +1,2 @@ +PREP(carAlarm); +PREP(carAlarmLoop); diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf new file mode 100644 index 00000000..00422170 --- /dev/null +++ b/addons/vehicles/XEH_postInit.sqf @@ -0,0 +1,9 @@ +#include "script_component.hpp" + +if (isServer) then { + +}; + +if (hasInterface) then { + [QGVAR(carAlarm), FUNC(carAlarm)] call CBA_fnc_addEventHandler; +}; diff --git a/addons/vehicles/XEH_preInit.sqf b/addons/vehicles/XEH_preInit.sqf new file mode 100644 index 00000000..a9b1762e --- /dev/null +++ b/addons/vehicles/XEH_preInit.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" +ADDON = false; +#include "XEH_PREP.hpp" +ADDON = true; diff --git a/addons/vehicles/XEH_preStart.sqf b/addons/vehicles/XEH_preStart.sqf new file mode 100644 index 00000000..a51262a3 --- /dev/null +++ b/addons/vehicles/XEH_preStart.sqf @@ -0,0 +1,2 @@ +#include "script_component.hpp" +#include "XEH_PREP.hpp" diff --git a/addons/vehicles/assets/sounds/CarAlarm.ogg b/addons/vehicles/assets/sounds/CarAlarm.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bc2a7a55bb9038751e0fc4fc7579486e2a8ce4bb GIT binary patch literal 72298 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
    jpZ6h<_T*;oL5{d{fMVfd4! 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ŹId}wPhw*j*lR#yqq2+TPWa~ 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 TN&o-=`Ng>v0079Jy#m7lhG5bi literal 0 HcmV?d00001 diff --git a/addons/vehicles/config.cpp b/addons/vehicles/config.cpp new file mode 100644 index 00000000..c028c94a --- /dev/null +++ b/addons/vehicles/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {}; + author = "ArmaForces"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgMissions.hpp" +#include "CfgSounds.hpp" diff --git a/addons/vehicles/functions/fnc_carAlarm.sqf b/addons/vehicles/functions/fnc_carAlarm.sqf new file mode 100644 index 00000000..d74df170 --- /dev/null +++ b/addons/vehicles/functions/fnc_carAlarm.sqf @@ -0,0 +1,26 @@ +#include "..\script_component.hpp" +/* + * Author: 3Mydlo3 + * Function triggers car alarm on given vehicle. + * + * Arguments: + * 0: Vehicle which has alarm turned on + * + * Return Value: + * True if alarm has been turned on + * + * Example: + * None + * + * Public: No + */ + +params ["_vehicle"]; + +if (_vehicle getVariable [QGVAR(alarmOn), false]) exitWith { false }; + +_vehicle setVariable [QGVAR(alarmOn), true]; + +[_vehicle, true, 120] call FUNC(carAlarmLoop); + +true diff --git a/addons/vehicles/functions/fnc_carAlarmLoop.sqf b/addons/vehicles/functions/fnc_carAlarmLoop.sqf new file mode 100644 index 00000000..686fa975 --- /dev/null +++ b/addons/vehicles/functions/fnc_carAlarmLoop.sqf @@ -0,0 +1,40 @@ +#include "..\script_component.hpp" +/* + * Author: 3Mydlo3 + * Function triggers car alarm on given vehicle. + * + * Arguments: + * 0: Vehicle which has alarm turned on + * + * Return Value: + * None + * + * Example: + * None + * + * Public: No + */ + +#define ALARM_INTERVAL 0.5 + +params ["_vehicle", "_lightsOn", "_remainingDuration", ["_currentSoundDuration", 999]]; + +_vehicle setPilotLight _lightsOn; +if (_currentSoundDuration > 6.7) then { + _vehicle say3D "CarAlarm"; + _currentSoundDuration = ALARM_INTERVAL; +} else { + _currentSoundDuration = _currentSoundDuration + ALARM_INTERVAL; +}; + +_remainingDuration = _remainingDuration - 1; + +// player sideChat format ["Remaining alarm: %1", _remainingDuration]; + +if (_remainingDuration < 1 || {!alive _vehicle}) exitWith { + // player sideChat "Ending alarm"; + _vehicle setVariable [QGVAR(alarmOn), false, true]; + _vehicle setPilotLight false; +}; + +[FUNC(carAlarmLoop), [_vehicle, !_lightsOn, _remainingDuration, _currentSoundDuration], ALARM_INTERVAL] call CBA_fnc_waitAndExecute; diff --git a/addons/vehicles/functions/script_component.hpp b/addons/vehicles/functions/script_component.hpp new file mode 100644 index 00000000..2ca5e882 --- /dev/null +++ b/addons/vehicles/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\afsk\addons\vehicles\script_component.hpp" diff --git a/addons/vehicles/script_component.hpp b/addons/vehicles/script_component.hpp new file mode 100644 index 00000000..c8ead8d7 --- /dev/null +++ b/addons/vehicles/script_component.hpp @@ -0,0 +1,14 @@ +#define COMPONENT vehicles +#include "\z\afsk\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE + +#ifdef DEBUG_ENABLED_VEHICLES + #define DEBUG_MODE_FULL +#endif + #ifdef DEBUG_SETTINGS_VEHICLES + #define DEBUG_SETTINGS DEBUG_SETTINGS_VEHICLES +#endif + +#include "\z\afsk\addons\main\script_macros.hpp" From 1bd8c1eb2ad8e424b75bc2dff070b4bcfe9a1dd6 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 09:16:37 +0100 Subject: [PATCH 02/18] Move relevant vehicle functions from civilian component --- addons/civilian/XEH_PREP.hpp | 2 - addons/civilian/XEH_preInit.sqf | 5 --- addons/civilian/functions/fnc_initCity.sqf | 4 +- addons/civilian/initSettings.sqf | 11 ------ addons/civilian/stringtable.xml | 8 ---- addons/common/XEH_PREP.hpp | 1 - addons/police/functions/fnc_spawnVehicle.sqf | 2 +- addons/vehicles/XEH_PREP.hpp | 3 ++ addons/vehicles/XEH_preInit.sqf | 5 +++ .../functions/fnc_createVehicle.sqf | 4 +- .../functions/fnc_initVehicles.sqf | 2 - .../functions/fnc_setVehicleRandomTexture.sqf | 2 +- addons/vehicles/initSettings.sqf | 12 ++++++ addons/vehicles/stringtable.xml | 37 +++++++++++++++++++ 14 files changed, 63 insertions(+), 35 deletions(-) rename addons/{civilian => vehicles}/functions/fnc_createVehicle.sqf (93%) rename addons/{civilian => vehicles}/functions/fnc_initVehicles.sqf (96%) rename addons/{common => vehicles}/functions/fnc_setVehicleRandomTexture.sqf (93%) create mode 100644 addons/vehicles/initSettings.sqf create mode 100644 addons/vehicles/stringtable.xml diff --git a/addons/civilian/XEH_PREP.hpp b/addons/civilian/XEH_PREP.hpp index c0cc3aad..c8a590ab 100644 --- a/addons/civilian/XEH_PREP.hpp +++ b/addons/civilian/XEH_PREP.hpp @@ -3,7 +3,6 @@ PREP(civilianKilled); PREP(civilianKilledMarker); PREP(civilianKilledMsg); PREP(createCivilian); -PREP(createVehicle); PREP(getCityByLocation); PREP(getCityName); PREP(getCityRandomPos); @@ -11,6 +10,5 @@ PREP(getNearestCity); PREP(initCity); PREP(initCivilians); PREP(initCiviliansConfig); -PREP(initVehicles); PREP(initCivilian); PREP(unassignCivilianFromCity); diff --git a/addons/civilian/XEH_preInit.sqf b/addons/civilian/XEH_preInit.sqf index 7c6d1422..351ff5c4 100644 --- a/addons/civilian/XEH_preInit.sqf +++ b/addons/civilian/XEH_preInit.sqf @@ -51,11 +51,6 @@ if (isServer) then { _x setVariable [QGVAR(CiviliansCount), _civiliansCount]; _x setVariable [QGVAR(initialCiviliansCount), _civiliansCount]; } forEach GVAR(cities); - - - // We need some improvements in determining civilian vehicles limit - GVAR(emptyVehiclesLimit) = GVAR(emptyVehiclesLimitMultiplier) * (5 * count (GVAR(cities))); - call FUNC(initVehicles); }; ADDON = true; diff --git a/addons/civilian/functions/fnc_initCity.sqf b/addons/civilian/functions/fnc_initCity.sqf index 34d655e3..926267bf 100644 --- a/addons/civilian/functions/fnc_initCity.sqf +++ b/addons/civilian/functions/fnc_initCity.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" /* * Author: 3Mydlo3 - * Function initializes given city with module, civilians and vehicles. + * Function initializes given city with module and civilians. * * Arguments: * 0: City to initialize @@ -43,5 +43,5 @@ _cityNamespace setVariable [QGVAR(CiviliansList), []]; _cityNamespace setVariable [QGVAR(CiviliansCount), 0]; _cityNamespace setVariable [QGVAR(initialCiviliansCount), 0]; -// Init vehicles +// Return _cityNamespace diff --git a/addons/civilian/initSettings.sqf b/addons/civilian/initSettings.sqf index 80c7733e..9cc8e338 100644 --- a/addons/civilian/initSettings.sqf +++ b/addons/civilian/initSettings.sqf @@ -8,14 +8,3 @@ [0, 400, 200, 0], true ] call CBA_fnc_addSetting; - -[ - QGVAR(emptyVehiclesLimitMultiplier), - "LIST", - [LSTRING(EmptyVehiclesLimit), LSTRING(EmptyVehiclesLimit_Description)], - [LSTRING(DisplayName), localize "str_dn_vehicles"], - [[1, 2, 3], [LSTRING(Low), LSTRING(Medium), LSTRING(High)], 1], - true, - {}, - true -] call CBA_fnc_addSetting; diff --git a/addons/civilian/stringtable.xml b/addons/civilian/stringtable.xml index a8135bc8..d7ba990d 100644 --- a/addons/civilian/stringtable.xml +++ b/addons/civilian/stringtable.xml @@ -5,14 +5,6 @@ SerialKillers - Civilian SerialKillers - Cywile - - Civilian vehicles limit - Limit pojazdów cywilnych - - - Controls how much civilian vehicles will be created on the whole map. - Ustala jak dużo pojazdów cywilnych będzie utworzonych na całej mapie. - Civilian was killed at %1 in %2! Cywil został zabity o godzinie %1 w %2! diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index 35eea514..18ba5837 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -16,5 +16,4 @@ PREP(isHouseNearby); PREP(isRoadNearby); PREP(playMusicServer); PREP(removeItemsFromArsenal); -PREP(setVehicleRandomTexture); PREP(showMessage); diff --git a/addons/police/functions/fnc_spawnVehicle.sqf b/addons/police/functions/fnc_spawnVehicle.sqf index a8a91a8e..00d02fab 100644 --- a/addons/police/functions/fnc_spawnVehicle.sqf +++ b/addons/police/functions/fnc_spawnVehicle.sqf @@ -48,4 +48,4 @@ if (_position isEqualTo []) exitWith { }; // Spawn vehicle -[_vehicleClassname, _position, _direction, true, false, true] call EFUNC(civilian,createVehicle); +[_vehicleClassname, _position, _direction, true, false, true] call EFUNC(vehicles,createVehicle); diff --git a/addons/vehicles/XEH_PREP.hpp b/addons/vehicles/XEH_PREP.hpp index 95e15d02..c041cfa4 100644 --- a/addons/vehicles/XEH_PREP.hpp +++ b/addons/vehicles/XEH_PREP.hpp @@ -1,2 +1,5 @@ PREP(carAlarm); PREP(carAlarmLoop); +PREP(createVehicle); +PREP(initVehicles); +PREP(setVehicleRandomTexture); diff --git a/addons/vehicles/XEH_preInit.sqf b/addons/vehicles/XEH_preInit.sqf index a9b1762e..c183c7ac 100644 --- a/addons/vehicles/XEH_preInit.sqf +++ b/addons/vehicles/XEH_preInit.sqf @@ -1,4 +1,9 @@ #include "script_component.hpp" ADDON = false; #include "XEH_PREP.hpp" + +// We need some improvements in determining civilian vehicles limit +GVAR(emptyVehiclesLimit) = GVAR(emptyVehiclesLimitMultiplier) * (5 * count (EGVAR(civilian,cities))); +call FUNC(initVehicles); + ADDON = true; diff --git a/addons/civilian/functions/fnc_createVehicle.sqf b/addons/vehicles/functions/fnc_createVehicle.sqf similarity index 93% rename from addons/civilian/functions/fnc_createVehicle.sqf rename to addons/vehicles/functions/fnc_createVehicle.sqf index 46fe6b1c..dff15331 100644 --- a/addons/civilian/functions/fnc_createVehicle.sqf +++ b/addons/vehicles/functions/fnc_createVehicle.sqf @@ -13,7 +13,7 @@ * 0: Created vehicle * * Example: - * ["C_Offroad_01_F", position player] call afsk_civilian_fnc_createVehicle + * ["C_Offroad_01_F", position player] call afsk_vehicles_fnc_createVehicle * * Public: No */ @@ -34,7 +34,7 @@ _vehicle setDir _dir; // Disable randomization and use own function to set texture on vehicle globally (so everyone can see the same color!) _vehicle setVariable ["BIS_enableRandomization", false]; if (_enableRandomization) then { - [_vehicle] call EFUNC(common,setVehicleRandomTexture); + [_vehicle] call FUNC(setVehicleRandomTexture); }; if (_emptyCargo) then { diff --git a/addons/civilian/functions/fnc_initVehicles.sqf b/addons/vehicles/functions/fnc_initVehicles.sqf similarity index 96% rename from addons/civilian/functions/fnc_initVehicles.sqf rename to addons/vehicles/functions/fnc_initVehicles.sqf index 5087ed6c..61114fc9 100644 --- a/addons/civilian/functions/fnc_initVehicles.sqf +++ b/addons/vehicles/functions/fnc_initVehicles.sqf @@ -24,8 +24,6 @@ private _civilianCarTypes = "( (getNumber (_x >> 'scope') >= 2) && {getNumber (_x >> 'side') == 3} })" configClasses (configFile >> "CfgVehicles"); -GVAR(citiesVehicles) = call CBA_fnc_createNamespace; - while {_i > 0} do { private _carType = selectRandom _civilianCarTypes; private _pos = [_carType, true, false, true] call EFUNC(common,getRandomPos); diff --git a/addons/common/functions/fnc_setVehicleRandomTexture.sqf b/addons/vehicles/functions/fnc_setVehicleRandomTexture.sqf similarity index 93% rename from addons/common/functions/fnc_setVehicleRandomTexture.sqf rename to addons/vehicles/functions/fnc_setVehicleRandomTexture.sqf index 27cd0d87..806cfa18 100644 --- a/addons/common/functions/fnc_setVehicleRandomTexture.sqf +++ b/addons/vehicles/functions/fnc_setVehicleRandomTexture.sqf @@ -10,7 +10,7 @@ * None * * Example: - * [vehicle player] call afsk_common_fnc_setVehicleRandomTexture + * [vehicle player] call afsk_vehicles_fnc_setVehicleRandomTexture * * Public: No */ diff --git a/addons/vehicles/initSettings.sqf b/addons/vehicles/initSettings.sqf new file mode 100644 index 00000000..688b3889 --- /dev/null +++ b/addons/vehicles/initSettings.sqf @@ -0,0 +1,12 @@ +#include "script_component.hpp" + +[ + QGVAR(emptyVehiclesLimitMultiplier), + "LIST", + [LSTRING(EmptyVehiclesLimit), LSTRING(EmptyVehiclesLimit_Description)], + [LSTRING(DisplayName), localize "str_dn_vehicles"], + [[1, 2, 3], [LSTRING(Low), LSTRING(Medium), LSTRING(High)], 1], + true, + {}, + true +] call CBA_fnc_addSetting; diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml new file mode 100644 index 00000000..ad7f7cb4 --- /dev/null +++ b/addons/vehicles/stringtable.xml @@ -0,0 +1,37 @@ + + + + + SerialKillers - Vehicles + SerialKillers - Pojazdy + + + Civilian vehicles limit + Limit pojazdów cywilnych + + + Controls how much civilian vehicles will be created on the whole map. + Ustala jak dużo pojazdów cywilnych będzie utworzonych na całej mapie. + + + Vehicle was stolen at %1 in %2! + Pojazd został skradziony o godzinie %1 w %2! + + + Vehicle was stolen at %1 near %2! + Pojazd został skradziony o godzinie %1 w pobliżu %2! + + + Low + Mało + + + Mediun + Średnio + + + High + Dużo + + + From d855f3d4eb7f901d64cb634455ade0a5b18244f5 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 09:58:57 +0100 Subject: [PATCH 03/18] Make alarm go off at most once + message for cops --- addons/common/XEH_postInit.sqf | 4 +- addons/vehicles/XEH_PREP.hpp | 1 + addons/vehicles/XEH_postInit.sqf | 6 +++ addons/vehicles/functions/fnc_carAlarm.sqf | 9 ++++- .../vehicles/functions/fnc_initCarAlarm.sqf | 29 ++++++++++++++ .../functions/fnc_vehicleStolenMsg.sqf | 39 +++++++++++++++++++ 6 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 addons/vehicles/functions/fnc_initCarAlarm.sqf create mode 100644 addons/vehicles/functions/fnc_vehicleStolenMsg.sqf diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 8b117fd8..2c7126f7 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -10,9 +10,7 @@ if (isServer) then { }] call CBA_fnc_addEventHandler; }; -[QGVAR(showMessage), { - _this call FUNC(showMessage); -}] call CBA_fnc_addEventHandler; +[QGVAR(showMessage), FUNC(showMessage)] call CBA_fnc_addEventHandler; [QGVAR(teleport), { params ["_caller", "_destination"]; diff --git a/addons/vehicles/XEH_PREP.hpp b/addons/vehicles/XEH_PREP.hpp index c041cfa4..7bb7718f 100644 --- a/addons/vehicles/XEH_PREP.hpp +++ b/addons/vehicles/XEH_PREP.hpp @@ -3,3 +3,4 @@ PREP(carAlarmLoop); PREP(createVehicle); PREP(initVehicles); PREP(setVehicleRandomTexture); +PREP(vehicleStolenMsg); diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index 00422170..237e2429 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -6,4 +6,10 @@ if (isServer) then { if (hasInterface) then { [QGVAR(carAlarm), FUNC(carAlarm)] call CBA_fnc_addEventHandler; + + [QGVAR(alarmOff), { + params ["_vehicle"]; + + [QEGVAR(common,showSideChatMsg), [WEST, [_vehicle] call FUNC(vehicleStolenMsg)]] call CBA_fnc_localEvent; + }] call CBA_fnc_addEventHandler; }; diff --git a/addons/vehicles/functions/fnc_carAlarm.sqf b/addons/vehicles/functions/fnc_carAlarm.sqf index d74df170..2d1cb455 100644 --- a/addons/vehicles/functions/fnc_carAlarm.sqf +++ b/addons/vehicles/functions/fnc_carAlarm.sqf @@ -4,10 +4,10 @@ * Function triggers car alarm on given vehicle. * * Arguments: - * 0: Vehicle which has alarm turned on + * 0: Vehicle which has alarm going off * * Return Value: - * True if alarm has been turned on + * True if alarm has gone off * * Example: * None @@ -18,9 +18,14 @@ params ["_vehicle"]; if (_vehicle getVariable [QGVAR(alarmOn), false]) exitWith { false }; +if (_vehicle getVariable [QGVAR(hasGoneOff), false]) exitWith { false }; +if (_vehicle getVariable [QGVAR(offChance), 1] < random 1) exitWith { false }; _vehicle setVariable [QGVAR(alarmOn), true]; +_vehicle setVariable [QGVAR(hasGoneOff), true]; [_vehicle, true, 120] call FUNC(carAlarmLoop); +[QGVAR(alarmOff), [_vehicle]] call CBA_fnc_globalEvent; + true diff --git a/addons/vehicles/functions/fnc_initCarAlarm.sqf b/addons/vehicles/functions/fnc_initCarAlarm.sqf new file mode 100644 index 00000000..d6d5e8ee --- /dev/null +++ b/addons/vehicles/functions/fnc_initCarAlarm.sqf @@ -0,0 +1,29 @@ +#include "..\script_component.hpp" +/* + * Author: 3Mydlo3 + * Function initializes car alarm on given vehicle. + * + * Arguments: + * 0: Vehicle which has alarm armed + * 1: Chance that the alarm will indeed go off + * + * Return Value: + * True if alarm has been armed + * + * Example: + * None + * + * Public: No + */ + +params ["_vehicle", ["_offChance", 1]]; + +if (_vehicle getVariable [QGVAR(alarmArmed), false]) exitWith { false }; + +_vehicle setVariable [QGVAR(alarmArmed), true]; +_vehicle setVariable [QGVAR(offChance), _offChance]; + +// Alarm should go off at most once, init a flag to keep that in mind +_vehicle setVariable [QGVAR(hasGoneOff), false]; + +true diff --git a/addons/vehicles/functions/fnc_vehicleStolenMsg.sqf b/addons/vehicles/functions/fnc_vehicleStolenMsg.sqf new file mode 100644 index 00000000..220bbfa8 --- /dev/null +++ b/addons/vehicles/functions/fnc_vehicleStolenMsg.sqf @@ -0,0 +1,39 @@ +#include "script_component.hpp" +/* + * Author: 3Mydlo3 + * Function creates message for cops on vehicle stolen event. + * + * Arguments: + * 0: Stolen vehicle + * 1: Time of theft + * 2: Nearest location + * + * Return Value: + * 0: Vehicle stolen message + * + * Example: + * [vehicle player, "08:06:04"] call afsk_vehicles_fnc_vehicleStolenMsg + * + * Public: No + */ + +params ["_stolenVehicle", ["_timeOfTheft", daytime], ["_nearestTown", locationNull]]; + +if (_timeOfTheft isEqualType 0) then { + _timeOfTheft = [_timeOfTheft] call BIS_fnc_timeToString; +}; + +if (isNull _nearestTown) then { + _nearestTown = [_stolenVehicle] call EFUNC(common,getNearestCityLocation); +}; + +private _msg = ""; +private _distance = (position _stolenVehicle) distance _nearestTown; +// Check if distance is greater than 250 m. If so then change output a bit to represent that. +if (_distance <= 250) then { + _msg = format [LLSTRING(Vehicle_Stolen_In_City), _timeOfTheft, text _nearestTown]; +} else { + _msg = format [LLSTRING(Vehicle_Stolen_Near_City), _timeOfTheft, text _nearestTown]; +}; + +_msg From bc580080ccf3b501a91c445fa4727dfd0ab04403 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 10:02:49 +0100 Subject: [PATCH 04/18] Alarm for civilian vehicles with at least 25% going off chance --- addons/vehicles/functions/fnc_initVehicles.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/vehicles/functions/fnc_initVehicles.sqf b/addons/vehicles/functions/fnc_initVehicles.sqf index 61114fc9..3238ba29 100644 --- a/addons/vehicles/functions/fnc_initVehicles.sqf +++ b/addons/vehicles/functions/fnc_initVehicles.sqf @@ -37,6 +37,7 @@ while {_i > 0} do { if (_nearbyCarsCount >= 2 && {(random 1) > 0.1}) exitWith {}; // Create vehicle on given position. We need some way to prevent instant damage to vehicle as these empty positions are not perfect. private _vehicle = [_carType, _pos] call FUNC(createVehicle); + [_vehicle, random 1 + 0.25] call FUNC(initCarAlarm); _i = _i - 1; }; }; From f1b010dde7a42590c668692d14385876462bbdad Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 15:19:36 +0100 Subject: [PATCH 05/18] Add alarmMinimumChance setting --- addons/vehicles/functions/fnc_initVehicles.sqf | 2 +- addons/vehicles/initSettings.sqf | 11 +++++++++++ addons/vehicles/stringtable.xml | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/addons/vehicles/functions/fnc_initVehicles.sqf b/addons/vehicles/functions/fnc_initVehicles.sqf index 3238ba29..307c2985 100644 --- a/addons/vehicles/functions/fnc_initVehicles.sqf +++ b/addons/vehicles/functions/fnc_initVehicles.sqf @@ -37,7 +37,7 @@ while {_i > 0} do { if (_nearbyCarsCount >= 2 && {(random 1) > 0.1}) exitWith {}; // Create vehicle on given position. We need some way to prevent instant damage to vehicle as these empty positions are not perfect. private _vehicle = [_carType, _pos] call FUNC(createVehicle); - [_vehicle, random 1 + 0.25] call FUNC(initCarAlarm); + [_vehicle, random 1 + GVAR(alarmMinimumChance)] call FUNC(initCarAlarm); _i = _i - 1; }; }; diff --git a/addons/vehicles/initSettings.sqf b/addons/vehicles/initSettings.sqf index 688b3889..cd3a15b2 100644 --- a/addons/vehicles/initSettings.sqf +++ b/addons/vehicles/initSettings.sqf @@ -10,3 +10,14 @@ {}, true ] call CBA_fnc_addSetting; + +[ + QGVAR(alarmMinimumChance), + "SLIDER", + [LSTRING(AlarmMinimumChance), LSTRING(AlarmMinimumChance_Description)], + [LSTRING(DisplayName), localize "str_dn_vehicles"], + [-1, 1, 0.25, 1], + true, + {}, + true +] call CBA_fnc_addSetting; diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index ad7f7cb4..9d95b876 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -5,6 +5,14 @@ SerialKillers - Vehicles SerialKillers - Pojazdy + + Alarm Minimum Chance + Minimalna szansa na alarm + + + Controls the chance of an alarm going off in a car that has the alarm armed. + Ustala szansę na uruchomienie alarmu w pojeździe posiadającym alarm. + Civilian vehicles limit Limit pojazdów cywilnych From 1e0947991ab41bc934992b063a259f45c3a77f36 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 15:20:34 +0100 Subject: [PATCH 06/18] Add alarmEnabled setting which can disable all alarms --- addons/vehicles/functions/fnc_initVehicles.sqf | 4 +++- addons/vehicles/initSettings.sqf | 11 +++++++++++ addons/vehicles/stringtable.xml | 8 ++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/addons/vehicles/functions/fnc_initVehicles.sqf b/addons/vehicles/functions/fnc_initVehicles.sqf index 307c2985..3a69fd55 100644 --- a/addons/vehicles/functions/fnc_initVehicles.sqf +++ b/addons/vehicles/functions/fnc_initVehicles.sqf @@ -37,7 +37,9 @@ while {_i > 0} do { if (_nearbyCarsCount >= 2 && {(random 1) > 0.1}) exitWith {}; // Create vehicle on given position. We need some way to prevent instant damage to vehicle as these empty positions are not perfect. private _vehicle = [_carType, _pos] call FUNC(createVehicle); - [_vehicle, random 1 + GVAR(alarmMinimumChance)] call FUNC(initCarAlarm); + if (GVAR(alarmEnabled)) then { + [_vehicle, random 1 + GVAR(alarmMinimumChance)] call FUNC(initCarAlarm); + }; _i = _i - 1; }; }; diff --git a/addons/vehicles/initSettings.sqf b/addons/vehicles/initSettings.sqf index cd3a15b2..fde636b1 100644 --- a/addons/vehicles/initSettings.sqf +++ b/addons/vehicles/initSettings.sqf @@ -11,6 +11,17 @@ true ] call CBA_fnc_addSetting; +[ + QGVAR(alarmEnabled), + "CHECKBOX", + [LSTRING(AlarmEnabled), LSTRING(AlarmEnabled_Description)], + [LSTRING(DisplayName), localize "str_dn_vehicles"], + true, + true, + {}, + true +] call CBA_fnc_addSetting; + [ QGVAR(alarmMinimumChance), "SLIDER", diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 9d95b876..279e69e3 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -5,6 +5,14 @@ SerialKillers - Vehicles SerialKillers - Pojazdy + + Alarm enabled + Alarmy włączone + + + Add car alarms to civilian vehicles. + Dodaj alarmy do pojazdów cywilnych. + Alarm Minimum Chance Minimalna szansa na alarm From 97d14e066869c740d54e7037b02d13fe2550a2f3 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 15:21:00 +0100 Subject: [PATCH 07/18] Add alarmAlwaysArmed and alarmDisarmIfFailed settings --- addons/vehicles/functions/fnc_carAlarm.sqf | 10 ++++++++-- addons/vehicles/initSettings.sqf | 22 ++++++++++++++++++++++ addons/vehicles/stringtable.xml | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/addons/vehicles/functions/fnc_carAlarm.sqf b/addons/vehicles/functions/fnc_carAlarm.sqf index 2d1cb455..fc10b88a 100644 --- a/addons/vehicles/functions/fnc_carAlarm.sqf +++ b/addons/vehicles/functions/fnc_carAlarm.sqf @@ -18,8 +18,14 @@ params ["_vehicle"]; if (_vehicle getVariable [QGVAR(alarmOn), false]) exitWith { false }; -if (_vehicle getVariable [QGVAR(hasGoneOff), false]) exitWith { false }; -if (_vehicle getVariable [QGVAR(offChance), 1] < random 1) exitWith { false }; +if (!GVAR(alarmAlwaysArmed) && {_vehicle getVariable [QGVAR(hasGoneOff), false]}) exitWith { false }; +if (_vehicle getVariable [QGVAR(offChance), 1] < random 1) exitWith { + if (GVAR(alarmDisarmIfFailed)) then { + _vehicle setVariable [QGVAR(alarmArmed), false]; + }; + + false +}; _vehicle setVariable [QGVAR(alarmOn), true]; _vehicle setVariable [QGVAR(hasGoneOff), true]; diff --git a/addons/vehicles/initSettings.sqf b/addons/vehicles/initSettings.sqf index fde636b1..f96ec664 100644 --- a/addons/vehicles/initSettings.sqf +++ b/addons/vehicles/initSettings.sqf @@ -22,6 +22,28 @@ true ] call CBA_fnc_addSetting; +[ + QGVAR(alarmAlwaysArmed), + "CHECKBOX", + [LSTRING(AlarmAlwaysArmed), LSTRING(AlarmAlwaysArmed_Description)], + [LSTRING(DisplayName), localize "str_dn_vehicles"], + false, + true, + {}, + true +] call CBA_fnc_addSetting; + +[ + QGVAR(alarmDisarmIfFailed), + "CHECKBOX", + [LSTRING(AlarmDisarmIfFailed), LSTRING(AlarmDisarmIfFailed_Description)], + [LSTRING(DisplayName), localize "str_dn_vehicles"], + true, + true, + {}, + true +] call CBA_fnc_addSetting; + [ QGVAR(alarmMinimumChance), "SLIDER", diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 279e69e3..60b97c4d 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -13,6 +13,22 @@ Add car alarms to civilian vehicles. Dodaj alarmy do pojazdów cywilnych. + + Alarm always armed + Alarm zawsze uzbrojony + + + Alarm will always be armed, even if it previously did go off. + Rozbrój alarm jeżeli się nie włączył gdy gracz wszedł do pojazdu. Działa tylko jeżeli Minimalna szansa na alarm jest ustawiona na mniej niż 1. + + + Alarm disarm if didn't go off + Rozbrój alarm jeżeli się nie włączył + + + Disarm alarm if it didn't go off when a player entered vehicle. Effective only if 'Alarm always armed' is disabled and 'Alarm Minimum Chance' is set to less than 1. + Rozbrój alarm jeżeli się nie włączył gdy gracz wszedł do pojazdu. Działa tylko jeżeli ustawienie 'Alarm zawsze uzbrojony' jest wyłączone oraz 'Minimalna szansa na alarm' jest ustawiona na mniej niż 1. + Alarm Minimum Chance Minimalna szansa na alarm From 049eb31e090b69c17c69527325b77a1d52cf5408 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 28 Jan 2024 19:01:17 +0100 Subject: [PATCH 08/18] Fix include --- addons/vehicles/config.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/vehicles/config.cpp b/addons/vehicles/config.cpp index c028c94a..79f6dbbb 100644 --- a/addons/vehicles/config.cpp +++ b/addons/vehicles/config.cpp @@ -13,5 +13,4 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" -#include "CfgMissions.hpp" #include "CfgSounds.hpp" From 53f87099c276c8daa0557101951609802cbcacc8 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Mon, 29 Jan 2024 18:47:59 +0100 Subject: [PATCH 09/18] Fixes to includes --- addons/vehicles/functions/fnc_carAlarm.sqf | 2 +- addons/vehicles/functions/fnc_carAlarmLoop.sqf | 2 +- addons/vehicles/functions/fnc_initCarAlarm.sqf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/vehicles/functions/fnc_carAlarm.sqf b/addons/vehicles/functions/fnc_carAlarm.sqf index fc10b88a..655e75cd 100644 --- a/addons/vehicles/functions/fnc_carAlarm.sqf +++ b/addons/vehicles/functions/fnc_carAlarm.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: 3Mydlo3 * Function triggers car alarm on given vehicle. diff --git a/addons/vehicles/functions/fnc_carAlarmLoop.sqf b/addons/vehicles/functions/fnc_carAlarmLoop.sqf index 686fa975..ed0e436c 100644 --- a/addons/vehicles/functions/fnc_carAlarmLoop.sqf +++ b/addons/vehicles/functions/fnc_carAlarmLoop.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: 3Mydlo3 * Function triggers car alarm on given vehicle. diff --git a/addons/vehicles/functions/fnc_initCarAlarm.sqf b/addons/vehicles/functions/fnc_initCarAlarm.sqf index d6d5e8ee..47ac1612 100644 --- a/addons/vehicles/functions/fnc_initCarAlarm.sqf +++ b/addons/vehicles/functions/fnc_initCarAlarm.sqf @@ -1,4 +1,4 @@ -#include "..\script_component.hpp" +#include "script_component.hpp" /* * Author: 3Mydlo3 * Function initializes car alarm on given vehicle. From 79ef3bdfe666188e57f61ff6dfaf78ab8f8b0627 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Mon, 29 Jan 2024 18:48:07 +0100 Subject: [PATCH 10/18] Fixes to addon dependency --- addons/civilian/config.cpp | 3 ++- addons/vehicles/config.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/civilian/config.cpp b/addons/civilian/config.cpp index d96fb9aa..443dbbf8 100644 --- a/addons/civilian/config.cpp +++ b/addons/civilian/config.cpp @@ -7,7 +7,8 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = { - "afsk_common" + "afsk_common", + "afsk_vehicles" }; author = "ArmaForces"; VERSION_CONFIG; diff --git a/addons/vehicles/config.cpp b/addons/vehicles/config.cpp index 79f6dbbb..8f4daa98 100644 --- a/addons/vehicles/config.cpp +++ b/addons/vehicles/config.cpp @@ -6,7 +6,9 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {}; + requiredAddons[] = { + "afsk_common" + }; author = "ArmaForces"; VERSION_CONFIG; }; From 752b84c6e91e3e6334d57c3e38bb18fe70ea898f Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Mon, 29 Jan 2024 21:04:00 +0100 Subject: [PATCH 11/18] Fixes --- addons/vehicles/XEH_PREP.hpp | 1 + addons/vehicles/XEH_preInit.sqf | 9 +++++++-- addons/vehicles/functions/fnc_carAlarmLoop.sqf | 3 ++- addons/vehicles/functions/fnc_initCarAlarm.sqf | 6 ++++++ addons/vehicles/initSettings.sqf | 2 -- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/addons/vehicles/XEH_PREP.hpp b/addons/vehicles/XEH_PREP.hpp index 7bb7718f..9c71c739 100644 --- a/addons/vehicles/XEH_PREP.hpp +++ b/addons/vehicles/XEH_PREP.hpp @@ -1,6 +1,7 @@ PREP(carAlarm); PREP(carAlarmLoop); PREP(createVehicle); +PREP(initCarAlarm); PREP(initVehicles); PREP(setVehicleRandomTexture); PREP(vehicleStolenMsg); diff --git a/addons/vehicles/XEH_preInit.sqf b/addons/vehicles/XEH_preInit.sqf index c183c7ac..92f3b0d5 100644 --- a/addons/vehicles/XEH_preInit.sqf +++ b/addons/vehicles/XEH_preInit.sqf @@ -2,8 +2,13 @@ ADDON = false; #include "XEH_PREP.hpp" +#include "initSettings.sqf" + // We need some improvements in determining civilian vehicles limit -GVAR(emptyVehiclesLimit) = GVAR(emptyVehiclesLimitMultiplier) * (5 * count (EGVAR(civilian,cities))); -call FUNC(initVehicles); +GVAR(emptyVehiclesLimit) = 500; + +if (isServer) then { + call FUNC(initVehicles); +}; ADDON = true; diff --git a/addons/vehicles/functions/fnc_carAlarmLoop.sqf b/addons/vehicles/functions/fnc_carAlarmLoop.sqf index ed0e436c..5c7bc497 100644 --- a/addons/vehicles/functions/fnc_carAlarmLoop.sqf +++ b/addons/vehicles/functions/fnc_carAlarmLoop.sqf @@ -16,11 +16,12 @@ */ #define ALARM_INTERVAL 0.5 +#define ALARM_LENGTH 10 params ["_vehicle", "_lightsOn", "_remainingDuration", ["_currentSoundDuration", 999]]; _vehicle setPilotLight _lightsOn; -if (_currentSoundDuration > 6.7) then { +if (_currentSoundDuration > ALARM_LENGTH) then { _vehicle say3D "CarAlarm"; _currentSoundDuration = ALARM_INTERVAL; } else { diff --git a/addons/vehicles/functions/fnc_initCarAlarm.sqf b/addons/vehicles/functions/fnc_initCarAlarm.sqf index 47ac1612..af187491 100644 --- a/addons/vehicles/functions/fnc_initCarAlarm.sqf +++ b/addons/vehicles/functions/fnc_initCarAlarm.sqf @@ -26,4 +26,10 @@ _vehicle setVariable [QGVAR(offChance), _offChance]; // Alarm should go off at most once, init a flag to keep that in mind _vehicle setVariable [QGVAR(hasGoneOff), false]; +_vehicle addEventHandler ["GetIn", { + params ["_vehicle", "_role", "_unit", "_turret"]; + + [QGVAR(carAlarm), [_vehicle]] call CBA_fnc_globalEvent; +}]; + true diff --git a/addons/vehicles/initSettings.sqf b/addons/vehicles/initSettings.sqf index f96ec664..fe322ace 100644 --- a/addons/vehicles/initSettings.sqf +++ b/addons/vehicles/initSettings.sqf @@ -1,5 +1,3 @@ -#include "script_component.hpp" - [ QGVAR(emptyVehiclesLimitMultiplier), "LIST", From e1b6006df1d3630c8ca450f4fae81f850d84bde1 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Mon, 29 Jan 2024 22:37:22 +0100 Subject: [PATCH 12/18] Prevent civilians from triggering car alarm --- addons/vehicles/functions/fnc_initCarAlarm.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/vehicles/functions/fnc_initCarAlarm.sqf b/addons/vehicles/functions/fnc_initCarAlarm.sqf index af187491..392fe043 100644 --- a/addons/vehicles/functions/fnc_initCarAlarm.sqf +++ b/addons/vehicles/functions/fnc_initCarAlarm.sqf @@ -28,6 +28,7 @@ _vehicle setVariable [QGVAR(hasGoneOff), false]; _vehicle addEventHandler ["GetIn", { params ["_vehicle", "_role", "_unit", "_turret"]; + if (side _unit isEqualTo CIVILIAN) exitWith {}; [QGVAR(carAlarm), [_vehicle]] call CBA_fnc_globalEvent; }]; From 907dd082dc46fab3932693ecf507e9dc0e489a6d Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Tue, 30 Jan 2024 01:01:15 +0100 Subject: [PATCH 13/18] Make car alarm work only once --- addons/vehicles/XEH_postInit.sqf | 1 + addons/vehicles/functions/fnc_carAlarm.sqf | 2 -- addons/vehicles/functions/fnc_initCarAlarm.sqf | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index 237e2429..cb3f49e0 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -11,5 +11,6 @@ if (hasInterface) then { params ["_vehicle"]; [QEGVAR(common,showSideChatMsg), [WEST, [_vehicle] call FUNC(vehicleStolenMsg)]] call CBA_fnc_localEvent; + [_vehicle, true, 120] call FUNC(carAlarmLoop); }] call CBA_fnc_addEventHandler; }; diff --git a/addons/vehicles/functions/fnc_carAlarm.sqf b/addons/vehicles/functions/fnc_carAlarm.sqf index 655e75cd..e68c6d56 100644 --- a/addons/vehicles/functions/fnc_carAlarm.sqf +++ b/addons/vehicles/functions/fnc_carAlarm.sqf @@ -30,8 +30,6 @@ if (_vehicle getVariable [QGVAR(offChance), 1] < random 1) exitWith { _vehicle setVariable [QGVAR(alarmOn), true]; _vehicle setVariable [QGVAR(hasGoneOff), true]; -[_vehicle, true, 120] call FUNC(carAlarmLoop); - [QGVAR(alarmOff), [_vehicle]] call CBA_fnc_globalEvent; true diff --git a/addons/vehicles/functions/fnc_initCarAlarm.sqf b/addons/vehicles/functions/fnc_initCarAlarm.sqf index 392fe043..c72c7630 100644 --- a/addons/vehicles/functions/fnc_initCarAlarm.sqf +++ b/addons/vehicles/functions/fnc_initCarAlarm.sqf @@ -30,7 +30,7 @@ _vehicle addEventHandler ["GetIn", { params ["_vehicle", "_role", "_unit", "_turret"]; if (side _unit isEqualTo CIVILIAN) exitWith {}; - [QGVAR(carAlarm), [_vehicle]] call CBA_fnc_globalEvent; + [QGVAR(carAlarm), [_vehicle]] call CBA_fnc_serverEvent; }]; true From 0d95a832761af14c7f01c0f31457e4b3de101739 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Sun, 4 Feb 2024 00:54:28 +0100 Subject: [PATCH 14/18] Add blacklisted areas support for initial vehicles spawn and exclude police stations --- addons/common/functions/fnc_getRandomPos.sqf | 17 ++++++++++++----- addons/police/config.cpp | 3 ++- .../police/functions/fnc_initPoliceStation.sqf | 2 ++ addons/vehicles/XEH_postInit.sqf | 6 ++++++ addons/vehicles/XEH_preInit.sqf | 2 +- addons/vehicles/functions/fnc_initVehicles.sqf | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/addons/common/functions/fnc_getRandomPos.sqf b/addons/common/functions/fnc_getRandomPos.sqf index d362ebba..4e73277a 100644 --- a/addons/common/functions/fnc_getRandomPos.sqf +++ b/addons/common/functions/fnc_getRandomPos.sqf @@ -9,6 +9,7 @@ * 2: Position can be on road * 3: Position must be near house * 4: Search radius for empty position + * 5: Blacklisted areas > * * Return Value: * 0: Random position on the map @@ -19,14 +20,20 @@ * Public: No */ -params [["_objectType", ""], ["_nearRoad", false], ["_allowOnRoad", true], ["_nearHouse", false], ["_emptyPosSearchRadius", 25]]; +params [ + ["_objectType", ""], + ["_nearRoad", false], + ["_allowOnRoad", true], + ["_nearHouse", false], + ["_emptyPosSearchRadius", 25], + ["_blacklistedAreas", []]]; // Function returns random position private _fnc_randomPos = { - params ["_nearRoad", "_allowOnRoad", "_nearHouse"]; + params ["_nearRoad", "_allowOnRoad", "_nearHouse", "_blacklistedAreas"]; private _randomPos = []; while {_randomPos isEqualTo []} do { - _randomPos = [] call BIS_fnc_randomPos; + _randomPos = [nil, _blacklistedAreas] call BIS_fnc_randomPos; if (!(_randomPos isEqualTo []) && {_nearHouse && {!([_randomPos] call FUNC(isHouseNearby))}}) then { _randomPos = []; }; @@ -50,13 +57,13 @@ if (!(_objectType isEqualType "")) then { }; // If no object is given, just random position is enough -if (_objectType isEqualTo "") exitWith {[_nearRoad, _allowOnRoad, _nearHouse] call _fnc_randomPos}; +if (_objectType isEqualTo "") exitWith {[_nearRoad, _allowOnRoad, _nearHouse, _blacklistedAreas] call _fnc_randomPos}; private _randomPos = []; private _loopLimit = 250; // Loop until acquired random empty pos is within location area (or loop limit reached) while {(_loopLimit >= 0) && {(_randomPos isEqualTo [])}} do { - _randomPos = [_nearRoad, _allowOnRoad, _nearHouse] call _fnc_randomPos; + _randomPos = [_nearRoad, _allowOnRoad, _nearHouse, _blacklistedAreas] call _fnc_randomPos; _randomPos = _randomPos findEmptyPosition [0, _emptyPosSearchRadius, _objectType]; _loopLimit = _loopLimit - 1; }; diff --git a/addons/police/config.cpp b/addons/police/config.cpp index 0a92f8d8..e4c46542 100644 --- a/addons/police/config.cpp +++ b/addons/police/config.cpp @@ -8,7 +8,8 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = { "afsk_equipment", - "afsk_modules" + "afsk_modules", + "afsk_vehicles" }; author = "ArmaForces"; VERSION_CONFIG; diff --git a/addons/police/functions/fnc_initPoliceStation.sqf b/addons/police/functions/fnc_initPoliceStation.sqf index a337da7e..9e4fa0be 100644 --- a/addons/police/functions/fnc_initPoliceStation.sqf +++ b/addons/police/functions/fnc_initPoliceStation.sqf @@ -46,3 +46,5 @@ _logic setVariable ["Marker", _marker]; // Create teleporter _logic setVariable ["Teleporter", _flag, true]; [QGVAR(createTeleport), [_flag]] call CBA_fnc_globalEventJIP; + +[QGVAR(policeStationInitialized), [_logic]] call CBA_fnc_localEvent; diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index cb3f49e0..e88694ff 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -1,7 +1,13 @@ #include "script_component.hpp" if (isServer) then { + [QEGVAR(police,policeStationInitialized), { + params ["_policeStation"]; + // Register as blacklisted area for civilian vehicle spawn + GVAR(vehicleBlacklistedAreas) pushBackUnique _policeStation; + }] call CBA_fnc_addEventHandler; + [FUNC(initVehicles)] call CBA_fnc_execNextFrame; }; if (hasInterface) then { diff --git a/addons/vehicles/XEH_preInit.sqf b/addons/vehicles/XEH_preInit.sqf index 92f3b0d5..fb6ade53 100644 --- a/addons/vehicles/XEH_preInit.sqf +++ b/addons/vehicles/XEH_preInit.sqf @@ -8,7 +8,7 @@ ADDON = false; GVAR(emptyVehiclesLimit) = 500; if (isServer) then { - call FUNC(initVehicles); + GVAR(vehicleBlacklistedAreas) = []; }; ADDON = true; diff --git a/addons/vehicles/functions/fnc_initVehicles.sqf b/addons/vehicles/functions/fnc_initVehicles.sqf index 3a69fd55..27f2de05 100644 --- a/addons/vehicles/functions/fnc_initVehicles.sqf +++ b/addons/vehicles/functions/fnc_initVehicles.sqf @@ -26,7 +26,7 @@ private _civilianCarTypes = "( (getNumber (_x >> 'scope') >= 2) while {_i > 0} do { private _carType = selectRandom _civilianCarTypes; - private _pos = [_carType, true, false, true] call EFUNC(common,getRandomPos); + private _pos = [_carType, true, false, true, nil, GVAR(vehicleBlacklistedAreas)] call EFUNC(common,getRandomPos); if (!(_pos isEqualTo [])) then { // Check if there are other vehicles nearby to prevent creating too much vehicles in one area private _distance = 100 * (4 - GVAR(emptyVehiclesLimitMultiplier)); From 67843bd4310d57e9d67be8340f7e159717efcb66 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Mon, 5 Feb 2024 19:35:18 +0100 Subject: [PATCH 15/18] Fix objectArea for police station --- addons/police/functions/fnc_initPoliceStation.sqf | 1 + addons/vehicles/XEH_postInit.sqf | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/police/functions/fnc_initPoliceStation.sqf b/addons/police/functions/fnc_initPoliceStation.sqf index 9e4fa0be..aa1f0e26 100644 --- a/addons/police/functions/fnc_initPoliceStation.sqf +++ b/addons/police/functions/fnc_initPoliceStation.sqf @@ -47,4 +47,5 @@ _logic setVariable ["Marker", _marker]; _logic setVariable ["Teleporter", _flag, true]; [QGVAR(createTeleport), [_flag]] call CBA_fnc_globalEventJIP; +private _stationArea = _logic getVariable ["objectarea", []]; [QGVAR(policeStationInitialized), [_logic]] call CBA_fnc_localEvent; diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index e88694ff..aafa26dc 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -2,9 +2,9 @@ if (isServer) then { [QEGVAR(police,policeStationInitialized), { - params ["_policeStation"]; + params ["_policeStationArea"]; // Register as blacklisted area for civilian vehicle spawn - GVAR(vehicleBlacklistedAreas) pushBackUnique _policeStation; + GVAR(vehicleBlacklistedAreas) pushBackUnique _policeStationArea; }] call CBA_fnc_addEventHandler; [FUNC(initVehicles)] call CBA_fnc_execNextFrame; From c13d58f87627196df1b468f0442d959b1af196e2 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Thu, 8 Feb 2024 11:23:58 +0100 Subject: [PATCH 16/18] Change to camelCase --- addons/police/functions/fnc_initPoliceStation.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/police/functions/fnc_initPoliceStation.sqf b/addons/police/functions/fnc_initPoliceStation.sqf index aa1f0e26..242c21e2 100644 --- a/addons/police/functions/fnc_initPoliceStation.sqf +++ b/addons/police/functions/fnc_initPoliceStation.sqf @@ -47,5 +47,5 @@ _logic setVariable ["Marker", _marker]; _logic setVariable ["Teleporter", _flag, true]; [QGVAR(createTeleport), [_flag]] call CBA_fnc_globalEventJIP; -private _stationArea = _logic getVariable ["objectarea", []]; +private _stationArea = _logic getVariable ["objectArea", []]; [QGVAR(policeStationInitialized), [_logic]] call CBA_fnc_localEvent; From d40eb850f4af9cce96f7f6fc522ea3b6fded3428 Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Thu, 15 Feb 2024 22:08:32 +0100 Subject: [PATCH 17/18] Add .inc to initSettings name --- addons/vehicles/XEH_preInit.sqf | 2 +- addons/vehicles/{initSettings.sqf => initSettings.inc.sqf} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename addons/vehicles/{initSettings.sqf => initSettings.inc.sqf} (100%) diff --git a/addons/vehicles/XEH_preInit.sqf b/addons/vehicles/XEH_preInit.sqf index c20929f5..f7c1b526 100644 --- a/addons/vehicles/XEH_preInit.sqf +++ b/addons/vehicles/XEH_preInit.sqf @@ -2,7 +2,7 @@ ADDON = false; #include "XEH_PREP.hpp" -#include "initSettings.sqf" +#include "initSettings.inc.sqf" // We need some improvements in determining civilian vehicles limit GVAR(emptyVehiclesLimit) = 500; diff --git a/addons/vehicles/initSettings.sqf b/addons/vehicles/initSettings.inc.sqf similarity index 100% rename from addons/vehicles/initSettings.sqf rename to addons/vehicles/initSettings.inc.sqf From 1f42e3019bbb789c33e1136dd4f9568e90e19c8c Mon Sep 17 00:00:00 2001 From: 3Mydlo3 Date: Thu, 15 Feb 2024 22:08:53 +0100 Subject: [PATCH 18/18] Move vehicles init to 2nd postInit frame --- addons/vehicles/XEH_postInit.sqf | 4 ++-- addons/vehicles/XEH_preInit.sqf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/vehicles/XEH_postInit.sqf b/addons/vehicles/XEH_postInit.sqf index 72c89db7..d7d78e02 100644 --- a/addons/vehicles/XEH_postInit.sqf +++ b/addons/vehicles/XEH_postInit.sqf @@ -1,6 +1,8 @@ #include "script_component.hpp" if (isServer) then { + [FUNC(initVehicles)] call CBA_fnc_execNextFrame; + [QEGVAR(police,policeStationInitialized), { params ["_policeStationArea"]; // Register as blacklisted area for civilian vehicle spawn @@ -9,8 +11,6 @@ if (isServer) then { [QGVAR(carAlarm), FUNC(carAlarm)] call CBA_fnc_addEventHandler; [QGVAR(disableCarAlarm), FUNC(disableCarAlarm)] call CBA_fnc_addEventHandler; - - [FUNC(initVehicles)] call CBA_fnc_execNextFrame; }; if (hasInterface) then { diff --git a/addons/vehicles/XEH_preInit.sqf b/addons/vehicles/XEH_preInit.sqf index f7c1b526..9cb68a66 100644 --- a/addons/vehicles/XEH_preInit.sqf +++ b/addons/vehicles/XEH_preInit.sqf @@ -8,7 +8,7 @@ ADDON = false; GVAR(emptyVehiclesLimit) = 500; if (isServer) then { - call FUNC(initVehicles); + GVAR(vehicleBlacklistedAreas) = []; }; ADDON = true;