From 910a6a16ab11e4d7a84f65f996be1050ccf7446a Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Fri, 20 Feb 2015 00:44:54 +0200 Subject: [PATCH 01/57] Split out the EPEContactStart code into its own function since it was quite long. --- addons/explosives/XEH_preInit.sqf | 2 + addons/explosives/functions/fnc_onLanded.sqf | 52 ++++++++++++++ .../functions/fnc_place_Approve.sqf | 68 ++++--------------- 3 files changed, 68 insertions(+), 54 deletions(-) create mode 100644 addons/explosives/functions/fnc_onLanded.sqf diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 3747151d16..2ecc0cc20c 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -36,6 +36,8 @@ PREP(getDetonators); PREP(getPlacedExplosives); PREP(getSpeedDialExplosive); +PREP(onLanded); + PREP(openDetonateUI); PREP(openPlaceUI); PREP(openTransmitterUI); diff --git a/addons/explosives/functions/fnc_onLanded.sqf b/addons/explosives/functions/fnc_onLanded.sqf new file mode 100644 index 0000000000..9846580d60 --- /dev/null +++ b/addons/explosives/functions/fnc_onLanded.sqf @@ -0,0 +1,52 @@ +/* + * Author: Garth 'L-H' de Wet + * + * Arguments: + * + * Return Value: + * None + * + * Example: + * object addEventHandler ["EpeContactStart", ACE_explosive_fnc_onLanded]; + * + * Public: No + */ +#include "script_component.hpp" +if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { + private ["_player", "_pos", "_attachTo"]; + _player = ACE_player; + _player setVariable [QGVAR(PlantingExplosive), false]; + _pos = getPosATL (_this select 0); + (_this select 0) enableSimulationGlobal false; + if (surfaceIsWater _pos) then { + _pos = getPosASL (_this select 0); + (_this select 0) setPosASL _pos; + }else{ + (_this select 0) setPosATL _pos; + }; + (_this select 0) setVariable [QGVAR(Handled), true]; + _attachTo = objNull; + if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { + _attachTo = (_this select 1); + }; + private "_delay"; + _delay = getNumber(ConfigFile >> "CfgMagazines" >> ((_this select 0) getVariable [QGVAR(Class), ""]) >> "ACE_DelayTime"); + [{ + private ["_mag", "_setup", "_dir", "_player"]; + _setup = _this select 0; + _player = ACE_player; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; + _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); + deleteVehicle _setup; + if (!isNull(_explosive)) then { + _player RemoveMagazine _mag; + if (!isNull (_this select 1)) then { + _explosive attachTo [(_this select 1)]; + _dir = _dir - (getDir (_this select 1)); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); + }; + }; + }, [(_this select 0),_attachTo, _pos], _delay, 0.1] call EFUNC(common,waitAndExecute); +}; diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 77cfbb92a1..c416e198bf 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -39,67 +39,27 @@ if (_dir > 180) then { }; _setup setVariable [QGVAR(Direction), _dir]; _player setVariable [QGVAR(PlantingExplosive), true]; -_setup addEventHandler ["EpeContactStart", { - if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { - private ["_player", "_pos", "_attachTo"]; - _player = ACE_player; - _player setVariable [QGVAR(PlantingExplosive), false]; - _pos = getPosATL (_this select 0); - (_this select 0) enableSimulationGlobal false; - if (surfaceIsWater _pos) then { - _pos = getPosASL (_this select 0); - (_this select 0) setPosASL _pos; - }else{ - (_this select 0) setPosATL _pos; - }; - (_this select 0) setVariable [QGVAR(Handled), true]; - _attachTo = objNull; - if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { - _attachTo = (_this select 1); - }; - [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution - private ["_mag", "_setup", "_dir", "_player"]; - _setup = _this select 0; - _player = ACE_player; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; - - sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); - _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); - deleteVehicle _setup; - if (!isNull(_explosive)) then { - _player RemoveMagazine _mag; - if (!isNull (_this select 1)) then { - _explosive attachTo [(_this select 1)]; - _dir = _dir - (getDir (_this select 1)); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); - }; - }; - }; - }; -}]; +_setup addEventHandler ["EpeContactStart", FUNC(onLanded)]; _setup enableSimulationGlobal true; _player playActionNow "MedicOther"; -[_setup] spawn { // TODO: Change to scheduled delay execution + +[{ private ["_setup", "_player"]; - _setup = _this select 0; + _setup = _this; _player = ACE_player; - sleep 5; _player setVariable [QGVAR(PlantingExplosive), false]; if (!isNull _setup) then { private ["_mag", "_dir", "_delayTime"]; _mag = _setup getVariable [QGVAR(Class), ""]; _dir = _setup getVariable [QGVAR(Direction), 0]; - _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; - if (_delayTime > 0) then { - sleep _delayTime; - }; - if (!isNull _setup) then { - [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); - deleteVehicle _setup; - _player RemoveMagazine _mag; - }; + // TODO: Might need to handle this at some point? + //_delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; + //if (_delayTime > 0) then { + // sleep _delayTime; + //}; + [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); + deleteVehicle _setup; + _player RemoveMagazine _mag; }; -}; +}, _setup, 5, 0.5] call EFUNC(common,waitAndExecute); From 88af894f55e9f794718bbf7bf7f293b53a5c9dbc Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Fri, 20 Feb 2015 00:45:31 +0200 Subject: [PATCH 02/57] Added a SetTrigger action to placement items in preparation for changes over to a set trigger after place system as opposed to before. --- addons/explosives/CfgVehicles.hpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 983bc0972a..dc4bcf2bdc 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -74,6 +74,20 @@ class CfgVehicles { scopeCurator = 1; vehicleClass = "Cargo"; ACE_offset[] = {0,0,0}; + class ACE_Actions { + selection = ""; + class ACE_SetTrigger { + selection = ""; + displayName = "$STR_ACE_Explosives_TriggerMenu"; + distance = 4; + condition = QUOTE(true); + statement = QUOTE([_target getVariable QUOTE(QGVAR(class))] call FUNC(openTriggerSelectionUI);); + showDisabled = 0; + exceptions[] = {}; + priority = 0.3; + icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + }; + }; }; class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place { From 9d1b1e1b1270e31daa34f5b14db06ef6c68b032c Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Fri, 20 Feb 2015 03:28:16 +0200 Subject: [PATCH 03/57] Explosives are now placed first and then the trigger is set afterwards. --- addons/explosives/CfgVehicles.hpp | 24 +++++---- addons/explosives/config.cpp | 2 +- addons/explosives/functions/fnc_onLanded.sqf | 52 +++++++------------ .../explosives/functions/fnc_openPlaceUI.sqf | 2 +- .../functions/fnc_openTimerSetUI.sqf | 27 +++++++--- .../functions/fnc_openTriggerSelectionUI.sqf | 9 ++-- .../functions/fnc_placeExplosive.sqf | 13 ++--- .../functions/fnc_place_Approve.sqf | 6 ++- .../functions/fnc_selectTrigger.sqf | 17 +++--- .../functions/fnc_setupExplosive.sqf | 35 +++++-------- 10 files changed, 93 insertions(+), 94 deletions(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index dc4bcf2bdc..6fa150a1e4 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -75,17 +75,21 @@ class CfgVehicles { vehicleClass = "Cargo"; ACE_offset[] = {0,0,0}; class ACE_Actions { - selection = ""; - class ACE_SetTrigger { + class ACE_MainActions { selection = ""; - displayName = "$STR_ACE_Explosives_TriggerMenu"; - distance = 4; - condition = QUOTE(true); - statement = QUOTE([_target getVariable QUOTE(QGVAR(class))] call FUNC(openTriggerSelectionUI);); - showDisabled = 0; - exceptions[] = {}; - priority = 0.3; - icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + distance = 5; + condition = "true"; + class ACE_SetTrigger { + selection = ""; + displayName = "$STR_ACE_Explosives_TriggerMenu"; + distance = 4; + condition = "true"; + statement = QUOTE([_target getVariable QUOTE(QGVAR(class))] call FUNC(openTriggerSelectionUI);); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + }; }; }; }; diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index da95d45e7e..428d0352b1 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common", "ace_interaction"}; + requiredAddons[] = {"ace_interaction", "ace_interact_menu"}; author[] = {"Garth 'L-H' de Wet"}; authorUrl = "http://garth.snakebiteink.co.za/"; VERSION_CONFIG; diff --git a/addons/explosives/functions/fnc_onLanded.sqf b/addons/explosives/functions/fnc_onLanded.sqf index 9846580d60..f55098fa36 100644 --- a/addons/explosives/functions/fnc_onLanded.sqf +++ b/addons/explosives/functions/fnc_onLanded.sqf @@ -13,40 +13,26 @@ */ #include "script_component.hpp" if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { - private ["_player", "_pos", "_attachTo"]; - _player = ACE_player; - _player setVariable [QGVAR(PlantingExplosive), false]; - _pos = getPosATL (_this select 0); - (_this select 0) enableSimulationGlobal false; - if (surfaceIsWater _pos) then { - _pos = getPosASL (_this select 0); - (_this select 0) setPosASL _pos; - }else{ - (_this select 0) setPosATL _pos; - }; (_this select 0) setVariable [QGVAR(Handled), true]; - _attachTo = objNull; if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { - _attachTo = (_this select 1); - }; - private "_delay"; - _delay = getNumber(ConfigFile >> "CfgMagazines" >> ((_this select 0) getVariable [QGVAR(Class), ""]) >> "ACE_DelayTime"); - [{ - private ["_mag", "_setup", "_dir", "_player"]; - _setup = _this select 0; - _player = ACE_player; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; - _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); - deleteVehicle _setup; - if (!isNull(_explosive)) then { - _player RemoveMagazine _mag; - if (!isNull (_this select 1)) then { - _explosive attachTo [(_this select 1)]; - _dir = _dir - (getDir (_this select 1)); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); + _player RemoveMagazine _mag; + _explosive attachTo [(_this select 1)]; + _dir = _dir - (getDir (_this select 1)); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); + } else { + [{ + EXPLODE_2_PVT(_this,_player,_explosive); + private ["_pos"]; + _player setVariable [QGVAR(PlantingExplosive), false]; + _pos = getPosATL _explosive; + //_explosive enableSimulationGlobal false; + if (surfaceIsWater _pos) then { + _pos = getPosASL _explosive; + _explosive setPosASL _pos; + }else{ + _explosive setPosATL _pos; }; - }; - }, [(_this select 0),_attachTo, _pos], _delay, 0.1] call EFUNC(common,waitAndExecute); + _player RemoveMagazine _mag; + }, [ACE_player, _this select 0], 0.5, 0.1] call EFUNC(common,waitAndExecute); + }; }; diff --git a/addons/explosives/functions/fnc_openPlaceUI.sqf b/addons/explosives/functions/fnc_openPlaceUI.sqf index 5ad79381b1..619bd5bb08 100644 --- a/addons/explosives/functions/fnc_openPlaceUI.sqf +++ b/addons/explosives/functions/fnc_openPlaceUI.sqf @@ -47,7 +47,7 @@ _actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosive [ _actions, { - [_this] call FUNC(openTriggerSelectionUI); + [ACE_player, _this] call FUNC(setupExplosive); }, { call EFUNC(interaction,hideMenu); diff --git a/addons/explosives/functions/fnc_openTimerSetUI.sqf b/addons/explosives/functions/fnc_openTimerSetUI.sqf index d7f6ef30d8..e37bef06e3 100644 --- a/addons/explosives/functions/fnc_openTimerSetUI.sqf +++ b/addons/explosives/functions/fnc_openTimerSetUI.sqf @@ -3,24 +3,39 @@ * Opens the UI for timer setting of an explosive * * Arguments: - * 0: Magazine + * 0: Explosive + * 1: Magazine * * Return Value: * None * * Example: - * ["SatchelCharge_Remote_Mag"] call ACE_Explosives_fnc_openTimerSetUI; + * [_explosive, "SatchelCharge_Remote_Mag"] call ACE_Explosives_fnc_openTimerSetUI; * * Public: No */ #include "script_component.hpp" -private ["_mag"]; -_mag = _this select 0; +EXPLODE_2_PVT(_this,_explosive,_mag); createDialog "RscACE_SelectTimeUI"; sliderSetRange [8845, 5, 900]; // 5seconds - 15minutes sliderSetPosition [8845, 30]; -buttonSetAction [8860, format[QUOTE([ARR_4(ACE_player,'%1','Timer',floor sliderPosition 8845)] call FUNC(setupExplosive);closeDialog 0;), _mag]]; -buttonSetAction [8855, format[QUOTE(['%1'] call FUNC(openTriggerSelectionUI);), _mag]]; +GVAR(explosive) = _explosive; + +DFUNC(SetTimer) = { + [ + ACE_player, + getPosATL GVAR(explosive), + GVAR(explosive) getVariable QGVAR(Direction), + GVAR(explosive) getVariable QGVAR(class), + "Timer", + [floor sliderPosition 8845], + GVAR(explosive) + ] call FUNC(placeExplosive); + closeDialog 0; +}; + +buttonSetAction [8860, QUOTE(call DFUNC(SetTimer);)]; +buttonSetAction [8855, QUOTE(closeDialog 0;)]; ctrlSetText [8870, format[localize "STR_ACE_Explosives_TimerMenu",0, 30]]; diff --git a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf b/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf index 011bda9bee..3b818c7877 100644 --- a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf +++ b/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf @@ -4,12 +4,13 @@ * * Arguments: * 0: Explosive Magazine + * 1: Explosive * * Return Value: * None * * Example: - * [lbData [8866, lbCurSel 8866]] call ACE_Explosives_fnc_openTriggerSelectionUI; + * [lbData [8866, lbCurSel 8866], _explosive] call ACE_Explosives_fnc_openTriggerSelectionUI; * * Public: No */ @@ -43,15 +44,15 @@ _count = 0; } count _triggerTypes; if (_count == 0) then { - [ACE_player] call FUNC(openPlaceUI); [format[localize "STR_ACE_Explosives_NoTriggersAvailable", getText(configFile >> "CfgMagazines" >> _magazine >> "DisplayName")]] call EFUNC(Common,displayTextStructured); }else{ + GVAR(explosive) = _this select 1; [ _actions, { - [_this select 1, _this select 0] call FUNC(selectTrigger); + [GVAR(explosive),_this select 1, _this select 0] call FUNC(selectTrigger); }, - {[ACE_player] call FUNC(openPlaceUI);} + {closeDialog 0;GVAR(explosive) = objNull;} ] call EFUNC(interaction,openSelectMenu); }; diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index 1e1ac44bdf..59e8d33959 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -7,9 +7,9 @@ * 1: Position to place explosive * 2: Rotation * 3: Magazine class - * 4: Config of trigger + * 4: Config of trigger * 5: Variables required for the trigger type - * 6: Should direction be set + * 6: Explosive placeholder * * Return Value: * Placed explosive @@ -28,9 +28,8 @@ _dir = _this select 2; _magazineClass = _this select 3; _triggerConfig = _this select 4; _triggerSpecificVars = _this select 5; -_setDir = true; if (count _this > 6) then { - _setDir = _this select 6; + deleteVehicle (_this select 6); }; if (isNil "_triggerConfig") exitWith { @@ -52,10 +51,8 @@ if (isText(_magazineTrigger >> "ammo")) then { }; _triggerSpecificVars pushBack _triggerConfig; _explosive = createVehicle [_ammo, _pos, [], 0, "NONE"]; + if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars] call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; -if (_setDir) then { - [[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] - call EFUNC(common,execRemoteFnc); -}; +[[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); _explosive diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index c416e198bf..0142b28702 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -23,10 +23,10 @@ private ["_mag", "_setup", "_player"]; _setup = GVAR(Setup); GVAR(Setup) = objNull; [GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus); +[ACE_player, "DefaultAction", ACE_player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler); +[ACE_player, "MenuBack", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); GVAR(placer) = objNull; _player = ACE_player; -[_player, "DefaultAction", _player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler); -[_player, "MenuBack", _player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); call EFUNC(interaction,hideMouseHint); if ((_setup getVariable [QGVAR(Class), ""]) == "") exitWith { deleteVehicle _setup; @@ -43,6 +43,7 @@ _setup addEventHandler ["EpeContactStart", FUNC(onLanded)]; _setup enableSimulationGlobal true; _player playActionNow "MedicOther"; +/* [{ private ["_setup", "_player"]; _setup = _this; @@ -63,3 +64,4 @@ _player playActionNow "MedicOther"; _player RemoveMagazine _mag; }; }, _setup, 5, 0.5] call EFUNC(common,waitAndExecute); +*/ diff --git a/addons/explosives/functions/fnc_selectTrigger.sqf b/addons/explosives/functions/fnc_selectTrigger.sqf index 8c51fd2c9c..8afcfbb03b 100644 --- a/addons/explosives/functions/fnc_selectTrigger.sqf +++ b/addons/explosives/functions/fnc_selectTrigger.sqf @@ -3,26 +3,27 @@ * Selects a trigger for an explosive. * * Arguments: - * 0: Magazine - * 1: Trigger mode + * 0: Explosive + * 1: Magazine + * 2: Trigger mode * * Return Value: * None * * Example: - * ["SatchelCharge_Remote_Mag","Timer"] call ACE_Explosives_fnc_selectTrigger; + * [_explosive, "SatchelCharge_Remote_Mag","Timer"] call ACE_Explosives_fnc_selectTrigger; * * Public: No */ #include "script_component.hpp" private ["_magazine","_trigger"]; closeDialog 0; -_magazine = _this select 0; -_trigger = _this select 1; -_config = ConfigFile >> "CfgACE_Triggers" >> _trigger; call EFUNC(interaction,hideMenu); +EXPLODE_3_PVT(_this,_explosive,_magazine,_trigger); +_config = ConfigFile >> "CfgACE_Triggers" >> _trigger; +GVAR(explosive) = objNull; // If the onSetup function returns true, it is handled elsewhere -if (isText(_config >> "onSetup") && {[_magazine] call compile getText (_config >> "onSetup")}) exitWith {}; +if (isText(_config >> "onSetup") && {[_explosive,_magazine] call compile getText (_config >> "onSetup")}) exitWith {}; -[ACE_player, _magazine, _trigger] call FUNC(setupExplosive); +[ACE_player, getPosATL _explosive, _explosive getVariable [QGVAR(Direction), 0],_magazine, _trigger, [], _explosive] call ACE_Explosives_fnc_placeExplosive; diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 7f80ba7e63..504f0e3f04 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -5,43 +5,36 @@ * Arguments: * 0: Unit * 1: Classname of explosive to place. (CfgMagazine class) - * 2: Trigger Config - * 3: Timer (optional) * * Return Value: * None * * Example: - * [player, "SatchelCharge_Remote_Mag", "Command"] call ACE_Explosives_fnc_SetupExplosive; + * [player, "SatchelCharge_Remote_Mag"] call ACE_Explosives_fnc_SetupExplosive; * * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_class", "_config", "_timer"]; +closeDialog 0; +private ["_unit", "_class"]; _unit = _this select 0; _class = _this select 1; -_config = _this select 2; -_timer = _this select 3; GVAR(placer) = _unit; -// Commented out due to the fact there is a distinction between who can deactivate mines and who can plant them in standard configs. -// Would require custom config entries (ACE_ExplosiveSpecialist/ACE_Specialist) which excludes custom mods. -//if (ACE_Explosives_RequireSpecialist && {!([_unit] call ACE_Core_fnc_isEOD)}) exitWith {}; -if (isNil "_config") then { - _config = getArray(ConfigFile >> "CfgMagazines" >> _class >> "ACE_Triggers" >> "SupportedTriggers") select 0; -}; - -GVAR(Setup) = getText(ConfigFile >> "CfgMagazines" >> _class >> "ACE_SetupObject") createVehicleLocal [0,0,-10000]; +// TODO: check MP performance and MP compatible. +GVAR(Setup) = createVehicle [getText(ConfigFile >> "CfgMagazines" >> _class >> "ACE_SetupObject"),[0,0,-10000],[], 0, "NONE"]; GVAR(Setup) enableSimulationGlobal false; -GVAR(Setup) setVariable [QGVAR(Class), _class]; -GVAR(Setup) setVariable [QGVAR(Trigger), _config]; -//GVAR(Setup) setVariable [QGVAR(Offset), GetArray(ConfigFile >> "CfgVehicles" >> typeof GVAR(Setup) >> "ACE_Offset")]; -if (!isNil "_timer") then { - GVAR(Setup) setVariable [QGVAR(Timer), _timer]; -}; +GVAR(Setup) setVariable [QGVAR(class), _class]; +private "_container"; +_container = [GVAR(Setup),"",QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)),"",{}, {true}, 4] call EFUNC(interact_menu,addAction); +[_container,"Set Trigger", QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)),"", +{[_target getVariable QGVAR(class),_target] call FUNC(openTriggerSelectionUI)}, {true}, 4] call EFUNC(interact_menu,addAction); +[_container,"Pick up", QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)),"", +{ACE_Player addMagazine (_target getVariable QGVAR(class));deleteVehicle _target;}, {true}, 4] call EFUNC(interact_menu,addAction); [_unit, "ACE_Explosives", true] call EFUNC(common,setForceWalkStatus); GVAR(TweakedAngle) = 180; + [QGVAR(Placement),"OnEachFrame", { private "_player"; _player = ACE_player; @@ -50,12 +43,12 @@ GVAR(TweakedAngle) = 180; }; GVAR(pfeh_running) = true; _pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]); - //_pos = _pos vectorAdd ((VectorDir GVAR(Setup)) vectorCrossProduct (GVAR(Setup) getVariable [QGVAR(Offset), [0,0,0]])); GVAR(Setup) setPosATL _pos; if (ACE_Modifier == 0) then { GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player); }; }] call CALLSTACK(BIS_fnc_addStackedEventHandler); + [localize "STR_ACE_Explosives_PlaceAction", localize "STR_ACE_Explosives_CancelAction", localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint); _unit setVariable [QGVAR(Place), [_unit, "DefaultAction", From 386fee4694eb6744ea8bce34edf09e4888ca2649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Thu, 19 Mar 2015 13:31:45 -0300 Subject: [PATCH 04/57] Replace place list menu by dynamically created actions --- addons/explosives/CfgVehicles.hpp | 3 +- addons/explosives/XEH_preInit.sqf | 2 +- .../functions/fnc_addExplosiveActions.sqf | 55 +++++++++++++++++++ .../explosives/functions/fnc_openPlaceUI.sqf | 55 ------------------- 4 files changed, 58 insertions(+), 57 deletions(-) create mode 100644 addons/explosives/functions/fnc_addExplosiveActions.sqf delete mode 100644 addons/explosives/functions/fnc_openPlaceUI.sqf diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index e62b31aa56..99f884c0ab 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -26,7 +26,8 @@ class CfgVehicles { class ACE_Place { displayName = $STR_ACE_Explosives_Place; condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)}); - statement = QUOTE([_player] call FUNC(openPlaceUI);); + statement = ""; + insertChildren = QUOTE([_player] call FUNC(addExplosiveActions);); exceptions[] = {"ACE_Interaction_isNotSwimming"}; showDisabled = 1; icon = PATHTOF(UI\Place_Explosive_ca.paa); diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 3747151d16..c306a1f2f2 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -19,6 +19,7 @@ ADDON = false; PREP(addCellphoneIED); PREP(addClacker); +PREP(addExplosiveActions); PREP(addToSpeedDial); PREP(canDefuse); PREP(canDetonate); @@ -37,7 +38,6 @@ PREP(getPlacedExplosives); PREP(getSpeedDialExplosive); PREP(openDetonateUI); -PREP(openPlaceUI); PREP(openTransmitterUI); PREP(openTimerSetUI); PREP(openTriggerSelectionUI); diff --git a/addons/explosives/functions/fnc_addExplosiveActions.sqf b/addons/explosives/functions/fnc_addExplosiveActions.sqf new file mode 100644 index 0000000000..6cdc611329 --- /dev/null +++ b/addons/explosives/functions/fnc_addExplosiveActions.sqf @@ -0,0 +1,55 @@ +/* + * Author: Garth 'L-H' de Wet and CAA-Picard + * + * + * Arguments: + * 0: Unit + * + * Return Value: + * Actions + * + * Public: No + */ +#include "script_component.hpp" +private ["_mags", "_item", "_index", "_actions"]; + +EXPLODE_1_PVT(_this,_unit); + +_mags = magazines _unit; +_list = []; +_itemCount = []; +{ + _item = ConfigFile >> "CfgMagazines" >> _x; + if (getNumber(_item >> "ACE_Placeable") == 1) then { + _index = _list find _item; + if (_index != -1) then { + _itemCount set [_index, (_itemCount select _index) + 1]; + } else { + _list pushBack _item; + _itemCount pushBack 1; + }; + }; +} forEach _mags; + +_children = []; + +{ + _action = [ + [format ["Explosive_%1", _forEachIndex]], + format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], + getText(_x >> "picture"), + "", + {(_this select 2) call FUNC(openTriggerSelectionUI)}, + {true}, + 2, + [false,false,false,false], + {}, + [configName _x] + ] call EFUNC(interact_menu,createAction); + + _action pushBack _unit; + _children pushBack _action + +} foreach _list; + +_children diff --git a/addons/explosives/functions/fnc_openPlaceUI.sqf b/addons/explosives/functions/fnc_openPlaceUI.sqf deleted file mode 100644 index 6eb2d478bf..0000000000 --- a/addons/explosives/functions/fnc_openPlaceUI.sqf +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Author: Garth 'L-H' de Wet - * Opens the UI for explosive placement selection - * - * Arguments: - * 0: Unit - * - * Return Value: - * None - * - * Example: - * [player] call ACE_Explosives_fnc_openPlaceUI; - * - * Public: No - */ -#include "script_component.hpp" -private ["_unit","_mags", "_item", "_index", "_actions"]; -_unit = _this select 0; -call FUNC(place_Cancel); - -_mags = magazines _unit; -_list = []; -_itemCount = []; -{ - _item = ConfigFile >> "CfgMagazines" >> _x; - if (getNumber(_item >> "ACE_Placeable") == 1) then { - _index = _list find _item; - if (_index != -1) then { - _itemCount set [_index, (_itemCount select _index) + 1]; - } else { - _list pushBack _item; - _itemCount pushBack 1; - }; - }; -} forEach _mags; -_actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosives_Place"] - call EFUNC(interaction,prepareSelectMenu); -{ - _actions = [ - _actions, - format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], - getText(_x >> "picture"), - configName _x - ] call EFUNC(interaction,AddSelectableItem); -} foreach _list; - -[ - _actions, - { - [_this] call FUNC(openTriggerSelectionUI); - }, - { - call EFUNC(interaction,hideMenu); - } -] call EFUNC(interaction,openSelectMenu); From 37fe824426d9c41f5e6e7ec06208a07ac53e7afe Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Tue, 31 Mar 2015 17:12:12 +0200 Subject: [PATCH 05/57] Added pickup action to put down explosives. --- addons/explosives/CfgVehicles.hpp | 12 +++++++++++- addons/explosives/stringtable.xml | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index f942c057fa..4fa9c28717 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -5,7 +5,6 @@ class CfgVehicles { class Man; - class CAManBase: Man { class ACE_SelfActions { class ACE_Explosives { @@ -89,6 +88,17 @@ class CfgVehicles { priority = 5; icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); }; + class ACE_PickUp { + selection = ""; + displayName = "$STR_ACE_Explosives_Pickup"; + distance = 4; + condition = "true"; + statement = QUOTE(_player addMagazine (_target getVariable QUOTE(QGVAR(class)));destroyVehicle _target;); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + }; }; }; }; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 0b67fe5a7e..479514d176 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -490,5 +490,8 @@ Robbanóanyagok távoli robbantásához Используется для дистанционного подрыва, после смерти оператора. + + Pick up + From 8158a3e8416b72f5f140ef50b1da277cb77d58e1 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Tue, 31 Mar 2015 19:26:38 +0200 Subject: [PATCH 06/57] Fixed small errors caused by working blind. --- addons/explosives/CfgVehicles.hpp | 3 ++- addons/explosives/functions/fnc_place_Approve.sqf | 1 + addons/explosives/functions/fnc_selectTrigger.sqf | 2 +- addons/explosives/functions/fnc_setupExplosive.sqf | 8 +------- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 599c4cc950..cd877ddf8f 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -57,6 +57,7 @@ class CfgVehicles { class Items_base_F; class ACE_Explosives_Place: Items_base_F { + XEH_ENABLED; author = "ACE"; _generalMacro = "ACE_Explosives_Place"; displayName = "Multi-meter"; @@ -88,7 +89,7 @@ class CfgVehicles { displayName = "$STR_ACE_Explosives_Pickup"; distance = 4; condition = "true"; - statement = QUOTE(_player addMagazine (_target getVariable QUOTE(QGVAR(class)));destroyVehicle _target;); + statement = QUOTE(_player addMagazine (_target getVariable QUOTE(QGVAR(class)));deleteVehicle _target;); showDisabled = 0; exceptions[] = {}; priority = 5; diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 0142b28702..3b61d2572e 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -42,6 +42,7 @@ _player setVariable [QGVAR(PlantingExplosive), true]; _setup addEventHandler ["EpeContactStart", FUNC(onLanded)]; _setup enableSimulationGlobal true; _player playActionNow "MedicOther"; +_player removeMagazine (_setup getVariable [QGVAR(Class), ""]); /* [{ diff --git a/addons/explosives/functions/fnc_selectTrigger.sqf b/addons/explosives/functions/fnc_selectTrigger.sqf index 8afcfbb03b..6645a5cf33 100644 --- a/addons/explosives/functions/fnc_selectTrigger.sqf +++ b/addons/explosives/functions/fnc_selectTrigger.sqf @@ -16,7 +16,7 @@ * Public: No */ #include "script_component.hpp" -private ["_magazine","_trigger"]; +private ["_config"]; closeDialog 0; call EFUNC(interaction,hideMenu); EXPLODE_3_PVT(_this,_explosive,_magazine,_trigger); diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 504f0e3f04..479cefa3cf 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -24,13 +24,7 @@ GVAR(placer) = _unit; GVAR(Setup) = createVehicle [getText(ConfigFile >> "CfgMagazines" >> _class >> "ACE_SetupObject"),[0,0,-10000],[], 0, "NONE"]; GVAR(Setup) enableSimulationGlobal false; -GVAR(Setup) setVariable [QGVAR(class), _class]; -private "_container"; -_container = [GVAR(Setup),"",QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)),"",{}, {true}, 4] call EFUNC(interact_menu,addAction); -[_container,"Set Trigger", QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)),"", -{[_target getVariable QGVAR(class),_target] call FUNC(openTriggerSelectionUI)}, {true}, 4] call EFUNC(interact_menu,addAction); -[_container,"Pick up", QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)),"", -{ACE_Player addMagazine (_target getVariable QGVAR(class));deleteVehicle _target;}, {true}, 4] call EFUNC(interact_menu,addAction); +GVAR(Setup) setVariable [QGVAR(class), _class, true]; [_unit, "ACE_Explosives", true] call EFUNC(common,setForceWalkStatus); GVAR(TweakedAngle) = 180; From c020128f0ef243764dad1f77bb7174939f37ffc0 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Tue, 31 Mar 2015 23:20:32 +0200 Subject: [PATCH 07/57] Made explosives use children action points rather than the listbox at all points. Added the ability to defuse on explosives. "on explosives", there is a helper object that handles defusing. Known issue, it appears that the attachTo explosives don't detonate. This means the currently approach should be changed to a object variable method, instead of an attached object method. --- addons/explosives/CfgVehicles.hpp | 46 ++++++++++++++----- .../functions/fnc_addExplosiveActions.sqf | 32 ++++++------- addons/explosives/functions/fnc_canDefuse.sqf | 16 +------ .../functions/fnc_defuseExplosive.sqf | 6 +++ .../functions/fnc_detonateExplosive.sqf | 8 +++- .../functions/fnc_openDetonateUI.sqf | 45 ++++++++---------- .../functions/fnc_openTransmitterUI.sqf | 41 ++++++++--------- .../functions/fnc_openTriggerSelectionUI.sqf | 37 +++++++-------- .../functions/fnc_placeExplosive.sqf | 11 +++++ .../functions/fnc_selectTrigger.sqf | 1 - .../explosives/functions/fnc_startDefuse.sqf | 2 +- 11 files changed, 133 insertions(+), 112 deletions(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 5ed37322b3..1e039b0770 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -15,7 +15,8 @@ class CfgVehicles { class ACE_Detonate { displayName = $STR_ACE_Explosives_Detonate; condition = QUOTE([_player] call FUNC(canDetonate)); - statement = QUOTE([_player] call FUNC(openTransmitterUI);); + statement = ""; + insertChildren = QUOTE([_player] call FUNC(openTransmitterUI);); exceptions[] = {"isNotSwimming"}; showDisabled = 1; icon = PATHTOF(UI\Explosives_Menu_ca.paa); @@ -33,16 +34,6 @@ class CfgVehicles { priority = 1; hotkey = "P"; }; - class ACE_Defuse { - displayName = $STR_ACE_Explosives_Defuse; - condition = QUOTE([_player] call FUNC(canDefuse)); - statement = QUOTE([ARR_2(_player,EGVAR(Interaction,Target))] call FUNC(startDefuse);); - exceptions[] = {"isNotSwimming"}; - showDisabled = 0; - icon = PATHTOF(UI\Defuse_ca.paa); - priority = 0.8; - hotkey = "F"; - }; class ACE_Cellphone { displayName = $STR_ACE_Explosives_cellphone_displayName; condition = "('ACE_Cellphone' in (items ace_player))"; @@ -57,6 +48,36 @@ class CfgVehicles { }; class Items_base_F; + class ACE_DefuseObject: Items_base_F { + XEH_ENABLED; + author = "ACE"; + _generalMacro = "ACE_DefuseObject"; + displayName = "ACE Defuse Helper"; + mapSize = 0.2; + icon = "iconObject_1x2"; + model = "\A3\Weapons_f\dummyweapon.p3d"; + scope = 2; + scopeCurator = 1; + vehicleClass = "Cargo"; + class ACE_Actions { + class ACE_MainActions { + selection = ""; + distance = 5; + condition = "true"; + class ACE_Defuse { + displayName = $STR_ACE_Explosives_Defuse; + condition = QUOTE([_player] call FUNC(canDefuse)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse);); + exceptions[] = {"isNotSwimming"}; + showDisabled = 0; + icon = PATHTOF(UI\Defuse_ca.paa); + priority = 0.8; + hotkey = "F"; + distance = 5; + }; + }; + }; + }; class ACE_Explosives_Place: Items_base_F { XEH_ENABLED; author = "ACE"; @@ -79,7 +100,8 @@ class CfgVehicles { displayName = "$STR_ACE_Explosives_TriggerMenu"; distance = 4; condition = "true"; - statement = QUOTE([_target getVariable QUOTE(QGVAR(class))] call FUNC(openTriggerSelectionUI);); + statement = ""; + insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(openTriggerSelectionUI);); showDisabled = 0; exceptions[] = {}; priority = 5; diff --git a/addons/explosives/functions/fnc_addExplosiveActions.sqf b/addons/explosives/functions/fnc_addExplosiveActions.sqf index 6cdc611329..b57549114c 100644 --- a/addons/explosives/functions/fnc_addExplosiveActions.sqf +++ b/addons/explosives/functions/fnc_addExplosiveActions.sqf @@ -11,7 +11,7 @@ * Public: No */ #include "script_component.hpp" -private ["_mags", "_item", "_index", "_actions"]; +private ["_mags", "_item", "_index", "_children"]; EXPLODE_1_PVT(_this,_unit); @@ -34,22 +34,20 @@ _itemCount = []; _children = []; { - _action = [ - [format ["Explosive_%1", _forEachIndex]], - format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], - getText(_x >> "picture"), - "", - {(_this select 2) call FUNC(openTriggerSelectionUI)}, - {true}, - 2, - [false,false,false,false], - {}, - [configName _x] - ] call EFUNC(interact_menu,createAction); - - _action pushBack _unit; - _children pushBack _action - + _children pushBack + [ + [ + format ["Explosive_%1", _forEachIndex], + format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], + getText(_x >> "picture"), + {(_this select 2) call FUNC(setupExplosive);}, + {true}, + {}, + [_unit, configName _x] + ] call EFUNC(interact_menu,createAction), + [], + _unit + ]; } foreach _list; _children diff --git a/addons/explosives/functions/fnc_canDefuse.sqf b/addons/explosives/functions/fnc_canDefuse.sqf index 566363c2ad..9ef0c14838 100644 --- a/addons/explosives/functions/fnc_canDefuse.sqf +++ b/addons/explosives/functions/fnc_canDefuse.sqf @@ -21,18 +21,4 @@ _isSpecialist = [_unit] call EFUNC(Common,isEOD); if (GVAR(RequireSpecialist) && {!_isSpecialist}) exitWith {false}; -_timeBombCore = nearestObject [_unit, "TimeBombCore"]; -_mineBase = nearestObject [_unit, "MineBase"]; - -_distCore = _unit distance _timeBombCore; -_distBase = _unit distance _mineBase; -_distance = 10; -if (_distCore < _distBase) then { - _distance = _distCore; - EGVAR(interaction,Target) = _timeBombCore; -}else{ - _distance = _distBase; - EGVAR(interaction,Target) = _mineBase; -}; -if (isNil "_distance") exitWith {false}; -_distance < 4 +true diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index 5836c9e210..6df661a802 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -23,4 +23,10 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDef [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); }; +_helper = (attachedTo _explosive); +if (!isNull(_helper)) then { + detach _explosive; + deleteVehicle _helper; +}; + _unit action ["Deactivate", _unit, _explosive]; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 697c8eeed7..c1cf1d86db 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -28,6 +28,12 @@ _result = true; if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false}; +_helper = (attachedTo (_item select 0)); +if (!isNull(_helper)) then { + detach (_item select 0); + deleteVehicle _helper; +}; + if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then { private ["_exp", "_previousExp"]; _previousExp = _item select 0; @@ -44,7 +50,7 @@ if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhe [{ _explosive = _this; if (!isNull _explosive) then { - _explosive setDamage 1; + _explosive setDamage 1; }; }, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/explosives/functions/fnc_openDetonateUI.sqf b/addons/explosives/functions/fnc_openDetonateUI.sqf index a14865bc20..e00a620143 100644 --- a/addons/explosives/functions/fnc_openDetonateUI.sqf +++ b/addons/explosives/functions/fnc_openDetonateUI.sqf @@ -15,47 +15,42 @@ * Public: No */ #include "script_component.hpp" -private ["_unit","_result", "_item"]; +private ["_unit","_result", "_item", "_children"]; call EFUNC(interaction,hideMenu); _unit = _this select 0; _detonator = _this select 1; _range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); _result = [_unit] call FUNC(getPlacedExplosives); -_actions = [localize "STR_ACE_Explosives_DetonateMenu", localize "STR_ACE_Explosives_Detonate"] - call EFUNC(interaction,prepareSelectMenu); +_children = []; _count = 0; { if (!isNull(_x select 0)) then { _required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires"); if (_detonator in _required) then { _item = ConfigFile >> "CfgMagazines" >> (_x select 3); - _actions = [ - _actions, - _x select 2, - getText(_item >> "picture"), - [_foreachIndex, _range] - ] call EFUNC(interaction,AddSelectableItem); + + _children pushBack + [ + [ + format ["Explosive_%1", _forEachIndex], + _x select 2, + getText(_item >> "picture"), + {(_this select 2) call FUNC(detonateExplosive);}, + {true}, + {}, + [ACE_player,_range,_x] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; _count = _count + 1; }; }; } foreach _result; -if (_count > 0) then { - [ - _actions, - { - [ - ACE_player, - [_this select 1] call EFUNC(common,toNumber), - (ACE_player getVariable [QGVAR(Clackers), []]) select ([_this select 0] call EFUNC(common,toNumber)), - false - ] call FUNC(detonateExplosive); - call EFUNC(interaction,hideMenu); - }, - {[ACE_player] call FUNC(openTransmitterUI);} - ] call EFUNC(interaction,openSelectMenu); -}else{ +if (_count == 0) then { call EFUNC(interaction,hideMenu); - [ACE_player] call FUNC(openTransmitterUI); [localize "STR_ACE_Explosives_NoExplosivesAvailable"] call EFUNC(common,displayTextStructured); }; + +_children diff --git a/addons/explosives/functions/fnc_openTransmitterUI.sqf b/addons/explosives/functions/fnc_openTransmitterUI.sqf index f90636474e..dcd0436f5b 100644 --- a/addons/explosives/functions/fnc_openTransmitterUI.sqf +++ b/addons/explosives/functions/fnc_openTransmitterUI.sqf @@ -14,35 +14,32 @@ * Public: No */ #include "script_component.hpp" -private ["_items", "_unit", "_count", "_actions", "_config"]; +private ["_items", "_unit", "_count", "_children", "_config"]; _unit = _this select 0; -_items = (items _unit); - -_actions = [localize "STR_ACE_Explosives_TriggerMenu", localize "STR_ACE_Explosives_SelectTrigger"] - call EFUNC(interaction,prepareSelectMenu); _detonators = [_unit] call FUNC(getDetonators); +_children = []; { _config = ConfigFile >> "CfgWeapons" >> _x; - _actions = [ - _actions, - getText(_config >> "displayName"), - getText(_config >> "picture"), - _x - ] call EFUNC(interaction,addSelectableItem); -} count _detonators; + _children pushBack + [ + [ + format ["Trigger_%1", _forEachIndex], + getText(_config >> "displayName"), + getText(_config >> "picture"), + {}, + {true}, + {(_this select 2) call FUNC(openDetonateUI);}, + [ACE_player,_x] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; +} foreach _detonators; if (count _detonators == 0) then { call EFUNC(interaction,hideMenu); "ACE_Explosives" call EFUNC(interaction,openMenuSelf); [format[localize "STR_ACE_Explosives_NoTriggersAvailable", "player"]] call EFUNC(Common,displayTextStructured); -}else{ - [ - _actions, - { - [ACE_player, _this] call FUNC(openDetonateUI); - }, - { - call EFUNC(interaction,hideMenu); - } - ] call EFUNC(interaction,openSelectMenu); }; + +_children diff --git a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf b/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf index 3b818c7877..acf9eeffdb 100644 --- a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf +++ b/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf @@ -15,15 +15,15 @@ * Public: No */ #include "script_component.hpp" -private ["_magazine", "_hasRequiredItems","_triggerTypes", "_actions", "_detonators", "_required", "_magTriggers"]; +private ["_magazine", "_hasRequiredItems","_triggerTypes", "_children", "_detonators", "_required", "_magTriggers"]; _magazine = _this select 0; +_explosive = _this select 1; _detonators = [ACE_player] call FUNC(getDetonators); _triggerTypes = [_magazine] call FUNC(triggerType); _magTriggers = ConfigFile >> "CfgMagazines" >> _magazine >> "ACE_Triggers"; -_actions = [localize "STR_ACE_Explosives_TriggerMenu", localize "STR_ACE_Explosives_SelectTrigger"] - call EFUNC(interaction,prepareSelectMenu); _count = 0; +_children = []; { _required = getArray (_x >> "requires"); _hasRequiredItems = true; @@ -33,12 +33,20 @@ _count = 0; }; } count _required; if (_hasRequiredItems) then { - _actions = [ - _actions, - if(isText(_magTriggers >> configName _x >> "displayName"))then{getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, - if(isText(_magTriggers >> configName _x >> "picture"))then{getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, - [configName _x, _magazine] - ] call EFUNC(interaction,addSelectableItem); + _children pushBack + [ + [ + format ["Trigger_%1", _forEachIndex], + if(isText(_magTriggers >> configName _x >> "displayName"))then{getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, + if(isText(_magTriggers >> configName _x >> "picture"))then{getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, + {(_this select 2) call FUNC(selectTrigger);}, + {true}, + {}, + [_explosive, _magazine, configName _x] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; _count = _count + 1; }; } count _triggerTypes; @@ -46,13 +54,6 @@ _count = 0; if (_count == 0) then { [format[localize "STR_ACE_Explosives_NoTriggersAvailable", getText(configFile >> "CfgMagazines" >> _magazine >> "DisplayName")]] call EFUNC(Common,displayTextStructured); -}else{ - GVAR(explosive) = _this select 1; - [ - _actions, - { - [GVAR(explosive),_this select 1, _this select 0] call FUNC(selectTrigger); - }, - {closeDialog 0;GVAR(explosive) = objNull;} - ] call EFUNC(interaction,openSelectMenu); }; + +_children diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index 59e8d33959..f91f448a55 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -50,7 +50,18 @@ if (isText(_magazineTrigger >> "ammo")) then { _ammo = getText (_magazineTrigger >> "ammo"); }; _triggerSpecificVars pushBack _triggerConfig; +private ["_defuseHelper"]; +_defuseHelper = createVehicle ["ACE_DefuseObject", _pos, [], 0, "NONE"]; +_defuseHelper setPosATL _pos; + _explosive = createVehicle [_ammo, _pos, [], 0, "NONE"]; +_explosive attachTo [_defuseHelper, [0,0,0], ""]; + +_expPos = getPosATL _explosive; +_defuseHelper enableSimulationGlobal false; +_defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos))); +_explosive setPosATL _pos; +_dir = (getDir _defuseHelper) - _dir; if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars] call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; diff --git a/addons/explosives/functions/fnc_selectTrigger.sqf b/addons/explosives/functions/fnc_selectTrigger.sqf index 6645a5cf33..a27d512475 100644 --- a/addons/explosives/functions/fnc_selectTrigger.sqf +++ b/addons/explosives/functions/fnc_selectTrigger.sqf @@ -21,7 +21,6 @@ closeDialog 0; call EFUNC(interaction,hideMenu); EXPLODE_3_PVT(_this,_explosive,_magazine,_trigger); _config = ConfigFile >> "CfgACE_Triggers" >> _trigger; -GVAR(explosive) = objNull; // If the onSetup function returns true, it is handled elsewhere if (isText(_config >> "onSetup") && {[_explosive,_magazine] call compile getText (_config >> "onSetup")}) exitWith {}; diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index 35e5e682df..28dc639e9a 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" private ["_unit","_target"]; _unit = _this select 0; -_target = _this select 1; +_target = (attachedObjects (_this select 1)) select 0; _fnc_DefuseTime = { _target = _this select 1; From 7d5555a2e01245ffebca6aaea74c02257a161b89 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 1 Apr 2015 19:09:19 +0200 Subject: [PATCH 08/57] Renamed functions to be more inline with their purpose. Removed legacy code. --- addons/explosives/CfgVehicles.hpp | 10 +++++----- addons/explosives/XEH_preInit.sqf | 6 +++--- addons/explosives/config.cpp | 2 +- ...etonateUI.sqf => fnc_addDetonateActions.sqf} | 8 +------- .../functions/fnc_addExplosiveActions.sqf | 5 ++++- ...tterUI.sqf => fnc_addTransmitterActions.sqf} | 12 +++--------- ...electionUI.sqf => fnc_addTriggerActions.sqf} | 17 ++++++----------- 7 files changed, 23 insertions(+), 37 deletions(-) rename addons/explosives/functions/{fnc_openDetonateUI.sqf => fnc_addDetonateActions.sqf} (80%) rename addons/explosives/functions/{fnc_openTransmitterUI.sqf => fnc_addTransmitterActions.sqf} (60%) rename addons/explosives/functions/{fnc_openTriggerSelectionUI.sqf => fnc_addTriggerActions.sqf} (69%) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 1e039b0770..2ef6dd77c0 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -6,7 +6,7 @@ class CfgVehicles { displayName = $STR_ACE_Explosives_Menu; condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)])); statement = ""; - exceptions[] = {"isNotSwimming"}; + exceptions[] = {"isNotSwimming", "isNotInside"}; showDisabled = 1; priority = 4; icon = PATHTOF(UI\Explosives_Menu_ca.paa); @@ -16,8 +16,8 @@ class CfgVehicles { displayName = $STR_ACE_Explosives_Detonate; condition = QUOTE([_player] call FUNC(canDetonate)); statement = ""; - insertChildren = QUOTE([_player] call FUNC(openTransmitterUI);); - exceptions[] = {"isNotSwimming"}; + insertChildren = QUOTE([_player] call FUNC(addTransmitterActions);); + exceptions[] = {"isNotSwimming", "isNotInside"}; showDisabled = 1; icon = PATHTOF(UI\Explosives_Menu_ca.paa); priority = 2; @@ -38,7 +38,7 @@ class CfgVehicles { displayName = $STR_ACE_Explosives_cellphone_displayName; condition = "('ACE_Cellphone' in (items ace_player))"; statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; - exceptions[] = {"isNotSwimming"}; + exceptions[] = {"isNotSwimming", "isNotInside"}; showDisabled = 0; icon = PATHTOF(Data\UI\Cellphone_UI.paa); priority = 0.8; @@ -101,7 +101,7 @@ class CfgVehicles { distance = 4; condition = "true"; statement = ""; - insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(openTriggerSelectionUI);); + insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); showDisabled = 0; exceptions[] = {}; priority = 5; diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index b905c6e736..435624d2a5 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -19,8 +19,11 @@ ADDON = false; PREP(addCellphoneIED); PREP(addClacker); +PREP(addDetonateActions); PREP(addExplosiveActions); PREP(addToSpeedDial); +PREP(addTransmitterActions); +PREP(addTriggerActions); PREP(canDefuse); PREP(canDetonate); PREP(defuseExplosive); @@ -39,10 +42,7 @@ PREP(getSpeedDialExplosive); PREP(onLanded); -PREP(openDetonateUI); -PREP(openTransmitterUI); PREP(openTimerSetUI); -PREP(openTriggerSelectionUI); PREP(place_Approve); PREP(place_Cancel); diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index 428d0352b1..f11ff2b358 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interaction", "ace_interact_menu"}; + requiredAddons[] = {"ace_interaction"}; author[] = {"Garth 'L-H' de Wet"}; authorUrl = "http://garth.snakebiteink.co.za/"; VERSION_CONFIG; diff --git a/addons/explosives/functions/fnc_openDetonateUI.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf similarity index 80% rename from addons/explosives/functions/fnc_openDetonateUI.sqf rename to addons/explosives/functions/fnc_addDetonateActions.sqf index e00a620143..65077323e5 100644 --- a/addons/explosives/functions/fnc_openDetonateUI.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -10,7 +10,7 @@ * None * * Example: - * [player, "ACE_M26_Clacker"] call ACE_Explosives_fnc_openDetonateUI; + * [player, "ACE_M26_Clacker"] call ACE_Explosives_fnc_addDetonateActions; * * Public: No */ @@ -23,7 +23,6 @@ _range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); _result = [_unit] call FUNC(getPlacedExplosives); _children = []; -_count = 0; { if (!isNull(_x select 0)) then { _required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires"); @@ -44,13 +43,8 @@ _count = 0; [], ACE_Player ]; - _count = _count + 1; }; }; } foreach _result; -if (_count == 0) then { - call EFUNC(interaction,hideMenu); - [localize "STR_ACE_Explosives_NoExplosivesAvailable"] call EFUNC(common,displayTextStructured); -}; _children diff --git a/addons/explosives/functions/fnc_addExplosiveActions.sqf b/addons/explosives/functions/fnc_addExplosiveActions.sqf index b57549114c..29a2eed608 100644 --- a/addons/explosives/functions/fnc_addExplosiveActions.sqf +++ b/addons/explosives/functions/fnc_addExplosiveActions.sqf @@ -34,11 +34,14 @@ _itemCount = []; _children = []; { + private "_name"; + _name = if(isText(_x >> "displayNameShort") && {getText(_x >> "displayNameShort") != ""}) then + {getText (_x >> "displayNameShort")}else{getText(_x >> "displayName")}; _children pushBack [ [ format ["Explosive_%1", _forEachIndex], - format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], + format [_name + " (%1)", _itemCount select _foreachIndex], getText(_x >> "picture"), {(_this select 2) call FUNC(setupExplosive);}, {true}, diff --git a/addons/explosives/functions/fnc_openTransmitterUI.sqf b/addons/explosives/functions/fnc_addTransmitterActions.sqf similarity index 60% rename from addons/explosives/functions/fnc_openTransmitterUI.sqf rename to addons/explosives/functions/fnc_addTransmitterActions.sqf index dcd0436f5b..0313b8824e 100644 --- a/addons/explosives/functions/fnc_openTransmitterUI.sqf +++ b/addons/explosives/functions/fnc_addTransmitterActions.sqf @@ -9,12 +9,12 @@ * Nothing * * Example: - * [player] call ACE_Explosives_fnc_openTransmitterUI; + * [player] call ACE_Explosives_fnc_addTransmitterActions; * * Public: No */ #include "script_component.hpp" -private ["_items", "_unit", "_count", "_children", "_config"]; +private ["_items", "_unit", "_children", "_config"]; _unit = _this select 0; _detonators = [_unit] call FUNC(getDetonators); _children = []; @@ -28,7 +28,7 @@ _children = []; getText(_config >> "picture"), {}, {true}, - {(_this select 2) call FUNC(openDetonateUI);}, + {(_this select 2) call FUNC(addDetonateActions);}, [ACE_player,_x] ] call EFUNC(interact_menu,createAction), [], @@ -36,10 +36,4 @@ _children = []; ]; } foreach _detonators; -if (count _detonators == 0) then { - call EFUNC(interaction,hideMenu); - "ACE_Explosives" call EFUNC(interaction,openMenuSelf); - [format[localize "STR_ACE_Explosives_NoTriggersAvailable", "player"]] call EFUNC(Common,displayTextStructured); -}; - _children diff --git a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf b/addons/explosives/functions/fnc_addTriggerActions.sqf similarity index 69% rename from addons/explosives/functions/fnc_openTriggerSelectionUI.sqf rename to addons/explosives/functions/fnc_addTriggerActions.sqf index acf9eeffdb..b95ae88134 100644 --- a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf +++ b/addons/explosives/functions/fnc_addTriggerActions.sqf @@ -10,7 +10,7 @@ * None * * Example: - * [lbData [8866, lbCurSel 8866], _explosive] call ACE_Explosives_fnc_openTriggerSelectionUI; + * [lbData [8866, lbCurSel 8866], _explosive] call ACE_Explosives_fnc_addTriggerActions; * * Public: No */ @@ -22,7 +22,6 @@ _detonators = [ACE_player] call FUNC(getDetonators); _triggerTypes = [_magazine] call FUNC(triggerType); _magTriggers = ConfigFile >> "CfgMagazines" >> _magazine >> "ACE_Triggers"; -_count = 0; _children = []; { _required = getArray (_x >> "requires"); @@ -37,8 +36,10 @@ _children = []; [ [ format ["Trigger_%1", _forEachIndex], - if(isText(_magTriggers >> configName _x >> "displayName"))then{getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, - if(isText(_magTriggers >> configName _x >> "picture"))then{getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, + if(isText(_magTriggers >> configName _x >> "displayName"))then + {getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, + if(isText(_magTriggers >> configName _x >> "picture"))then + {getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, {(_this select 2) call FUNC(selectTrigger);}, {true}, {}, @@ -47,13 +48,7 @@ _children = []; [], ACE_Player ]; - _count = _count + 1; }; -} count _triggerTypes; - -if (_count == 0) then { - [format[localize "STR_ACE_Explosives_NoTriggersAvailable", - getText(configFile >> "CfgMagazines" >> _magazine >> "DisplayName")]] call EFUNC(Common,displayTextStructured); -}; +} foreach _triggerTypes; _children From 452947148abe3ceaa91d0a20eced70d77f569ca5 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Wed, 1 Apr 2015 20:43:18 +0200 Subject: [PATCH 09/57] Random clean ups and explosive can now detonate with their object. Defuse object doesn't get cleaned up on it's own. But if a player comes near it with interact menu on it will get cleaned up. --- addons/explosives/CfgVehicles.hpp | 2 +- .../explosives/functions/fnc_addClacker.sqf | 6 +-- .../functions/fnc_addDetonateActions.sqf | 5 +-- .../functions/fnc_addTriggerActions.sqf | 12 ++--- addons/explosives/functions/fnc_canDefuse.sqf | 8 +++- .../functions/fnc_defuseExplosive.sqf | 14 +++--- .../functions/fnc_detonateExplosive.sqf | 6 +-- .../functions/fnc_getPlacedExplosives.sqf | 2 +- .../functions/fnc_handleScrollWheel.sqf | 1 - addons/explosives/functions/fnc_onLanded.sqf | 45 ++++++++++--------- .../functions/fnc_placeExplosive.sqf | 14 ++---- .../functions/fnc_place_Approve.sqf | 23 ---------- .../explosives/functions/fnc_place_Cancel.sqf | 2 +- .../explosives/functions/fnc_setPosition.sqf | 10 ++--- .../functions/fnc_setupExplosive.sqf | 6 +-- .../explosives/functions/fnc_startDefuse.sqf | 9 ++-- .../explosives/functions/fnc_startTimer.sqf | 2 +- 17 files changed, 66 insertions(+), 101 deletions(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 2ef6dd77c0..ececb3b012 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -66,7 +66,7 @@ class CfgVehicles { condition = "true"; class ACE_Defuse { displayName = $STR_ACE_Explosives_Defuse; - condition = QUOTE([_player] call FUNC(canDefuse)); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDefuse)); statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse);); exceptions[] = {"isNotSwimming"}; showDisabled = 0; diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index 4746dc66f5..778afc8ae5 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -17,10 +17,8 @@ * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_explosive", "_clacker", "_config", "_magazineClass", "_requiredItems", "_hasRequired"]; -_unit = _this select 0; -_explosive = _this select 1; -_magazineClass = _this select 2; +private ["_clacker", "_config", "_requiredItems", "_hasRequired"]; +EXPLODE_3_PVT(_this,_unit,_explosive,_magazineClass); // Config is the last item in the list of passed in items. _config = (_this select 3) select (count (_this select 3) - 1); diff --git a/addons/explosives/functions/fnc_addDetonateActions.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf index 65077323e5..745fab7b48 100644 --- a/addons/explosives/functions/fnc_addDetonateActions.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -15,10 +15,9 @@ * Public: No */ #include "script_component.hpp" -private ["_unit","_result", "_item", "_children"]; +private ["_result", "_item", "_children"]; call EFUNC(interaction,hideMenu); -_unit = _this select 0; -_detonator = _this select 1; +EXPLODE_2_PVT(_this,_unit,_detonator); _range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); _result = [_unit] call FUNC(getPlacedExplosives); diff --git a/addons/explosives/functions/fnc_addTriggerActions.sqf b/addons/explosives/functions/fnc_addTriggerActions.sqf index b95ae88134..fb8cb60f81 100644 --- a/addons/explosives/functions/fnc_addTriggerActions.sqf +++ b/addons/explosives/functions/fnc_addTriggerActions.sqf @@ -15,9 +15,9 @@ * Public: No */ #include "script_component.hpp" -private ["_magazine", "_hasRequiredItems","_triggerTypes", "_children", "_detonators", "_required", "_magTriggers"]; -_magazine = _this select 0; -_explosive = _this select 1; +private ["_hasRequiredItems","_triggerTypes", "_children", + "_detonators", "_required", "_magTriggers"]; +EXPLODE_2_PVT(_this,_magazine,_explosive); _detonators = [ACE_player] call FUNC(getDetonators); _triggerTypes = [_magazine] call FUNC(triggerType); @@ -37,9 +37,11 @@ _children = []; [ format ["Trigger_%1", _forEachIndex], if(isText(_magTriggers >> configName _x >> "displayName"))then - {getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, + {getText(_magTriggers >> configName _x >> "displayName")} + else{getText(_x >> "displayName")}, if(isText(_magTriggers >> configName _x >> "picture"))then - {getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, + {getText(_magTriggers >> configName _x >> "picture")} + else{getText(_x >> "picture")}, {(_this select 2) call FUNC(selectTrigger);}, {true}, {}, diff --git a/addons/explosives/functions/fnc_canDefuse.sqf b/addons/explosives/functions/fnc_canDefuse.sqf index 9ef0c14838..cd04564a9f 100644 --- a/addons/explosives/functions/fnc_canDefuse.sqf +++ b/addons/explosives/functions/fnc_canDefuse.sqf @@ -14,8 +14,12 @@ * Public: Yes */ #include "script_component.hpp" -private "_unit"; -_unit = _this select 0; +private ["_specialist"]; +EXPLODE_2_PVT(_this,_unit,_target); +if (isNull(_target getVariable [QGVAR(Explosive),objNull])) exitWith { + deleteVehicle _target; + false +}; if (vehicle _unit != _unit || {!("ACE_DefusalKit" in (items _unit))}) exitWith {false}; _isSpecialist = [_unit] call EFUNC(Common,isEOD); diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index 6df661a802..9f4b2045b3 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -15,18 +15,16 @@ * Public: Yes */ #include "script_component.hpp" -private ["_unit", "_explosive"]; -_unit = _this select 0; -_explosive = _this select 1; +EXPLODE_2_PVT(_this,_unit,_explosive); if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith { [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); }; -_helper = (attachedTo _explosive); -if (!isNull(_helper)) then { - detach _explosive; - deleteVehicle _helper; -}; +{ + detach _x; + deleteVehicle _x; + false +} count (attachedObjects (_explosive)); _unit action ["Deactivate", _unit, _explosive]; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index c1cf1d86db..90e40694e3 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -19,10 +19,8 @@ * Public: Yes */ #include "script_component.hpp" -private ["_item","_result", "_ignoreRange", "_unit", "_range"]; -_unit = _this select 0; -_range = _this select 1; -_item = _this select 2; +private ["_result", "_ignoreRange", "_helper"]; +EXPLODE_3_PVT(_this,_unit,_range,_item); _ignoreRange = (_range == -1); _result = true; diff --git a/addons/explosives/functions/fnc_getPlacedExplosives.sqf b/addons/explosives/functions/fnc_getPlacedExplosives.sqf index 4ebcdb8f0b..fce8e4334a 100644 --- a/addons/explosives/functions/fnc_getPlacedExplosives.sqf +++ b/addons/explosives/functions/fnc_getPlacedExplosives.sqf @@ -27,7 +27,7 @@ _adjustedList = false; _clackerList = _unit getVariable [QGVAR(Clackers), []]; _list = []; { - if isNull (_x select 0) then { + if (isNull (_x select 0)) then { _clackerList set [_foreachIndex, "X"]; _adjustedList = true; } else { diff --git a/addons/explosives/functions/fnc_handleScrollWheel.sqf b/addons/explosives/functions/fnc_handleScrollWheel.sqf index 8c842b8a05..3bef53e196 100644 --- a/addons/explosives/functions/fnc_handleScrollWheel.sqf +++ b/addons/explosives/functions/fnc_handleScrollWheel.sqf @@ -14,7 +14,6 @@ * Public: No */ #include "script_component.hpp" -private ["_obj"]; if (isNull(GVAR(Setup)) || {ACE_Modifier == 0} || !GVAR(pfeh_running)) exitWith {false}; _this = _this * 5; GVAR(Setup) setDir ((getDir GVAR(Setup)) + _this); diff --git a/addons/explosives/functions/fnc_onLanded.sqf b/addons/explosives/functions/fnc_onLanded.sqf index f55098fa36..bba841b36f 100644 --- a/addons/explosives/functions/fnc_onLanded.sqf +++ b/addons/explosives/functions/fnc_onLanded.sqf @@ -12,27 +12,28 @@ * Public: No */ #include "script_component.hpp" -if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { - (_this select 0) setVariable [QGVAR(Handled), true]; - if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { - _player RemoveMagazine _mag; - _explosive attachTo [(_this select 1)]; - _dir = _dir - (getDir (_this select 1)); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); - } else { - [{ - EXPLODE_2_PVT(_this,_player,_explosive); - private ["_pos"]; - _player setVariable [QGVAR(PlantingExplosive), false]; +EXPLODE_2_PVT(_this,_explosive,_hitTarget); + +if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {}; + +_explosive setVariable [QGVAR(Handled), true]; +if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then { + _explosive attachTo [_hitTarget]; + private "_dir"; + _dir = _setup getVariable [QGVAR(Direction), 0]; + _dir = _dir - (getDir _hitTarget); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); +} else { + [{ + EXPLODE_2_PVT(_this,_player,_explosive); + private "_pos"; + _player setVariable [QGVAR(PlantingExplosive), false]; + if (surfaceIsWater _pos) then { + _pos = getPosASL _explosive; + _explosive setPosASL _pos; + }else{ _pos = getPosATL _explosive; - //_explosive enableSimulationGlobal false; - if (surfaceIsWater _pos) then { - _pos = getPosASL _explosive; - _explosive setPosASL _pos; - }else{ - _explosive setPosATL _pos; - }; - _player RemoveMagazine _mag; - }, [ACE_player, _this select 0], 0.5, 0.1] call EFUNC(common,waitAndExecute); - }; + _explosive setPosATL _pos; + }; + }, [ACE_player, _explosive], 0.5, 0.1] call EFUNC(common,waitAndExecute); }; diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index f91f448a55..efd566611c 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -21,13 +21,8 @@ * Public: Yes */ #include "script_component.hpp" -private ["_pos", "_dir", "_magazineClass", "_ammo", "_triggerSpecificVars", "_unit", "_triggerConfig", "_explosive"]; -_unit = _this select 0; -_pos = _this select 1; -_dir = _this select 2; -_magazineClass = _this select 3; -_triggerConfig = _this select 4; -_triggerSpecificVars = _this select 5; +private ["_ammo", "_explosive"]; +EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars); if (count _this > 6) then { deleteVehicle (_this select 6); }; @@ -55,13 +50,12 @@ _defuseHelper = createVehicle ["ACE_DefuseObject", _pos, [], 0, "NONE"]; _defuseHelper setPosATL _pos; _explosive = createVehicle [_ammo, _pos, [], 0, "NONE"]; -_explosive attachTo [_defuseHelper, [0,0,0], ""]; +_defuseHelper attachTo [_explosive, [0,0,0], ""]; +_defuseHelper setVariable [QGVAR(Explosive),_explosive,true]; _expPos = getPosATL _explosive; -_defuseHelper enableSimulationGlobal false; _defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _expPos))); _explosive setPosATL _pos; -_dir = (getDir _defuseHelper) - _dir; if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars] call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 3b61d2572e..d39b6bc340 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -43,26 +43,3 @@ _setup addEventHandler ["EpeContactStart", FUNC(onLanded)]; _setup enableSimulationGlobal true; _player playActionNow "MedicOther"; _player removeMagazine (_setup getVariable [QGVAR(Class), ""]); - -/* -[{ - private ["_setup", "_player"]; - _setup = _this; - _player = ACE_player; - _player setVariable [QGVAR(PlantingExplosive), false]; - if (!isNull _setup) then { - private ["_mag", "_dir", "_delayTime"]; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; - // TODO: Might need to handle this at some point? - //_delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; - //if (_delayTime > 0) then { - // sleep _delayTime; - //}; - [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); - deleteVehicle _setup; - _player RemoveMagazine _mag; - }; -}, _setup, 5, 0.5] call EFUNC(common,waitAndExecute); -*/ diff --git a/addons/explosives/functions/fnc_place_Cancel.sqf b/addons/explosives/functions/fnc_place_Cancel.sqf index c149d35584..3df4228c16 100644 --- a/addons/explosives/functions/fnc_place_Cancel.sqf +++ b/addons/explosives/functions/fnc_place_Cancel.sqf @@ -29,4 +29,4 @@ if (isNil {GVAR(placer)}) then { GVAR(placer) = objNull; call EFUNC(interaction,hideMouseHint); [ACE_player, "DefaultAction", ACE_player getVariable [QGVAR(Place), -1]] call EFUNC(Common,removeActionEventHandler); -[ACE_player, "MenuBack", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); +[ACE_player, "zoomtemp", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); diff --git a/addons/explosives/functions/fnc_setPosition.sqf b/addons/explosives/functions/fnc_setPosition.sqf index 2f61c522aa..035d47a6c3 100644 --- a/addons/explosives/functions/fnc_setPosition.sqf +++ b/addons/explosives/functions/fnc_setPosition.sqf @@ -16,10 +16,8 @@ * Public: Yes */ #include "script_component.hpp" -private "_ex"; -_ex = _this select 0; -_ex setDir (_this select 1); -if ((_this select 2) != 0) then { - [_ex, _this select 2, 0] call CALLSTACK(BIS_fnc_setPitchBank); +EXPLODE_3_PVT(_this,_explosive,_direction,_pitch); +_explosive setDir _direction; +if (_pitch != 0) then { + [_explosive, _pitch, 0] call CALLSTACK(BIS_fnc_setPitchBank); }; -//_ex setVectorUp (surfaceNormal _pos); diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 479cefa3cf..a8af7e044b 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -16,9 +16,7 @@ */ #include "script_component.hpp" closeDialog 0; -private ["_unit", "_class"]; -_unit = _this select 0; -_class = _this select 1; +EXPLODE_2_PVT(_this,_unit,_class); GVAR(placer) = _unit; // TODO: check MP performance and MP compatible. GVAR(Setup) = createVehicle [getText(ConfigFile >> "CfgMagazines" >> _class >> "ACE_SetupObject"),[0,0,-10000],[], 0, "NONE"]; @@ -47,5 +45,5 @@ GVAR(TweakedAngle) = 180; localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint); _unit setVariable [QGVAR(Place), [_unit, "DefaultAction", {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)]; -_unit setVariable [QGVAR(Cancel), [_unit, "MenuBack", +_unit setVariable [QGVAR(Cancel), [_unit, "zoomtemp", {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)]; diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index 28dc639e9a..caf75b8519 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -15,18 +15,17 @@ * Public: Yes */ #include "script_component.hpp" -private ["_unit","_target"]; -_unit = _this select 0; -_target = (attachedObjects (_this select 1)) select 0; +EXPLODE_2_PVT(_this,_unit,_target); +_target = attachedTo (_target); _fnc_DefuseTime = { - _target = _this select 1; + EXPLODE_2_PVT(_this,_specialist,_target); _defuseTime = 5; if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then { _defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime"); }; - if (!(_this select 0) && {GVAR(PunishNonSpecialists)}) then { + if (!_specialist && {GVAR(PunishNonSpecialists)}) then { _defuseTime = _defuseTime * 1.5; }; _defuseTime diff --git a/addons/explosives/functions/fnc_startTimer.sqf b/addons/explosives/functions/fnc_startTimer.sqf index f4b0876866..13da62ec29 100644 --- a/addons/explosives/functions/fnc_startTimer.sqf +++ b/addons/explosives/functions/fnc_startTimer.sqf @@ -21,6 +21,6 @@ EXPLODE_2_PVT(_this,_explosive,_delay); [{ _explosive = _this; if (!isNull _explosive) then { - [_explosive, -1, [_explosive, 0], true] call FUNC(detonateExplosive); + [_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive); }; }, _explosive, _delay, 0] call EFUNC(common,waitAndExecute); From 703bc2465772dd86427a2a68644124a36017f65b Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Thu, 2 Apr 2015 21:44:33 +0200 Subject: [PATCH 10/57] Made picking up explosives use the new AddToInventory function from common. --- addons/explosives/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index ececb3b012..4c7eb3de82 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -112,7 +112,7 @@ class CfgVehicles { displayName = "$STR_ACE_Explosives_Pickup"; distance = 4; condition = "true"; - statement = QUOTE(_player addMagazine (_target getVariable QUOTE(QGVAR(class)));deleteVehicle _target;); + statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); showDisabled = 0; exceptions[] = {}; priority = 5; From 7c73f7479eef3363f34f885f58c0fbb696f1ecd2 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Fri, 3 Apr 2015 09:51:32 +0200 Subject: [PATCH 11/57] Used a more suitable icon for taking explosives. --- addons/explosives/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 4c7eb3de82..86bf0e5325 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -116,7 +116,7 @@ class CfgVehicles { showDisabled = 0; exceptions[] = {}; priority = 5; - icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; }; }; }; From 8ad202b039e4cb641b2ee1a0e4e39ff2bd949bc3 Mon Sep 17 00:00:00 2001 From: VKing Date: Sun, 5 Apr 2015 22:16:47 +0200 Subject: [PATCH 12/57] Fix Fall-of-Shot units being inverted --- addons/vector/functions/fnc_getFallOfShort.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/vector/functions/fnc_getFallOfShort.sqf b/addons/vector/functions/fnc_getFallOfShort.sqf index 365a41518e..e513a2604c 100644 --- a/addons/vector/functions/fnc_getFallOfShort.sqf +++ b/addons/vector/functions/fnc_getFallOfShort.sqf @@ -15,8 +15,8 @@ _inclinationP2 = _directionP2 select 1; private ["_abscissa", "_ordinate", "_applicate"]; -_abscissa = _distanceP1 * sin (_azimuthP1 - _azimuthP2); -_ordinate = _distanceP1 * cos (_inclinationP1 - _inclinationP2) - _distanceP2 * cos (_azimuthP1 - _azimuthP2); +_abscissa = _distanceP1 * cos (_inclinationP1 - _inclinationP2) - _distanceP2 * cos (_azimuthP1 - _azimuthP2); +_ordinate = _distanceP1 * sin (_azimuthP1 - _azimuthP2); _applicate = (sin _inclinationP2 * _distanceP2) - (sin _inclinationP1 * _distanceP1); if (_distanceP1 < -999 || {_distanceP2 < -999}) exitWith { From 8255ff666d87841cffd8c98c4d3814712f67906b Mon Sep 17 00:00:00 2001 From: VKing Date: Sun, 5 Apr 2015 22:18:28 +0200 Subject: [PATCH 13/57] Fix long-standing typo (get it?) --- addons/vector/XEH_preInit.sqf | 4 ++-- .../{fnc_getFallOfShort.sqf => fnc_getFallOfShot.sqf} | 0 addons/vector/functions/fnc_onKeyDown.sqf | 6 +++--- addons/vector/functions/fnc_onKeyHold.sqf | 6 +++--- addons/vector/functions/fnc_onKeyUp.sqf | 2 +- .../{fnc_showFallOfShort.sqf => fnc_showFallOfShot.sqf} | 0 6 files changed, 9 insertions(+), 9 deletions(-) rename addons/vector/functions/{fnc_getFallOfShort.sqf => fnc_getFallOfShot.sqf} (100%) rename addons/vector/functions/{fnc_showFallOfShort.sqf => fnc_showFallOfShot.sqf} (100%) diff --git a/addons/vector/XEH_preInit.sqf b/addons/vector/XEH_preInit.sqf index 21ca573118..fcae0f282b 100644 --- a/addons/vector/XEH_preInit.sqf +++ b/addons/vector/XEH_preInit.sqf @@ -18,7 +18,7 @@ PREP(getHeightDistance); PREP(getRelativeAzimuthDistance); PREP(getRelativeDistance); PREP(getRelativeHeightLength); -PREP(getFallOfShort); +PREP(getFallOfShot); PREP(showAzimuth); PREP(showAzimuthInclination); PREP(showHeightDistance); @@ -26,7 +26,7 @@ PREP(showDistance); PREP(showRelativeAzimuthDistance); PREP(showRelativeDistance); PREP(showRelativeHeightLength); -PREP(showFallOfShort); +PREP(showFallOfShot); PREP(showText); PREP(nextMode); PREP(adjustBrightness); diff --git a/addons/vector/functions/fnc_getFallOfShort.sqf b/addons/vector/functions/fnc_getFallOfShot.sqf similarity index 100% rename from addons/vector/functions/fnc_getFallOfShort.sqf rename to addons/vector/functions/fnc_getFallOfShot.sqf diff --git a/addons/vector/functions/fnc_onKeyDown.sqf b/addons/vector/functions/fnc_onKeyDown.sqf index 884f2af128..feb706bc02 100644 --- a/addons/vector/functions/fnc_onKeyDown.sqf +++ b/addons/vector/functions/fnc_onKeyDown.sqf @@ -128,11 +128,11 @@ switch (_this select 0) do { }; // prevent additinal modifier input if advanced mode it set, spaghetti - if (GETGVAR(isKeyDownAzimuth,false) && {GETGVAR(currentMode,"") in ["relative_azimuth+distance", "fall_of_short"]}) exitWith {}; + if (GETGVAR(isKeyDownAzimuth,false) && {GETGVAR(currentMode,"") in ["relative_azimuth+distance", "fall_of_shot"]}) exitWith {}; // toggle fos values - if (GETGVAR(currentMode,"") == "fall_of_short") exitWith { - [!(GETGVAR(FOSState,true))] call FUNC(showFallOfShort); + if (GETGVAR(currentMode,"") == "fall_of_shot") exitWith { + [!(GETGVAR(FOSState,true))] call FUNC(showFallOfShot); }; ["distance"] call FUNC(clearDisplay); diff --git a/addons/vector/functions/fnc_onKeyHold.sqf b/addons/vector/functions/fnc_onKeyHold.sqf index aca31d95a5..3a57a21b99 100644 --- a/addons/vector/functions/fnc_onKeyHold.sqf +++ b/addons/vector/functions/fnc_onKeyHold.sqf @@ -198,7 +198,7 @@ switch (_this select 0) do { }; - case ("fall_of_short"): { + case ("fall_of_shot"): { private "_isReady"; _isReady = diag_tickTime > GVAR(keyDownTimeDistance) + 0.5; @@ -207,8 +207,8 @@ switch (_this select 0) do { if (!GVAR(isKeyDownAzimuth) && {!GVAR(isKeyDownDistance)}) then { if (_isReady) then { - GVAR(FOSData) = call FUNC(getFallOfShort);// - [false] call FUNC(showFallOfShort); + GVAR(FOSData) = call FUNC(getFallOfShot);// + [false] call FUNC(showFallOfShot); }; [false] call FUNC(showCenter); [false] call FUNC(showP1); diff --git a/addons/vector/functions/fnc_onKeyUp.sqf b/addons/vector/functions/fnc_onKeyUp.sqf index 5fc2d84092..aa768077d9 100644 --- a/addons/vector/functions/fnc_onKeyUp.sqf +++ b/addons/vector/functions/fnc_onKeyUp.sqf @@ -65,7 +65,7 @@ switch (_this select 0) do { ["distance"] call FUNC(clearDisplay); [true] call FUNC(showP1); GVAR(pData) = [call FUNC(getDistance), call FUNC(getDirection)]; - "fall_of_short" call _fnc_setPFH; + "fall_of_shot" call _fnc_setPFH; }; }; diff --git a/addons/vector/functions/fnc_showFallOfShort.sqf b/addons/vector/functions/fnc_showFallOfShot.sqf similarity index 100% rename from addons/vector/functions/fnc_showFallOfShort.sqf rename to addons/vector/functions/fnc_showFallOfShot.sqf From c87f2f8bcc2dc9b14cbd30fc253ba70ecaf60e40 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 5 Apr 2015 15:16:32 -0700 Subject: [PATCH 14/57] Added: Generic placeholder medical box. --- addons/medical/CfgVehicles.hpp | 2 +- addons/medical/data/ace_medcrate.p3d | Bin 0 -> 31400 bytes addons/medical/data/ace_medcrate_co.paa | Bin 0 -> 160639 bytes addons/medical/data/ace_medcrate_r.p3d | Bin 0 -> 27776 bytes 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 addons/medical/data/ace_medcrate.p3d create mode 100644 addons/medical/data/ace_medcrate_co.paa create mode 100644 addons/medical/data/ace_medcrate_r.p3d diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index a1110019ae..4e80ea0612 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -856,7 +856,7 @@ class CfgVehicles { scope = 2; accuracy = 1000; displayName = "[ACE] Medical Supply Crate"; - model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F"; + model = PATHTOF(data\ace_medcrate.p3d); author = "$STR_ACE_Common_ACETeam"; class TransportItems { class ACE_fieldDressing { diff --git a/addons/medical/data/ace_medcrate.p3d b/addons/medical/data/ace_medcrate.p3d new file mode 100644 index 0000000000000000000000000000000000000000..4398599b99421e525b561fc1d83b9aae935bba6a GIT binary patch literal 31400 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 literal 0 HcmV?d00001 diff --git a/addons/medical/data/ace_medcrate_co.paa b/addons/medical/data/ace_medcrate_co.paa new file mode 100644 index 0000000000000000000000000000000000000000..a817bf0ae47bb991f7dd3cbe9532e9cb13ed750d GIT binary patch literal 160639 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
g5%sp~WKRf+OZPJUYnqO0JXx-XYXEb+$`(;I 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
{>knVPE#1(E1%V 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 literal 0 HcmV?d00001 diff --git a/addons/medical/data/ace_medcrate_r.p3d b/addons/medical/data/ace_medcrate_r.p3d new file mode 100644 index 0000000000000000000000000000000000000000..f711996bec5f8892380b1fe0de583ed0e065b1fb GIT binary patch literal 27776 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 literal 0 HcmV?d00001 From 83c670576b8e96ce0dde5347008fcb5e02a46f93 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 11:58:52 +0200 Subject: [PATCH 15/57] fixed typeOf instead of typeName --- addons/optionsmenu/functions/fnc_exportSettings.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index 9ef736ac1c..3ac2455a64 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -44,7 +44,7 @@ _compiledConfig = " _value = format['"%1"', _value]; }; if (_typeName == "BOOL") then { - _value = if (typeOf _value == "BOOL" && {_value}) then {1} else {0}; + _value = if (typeName _value == "BOOL" && {_value}) then {1} else {0}; }; _compiledConfigEntry = format [" class %1 { From 0bcb7f76dca820f0af0a3b21348b27a484954868 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 13:12:40 +0200 Subject: [PATCH 16/57] This should not be here --- addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf | 4 ---- 1 file changed, 4 deletions(-) diff --git a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf index 66f803b1f2..3a4c6ec561 100644 --- a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf @@ -16,10 +16,6 @@ #include "script_component.hpp" -if (isMultiplayer /* || !(GVAR(allowServerConfigGeneration))*/) exitwith { - closeDialog 0; -}; - // Filter only user setable setting GVAR(clientSideOptions) = []; GVAR(clientSideColors) = []; From 4cf24106228ef2426462b4f17dfead7f1e79c68c Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Mon, 6 Apr 2015 09:06:56 -0300 Subject: [PATCH 17/57] Fix duplicated laser designator actions --- .../laser_selfdesignate/functions/fnc_initDesignatorActions.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/laser_selfdesignate/functions/fnc_initDesignatorActions.sqf b/addons/laser_selfdesignate/functions/fnc_initDesignatorActions.sqf index cd45c45d32..af361425aa 100644 --- a/addons/laser_selfdesignate/functions/fnc_initDesignatorActions.sqf +++ b/addons/laser_selfdesignate/functions/fnc_initDesignatorActions.sqf @@ -20,6 +20,7 @@ _initializedClasses = GETGVAR(initializedClasses,[]); // do nothing if the class is already initialized if (_type in _initializedClasses) exitWith {}; _initializedClasses pushBack _type; +GVAR(initializedClasses) = _initializedClasses; { private ["_turretConfig","_onAction","_offAction"]; From 2657677bd8ee05cd6a7126d93e90fbd2437f7324 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 14:09:59 +0200 Subject: [PATCH 18/57] Added support for TFR/ACRE on unconscious --- addons/medical/functions/fnc_setUnconscious.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 9e68d2c3e3..dcd3f98f05 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -37,7 +37,6 @@ if (!local _unit) exitwith { _unit setvariable ["ACE_isUnconscious", true, true]; _unit setUnconscious true; -// @todo: mute player? if (_unit == ACE_player) then { if (visibleMap) then {openMap false}; closeDialog 0; From 10a1108aaedee85c22fa5bf2c00fd1ff3912c43b Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 14:11:10 +0200 Subject: [PATCH 19/57] Added support for customizable treatment location limitation --- addons/medical/ACE_Medical_Treatments.hpp | 16 ++------------- addons/medical/ACE_Settings.hpp | 10 +++++++++ addons/medical/CfgVehicles.hpp | 24 ++++++++++++++++++---- addons/medical/XEH_postInit.sqf | 22 ++++++++++++++++++++ addons/medical/functions/fnc_canTreat.sqf | 12 +++++++++++ addons/medical/functions/fnc_treatment.sqf | 12 +++++++++++ 6 files changed, 78 insertions(+), 18 deletions(-) diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index bb52693e91..e4dc635104 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -80,18 +80,6 @@ class ACE_Medical_Actions { itemConsumed = 0; litter[] = {}; }; - /*class PersonalAidKit: Bandage { - displayName = ""; - displayNameProgress = ""; - items[] = {"ACE_personalAidKit"}; - treatmentLocations[] = {"All"}; - requiredMedic = 1; - treatmentTime = 15; - callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal)); - itemConsumed = 0; - animationCaller = "AinvPknlMstpSlayW[wpn]Dnon_medic"; - litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"}}, {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}, {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} }; - };*/ }; class Advanced { @@ -204,7 +192,7 @@ class ACE_Medical_Actions { displayName = ""; displayNameProgress = ""; items[] = {"ACE_surgicalKit"}; - treatmentLocations[] = {"MedicalFacility", "MedicalVehicle"}; + treatmentLocations[] = {QGVAR(useLocation_PAK)}; requiredMedic = QGVAR(medicSetting_SurgicalKit); treatmentTime = 10; callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_surgicalKit)); @@ -216,7 +204,7 @@ class ACE_Medical_Actions { displayName = ""; displayNameProgress = ""; items[] = {"ACE_personalAidKit"}; - treatmentLocations[] = {"All"}; + treatmentLocations[] = {QGVAR(useLocation_PAK)}; requiredMedic = QGVAR(medicSetting_PAK); treatmentTime = 10; callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal)); diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 915beafd6c..0af12c0a37 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -99,6 +99,16 @@ class ACE_Settings { value = 0; values[] = {"No", "Yes"}; }; + class GVAR(useLocation_PAK) { + typeName = "SCALAR"; + value = 3; + values[] = {"Anywhere", "Medical vehicles", "Medical facility", "vehicle & facility", "Disabled"}; + }; + class GVAR(useLocation_SurgicalKit) { + typeName = "SCALAR"; + value = 2; + values[] = {"Anywhere", "Medical vehicles", "Medical facility", "vehicle & facility", "Disabled"}; + }; class GVAR(keepLocalSettingsSynced) { typeName = "BOOL"; value = 1; diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index a1110019ae..1e70db1297 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -204,7 +204,7 @@ class CfgVehicles { defaultValue = 1800; }; class medicSetting_PAK { - displayName = "Allow PAK"; + displayName = "Allow PAK (Adv)"; description = "Who can use the PAK for full heal?"; typeName = "NUMBER"; class values { @@ -214,7 +214,7 @@ class CfgVehicles { }; }; class consumeItem_PAK { - displayName = "Remove PAK on use"; + displayName = "Remove PAK on use (Adv)"; description = "Should PAK be removed on usage?"; typeName = "NUMBER"; class values { @@ -222,14 +222,30 @@ class CfgVehicles { class remove { name = "Yes"; value = 1; default = 1; }; }; }; + class useLocation_PAK { + displayName = "Locations PAK (Adv)"; + description = "Where can the personal aid kit be used?"; + typeName = "NUMBER"; + class values { + class anywhere { name = "Anywhere"; value = 0; }; + class vehicle { name = "Medical Vehicles"; value = 1; ; }; + class facility { name = "Medical facility"; value = 2; }; + class vehicleAndFacility { name = "Vehicles & facility"; value = 3; default = 1}; + class disabled { name = "Disabled"; value = 4;}; + }; + }; class medicSetting_SurgicalKit: medicSetting_PAK { - displayName = "Allow Surgical kit"; + displayName = "Allow Surgical kit (Adv)"; description = "Who can use the surgical kit?"; }; class consumeItem_SurgicalKit: consumeItem_PAK { - displayName = "Remove Surgical kit"; + displayName = "Remove Surgical kit (Adv)"; description = "Should Surgical kit be removed on usage?"; }; + class useLocation_SurgicalKit: useLocation_PAK { + displayName = "Locations Surgical kit (Adv)"; + description = "Where can the Surgical kit be used?"; + }; }; class ModuleDescription { diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf index 77fed65110..27f2ce07b9 100644 --- a/addons/medical/XEH_postInit.sqf +++ b/addons/medical/XEH_postInit.sqf @@ -13,6 +13,28 @@ GVAR(heartBeatSounds_Slow) = ["ACE_heartbeat_slow_1", "ACE_heartbeat_slow_2"]; ["medical_woundUpdateRequest", FUNC(onWoundUpdateRequest)] call ace_common_fnc_addEventHandler; ["interactMenuClosed", {[objNull, false] call FUNC(displayPatientInformation); }] call ace_common_fnc_addEventHandler; +["medical_onUnconscious", { + if (local (_this select 0)) then { + _unit = _this select 0; + if (_this select 1) then { + _unit setVariable ["tf_globalVolume", 0.4]; + _unit setVariable ["tf_voiceVolume", 0, true]; + _unit setVariable ["tf_unable_to_use_radio", true, true]; + + _unit setVariable ["acre_sys_core_isDisabled", true, true]; + _unit setVariable ["acre_sys_core_globalVolume", 0.4]; + } else { + _unit setVariable ["tf_globalVolume", 1]; + _unit setVariable ["tf_voiceVolume", 1, true]; + _unit setVariable ["tf_unable_to_use_radio", true, true]; + + _unit setVariable ["acre_sys_core_isDisabled", true, true]; + _unit setVariable ["acre_sys_core_globalVolume", 1]; + }; + }; +}] call ace_common_fnc_addEventHandler; + + // Initialize all effects _fnc_createEffect = { private ["_type", "_layer", "_default"]; diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf index 4cb9adf8e1..20711ce78a 100644 --- a/addons/medical/functions/fnc_canTreat.sqf +++ b/addons/medical/functions/fnc_canTreat.sqf @@ -68,6 +68,18 @@ if ("All" in _locations) exitwith {true}; if (_x == "field") exitwith {_return = true;}; if (_x == "MedicalFacility" && {[_caller, _target] call FUNC(inMedicalFacility)}) exitwith {_return = true;}; if (_x == "MedicalVehicle" && {[_caller, _target] call FUNC(inMedicalVehicle)}) exitwith {_return = true;}; + if !(isnil _x) exitwith { + private "_val"; + _val = missionNamespace getvariable _x; + if (typeName _val == "SCALAR") then { + _return = switch (_val) { + case 0: {true}; + case 1: {[_caller, _target] call FUNC(inMedicalVehicle)}; + case 2: {[_caller, _target] call FUNC(inMedicalFacility)}; + case 3: {[_caller, _target] call FUNC(inMedicalVehicle) || [_caller, _target] call FUNC(inMedicalFacility)}; + }; + }; + }; }foreach _locations; _return; diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index d3b849b3cd..443d6ebec2 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -81,6 +81,18 @@ if ("All" in _locations) then { if (_x == "field") exitwith {_return = true;}; if (_x == "MedicalFacility" && {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}) exitwith {_return = true;}; if (_x == "MedicalVehicle" && {([vehicle _caller] call FUNC(isMedicalVehicle)) || ([vehicle _target] call FUNC(isMedicalVehicle))}) exitwith {_return = true;}; + if !(isnil _x) exitwith { + private "_val"; + _val = missionNamespace getvariable _x; + if (typeName _val == "SCALAR") then { + _return = switch (_val) { + case 0: {true}; + case 1: {[_caller, _target] call FUNC(inMedicalVehicle)}; + case 2: {[_caller, _target] call FUNC(inMedicalFacility)}; + case 3: {[_caller, _target] call FUNC(inMedicalVehicle) || [_caller, _target] call FUNC(inMedicalFacility)}; + }; + }; + }; }foreach _locations; }; From 43b3190202cf89049c1bd590d3465b83b1c65dc0 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 14:14:00 +0200 Subject: [PATCH 20/57] config fix --- addons/medical/CfgVehicles.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index 1e70db1297..d1af58b845 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -228,9 +228,9 @@ class CfgVehicles { typeName = "NUMBER"; class values { class anywhere { name = "Anywhere"; value = 0; }; - class vehicle { name = "Medical Vehicles"; value = 1; ; }; + class vehicle { name = "Medical Vehicles"; value = 1; }; class facility { name = "Medical facility"; value = 2; }; - class vehicleAndFacility { name = "Vehicles & facility"; value = 3; default = 1}; + class vehicleAndFacility { name = "Vehicles & facility"; value = 3; default = 1; }; class disabled { name = "Disabled"; value = 4;}; }; }; From 8e176eff55042213bf6958f2f699d357f541e759 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 14:32:37 +0200 Subject: [PATCH 21/57] Fixed treatment locations --- addons/medical/ACE_Medical_Treatments.hpp | 2 +- addons/medical/XEH_preInit.sqf | 1 + addons/medical/functions/fnc_canTreat.sqf | 16 ++++++++++------ .../medical/functions/fnc_isInMedicalVehicle.sqf | 3 ++- .../medical/functions/fnc_isMedicalVehicle.sqf | 7 +++---- .../fnc_moduleTreatmentConfiguration.sqf | 2 ++ addons/medical/functions/fnc_treatment.sqf | 16 ++++++++++------ 7 files changed, 29 insertions(+), 18 deletions(-) diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index e4dc635104..c498cfc901 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -192,7 +192,7 @@ class ACE_Medical_Actions { displayName = ""; displayNameProgress = ""; items[] = {"ACE_surgicalKit"}; - treatmentLocations[] = {QGVAR(useLocation_PAK)}; + treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)}; requiredMedic = QGVAR(medicSetting_SurgicalKit); treatmentTime = 10; callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_surgicalKit)); diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index fc9d68fc68..56056de0c6 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -54,6 +54,7 @@ PREP(init); PREP(isBeingCarried); PREP(isBeingDragged); PREP(isInMedicalFacility); +PREP(isInMedicalVehicle); PREP(isMedic); PREP(isMedicalVehicle); PREP(itemCheck); diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf index 20711ce78a..5f52759f54 100644 --- a/addons/medical/functions/fnc_canTreat.sqf +++ b/addons/medical/functions/fnc_canTreat.sqf @@ -64,19 +64,23 @@ if (!_return) exitwith {false}; if ("All" in _locations) exitwith {true}; +private [ "_medFacility", "_medVeh"]; +_medFacility = {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}; +_medVeh = {([_caller] call FUNC(isInMedicalVehicle)) || ([_target] call FUNC(isInMedicalVehicle))}; + { if (_x == "field") exitwith {_return = true;}; - if (_x == "MedicalFacility" && {[_caller, _target] call FUNC(inMedicalFacility)}) exitwith {_return = true;}; - if (_x == "MedicalVehicle" && {[_caller, _target] call FUNC(inMedicalVehicle)}) exitwith {_return = true;}; + if (_x == "MedicalFacility" && _medFacility) exitwith {_return = true;}; + if (_x == "MedicalVehicle" && _medVeh) exitwith {_return = true;}; if !(isnil _x) exitwith { private "_val"; _val = missionNamespace getvariable _x; if (typeName _val == "SCALAR") then { - _return = switch (_val) { + _return = switch (_val) do { case 0: {true}; - case 1: {[_caller, _target] call FUNC(inMedicalVehicle)}; - case 2: {[_caller, _target] call FUNC(inMedicalFacility)}; - case 3: {[_caller, _target] call FUNC(inMedicalVehicle) || [_caller, _target] call FUNC(inMedicalFacility)}; + case 1: _medVeh; + case 2: _medFacility; + case 3: {call _medFacility || call _medVeh}; }; }; }; diff --git a/addons/medical/functions/fnc_isInMedicalVehicle.sqf b/addons/medical/functions/fnc_isInMedicalVehicle.sqf index e610a5cf3f..cffc24410d 100644 --- a/addons/medical/functions/fnc_isInMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isInMedicalVehicle.sqf @@ -11,6 +11,8 @@ * Public: Yes */ +#include "script_component.hpp" + private ["_unit", "_vehicle"]; _unit = _this select 0; @@ -19,5 +21,4 @@ _vehicle = vehicle _unit; if (_unit == _vehicle) exitWith {false}; if (_unit in [driver _vehicle, gunner _vehicle, commander _vehicle]) exitWith {false}; -// @todo: variable names standard? _vehicle getVariable [QGVAR(isMedic), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant") == 1] diff --git a/addons/medical/functions/fnc_isMedicalVehicle.sqf b/addons/medical/functions/fnc_isMedicalVehicle.sqf index bf13c51a6a..7be406e556 100644 --- a/addons/medical/functions/fnc_isMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isMedicalVehicle.sqf @@ -12,8 +12,7 @@ */ #include "script_component.hpp" -private ["_veh"]; -_veh = _this select 0; +private ["_vehicle"]; +_vehicle = _this select 0; -if !(_veh getvariable [QGVAR(isMedicalVehicle), true]) exitwith {false}; // exit in case the false is set. -((getNumber(configFile >> "CfgVehicles" >> typeOf _veh >> QGVAR(isMedicalVehicle)) == 1) || (_veh getvariable [QGVAR(isMedicalVehicle), false])); +_vehicle getVariable [QGVAR(isMedic), getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "attendant") == 1] diff --git a/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf b/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf index 6ae3f7eeb8..5d88fa0f0a 100644 --- a/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf +++ b/addons/medical/functions/fnc_moduleTreatmentConfiguration.sqf @@ -32,3 +32,5 @@ if !(_activated) exitWith {}; [_logic, QGVAR(medicSetting_SurgicalKit), "medicSetting_SurgicalKit"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(consumeItem_PAK), "consumeItem_PAK"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(consumeItem_SurgicalKit), "consumeItem_SurgicalKit"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(useLocation_PAK), "useLocation_PAK"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(useLocation_SurgicalKit), "useLocation_SurgicalKit"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index 443d6ebec2..e010279be1 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -77,19 +77,23 @@ if (!_return) exitwith {false}; if ("All" in _locations) then { _return = true; } else { + private [ "_medFacility", "_medVeh"]; + _medFacility = {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}; + _medVeh = {([_caller] call FUNC(isInMedicalVehicle)) || ([_target] call FUNC(isInMedicalVehicle))}; + { if (_x == "field") exitwith {_return = true;}; - if (_x == "MedicalFacility" && {([_caller] call FUNC(isInMedicalFacility)) || ([_target] call FUNC(isInMedicalFacility))}) exitwith {_return = true;}; - if (_x == "MedicalVehicle" && {([vehicle _caller] call FUNC(isMedicalVehicle)) || ([vehicle _target] call FUNC(isMedicalVehicle))}) exitwith {_return = true;}; + if (_x == "MedicalFacility" && _medFacility) exitwith {_return = true;}; + if (_x == "MedicalVehicle" && _medVeh) exitwith {_return = true;}; if !(isnil _x) exitwith { private "_val"; _val = missionNamespace getvariable _x; if (typeName _val == "SCALAR") then { - _return = switch (_val) { + _return = switch (_val) do { case 0: {true}; - case 1: {[_caller, _target] call FUNC(inMedicalVehicle)}; - case 2: {[_caller, _target] call FUNC(inMedicalFacility)}; - case 3: {[_caller, _target] call FUNC(inMedicalVehicle) || [_caller, _target] call FUNC(inMedicalFacility)}; + case 1: _medVeh; + case 2: _medFacility; + case 3: {call _medFacility || call _medVeh}; }; }; }; From 661d93e82cd5c21b3f09b1ecbd832224ec1223bb Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 14:51:17 +0200 Subject: [PATCH 22/57] Working commit --- addons/medical/ACE_Medical_Treatments.hpp | 4 ++-- addons/medical/CfgEventHandlers.hpp | 5 +++++ addons/medical/CfgVehicles.hpp | 1 + addons/medical/functions/fnc_actionPlaceInBodyBag.sqf | 10 +--------- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index c498cfc901..9f0484f671 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -77,7 +77,7 @@ class ACE_Medical_Actions { callbackProgress = ""; animationPatient = ""; animationPatientUnconscious = ""; - itemConsumed = 0; + itemConsumed = 1; litter[] = {}; }; }; @@ -276,7 +276,7 @@ class ACE_Medical_Actions { callbackProgress = ""; animationPatient = ""; animationPatientUnconscious = ""; - itemConsumed = 0; + itemConsumed = 1; litter[] = {}; }; }; diff --git a/addons/medical/CfgEventHandlers.hpp b/addons/medical/CfgEventHandlers.hpp index 6330819daa..016952a4de 100644 --- a/addons/medical/CfgEventHandlers.hpp +++ b/addons/medical/CfgEventHandlers.hpp @@ -17,6 +17,11 @@ class Extended_Init_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_init)); }; }; + class ACE_bodyBag { + class ADDON { + init = QUOTE(_this call EDFUNC(dragging,initObject)); + }; + }; }; class Extended_Respawn_EventHandlers { diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index d1af58b845..e966b2d5d8 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -619,6 +619,7 @@ class CfgVehicles { model = QUOTE(PATHTOF(data\bodybag.p3d)); icon = ""; displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY; + EGVAR(dragging,canDrag) = 1; }; // Medical litter classes diff --git a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf index d657dbe152..aa08e8a8e9 100644 --- a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf +++ b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf @@ -18,22 +18,14 @@ private ["_target","_caller", "_nameOfUnit", "_onPosition", "_bodyBagCreated"]; _caller = _this select 0; _target = _this select 1; -if !([_caller, "ACE_itemBodyBag"] call EFUNC(common,hasItem)) exitwith {}; - -[_caller, "ACE_itemBodyBag"] call EFUNC(common,useItem); - _nameOfUnit = [_target] call EFUNC(common,getName); if (alive _target) then { - // force kill the unit. [_target, true] call FUNC(setDead); }; _onPosition = getPos _target; deleteVehicle _target; _bodyBagCreated = createVehicle ["ACE_bodyBag", _onPosition, [], 0, "NONE"]; // reset the position to ensure it is on the correct one. -_bodyBagCreated setPos _onPosition; - -// TODO Does this need to be something with QUOTE(DEFUNC)? -[[_bodyBagCreated], QUOTE(DEFUNC(common,revealObject)), true] call call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ +_bodyBagCreated setPos [_onPosition select 0, _onPosition select 1, (_onPosition select 2) + 0.2]; _bodyBagCreated; From ce4cdd372220a6861fae0c157adac3faa9d8f2b8 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 15:11:54 +0200 Subject: [PATCH 23/57] staged bodybag fixes --- addons/medical/CfgEventHandlers.hpp | 4 ++-- addons/medical/CfgVehicles.hpp | 3 ++- addons/medical/config.cpp | 2 +- addons/medical/functions/fnc_actionPlaceInBodyBag.sqf | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/medical/CfgEventHandlers.hpp b/addons/medical/CfgEventHandlers.hpp index 016952a4de..bf96b6a239 100644 --- a/addons/medical/CfgEventHandlers.hpp +++ b/addons/medical/CfgEventHandlers.hpp @@ -17,9 +17,9 @@ class Extended_Init_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_init)); }; }; - class ACE_bodyBag { + class ACE_bodyBagObject { class ADDON { - init = QUOTE(_this call EDFUNC(dragging,initObject)); + init = QUOTE(_this call DEFUNC(dragging,initObject)); }; }; }; diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index e966b2d5d8..dc0c982a09 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -613,7 +613,8 @@ class CfgVehicles { }; }; class MapBoard_altis_F; - class ACE_bodyBag: MapBoard_altis_F { + class ACE_bodyBagObject: MapBoard_altis_F { + XEH_ENABLED; scope = 1; side = -1; model = QUOTE(PATHTOF(data\bodybag.p3d)); diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index 28e07fe4d4..a5f00bbeed 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {"ACE_medicalSupplyCrate", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem"}; + units[] = {"ACE_medicalSupplyCrate", "ACE_fieldDressingItem", "ACE_packingBandageItem", "ACE_elasticBandageItem", "ACE_tourniquetItem", "ACE_morphineItem", "ACE_atropineItem", "ACE_epinephrineItem", "ACE_plasmaIVItem", "ACE_bloodIVItem", "ACE_salineIVItem", "ACE_quikclotItem", "ACE_personalAidKitItem", "ACE_surgicalKitItem", "ACE_bodyBagItem", "ACE_bodyBagObject"}; weapons[] = {"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_tourniquet", "ACE_morphine", "ACE_atropine", "ACE_epinephrine", "ACE_plasmaIV", "ACE_plasmaIV_500", "ACE_plasmaIV_250", "ACE_bloodIV", "ACE_bloodIV_500", "ACE_bloodIV_250", "ACE_salineIV", "ACE_salineIV_500", "ACE_salineIV_250", "ACE_quikclot", "ACE_personalAidKit", "ACE_surgicalKit", "ACE_bodyBag"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {ace_common, ace_interaction, ace_modules}; diff --git a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf index aa08e8a8e9..872b9a628a 100644 --- a/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf +++ b/addons/medical/functions/fnc_actionPlaceInBodyBag.sqf @@ -24,7 +24,7 @@ if (alive _target) then { }; _onPosition = getPos _target; deleteVehicle _target; -_bodyBagCreated = createVehicle ["ACE_bodyBag", _onPosition, [], 0, "NONE"]; +_bodyBagCreated = createVehicle ["ACE_bodyBagObject", _onPosition, [], 0, "NONE"]; // reset the position to ensure it is on the correct one. _bodyBagCreated setPos [_onPosition select 0, _onPosition select 1, (_onPosition select 2) + 0.2]; From 76ad6b8294612a3505aed906c20672de1e156eb2 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 15:46:50 +0200 Subject: [PATCH 24/57] Added missing main actions --- addons/medical/CfgVehicles.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index dc0c982a09..c2336529b3 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -621,6 +621,18 @@ class CfgVehicles { icon = ""; displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY; EGVAR(dragging,canDrag) = 1; + EGVAR(dragging,dragPosition[]) = {0,1.2,0}; + EGVAR(dragging,dragDirection) = 0; + class ACE_Actions { + class ACE_MainActions { + displayName = "$STR_ACE_Interaction_MainAction"; + distance = 5; + condition = QUOTE(true); + statement = ""; + icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa"; + selection = ""; + }; + }; }; // Medical litter classes From ebd1e555a318f5781448e1f39b1aa46ecfd78d5a Mon Sep 17 00:00:00 2001 From: commy2 Date: Mon, 6 Apr 2015 16:07:52 +0200 Subject: [PATCH 25/57] fix: derp when switching control numbers --- .../functions/fnc_convertToTexturesFOS.sqf | 138 +++++++++--------- addons/vector/functions/fnc_getFallOfShot.sqf | 4 +- addons/vector/functions/fnc_onKeyHold.sqf | 2 +- 3 files changed, 72 insertions(+), 72 deletions(-) diff --git a/addons/vector/functions/fnc_convertToTexturesFOS.sqf b/addons/vector/functions/fnc_convertToTexturesFOS.sqf index 2a93f93548..3ce09e3c6c 100644 --- a/addons/vector/functions/fnc_convertToTexturesFOS.sqf +++ b/addons/vector/functions/fnc_convertToTexturesFOS.sqf @@ -30,75 +30,6 @@ _digit4 = _number mod 10; switch (_coordinate) do { case 0 : { - if (_isNegative) then { - - if (_digit1 == 0) then { - if (_digit2 == 0) then { - if (_digit3 == 0) then { - _digit0 = QUOTE(PATHTOF(rsc\vector_d.paa)); - _digit1 = ""; - _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; - _digit3 = ""; - _digit4 = ""; - } else { - _digit0 = QUOTE(PATHTOF(rsc\vector_d.paa)); - _digit1 = ""; - _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; - _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; - _digit4 = ""; - }; - } else { - _digit0 = QUOTE(PATHTOF(rsc\vector_d.paa)); - _digit1 = ""; - _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2]; - _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; - _digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; - }; - } else { - _digit0 = ""; - _digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - _digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - _digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - _digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - }; - - } else { - - if (_digit1 == 0) then { - if (_digit2 == 0) then { - if (_digit3 == 0) then { - _digit0 = QUOTE(PATHTOF(rsc\vector_a.paa)); - _digit1 = ""; - _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; - _digit3 = ""; - _digit4 = ""; - } else { - _digit0 = QUOTE(PATHTOF(rsc\vector_a.paa)); - _digit1 = ""; - _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; - _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; - _digit4 = ""; - }; - } else { - _digit0 = QUOTE(PATHTOF(rsc\vector_a.paa)); - _digit1 = ""; - _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2]; - _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; - _digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; - }; - } else { - _digit0 = ""; - _digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - _digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - _digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - _digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa)); - }; - }; - - }; - - case 1 : { - if (_isNegative) then { if (_digit1 == 0) then { @@ -166,6 +97,75 @@ switch (_coordinate) do { }; + case 1 : { + + if (_isNegative) then { + + if (_digit1 == 0) then { + if (_digit2 == 0) then { + if (_digit3 == 0) then { + _digit0 = QUOTE(PATHTOF(rsc\vector_d.paa)); + _digit1 = ""; + _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; + _digit3 = ""; + _digit4 = ""; + } else { + _digit0 = QUOTE(PATHTOF(rsc\vector_d.paa)); + _digit1 = ""; + _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; + _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; + _digit4 = ""; + }; + } else { + _digit0 = QUOTE(PATHTOF(rsc\vector_d.paa)); + _digit1 = ""; + _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2]; + _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; + _digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; + }; + } else { + _digit0 = ""; + _digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + _digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + _digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + _digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + }; + + } else { + + if (_digit1 == 0) then { + if (_digit2 == 0) then { + if (_digit3 == 0) then { + _digit0 = QUOTE(PATHTOF(rsc\vector_a.paa)); + _digit1 = ""; + _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; + _digit3 = ""; + _digit4 = ""; + } else { + _digit0 = QUOTE(PATHTOF(rsc\vector_a.paa)); + _digit1 = ""; + _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; + _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; + _digit4 = ""; + }; + } else { + _digit0 = QUOTE(PATHTOF(rsc\vector_a.paa)); + _digit1 = ""; + _digit2 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit2]; + _digit3 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit3]; + _digit4 = format [QUOTE(PATHTOF(rsc\vector_%1.paa)), _digit4]; + }; + } else { + _digit0 = ""; + _digit1 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + _digit2 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + _digit3 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + _digit4 = QUOTE(PATHTOF(rsc\vector_minus.paa)); + }; + }; + + }; + case 2 : { if (_isNegative) then { diff --git a/addons/vector/functions/fnc_getFallOfShot.sqf b/addons/vector/functions/fnc_getFallOfShot.sqf index e513a2604c..365a41518e 100644 --- a/addons/vector/functions/fnc_getFallOfShot.sqf +++ b/addons/vector/functions/fnc_getFallOfShot.sqf @@ -15,8 +15,8 @@ _inclinationP2 = _directionP2 select 1; private ["_abscissa", "_ordinate", "_applicate"]; -_abscissa = _distanceP1 * cos (_inclinationP1 - _inclinationP2) - _distanceP2 * cos (_azimuthP1 - _azimuthP2); -_ordinate = _distanceP1 * sin (_azimuthP1 - _azimuthP2); +_abscissa = _distanceP1 * sin (_azimuthP1 - _azimuthP2); +_ordinate = _distanceP1 * cos (_inclinationP1 - _inclinationP2) - _distanceP2 * cos (_azimuthP1 - _azimuthP2); _applicate = (sin _inclinationP2 * _distanceP2) - (sin _inclinationP1 * _distanceP1); if (_distanceP1 < -999 || {_distanceP2 < -999}) exitWith { diff --git a/addons/vector/functions/fnc_onKeyHold.sqf b/addons/vector/functions/fnc_onKeyHold.sqf index 3a57a21b99..568ef2050c 100644 --- a/addons/vector/functions/fnc_onKeyHold.sqf +++ b/addons/vector/functions/fnc_onKeyHold.sqf @@ -207,7 +207,7 @@ switch (_this select 0) do { if (!GVAR(isKeyDownAzimuth) && {!GVAR(isKeyDownDistance)}) then { if (_isReady) then { - GVAR(FOSData) = call FUNC(getFallOfShot);// + GVAR(FOSData) = call FUNC(getFallOfShot); [false] call FUNC(showFallOfShot); }; [false] call FUNC(showCenter); From 1e497c228cadaf2b00b912464938195b7ca5e609 Mon Sep 17 00:00:00 2001 From: commy2 Date: Mon, 6 Apr 2015 16:18:59 +0200 Subject: [PATCH 26/57] switch sides of add/drop left/right --- addons/vector/functions/fnc_showFallOfShot.sqf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/vector/functions/fnc_showFallOfShot.sqf b/addons/vector/functions/fnc_showFallOfShot.sqf index 0f2040708e..45a2232daf 100644 --- a/addons/vector/functions/fnc_showFallOfShot.sqf +++ b/addons/vector/functions/fnc_showFallOfShot.sqf @@ -15,8 +15,8 @@ _fosData = GVAR(FOSData); if !(_this select 0) then { private "_digits"; - // of abscissa - _digits = [_fosData, 0] call FUNC(convertToTexturesFOS); + // of ordinate + _digits = [_fosData, 1] call FUNC(convertToTexturesFOS); (_dlgVector displayCtrl 1310) ctrlSetText (_digits select 0); (_dlgVector displayCtrl 1311) ctrlSetText (_digits select 1); @@ -24,8 +24,8 @@ if !(_this select 0) then { (_dlgVector displayCtrl 1313) ctrlSetText (_digits select 3); (_dlgVector displayCtrl 1314) ctrlSetText (_digits select 4); - // of ordinate - _digits = [_fosData, 1] call FUNC(convertToTexturesFOS); + // of abscissa + _digits = [_fosData, 0] call FUNC(convertToTexturesFOS); (_dlgVector displayCtrl 1315) ctrlSetText (_digits select 0); (_dlgVector displayCtrl 1316) ctrlSetText (_digits select 1); From c3dbcf1351bac349c750873240a56369888088bb Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 07:40:20 -0700 Subject: [PATCH 27/57] increase frequency of laser update. --- .../functions/fnc_laserHudDesignateOn.sqf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index f44fb2e2b9..2f0feabee7 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -1,4 +1,4 @@ -// #define DEBUG_MODE_FULL +//#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); @@ -68,11 +68,10 @@ FUNC(laserHudDesignatePFH) = { ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; }; - if( ((getPosASL _laserTarget) vectorDistance _pos) > 2) then { + if( (_laserTarget distance _pos) > 0.1) then { TRACE_1("LaserPos Update", ""); _laserTarget setPosATL (ASLToATL _pos); - - }; + }; if(diag_tickTime > _forceUpdateTime) then { _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; From c1abb2669d38bf0255fa5826da3549c9299f716d Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 6 Apr 2015 11:03:04 -0500 Subject: [PATCH 28/57] #340 - Fix stringtables --- addons/common/stringtable.xml | 698 +++++++++++++++++---------------- addons/medical/stringtable.xml | 3 - 2 files changed, 350 insertions(+), 351 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 71d7bcd5a0..cbe9b1120d 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,351 +1,353 @@  - + - - - ACE-Team - ACE-Team - ACE-Team - ACE-Team - ACE-Team - ACE-Team - Команда ACE - ACE-Team - ACE-Team - ACE-Team - - - Save - Speichern - Guardar - Zapisz - Uložit - Sauvegarder - Сохранить - Salvar - Mentés - Salva - - - Cancel - Abbrechen - Cancelar - Anuluj - Zrušit - Annuler - Отмена - Cancelar - Mégse - Annulla - - - ACE Options - ACE Optionen - Opciones ACE - Opcje ACE - ACE Nastavení - ACE Options - ACE Настройки - Opções do ACE - ACE Opciók - Opzioni ACE - - - - N - N - N - N - S - N - С - N - É - N - - - NNE - NNO - NNE - NNE - SSV - NNE - ССВ - NNE - ÉÉK - NNE - - - NE - NO - NE - NE - SV - NE - СВ - NE - ÉK - NE - - - ENE - ONO - ENE - ENE - VSV - ENE - ВСВ - LNE - KÉK - ENE - - - E - O - E - E - V - E - В - L - K - E - - - ESE - OSO - ESE - ESE - VJV - ESE - ВЮВ - LSE - KDK - ESE - - - SE - SO - SE - SE - JV - SE - ЮВ - SE - DK - SE - - - SSE - SSO - SSE - SSE - JJV - SSE - ЮЮВ - SSE - DDK - SSE - - - S - S - S - S - J - S - Ю - S - D - S - - - SSW - SSW - SSO - SSW - JJZ - SSO - ЮЮЗ - SSO - DDNy - SSO - - - SW - SW - SO - SW - JZ - SO - ЮЗ - SO - DNy - SO - - - WSW - WSW - OSO - WSW - ZJZ - OSO - ЗЮЗ - OSO - NyDNy - OSO - - - W - W - O - W - Z - O - З - O - Ny - O - - - WNW - WNW - ONO - WNW - ZSZ - ONO - ЗСЗ - ONO - NyÉNy - ONO - - - NW - NW - NO - NW - SZ - NO - СЗ - NO - ÉNy - NO - - - NNW - NNW - NNO - NNW - SSZ - NNO - ССЗ - NNO - ÉÉNy - NNO - - - Action cancelled. - Aktion abgebrochen. - Acción cancelada. - Przerwano czynność - Akce přerušena - Action annulée. - Действие отменено. - Ação cancelada. - Művelet megszakítva. - Azione cancellata. - - - [ACE] Miscellaneous Items - [ACE] Verschiedenes - [ACE] Objetos varios - [ACE] Różne przedmioty - [ACE] Ostatní předměty - [ACE] Objets divers - [ACE] Различные предметы - [ACE] Itens diversos - [ACE] Egyéb tárgyak - [ACE] Oggetti vari - - - Disable Command Menu - Befehlsmenü ausschalten - Desactivar menú de mando - Wyłącz menu dowodzenia - Vypnout velící menu - Désactiver Menu Commande - Выключить командное меню - Parancsnoki menü kikapcsolása - - - Unknown - Unbekannt - Desconocido - Nieznany - Neznámý - Неизвестно - Ismeretlen - - - No Voice - Keine Stimme - Sin voz - Brak głosu - Žádný hlas - Без голоса - Nincs hang - - - Accept Requests - Akceptuj prośby - Aceptar Peticiones - - - Decline Requests - Ignoruj prośby - Rechazar Peticiones - - - Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. - Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. - - - Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. - Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. - - - Feedback icons - - - Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. - - - Progress bar location - - - Set the desired location of the progress bar on your screen. - - - Hint Background color - - - The color of the background from the ACE hints. - - - Hint text font color - - - The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. - - - - Banana - - - A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. - - - + + + ACE-Team + ACE-Team + ACE-Team + ACE-Team + ACE-Team + ACE-Team + Команда ACE + ACE-Team + ACE-Team + ACE-Team + + + Save + Speichern + Guardar + Zapisz + Uložit + Sauvegarder + Сохранить + Salvar + Mentés + Salva + + + Cancel + Abbrechen + Cancelar + Anuluj + Zrušit + Annuler + Отмена + Cancelar + Mégse + Annulla + + + ACE Options + ACE Optionen + Opciones ACE + Opcje ACE + ACE Nastavení + ACE Options + ACE Настройки + Opções do ACE + ACE Opciók + Opzioni ACE + + + + N + N + N + N + S + N + С + N + É + N + + + NNE + NNO + NNE + NNE + SSV + NNE + ССВ + NNE + ÉÉK + NNE + + + NE + NO + NE + NE + SV + NE + СВ + NE + ÉK + NE + + + ENE + ONO + ENE + ENE + VSV + ENE + ВСВ + LNE + KÉK + ENE + + + E + O + E + E + V + E + В + L + K + E + + + ESE + OSO + ESE + ESE + VJV + ESE + ВЮВ + LSE + KDK + ESE + + + SE + SO + SE + SE + JV + SE + ЮВ + SE + DK + SE + + + SSE + SSO + SSE + SSE + JJV + SSE + ЮЮВ + SSE + DDK + SSE + + + S + S + S + S + J + S + Ю + S + D + S + + + SSW + SSW + SSO + SSW + JJZ + SSO + ЮЮЗ + SSO + DDNy + SSO + + + SW + SW + SO + SW + JZ + SO + ЮЗ + SO + DNy + SO + + + WSW + WSW + OSO + WSW + ZJZ + OSO + ЗЮЗ + OSO + NyDNy + OSO + + + W + W + O + W + Z + O + З + O + Ny + O + + + WNW + WNW + ONO + WNW + ZSZ + ONO + ЗСЗ + ONO + NyÉNy + ONO + + + NW + NW + NO + NW + SZ + NO + СЗ + NO + ÉNy + NO + + + NNW + NNW + NNO + NNW + SSZ + NNO + ССЗ + NNO + ÉÉNy + NNO + + + Action cancelled. + Aktion abgebrochen. + Acción cancelada. + Przerwano czynność + Akce přerušena + Action annulée. + Действие отменено. + Ação cancelada. + Művelet megszakítva. + Azione cancellata. + + + [ACE] Miscellaneous Items + [ACE] Verschiedenes + [ACE] Objetos varios + [ACE] Różne przedmioty + [ACE] Ostatní předměty + [ACE] Objets divers + [ACE] Различные предметы + [ACE] Itens diversos + [ACE] Egyéb tárgyak + [ACE] Oggetti vari + + + Disable Command Menu + Befehlsmenü ausschalten + Desactivar menú de mando + Wyłącz menu dowodzenia + Vypnout velící menu + Désactiver Menu Commande + Выключить командное меню + Parancsnoki menü kikapcsolása + + + Unknown + Unbekannt + Desconocido + Nieznany + Neznámý + Неизвестно + Ismeretlen + + + No Voice + Keine Stimme + Sin voz + Brak głosu + Žádný hlas + Без голоса + Nincs hang + + + Accept Requests + Akceptuj prośby + Aceptar Peticiones + Accept Requests + + + Decline Requests + Ignoruj prośby + Rechazar Peticiones + Decline Requests + + + Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. + Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. + + + Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. + Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. + + + Feedback icons + + + Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. + + + Progress bar location + + + Set the desired location of the progress bar on your screen. + + + Hint Background color + + + The color of the background from the ACE hints. + + + Hint text font color + + + The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. + + + Banana + + + A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. + + \ No newline at end of file diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 0243ab5222..70506fa3e0 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -30,9 +30,6 @@ Injetar Morfina Inietta Morfina - - Inject Atropine - Transfuse Blood Bluttransfusion From bdcec243a8a7b1e7971604f7be302aba17747035 Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 09:14:56 -0700 Subject: [PATCH 29/57] Changed: Comanche Gatling HEDP effects and dispersion. --- addons/aircraft/CfgAmmo.hpp | 15 ++++++++++++++- addons/aircraft/CfgMagazines.hpp | 1 + addons/aircraft/CfgWeapons.hpp | 10 +++++----- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 177753223f..431abbc307 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -1,5 +1,18 @@ class CfgAmmo { + class BulletBase; + class B_20mm; + + class ACE_20mm_HEDP : B_20mm { + hit = 80; + indirectHit = 25; + indirectHitRange = 1.7; //2; + fuseDistance = 3; + timeToLive = 40; + explosive = 0.4; + }; + + // adjust minigun caliber and deflection to other ammo class SubmunitionBullet; class B_65x39_Minigun_Caseless: SubmunitionBullet { @@ -13,7 +26,6 @@ class CfgAmmo { }; // also adjust tracer, "muh lightshow"; also adjust splash damage radius - class BulletBase; class Gatling_30mm_HE_Plane_CAS_01_F: BulletBase { hit = 80; indirectHit = 12; @@ -22,6 +34,7 @@ class CfgAmmo { deflecting = 3; fuseDistance = 3; tracerStartTime = 0.02; + timeToLive = 40; }; // helper projectiles to simulate a rof > fps diff --git a/addons/aircraft/CfgMagazines.hpp b/addons/aircraft/CfgMagazines.hpp index 0c306f8f04..2445182163 100644 --- a/addons/aircraft/CfgMagazines.hpp +++ b/addons/aircraft/CfgMagazines.hpp @@ -10,6 +10,7 @@ class CfgMagazines { // an extended magazine for the comanche class 300Rnd_20mm_shells; class ACE_500Rnd_20mm_shells_Comanche: 300Rnd_20mm_shells { + ammo = "ACE_20mm_HEDP"; count = 500; }; }; diff --git a/addons/aircraft/CfgWeapons.hpp b/addons/aircraft/CfgWeapons.hpp index 917ba1c174..dc84c9f04a 100644 --- a/addons/aircraft/CfgWeapons.hpp +++ b/addons/aircraft/CfgWeapons.hpp @@ -54,24 +54,24 @@ class CfgWeapons { class manual: manual { reloadTime = 0.04; - dispersion = 0.0022; + dispersion = 0.006; displayName = "$STR_ACE_Aircraft_gatling_20mm_Name"; }; class close: close { reloadTime = 0.04; - dispersion = 0.0022; + dispersion = 0.006; }; class short: short { reloadTime = 0.04; - dispersion = 0.0022; + dispersion = 0.006; }; class medium: medium { reloadTime = 0.04; - dispersion = 0.0022; + dispersion = 0.006; }; class far: far { reloadTime = 0.04; - dispersion = 0.0022; + dispersion = 0.006; }; }; From 1bb6be56545903ec46cbc9f3bcfd1647b6622e3e Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 09:22:43 -0700 Subject: [PATCH 30/57] Cleaning up of all tabs in source code files. --- addons/attach/script_component.hpp | 4 +- addons/ballistics/scripts/initTargetWall.sqf | 8 +- .../fnc_addCanInteractWithCondition.sqf | 2 +- addons/common/functions/fnc_blurScreen.sqf | 36 +- addons/common/functions/fnc_displayIcon.sqf | 116 +-- addons/common/functions/fnc_dumpArray.sqf | 22 +- .../functions/fnc_dumpPerformanceCounters.sqf | 80 +- addons/common/functions/fnc_logModEntries.sqf | 14 +- .../fnc_sendDisplayInformationTo.sqf | 44 +- .../functions/fnc_sendDisplayMessageTo.sqf | 42 +- addons/common/functions/script_component.hpp | 20 +- addons/disposable/script_component.hpp | 4 +- addons/dragging/functions/fnc_getWeight.sqf | 62 +- addons/explosives/XEH_postInit.sqf | 68 +- .../explosives/functions/fnc_addClacker.sqf | 8 +- .../functions/fnc_addToSpeedDial.sqf | 12 +- .../functions/fnc_defuseExplosive.sqf | 2 +- .../functions/fnc_detonateExplosive.sqf | 34 +- addons/explosives/functions/fnc_dialPhone.sqf | 24 +- .../functions/fnc_getDetonators.sqf | 8 +- .../functions/fnc_getPlacedExplosives.sqf | 30 +- .../functions/fnc_hasExplosives.sqf | 6 +- .../functions/fnc_openDetonateUI.sqf | 60 +- .../explosives/functions/fnc_openPlaceUI.sqf | 48 +- .../functions/fnc_openTransmitterUI.sqf | 40 +- .../functions/fnc_openTriggerSelectionUI.sqf | 54 +- .../functions/fnc_placeExplosive.sqf | 20 +- .../functions/fnc_place_Approve.sqf | 124 +-- .../explosives/functions/fnc_place_Cancel.sqf | 8 +- .../functions/fnc_removeFromSpeedDial.sqf | 10 +- .../explosives/functions/fnc_setPosition.sqf | 2 +- .../explosives/functions/fnc_triggerType.sqf | 2 +- addons/explosives/script_component.hpp | 4 +- .../fnc_handleAirBurstAmmunitionPFH.sqf | 2 +- addons/frag/CfgAmmo.hpp | 698 +++++++-------- addons/frag/CfgEventhandlers.hpp | 18 +- addons/frag/XEH_post_init.sqf | 20 +- addons/frag/config.cpp | 16 +- .../frag/functions/fnc_BIS_ARTY_WRAPPER.sqf | 6 +- addons/frag/functions/fnc_addManualTrack.sqf | 4 +- addons/frag/functions/fnc_addTrack.sqf | 4 +- addons/frag/functions/fnc_denyFrag.sqf | 2 +- addons/frag/functions/fnc_doSpall.sqf | 254 +++--- addons/frag/functions/fnc_drawTraces.sqf | 58 +- addons/frag/functions/fnc_fired.sqf | 52 +- addons/frag/functions/fnc_frag_trace.sqf | 4 +- addons/frag/functions/fnc_frago.sqf | 262 +++--- addons/frag/functions/fnc_removeTrack.sqf | 12 +- addons/frag/functions/fnc_spallHP.sqf | 46 +- addons/frag/functions/fnc_spallTrack.sqf | 42 +- addons/frag/functions/fnc_startTracing.sqf | 4 +- addons/frag/functions/fnc_stopTracing.sqf | 4 +- addons/frag/functions/fnc_trackFragRound.sqf | 72 +- addons/frag/functions/fnc_trackTrace.sqf | 14 +- addons/frag/script_component.hpp | 6 +- addons/gforces/script_component.hpp | 4 +- addons/goggles/RscTitles.hpp | 80 +- addons/goggles/config.cpp | 426 +++++----- .../goggles/functions/fnc_applyDirtEffect.sqf | 10 +- addons/goggles/functions/fnc_applyDust.sqf | 48 +- .../functions/fnc_applyGlassesEffect.sqf | 26 +- addons/goggles/functions/fnc_checkGoggles.sqf | 52 +- addons/goggles/functions/fnc_clearGlasses.sqf | 8 +- addons/goggles/functions/fnc_dustHandler.sqf | 28 +- .../functions/fnc_getExplosionIndex.sqf | 8 +- .../functions/fnc_isGogglesVisible.sqf | 16 +- .../goggles/functions/fnc_isInRotorWash.sqf | 32 +- addons/goggles/functions/fnc_onEachFrame.sqf | 92 +- addons/goggles/functions/fnc_rainEffect.sqf | 52 +- .../functions/fnc_removeDirtEffect.sqf | 2 +- .../functions/fnc_removeDustEffect.sqf | 2 +- .../functions/fnc_removeGlassesEffect.sqf | 6 +- .../functions/fnc_removeRainEffect.sqf | 2 +- addons/hearing/script_component.hpp | 4 +- .../interact_menu/functions/fnc_splitPath.sqf | 4 +- .../functions/fnc_AddSelectableItem.sqf | 24 +- addons/interaction/functions/fnc_MoveDown.sqf | 64 +- .../functions/fnc_applyButtons.sqf | 40 +- .../functions/fnc_getDoorAnimations.sqf | 168 ++-- addons/interaction/functions/fnc_hideMenu.sqf | 18 +- .../functions/fnc_hideMouseHint.sqf | 20 +- .../interaction/functions/fnc_isInRange.sqf | 6 +- addons/interaction/functions/fnc_joinTeam.sqf | 14 +- .../interaction/functions/fnc_onButtonUp.sqf | 6 +- addons/interaction/functions/fnc_onClick.sqf | 36 +- addons/interaction/functions/fnc_openDoor.sqf | 44 +- .../functions/fnc_openSelectMenu.sqf | 66 +- .../functions/fnc_prepareSelectMenu.sqf | 22 +- .../interaction/functions/fnc_removeTag.sqf | 24 +- .../functions/fnc_showMouseHint.sqf | 38 +- .../functions/fnc_sortOptionsByPriority.sqf | 18 +- .../functions/fnc_updateTooltipPosition.sqf | 8 +- addons/interaction/script_component.hpp | 4 +- addons/main/About.hpp | 62 +- addons/main/CfgModuleCategories.hpp | 12 +- addons/main/about.sqf | 276 +++--- addons/main/license.sqf | 8 +- addons/main/script_component.hpp | 4 +- addons/main/script_config.hpp | 58 +- addons/main/script_debug.hpp | 18 +- addons/main/script_macros.hpp | 110 +-- addons/main/script_mod.hpp | 70 +- addons/map/script_component.hpp | 4 +- addons/maptools/XEH_preInit.sqf | 4 +- .../functions/fnc_openMapGpsUpdate.sqf | 4 +- addons/maptools/script_component.hpp | 4 +- addons/medical/XEH_init.sqf | 2 +- .../medical/functions/fnc_actionDropUnit.sqf | 4 +- addons/medical/functions/fnc_copyDeadBody.sqf | 4 +- .../functions/fnc_dropDownTriageCard.sqf | 10 +- .../functions/fnc_handleBandageOpening.sqf | 108 +-- addons/medical/functions/fnc_handleKilled.sqf | 10 +- .../functions/fnc_onCarryObjectDropped.sqf | 2 +- .../functions/fnc_onWoundUpdateRequest.sqf | 8 +- .../fnc_treatmentAdvanced_bandage.sqf | 2 +- .../functions/fnc_treatmentBasic_epipen.sqf | 2 +- .../functions/fnc_treatmentIVLocal.sqf | 4 +- .../functions/fnc_treatment_failure.sqf | 4 +- .../functions/fnc_treatment_success.sqf | 2 +- addons/missionmodules/CfgVehicles.hpp | 130 +-- .../functions/fnc_moduleAmbianceSound.sqf | 158 ++-- addons/overheating/script_component.hpp | 4 +- addons/overpressure/script_component.hpp | 4 +- addons/parachute/CfgVehicles.hpp | 6 +- addons/parachute/RscTitles.hpp | 94 +- addons/parachute/functions/fnc_doLanding.sqf | 8 +- .../parachute/functions/fnc_onEachFrame.sqf | 8 +- .../parachute/functions/fnc_showAltimeter.sqf | 36 +- addons/resting/script_component.hpp | 4 +- addons/safemode/script_component.hpp | 4 +- addons/smallarms/script_component.hpp | 4 +- addons/testmissions/script_component.hpp | 4 +- addons/weather/XEH_preClientInit.sqf | 16 +- addons/weather/script_component.hpp | 4 +- addons/wep_javelin/CfgSounds.hpp | 12 +- addons/wep_javelin/RscInGameUI.hpp | 800 +++++++++--------- addons/wep_javelin/config.cpp | 14 +- addons/wep_javelin/functions/fnc_fired.sqf | 306 +++---- .../wep_javelin/functions/fnc_onOpticDraw.sqf | 14 +- .../functions/fnc_translateToWeaponSpace.sqf | 8 +- .../functions/fnc_initalizeModule.sqf | 2 +- .../functions/script_component.hpp | 4 +- addons/winddeflection/script_component.hpp | 4 +- 143 files changed, 3292 insertions(+), 3292 deletions(-) diff --git a/addons/attach/script_component.hpp b/addons/attach/script_component.hpp index c09a5b97e1..6d468d89c1 100644 --- a/addons/attach/script_component.hpp +++ b/addons/attach/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_ATTACH - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_ATTACH - #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH + #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH #endif #include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/ballistics/scripts/initTargetWall.sqf b/addons/ballistics/scripts/initTargetWall.sqf index dd1f42bb7d..b09d5897bc 100644 --- a/addons/ballistics/scripts/initTargetWall.sqf +++ b/addons/ballistics/scripts/initTargetWall.sqf @@ -4,10 +4,10 @@ _wall = _this select 0; if (local _wall) then { - _paper = "UserTexture_1x2_F" createVehicle position _wall; + _paper = "UserTexture_1x2_F" createVehicle position _wall; - _paper attachTo [_wall, [0,-0.02,0.6]]; - _paper setDir getDir _wall; + _paper attachTo [_wall, [0,-0.02,0.6]]; + _paper setDir getDir _wall; - _paper setObjectTextureGlobal [0, QUOTE(PATHTOF(textures\target_ca.paa))]; + _paper setObjectTextureGlobal [0, QUOTE(PATHTOF(textures\target_ca.paa))]; }; diff --git a/addons/common/functions/fnc_addCanInteractWithCondition.sqf b/addons/common/functions/fnc_addCanInteractWithCondition.sqf index 99815a08a7..ef46b23706 100644 --- a/addons/common/functions/fnc_addCanInteractWithCondition.sqf +++ b/addons/common/functions/fnc_addCanInteractWithCondition.sqf @@ -29,7 +29,7 @@ private "_index"; _index = _conditionNames find _conditionName; if (_index == -1) then { - _index = count _conditionNames; + _index = count _conditionNames; }; _conditionNames set [_index, _conditionName]; diff --git a/addons/common/functions/fnc_blurScreen.sqf b/addons/common/functions/fnc_blurScreen.sqf index c3d101a37e..8f5e50289f 100644 --- a/addons/common/functions/fnc_blurScreen.sqf +++ b/addons/common/functions/fnc_blurScreen.sqf @@ -15,28 +15,28 @@ _id = _this select 0; _show = if (count _this > 1) then {_this select 1} else {false}; if (isnil QGVAR(SHOW_BLUR_SCREEN_COLLECTION)) then { - GVAR(SHOW_BLUR_SCREEN_COLLECTION) = []; + GVAR(SHOW_BLUR_SCREEN_COLLECTION) = []; }; if (typeName _show == typeName 0) then { - _show = (_show == 1); + _show = (_show == 1); }; if (_show) then { - GVAR(SHOW_BLUR_SCREEN_COLLECTION) pushback _id; - // show blur - if (isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then { - GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = ppEffectCreate ["DynamicBlur", 102]; - GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectAdjust [0.9]; - GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectEnable true; - GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectCommit 0; - }; + GVAR(SHOW_BLUR_SCREEN_COLLECTION) pushback _id; + // show blur + if (isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then { + GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = ppEffectCreate ["DynamicBlur", 102]; + GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectAdjust [0.9]; + GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectEnable true; + GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) ppEffectCommit 0; + }; } else { - GVAR(SHOW_BLUR_SCREEN_COLLECTION) = GVAR(SHOW_BLUR_SCREEN_COLLECTION) - [_id]; - if (GVAR(SHOW_BLUR_SCREEN_COLLECTION) isEqualTo []) then { - // hide blur - if (!isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then { - ppEffectDestroy GVAR(MENU_ppHandle_GUI_BLUR_SCREEN); - GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = nil; - }; - }; + GVAR(SHOW_BLUR_SCREEN_COLLECTION) = GVAR(SHOW_BLUR_SCREEN_COLLECTION) - [_id]; + if (GVAR(SHOW_BLUR_SCREEN_COLLECTION) isEqualTo []) then { + // hide blur + if (!isnil QGVAR(MENU_ppHandle_GUI_BLUR_SCREEN)) then { + ppEffectDestroy GVAR(MENU_ppHandle_GUI_BLUR_SCREEN); + GVAR(MENU_ppHandle_GUI_BLUR_SCREEN) = nil; + }; + }; }; diff --git a/addons/common/functions/fnc_displayIcon.sqf b/addons/common/functions/fnc_displayIcon.sqf index 1fbc4e89aa..15cda902d7 100644 --- a/addons/common/functions/fnc_displayIcon.sqf +++ b/addons/common/functions/fnc_displayIcon.sqf @@ -34,13 +34,13 @@ #define Y_POS_ICONS_SECOND (TOP_SIDE + (1.1 * ICON_WIDTH)) // setting values -#define TOP_RIGHT_DOWN 1 -#define TOP_RIGHT_LEFT 2 -#define TOP_LEFT_DOWN 3 -#define TOP_LEFT_RIGHT 4 +#define TOP_RIGHT_DOWN 1 +#define TOP_RIGHT_LEFT 2 +#define TOP_LEFT_DOWN 3 +#define TOP_LEFT_RIGHT 4 // other constants -#define DEFAULT_TIME 6 +#define DEFAULT_TIME 6 private ["_iconId", "_show", "_icon", "_allControls", "_refresh", "_timeAlive", "_list", "_color"]; _iconId = _this select 0; @@ -53,68 +53,68 @@ disableSerialization; _list = missionNamespace getvariable [QGVAR(displayIconList),[]]; _refresh = { - private ["_allControls"]; - // Refreshing of all icons.. - _allControls = missionNamespace getvariable [QGVAR(displayIconListControls), []]; - { - ctrlDelete _x; - }foreach _allControls; + private ["_allControls"]; + // Refreshing of all icons.. + _allControls = missionNamespace getvariable [QGVAR(displayIconListControls), []]; + { + ctrlDelete _x; + }foreach _allControls; - _allControls = []; + _allControls = []; - private ["_ctrl", "_setting"]; - _setting = missionNamespace getvariable[QGVAR(settingFeedbackIcons), 0]; - if (_setting > 0) then { - { - // +19000 because we want to make certain we are using free IDCs.. - _ctrl = ((findDisplay 46) ctrlCreate ["RscPicture", _foreachIndex + 19000]); - _position = switch (_setting) do { - case TOP_RIGHT_DOWN: {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; - case TOP_RIGHT_LEFT: {[X_POS_ICONS_SECOND - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND - (ICON_WIDTH / 2), ICON_WIDTH, ICON_WIDTH]}; - case TOP_LEFT_DOWN: {[LEFT_SIDE + (0.5 * ICON_WIDTH), Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; - case TOP_LEFT_RIGHT: {[LEFT_SIDE + (0.5 * ICON_WIDTH) - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND, ICON_WIDTH, ICON_WIDTH]}; - default {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; - }; - _ctrl ctrlSetPosition _position; - _ctrl ctrlsetText (_x select 1); - _ctrl ctrlSetTextColor (_x select 2); - _ctrl ctrlCommit 0; - _allControls pushback _ctrl; - }foreach (missionNamespace getvariable [QGVAR(displayIconList),[]]); - }; - missionNamespace setvariable [QGVAR(displayIconListControls), _allControls]; + private ["_ctrl", "_setting"]; + _setting = missionNamespace getvariable[QGVAR(settingFeedbackIcons), 0]; + if (_setting > 0) then { + { + // +19000 because we want to make certain we are using free IDCs.. + _ctrl = ((findDisplay 46) ctrlCreate ["RscPicture", _foreachIndex + 19000]); + _position = switch (_setting) do { + case TOP_RIGHT_DOWN: {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; + case TOP_RIGHT_LEFT: {[X_POS_ICONS_SECOND - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND - (ICON_WIDTH / 2), ICON_WIDTH, ICON_WIDTH]}; + case TOP_LEFT_DOWN: {[LEFT_SIDE + (0.5 * ICON_WIDTH), Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; + case TOP_LEFT_RIGHT: {[LEFT_SIDE + (0.5 * ICON_WIDTH) - ((_foreachIndex+3) * DIFFERENCE_ICONS), Y_POS_ICONS_SECOND, ICON_WIDTH, ICON_WIDTH]}; + default {[X_POS_ICONS, Y_POS_ICONS + (_foreachIndex * DIFFERENCE_ICONS), ICON_WIDTH, ICON_WIDTH]}; + }; + _ctrl ctrlSetPosition _position; + _ctrl ctrlsetText (_x select 1); + _ctrl ctrlSetTextColor (_x select 2); + _ctrl ctrlCommit 0; + _allControls pushback _ctrl; + }foreach (missionNamespace getvariable [QGVAR(displayIconList),[]]); + }; + missionNamespace setvariable [QGVAR(displayIconListControls), _allControls]; }; if (_show) then { - if ({(_x select 0 == _iconId)} count _list == 0) then { - _list pushback [_iconId, _icon, _color, time]; - } else { - { - if (_x select 0 == _iconId) exitwith { - _list set [_foreachIndex, [_iconId, _icon, _color, time]]; - }; - }foreach _list; - }; - missionNamespace setvariable [QGVAR(displayIconList), _list]; - call _refresh; + if ({(_x select 0 == _iconId)} count _list == 0) then { + _list pushback [_iconId, _icon, _color, time]; + } else { + { + if (_x select 0 == _iconId) exitwith { + _list set [_foreachIndex, [_iconId, _icon, _color, time]]; + }; + }foreach _list; + }; + missionNamespace setvariable [QGVAR(displayIconList), _list]; + call _refresh; - if (_timeAlive >= 0) then { - [{ + if (_timeAlive >= 0) then { + [{ [_this select 0, false, "", [0,0,0], 0] call FUNC(displayIcon); }, [_iconId], _timeAlive, _timeAlive] call EFUNC(common,waitAndExecute); - }; + }; } else { - if ({(_x select 0 == _iconId)} count _list == 1) then { - private "_newList"; - _newList = []; - { - if (_x select 0 != _iconId) then { - _newList pushback _x; - }; - }foreach _list; + if ({(_x select 0 == _iconId)} count _list == 1) then { + private "_newList"; + _newList = []; + { + if (_x select 0 != _iconId) then { + _newList pushback _x; + }; + }foreach _list; - missionNamespace setvariable [QGVAR(displayIconList), _newList]; - call _refresh; - }; + missionNamespace setvariable [QGVAR(displayIconList), _newList]; + call _refresh; + }; }; diff --git a/addons/common/functions/fnc_dumpArray.sqf b/addons/common/functions/fnc_dumpArray.sqf index a6f08cdd39..8a95172ea7 100644 --- a/addons/common/functions/fnc_dumpArray.sqf +++ b/addons/common/functions/fnc_dumpArray.sqf @@ -7,19 +7,19 @@ _var = _this select 0; _depth = _this select 1; _pad = ""; for "_i" from 0 to _depth do { - _pad = _pad + toString [9]; + _pad = _pad + toString [9]; }; _depth = _depth + 1; if(IS_ARRAY(_var)) then { - if((count _var) > 0) then { - diag_log text format["%1[", _pad]; - { - [_x, _depth] call FUNC(dumpArray); - } forEach _var; - diag_log text format["%1],", _pad]; - } else { - diag_log text format["%1[],", _pad]; - }; + if((count _var) > 0) then { + diag_log text format["%1[", _pad]; + { + [_x, _depth] call FUNC(dumpArray); + } forEach _var; + diag_log text format["%1],", _pad]; + } else { + diag_log text format["%1[],", _pad]; + }; } else { - diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; + diag_log text format["%1%2", _pad, [_var] call FUNC(formatVar)]; }; diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index b9afb8f7eb..acf81ff20a 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -6,42 +6,42 @@ diag_log text format["REGISTERED ACE PFH HANDLERS"]; diag_log text format["-------------------------------------------"]; if(!isNil "ACE_PFH_COUNTER") then { - { - private["_pfh"]; - _pfh = _x select 0; - diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; - } forEach ACE_PFH_COUNTER; + { + private["_pfh"]; + _pfh = _x select 0; + diag_log text format["Registered PFH: id=%1, %1:%2", (_pfh select 0), (_pfh select 1), (_pfh select 2) ]; + } forEach ACE_PFH_COUNTER; }; diag_log text format["ACE COUNTER RESULTS"]; diag_log text format["-------------------------------------------"]; { - private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; - _counterEntry = _x; - _iter = 0; - _total = 0; - _count = 0; - _averageResult = 0; - if( (count _counterEntry) > 3) then { - // calc - { - if(_iter > 2) then { - _count = _count + 1; - _delta = (_x select 1) - (_x select 0); - - _total = _total + _delta; - }; - _iter = _iter + 1; - } forEach _counterEntry; - - // results - _averageResult = (_total / _count) * 1000; - - // dump results - diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; - } else { - diag_log text format["%1: No results", (_counterEntry select 0) ]; - }; + private["_counterEntry", "_iter", "_total", "_count", "_delta", "_averageResult"]; + _counterEntry = _x; + _iter = 0; + _total = 0; + _count = 0; + _averageResult = 0; + if( (count _counterEntry) > 3) then { + // calc + { + if(_iter > 2) then { + _count = _count + 1; + _delta = (_x select 1) - (_x select 0); + + _total = _total + _delta; + }; + _iter = _iter + 1; + } forEach _counterEntry; + + // results + _averageResult = (_total / _count) * 1000; + + // dump results + diag_log text format["%1: Average: %2s / %3 = %4ms", (_counterEntry select 0), _total, _count, _averageResult]; + } else { + diag_log text format["%1: No results", (_counterEntry select 0) ]; + }; } forEach ACE_COUNTERS; /* @@ -49,21 +49,21 @@ diag_log text format["-------------------------------------------"]; diag_log text format["ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER"]; diag_log text format["-------------------------------------------"]; { - private["_delay"]; - _delay = _x select 2; - //if(_delay > 0) then { _delay = _delay / 1000; }; - - diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; + private["_delay"]; + _delay = _x select 2; + //if(_delay > 0) then { _delay = _delay / 1000; }; + + diag_log text format["%1: %2s, delay=%3, handle=%4",(_x select 0), _delay, (_x select 3), (_x select 4)]; } forEach ACE_PERFORMANCE_EXCESSIVE_STEP_TRACKER; // Dump PFH Trackers diag_log text format["ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER"]; diag_log text format["-------------------------------------------"]; { - private["_delta"]; - _delta = _x select 1; - //if(_delta > 0) then { _delta = _delta / 1000; }; - diag_log text format[" DELTA: %1s", _delta]; + private["_delta"]; + _delta = _x select 1; + //if(_delta > 0) then { _delta = _delta / 1000; }; + diag_log text format[" DELTA: %1s", _delta]; } forEach ACE_PERFORMANCE_EXCESSIVE_FRAME_TRACKER; //{ diff --git a/addons/common/functions/fnc_logModEntries.sqf b/addons/common/functions/fnc_logModEntries.sqf index 827802ad3f..4b94c557bc 100644 --- a/addons/common/functions/fnc_logModEntries.sqf +++ b/addons/common/functions/fnc_logModEntries.sqf @@ -7,11 +7,11 @@ _configs = "true" configClasses (configFile >> _this); _entries = []; { - { - _name = toLower configName _x; - if !(_name in _entries) then { - diag_log text _name; - _entries pushBack _name; - }; - } forEach configProperties [_x, "toLower configName _x find 'ace' == 0", false]; + { + _name = toLower configName _x; + if !(_name in _entries) then { + diag_log text _name; + _entries pushBack _name; + }; + } forEach configProperties [_x, "toLower configName _x find 'ace' == 0", false]; } forEach _configs; diff --git a/addons/common/functions/fnc_sendDisplayInformationTo.sqf b/addons/common/functions/fnc_sendDisplayInformationTo.sqf index f22894e057..33254fa81e 100644 --- a/addons/common/functions/fnc_sendDisplayInformationTo.sqf +++ b/addons/common/functions/fnc_sendDisplayInformationTo.sqf @@ -18,30 +18,30 @@ _type = [_this, 3, 0,[0]] call BIS_fnc_Param; _parameters = [_this, 4, [], [[]]] call BIS_fnc_Param; if (isPlayer _reciever) then { - if (!local _reciever) then { - [_this, QUOTE(FUNC(sendDisplayInformationTo)), _reciever, false] call EFUNC(common,execRemoteFnc); - } else { - if (isLocalized _title) then { - _title = localize _title; - }; - _localizationArray = [_title]; - { - _localizationArray pushback _x; - }foreach _parameters; - _title = format _localizationArray; + if (!local _reciever) then { + [_this, QUOTE(FUNC(sendDisplayInformationTo)), _reciever, false] call EFUNC(common,execRemoteFnc); + } else { + if (isLocalized _title) then { + _title = localize _title; + }; + _localizationArray = [_title]; + { + _localizationArray pushback _x; + }foreach _parameters; + _title = format _localizationArray; - { - if (isLocalized _x) then { - _localizationArray = [localize _x]; - { - _localizationArray pushback _x; - }foreach _parameters; + { + if (isLocalized _x) then { + _localizationArray = [localize _x]; + { + _localizationArray pushback _x; + }foreach _parameters; - _content set [_foreachIndex, format _localizationArray]; - }; + _content set [_foreachIndex, format _localizationArray]; + }; - }foreach _content; + }foreach _content; - [_title,_content,_type] call EFUNC(common,displayInformation); - }; + [_title,_content,_type] call EFUNC(common,displayInformation); + }; }; \ No newline at end of file diff --git a/addons/common/functions/fnc_sendDisplayMessageTo.sqf b/addons/common/functions/fnc_sendDisplayMessageTo.sqf index 3c5b399659..e042f69939 100644 --- a/addons/common/functions/fnc_sendDisplayMessageTo.sqf +++ b/addons/common/functions/fnc_sendDisplayMessageTo.sqf @@ -18,29 +18,29 @@ _type = [_this, 3, 0,[0]] call BIS_fnc_Param; _parameters = [_this, 4, [], [[]]] call BIS_fnc_Param; if (isPlayer _reciever) then { - if (!local _reciever) then { - [_this, QUOTE(FUNC(sendDisplayMessageTo)), _reciever, false] call EFUNC(common,execRemoteFnc); - } else { + if (!local _reciever) then { + [_this, QUOTE(FUNC(sendDisplayMessageTo)), _reciever, false] call EFUNC(common,execRemoteFnc); + } else { - if (isLocalized _title) then { - _title = localize _title; - }; - if (isLocalized _content) then { - _content = localize _content; - }; + if (isLocalized _title) then { + _title = localize _title; + }; + if (isLocalized _content) then { + _content = localize _content; + }; - _localizationArray = [_title]; - { - _localizationArray pushback _x; - }foreach _parameters; - _title = format _localizationArray; + _localizationArray = [_title]; + { + _localizationArray pushback _x; + }foreach _parameters; + _title = format _localizationArray; - _localizationArray = [_content]; - { - _localizationArray pushback _x; - }foreach _parameters; - _content = format _localizationArray; + _localizationArray = [_content]; + { + _localizationArray pushback _x; + }foreach _parameters; + _content = format _localizationArray; - [_title,_content,_type] call EFUNC(common,displayMessage); - }; + [_title,_content,_type] call EFUNC(common,displayMessage); + }; }; \ No newline at end of file diff --git a/addons/common/functions/script_component.hpp b/addons/common/functions/script_component.hpp index d1032476b6..95b7e86461 100644 --- a/addons/common/functions/script_component.hpp +++ b/addons/common/functions/script_component.hpp @@ -1,13 +1,13 @@ #include "\z\ace\addons\common\script_component.hpp" -#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) -#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] -#define HANDLECATCH diag_log text _exception; assert(exception=="") +#define VALIDHASH(hash) (IS_ARRAY(hash) && {(count hash) >= 2} && {IS_ARRAY(hash select 0)} && {IS_ARRAY(hash select 1)}) +#define ERROR(msg) throw msg + format[" @ %1:%2", _callFrom, _lineNo] +#define HANDLECATCH diag_log text _exception; assert(exception=="") -#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ - _callFrom = "";\ - _lineNo = -1;\ - if((count _this) > c) then {\ - _callFrom = _this select c;\ - _lineNo = _this select c+1;\ - }; \ No newline at end of file +#define ERRORDATA(c) private ["_callFrom", "_lineNo"];\ + _callFrom = "";\ + _lineNo = -1;\ + if((count _this) > c) then {\ + _callFrom = _this select c;\ + _lineNo = _this select c+1;\ + }; \ No newline at end of file diff --git a/addons/disposable/script_component.hpp b/addons/disposable/script_component.hpp index 6d26a5431c..375e44147d 100644 --- a/addons/disposable/script_component.hpp +++ b/addons/disposable/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_ATTACH - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_ATTACH - #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH + #define DEBUG_SETTINGS DEBUG_SETTINGS_ATTACH #endif #include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/dragging/functions/fnc_getWeight.sqf b/addons/dragging/functions/fnc_getWeight.sqf index 2b44bf90d9..871c49db89 100644 --- a/addons/dragging/functions/fnc_getWeight.sqf +++ b/addons/dragging/functions/fnc_getWeight.sqf @@ -1,20 +1,20 @@ /* - Name: AGM_Drag_fnc_GetWeight - - Author(s): - L-H, edited by commy2 + Name: AGM_Drag_fnc_GetWeight + + Author(s): + L-H, edited by commy2 - Description: - Returns the weight of a crate. - - Parameters: - 0: OBJECT - Crate to get weight of - - Returns: - NUMBER - Weight - - Example: - _weight = Crate1 call AGM_Drag_fnc_GetWeight; + Description: + Returns the weight of a crate. + + Parameters: + 0: OBJECT - Crate to get weight of + + Returns: + NUMBER - Weight + + Example: + _weight = Crate1 call AGM_Drag_fnc_GetWeight; */ #include "script_component.hpp" @@ -25,24 +25,24 @@ _object = _this select 0; private ["_totalWeight", "_fnc","_fnc_Extra"]; _totalWeight = 0; _fnc_Extra = { - private ["_weight", "_items"]; - _items = _this select 0; - _weight = 0; - { - _weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> (_this select 2) >> "mass") * ((_items select 1) select _foreachIndex)); - } foreach (_items select 0); - - _weight + private ["_weight", "_items"]; + _items = _this select 0; + _weight = 0; + { + _weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> (_this select 2) >> "mass") * ((_items select 1) select _foreachIndex)); + } foreach (_items select 0); + + _weight }; _fnc = { - private ["_weight", "_items"]; - _items = _this select 0; - _weight = 0; - { - _weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> "mass") * ((_items select 1) select _foreachIndex)); - } foreach (_items select 0); - - _weight + private ["_weight", "_items"]; + _items = _this select 0; + _weight = 0; + { + _weight = _weight + (getNumber (ConfigFile >> (_this select 1) >> _x >> "mass") * ((_items select 1) select _foreachIndex)); + } foreach (_items select 0); + + _weight }; _totalWeight = ([getMagazineCargo _object, "CfgMagazines"] call _fnc); _totalWeight = _totalWeight + ([getItemCargo _object, "CfgWeapons", "ItemInfo"] call _fnc_Extra); diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index e3b40308c3..8ebf62090f 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -22,46 +22,46 @@ GVAR(CurrentSpeedDial) = 0; [{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler); player addEventHandler ["Killed", { - private "_deadman"; - call FUNC(place_Cancel); - _deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives); - { - [(_this select 0), -1, _x, true] call FUNC(detonateExplosive); - } count _deadman; + private "_deadman"; + call FUNC(place_Cancel); + _deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives); + { + [(_this select 0), -1, _x, true] call FUNC(detonateExplosive); + } count _deadman; }]; player addEventHandler ["Take", { - private ["_item", "_getter", "_giver", "_config"]; - _item = _this select 2; - _getter = _this select 0; - _giver = _this select 1; + private ["_item", "_getter", "_giver", "_config"]; + _item = _this select 2; + _getter = _this select 0; + _giver = _this select 1; - _config = ConfigFile >> "CfgWeapons" >> _item; - if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { - private ["_clackerItems"]; - _clackerItems = _giver getVariable [QGVAR(Clackers), []]; - _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; + _config = ConfigFile >> "CfgWeapons" >> _item; + if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { + private ["_clackerItems"]; + _clackerItems = _giver getVariable [QGVAR(Clackers), []]; + _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; - _detonators = [_giver] call FUNC(getDetonators); - if (count _detonators == 0) then { - _giver setVariable [QGVAR(Clackers), nil, true]; - }; - }; + _detonators = [_giver] call FUNC(getDetonators); + if (count _detonators == 0) then { + _giver setVariable [QGVAR(Clackers), nil, true]; + }; + }; }]; player addEventHandler ["Put", { - private ["_item", "_getter", "_giver", "_config"]; - _item = _this select 2; - _getter = _this select 1; - _giver = _this select 0; + private ["_item", "_getter", "_giver", "_config"]; + _item = _this select 2; + _getter = _this select 1; + _giver = _this select 0; - _config = ConfigFile >> "CfgWeapons" >> _item; - if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { - private ["_clackerItems"]; - _clackerItems = _giver getVariable [QGVAR(Clackers), []]; - _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; + _config = ConfigFile >> "CfgWeapons" >> _item; + if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { + private ["_clackerItems"]; + _clackerItems = _giver getVariable [QGVAR(Clackers), []]; + _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; - _detonators = [_giver] call FUNC(getDetonators); - if (count _detonators == 0) then { - _giver setVariable [QGVAR(Clackers), nil, true]; - }; - }; + _detonators = [_giver] call FUNC(getDetonators); + if (count _detonators == 0) then { + _giver setVariable [QGVAR(Clackers), nil, true]; + }; + }; }]; diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index 4746dc66f5..b61daee3a4 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -28,9 +28,9 @@ _requiredItems = getArray(_config >> "requires"); _hasRequired = true; _detonators = [_unit] call FUNC(getDetonators); { - if !(_x in _detonators) exitWith{ - _hasRequired = false; - }; + if !(_x in _detonators) exitWith{ + _hasRequired = false; + }; } count _requiredItems; if !(_hasRequired) exitWith {}; @@ -39,6 +39,6 @@ _config = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> co _clacker = _unit getVariable [QGVAR(Clackers), []]; GVAR(PlacedCount) = GVAR(PlacedCount) + 1; _clacker pushBack [_explosive, getNumber(_config >> "FuseTime"), format [localize "STR_ACE_Explosives_DetonateCode", - GVAR(PlacedCount)], _magazineClass, configName ((_this select 3) select (count (_this select 3) - 1))]; + GVAR(PlacedCount)], _magazineClass, configName ((_this select 3) select (count (_this select 3) - 1))]; _unit setVariable [QGVAR(Clackers), _clacker, true]; _unit sideChat format [localize "STR_ACE_Explosives_DetonateCode", GVAR(PlacedCount)]; diff --git a/addons/explosives/functions/fnc_addToSpeedDial.sqf b/addons/explosives/functions/fnc_addToSpeedDial.sqf index 142996e4c3..4f0772e601 100644 --- a/addons/explosives/functions/fnc_addToSpeedDial.sqf +++ b/addons/explosives/functions/fnc_addToSpeedDial.sqf @@ -22,16 +22,16 @@ _found = false; EXPLODE_2_PVT(_this,_name,_code); if ((_code) == "") ExitWith { - [_name] call FUNC(removeFromSpeedDial); + [_name] call FUNC(removeFromSpeedDial); }; { - if ((_x select 0) == _name) exitWith { - _speedDial set [_foreachindex, _this]; - _found = true; - }; + if ((_x select 0) == _name) exitWith { + _speedDial set [_foreachindex, _this]; + _found = true; + }; } foreach _speedDial; if (!_found) then { - _speedDial pushBack _this; + _speedDial pushBack _this; }; ace_player setVariable [QGVAR(SpeedDial), _speedDial]; diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index 5836c9e210..97bf9709b7 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -20,7 +20,7 @@ _unit = _this select 0; _explosive = _this select 1; if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith { - [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); + [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); }; _unit action ["Deactivate", _unit, _explosive]; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 697c8eeed7..2285b9a8b8 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -6,8 +6,8 @@ * 0: Unit * 1: Max range (-1 to ignore) * 2: Explosive - * 0: Explosive - * 1: Fuse time + * 0: Explosive + * 1: Fuse time * * Return Value: * None @@ -29,23 +29,23 @@ _result = true; if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {false}; if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then { - private ["_exp", "_previousExp"]; - _previousExp = _item select 0; - _exp = getText (ConfigFile >> "CfgAmmo" >> typeof (_previousExp) >> "ACE_Explosive"); - if (_exp != "") then { - _exp = createVehicle [_exp, [0,0,15001], [], 0, "NONE"]; - _exp setDir (getDir _previousExp); - _item set [0, _exp]; - _pos = getPosASL _previousExp; - deleteVehicle _previousExp; - _exp setPosASL _pos; - }; + private ["_exp", "_previousExp"]; + _previousExp = _item select 0; + _exp = getText (ConfigFile >> "CfgAmmo" >> typeof (_previousExp) >> "ACE_Explosive"); + if (_exp != "") then { + _exp = createVehicle [_exp, [0,0,15001], [], 0, "NONE"]; + _exp setDir (getDir _previousExp); + _item set [0, _exp]; + _pos = getPosASL _previousExp; + deleteVehicle _previousExp; + _exp setPosASL _pos; + }; }; [{ - _explosive = _this; - if (!isNull _explosive) then { - _explosive setDamage 1; - }; + _explosive = _this; + if (!isNull _explosive) then { + _explosive setDamage 1; + }; }, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute); _result diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index 41b2a4a4f7..f00fa8a970 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -24,19 +24,19 @@ _unit setVariable [QGVAR(Dialing), true, true]; _ran = (ceil(random 8)) + 1; _arr = []; for [{_i=0}, {_i<_ran}, {_i=_i+1}] do { - _arr = _arr + ['.','..','...','']; + _arr = _arr + ['.','..','...','']; }; if (_unit == ace_player) then { - ctrlSetText [1400,"Calling"]; - [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); + ctrlSetText [1400,"Calling"]; + [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); } else { - private ["_explosive"]; - _explosive = [_code] call FUNC(getSpeedDialExplosive); - if ((count _explosive) > 0) then { - [{ - playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; - (_this select 0) setVariable [QGVAR(Dialing), false, true]; - }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); - [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); - }; + private ["_explosive"]; + _explosive = [_code] call FUNC(getSpeedDialExplosive); + if ((count _explosive) > 0) then { + [{ + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; + (_this select 0) setVariable [QGVAR(Dialing), false, true]; + }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); + }; }; diff --git a/addons/explosives/functions/fnc_getDetonators.sqf b/addons/explosives/functions/fnc_getDetonators.sqf index 83e0087acc..26bde9b190 100644 --- a/addons/explosives/functions/fnc_getDetonators.sqf +++ b/addons/explosives/functions/fnc_getDetonators.sqf @@ -20,10 +20,10 @@ _items = (items _unit); _result = []; { - _config = ConfigFile >> "CfgWeapons" >> _x; - if (getNumber (_config >> "ACE_Detonator") == 1) then { - _result pushBack _x; - }; + _config = ConfigFile >> "CfgWeapons" >> _x; + if (getNumber (_config >> "ACE_Detonator") == 1) then { + _result pushBack _x; + }; } forEach _items; _result diff --git a/addons/explosives/functions/fnc_getPlacedExplosives.sqf b/addons/explosives/functions/fnc_getPlacedExplosives.sqf index 4ebcdb8f0b..1feddfabd9 100644 --- a/addons/explosives/functions/fnc_getPlacedExplosives.sqf +++ b/addons/explosives/functions/fnc_getPlacedExplosives.sqf @@ -20,29 +20,29 @@ private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"]; _unit = _this select 0; _filter = nil; if (count _this > 1) then { - _filter = ConfigFile >> "CfgACE_Triggers" >> (_this select 1); + _filter = ConfigFile >> "CfgACE_Triggers" >> (_this select 1); }; _clackerList = []; _adjustedList = false; _clackerList = _unit getVariable [QGVAR(Clackers), []]; _list = []; { - if isNull (_x select 0) then { - _clackerList set [_foreachIndex, "X"]; - _adjustedList = true; - } else { - if (isNil "_filter" || {(ConfigFile >> "CfgACE_Triggers" >> (_x select 4)) == _filter}) then { - _list pushBack _x; - }; - }; + if isNull (_x select 0) then { + _clackerList set [_foreachIndex, "X"]; + _adjustedList = true; + } else { + if (isNil "_filter" || {(ConfigFile >> "CfgACE_Triggers" >> (_x select 4)) == _filter}) then { + _list pushBack _x; + }; + }; } foreach _clackerList; if (_adjustedList) then { - _clackerList = _clackerList - ["X"]; - if (count _clackerList == 0) then { - _unit SetVariable [QGVAR(Clackers), nil, true]; - } else { - _unit SetVariable [QGVAR(Clackers), _clackerList, true]; - }; + _clackerList = _clackerList - ["X"]; + if (count _clackerList == 0) then { + _unit SetVariable [QGVAR(Clackers), nil, true]; + } else { + _unit SetVariable [QGVAR(Clackers), _clackerList, true]; + }; }; _list diff --git a/addons/explosives/functions/fnc_hasExplosives.sqf b/addons/explosives/functions/fnc_hasExplosives.sqf index ef1deef28a..794cebc57d 100644 --- a/addons/explosives/functions/fnc_hasExplosives.sqf +++ b/addons/explosives/functions/fnc_hasExplosives.sqf @@ -19,9 +19,9 @@ _result = false; _unit = _this select 0; _magazines = magazines _unit; { - if (getNumber (ConfigFile >> "CfgMagazines" >> _x >> "ACE_Placeable") == 1) exitWith { - _result = true; - }; + if (getNumber (ConfigFile >> "CfgMagazines" >> _x >> "ACE_Placeable") == 1) exitWith { + _result = true; + }; } count _magazines; _result diff --git a/addons/explosives/functions/fnc_openDetonateUI.sqf b/addons/explosives/functions/fnc_openDetonateUI.sqf index a14865bc20..fcea8b4b5c 100644 --- a/addons/explosives/functions/fnc_openDetonateUI.sqf +++ b/addons/explosives/functions/fnc_openDetonateUI.sqf @@ -23,39 +23,39 @@ _range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); _result = [_unit] call FUNC(getPlacedExplosives); _actions = [localize "STR_ACE_Explosives_DetonateMenu", localize "STR_ACE_Explosives_Detonate"] - call EFUNC(interaction,prepareSelectMenu); + call EFUNC(interaction,prepareSelectMenu); _count = 0; { - if (!isNull(_x select 0)) then { - _required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires"); - if (_detonator in _required) then { - _item = ConfigFile >> "CfgMagazines" >> (_x select 3); - _actions = [ - _actions, - _x select 2, - getText(_item >> "picture"), - [_foreachIndex, _range] - ] call EFUNC(interaction,AddSelectableItem); - _count = _count + 1; - }; - }; + if (!isNull(_x select 0)) then { + _required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires"); + if (_detonator in _required) then { + _item = ConfigFile >> "CfgMagazines" >> (_x select 3); + _actions = [ + _actions, + _x select 2, + getText(_item >> "picture"), + [_foreachIndex, _range] + ] call EFUNC(interaction,AddSelectableItem); + _count = _count + 1; + }; + }; } foreach _result; if (_count > 0) then { - [ - _actions, - { - [ - ACE_player, - [_this select 1] call EFUNC(common,toNumber), - (ACE_player getVariable [QGVAR(Clackers), []]) select ([_this select 0] call EFUNC(common,toNumber)), - false - ] call FUNC(detonateExplosive); - call EFUNC(interaction,hideMenu); - }, - {[ACE_player] call FUNC(openTransmitterUI);} - ] call EFUNC(interaction,openSelectMenu); + [ + _actions, + { + [ + ACE_player, + [_this select 1] call EFUNC(common,toNumber), + (ACE_player getVariable [QGVAR(Clackers), []]) select ([_this select 0] call EFUNC(common,toNumber)), + false + ] call FUNC(detonateExplosive); + call EFUNC(interaction,hideMenu); + }, + {[ACE_player] call FUNC(openTransmitterUI);} + ] call EFUNC(interaction,openSelectMenu); }else{ - call EFUNC(interaction,hideMenu); - [ACE_player] call FUNC(openTransmitterUI); - [localize "STR_ACE_Explosives_NoExplosivesAvailable"] call EFUNC(common,displayTextStructured); + call EFUNC(interaction,hideMenu); + [ACE_player] call FUNC(openTransmitterUI); + [localize "STR_ACE_Explosives_NoExplosivesAvailable"] call EFUNC(common,displayTextStructured); }; diff --git a/addons/explosives/functions/fnc_openPlaceUI.sqf b/addons/explosives/functions/fnc_openPlaceUI.sqf index 6eb2d478bf..a1b839ec35 100644 --- a/addons/explosives/functions/fnc_openPlaceUI.sqf +++ b/addons/explosives/functions/fnc_openPlaceUI.sqf @@ -22,34 +22,34 @@ _mags = magazines _unit; _list = []; _itemCount = []; { - _item = ConfigFile >> "CfgMagazines" >> _x; - if (getNumber(_item >> "ACE_Placeable") == 1) then { - _index = _list find _item; - if (_index != -1) then { - _itemCount set [_index, (_itemCount select _index) + 1]; - } else { - _list pushBack _item; - _itemCount pushBack 1; - }; - }; + _item = ConfigFile >> "CfgMagazines" >> _x; + if (getNumber(_item >> "ACE_Placeable") == 1) then { + _index = _list find _item; + if (_index != -1) then { + _itemCount set [_index, (_itemCount select _index) + 1]; + } else { + _list pushBack _item; + _itemCount pushBack 1; + }; + }; } forEach _mags; _actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosives_Place"] - call EFUNC(interaction,prepareSelectMenu); + call EFUNC(interaction,prepareSelectMenu); { - _actions = [ - _actions, - format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], - getText(_x >> "picture"), - configName _x - ] call EFUNC(interaction,AddSelectableItem); + _actions = [ + _actions, + format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex], + getText(_x >> "picture"), + configName _x + ] call EFUNC(interaction,AddSelectableItem); } foreach _list; [ - _actions, - { - [_this] call FUNC(openTriggerSelectionUI); - }, - { - call EFUNC(interaction,hideMenu); - } + _actions, + { + [_this] call FUNC(openTriggerSelectionUI); + }, + { + call EFUNC(interaction,hideMenu); + } ] call EFUNC(interaction,openSelectMenu); diff --git a/addons/explosives/functions/fnc_openTransmitterUI.sqf b/addons/explosives/functions/fnc_openTransmitterUI.sqf index f90636474e..275aef4dd0 100644 --- a/addons/explosives/functions/fnc_openTransmitterUI.sqf +++ b/addons/explosives/functions/fnc_openTransmitterUI.sqf @@ -19,30 +19,30 @@ _unit = _this select 0; _items = (items _unit); _actions = [localize "STR_ACE_Explosives_TriggerMenu", localize "STR_ACE_Explosives_SelectTrigger"] - call EFUNC(interaction,prepareSelectMenu); + call EFUNC(interaction,prepareSelectMenu); _detonators = [_unit] call FUNC(getDetonators); { - _config = ConfigFile >> "CfgWeapons" >> _x; - _actions = [ - _actions, - getText(_config >> "displayName"), - getText(_config >> "picture"), - _x - ] call EFUNC(interaction,addSelectableItem); + _config = ConfigFile >> "CfgWeapons" >> _x; + _actions = [ + _actions, + getText(_config >> "displayName"), + getText(_config >> "picture"), + _x + ] call EFUNC(interaction,addSelectableItem); } count _detonators; if (count _detonators == 0) then { - call EFUNC(interaction,hideMenu); - "ACE_Explosives" call EFUNC(interaction,openMenuSelf); - [format[localize "STR_ACE_Explosives_NoTriggersAvailable", "player"]] call EFUNC(Common,displayTextStructured); + call EFUNC(interaction,hideMenu); + "ACE_Explosives" call EFUNC(interaction,openMenuSelf); + [format[localize "STR_ACE_Explosives_NoTriggersAvailable", "player"]] call EFUNC(Common,displayTextStructured); }else{ - [ - _actions, - { - [ACE_player, _this] call FUNC(openDetonateUI); - }, - { - call EFUNC(interaction,hideMenu); - } - ] call EFUNC(interaction,openSelectMenu); + [ + _actions, + { + [ACE_player, _this] call FUNC(openDetonateUI); + }, + { + call EFUNC(interaction,hideMenu); + } + ] call EFUNC(interaction,openSelectMenu); }; diff --git a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf b/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf index 011bda9bee..ce5efd7dff 100644 --- a/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf +++ b/addons/explosives/functions/fnc_openTriggerSelectionUI.sqf @@ -21,37 +21,37 @@ _detonators = [ACE_player] call FUNC(getDetonators); _triggerTypes = [_magazine] call FUNC(triggerType); _magTriggers = ConfigFile >> "CfgMagazines" >> _magazine >> "ACE_Triggers"; _actions = [localize "STR_ACE_Explosives_TriggerMenu", localize "STR_ACE_Explosives_SelectTrigger"] - call EFUNC(interaction,prepareSelectMenu); + call EFUNC(interaction,prepareSelectMenu); _count = 0; { - _required = getArray (_x >> "requires"); - _hasRequiredItems = true; - { - if !(_x in _detonators) exitWith { - _hasRequiredItems = false; - }; - } count _required; - if (_hasRequiredItems) then { - _actions = [ - _actions, - if(isText(_magTriggers >> configName _x >> "displayName"))then{getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, - if(isText(_magTriggers >> configName _x >> "picture"))then{getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, - [configName _x, _magazine] - ] call EFUNC(interaction,addSelectableItem); - _count = _count + 1; - }; + _required = getArray (_x >> "requires"); + _hasRequiredItems = true; + { + if !(_x in _detonators) exitWith { + _hasRequiredItems = false; + }; + } count _required; + if (_hasRequiredItems) then { + _actions = [ + _actions, + if(isText(_magTriggers >> configName _x >> "displayName"))then{getText(_magTriggers >> configName _x >> "displayName")}else{getText(_x >> "displayName")}, + if(isText(_magTriggers >> configName _x >> "picture"))then{getText(_magTriggers >> configName _x >> "picture")}else{getText(_x >> "picture")}, + [configName _x, _magazine] + ] call EFUNC(interaction,addSelectableItem); + _count = _count + 1; + }; } count _triggerTypes; if (_count == 0) then { - [ACE_player] call FUNC(openPlaceUI); - [format[localize "STR_ACE_Explosives_NoTriggersAvailable", - getText(configFile >> "CfgMagazines" >> _magazine >> "DisplayName")]] call EFUNC(Common,displayTextStructured); + [ACE_player] call FUNC(openPlaceUI); + [format[localize "STR_ACE_Explosives_NoTriggersAvailable", + getText(configFile >> "CfgMagazines" >> _magazine >> "DisplayName")]] call EFUNC(Common,displayTextStructured); }else{ - [ - _actions, - { - [_this select 1, _this select 0] call FUNC(selectTrigger); - }, - {[ACE_player] call FUNC(openPlaceUI);} - ] call EFUNC(interaction,openSelectMenu); + [ + _actions, + { + [_this select 1, _this select 0] call FUNC(selectTrigger); + }, + {[ACE_player] call FUNC(openPlaceUI);} + ] call EFUNC(interaction,openSelectMenu); }; diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index ce43698309..1a09d531d0 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -16,7 +16,7 @@ * * Example: * _explosive = [player, player modelToWorldVisual [0,0.5, 0.1], 134, - * "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive; + * "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive; * * Public: Yes */ @@ -30,32 +30,32 @@ _triggerConfig = _this select 4; _triggerSpecificVars = _this select 5; _setDir = true; if (count _this > 6) then { - _setDir = _this select 6; + _setDir = _this select 6; }; if (isNil "_triggerConfig") exitWith { - diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this]; - objNull + diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this]; + objNull }; _magazineTrigger = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> _triggerConfig; _triggerConfig = ConfigFile >> "CfgACE_Triggers" >> _triggerConfig; if (isNil "_triggerConfig") exitWith { - diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this]; - objNull + diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this]; + objNull }; _ammo = getText(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ammo"); if (isText(_magazineTrigger >> "ammo")) then { - _ammo = getText (_magazineTrigger >> "ammo"); + _ammo = getText (_magazineTrigger >> "ammo"); }; _triggerSpecificVars pushBack _triggerConfig; _explosive = createVehicle [_ammo, _pos, [], 0, "NONE"]; if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars] - call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; + call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; if (_setDir) then { - [[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] - call EFUNC(common,execRemoteFnc); + [[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] + call EFUNC(common,execRemoteFnc); }; _explosive diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index 77cfbb92a1..2eb7b7fde9 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -16,8 +16,8 @@ */ #include "script_component.hpp" if (GVAR(pfeh_running)) then { - [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); - GVAR(pfeh_running) = false; + [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); + GVAR(pfeh_running) = false; }; private ["_mag", "_setup", "_player"]; _setup = GVAR(Setup); @@ -29,77 +29,77 @@ _player = ACE_player; [_player, "MenuBack", _player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); call EFUNC(interaction,hideMouseHint); if ((_setup getVariable [QGVAR(Class), ""]) == "") exitWith { - deleteVehicle _setup; + deleteVehicle _setup; }; _dir = (getDir _setup); if (_dir > 180) then { - _dir = _dir - 180; + _dir = _dir - 180; } else { - _dir = 180 + _dir; + _dir = 180 + _dir; }; _setup setVariable [QGVAR(Direction), _dir]; _player setVariable [QGVAR(PlantingExplosive), true]; _setup addEventHandler ["EpeContactStart", { - if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { - private ["_player", "_pos", "_attachTo"]; - _player = ACE_player; - _player setVariable [QGVAR(PlantingExplosive), false]; - _pos = getPosATL (_this select 0); - (_this select 0) enableSimulationGlobal false; - if (surfaceIsWater _pos) then { - _pos = getPosASL (_this select 0); - (_this select 0) setPosASL _pos; - }else{ - (_this select 0) setPosATL _pos; - }; - (_this select 0) setVariable [QGVAR(Handled), true]; - _attachTo = objNull; - if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { - _attachTo = (_this select 1); - }; - [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution - private ["_mag", "_setup", "_dir", "_player"]; - _setup = _this select 0; - _player = ACE_player; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; + if (!((_this select 0) getVariable [QGVAR(Handled), false])) then { + private ["_player", "_pos", "_attachTo"]; + _player = ACE_player; + _player setVariable [QGVAR(PlantingExplosive), false]; + _pos = getPosATL (_this select 0); + (_this select 0) enableSimulationGlobal false; + if (surfaceIsWater _pos) then { + _pos = getPosASL (_this select 0); + (_this select 0) setPosASL _pos; + }else{ + (_this select 0) setPosATL _pos; + }; + (_this select 0) setVariable [QGVAR(Handled), true]; + _attachTo = objNull; + if (!isNull (_this select 1) && {(_this select 1) isKindOf "AllVehicles"}) then { + _attachTo = (_this select 1); + }; + [(_this select 0),_attachTo, _pos] spawn { // TODO: Change to scheduled delay execution + private ["_mag", "_setup", "_dir", "_player"]; + _setup = _this select 0; + _player = ACE_player; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; - sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); - _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); - deleteVehicle _setup; - if (!isNull(_explosive)) then { - _player RemoveMagazine _mag; - if (!isNull (_this select 1)) then { - _explosive attachTo [(_this select 1)]; - _dir = _dir - (getDir (_this select 1)); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); - }; - }; - }; - }; + sleep getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime"); + _explosive = [_player, _this select 2, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], isNull (_this select 1)] call FUNC(placeExplosive); + deleteVehicle _setup; + if (!isNull(_explosive)) then { + _player RemoveMagazine _mag; + if (!isNull (_this select 1)) then { + _explosive attachTo [(_this select 1)]; + _dir = _dir - (getDir (_this select 1)); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); + }; + }; + }; + }; }]; _setup enableSimulationGlobal true; _player playActionNow "MedicOther"; [_setup] spawn { // TODO: Change to scheduled delay execution - private ["_setup", "_player"]; - _setup = _this select 0; - _player = ACE_player; - sleep 5; - _player setVariable [QGVAR(PlantingExplosive), false]; - if (!isNull _setup) then { - private ["_mag", "_dir", "_delayTime"]; - _mag = _setup getVariable [QGVAR(Class), ""]; - _dir = _setup getVariable [QGVAR(Direction), 0]; - _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; - if (_delayTime > 0) then { - sleep _delayTime; - }; - if (!isNull _setup) then { - [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), - [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); - deleteVehicle _setup; - _player RemoveMagazine _mag; - }; - }; + private ["_setup", "_player"]; + _setup = _this select 0; + _player = ACE_player; + sleep 5; + _player setVariable [QGVAR(PlantingExplosive), false]; + if (!isNull _setup) then { + private ["_mag", "_dir", "_delayTime"]; + _mag = _setup getVariable [QGVAR(Class), ""]; + _dir = _setup getVariable [QGVAR(Direction), 0]; + _delayTime = (getNumber(ConfigFile >> "CfgMagazines" >> _mag >> "ACE_DelayTime")) - 5; + if (_delayTime > 0) then { + sleep _delayTime; + }; + if (!isNull _setup) then { + [_player, GetPosATL _setup, _dir, _mag, _setup getVariable QGVAR(Trigger), + [_setup getVariable QGVAR(Timer)], true] call FUNC(placeExplosive); + deleteVehicle _setup; + _player RemoveMagazine _mag; + }; + }; }; diff --git a/addons/explosives/functions/fnc_place_Cancel.sqf b/addons/explosives/functions/fnc_place_Cancel.sqf index c149d35584..56775c910e 100644 --- a/addons/explosives/functions/fnc_place_Cancel.sqf +++ b/addons/explosives/functions/fnc_place_Cancel.sqf @@ -15,15 +15,15 @@ */ #include "script_component.hpp" if (GVAR(pfeh_running)) then { - [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); - GVAR(pfeh_running) = false; + [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); + GVAR(pfeh_running) = false; }; if (!isNull (GVAR(Setup))) then { - deleteVehicle GVAR(Setup); + deleteVehicle GVAR(Setup); }; GVAR(Setup) = objNull; if (isNil {GVAR(placer)}) then { - GVAR(placer) = objNull; + GVAR(placer) = objNull; }; [GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus); GVAR(placer) = objNull; diff --git a/addons/explosives/functions/fnc_removeFromSpeedDial.sqf b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf index c0a467e6f1..c67313966c 100644 --- a/addons/explosives/functions/fnc_removeFromSpeedDial.sqf +++ b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf @@ -18,9 +18,9 @@ private "_speedDial"; _speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; if (count _speedDial == 0) exitWith {}; { - if ((_x select 0) == (_this select 0)) exitWith { - _speedDial set [_foreachIndex, "x"]; - _speedDial = _speedDial - ["x"]; - ace_player setVariable [QGVAR(SpeedDial),_speedDial]; - }; + if ((_x select 0) == (_this select 0)) exitWith { + _speedDial set [_foreachIndex, "x"]; + _speedDial = _speedDial - ["x"]; + ace_player setVariable [QGVAR(SpeedDial),_speedDial]; + }; } foreach _speedDial; diff --git a/addons/explosives/functions/fnc_setPosition.sqf b/addons/explosives/functions/fnc_setPosition.sqf index 2f61c522aa..4b6536d24d 100644 --- a/addons/explosives/functions/fnc_setPosition.sqf +++ b/addons/explosives/functions/fnc_setPosition.sqf @@ -20,6 +20,6 @@ private "_ex"; _ex = _this select 0; _ex setDir (_this select 1); if ((_this select 2) != 0) then { - [_ex, _this select 2, 0] call CALLSTACK(BIS_fnc_setPitchBank); + [_ex, _this select 2, 0] call CALLSTACK(BIS_fnc_setPitchBank); }; //_ex setVectorUp (surfaceNormal _pos); diff --git a/addons/explosives/functions/fnc_triggerType.sqf b/addons/explosives/functions/fnc_triggerType.sqf index 4dba9a8d8e..8ebcbf6699 100644 --- a/addons/explosives/functions/fnc_triggerType.sqf +++ b/addons/explosives/functions/fnc_triggerType.sqf @@ -20,6 +20,6 @@ _config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Tri _count = count _config; for "_index" from 0 to (_count - 1) do { - _result set [_index, ConfigFile >> "CfgACE_Triggers" >> (_config select _index)]; + _result set [_index, ConfigFile >> "CfgACE_Triggers" >> (_config select _index)]; }; _result diff --git a/addons/explosives/script_component.hpp b/addons/explosives/script_component.hpp index fa8b2bac4d..60c7e88d06 100644 --- a/addons/explosives/script_component.hpp +++ b/addons/explosives/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_EXPLOSIVES - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_EXPLOSIVES - #define DEBUG_SETTINGS DEBUG_SETTINGS_EXPLOSIVES + #define DEBUG_SETTINGS DEBUG_SETTINGS_EXPLOSIVES #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf b/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf index 7e8480ce18..31c2540790 100644 --- a/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf +++ b/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf @@ -5,7 +5,7 @@ _projectile = _this select 0 select 1; _zeroing = _this select 0 select 2; if (isNull _projectile || {!alive _projectile}) exitWith { - [_this select 1] call CBA_fnc_removePerFrameHandler; + [_this select 1] call CBA_fnc_removePerFrameHandler; }; if (_projectile distance _vehicle < _zeroing) exitWith {}; diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 58ed5573e1..8ad76e6ae8 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -1,352 +1,352 @@ -#define BASE_DRAG -0.01 -#define HD_MULT 5 -#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) +#define BASE_DRAG -0.01 +#define HD_MULT 5 +#define BASE_DRAG_HD (BASE_DRAG*HD_MULT) class CfgAmmo { - //class ace_arty_105mm_m1_m782_time; - //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; - //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { - // ACE_FRAG_SKIP = 1; - //}; - class Bo_GBU12_LGB; - class Nou_GBU12 : Bo_GBU12_LGB { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; - sideAirFriction = 0.04; - airFriction = 0.04; - laserLock = 0; - }; - - class GrenadeBase; - class Grenade; - class GrenadeHand: Grenade { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - // This is a good high-drag frag type for grenades. - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - /* - These values are based on the M67 Grenade, should be tweaked for - individual grenades. - */ - ACE_FRAG_METAL = 210; // metal in grams - ACE_FRAG_CHARGE = 185; // explosive in grams - ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations - ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations - }; - class GrenadeHand_stone: GrenadeHand { - ACE_FRAG_SKIP = 1; - }; - class SmokeShell: GrenadeHand { - ACE_FRAG_SKIP = 1; - }; - - class RocketBase; - //class R_Hydra_HE: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - //class R_57mm_HE: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - class R_80mm_HE: RocketBase { - ACE_FRAG_SKIP = 1; - }; - - //class R_S8T_AT: RocketBase { - // ACE_FRAG_SKIP = 1; - //}; - - class BombCore; - class Bo_Mk82: BombCore { - ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; - ACE_FRAG_METAL = 140000; - ACE_FRAG_CHARGE = 87000; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; - }; - - - class G_40mm_HE: GrenadeBase { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - }; - - class ACE_G_40mm_HEDP: G_40mm_HE { - }; - class ACE_G_40mm_HE: ACE_G_40mm_HEDP { - }; - class ACE_G_40mm_Practice: ACE_G_40mm_HE { - ACE_FRAG_SKIP = 1; - }; - class ACE_G40mm_HE_VOG25P: G_40mm_HE { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; - }; - - //class R_SMAW_HEDP; - //class R_MEEWS_HEDP : R_SMAW_HEDP { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.2; - //}; - - //class MissileBase; - //class M_Hellfire_AT: MissileBase { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.75; - //}; - - /* - class B_762x51_Ball; - class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? - model = "\A3\Weapons_f\ammo\shell"; - timeToLive = 12; - typicalSpeed = 800; - // Fix sounds - effectFly = "AmmoClassic"; - soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; - soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; - soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; - soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; - soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; - soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; - soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; - soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; - soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; - soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; - soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; - soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; - soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; - soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; - soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; - soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; - soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; - soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; - soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; - soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; - soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; - soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; - soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; - soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; - soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; - soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; - soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; - soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; - soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; - soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; - soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; - soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; - soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; - soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; - soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; - soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; - soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; - soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; - soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; - soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; - soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; - soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; - soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; - soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; - soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; - soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; - soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; - soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; - soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; - soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; - soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; - soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; - soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; - soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; - soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; - soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; - soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; - soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; - soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; - soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; - soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; - soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; - soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; - soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; - soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; - soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; - soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; - soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; - soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; - soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; - soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; - soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; - soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; - soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; - soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; - soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; - soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; - soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; - soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; - soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; - soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; - soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; - soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; - soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; - soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; - soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; - soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; - soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; - soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; - soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; - soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; - soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; - soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; - soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; - soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; - soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; - soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; - soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; - soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; - soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; - soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; - soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; - soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; - soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; - soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; - soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; - soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; - soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; - soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; - soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; - soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; - soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; - soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; - soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; - soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; - soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; - soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; - soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; - soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; - soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; - hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; - hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; - hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; - hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; - hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; - hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; - hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; - hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; - hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; - hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; - hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; - hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; - hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; - hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; - hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; - hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; - bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; - bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; - bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; - bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; - bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; - bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; - bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; - bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; - bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; - supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; - supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; - }; - */ - - class B_65x39_Caseless; - class ACE_frag_base: B_65x39_Caseless { - timeToLive = 12; - typicalSpeed = 1500; - deflecting = 65; - }; - - class ACE_frag_tiny: ACE_frag_base { - hit = 6; - airFriction = BASE_DRAG; - caliber = 0.75; - }; - - class ACE_frag_tiny_HD: ACE_frag_base { - hit = 6; - airFriction = BASE_DRAG_HD; - caliber = 0.75; - }; - - class ACE_frag_small: ACE_frag_base { - hit = 12; - airFriction = BASE_DRAG*0.9; - }; - - class ACE_frag_small_HD: ACE_frag_base { - hit = 12; - airFriction = BASE_DRAG_HD*0.9; - }; - - class ACE_frag_medium: ACE_frag_base { - hit = 14; - airFriction = BASE_DRAG*0.75; - caliber = 1.2; - }; - - class ACE_frag_medium_HD: ACE_frag_base { - hit = 14; - airFriction = BASE_DRAG_HD*0.75; - caliber = 1.2; - }; - - class ACE_frag_large: ACE_frag_base { - hit = 28; - indirectHit = 2; - indirectHitRange = 0.25; - airFriction = BASE_DRAG*0.65; - caliber = 2; - explosive = 0; - - }; - - class ACE_frag_large_HD: ACE_frag_large { - hit = 28; - indirectHit = 2; - indirectHitRange = 0.25; - airFriction = BASE_DRAG_HD*0.65; - caliber = 2; - - - }; - - class ACE_frag_huge: ACE_frag_large { - hit = 40; - indirectHit = 4; - indirectHitRange = 0.5; - airFriction = BASE_DRAG*0.5; - caliber = 2.8; - }; - - class ACE_frag_huge_HD: ACE_frag_large { - hit = 40; - indirectHit = 4; - indirectHitRange = 0.5; - airFriction = BASE_DRAG_HD*0.5; - caliber = 2.8; - }; - - class ACE_frag_spall_small: ACE_frag_small { - timeToLive = 0.1; - }; - - class ACE_frag_spall_medium: ACE_frag_medium { - timeToLive = 0.15; - }; - - class ACE_frag_spall_large: ACE_frag_large { - timeToLive = 0.25; - }; - - class ACE_frag_spall_huge: ACE_frag_huge { - timeToLive = 0.3; - }; + //class ace_arty_105mm_m1_m782_time; + //class ace_arty_105mm_m1_m782_prox: ace_arty_105mm_m1_m782_time {}; + //class ace_arty_105mm_m1_m782_delay: ace_arty_105mm_m1_m782_prox { + // ACE_FRAG_SKIP = 1; + //}; + class Bo_GBU12_LGB; + class Nou_GBU12 : Bo_GBU12_LGB { + ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + ACE_FRAG_METAL = 140000; + ACE_FRAG_CHARGE = 87000; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + sideAirFriction = 0.04; + airFriction = 0.04; + laserLock = 0; + }; + + class GrenadeBase; + class Grenade; + class GrenadeHand: Grenade { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + // This is a good high-drag frag type for grenades. + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + /* + These values are based on the M67 Grenade, should be tweaked for + individual grenades. + */ + ACE_FRAG_METAL = 210; // metal in grams + ACE_FRAG_CHARGE = 185; // explosive in grams + ACE_FRAG_GURNEY_C = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations + ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: http://en.wikipedia.org/wiki/Gurney_equations + }; + class GrenadeHand_stone: GrenadeHand { + ACE_FRAG_SKIP = 1; + }; + class SmokeShell: GrenadeHand { + ACE_FRAG_SKIP = 1; + }; + + class RocketBase; + //class R_Hydra_HE: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + //class R_57mm_HE: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + class R_80mm_HE: RocketBase { + ACE_FRAG_SKIP = 1; + }; + + //class R_S8T_AT: RocketBase { + // ACE_FRAG_SKIP = 1; + //}; + + class BombCore; + class Bo_Mk82: BombCore { + ACE_FRAG_CLASSES[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + ACE_FRAG_METAL = 140000; + ACE_FRAG_CHARGE = 87000; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + }; + + + class G_40mm_HE: GrenadeBase { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + }; + + class ACE_G_40mm_HEDP: G_40mm_HE { + }; + class ACE_G_40mm_HE: ACE_G_40mm_HEDP { + }; + class ACE_G_40mm_Practice: ACE_G_40mm_HE { + ACE_FRAG_SKIP = 1; + }; + class ACE_G40mm_HE_VOG25P: G_40mm_HE { + ACE_FRAG_SKIP = 0; + ACE_FRAG_FORCE = 1; + }; + + //class R_SMAW_HEDP; + //class R_MEEWS_HEDP : R_SMAW_HEDP { + // ACE_FRAG_FORCE = 1; + // ACE_FRAG_MULTIPLIER = 1.2; + //}; + + //class MissileBase; + //class M_Hellfire_AT: MissileBase { + // ACE_FRAG_FORCE = 1; + // ACE_FRAG_MULTIPLIER = 1.75; + //}; + + /* + class B_762x51_Ball; + class ACE_frag_base: B_762x51_Ball { ////TODO: B_762x45_Ball no longer exists, is this a valid replacement? + model = "\A3\Weapons_f\ammo\shell"; + timeToLive = 12; + typicalSpeed = 800; + // Fix sounds + effectFly = "AmmoClassic"; + soundDefault1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.158114,1,30}; + soundDefault2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.158114,1,30}; + soundDefault3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.158114,1,30}; + soundDefault4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.158114,1,30}; + soundDefault5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.158114,1,30}; + soundDefault6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.158114,1,30}; + soundDefault7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.158114,1,30}; + soundDefault8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.158114,1,30}; + soundGroundSoft1[] = {"A3\sounds_f\weapons\hits\soft_ground_1.wav",0.02811705,1,30}; + soundGroundSoft2[] = {"A3\sounds_f\weapons\hits\soft_ground_2.wav",0.02811705,1,30}; + soundGroundSoft3[] = {"A3\sounds_f\weapons\hits\soft_ground_3.wav",0.02811705,1,30}; + soundGroundSoft4[] = {"A3\sounds_f\weapons\hits\soft_ground_4.wav",0.02811705,1,30}; + soundGroundSoft5[] = {"A3\sounds_f\weapons\hits\soft_ground_5.wav",0.02811705,1,30}; + soundGroundSoft6[] = {"A3\sounds_f\weapons\hits\soft_ground_6.wav",0.02811705,1,30}; + soundGroundSoft7[] = {"A3\sounds_f\weapons\hits\soft_ground_7.wav",0.02811705,1,30}; + soundGroundSoft8[] = {"A3\sounds_f\weapons\hits\soft_ground_8.wav",0.02811705,1,30}; + soundGroundHard1[] = {"A3\sounds_f\weapons\hits\hard_ground_1.wav",0.62946,1,40}; + soundGroundHard2[] = {"A3\sounds_f\weapons\hits\hard_ground_2.wav",0.62946,1,40}; + soundGroundHard3[] = {"A3\sounds_f\weapons\hits\hard_ground_3.wav",0.62946,1,40}; + soundGroundHard4[] = {"A3\sounds_f\weapons\hits\hard_ground_4.wav",0.62946,1,40}; + soundGroundHard5[] = {"A3\sounds_f\weapons\hits\hard_ground_5.wav",0.62946,1,40}; + soundGroundHard6[] = {"A3\sounds_f\weapons\hits\hard_ground_6.wav",0.62946,1,40}; + soundGroundHard7[] = {"A3\sounds_f\weapons\hits\hard_ground_7.wav",0.62946,1,40}; + soundGroundHard8[] = {"A3\sounds_f\weapons\hits\hard_ground_8.wav",0.62946,1,40}; + soundMetal1[] = {"A3\sounds_f\weapons\hits\metal_1.wav",0.158114,1,45}; + soundMetal2[] = {"A3\sounds_f\weapons\hits\metal_2.wav",0.158114,1,45}; + soundMetal3[] = {"A3\sounds_f\weapons\hits\metal_3.wav",0.158114,1,45}; + soundMetal4[] = {"A3\sounds_f\weapons\hits\metal_4.wav",0.158114,1,45}; + soundMetal5[] = {"A3\sounds_f\weapons\hits\metal_5.wav",0.158114,1,45}; + soundMetal6[] = {"A3\sounds_f\weapons\hits\metal_6.wav",0.158114,1,45}; + soundMetal7[] = {"A3\sounds_f\weapons\hits\metal_7.wav",0.158114,1,45}; + soundMetal8[] = {"A3\sounds_f\weapons\hits\metal_8.wav",0.158114,1,45}; + soundGlass1[] = {"A3\sounds_f\weapons\hits\glass_1.wav",0.177828,1,25}; + soundGlass2[] = {"A3\sounds_f\weapons\hits\glass_2.wav",0.177828,1,25}; + soundGlass3[] = {"A3\sounds_f\weapons\hits\glass_3.wav",0.177828,1,25}; + soundGlass4[] = {"A3\sounds_f\weapons\hits\glass_4.wav",0.177828,1,25}; + soundGlass5[] = {"A3\sounds_f\weapons\hits\glass_5.wav",0.177828,1,25}; + soundGlass6[] = {"A3\sounds_f\weapons\hits\glass_6.wav",0.177828,1,25}; + soundGlass7[] = {"A3\sounds_f\weapons\hits\glass_7.wav",0.177828,1,25}; + soundGlass8[] = {"A3\sounds_f\weapons\hits\glass_8.wav",0.177828,1,25}; + soundGlassArmored1[] = {"A3\sounds_f\weapons\hits\glass_arm_1.wav",0.177828,1,30}; + soundGlassArmored2[] = {"A3\sounds_f\weapons\hits\glass_arm_2.wav",0.177828,1,30}; + soundGlassArmored3[] = {"A3\sounds_f\weapons\hits\glass_arm_3.wav",0.177828,1,30}; + soundGlassArmored4[] = {"A3\sounds_f\weapons\hits\glass_arm_4.wav",0.177828,1,30}; + soundGlassArmored5[] = {"A3\sounds_f\weapons\hits\glass_arm_5.wav",0.177828,1,30}; + soundGlassArmored6[] = {"A3\sounds_f\weapons\hits\glass_arm_6.wav",0.177828,1,30}; + soundGlassArmored7[] = {"A3\sounds_f\weapons\hits\glass_arm_7.wav",0.177828,1,30}; + soundGlassArmored8[] = {"A3\sounds_f\weapons\hits\glass_arm_8.wav",0.177828,1,30}; + soundVehiclePlate1[] = {"A3\sounds_f\weapons\hits\metal_plate_1.wav",0.281170,1,40}; + soundVehiclePlate2[] = {"A3\sounds_f\weapons\hits\metal_plate_2.wav",0.281170,1,40}; + soundVehiclePlate3[] = {"A3\sounds_f\weapons\hits\metal_plate_3.wav",0.281170,1,40}; + soundVehiclePlate4[] = {"A3\sounds_f\weapons\hits\metal_plate_4.wav",0.281170,1,40}; + soundVehiclePlate5[] = {"A3\sounds_f\weapons\hits\metal_plate_5.wav",0.281170,1,40}; + soundVehiclePlate6[] = {"A3\sounds_f\weapons\hits\metal_plate_6.wav",0.281170,1,40}; + soundVehiclePlate7[] = {"A3\sounds_f\weapons\hits\metal_plate_7.wav",0.281170,1,40}; + soundVehiclePlate8[] = {"A3\sounds_f\weapons\hits\metal_plate_8.wav",0.281170,1,40}; + soundWood1[] = {"A3\sounds_f\weapons\hits\wood_1.wav",0.158114,1,30}; + soundWood2[] = {"A3\sounds_f\weapons\hits\wood_2.wav",0.158114,1,30}; + soundWood3[] = {"A3\sounds_f\weapons\hits\wood_3.wav",0.158114,1,30}; + soundWood4[] = {"A3\sounds_f\weapons\hits\wood_4.wav",0.158114,1,30}; + soundWood5[] = {"A3\sounds_f\weapons\hits\wood_5.wav",0.158114,1,30}; + soundWood6[] = {"A3\sounds_f\weapons\hits\wood_6.wav",0.158114,1,30}; + soundWood7[] = {"A3\sounds_f\weapons\hits\wood_7.wav",0.158114,1,30}; + soundWood8[] = {"A3\sounds_f\weapons\hits\wood_8.wav",0.158114,1,30}; + soundHitBody1[] = {"A3\sounds_f\weapons\hits\body_1.wav",0.0177828,1,25}; + soundHitBody2[] = {"A3\sounds_f\weapons\hits\body_2.wav",0.0177828,1,25}; + soundHitBody3[] = {"A3\sounds_f\weapons\hits\body_3.wav",0.0177828,1,25}; + soundHitBody4[] = {"A3\sounds_f\weapons\hits\body_4.wav",0.0177828,1,25}; + soundHitBody5[] = {"A3\sounds_f\weapons\hits\body_5.wav",0.0177828,1,25}; + soundHitBody6[] = {"A3\sounds_f\weapons\hits\body_6.wav",0.0177828,1,25}; + soundHitBody7[] = {"A3\sounds_f\weapons\hits\body_7.wav",0.0177828,1,25}; + soundHitBody8[] = {"A3\sounds_f\weapons\hits\body_8.wav",0.0177828,1,25}; + soundHitBuilding1[] = {"A3\sounds_f\weapons\hits\building_1.wav",0.251189,1,30}; + soundHitBuilding2[] = {"A3\sounds_f\weapons\hits\building_2.wav",0.251189,1,30}; + soundHitBuilding3[] = {"A3\sounds_f\weapons\hits\building_3.wav",0.251189,1,30}; + soundHitBuilding4[] = {"A3\sounds_f\weapons\hits\building_4.wav",0.251189,1,30}; + soundHitBuilding5[] = {"A3\sounds_f\weapons\hits\building_5.wav",0.251189,1,30}; + soundHitBuilding6[] = {"A3\sounds_f\weapons\hits\building_6.wav",0.251189,1,30}; + soundHitBuilding7[] = {"A3\sounds_f\weapons\hits\building_7.wav",0.251189,1,30}; + soundHitBuilding8[] = {"A3\sounds_f\weapons\hits\building_8.wav",0.251189,1,30}; + soundHitFoliage1[] = {"A3\sounds_f\weapons\hits\foliage_1.wav",0.177828,1,25}; + soundHitFoliage2[] = {"A3\sounds_f\weapons\hits\foliage_2.wav",0.177828,1,25}; + soundHitFoliage3[] = {"A3\sounds_f\weapons\hits\foliage_3.wav",0.177828,1,25}; + soundHitFoliage4[] = {"A3\sounds_f\weapons\hits\foliage_4.wav",0.177828,1,25}; + soundHitFoliage5[] = {"A3\sounds_f\weapons\hits\foliage_5.wav",0.177828,1,25}; + soundHitFoliage6[] = {"A3\sounds_f\weapons\hits\foliage_6.wav",0.177828,1,25}; + soundHitFoliage7[] = {"A3\sounds_f\weapons\hits\foliage_7.wav",0.177828,1,25}; + soundHitFoliage8[] = {"A3\sounds_f\weapons\hits\foliage_8.wav",0.177828,1,25}; + soundPlastic1[] = {"A3\sounds_f\weapons\hits\plastic_1.wav",0.177828,1,25}; + soundPlastic2[] = {"A3\sounds_f\weapons\hits\plastic_2.wav",0.177828,1,25}; + soundPlastic3[] = {"A3\sounds_f\weapons\hits\plastic_3.wav",0.177828,1,25}; + soundPlastic4[] = {"A3\sounds_f\weapons\hits\plastic_4.wav",0.177828,1,25}; + soundPlastic5[] = {"A3\sounds_f\weapons\hits\plastic_5.wav",0.177828,1,25}; + soundPlastic6[] = {"A3\sounds_f\weapons\hits\plastic_6.wav",0.177828,1,25}; + soundPlastic7[] = {"A3\sounds_f\weapons\hits\plastic_7.wav",0.177828,1,25}; + soundPlastic8[] = {"A3\sounds_f\weapons\hits\plastic_8.wav",0.177828,1,25}; + soundConcrete1[] = {"A3\sounds_f\weapons\hits\concrete_1.wav",0.177828,1,35}; + soundConcrete2[] = {"A3\sounds_f\weapons\hits\concrete_2.wav",0.177828,1,35}; + soundConcrete3[] = {"A3\sounds_f\weapons\hits\concrete_3.wav",0.177828,1,35}; + soundConcrete4[] = {"A3\sounds_f\weapons\hits\concrete_4.wav",0.177828,1,35}; + soundConcrete5[] = {"A3\sounds_f\weapons\hits\concrete_5.wav",0.177828,1,35}; + soundConcrete6[] = {"A3\sounds_f\weapons\hits\concrete_6.wav",0.177828,1,35}; + soundConcrete7[] = {"A3\sounds_f\weapons\hits\concrete_7.wav",0.177828,1,35}; + soundConcrete8[] = {"A3\sounds_f\weapons\hits\concrete_8.wav",0.177828,1,35}; + soundRubber1[] = {"A3\sounds_f\weapons\hits\tyre_1.wav",0.158114,1,25}; + soundRubber2[] = {"A3\sounds_f\weapons\hits\tyre_2.wav",0.158114,1,25}; + soundRubber3[] = {"A3\sounds_f\weapons\hits\tyre_3.wav",0.158114,1,25}; + soundRubber4[] = {"A3\sounds_f\weapons\hits\tyre_4.wav",0.158114,1,25}; + soundRubber5[] = {"A3\sounds_f\weapons\hits\tyre_5.wav",0.158114,1,25}; + soundRubber6[] = {"A3\sounds_f\weapons\hits\tyre_6.wav",0.158114,1,25}; + soundRubber7[] = {"A3\sounds_f\weapons\hits\tyre_7.wav",0.158114,1,25}; + soundRubber8[] = {"A3\sounds_f\weapons\hits\tyre_8.wav",0.158114,1,25}; + soundWater1[] = {"A3\sounds_f\weapons\hits\water_01.wav",0.158114,1,25}; + soundWater2[] = {"A3\sounds_f\weapons\hits\water_02.wav",0.158114,1,25}; + soundWater3[] = {"A3\sounds_f\weapons\hits\water_03.wav",0.158114,1,25}; + soundWater4[] = {"A3\sounds_f\weapons\hits\water_04.wav",0.158114,1,25}; + soundWater5[] = {"A3\sounds_f\weapons\hits\water_05.wav",0.158114,1,25}; + soundWater6[] = {"A3\sounds_f\weapons\hits\water_06.wav",0.158114,1,25}; + soundWater7[] = {"A3\sounds_f\weapons\hits\water_07.wav",0.158114,1,25}; + soundWater8[] = {"A3\sounds_f\weapons\hits\water_08.wav",0.158114,1,25}; + hitGroundSoft[] = {"soundGroundSoft1",0.2,"soundGroundSoft2",0.2,"soundGroundSoft3",0.1,"soundGroundSoft4",0.1,"soundGroundSoft5",0.1,"soundGroundSoft6",0.1,"soundGroundSoft7",0.1,"soundGroundSoft8",0.1}; + hitGroundHard[] = {"soundGroundHard1",0.2,"soundGroundHard2",0.2,"soundGroundHard3",0.1,"soundGroundHard4",0.1,"soundGroundHard5",0.1,"soundGroundHard6",0.1,"soundGroundHard7",0.1,"soundGroundHard8",0.1}; + hitMan[] = {"soundHitBody1",0.125,"soundHitBody2",0.125,"soundHitBody3",0.125,"soundHitBody4",0.125,"soundHitBody5",0.125,"soundHitBody6",0.125,"soundHitBody7",0.125,"soundHitBody8",0.125}; + hitArmor[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; + hitBuilding[] = {"soundHitBuilding1",0.2,"soundHitBuilding2",0.2,"soundHitBuilding3",0.1,"soundHitBuilding4",0.1,"soundHitBuilding5",0.1,"soundHitBuilding6",0.1,"soundHitBuilding7",0.1,"soundHitBuilding8",0.1}; + hitFoliage[] = {"soundHitFoliage1",0.125,"soundHitFoliage2",0.125,"soundHitFoliage3",0.125,"soundHitFoliage4",0.125,"soundHitFoliage5",0.125,"soundHitFoliage6",0.125,"soundHitFoliage7",0.125,"soundHitFoliage8",0.125}; + hitWood[] = {"soundWood1",0.125,"soundWood2",0.125,"soundWood3",0.125,"soundWood4",0.125,"soundWood5",0.125,"soundWood6",0.125,"soundWood7",0.125,"soundWood8",0.125}; + hitGlass[] = {"soundGlass1",0.125,"soundGlass2",0.125,"soundGlass3",0.125,"soundGlass4",0.125,"soundGlass5",0.125,"soundGlass6",0.125,"soundGlass7",0.125,"soundGlass8",0.125}; + hitGlassArmored[] = {"soundGlassArmored1",0.125,"soundGlassArmored2",0.125,"soundGlassArmored3",0.125,"soundGlassArmored4",0.125,"soundGlassArmored5",0.125,"soundGlassArmored6",0.125,"soundGlassArmored7",0.125,"soundGlassArmored8",0.125}; + hitConcrete[] = {"soundConcrete1",0.125,"soundConcrete2",0.125,"soundConcrete3",0.125,"soundConcrete4",0.125,"soundConcrete5",0.125,"soundConcrete6",0.125,"soundConcrete7",0.125,"soundConcrete8",0.125}; + hitRubber[] = {"soundRubber1",0.125,"soundRubber2",0.125,"soundRubber3",0.125,"soundRubber4",0.125,"soundRubber5",0.125,"soundRubber6",0.125,"soundRubber7",0.125,"soundRubber8",0.125}; + hitPlastic[] = {"soundPlastic1",0.125,"soundPlastic2",0.125,"soundPlastic3",0.125,"soundPlastic4",0.125,"soundPlastic5",0.125,"soundPlastic6",0.125,"soundPlastic7",0.125,"soundPlastic8",0.125}; + hitDefault[] = {"soundDefault1",0.2,"soundDefault2",0.2,"soundDefault3",0.1,"soundDefault4",0.1,"soundDefault5",0.1,"soundDefault6",0.1,"soundDefault7",0.1,"soundDefault8",0.1}; + hitMetal[] = {"soundMetal1",0.125,"soundMetal2",0.125,"soundMetal3",0.125,"soundMetal4",0.125,"soundMetal5",0.125,"soundMetal6",0.125,"soundMetal7",0.125,"soundMetal8",0.125}; + hitMetalplate[] = {"soundVehiclePlate1",0.125,"soundVehiclePlate2",0.125,"soundVehiclePlate3",0.125,"soundVehiclePlate4",0.125,"soundVehiclePlate5",0.125,"soundVehiclePlate6",0.125,"soundVehiclePlate7",0.125,"soundVehiclePlate8",0.125}; + hitWater[] = {"soundWater1",0.125,"soundWater2",0.125,"soundWater3",0.125,"soundWater4",0.125,"soundWater5",0.125,"soundWater6",0.125,"soundWater7",0.125,"soundWater8",0.125}; + bulletFly1[] = {"A3\sounds_f\weapons\hits\bullet_by_1.wav",1,1,35}; + bulletFly2[] = {"A3\sounds_f\weapons\hits\bullet_by_2.wav",1,1,35}; + bulletFly3[] = {"A3\sounds_f\weapons\hits\bullet_by_3.wav",1,1,35}; + bulletFly4[] = {"A3\sounds_f\weapons\hits\bullet_by_4.wav",1,1,35}; + bulletFly5[] = {"A3\sounds_f\weapons\hits\bullet_by_5.wav",1,1,35}; + bulletFly6[] = {"A3\sounds_f\weapons\hits\bullet_by_6.wav",1,1,35}; + bulletFly7[] = {"A3\sounds_f\weapons\hits\bullet_by_7.wav",1,1,35}; + bulletFly8[] = {"A3\sounds_f\weapons\hits\bullet_by_8.wav",1,1,35}; + bulletFly[] = {"bulletFly1",0.166,"bulletFly2",0.166,"bulletFly3",0.166,"bulletFly4",0.166,"bulletFly5",0.166,"bulletFly6",0.167,"bulletFly7",0.166,"bulletFly8",0.167}; + supersonicCrackNear[] = {"A3\sounds_f\weapons\hits\sscrack1.wav",1,1,35}; + supersonicCrackFar[] = {"A3\sounds_f\weapons\hits\sscrack2.wav",1,1,135}; + }; + */ + + class B_65x39_Caseless; + class ACE_frag_base: B_65x39_Caseless { + timeToLive = 12; + typicalSpeed = 1500; + deflecting = 65; + }; + + class ACE_frag_tiny: ACE_frag_base { + hit = 6; + airFriction = BASE_DRAG; + caliber = 0.75; + }; + + class ACE_frag_tiny_HD: ACE_frag_base { + hit = 6; + airFriction = BASE_DRAG_HD; + caliber = 0.75; + }; + + class ACE_frag_small: ACE_frag_base { + hit = 12; + airFriction = BASE_DRAG*0.9; + }; + + class ACE_frag_small_HD: ACE_frag_base { + hit = 12; + airFriction = BASE_DRAG_HD*0.9; + }; + + class ACE_frag_medium: ACE_frag_base { + hit = 14; + airFriction = BASE_DRAG*0.75; + caliber = 1.2; + }; + + class ACE_frag_medium_HD: ACE_frag_base { + hit = 14; + airFriction = BASE_DRAG_HD*0.75; + caliber = 1.2; + }; + + class ACE_frag_large: ACE_frag_base { + hit = 28; + indirectHit = 2; + indirectHitRange = 0.25; + airFriction = BASE_DRAG*0.65; + caliber = 2; + explosive = 0; + + }; + + class ACE_frag_large_HD: ACE_frag_large { + hit = 28; + indirectHit = 2; + indirectHitRange = 0.25; + airFriction = BASE_DRAG_HD*0.65; + caliber = 2; + + + }; + + class ACE_frag_huge: ACE_frag_large { + hit = 40; + indirectHit = 4; + indirectHitRange = 0.5; + airFriction = BASE_DRAG*0.5; + caliber = 2.8; + }; + + class ACE_frag_huge_HD: ACE_frag_large { + hit = 40; + indirectHit = 4; + indirectHitRange = 0.5; + airFriction = BASE_DRAG_HD*0.5; + caliber = 2.8; + }; + + class ACE_frag_spall_small: ACE_frag_small { + timeToLive = 0.1; + }; + + class ACE_frag_spall_medium: ACE_frag_medium { + timeToLive = 0.15; + }; + + class ACE_frag_spall_large: ACE_frag_large { + timeToLive = 0.25; + }; + + class ACE_frag_spall_huge: ACE_frag_huge { + timeToLive = 0.3; + }; }; diff --git a/addons/frag/CfgEventhandlers.hpp b/addons/frag/CfgEventhandlers.hpp index 121b24d062..1e631e07eb 100644 --- a/addons/frag/CfgEventhandlers.hpp +++ b/addons/frag/CfgEventhandlers.hpp @@ -1,17 +1,17 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_pre_init)); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_pre_init)); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_post_init)); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_post_init)); + }; }; class Extended_FiredBIS_EventHandlers { - class AllVehicles { - ADDON = QUOTE(_this call FUNC(fired)); - }; + class AllVehicles { + ADDON = QUOTE(_this call FUNC(fired)); + }; }; diff --git a/addons/frag/XEH_post_init.sqf b/addons/frag/XEH_post_init.sqf index ed0e715376..9769148871 100644 --- a/addons/frag/XEH_post_init.sqf +++ b/addons/frag/XEH_post_init.sqf @@ -1,18 +1,18 @@ #include "script_component.hpp" if(isServer) then { - [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; + [QGVAR(frag_eh), { _this call FUNC(frago); }] call ace_common_fnc_addEventHandler; }; /* GVAR(replacedBisArtyWrapper) = false; [] spawn { - waitUntil { - if(!(isNil "BIS_ARTY_F_ShellFlight")) then { - ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; - BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); - GVAR(replacedBisArtyWrapper) = true; - }; - sleep 4; - GVAR(replacedBisArtyWrapper) - }; + waitUntil { + if(!(isNil "BIS_ARTY_F_ShellFlight")) then { + ACE_WRAPPER_BIS_ARTY_F_ShellFlight = BIS_ARTY_F_ShellFlight; + BIS_ARTY_F_ShellFlight = FUNC(BIS_ARTY_WRAPPER); + GVAR(replacedBisArtyWrapper) = true; + }; + sleep 4; + GVAR(replacedBisArtyWrapper) + }; }; */ \ No newline at end of file diff --git a/addons/frag/config.cpp b/addons/frag/config.cpp index 98a159a78e..d4fa788e97 100644 --- a/addons/frag/config.cpp +++ b/addons/frag/config.cpp @@ -1,13 +1,13 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { "A3_Misc_F", "A3_Weapons_F" }; - author[] = {"Nou"}; - VERSION_CONFIG; - }; + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { "A3_Misc_F", "A3_Weapons_F" }; + author[] = {"Nou"}; + VERSION_CONFIG; + }; }; //PRELOAD_ADDONS; diff --git a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf index ee7881277b..0d71cf58ac 100644 --- a/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf +++ b/addons/frag/functions/fnc_BIS_ARTY_WRAPPER.sqf @@ -1,13 +1,13 @@ #include "script_component.hpp" _ret = [(_this select 6)] call FUNC(removeTrack); if(!_ret) then { - [(_this select 6)] call FUNC(addBlackList); + [(_this select 6)] call FUNC(addBlackList); }; _this call ACE_WRAPPER_BIS_ARTY_F_ShellFlight; _catEntry = BIS_ARTY_SHELLCAT select ((count BIS_ARTY_SHELLCAT) - 1); _shell = _catEntry select 0; _ARTY_DeployOnImpact = getText (configFile >> "CfgAmmo" >> "ARTY_DeployOnImpact"); if(_ARTY_DeployOnImpact == "") then { - _this set[6, _shell]; - _this call FUNC(fired); + _this set[6, _shell]; + _this call FUNC(fired); }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addManualTrack.sqf b/addons/frag/functions/fnc_addManualTrack.sqf index 066499f6aa..3dc14cc748 100644 --- a/addons/frag/functions/fnc_addManualTrack.sqf +++ b/addons/frag/functions/fnc_addManualTrack.sqf @@ -2,6 +2,6 @@ private ["_round"]; _round = _this select 0; if(alive _round) then { - GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; - [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; + GVAR(trackedObjects) set[(count GVAR(trackedObjects)), _round]; + [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), (typeOf _round), time, objNull, false, 0, 0]] call cba_fnc_addPerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_addTrack.sqf index 65ad3b6a22..2beea1dd56 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_addTrack.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" if(GVAR(autoTrace)) then { - [] call FUNC(startTracing); + [] call FUNC(startTracing); }; // setAccTime 0.05; @@ -9,7 +9,7 @@ _obj = _this select 1; _origin = _this select 0; _color = [1,0,0,1]; if((count _this) > 2) then { - _color = _this select 2; + _color = _this select 2; }; _positions = []; _objVel = velocity _obj; diff --git a/addons/frag/functions/fnc_denyFrag.sqf b/addons/frag/functions/fnc_denyFrag.sqf index 5459f0160a..6c4aa9bf8d 100644 --- a/addons/frag/functions/fnc_denyFrag.sqf +++ b/addons/frag/functions/fnc_denyFrag.sqf @@ -3,5 +3,5 @@ private ["_ret"]; _ret = [(_this select 0)] call FUNC(removeTrack); if(!_ret) then { - [(_this select 0)] call FUNC(addBlackList); + [(_this select 0)] call FUNC(addBlackList); }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 5560a4f0af..761490fa90 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -1,14 +1,14 @@ //fnc_doSpall.sqf #include "script_component.hpp" #ifdef DEBUG_MODE_FULL - GVAR(traceFrags) = true; + GVAR(traceFrags) = true; #endif // player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; private ["_params", "_initialData", "_hpData", "_roundType", "_round", "_object", "_caliber", "_explosive", - "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", - "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", - "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", - "_fragment"]; + "_idh", "_alive", "_exit", "_vm", "_velocity", "_unitDir", "_oldVelocity", "_curVelocity", "_diff", "_polar", + "_pos", "_spallPos", "_i", "_pos1", "_pos2", "_blah", "_data", "_spallPolar", "_c", "_warn", "_m", "_k", + "_gC", "_shellType", "_fragPower", "_spread", "_spallCount", "_elev", "_dir", "_vel", "_spallFragVect", + "_fragment"]; _params = _this select 0; @@ -23,7 +23,7 @@ _object removeEventHandler ["hitPart", _initialData select 0]; _foundObjects = _initialData select 7; _index = _foundObjects find _object; if(_index != -1) then { - _foundObjecsts set[_index, nil]; + _foundObjecsts set[_index, nil]; }; _roundType = (_initialData select 2); @@ -36,131 +36,131 @@ _idh = getNumber(configFile >> "CfgAmmo" >> _roundType >> "indirectHitRange"); _alive = true; if(!alive _round && (_initialData select 6) == 1) then { - _alive = false; + _alive = false; }; if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { - // player sideChat format["BBBB"]; - _exit = false; - _vm = 1; - _velocity = _initialData select 5; - - _oldVelocity = _velocity call BIS_fnc_magnitude; - _curVelocity = (velocity _round) call BIS_fnc_magnitude; - - if(alive _round) then { - _diff = _velocity vectorDiff (velocity _round); - _polar = _diff call CBA_fnc_vect2polar; - // player sideChat format["polar: %1", _polar]; - if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { - if(_caliber < 2.5) then { - // player sideChat format["exit!"]; - _exit = true; - } else { - _vm = 1-(_curVelocity/_oldVelocity); - }; - }; - }; - if(!_exit) then { - _unitDir = vectorNormalized _velocity; - _pos = _hpData select 3; - _spallPos = nil; - for "_i" from 0 to 100 do { - _pos1 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*_i), - (_pos select 1) + (((_unitDir select 1)*0.01)*_i), - (_pos select 2) + (((_unitDir select 2)*0.01)*_i) - ]; - _pos2 = [ - (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), - (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), - (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) - ]; - // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; - // diag_log text format["b: %1", _blah]; - - // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; - // NOU_TRACES set[(count NOU_TRACES), _data]; - - if(!lineIntersects [_pos1, _pos2]) exitWith { - // player sideChat format["FOUND!"]; - _spallPos = _pos2; - }; - }; - if(!isNil "_spallPos") then { - _spallPolar = _velocity call CBA_fnc_vect2polar; - - if(_explosive > 0) then { - // player sideChat format["EXPLOSIVE!"]; - _warn = false; - _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); - if(_c == 0) then { _c = 1; _warn = true;}; - _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); - if(_m == 0) then { _m = 2; _warn = true;}; - _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); - if(_k == 0) then { _k = 1/2; _warn = true;}; - _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); - if(_gC == 0) then { _gC = 2440; _warn = true;}; + // player sideChat format["BBBB"]; + _exit = false; + _vm = 1; + _velocity = _initialData select 5; + + _oldVelocity = _velocity call BIS_fnc_magnitude; + _curVelocity = (velocity _round) call BIS_fnc_magnitude; + + if(alive _round) then { + _diff = _velocity vectorDiff (velocity _round); + _polar = _diff call CBA_fnc_vect2polar; + // player sideChat format["polar: %1", _polar]; + if((abs(_polar select 1) > 45 || abs(_polar select 2) > 45)) then { + if(_caliber < 2.5) then { + // player sideChat format["exit!"]; + _exit = true; + } else { + _vm = 1-(_curVelocity/_oldVelocity); + }; + }; + }; + if(!_exit) then { + _unitDir = vectorNormalized _velocity; + _pos = _hpData select 3; + _spallPos = nil; + for "_i" from 0 to 100 do { + _pos1 = [ + (_pos select 0) + (((_unitDir select 0)*0.01)*_i), + (_pos select 1) + (((_unitDir select 1)*0.01)*_i), + (_pos select 2) + (((_unitDir select 2)*0.01)*_i) + ]; + _pos2 = [ + (_pos select 0) + (((_unitDir select 0)*0.01)*(_i+1)), + (_pos select 1) + (((_unitDir select 1)*0.01)*(_i+1)), + (_pos select 2) + (((_unitDir select 2)*0.01)*(_i+1)) + ]; + // _blah = [_object, "FIRE"] intersect [_object worldToModel (ASLtoATL _pos1), _object worldToModel (ASLtoATL _pos2)]; + // diag_log text format["b: %1", _blah]; + + // _data = [nil, nil, nil, 1, [[ASLtoATL _pos1, 1], [ASLtoATL _pos2, 1]]]; + // NOU_TRACES set[(count NOU_TRACES), _data]; + + if(!lineIntersects [_pos1, _pos2]) exitWith { + // player sideChat format["FOUND!"]; + _spallPos = _pos2; + }; + }; + if(!isNil "_spallPos") then { + _spallPolar = _velocity call CBA_fnc_vect2polar; + + if(_explosive > 0) then { + // player sideChat format["EXPLOSIVE!"]; + _warn = false; + _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); + if(_c == 0) then { _c = 1; _warn = true;}; + _m = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_METAL"); + if(_m == 0) then { _m = 2; _warn = true;}; + _k = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_K"); + if(_k == 0) then { _k = 1/2; _warn = true;}; + _gC = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_GURNEY_C"); + if(_gC == 0) then { _gC = 2440; _warn = true;}; - if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release - }; + if(_warn) then { + diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _roundType]; //TODO: turn this off when we get closer to release + }; - _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; - _spallPolar set[0, _fragPower*0.66]; - }; - - _fragTypes = [ - "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", - "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", - "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", - "ACE_frag_spall_huge" + _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; + _spallPolar set[0, _fragPower*0.66]; + }; + + _fragTypes = [ + "ACE_frag_spall_small", "ACE_frag_spall_small", "ACE_frag_spall_small", + "ACE_frag_spall_small","ACE_frag_spall_medium","ACE_frag_spall_medium","ACE_frag_spall_medium", + "ACE_frag_spall_medium", "ACE_frag_spall_large", "ACE_frag_spall_large", "ACE_frag_spall_huge", + "ACE_frag_spall_huge" - ]; - - // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; - _spread = 15+(random 25); - _spallCount = 5+(random 10); - for "_i" from 1 to _spallCount do { - _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); - _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); - if(abs _elev > 90) then { - _dir = _dir + 180; - }; - _dir = _dir % 360; - _vel = (_spallPolar select 0)*0.33*_vm; - _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - - _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; - _fragType = round (random ((count _fragTypes)-1)); - _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragment setPosASL _spallPos; - _fragment setVelocity _spallFragVect; - if(GVAR(traceFrags)) then { - [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); - }; - }; - _spread = 5+(random 5); - _spallCount = 3+(random 5); - for "_i" from 1 to _spallCount do { - _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); - _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); - if(abs _elev > 90) then { - _dir = _dir + 180; - }; - _dir = _dir % 360; - _vel = (_spallPolar select 0)*0.55*_vm; - _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); - - _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; - _fragType = round (random ((count _fragTypes)-1)); - _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragment setPosASL _spallPos; - _fragment setVelocity _spallFragVect; - if(GVAR(traceFrags)) then { - [player, _fragment, [1,0,0,1]] call FUNC(addTrack); - }; - }; - }; - }; + ]; + + // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; + _spread = 15+(random 25); + _spallCount = 5+(random 10); + for "_i" from 1 to _spallCount do { + _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); + _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); + if(abs _elev > 90) then { + _dir = _dir + 180; + }; + _dir = _dir % 360; + _vel = (_spallPolar select 0)*0.33*_vm; + _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); + + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; + _fragType = round (random ((count _fragTypes)-1)); + _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragment setPosASL _spallPos; + _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { + [player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); + }; + }; + _spread = 5+(random 5); + _spallCount = 3+(random 5); + for "_i" from 1 to _spallCount do { + _elev = ((_spallPolar select 2)-_spread)+(random (_spread*2)); + _dir = ((_spallPolar select 1)-_spread)+(random (_spread*2)); + if(abs _elev > 90) then { + _dir = _dir + 180; + }; + _dir = _dir % 360; + _vel = (_spallPolar select 0)*0.55*_vm; + _vel = (_vel-(_vel*0.25))+(random (_vel*0.5)); + + _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect; + _fragType = round (random ((count _fragTypes)-1)); + _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragment setPosASL _spallPos; + _fragment setVelocity _spallFragVect; + if(GVAR(traceFrags)) then { + [player, _fragment, [1,0,0,1]] call FUNC(addTrack); + }; + }; + }; + }; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_drawTraces.sqf index 8e3ab6146e..b9645bab97 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_drawTraces.sqf @@ -1,32 +1,32 @@ #include "script_component.hpp" { - _positions = _x select 4; - _color = _x select 5; - _index = 0; - _max = count _positions; - _startSpeed = (_positions select 0) select 1; - if(_startSpeed <= 0) then { - _startSpeed = 0.01; - }; - _lastSpd = []; - _lastPos = []; - while {_index < _max} do { - _data1 = _positions select _index; - _data2 = nil; - if(_index + ACE_TRACE_DRAW_INC >= _max) then { - _data2 = _positions select (_max - 1); - } else { - _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); - }; - - _pos1 = _data1 select 0; - _pos2 = _data2 select 0; - _index = _index + ACE_TRACE_DRAW_INC; - - - drawLine3D [_pos1, _pos2, _color]; - _lastPos = _pos2; - _lastSpd = _data1 select 1; - }; - // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; + _positions = _x select 4; + _color = _x select 5; + _index = 0; + _max = count _positions; + _startSpeed = (_positions select 0) select 1; + if(_startSpeed <= 0) then { + _startSpeed = 0.01; + }; + _lastSpd = []; + _lastPos = []; + while {_index < _max} do { + _data1 = _positions select _index; + _data2 = nil; + if(_index + ACE_TRACE_DRAW_INC >= _max) then { + _data2 = _positions select (_max - 1); + } else { + _data2 = _positions select (_index + ACE_TRACE_DRAW_INC); + }; + + _pos1 = _data1 select 0; + _pos2 = _data2 select 0; + _index = _index + ACE_TRACE_DRAW_INC; + + + drawLine3D [_pos1, _pos2, _color]; + _lastPos = _pos2; + _lastSpd = _data1 select 1; + }; + // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"]; } forEach GVAR(traces); \ No newline at end of file diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index a6e934c667..e7d7d09682 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -7,42 +7,42 @@ _type = _this select 4; _round = _this select 6; if(_round in GVAR(blackList)) exitWith { - GVAR(blackList) = GVAR(blackList) - [_round]; + GVAR(blackList) = GVAR(blackList) - [_round]; }; _doFragTrack = false; if(_gun == player) then { - _doFragTrack = true; + _doFragTrack = true; } else { - if((gunner _gun) == player) then { - _doFragTrack = true; - } else { - if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then { - _doFragTrack = true; - }; - }; + if((gunner _gun) == player) then { + _doFragTrack = true; + } else { + if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then { + _doFragTrack = true; + }; + }; }; _doSpall = false; if(_doSpall) then { - if(GVAR(spallIsTrackingCount) <= 0) then { - GVAR(spallHPData) = []; - }; - if(GVAR(spallIsTrackingCount) > 5) then { - // player sideChat "LIMT!"; - _doSpall = false; - } else { - GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1; - }; + if(GVAR(spallIsTrackingCount) <= 0) then { + GVAR(spallHPData) = []; + }; + if(GVAR(spallIsTrackingCount) > 5) then { + // player sideChat "LIMT!"; + _doSpall = false; + } else { + GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) + 1; + }; }; // player sideChat format["c: %1", GVAR(spallIsTrackingCount)]; [player, _round, [1,0,0,1]] call nou_fnc_addTrack; if(_doFragTrack && alive _round) then { - GVAR(trackedObjects) pushBack _round; - _spallTrack = []; - _spallTrackID = []; - [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), _type, time, _gun, _doSpall, _spallTrack, _spallTrackID]] call cba_fnc_addPerFrameHandler; - if(_doSpall) then { - [_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack); - }; - // player sideChat "WTF2"; + GVAR(trackedObjects) pushBack _round; + _spallTrack = []; + _spallTrackID = []; + [DFUNC(trackFragRound), 0, [_round, (getPosASL _round), (velocity _round), _type, time, _gun, _doSpall, _spallTrack, _spallTrackID]] call cba_fnc_addPerFrameHandler; + if(_doSpall) then { + [_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack); + }; + // player sideChat "WTF2"; }; diff --git a/addons/frag/functions/fnc_frag_trace.sqf b/addons/frag/functions/fnc_frag_trace.sqf index f4e14fa12a..664e117793 100644 --- a/addons/frag/functions/fnc_frag_trace.sqf +++ b/addons/frag/functions/fnc_frag_trace.sqf @@ -4,7 +4,7 @@ private ["_params", "_shell"]; _params = _this select 0; _shell = _params select 0; if(alive _shell) then { - drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; + drop ["\Ca\Data\Cl_basic","","Billboard",1,30,(getPos _shell),[0,0,0],1,1.275,1.0,0.0,[0.5],[[0,1,0,1]],[0],0.0,2.0,"","",""]; } else { - [_this select 1] call cba_fnc_removePerFrameHandler; + [_this select 1] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 79eea53cd7..1b737dc70d 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -10,43 +10,43 @@ if(!isServer) exitWith { }; // _startTime = diag_tickTime; private ["_round", "_lastPos", "_lastVel", "_shellType", "_gun", "_fragTypes", "_warn", "_atlPos", "_isArmed", - "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", - "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", - "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", - "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", - "_sectorSize", "_sectorOffset", "_randomDir"]; - - + "_fuseDist", "_indirectHitRange", "_fragRange", "_c", "_m", "_k", "_gC", "_fragPower", "_fragPowerRandom", + "_manObjects", "_objects", "_crew", "_fragCount", "_fragArcs", "_doRandom", "_target", "_boundingBox", + "_targetPos", "_distance", "_add", "_bbX", "_bbY", "_bbZ", "_cubic", "_targetVel", "_baseVec", "_dir", + "_currentCount", "_count", "_vecVar", "_i", "_vec", "_fp", "_vel", "_fragType", "_fragObj", "_randomCount", + "_sectorSize", "_sectorOffset", "_randomDir"]; + + _round = _this select 0; _lastPos = _this select 1; _lastVel = _this select 2; _shellType = _this select 3; _gun = nil; if((count _this) > 5) then { - _gun = _this select 5; + _gun = _this select 5; }; _fragTypes = [ - "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", - "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", - "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", - "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", - "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" - ]; + "ACE_frag_tiny", "ACE_frag_tiny", "ACE_frag_tiny", + "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", "ACE_frag_tiny_HD", + "ACE_frag_small","ACE_frag_small","ACE_frag_small","ACE_frag_small", + "ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD","ACE_frag_small_HD", + "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD", "ACE_frag_medium_HD" + ]; _warn = false; if(isArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES")) then { - _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); + _fragTypes = getArray (configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_CLASSES"); } else { - _warn = true; + _warn = true; }; _atlPos = ASLtoATL _lastPos; _isArmed = true; if(!isNil "_gun") then { - _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); - _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); + _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); + _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); }; _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); @@ -72,7 +72,7 @@ _gC = getNumber(configFile >> "CfgAmmo" >> _shellType >> "ACE_frag_GURNEY_C"); if(_gC == 0) then { _gC = 2440; _warn = true;}; if(_warn) then { - diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release + diag_log text format["Ammo class %1 lacks proper explosive properties definitions for frag!", _shellType]; //TODO: turn this off when we get closer to release }; _fragPower = (((_m/_c)+_k)^-(1/2))*_gC; @@ -80,7 +80,7 @@ _fragPower = _fragPower*0.8; // Gunery equation is for a non-fragmenting metal, _fragPowerRandom = _fragPower*0.5; if((_atlPos select 2) < 0.5) then { - _lastPos set[2, (_lastPos select 2)+0.5]; + _lastPos set[2, (_lastPos select 2)+0.5]; }; // _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; @@ -108,123 +108,123 @@ _fragArcs = []; _fragArcs set[360, 0]; #ifdef DEBUG_MODE_FULL - player sideChat format["_fragRange: %1", _fragRange]; - player sideChat format["_objects: %1", _objects]; + player sideChat format["_fragRange: %1", _fragRange]; + player sideChat format["_objects: %1", _objects]; #endif _doRandom = false; if(_isArmed && (count _objects) > 0) then { - { - //if(random(1) > 0.5) then { - _target = _x; - if(alive _target) then { - _boundingBox = boundingBox _target; - _targetPos = (getPosASL _target); - _distance = _targetPos distance _lastPos; - _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); - _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); - _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); - _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); - _cubic = _bbX*_bbY*_bbZ; - if(_cubic > 1) then { - _doRandom = true; - - _targetVel = (velocity _target); - - - _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; - _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; - _targetPos set[2, (_targetPos select 2)+_add]; + { + //if(random(1) > 0.5) then { + _target = _x; + if(alive _target) then { + _boundingBox = boundingBox _target; + _targetPos = (getPosASL _target); + _distance = _targetPos distance _lastPos; + _add = (((_boundingBox select 1) select 2)/2)+((((_distance-(_fragpower/8)) max 0)/_fragPower)*10); + _bbX = (abs((_boundingBox select 0) select 0))+((_boundingBox select 1) select 0); + _bbY = (abs((_boundingBox select 0) select 1))+((_boundingBox select 1) select 1); + _bbZ = (abs((_boundingBox select 0) select 2))+((_boundingBox select 1) select 2); + _cubic = _bbX*_bbY*_bbZ; + if(_cubic > 1) then { + _doRandom = true; + + _targetVel = (velocity _target); + + + _targetPos set[0, (_targetPos select 0)+((_targetVel select 0)*(_distance/_fragPower))]; + _targetPos set[1, (_targetPos select 1)+((_targetVel select 1)*(_distance/_fragPower))]; + _targetPos set[2, (_targetPos select 2)+_add]; _baseVec = _lastPos vectorFromTo _targetPos; - - _dir = floor(_baseVec call CBA_fnc_vectDir); - _currentCount = _fragArcs select _dir; - if(isNil "_currentCount") then { - _currentCount = 0; - }; - if(_currentCount < 20) then { - _count = ceil(random(sqrt(_m/1000))); - _vecVar = FRAG_VEC_VAR; - if(!(_target isKindOf "Man")) then { - _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; - if((count (crew _target)) == 0 && _count > 0) then { - _count = 0 max (_count/2); - }; - }; - for "_i" from 1 to _count do { - _vec = +_baseVec; - - _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; - _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; - _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; - - _fp = (_fragPower-(random (_fragPowerRandom))); - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; - - _fragType = round (random ((count _fragTypes)-1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif - if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); - }; - _fragCount = _fragCount + 1; - _currentCount = _currentCount + 1; - }; - _fragArcs set[_dir, _currentCount]; - }; - }; - }; - //}; - if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - } forEach _objects; - if(_fragCount > MAX_FRAG_COUNT) exitWith {}; - _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; - _sectorSize = 360 / (_randomCount max 1); - // _doRandom = false; - if(_doRandom) then { - for "_i" from 1 to _randomCount do { - // Distribute evenly - _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); - _randomDir = random(_sectorSize); - _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; - - _fp = (_fragPower-(random (_fragPowerRandom))); - - _vel = [ - (_vec select 0)*_fp, - (_vec select 1)*_fp, - (_vec select 2)*_fp - ]; - - _fragType = round (random ((count _fragTypes)-1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - #ifdef DEBUG_MODE_FULL - GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; - GVAR(traceFrags) = true; - #endif - if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); - }; - _fragCount = _fragCount + 1; - }; - }; + + _dir = floor(_baseVec call CBA_fnc_vectDir); + _currentCount = _fragArcs select _dir; + if(isNil "_currentCount") then { + _currentCount = 0; + }; + if(_currentCount < 20) then { + _count = ceil(random(sqrt(_m/1000))); + _vecVar = FRAG_VEC_VAR; + if(!(_target isKindOf "Man")) then { + _vecVar = ((sqrt _cubic)/2000)+FRAG_VEC_VAR; + if((count (crew _target)) == 0 && _count > 0) then { + _count = 0 max (_count/2); + }; + }; + for "_i" from 1 to _count do { + _vec = +_baseVec; + + _vec set[0, (_vec select 0)-(_vecVar/2)+(random _vecVar)]; + _vec set[1, (_vec select 1)-(_vecVar/2)+(random _vecVar)]; + _vec set[2, (_vec select 2)-(_vecVar/2)+(random _vecVar)]; + + _fp = (_fragPower-(random (_fragPowerRandom))); + _vel = [ + (_vec select 0)*_fp, + (_vec select 1)*_fp, + (_vec select 2)*_fp + ]; + + _fragType = round (random ((count _fragTypes)-1)); + _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + // diag_log text format["fp: %1 %2", _fp, typeOf _fragObj]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DEBUG_MODE_FULL + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; + GVAR(traceFrags) = true; + #endif + if(GVAR(traceFrags)) then { + [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); + }; + _fragCount = _fragCount + 1; + _currentCount = _currentCount + 1; + }; + _fragArcs set[_dir, _currentCount]; + }; + }; + }; + //}; + if(_fragCount > MAX_FRAG_COUNT) exitWith {}; + } forEach _objects; + if(_fragCount > MAX_FRAG_COUNT) exitWith {}; + _randomCount = (ceil((MAX_FRAG_COUNT-_fragCount)*0.1)) max 0; + _sectorSize = 360 / (_randomCount max 1); + // _doRandom = false; + if(_doRandom) then { + for "_i" from 1 to _randomCount do { + // Distribute evenly + _sectorOffset = 360 * (_i - 1) / (_randomCount max 1); + _randomDir = random(_sectorSize); + _vec = [cos(_sectorOffset + _randomDir), sin(_sectorOffset + _randomDir), sin(30 - (random 45))]; + + _fp = (_fragPower-(random (_fragPowerRandom))); + + _vel = [ + (_vec select 0)*_fp, + (_vec select 1)*_fp, + (_vec select 2)*_fp + ]; + + _fragType = round (random ((count _fragTypes)-1)); + _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DEBUG_MODE_FULL + GVAR(TOTALFRAGS) = GVAR(TOTALFRAGS) + 1; + GVAR(traceFrags) = true; + #endif + if(GVAR(traceFrags)) then { + [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); + }; + _fragCount = _fragCount + 1; + }; + }; }; // #ifdef DEBUG_MODE_FULL - // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; - // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; + // player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; + // player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; // #endif // _endTime = diag_tickTime; diff --git a/addons/frag/functions/fnc_removeTrack.sqf b/addons/frag/functions/fnc_removeTrack.sqf index b72830051a..804719a7ca 100644 --- a/addons/frag/functions/fnc_removeTrack.sqf +++ b/addons/frag/functions/fnc_removeTrack.sqf @@ -3,12 +3,12 @@ private ["_ret"]; _ret = true; if(IS_ARRAY((_this select 0))) then { - _ret = false; + _ret = false; } else { - if((_this select 0) in GVAR(trackedObjects)) then { - GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; - } else { - _ret = false; - }; + if((_this select 0) in GVAR(trackedObjects)) then { + GVAR(trackedObjects) = GVAR(trackedObjects) - [(_this select 0)]; + } else { + _ret = false; + }; }; _ret \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallHP.sqf b/addons/frag/functions/fnc_spallHP.sqf index 89ba572ce2..fb894be499 100644 --- a/addons/frag/functions/fnc_spallHP.sqf +++ b/addons/frag/functions/fnc_spallHP.sqf @@ -3,27 +3,27 @@ private ["_initialData", "_currentCount", "_hpData", "_round", "_hpRound"]; //player sideChat format["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; if((_this select 0) <= (count GVAR(spallHPData))) then { - _initialData = GVAR(spallHPData) select (_this select 0); - if(!isNil "_initialData") then { - _hpRound = ((_this select 1) select 0) select 2; - _round = _initialData select 3; - _hpDirect = ((_this select 1) select 0) select 10; - if(_hpDirect && {_round == _hpRound}) then { - - { - _hpData = _x; - _round = _initialData select 3; - // diag_log text format["HPDUMP-------------------------------------"]; - // { - // _hp = _x; - // diag_log text format["%1 --", _forEachIndex]; - // { - // diag_log text format["%1: %2", _forEachIndex, _x]; - // } forEach _hp; - // } forEach (_this select 1); - [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; - // player sideChat "WEEE"; - } forEach (_this select 1); - }; - }; + _initialData = GVAR(spallHPData) select (_this select 0); + if(!isNil "_initialData") then { + _hpRound = ((_this select 1) select 0) select 2; + _round = _initialData select 3; + _hpDirect = ((_this select 1) select 0) select 10; + if(_hpDirect && {_round == _hpRound}) then { + + { + _hpData = _x; + _round = _initialData select 3; + // diag_log text format["HPDUMP-------------------------------------"]; + // { + // _hp = _x; + // diag_log text format["%1 --", _forEachIndex]; + // { + // diag_log text format["%1: %2", _forEachIndex, _x]; + // } forEach _hp; + // } forEach (_this select 1); + [DFUNC(doSpall), 0, [_this, _forEachIndex]] call cba_fnc_addPerFrameHandler; + // player sideChat "WEEE"; + } forEach (_this select 1); + }; + }; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_spallTrack.sqf b/addons/frag/functions/fnc_spallTrack.sqf index 31e9c228bb..a264e1ded9 100644 --- a/addons/frag/functions/fnc_spallTrack.sqf +++ b/addons/frag/functions/fnc_spallTrack.sqf @@ -12,29 +12,29 @@ _curPos = getPosASL _round; _velocity = velocity _round; _velocityStep = [ - (_velocity select 0)*_delta, - (_velocity select 1)*_delta, - (_velocity select 2)*_delta - ]; + (_velocity select 0)*_delta, + (_velocity select 1)*_delta, + (_velocity select 2)*_delta + ]; _forwardPos = [ - (_curPos select 0) + (_velocityStep select 0), - (_curPos select 1) + (_velocityStep select 1), - (_curPos select 2) + (_velocityStep select 2) - ]; - + (_curPos select 0) + (_velocityStep select 0), + (_curPos select 1) + (_velocityStep select 1), + (_curPos select 2) + (_velocityStep select 2) + ]; + _intersectsWith = lineIntersectsWith [_curPos, _forwardPos]; if(count _intersectsWith > 0) then { - // player sideChat format["inter: %1", _intersectsWith]; - { - if(!(_x in _foundObjects)) then { - // diag_log text format["Adding HP: %1", _x]; - _index = (count GVAR(spallHPData)); - _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; - _foundObjects set[(count _foundObjects), _x]; - _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; - _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; - GVAR(spallHPData) set[_index, _data]; - }; - } forEach _intersectsWith; + // player sideChat format["inter: %1", _intersectsWith]; + { + if(!(_x in _foundObjects)) then { + // diag_log text format["Adding HP: %1", _x]; + _index = (count GVAR(spallHPData)); + _hpId = _x addEventHandler ["hitPart", format["[%1, _this] call " + QUOTE(FUNC(spallHP)), _index]]; + _foundObjects set[(count _foundObjects), _x]; + _foundObjectHPIds set[(count _foundObjectHPIds), _hpId]; + _data = [_hpId, _x, typeOf _round, _round, _curPos, _velocity, 0, _foundObjects, _foundObjectHPIds]; + GVAR(spallHPData) set[_index, _data]; + }; + } forEach _intersectsWith; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_startTracing.sqf b/addons/frag/functions/fnc_startTracing.sqf index 31f4b99762..4ed9240ed6 100644 --- a/addons/frag/functions/fnc_startTracing.sqf +++ b/addons/frag/functions/fnc_startTracing.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" if(!GVAR(tracesStarted)) then { - GVAR(tracesStarted) = true; - GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; + GVAR(tracesStarted) = true; + GVAR(traceID) = [FUNC(drawTraces), 0, []] call cba_fnc_addPerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_stopTracing.sqf b/addons/frag/functions/fnc_stopTracing.sqf index 693390fff2..56d7508d6b 100644 --- a/addons/frag/functions/fnc_stopTracing.sqf +++ b/addons/frag/functions/fnc_stopTracing.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" if(GVAR(tracesStarted)) then { - GVAR(tracesStarted) = false; - [GVAR(traceID)] call cba_fnc_removePerFrameHandler; + GVAR(tracesStarted) = false; + [GVAR(traceID)] call cba_fnc_removePerFrameHandler; }; \ No newline at end of file diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 0a8e3948d0..586bbc0166 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -12,41 +12,41 @@ _spallTrack = _params select 7; _foundObjectHPIds = _params select 8; if (!alive _round) then { - [_this select 1] call cba_fnc_removePerFrameHandler; - if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { - GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); - if(_skip == 0) then { - _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); - _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); - _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); - _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); - if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { - [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; - GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; - }; - }; - }; - if(_doSpall) then { - GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; - // diag_log text format["F: %1", _foundObjectHPIds]; - { - if(!isNil "_x") then { - _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; - }; - } forEach _spallTrack; - }; + [_this select 1] call cba_fnc_removePerFrameHandler; + if(_time != time && {_round in GVAR(trackedObjects)} && {!(_round in GVAR(blackList))}) then { + GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; + _skip = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_SKIP"); + if(_skip == 0) then { + _explosive = getNumber (configFile >> "CfgAmmo" >> _type >> "explosive"); + _indirectRange = getNumber (configFile >> "CfgAmmo" >> _type >> "indirectHitRange"); + _force = getNumber (configFile >> "CfgAmmo" >> _type >> "ACE_FRAG_FORCE"); + _fragPower = getNumber(configFile >> "CfgAmmo" >> _type >> "indirecthit")*(sqrt(_indirectRange)); + if((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1} ) then { + [QGVAR(frag_eh), _params] call ace_common_fnc_serverEvent; + GVAR(trackedObjects) = GVAR(trackedObjects) - [_round]; + }; + }; + }; + if(_doSpall) then { + GVAR(spallIsTrackingCount) = GVAR(spallIsTrackingCount) - 1; + // diag_log text format["F: %1", _foundObjectHPIds]; + { + if(!isNil "_x") then { + _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; + }; + } forEach _spallTrack; + }; } else { - if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { - [_this select 1] call cba_fnc_removePerFrameHandler; - if(_round in GVAR(blackList)) then { - GVAR(blackList) = GVAR(blackList) - [_round]; - }; - }; - - _params set[1, (getPosASL _round)]; - _params set[2, (velocity _round)]; - if(_doSpall) then { - [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); - }; + if(!(_round in GVAR(trackedObjects)) || {_round in GVAR(blackList)}) then { + [_this select 1] call cba_fnc_removePerFrameHandler; + if(_round in GVAR(blackList)) then { + GVAR(blackList) = GVAR(blackList) - [_round]; + }; + }; + + _params set[1, (getPosASL _round)]; + _params set[2, (velocity _round)]; + if(_doSpall) then { + [_round, 1, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); + }; }; diff --git a/addons/frag/functions/fnc_trackTrace.sqf b/addons/frag/functions/fnc_trackTrace.sqf index 628fece605..b0f3f06633 100644 --- a/addons/frag/functions/fnc_trackTrace.sqf +++ b/addons/frag/functions/fnc_trackTrace.sqf @@ -4,11 +4,11 @@ _tracerObj = _params select 0; _index = _params select 1; if(alive _tracerObj && (count GVAR(traces)) > 0) then { - _data = GVAR(traces) select _index; - _positions = _data select 4; - _objVel = velocity _tracerObj; - _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); - _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; + _data = GVAR(traces) select _index; + _positions = _data select 4; + _objVel = velocity _tracerObj; + _objTVel = sqrt((_objVel select 0)^2 + (_objVel select 1)^2 + (_objVel select 2)^2); + _positions set[(count _positions), [(getPos _tracerObj), _objTVel]]; } else { - [(_this select 1)] call cba_fnc_removePerFrameHandler; -}; \ No newline at end of file + [(_this select 1)] call cba_fnc_removePerFrameHandler; +}; \ No newline at end of file diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 371067db3e..3740ed23fa 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -4,13 +4,13 @@ //#define DEBUG_ENABLED_FRAG #ifdef DEBUG_ENABLED_FRAG - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_FRAG - #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG + #define DEBUG_SETTINGS DEBUG_SETTINGS_FRAG #endif #include "\z\ace\Addons\main\script_macros.hpp" -#define ACE_TRACE_DRAW_INC 1 \ No newline at end of file +#define ACE_TRACE_DRAW_INC 1 \ No newline at end of file diff --git a/addons/gforces/script_component.hpp b/addons/gforces/script_component.hpp index bd52732420..cf665c21ec 100644 --- a/addons/gforces/script_component.hpp +++ b/addons/gforces/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_GFORCES - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_GFORCES - #define DEBUG_SETTINGS DEBUG_SETTINGS_GFORCES + #define DEBUG_SETTINGS DEBUG_SETTINGS_GFORCES #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/goggles/RscTitles.hpp b/addons/goggles/RscTitles.hpp index 57975e052f..6c1b9870b6 100644 --- a/addons/goggles/RscTitles.hpp +++ b/addons/goggles/RscTitles.hpp @@ -1,42 +1,42 @@ class RscTitles{ - #include "define.hpp" - - class RscACE_Goggles_BaseTitle{ - idd = -1; - onLoad = "uiNamespace setVariable ['ACE_Goggles_Display', _this select 0]"; - onUnload = "uiNamespace setVariable ['ACE_Goggles_Display', displayNull]"; - fadeIn=0.5; - fadeOut=0.5; - movingEnable = false; - duration = 10e10; - name = "RscACE_Goggles_BaseTitle"; - class controls; - }; - - class RscACE_Goggles:RscACE_Goggles_BaseTitle{ - idd = 1044; - name = "RscACE_Goggles"; - class controls{ - class gogglesImage: RscPicture{ - idc = 10650; - }; - }; - }; - - class RscACE_GogglesEffects:RscACE_Goggles_BaseTitle{ - idd = 1045; - onLoad = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', _this select 0]"; - onUnload = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', displayNull]"; - name = "RscACE_GogglesEffects"; - fadeIn=0; - fadeOut=0.5; - class controls{ - class dirtImage: RscPicture { - idc = 10660; - }; - class dustImage: RscPicture { - idc = 10662; - }; - }; - }; + #include "define.hpp" + + class RscACE_Goggles_BaseTitle{ + idd = -1; + onLoad = "uiNamespace setVariable ['ACE_Goggles_Display', _this select 0]"; + onUnload = "uiNamespace setVariable ['ACE_Goggles_Display', displayNull]"; + fadeIn=0.5; + fadeOut=0.5; + movingEnable = false; + duration = 10e10; + name = "RscACE_Goggles_BaseTitle"; + class controls; + }; + + class RscACE_Goggles:RscACE_Goggles_BaseTitle{ + idd = 1044; + name = "RscACE_Goggles"; + class controls{ + class gogglesImage: RscPicture{ + idc = 10650; + }; + }; + }; + + class RscACE_GogglesEffects:RscACE_Goggles_BaseTitle{ + idd = 1045; + onLoad = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', _this select 0]"; + onUnload = "uiNamespace setVariable ['ACE_Goggles_DisplayEffects', displayNull]"; + name = "RscACE_GogglesEffects"; + fadeIn=0; + fadeOut=0.5; + class controls{ + class dirtImage: RscPicture { + idc = 10660; + }; + class dustImage: RscPicture { + idc = 10662; + }; + }; + }; }; \ No newline at end of file diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index dcc9c6ed0e..efda9b5436 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -3,279 +3,279 @@ #define COLOUR 8.0 class CfgPatches { class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; - author[] = {"Garth 'L-H' de Wet"}; - authorUrl = "http://garth.snakebiteink.co.za/"; - VERSION_CONFIG; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Garth 'L-H' de Wet"}; + authorUrl = "http://garth.snakebiteink.co.za/"; + VERSION_CONFIG; }; }; #include "CfgEventHandlers.hpp" -#define COMBAT_GOGGLES ACE_Overlay = QUOTE(PATHTOF(textures\HUD\CombatGoggles.paa)); \ - ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\CombatGogglesCracked.paa)); \ - ACE_Resistance = 2; \ - ACE_Protection = 1; +#define COMBAT_GOGGLES ACE_Overlay = QUOTE(PATHTOF(textures\HUD\CombatGoggles.paa)); \ + ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\CombatGogglesCracked.paa)); \ + ACE_Resistance = 2; \ + ACE_Protection = 1; class CfgGlasses { - class None { - ACE_Color[] = {0,0,0}; - ACE_TintAmount=0; - ACE_Overlay = ""; - ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; - ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\Cracked.paa)); - ACE_Resistance = 0; - ACE_Protection = 0; - ACE_DustPath = QUOTE(PATHTOF(textures\fx\dust\%1.paa)); - }; + class None { + ACE_Color[] = {0,0,0}; + ACE_TintAmount=0; + ACE_Overlay = ""; + ACE_OverlayDirt = "A3\Ui_f\data\igui\rsctitles\HealthTextures\dust_upper_ca.paa"; + ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\Cracked.paa)); + ACE_Resistance = 0; + ACE_Protection = 0; + ACE_DustPath = QUOTE(PATHTOF(textures\fx\dust\%1.paa)); + }; - class G_Combat:None { - COMBAT_GOGGLES - }; + class G_Combat:None { + COMBAT_GOGGLES + }; - class G_Diving { - ACE_Overlay = QUOTE(PATHTOF(textures\HUD\DivingGoggles.paa)); - ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\DivingGogglesCracked.paa)); - ACE_Resistance = 2; - ACE_Protection = 1; - }; + class G_Diving { + ACE_Overlay = QUOTE(PATHTOF(textures\HUD\DivingGoggles.paa)); + ACE_OverlayCracked = QUOTE(PATHTOF(textures\HUD\DivingGogglesCracked.paa)); + ACE_Resistance = 2; + ACE_Protection = 1; + }; - class G_Lowprofile:None { - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 2; - ACE_Protection = 1; - }; + class G_Lowprofile:None { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 2; + ACE_Protection = 1; + }; - class G_Shades_Black:None { - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - }; + class G_Shades_Black:None { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; - class G_Shades_Blue:None{ - ACE_Color[] = {0,0,1}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Shades_Blue:None{ + ACE_Color[] = {0,0,1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Shades_Green:None{ - ACE_Color[] = {0,1,0}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Shades_Green:None{ + ACE_Color[] = {0,1,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Shades_Red:None{ - ACE_Color[] = {1,0,0}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Shades_Red:None{ + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Spectacles:None{ - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Spectacles:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Spectacles_Tinted:None{ - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - }; + class G_Spectacles_Tinted:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; - class G_Sport_Blackred:None{ - ACE_Color[] = {1,0,0}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Sport_Blackred:None{ + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Sport_BlackWhite:None{ - ACE_Color[] = {0,0,1}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Sport_BlackWhite:None{ + ACE_Color[] = {0,0,1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Sport_Blackyellow:None{ - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - }; + class G_Sport_Blackyellow:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; - class G_Sport_Checkered:None{ - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - }; + class G_Sport_Checkered:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; - class G_Sport_Greenblack:None{ - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - }; + class G_Sport_Greenblack:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; - class G_Sport_Red:None{ - ACE_TintAmount=COLOUR*2; - ACE_Color[] = {0,0,0}; - ACE_Resistance = 1; - }; + class G_Sport_Red:None{ + ACE_TintAmount=COLOUR*2; + ACE_Color[] = {0,0,0}; + ACE_Resistance = 1; + }; - class G_Squares:None{ - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Squares:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Squares_Tinted:None{ - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Squares_Tinted:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Tactical_Black:None{ - ACE_TintAmount=COLOUR; - ACE_Color[] = {0,0,-1.5}; - ACE_Resistance = 1; - }; + class G_Tactical_Black:None{ + ACE_TintAmount=COLOUR; + ACE_Color[] = {0,0,-1.5}; + ACE_Resistance = 1; + }; - class G_Tactical_Clear:None{ - ACE_TintAmount=COLOUR; - ACE_Color[] = {0,0,-1}; - ACE_Resistance = 1; - }; + class G_Tactical_Clear:None{ + ACE_TintAmount=COLOUR; + ACE_Color[] = {0,0,-1}; + ACE_Resistance = 1; + }; - class G_Aviator:None{ - ACE_Color[] = {0,0,-1}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Aviator:None{ + ACE_Color[] = {0,0,-1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Lady_Blue:None{ - ACE_Color[] = {0,0,1}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Lady_Blue:None{ + ACE_Color[] = {0,0,1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Lady_Red:None{ - ACE_Color[] = {1,0,0}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Lady_Red:None{ + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class G_Lady_Dark:None{ - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - }; + class G_Lady_Dark:None{ + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + }; - class G_Lady_Mirror:None{ - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - }; + class G_Lady_Mirror:None{ + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + }; - class AV_ESS_blk:None{ - COMBAT_GOGGLES - }; + class AV_ESS_blk:None{ + COMBAT_GOGGLES + }; - class G_Balaclava_blk; + class G_Balaclava_blk; - class G_Balaclava_combat:G_Balaclava_blk { - COMBAT_GOGGLES - }; + class G_Balaclava_combat:G_Balaclava_blk { + COMBAT_GOGGLES + }; - class G_Balaclava_lowprofile:G_Balaclava_blk { - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 2; - ACE_Protection = 1; - }; + class G_Balaclava_lowprofile:G_Balaclava_blk { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 2; + ACE_Protection = 1; + }; - class G_Bandanna_blk; - class G_Bandanna_shades:G_Bandanna_blk { - ACE_TintAmount=COLOUR*2; - ACE_Resistance = 1; - ACE_Protection = 1; - }; - class G_Bandanna_sport:G_Bandanna_blk { - ACE_Color[] = {1,0,0}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - ACE_Protection = 1; - }; - class G_Bandanna_aviator:G_Bandanna_blk { - ACE_Color[] = {0,0,-1}; - ACE_TintAmount=COLOUR; - ACE_Resistance = 1; - ACE_Protection = 1; - }; + class G_Bandanna_blk; + class G_Bandanna_shades:G_Bandanna_blk { + ACE_TintAmount=COLOUR*2; + ACE_Resistance = 1; + ACE_Protection = 1; + }; + class G_Bandanna_sport:G_Bandanna_blk { + ACE_Color[] = {1,0,0}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + ACE_Protection = 1; + }; + class G_Bandanna_aviator:G_Bandanna_blk { + ACE_Color[] = {0,0,-1}; + ACE_TintAmount=COLOUR; + ACE_Resistance = 1; + ACE_Protection = 1; + }; }; #include "RscTitles.hpp" class CfgMovesBasic { - class ManActions { - GestureWipeFace[] = {"GestureWipeFace", "gesture"}; - }; + class ManActions { + GestureWipeFace[] = {"GestureWipeFace", "gesture"}; + }; }; class CfgGesturesMale { - class States { - class GestureFreezeStand; - class GestureWipeFace: GestureFreezeStand { - file = QUOTE(PATHTOF(anim\WipeGlasses.rtm)); - canPullTrigger = 0; - }; - }; + class States { + class GestureFreezeStand; + class GestureWipeFace: GestureFreezeStand { + file = QUOTE(PATHTOF(anim\WipeGlasses.rtm)); + canPullTrigger = 0; + }; + }; }; class CfgWeapons { - class H_HelmetB; + class H_HelmetB; - class H_CrewHelmetHeli_B:H_HelmetB { - ACE_Protection = 1; - }; - class H_PilotHelmetHeli_B:H_HelmetB { - ACE_Protection = 1; - }; - class H_PilotHelmetFighter_B:H_HelmetB { - ACE_Protection = 1; - }; + class H_CrewHelmetHeli_B:H_HelmetB { + ACE_Protection = 1; + }; + class H_PilotHelmetHeli_B:H_HelmetB { + ACE_Protection = 1; + }; + class H_PilotHelmetFighter_B:H_HelmetB { + ACE_Protection = 1; + }; }; class RifleAssaultCloud { - ACE_Goggles_BulletCount = 4; + ACE_Goggles_BulletCount = 4; }; class MachineGunCloud { - ACE_Goggles_BulletCount = 3; + ACE_Goggles_BulletCount = 3; }; class SniperCloud { - ACE_Goggles_BulletCount = 1; + ACE_Goggles_BulletCount = 1; }; class ACE_Settings { - class GVAR(showInThirdPerson) { - value = 0; - typeName = "BOOL"; - isClientSetable = 1; - displayName = "$STR_ACE_Goggles_ShowInThirdPerson"; - }; + class GVAR(showInThirdPerson) { + value = 0; + typeName = "BOOL"; + isClientSetable = 1; + displayName = "$STR_ACE_Goggles_ShowInThirdPerson"; + }; }; class CfgCloudlets { - class Default; - class ACERainEffect:Default { - interval = 0.001; - particleShape = "\A3\data_f\ParticleEffects\Universal\Refract"; - particleFSNtieth = 1; - particleFSIndex = 0; - particleFSFrameCount = 1; - particleFSLoop = 1; + class Default; + class ACERainEffect:Default { + interval = 0.001; + particleShape = "\A3\data_f\ParticleEffects\Universal\Refract"; + particleFSNtieth = 1; + particleFSIndex = 0; + particleFSFrameCount = 1; + particleFSLoop = 1; - particleType = "Billboard"; - lifeTime = 0.5; - rotationVelocity = 1; - weight = 100; - volume = 0.000; - rubbing = 1.7; - size[] = {0.1}; - color[] = {{1,1,1,1}}; - animationSpeed[] = {0,1}; - randomDirectionPeriod = 0.2; - randomDirectionIntensity = 1.2; - positionVar[] = {2, 2, 2.5}; - sizeVar = 0.01; - colorVar[] = {0, 0, 0, 0.1}; - destroyOnWaterSurface = 1; - }; + particleType = "Billboard"; + lifeTime = 0.5; + rotationVelocity = 1; + weight = 100; + volume = 0.000; + rubbing = 1.7; + size[] = {0.1}; + color[] = {{1,1,1,1}}; + animationSpeed[] = {0,1}; + randomDirectionPeriod = 0.2; + randomDirectionIntensity = 1.2; + positionVar[] = {2, 2, 2.5}; + sizeVar = 0.01; + colorVar[] = {0, 0, 0, 0.1}; + destroyOnWaterSurface = 1; + }; }; diff --git a/addons/goggles/functions/fnc_applyDirtEffect.sqf b/addons/goggles/functions/fnc_applyDirtEffect.sqf index f12cf74f29..182ffac910 100644 --- a/addons/goggles/functions/fnc_applyDirtEffect.sqf +++ b/addons/goggles/functions/fnc_applyDirtEffect.sqf @@ -22,12 +22,12 @@ _effects set [DIRT, true]; SETGLASSES(ace_player,_effects); if ([ace_player] call FUNC(isGogglesVisible)) then{ - _dirtImage = getText(ConfigFile >> "CfgGlasses" >> (goggles ace_player) >> "ACE_OverlayDirt"); - if (_dirtImage != "") then { - 100 cutRsc["RscACE_GogglesEffects", "PLAIN",0.1, false]; + _dirtImage = getText(ConfigFile >> "CfgGlasses" >> (goggles ace_player) >> "ACE_OverlayDirt"); + if (_dirtImage != "") then { + 100 cutRsc["RscACE_GogglesEffects", "PLAIN",0.1, false]; - (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText _dirtImage; - }; + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText _dirtImage; + }; }; true diff --git a/addons/goggles/functions/fnc_applyDust.sqf b/addons/goggles/functions/fnc_applyDust.sqf index 311a993904..197b50b30d 100644 --- a/addons/goggles/functions/fnc_applyDust.sqf +++ b/addons/goggles/functions/fnc_applyDust.sqf @@ -16,10 +16,10 @@ #include "script_component.hpp" if (call FUNC(ExternalCamera)) exitWith {}; if ([ace_player] call FUNC(isGogglesVisible)) exitWith { - 100 cutRsc["RscACE_GogglesEffects", "PLAIN",2,false]; - (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText format[getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_DustPath"), GETDUSTT(DAMOUNT)+1]; - SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)+1,0,1)); - SETDUST(DBULLETS,0); + 100 cutRsc["RscACE_GogglesEffects", "PLAIN",2,false]; + (uiNamespace getVariable ["ACE_Goggles_DisplayEffects", displayNull] displayCtrl 10662) ctrlSetText format[getText(ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_DustPath"), GETDUSTT(DAMOUNT)+1]; + SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)+1,0,1)); + SETDUST(DBULLETS,0); }; if (GETVAR(ace_player,ACE_EyesDamaged,false)) exitWith {SETDUST(DACTIVE,false);SETDUST(DBULLETS,0);SETDUST(DAMOUNT,0);}; @@ -34,26 +34,26 @@ GVAR(PostProcessEyes) ppEffectEnable true; SETDUST(DBULLETS,0); if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA - [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(DustHandler) = -1; + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; }; GVAR(DustHandler) = [{ - if (diag_tickTime >= GETDUSTT(DTIME) + 3) then { - SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); - private "_amount"; - _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); - if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { - GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 0.5; - }; - if (GETDUSTT(DAMOUNT) <= 0) then { - GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 2; - [{GVAR(PostProcessEyes) ppEffectEnable false;}, [], 2, 0.5] call EFUNC(common,waitAndExecute); - SETDUST(DACTIVE,false); - SETDUST(DBULLETS,0); - [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(DustHandler) = -1; - }; - }; + if (diag_tickTime >= GETDUSTT(DTIME) + 3) then { + SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); + private "_amount"; + _amount = 1 - (GETDUSTT(DAMOUNT) * 0.125); + if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [_amount,_amount,_amount,_amount],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 0.5; + }; + if (GETDUSTT(DAMOUNT) <= 0) then { + GVAR(PostProcessEyes) ppEffectAdjust[1, 1, 0, [0,0,0,0], [1,1,1,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 2; + [{GVAR(PostProcessEyes) ppEffectEnable false;}, [], 2, 0.5] call EFUNC(common,waitAndExecute); + SETDUST(DACTIVE,false); + SETDUST(DBULLETS,0); + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; + }; + }; },0,[]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 1d69041d81..8c2edb531e 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -26,29 +26,29 @@ call FUNC(removeGlassesEffect); GVAR(EffectsActive) = true; if (_postProcessTintAmount != 0 && {GVAR(UsePP)}) then { - _postProcessColour set [3, _postProcessTintAmount/100]; - GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; - GVAR(PostProcess) ppEffectCommit 0; - GVAR(PostProcess) ppEffectEnable true; - _postProcessColour set [3, _postProcessTintAmount/250]; - GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; - GVAR(PostProcess) ppEffectCommit 30; + _postProcessColour set [3, _postProcessTintAmount/100]; + GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; + GVAR(PostProcess) ppEffectCommit 0; + GVAR(PostProcess) ppEffectEnable true; + _postProcessColour set [3, _postProcessTintAmount/250]; + GVAR(PostProcess) ppEffectAdjust[0.9, 1.1, 0.004, _postProcessColour, [0,0,0,1],[0,0,0,0]]; + GVAR(PostProcess) ppEffectCommit 30; }; _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_Overlay"); if GETBROKEN then { - _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_OverlayCracked"); + _glassImagePath = getText(configFile >> "CfgGlasses" >> _glassesClassname >> "ACE_OverlayCracked"); }; if (_glassImagePath != "") then { - 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; - (GLASSDISPLAY displayCtrl 10650) ctrlSetText _glassImagePath; + 150 cutRsc["RscACE_Goggles", "PLAIN",1, false]; + (GLASSDISPLAY displayCtrl 10650) ctrlSetText _glassImagePath; }; if GETDIRT then { - call FUNC(applyDirtEffect); + call FUNC(applyDirtEffect); }; if GETDUSTT(DACTIVE) then { - SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); - call FUNC(applyDust); + SETDUST(DAMOUNT,CLAMP(GETDUSTT(DAMOUNT)-1,0,2)); + call FUNC(applyDust); }; diff --git a/addons/goggles/functions/fnc_checkGoggles.sqf b/addons/goggles/functions/fnc_checkGoggles.sqf index 6d8f493c3e..f222ea9881 100644 --- a/addons/goggles/functions/fnc_checkGoggles.sqf +++ b/addons/goggles/functions/fnc_checkGoggles.sqf @@ -17,30 +17,30 @@ #include "script_component.hpp" if (!alive ace_player) exitWith {}; if (true) then { - // Detect if curator interface is open and disable effects - if (!isNull(findDisplay 312)) exitWith { - if (GVAR(EffectsActive)) then { - call FUNC(removeGlassesEffect); - }; - }; - call FUNC(checkGlasses); - if !([ace_player] call FUNC(isGogglesVisible)) exitWith { - if (GVAR(EffectsActive)) then { - call FUNC(removeGlassesEffect); - }; - }; - if (call FUNC(externalCamera)) exitWith { - if (GVAR(EffectsActive)) then { - call FUNC(removeGlassesEffect); - }; - }; - if !(GVAR(EffectsActive)) then { - [goggles ace_player] call FUNC(applyGlassesEffect); - } else { - if ([goggles ace_player] call FUNC(isDivingGoggles) && {underwater ace_player}) then { - call FUNC(removeRainEffect); - call FUNC(removeDirtEffect); - call FUNC(removeDustEffect); - }; - }; + // Detect if curator interface is open and disable effects + if (!isNull(findDisplay 312)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); + }; + }; + call FUNC(checkGlasses); + if !([ace_player] call FUNC(isGogglesVisible)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); + }; + }; + if (call FUNC(externalCamera)) exitWith { + if (GVAR(EffectsActive)) then { + call FUNC(removeGlassesEffect); + }; + }; + if !(GVAR(EffectsActive)) then { + [goggles ace_player] call FUNC(applyGlassesEffect); + } else { + if ([goggles ace_player] call FUNC(isDivingGoggles) && {underwater ace_player}) then { + call FUNC(removeRainEffect); + call FUNC(removeDirtEffect); + call FUNC(removeDustEffect); + }; + }; }; diff --git a/addons/goggles/functions/fnc_clearGlasses.sqf b/addons/goggles/functions/fnc_clearGlasses.sqf index fb2e9bfa91..b70b962940 100644 --- a/addons/goggles/functions/fnc_clearGlasses.sqf +++ b/addons/goggles/functions/fnc_clearGlasses.sqf @@ -23,12 +23,12 @@ _effects set [BROKEN, _broken]; SETGLASSES(ace_player,_effects); if ((stance ace_player) != "PRONE") then { - ace_player playActionNow "gestureWipeFace"; + ace_player playActionNow "gestureWipeFace"; }; [{ - if (cameraView == "INTERNAL") then { - addCamShake [5, 1.75, 2]; - }; + if (cameraView == "INTERNAL") then { + addCamShake [5, 1.75, 2]; + }; }, [], 0.3, 0] call EFUNC(common,waitAndExecute); call FUNC(removeDirtEffect); diff --git a/addons/goggles/functions/fnc_dustHandler.sqf b/addons/goggles/functions/fnc_dustHandler.sqf index 979a4a1bf0..9624fc21b3 100644 --- a/addons/goggles/functions/fnc_dustHandler.sqf +++ b/addons/goggles/functions/fnc_dustHandler.sqf @@ -24,11 +24,11 @@ if (rain > 0.1) exitWith {true}; if ((stance _unit) != "PRONE") exitWith {true}; if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect")) then { - _cloudType = getText(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect" >> "effectName"); + _cloudType = getText(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "FirstEffect" >> "effectName"); } else { - if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "effect1")) then { - _cloudType = getText(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "effect1" >> "effectName"); - }; + if (isClass(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "effect1")) then { + _cloudType = getText(configFile >> "CfgWeapons" >> _weapon >> "GunParticles" >> "effect1" >> "effectName"); + }; }; if (_cloudType == "") exitWith {true}; @@ -49,7 +49,7 @@ if (!_found) exitWith {}; _bullets = GETDUSTT(DBULLETS); if ((diag_tickTime - GETDUSTT(DTIME)) > 1) then { - _bullets = 0; + _bullets = 0; }; _bullets = _bullets + 1; @@ -57,15 +57,15 @@ SETDUST(DBULLETS,_bullets); SETDUST(DTIME,diag_tickTime); if (GETDUSTT(DAMOUNT) < 2) then { - private "_bulletsRequired"; - _bulletsRequired = 100; - if (isNumber (ConfigFile >> _cloudType >> "ACE_Goggles_BulletCount")) then { - _bulletsRequired = getNumber (ConfigFile >> _cloudType >> "ACE_Goggles_BulletCount"); - }; + private "_bulletsRequired"; + _bulletsRequired = 100; + if (isNumber (ConfigFile >> _cloudType >> "ACE_Goggles_BulletCount")) then { + _bulletsRequired = getNumber (ConfigFile >> _cloudType >> "ACE_Goggles_BulletCount"); + }; - if (_bulletsRequired <= _bullets) then { - SETDUST(DACTIVE,true); - call FUNC(applyDust); - }; + if (_bulletsRequired <= _bullets) then { + SETDUST(DACTIVE,true); + call FUNC(applyDust); + }; }; true diff --git a/addons/goggles/functions/fnc_getExplosionIndex.sqf b/addons/goggles/functions/fnc_getExplosionIndex.sqf index 5b81c63655..5519bf397c 100644 --- a/addons/goggles/functions/fnc_getExplosionIndex.sqf +++ b/addons/goggles/functions/fnc_getExplosionIndex.sqf @@ -16,10 +16,10 @@ private ["_effectIndex"]; _effectIndex = switch true do { - case (_this <= 0.04): {0}; - case (_this <= 0.06): {1}; - case (_this <= 0.09): {2}; - default {3}; + case (_this <= 0.04): {0}; + case (_this <= 0.06): {1}; + case (_this <= 0.09): {2}; + default {3}; }; _effectIndex diff --git a/addons/goggles/functions/fnc_isGogglesVisible.sqf b/addons/goggles/functions/fnc_isGogglesVisible.sqf index 3d87499b90..9206965995 100644 --- a/addons/goggles/functions/fnc_isGogglesVisible.sqf +++ b/addons/goggles/functions/fnc_isGogglesVisible.sqf @@ -23,14 +23,14 @@ _result = false; if ((vehicle _unit) != _unit) exitWith {(cameraView != "GUNNER")}; if (_currentGlasses != "") then { - _position =(getPosASLW _unit); - if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith { - _result = ([_currentGlasses] call FUNC(isDivingGoggles)); - }; - if (getNumber (ConfigFile >> "CfgGlasses" >> _currentGlasses >> "ACE_Resistance") == 0) exitWith { - _result = false; - }; - _result = !([_currentGlasses] call FUNC(isDivingGoggles)); + _position =(getPosASLW _unit); + if (surfaceIsWater _position && {((_position select 2) < 0.25)}) exitWith { + _result = ([_currentGlasses] call FUNC(isDivingGoggles)); + }; + if (getNumber (ConfigFile >> "CfgGlasses" >> _currentGlasses >> "ACE_Resistance") == 0) exitWith { + _result = false; + }; + _result = !([_currentGlasses] call FUNC(isDivingGoggles)); }; _result diff --git a/addons/goggles/functions/fnc_isInRotorWash.sqf b/addons/goggles/functions/fnc_isInRotorWash.sqf index 0d9e22f7da..ef6391fdc6 100644 --- a/addons/goggles/functions/fnc_isInRotorWash.sqf +++ b/addons/goggles/functions/fnc_isInRotorWash.sqf @@ -8,8 +8,8 @@ * * Return Value: * : - * 0: In rotorwash - * 1: Amount of rotor wash. + * 0: In rotorwash + * 1: Amount of rotor wash. * * Example: * if (([ace_player, 10] call ace_goggles_fnc_isInRotorWash) select 0) then { hint "Rotor wash"; }; @@ -22,25 +22,25 @@ private ["_heli", "_unit", "_result", "_radius"]; _unit = _this select 0; _radius = 15; if (count _this > 1) then { - _radius = _this select 1; + _radius = _this select 1; }; _result = [false, _radius + 2]; _heli = (getPosATL _unit) nearEntities [["Helicopter"], _radius]; { - if !(_x isKindOf "ParachuteBase") then { - if (isEngineOn _x) then { - private "_distance"; - _distance = (_radius - (_unit distance _x)); - if (_distance != 0) then { - _distance = _distance / _radius; - }; - if (_distance < (_result select 1)) then { - _result = [true, _distance]; - }; - }; - }; - false + if !(_x isKindOf "ParachuteBase") then { + if (isEngineOn _x) then { + private "_distance"; + _distance = (_radius - (_unit distance _x)); + if (_distance != 0) then { + _distance = _distance / _radius; + }; + if (_distance < (_result select 1)) then { + _result = [true, _distance]; + }; + }; + }; + false } count _heli; _result diff --git a/addons/goggles/functions/fnc_onEachFrame.sqf b/addons/goggles/functions/fnc_onEachFrame.sqf index a3c65cac6b..863046da7f 100644 --- a/addons/goggles/functions/fnc_onEachFrame.sqf +++ b/addons/goggles/functions/fnc_onEachFrame.sqf @@ -17,62 +17,62 @@ if (isNull(ace_player)) exitWith {}; GVAR(FrameEvent) set [0, !(GVAR(FrameEvent) select 0)]; if (GVAR(FrameEvent) select 0) exitWith { - if (vehicle ace_player != ace_player && {!([ace_player] call EFUNC(common,isTurnedOut))}) exitWith {(GVAR(FrameEvent) select 1) set [0, false]; }; - GVAR(FrameEvent) set [1, ([ace_player] call FUNC(isInRotorWash))]; + if (vehicle ace_player != ace_player && {!([ace_player] call EFUNC(common,isTurnedOut))}) exitWith {(GVAR(FrameEvent) select 1) set [0, false]; }; + GVAR(FrameEvent) set [1, ([ace_player] call FUNC(isInRotorWash))]; }; private ["_rotorWash","_safe"]; _rotorWash = GVAR(FrameEvent) select 1; _safe = false; if !(_rotorWash select 0) exitWith { - if (GVAR(PostProcessEyes_Enabled)) then { - GVAR(PostProcessEyes_Enabled) = false; - if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA - [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(DustHandler) = -1; - }; - GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 2; - GVAR(DustHandler) = [{ - GVAR(PostProcessEyes) ppEffectEnable false; - GVAR(DustHandler) = -1; - }, [], 2, 0.5] call EFUNC(common,waitAndExecute); - }; + if (GVAR(PostProcessEyes_Enabled)) then { + GVAR(PostProcessEyes_Enabled) = false; + if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; + }; + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [0,0,0,1],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 2; + GVAR(DustHandler) = [{ + GVAR(PostProcessEyes) ppEffectEnable false; + GVAR(DustHandler) = -1; + }, [], 2, 0.5] call EFUNC(common,waitAndExecute); + }; }; if ((headgear ace_player) != "") then { - _safe = (getNumber (ConfigFile >> "CfgWeapons" >> (headgear ace_player) >> "ACE_Protection") == 1); + _safe = (getNumber (ConfigFile >> "CfgWeapons" >> (headgear ace_player) >> "ACE_Protection") == 1); }; if !(_safe) then { - if !([ace_player] call FUNC(isGogglesVisible)) exitWith{}; - if (GETDUSTT(DAMOUNT) < 2) then { - if (!GETDUSTT(DACTIVE)) then { - SETDUST(DACTIVE,true); - call FUNC(ApplyDust); - } else { - if ((_rotorWash select 1) > 0.5) then { - call FUNC(ApplyDust); - }; - }; - }; - _safe = (getNumber (ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Protection") == 1); + if !([ace_player] call FUNC(isGogglesVisible)) exitWith{}; + if (GETDUSTT(DAMOUNT) < 2) then { + if (!GETDUSTT(DACTIVE)) then { + SETDUST(DACTIVE,true); + call FUNC(ApplyDust); + } else { + if ((_rotorWash select 1) > 0.5) then { + call FUNC(ApplyDust); + }; + }; + }; + _safe = (getNumber (ConfigFile >> "CfgGlasses" >> GVAR(Current) >> "ACE_Protection") == 1); }; if (_safe) exitWith {}; if ((_rotorWash select 1) <= 15) then { - private "_scale"; - _scale = 0.7; - if ((_rotorWash select 1) != 0) then { - _scale = CLAMP(0.3*(_rotorWash select 1),0.1,0.3); - } else { - _scale = 0.1; - }; - _scale = 1 - _scale; - if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA - [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(DustHandler) = -1; - }; - if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { - GVAR(PostProcessEyes_Enabled) = true; - GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [_scale,_scale,_scale,_scale],[1,1,1,0]]; - GVAR(PostProcessEyes) ppEffectCommit 0.5; - GVAR(PostProcessEyes) ppEffectEnable true; - }; + private "_scale"; + _scale = 0.7; + if ((_rotorWash select 1) != 0) then { + _scale = CLAMP(0.3*(_rotorWash select 1),0.1,0.3); + } else { + _scale = 0.1; + }; + _scale = 1 - _scale; + if (GVAR(DustHandler) != -1) then { // should be fixed in dev CBA + [GVAR(DustHandler)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(DustHandler) = -1; + }; + if !(ace_player getVariable ["ACE_EyesDamaged", false]) then { + GVAR(PostProcessEyes_Enabled) = true; + GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0,0,0,0], [_scale,_scale,_scale,_scale],[1,1,1,0]]; + GVAR(PostProcessEyes) ppEffectCommit 0.5; + GVAR(PostProcessEyes) ppEffectEnable true; + }; }; diff --git a/addons/goggles/functions/fnc_rainEffect.sqf b/addons/goggles/functions/fnc_rainEffect.sqf index 37ffbf64f6..b5badef6f2 100644 --- a/addons/goggles/functions/fnc_rainEffect.sqf +++ b/addons/goggles/functions/fnc_rainEffect.sqf @@ -17,37 +17,37 @@ private ["_fnc_underCover"]; if (isNull(ace_player) || {!(alive ace_player)}) exitWith {}; _fnc_underCover = { - private ["_pos", "_unit"]; - _unit = (_this select 0); - if (vehicle _unit != _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {true}; - _pos = eyePos _unit; - ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} + private ["_pos", "_unit"]; + _unit = (_this select 0); + if (vehicle _unit != _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {true}; + _pos = eyePos _unit; + ((positionCameraToWorld [0,0,1] select 2) < ((positionCameraToWorld [0,0,0] select 2) - 0.4)) || {(lineIntersects [_pos, _pos vectorAdd [0,0,15], _unit])} }; if (!isNull(findDisplay 312)) exitWith { - if (GVAR(RainActive)) then { - call FUNC(RemoveRainEffect); - }; + if (GVAR(RainActive)) then { + call FUNC(RemoveRainEffect); + }; }; // Ignore if ace_player is under water if (!GVAR(EffectsActive) || {underwater ace_player}) exitWith{call FUNC(RemoveRainEffect);}; if (GVAR(RainLastLevel) != rain) then { - call FUNC(RemoveRainEffect); - GVAR(RainLastLevel) = rain; - // Rain is happening - if (GVAR(RainLastLevel) > 0.05 && {!([ace_player] call _fnc_underCover)}) then { - GVAR(RainActive) = true; - GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; - GVAR(RainDrops) setParticleClass "ACERainEffect"; - GVAR(RainDrops) setDropInterval (0.07 * (1.1 - GVAR(RainLastLevel))); - GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; - }; + call FUNC(RemoveRainEffect); + GVAR(RainLastLevel) = rain; + // Rain is happening + if (GVAR(RainLastLevel) > 0.05 && {!([ace_player] call _fnc_underCover)}) then { + GVAR(RainActive) = true; + GVAR(RainDrops) = "#particlesource" createVehicleLocal GetPos ace_player; + GVAR(RainDrops) setParticleClass "ACERainEffect"; + GVAR(RainDrops) setDropInterval (0.07 * (1.1 - GVAR(RainLastLevel))); + GVAR(RainDrops) attachTo [vehicle ace_player,[0,0,0]]; + }; }else{ - if (GVAR(RainLastLevel) > 0.05) then { - if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { - call FUNC(RemoveRainEffect); - }; - if (!GVAR(RainActive)) then { - GVAR(RainLastLevel) = -1; - }; - }; + if (GVAR(RainLastLevel) > 0.05) then { + if (GVAR(RainActive) && {[ace_player] call _fnc_underCover}) exitWith { + call FUNC(RemoveRainEffect); + }; + if (!GVAR(RainActive)) then { + GVAR(RainLastLevel) = -1; + }; + }; }; diff --git a/addons/goggles/functions/fnc_removeDirtEffect.sqf b/addons/goggles/functions/fnc_removeDirtEffect.sqf index 20812d6140..f7efd39af3 100644 --- a/addons/goggles/functions/fnc_removeDirtEffect.sqf +++ b/addons/goggles/functions/fnc_removeDirtEffect.sqf @@ -15,5 +15,5 @@ */ #include "script_component.hpp" if (!isNull(GETUVAR(GVAR(DisplayEffects),displayNull))) then { - (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText ""; + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10660) ctrlSetText ""; }; diff --git a/addons/goggles/functions/fnc_removeDustEffect.sqf b/addons/goggles/functions/fnc_removeDustEffect.sqf index 7bd4be7c22..1e179ed6b4 100644 --- a/addons/goggles/functions/fnc_removeDustEffect.sqf +++ b/addons/goggles/functions/fnc_removeDustEffect.sqf @@ -15,5 +15,5 @@ */ #include "script_component.hpp" if (!isNull(GETUVAR(GVAR(DisplayEffects),displayNull))) then { - (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10662) ctrlSetText ""; + (GETUVAR(GVAR(DisplayEffects),displayNull) displayCtrl 10662) ctrlSetText ""; }; diff --git a/addons/goggles/functions/fnc_removeGlassesEffect.sqf b/addons/goggles/functions/fnc_removeGlassesEffect.sqf index f409f3c16e..c7965fefbc 100644 --- a/addons/goggles/functions/fnc_removeGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_removeGlassesEffect.sqf @@ -1,7 +1,7 @@ /* * Author: Garth 'L-H' de Wet - * Removes the glasses effect from the screen, removes dirt effect, removes rain effect, - * removes dust effect. Does not reset array (glasses will still be broken, dirty, ect.) + * Removes the glasses effect from the screen, removes dirt effect, removes rain effect, + * removes dust effect. Does not reset array (glasses will still be broken, dirty, ect.) * * Arguments: * None @@ -19,7 +19,7 @@ GVAR(EffectsActive) = false; GVAR(PostProcess) ppEffectEnable false; if (!isNull(GLASSDISPLAY)) then { - GLASSDISPLAY closeDisplay 0; + GLASSDISPLAY closeDisplay 0; }; call FUNC(removeDirtEffect); diff --git a/addons/goggles/functions/fnc_removeRainEffect.sqf b/addons/goggles/functions/fnc_removeRainEffect.sqf index fbbf1b9b7b..0d322e12da 100644 --- a/addons/goggles/functions/fnc_removeRainEffect.sqf +++ b/addons/goggles/functions/fnc_removeRainEffect.sqf @@ -15,7 +15,7 @@ */ #include "script_component.hpp" if (!isNull (GVAR(RainDrops))) then { - deleteVehicle (GVAR(RainDrops)); + deleteVehicle (GVAR(RainDrops)); }; GVAR(RainActive) = false; GVAR(RainLastLevel) = 0; diff --git a/addons/hearing/script_component.hpp b/addons/hearing/script_component.hpp index 15023f2509..6d4df68370 100644 --- a/addons/hearing/script_component.hpp +++ b/addons/hearing/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_HEARING - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_HEARING - #define DEBUG_SETTINGS DEBUG_SETTINGS_HEARING + #define DEBUG_SETTINGS DEBUG_SETTINGS_HEARING #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/interact_menu/functions/fnc_splitPath.sqf b/addons/interact_menu/functions/fnc_splitPath.sqf index 609f26f972..935e947b30 100644 --- a/addons/interact_menu/functions/fnc_splitPath.sqf +++ b/addons/interact_menu/functions/fnc_splitPath.sqf @@ -19,9 +19,9 @@ for [{_i = 0},{_i < (count _this) - 1},{_i = _i + 1}] do { _parentPath pushBack (_this select _i); }; _actionName = if (count _this > 0) then { - _this select ((count _this) - 1); + _this select ((count _this) - 1); } else { - "" + "" }; [_parentPath, _actionName] diff --git a/addons/interaction/functions/fnc_AddSelectableItem.sqf b/addons/interaction/functions/fnc_AddSelectableItem.sqf index 966c4fe043..498b852635 100644 --- a/addons/interaction/functions/fnc_AddSelectableItem.sqf +++ b/addons/interaction/functions/fnc_AddSelectableItem.sqf @@ -1,19 +1,19 @@ /* - Author: Garth de Wet (LH) + Author: Garth de Wet (LH) - Description: - Adds an item to the select menu + Description: + Adds an item to the select menu - Parameters: - 0: ARRAY/NUMBER - List container - 1: String - Display Name - 2: String - Picture - 3: String/code - data + Parameters: + 0: ARRAY/NUMBER - List container + 1: String - Display Name + 2: String - Picture + 3: String/code - data - Returns: - ARRAY/Number + Returns: + ARRAY/Number - Example: + Example: */ #include "script_component.hpp" @@ -26,7 +26,7 @@ _picture = _this select 2; _data = _this select 3; if (_picture == "" || _picture == "PictureThing") then { - _picture = QUOTE(PATHTOF(UI\dot_ca.paa)); + _picture = QUOTE(PATHTOF(UI\dot_ca.paa)); }; _index = lbAdd [_container, _displayName]; diff --git a/addons/interaction/functions/fnc_MoveDown.sqf b/addons/interaction/functions/fnc_MoveDown.sqf index 2221deab62..eac30e4008 100644 --- a/addons/interaction/functions/fnc_MoveDown.sqf +++ b/addons/interaction/functions/fnc_MoveDown.sqf @@ -1,18 +1,18 @@ /* - Author: Garth de Wet (LH) + Author: Garth de Wet (LH) - Description: - Depending on the passed value, either scrolls down through the list or up. + Description: + Depending on the passed value, either scrolls down through the list or up. - Parameters: - NUMBER - Amount to increase current interaction target + Parameters: + NUMBER - Amount to increase current interaction target - Returns: - Nothing + Returns: + Nothing - Example: - 1 call FUNC(MoveDown); - -1 call FUNC(MoveDown); + Example: + 1 call FUNC(MoveDown); + -1 call FUNC(MoveDown); */ #include "script_component.hpp" @@ -31,27 +31,27 @@ _dlgInteractionDialog = uiNamespace getVariable QGVAR(Flow_Display); _top = GVAR(SelectedButton) - 2; _i = 0; while {_i <= 4} do { - _index =_i + _top; - _ctrl = _dlgInteractionDialog displayCtrl (1200 + _i); - if (_index >= 0 && {_index <= _count}) then { - _action = GVAR(Buttons) select _index; - _ctrl ctrlShow true; - _ctrl ctrlSetText (_action select 5); - _color = [1,1,1,1]; - if !([_target, _player] call (_action select 2)) then { - _color = [0.3,0.3,0.3,0.8]; - }; - if (_i == 0 || _i == 4) then { - _color set [3, 0.5]; - }; - if (_i == 1 || _i == 3) then { - _color set [3, 0.75]; - }; - _ctrl ctrlSetTextColor _color; - }else{ - _ctrl ctrlShow false; - }; - _i = _i + 1; + _index =_i + _top; + _ctrl = _dlgInteractionDialog displayCtrl (1200 + _i); + if (_index >= 0 && {_index <= _count}) then { + _action = GVAR(Buttons) select _index; + _ctrl ctrlShow true; + _ctrl ctrlSetText (_action select 5); + _color = [1,1,1,1]; + if !([_target, _player] call (_action select 2)) then { + _color = [0.3,0.3,0.3,0.8]; + }; + if (_i == 0 || _i == 4) then { + _color set [3, 0.5]; + }; + if (_i == 1 || _i == 3) then { + _color set [3, 0.75]; + }; + _ctrl ctrlSetTextColor _color; + }else{ + _ctrl ctrlShow false; + }; + _i = _i + 1; }; _ctrl = _dlgInteractionDialog displayCtrl 1000; @@ -60,7 +60,7 @@ _ctrl = _dlgInteractionDialog displayCtrl 1100; _current = (GVAR(Buttons) select GVAR(SelectedButton)); _infoText = ""; if !([_target, _player] call (_current select 2)) then { - _infoText = "Unavailable"; + _infoText = "Unavailable"; }; _ctrl ctrlSetText _infoText; _ctrl ctrlShow (_infoText != ""); diff --git a/addons/interaction/functions/fnc_applyButtons.sqf b/addons/interaction/functions/fnc_applyButtons.sqf index 7459b1a7bf..be35b34877 100644 --- a/addons/interaction/functions/fnc_applyButtons.sqf +++ b/addons/interaction/functions/fnc_applyButtons.sqf @@ -13,12 +13,12 @@ _dlgInteractionDialog = uiNamespace getVariable QGVAR(Dialog); /* for "_a" from 0 to (_count - 1) do { - _action = GVAR(Buttons) select _a; + _action = GVAR(Buttons) select _a; - _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _a); - _ctrlInteractionDialog ctrlShow true; - _ctrlInteractionDialog ctrlSetText (_action select 0); - _ctrlInteractionDialog ctrlEnable (call (_action select 2)); + _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _a); + _ctrlInteractionDialog ctrlShow true; + _ctrlInteractionDialog ctrlSetText (_action select 0); + _ctrlInteractionDialog ctrlEnable (call (_action select 2)); }; */ @@ -27,27 +27,27 @@ _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl 3; GVAR(MainButton) = "(findDisplay 1713999) closeDisplay 1;"; if (_object isKindOf "Man") then { - _ctrlInteractionDialog ctrlSetText (if (alive _object) then {name _object} else {_object getVariable ["ACE_Name", "Unknown"]}); + _ctrlInteractionDialog ctrlSetText (if (alive _object) then {name _object} else {_object getVariable ["ACE_Name", "Unknown"]}); } else { - _ctrlInteractionDialog ctrlSetText (getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName")); + _ctrlInteractionDialog ctrlSetText (getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName")); }; for "_index" from 0 to 9 do { - _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _index); - _ctrlInteractionDialog ctrlShow true; + _ctrlInteractionDialog = _dlgInteractionDialog displayCtrl (10 + _index); + _ctrlInteractionDialog ctrlShow true; - _ctrlInteractionDialogIcon = _dlgInteractionDialog displayCtrl (20 + _index); + _ctrlInteractionDialogIcon = _dlgInteractionDialog displayCtrl (20 + _index); - if (_index < _count) then { - _action = GVAR(Buttons) select _index; - _ctrlInteractionDialog ctrlSetText (_action select 0); - _ctrlInteractionDialog ctrlEnable (call (_action select 2)); + if (_index < _count) then { + _action = GVAR(Buttons) select _index; + _ctrlInteractionDialog ctrlSetText (_action select 0); + _ctrlInteractionDialog ctrlEnable (call (_action select 2)); - _ctrlInteractionDialogIcon ctrlSetText (_action select 5); - } else { - _ctrlInteractionDialog ctrlSetText ""; - _ctrlInteractionDialog ctrlEnable false; + _ctrlInteractionDialogIcon ctrlSetText (_action select 5); + } else { + _ctrlInteractionDialog ctrlSetText ""; + _ctrlInteractionDialog ctrlEnable false; - _ctrlInteractionDialogIcon ctrlSetText ""; - }; + _ctrlInteractionDialogIcon ctrlSetText ""; + }; }; diff --git a/addons/interaction/functions/fnc_getDoorAnimations.sqf b/addons/interaction/functions/fnc_getDoorAnimations.sqf index ebb820584a..ca59ec177c 100644 --- a/addons/interaction/functions/fnc_getDoorAnimations.sqf +++ b/addons/interaction/functions/fnc_getDoorAnimations.sqf @@ -7,101 +7,101 @@ _house = _this select 0; _door = _this select 1; _index = [ - "door_1", - "door_2", - "door_3", - "door_4", - "door_5", - "door_6", - "door_7", - "door_8", - "door_9", - "door_10", - "door_11", - "door_12", - "door_13", - "Door_14", - "door_15", - "door_16", - "door_17", - "door_18", - "door_19", - "door_20", - "door_21", - "door_22", + "door_1", + "door_2", + "door_3", + "door_4", + "door_5", + "door_6", + "door_7", + "door_8", + "door_9", + "door_10", + "door_11", + "door_12", + "door_13", + "Door_14", + "door_15", + "door_16", + "door_17", + "door_18", + "door_19", + "door_20", + "door_21", + "door_22", - "hatch_1", - "hatch_2", - "hatch_3", - "hatch_4", - "hatch_5", - "hatch_6" + "hatch_1", + "hatch_2", + "hatch_3", + "hatch_4", + "hatch_5", + "hatch_6" ] find toLower _door; if (_index == -1) exitWith {[[],""]}; _animations = [ - ["Door_1_rot", "Door_Handle_1_rot_1", "Door_Handle_1_rot_2"], - ["Door_2_rot", "Door_Handle_2_rot_1", "Door_Handle_2_rot_2"], - ["Door_3_rot", "Door_Handle_3_rot_1", "Door_Handle_3_rot_2"], - ["Door_4_rot", "Door_Handle_4_rot_1", "Door_Handle_4_rot_2"], - ["Door_5_rot", "Door_Handle_5_rot_1", "Door_Handle_5_rot_2"], - ["Door_6_rot", "Door_Handle_6_rot_1", "Door_Handle_6_rot_2"], - ["Door_7_rot", "Door_Handle_7_rot_1", "Door_Handle_7_rot_2"], - ["Door_8_rot", "Door_Handle_8_rot_1", "Door_Handle_8_rot_2"], - ["Door_9_rot", "Door_Handle_9_rot_1", "Door_Handle_9_rot_2"], - ["Door_10_rot", "Door_Handle_10_rot_1", "Door_Handle_10_rot_2"], - ["Door_11_rot", "Door_Handle_11_rot_1", "Door_Handle_11_rot_2"], - ["Door_12_rot", "Door_Handle_12_rot_1", "Door_Handle_12_rot_2"], - ["Door_13_rot", "Door_Handle_13_rot_1", "Door_Handle_13_rot_2"], - ["Door_14_rot", "Door_Handle_14_rot_1", "Door_Handle_14_rot_2"], - ["Door_15_rot", "Door_Handle_15_rot_1", "Door_Handle_15_rot_2"], - ["Door_16_rot", "Door_Handle_16_rot_1", "Door_Handle_16_rot_2"], - ["Door_17_rot", "Door_Handle_17_rot_1", "Door_Handle_17_rot_2"], - ["Door_18_rot", "Door_Handle_18_rot_1", "Door_Handle_18_rot_2"], - ["Door_19_rot", "Door_Handle_19_rot_1", "Door_Handle_19_rot_2"], - ["Door_20_rot", "Door_Handle_20_rot_1", "Door_Handle_20_rot_2"], - ["Door_21_rot", "Door_Handle_21_rot_1", "Door_Handle_21_rot_2"], - ["Door_22_rot", "Door_Handle_22_rot_1", "Door_Handle_22_rot_2"], + ["Door_1_rot", "Door_Handle_1_rot_1", "Door_Handle_1_rot_2"], + ["Door_2_rot", "Door_Handle_2_rot_1", "Door_Handle_2_rot_2"], + ["Door_3_rot", "Door_Handle_3_rot_1", "Door_Handle_3_rot_2"], + ["Door_4_rot", "Door_Handle_4_rot_1", "Door_Handle_4_rot_2"], + ["Door_5_rot", "Door_Handle_5_rot_1", "Door_Handle_5_rot_2"], + ["Door_6_rot", "Door_Handle_6_rot_1", "Door_Handle_6_rot_2"], + ["Door_7_rot", "Door_Handle_7_rot_1", "Door_Handle_7_rot_2"], + ["Door_8_rot", "Door_Handle_8_rot_1", "Door_Handle_8_rot_2"], + ["Door_9_rot", "Door_Handle_9_rot_1", "Door_Handle_9_rot_2"], + ["Door_10_rot", "Door_Handle_10_rot_1", "Door_Handle_10_rot_2"], + ["Door_11_rot", "Door_Handle_11_rot_1", "Door_Handle_11_rot_2"], + ["Door_12_rot", "Door_Handle_12_rot_1", "Door_Handle_12_rot_2"], + ["Door_13_rot", "Door_Handle_13_rot_1", "Door_Handle_13_rot_2"], + ["Door_14_rot", "Door_Handle_14_rot_1", "Door_Handle_14_rot_2"], + ["Door_15_rot", "Door_Handle_15_rot_1", "Door_Handle_15_rot_2"], + ["Door_16_rot", "Door_Handle_16_rot_1", "Door_Handle_16_rot_2"], + ["Door_17_rot", "Door_Handle_17_rot_1", "Door_Handle_17_rot_2"], + ["Door_18_rot", "Door_Handle_18_rot_1", "Door_Handle_18_rot_2"], + ["Door_19_rot", "Door_Handle_19_rot_1", "Door_Handle_19_rot_2"], + ["Door_20_rot", "Door_Handle_20_rot_1", "Door_Handle_20_rot_2"], + ["Door_21_rot", "Door_Handle_21_rot_1", "Door_Handle_21_rot_2"], + ["Door_22_rot", "Door_Handle_22_rot_1", "Door_Handle_22_rot_2"], - ["Hatch_1_rot"], - ["Hatch_2_rot"], - ["Hatch_3_rot"], - ["Hatch_4_rot"], - ["Hatch_5_rot"], - ["Hatch_6_rot"] + ["Hatch_1_rot"], + ["Hatch_2_rot"], + ["Hatch_3_rot"], + ["Hatch_4_rot"], + ["Hatch_5_rot"], + ["Hatch_6_rot"] ] select _index; _lockedVariable = [ - ["BIS_Disabled_Door_1", "Door_Handle_1_rot_1", "Door_Locked_1_rot"], - ["BIS_Disabled_Door_2", "Door_Handle_2_rot_1", "Door_Locked_2_rot"], - ["BIS_Disabled_Door_3", "Door_Handle_3_rot_1", "Door_Locked_3_rot"], - ["BIS_Disabled_Door_4", "Door_Handle_4_rot_1", "Door_Locked_4_rot"], - ["BIS_Disabled_Door_5", "Door_Handle_5_rot_1", "Door_Locked_5_rot"], - ["BIS_Disabled_Door_6", "Door_Handle_6_rot_1", "Door_Locked_6_rot"], - ["BIS_Disabled_Door_7", "Door_Handle_7_rot_1", "Door_Locked_7_rot"], - ["BIS_Disabled_Door_8", "Door_Handle_8_rot_1", "Door_Locked_8_rot"], - ["BIS_Disabled_Door_9", "Door_Handle_9_rot_1", "Door_Locked_9_rot"], - ["BIS_Disabled_Door_10", "Door_Handle_10_rot_1", "Door_Locked_10_rot"], - ["BIS_Disabled_Door_11", "Door_Handle_11_rot_1", "Door_Locked_11_rot"], - ["BIS_Disabled_Door_12", "Door_Handle_12_rot_1", "Door_Locked_12_rot"], - ["BIS_Disabled_Door_13", "Door_Handle_13_rot_1", "Door_Locked_13_rot"], - ["BIS_Disabled_Door_14", "Door_Handle_14_rot_1", "Door_Locked_14_rot"], - ["BIS_Disabled_Door_15", "Door_Handle_15_rot_1", "Door_Locked_15_rot"], - ["BIS_Disabled_Door_16", "Door_Handle_16_rot_1", "Door_Locked_16_rot"], - ["BIS_Disabled_Door_17", "Door_Handle_17_rot_1", "Door_Locked_17_rot"], - ["BIS_Disabled_Door_18", "Door_Handle_18_rot_1", "Door_Locked_18_rot"], - ["BIS_Disabled_Door_19", "Door_Handle_19_rot_1", "Door_Locked_19_rot"], - ["BIS_Disabled_Door_20", "Door_Handle_20_rot_1", "Door_Locked_20_rot"], - ["BIS_Disabled_Door_21", "Door_Handle_21_rot_1", "Door_Locked_21_rot"], - ["BIS_Disabled_Door_22", "Door_Handle_22_rot_1", "Door_Locked_22_rot"], + ["BIS_Disabled_Door_1", "Door_Handle_1_rot_1", "Door_Locked_1_rot"], + ["BIS_Disabled_Door_2", "Door_Handle_2_rot_1", "Door_Locked_2_rot"], + ["BIS_Disabled_Door_3", "Door_Handle_3_rot_1", "Door_Locked_3_rot"], + ["BIS_Disabled_Door_4", "Door_Handle_4_rot_1", "Door_Locked_4_rot"], + ["BIS_Disabled_Door_5", "Door_Handle_5_rot_1", "Door_Locked_5_rot"], + ["BIS_Disabled_Door_6", "Door_Handle_6_rot_1", "Door_Locked_6_rot"], + ["BIS_Disabled_Door_7", "Door_Handle_7_rot_1", "Door_Locked_7_rot"], + ["BIS_Disabled_Door_8", "Door_Handle_8_rot_1", "Door_Locked_8_rot"], + ["BIS_Disabled_Door_9", "Door_Handle_9_rot_1", "Door_Locked_9_rot"], + ["BIS_Disabled_Door_10", "Door_Handle_10_rot_1", "Door_Locked_10_rot"], + ["BIS_Disabled_Door_11", "Door_Handle_11_rot_1", "Door_Locked_11_rot"], + ["BIS_Disabled_Door_12", "Door_Handle_12_rot_1", "Door_Locked_12_rot"], + ["BIS_Disabled_Door_13", "Door_Handle_13_rot_1", "Door_Locked_13_rot"], + ["BIS_Disabled_Door_14", "Door_Handle_14_rot_1", "Door_Locked_14_rot"], + ["BIS_Disabled_Door_15", "Door_Handle_15_rot_1", "Door_Locked_15_rot"], + ["BIS_Disabled_Door_16", "Door_Handle_16_rot_1", "Door_Locked_16_rot"], + ["BIS_Disabled_Door_17", "Door_Handle_17_rot_1", "Door_Locked_17_rot"], + ["BIS_Disabled_Door_18", "Door_Handle_18_rot_1", "Door_Locked_18_rot"], + ["BIS_Disabled_Door_19", "Door_Handle_19_rot_1", "Door_Locked_19_rot"], + ["BIS_Disabled_Door_20", "Door_Handle_20_rot_1", "Door_Locked_20_rot"], + ["BIS_Disabled_Door_21", "Door_Handle_21_rot_1", "Door_Locked_21_rot"], + ["BIS_Disabled_Door_22", "Door_Handle_22_rot_1", "Door_Locked_22_rot"], - ["", ""], - ["", ""], - ["", ""], - ["", ""], - ["", ""], - ["", ""] + ["", ""], + ["", ""], + ["", ""], + ["", ""], + ["", ""], + ["", ""] ] select _index; [_animations, _lockedVariable] diff --git a/addons/interaction/functions/fnc_hideMenu.sqf b/addons/interaction/functions/fnc_hideMenu.sqf index 43444b7d99..54263ef032 100644 --- a/addons/interaction/functions/fnc_hideMenu.sqf +++ b/addons/interaction/functions/fnc_hideMenu.sqf @@ -1,17 +1,17 @@ /* - Author: Garth de Wet (LH) + Author: Garth de Wet (LH) - Description: - Closes the Interaction menu + Description: + Closes the Interaction menu - Parameters: - Nothing + Parameters: + Nothing - Returns: - Nothing + Returns: + Nothing - Example: - call FUNC(hideMenu); + Example: + call FUNC(hideMenu); */ #include "script_component.hpp" diff --git a/addons/interaction/functions/fnc_hideMouseHint.sqf b/addons/interaction/functions/fnc_hideMouseHint.sqf index 4efc4a3094..d910352076 100644 --- a/addons/interaction/functions/fnc_hideMouseHint.sqf +++ b/addons/interaction/functions/fnc_hideMouseHint.sqf @@ -1,18 +1,18 @@ /* - Author(s): - Garth de Wet (LH) + Author(s): + Garth de Wet (LH) - Description: - Hides the interaction helper text with the mouse buttons at the bottom middle of the screen + Description: + Hides the interaction helper text with the mouse buttons at the bottom middle of the screen - Parameters: - Nothing + Parameters: + Nothing - Returns: - Nothing + Returns: + Nothing - Example: - call FUNC(hideMouseHint); + Example: + call FUNC(hideMouseHint); */ #include "script_component.hpp" diff --git a/addons/interaction/functions/fnc_isInRange.sqf b/addons/interaction/functions/fnc_isInRange.sqf index 24b5793d6f..5048b66001 100644 --- a/addons/interaction/functions/fnc_isInRange.sqf +++ b/addons/interaction/functions/fnc_isInRange.sqf @@ -43,8 +43,8 @@ _position1 = ATLToASL positionCameraToWorld [0, 0, _distance]; _position1 set [2, (_position1 select 2) - (getTerrainHeightASL _position1 min 0)]; if (_vehicle in lineIntersectsWith [_position0, _position1] || {_player distance _vehicle < _distance}) then { - true + true } else { - ["Not in Range"] call FUNC(addToTooltip); - false + ["Not in Range"] call FUNC(addToTooltip); + false } diff --git a/addons/interaction/functions/fnc_joinTeam.sqf b/addons/interaction/functions/fnc_joinTeam.sqf index d0aeccc3ad..2e4d1f2898 100644 --- a/addons/interaction/functions/fnc_joinTeam.sqf +++ b/addons/interaction/functions/fnc_joinTeam.sqf @@ -10,12 +10,12 @@ _unit setVariable [QGVAR(assignedFireTeam), _team, true]; [_unit, format ["{_this assignTeam '%1'}", _team]] call EFUNC(common,execRemoteFnc); if (_unit == ACE_player) then { - _message = if (_team == "MAIN") then { - localize "STR_ACE_Interaction_LeftTeam"; - } else { - _team = localize format ["STR_ACE_Interaction_Team%1", _team]; - format [localize "STR_ACE_Interaction_JoinedTeam", _team]; - }; + _message = if (_team == "MAIN") then { + localize "STR_ACE_Interaction_LeftTeam"; + } else { + _team = localize format ["STR_ACE_Interaction_Team%1", _team]; + format [localize "STR_ACE_Interaction_JoinedTeam", _team]; + }; - [_message] call EFUNC(common,displayTextStructured); + [_message] call EFUNC(common,displayTextStructured); }; diff --git a/addons/interaction/functions/fnc_onButtonUp.sqf b/addons/interaction/functions/fnc_onButtonUp.sqf index 44c4e340f0..cee524c55f 100644 --- a/addons/interaction/functions/fnc_onButtonUp.sqf +++ b/addons/interaction/functions/fnc_onButtonUp.sqf @@ -11,9 +11,9 @@ _count = count GVAR(Buttons); _index = call FUNC(getSelectedButton); _action = if (_index != -1 && {_index < _count}) then { - GVAR(Buttons) select _index + GVAR(Buttons) select _index } else { - ["", {}, {false}, 0, [], "", "", {false}, [], 0] + ["", {}, {false}, 0, [], "", "", {false}, [], 0] }; (findDisplay 1713999) closeDisplay 1; @@ -28,5 +28,5 @@ _exceptions = _action select 8;// _distance = _action select 9; if ((_distance == 0 || {[GVAR(Target), _distance] call FUNC(isInRange)}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then { - [_target, _player] call _statement; + [_target, _player] call _statement; }; diff --git a/addons/interaction/functions/fnc_onClick.sqf b/addons/interaction/functions/fnc_onClick.sqf index 39581db3a3..29fffb8b94 100644 --- a/addons/interaction/functions/fnc_onClick.sqf +++ b/addons/interaction/functions/fnc_onClick.sqf @@ -10,35 +10,35 @@ _count = count GVAR(Buttons); _index = _this; _action = if (_index != -1 && {_index < _count}) then { - GVAR(Buttons) select _index + GVAR(Buttons) select _index } else { - ["", {}, {false}, 0, [], "", "", {false}, [], 0] + ["", {}, {false}, 0, [], "", "", {false}, [], 0] }; _subMenu = _action select 4; // back if (_index == -1) exitWith { - call GVAR(MainButton); + call GVAR(MainButton); }; if (count _subMenu < 2) then { - (findDisplay 1713999) closeDisplay 1; - closeDialog 0; + (findDisplay 1713999) closeDisplay 1; + closeDialog 0; - _statement = _action select 1; - _condition = _action select 2; - _conditionShow = _action select 7; - _exceptions = _action select 8;// - _distance = _action select 9; + _statement = _action select 1; + _condition = _action select 2; + _conditionShow = _action select 7; + _exceptions = _action select 8;// + _distance = _action select 9; - if ((_distance == 0 || {[GVAR(Target), _distance] call FUNC(isInRange)}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then { - [_target, _player] call _statement; - }; + if ((_distance == 0 || {[GVAR(Target), _distance] call FUNC(isInRange)}) && {[_target, _player] call _condition} && {[_target, _player] call _conditionShow}) then { + [_target, _player] call _statement; + }; } else { - if (_subMenu select 1 < 1) then { - [_subMenu select 0] call FUNC(openSubMenu); - } else { - [_subMenu select 0] call FUNC(openSubMenuSelf); - }; + if (_subMenu select 1 < 1) then { + [_subMenu select 0] call FUNC(openSubMenu); + } else { + [_subMenu select 0] call FUNC(openSubMenuSelf); + }; }; diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index dc9150491d..e175e752cb 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -18,40 +18,40 @@ _animations = _animations select 0; if (count _animations == 0) exitWith {}; if (_house animationPhase (_animations select 0) <= 0 && {_house getVariable [_lockedVariable select 0, 0] == 1}) exitWith { - _lockedVariable set [0, _house]; - _lockedVariable spawn compile preprocessFileLineNumbers "\A3\Structures_F\scripts\LockedDoor_open.sqf"; + _lockedVariable set [0, _house]; + _lockedVariable spawn compile preprocessFileLineNumbers "\A3\Structures_F\scripts\LockedDoor_open.sqf"; }; GVAR(isOpeningDoor) = true; playSound "ACE_Sound_Click"; [_house, _animations] spawn { - _house = _this select 0; - _animations = _this select 1; + _house = _this select 0; + _animations = _this select 1; - _phase = _house animationPhase (_animations select 0); - _position = getPosASL ACE_player; + _phase = _house animationPhase (_animations select 0); + _position = getPosASL ACE_player; - _time = time + 0.2; - _usedMouseWheel = false; - waitUntil { - if (inputAction "PrevAction" > 0 || {inputAction "NextAction" > 0}) then { - _usedMouseWheel = true; - }; + _time = time + 0.2; + _usedMouseWheel = false; + waitUntil { + if (inputAction "PrevAction" > 0 || {inputAction "NextAction" > 0}) then { + _usedMouseWheel = true; + }; - _phase = _phase + (inputAction "PrevAction" / 12) min 1; - _phase = _phase - (inputAction "NextAction" / 12) max 0; + _phase = _phase + (inputAction "PrevAction" / 12) min 1; + _phase = _phase - (inputAction "NextAction" / 12) max 0; - {_house animate [_x, _phase]} forEach _animations; + {_house animate [_x, _phase]} forEach _animations; - !GVAR(isOpeningDoor) || {getPosASL ACE_player distance _position > 1} - }; + !GVAR(isOpeningDoor) || {getPosASL ACE_player distance _position > 1} + }; - if (!_usedMouseWheel && {time < _time} && {[ACE_player, objNull, []] call EFUNC(common,canInteractWith)}) then { - _phase = [0, 1] select (_house animationPhase (_animations select 0) < 0.5); + if (!_usedMouseWheel && {time < _time} && {[ACE_player, objNull, []] call EFUNC(common,canInteractWith)}) then { + _phase = [0, 1] select (_house animationPhase (_animations select 0) < 0.5); - {_house animate [_x, _phase]} forEach _animations; - }; + {_house animate [_x, _phase]} forEach _animations; + }; - GVAR(isOpeningDoor) = false; + GVAR(isOpeningDoor) = false; }; diff --git a/addons/interaction/functions/fnc_openSelectMenu.sqf b/addons/interaction/functions/fnc_openSelectMenu.sqf index ba2cf7ce10..de5459f88c 100644 --- a/addons/interaction/functions/fnc_openSelectMenu.sqf +++ b/addons/interaction/functions/fnc_openSelectMenu.sqf @@ -1,43 +1,43 @@ /* - Author: Garth de Wet (LH) + Author: Garth de Wet (LH) - Description: - Opens the select menu UI and sets up the UI + Description: + Opens the select menu UI and sets up the UI - Parameters: - 0: ARRAY - items - ARRAY - 0 = Text - 1 = statement to execute - 2 = condition before execute - 3 = showDisabled - 4 = priority - 5 = icon - 6 = extra variables. Passed to the code. - 1: Code - select action - 2: Code - Cancel Action - Returns: - Nothing + Parameters: + 0: ARRAY - items + ARRAY + 0 = Text + 1 = statement to execute + 2 = condition before execute + 3 = showDisabled + 4 = priority + 5 = icon + 6 = extra variables. Passed to the code. + 1: Code - select action + 2: Code - Cancel Action + Returns: + Nothing - Example: + Example: */ #include "script_component.hpp" if (!(profileNamespace getVariable [QGVAR(FlowMenu), false])) then { - GVAR(SelectAccept) = _this select 1; - GVAR(SelectCancel) = _this select 2; - buttonSetAction [8855, QUOTE( call GVAR(SelectCancel); )]; // cancel - buttonSetAction [8860, QUOTE( (call compile (lbData [ARR_2(8866, lbCurSel 8866)])) call GVAR(SelectAccept); )]; // accept - lbSetCurSel [8866, 0]; + GVAR(SelectAccept) = _this select 1; + GVAR(SelectCancel) = _this select 2; + buttonSetAction [8855, QUOTE( call GVAR(SelectCancel); )]; // cancel + buttonSetAction [8860, QUOTE( (call compile (lbData [ARR_2(8866, lbCurSel 8866)])) call GVAR(SelectAccept); )]; // accept + lbSetCurSel [8866, 0]; }else{ - _customActions = _this select 0; - _count = count _customActions; - if (_count == 0) exitWith {}; - _customActions call FUNC(sortOptionsByPriority); - for "_i" from 0 to _count -1 do { - _action = _customActions select _i; - _action set [1, (_this select 1)]; - }; - GVAR(Buttons) = _customActions; - [(_this select 2), true, true, false, ACE_player] call FUNC(initialiseInteraction); + _customActions = _this select 0; + _count = count _customActions; + if (_count == 0) exitWith {}; + _customActions call FUNC(sortOptionsByPriority); + for "_i" from 0 to _count -1 do { + _action = _customActions select _i; + _action set [1, (_this select 1)]; + }; + GVAR(Buttons) = _customActions; + [(_this select 2), true, true, false, ACE_player] call FUNC(initialiseInteraction); }; diff --git a/addons/interaction/functions/fnc_prepareSelectMenu.sqf b/addons/interaction/functions/fnc_prepareSelectMenu.sqf index acff7fa5e2..593f0d4c47 100644 --- a/addons/interaction/functions/fnc_prepareSelectMenu.sqf +++ b/addons/interaction/functions/fnc_prepareSelectMenu.sqf @@ -1,18 +1,18 @@ /* - Author: Garth de Wet (LH) + Author: Garth de Wet (LH) - Description: - Prepares the select menu for use. + Description: + Prepares the select menu for use. - Parameters: - 0: TEXT - Header text - 1: TEXT - Approve button text + Parameters: + 0: TEXT - Header text + 1: TEXT - Approve button text - Returns: - ARRAY/NUMBER - container object for use with AddSelectableItem. + Returns: + ARRAY/NUMBER - container object for use with AddSelectableItem. - Example: - ["Select Explosive", "Place"] call FUNC(prepareSelectMenu); + Example: + ["Select Explosive", "Place"] call FUNC(prepareSelectMenu); */ #include "script_component.hpp" @@ -21,7 +21,7 @@ closeDialog 0; _header = _this select 0; _buttonText = _this select 1; if (isNil "_buttonText" or {_buttonText == ""}) then { - _buttonText = localize "STR_ACE_Interaction_MakeSelection"; + _buttonText = localize "STR_ACE_Interaction_MakeSelection"; }; createDialog "RscACE_SelectAnItem"; ctrlSetText [8860, _buttonText]; diff --git a/addons/interaction/functions/fnc_removeTag.sqf b/addons/interaction/functions/fnc_removeTag.sqf index 7a9b9b4bc0..0894520149 100644 --- a/addons/interaction/functions/fnc_removeTag.sqf +++ b/addons/interaction/functions/fnc_removeTag.sqf @@ -2,19 +2,19 @@ #include "script_component.hpp" 0 spawn { - waitUntil {player getVariable ["ACE_Name", ""] != ""}; + waitUntil {player getVariable ["ACE_Name", ""] != ""}; - _name = player getVariable ["ACE_Name", ""]; - _name = toArray _name; + _name = player getVariable ["ACE_Name", ""]; + _name = toArray _name; - _index = _name find (toArray "]" select 0); + _index = _name find (toArray "]" select 0); - if (_index != -1) then { - for "_index" from 0 to _index do { - _name set [_index, -1]; - }; - _name = _name - [-1]; - _name = toString _name; - player setVariable ["ACE_Name", _name, true]; - }; + if (_index != -1) then { + for "_index" from 0 to _index do { + _name set [_index, -1]; + }; + _name = _name - [-1]; + _name = toString _name; + player setVariable ["ACE_Name", _name, true]; + }; }; diff --git a/addons/interaction/functions/fnc_showMouseHint.sqf b/addons/interaction/functions/fnc_showMouseHint.sqf index b162754b13..5cb96a0eae 100644 --- a/addons/interaction/functions/fnc_showMouseHint.sqf +++ b/addons/interaction/functions/fnc_showMouseHint.sqf @@ -1,20 +1,20 @@ /* - Author(s): - Garth de Wet (LH) + Author(s): + Garth de Wet (LH) - Description: - Shows the interaction helper text with the mouse buttons at the bottom middle of the screen + Description: + Shows the interaction helper text with the mouse buttons at the bottom middle of the screen - Parameters: - 0: STRING - Left click text - 1: STRING - Right click text - 3: STRING - (Optional) Scroll text + Parameters: + 0: STRING - Left click text + 1: STRING - Right click text + 3: STRING - (Optional) Scroll text - Returns: - Nothing + Returns: + Nothing - Example: - ["Place Explosive", "Cancel"] call FUNC(showMouseHint); + Example: + ["Place Explosive", "Cancel"] call FUNC(showMouseHint); */ #include "script_component.hpp" @@ -25,7 +25,7 @@ _leftClick = _this select 0; _rightClick = _this select 1; _scroll = ""; if (count _this > 2) then { - _scroll = _this select 2; + _scroll = _this select 2; }; (QGVAR(InteractionHelper) call BIS_fnc_rscLayer) cutRsc [QGVAR(InteractionHelper), "PLAIN",0.5, false]; @@ -42,13 +42,13 @@ if (isNull _display) exitWith{}; (_display displayCtrl 1201) ctrlShow (_rightClick != ""); if (_scroll == "") exitWith { - (_display displayCtrl 1002) ctrlShow false; - (_display displayCtrl 1202) ctrlShow false; + (_display displayCtrl 1002) ctrlShow false; + (_display displayCtrl 1202) ctrlShow false; - (_display displayCtrl 1001) ctrlSetPosition [21 * GUI_GRID_W, 18 * GUI_GRID_H, 8 * GUI_GRID_W, 1.5 * GUI_GRID_H]; - (_display displayCtrl 1201) ctrlSetPosition [20 * GUI_GRID_W, 18.5 * GUI_GRID_H, 1 * GUI_GRID_W, 1 * GUI_GRID_H]; - (_display displayCtrl 1001) ctrlCommit 0; - (_display displayCtrl 1201) ctrlCommit 0; + (_display displayCtrl 1001) ctrlSetPosition [21 * GUI_GRID_W, 18 * GUI_GRID_H, 8 * GUI_GRID_W, 1.5 * GUI_GRID_H]; + (_display displayCtrl 1201) ctrlSetPosition [20 * GUI_GRID_W, 18.5 * GUI_GRID_H, 1 * GUI_GRID_W, 1 * GUI_GRID_H]; + (_display displayCtrl 1001) ctrlCommit 0; + (_display displayCtrl 1201) ctrlCommit 0; }; (_display displayCtrl 1002) ctrlSetText _scroll; showHUD false; \ No newline at end of file diff --git a/addons/interaction/functions/fnc_sortOptionsByPriority.sqf b/addons/interaction/functions/fnc_sortOptionsByPriority.sqf index d29ebd3e5f..28daa4e7e5 100644 --- a/addons/interaction/functions/fnc_sortOptionsByPriority.sqf +++ b/addons/interaction/functions/fnc_sortOptionsByPriority.sqf @@ -8,14 +8,14 @@ _count = count _actions; _index = 0; while {_index < _count - 1} do { - _actionN = + _actions select _index; - _actionM = + _actions select (_index + 1); + _actionN = + _actions select _index; + _actionM = + _actions select (_index + 1); - if (_actionN select 3 < _actionM select 3) then { - _actions set [_index, _actionM]; - _actions set [_index + 1, _actionN]; - _index = 0; - } else { - _index = _index + 1; - }; + if (_actionN select 3 < _actionM select 3) then { + _actions set [_index, _actionM]; + _actions set [_index + 1, _actionN]; + _index = 0; + } else { + _index = _index + 1; + }; }; diff --git a/addons/interaction/functions/fnc_updateTooltipPosition.sqf b/addons/interaction/functions/fnc_updateTooltipPosition.sqf index c4b2a6e102..27148c5aa3 100644 --- a/addons/interaction/functions/fnc_updateTooltipPosition.sqf +++ b/addons/interaction/functions/fnc_updateTooltipPosition.sqf @@ -5,9 +5,9 @@ disableSerialization; _ctrl = ctrlParent (_this select 0) displayCtrl 40; _ctrl ctrlSetPosition [ - (_this select 1) + 0.01 * safezoneW, - (_this select 2) + 0.01 * safezoneH, - 2.0 / 16 * safezoneW, - 0.3 / 9 * safezoneH + (_this select 1) + 0.01 * safezoneW, + (_this select 2) + 0.01 * safezoneH, + 2.0 / 16 * safezoneW, + 0.3 / 9 * safezoneH ]; _ctrl ctrlCommit 0; diff --git a/addons/interaction/script_component.hpp b/addons/interaction/script_component.hpp index 07fcac5740..caa87ce3ce 100644 --- a/addons/interaction/script_component.hpp +++ b/addons/interaction/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_INTERACTION - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_INTERACTION - #define DEBUG_SETTINGS DEBUG_SETTINGS_INTERACTION + #define DEBUG_SETTINGS DEBUG_SETTINGS_INTERACTION #endif #include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/main/About.hpp b/addons/main/About.hpp index 814fab7454..c455c43cc3 100644 --- a/addons/main/About.hpp +++ b/addons/main/About.hpp @@ -1,35 +1,35 @@ #include "script_dialog_defines.hpp" class ACE_ABOUT_DLG { - idd = 114137; - movingEnable = 0; - onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; - onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; - class controlsBackground { - class Contents : RscStructuredText { - idc = 1141371; - colorBackground[] = { 0, 0, 0, 0 }; - __SX(0.45); - __SY(0.25); - __SW(0.45); - __SH(0.6); - size = "0.025 * SafeZoneH"; - class Attributes { - font = "TahomaB"; - color = "#C8C8C8"; - align = "left"; - valign = "middle"; - shadow = true; - shadowColor = "#191970"; - size = "1"; - }; - }; - class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible - idc = 1141372; - __SX(0.065); - __SW(0.03); - text = ""; - action = ""; - }; - }; //controlsBackground + idd = 114137; + movingEnable = 0; + onLoad = "with uiNameSpace do { ACE_ABOUT_DLG = _this select 0; };"; + onKeyDown = "if((_this select 1) == 1) then {ACE_ABOUT_STP = true;};"; + class controlsBackground { + class Contents : RscStructuredText { + idc = 1141371; + colorBackground[] = { 0, 0, 0, 0 }; + __SX(0.45); + __SY(0.25); + __SW(0.45); + __SH(0.6); + size = "0.025 * SafeZoneH"; + class Attributes { + font = "TahomaB"; + color = "#C8C8C8"; + align = "left"; + valign = "middle"; + shadow = true; + shadowColor = "#191970"; + size = "1"; + }; + }; + class ACE_ABOUT_NEXT : ACE_ABOUT_CTRL { //dummy visible + idc = 1141372; + __SX(0.065); + __SW(0.03); + text = ""; + action = ""; + }; + }; //controlsBackground }; diff --git a/addons/main/CfgModuleCategories.hpp b/addons/main/CfgModuleCategories.hpp index ad8e18f15a..1f86959585 100644 --- a/addons/main/CfgModuleCategories.hpp +++ b/addons/main/CfgModuleCategories.hpp @@ -1,8 +1,8 @@ class CfgFactionClasses { - class NO_CATEGORY; - class ACE: NO_CATEGORY { - displayName = "ACE"; - priority = 2; - side = 7; - }; + class NO_CATEGORY; + class ACE: NO_CATEGORY { + displayName = "ACE"; + priority = 2; + side = 7; + }; }; \ No newline at end of file diff --git a/addons/main/about.sqf b/addons/main/about.sqf index 5d500c60d5..c9004edfe1 100644 --- a/addons/main/about.sqf +++ b/addons/main/about.sqf @@ -26,184 +26,184 @@ __cr_testers, ]; _pkeynam = { //local function - _shift = if (_shift > 0) then {42} else {0}; - _ctrl = if (_ctrl > 0) then {56} else {0}; - _alt = if (_alt > 0) then {29} else {0}; - _keys = [_shift,_ctrl,_alt,_key]; - _keystrg = "^"; - { - _mod = _x in [42,56,29]; - _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; - _knaml = [_knaml, " "] call CBA_fnc_split; - _knam = "^"; - {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; - _knam = [_knam, "^ ", ""] call CBA_fnc_replace; - _keystrg = _keystrg + "-" + _knam; - } forEach _keys; - _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; - _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; - _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; - _keystrg + _shift = if (_shift > 0) then {42} else {0}; + _ctrl = if (_ctrl > 0) then {56} else {0}; + _alt = if (_alt > 0) then {29} else {0}; + _keys = [_shift,_ctrl,_alt,_key]; + _keystrg = "^"; + { + _mod = _x in [42,56,29]; + _knaml = call compile format["format['%2',%1]",(keyName _x),"%1"]; + _knaml = [_knaml, " "] call CBA_fnc_split; + _knam = "^"; + {_k = _x; if (!_mod || (_k != (localize "STR_ACE_KN_LEFT") && _k != (localize "STR_ACE_KN_RIGHT"))) then {_knam = _knam + " " + _k}} forEach _knaml; + _knam = [_knam, "^ ", ""] call CBA_fnc_replace; + _keystrg = _keystrg + "-" + _knam; + } forEach _keys; + _keystrg = [_keystrg, "^ ", ""] call CBA_fnc_replace; + _keystrg = [_keystrg, "^-", ""] call CBA_fnc_replace; + _keystrg = [_keystrg, "^", "None"] call CBA_fnc_replace; + _keystrg }; _pkeys = { - _pary = []; - _tpages = []; - _cEvents = configFile/"CfgSettings"/"CBA"/"events"; - for "_i" from 0 to (count _cEvents) - 1 do { - _cSys = _cEvents select _i; - _tSys = configName _cSys; - if (isNumber ((_cSys select 0)/"key")) then { - //format system name - _aSys = [_tSys, "_"] call CBA_fnc_split; - _tS = "^"; - {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; - _tS = [_tS, "^ ", ""] call CBA_fnc_replace; - _tS = format["%1:",_tS]; - PUSH(_pary,_tS); - for "_j" from 0 to (count _cSys) - 1 do { - _c = _cSys select _j; - _tC = configName _c; - _tC = [_tC, "_", " "] call CBA_fnc_replace; - //key - _key = getNumber (_c/"key"); - _shift = getNumber (_c/"shift"); - _ctrl = getNumber (_c/"ctrl"); - _alt = getNumber (_c/"alt"); - _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; - _tC = format[" %1: %2",_tC,_keyn]; - PUSH(_pary,_tC); - }; - }; - if (count _pary > 20) then { //split full page - PUSH(_tpages,_pary); - _pary = []; - }; - }; - if (count _pary > 0) then { //partial page - PUSH(_tpages,_pary); - _pary = []; - }; - _tpages + _pary = []; + _tpages = []; + _cEvents = configFile/"CfgSettings"/"CBA"/"events"; + for "_i" from 0 to (count _cEvents) - 1 do { + _cSys = _cEvents select _i; + _tSys = configName _cSys; + if (isNumber ((_cSys select 0)/"key")) then { + //format system name + _aSys = [_tSys, "_"] call CBA_fnc_split; + _tS = "^"; + {if (_x != "ace" && _x != "sys") then {_tS = _tS + " " + _x}} forEach _aSys; + _tS = [_tS, "^ ", ""] call CBA_fnc_replace; + _tS = format["%1:",_tS]; + PUSH(_pary,_tS); + for "_j" from 0 to (count _cSys) - 1 do { + _c = _cSys select _j; + _tC = configName _c; + _tC = [_tC, "_", " "] call CBA_fnc_replace; + //key + _key = getNumber (_c/"key"); + _shift = getNumber (_c/"shift"); + _ctrl = getNumber (_c/"ctrl"); + _alt = getNumber (_c/"alt"); + _keyn = [_key,_shift,_ctrl,_alt] call _pkeynam; + _tC = format[" %1: %2",_tC,_keyn]; + PUSH(_pary,_tC); + }; + }; + if (count _pary > 20) then { //split full page + PUSH(_tpages,_pary); + _pary = []; + }; + }; + if (count _pary > 0) then { //partial page + PUSH(_tpages,_pary); + _pary = []; + }; + _tpages }; //pages (make sure each will fit within 24 lines, word wrap is on) switch(_menu) do { - case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) - _fadet = 13; - _page1 = _pcredits; - }; - case "SING": { - _fadet = 20; //fade time - _color = [1,1,1,1]; - //_bcolor = [0,0,0,0.3]; - _page1 = _pcredits; - _newpages = [] call _pkeys; - _pstart = 2; - _pcount = count _newpages; - _pnext = _pstart + _pcount; - }; - case "MULT": { - _fadet = 20; - _color = [1,1,1,1]; - //_bcolor = [0,0,0,0.3]; - _page1 = _pcredits; - _newpages = [] call _pkeys; - _pstart = 2; - _pcount = count _newpages; - _pnext = _pstart + _pcount; - }; - default {}; + case "MAIN": { //note: not all scripting commands available on main menu (not compiled yet?) + _fadet = 13; + _page1 = _pcredits; + }; + case "SING": { + _fadet = 20; //fade time + _color = [1,1,1,1]; + //_bcolor = [0,0,0,0.3]; + _page1 = _pcredits; + _newpages = [] call _pkeys; + _pstart = 2; + _pcount = count _newpages; + _pnext = _pstart + _pcount; + }; + case "MULT": { + _fadet = 20; + _color = [1,1,1,1]; + //_bcolor = [0,0,0,0.3]; + _page1 = _pcredits; + _newpages = [] call _pkeys; + _pstart = 2; + _pcount = count _newpages; + _pnext = _pstart + _pcount; + }; + default {}; }; //main menu display if (typeName(_data select 0) == "DISPLAY") then { - _display = _data select 0; + _display = _data select 0; }; if (typeName(_data select 0) == "CONTROL") then { - _control = _data select 0; - _display = ctrlParent _control; + _control = _data select 0; + _display = ctrlParent _control; }; //dynamic pages _pnames = []; for "_x" from _pstart to _pnext - 1 do { - _pnam = format ["_page%1",_x]; - PUSH(_pnames,_pnam); + _pnam = format ["_page%1",_x]; + PUSH(_pnames,_pnam); }; private _pnames; for "_x" from 0 to _pcount - 1 do { - call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; + call compile format ["%1 = %2", _pnames select _x, _newpages select _x]; }; //get num pages _pages = 0; _run = true; while {_run} do { - INC(_pages); - if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; + INC(_pages); + if (isNil format ["_page%1", _pages]) exitWith {_pages = _pages - 1; _run = false}; }; if (_pages > 0) then { - //Dialog - createDialog "ACE_ABOUT_DLG"; - _disp = uiNamespace getVariable "ACE_ABOUT_DLG"; - _ctrl = _disp displayCtrl 1141371; - _next = _disp displayCtrl 1141372; + //Dialog + createDialog "ACE_ABOUT_DLG"; + _disp = uiNamespace getVariable "ACE_ABOUT_DLG"; + _ctrl = _disp displayCtrl 1141371; + _next = _disp displayCtrl 1141372; - if (_pages > 1) then {_next ctrlSetText "Next"}; + if (_pages > 1) then {_next ctrlSetText "Next"}; - _ctrl ctrlSetFade 1; - _ctrl ctrlCommit 0; - _ctrl ctrlSetFade 0; - _ctrl ctrlCommit 3; + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 3; - ACE_ABOUT_INC = 0; - _input = { //local function - _nesc = isNil "ACE_ABOUT_STP"; - if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control - _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; - if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; - }; + ACE_ABOUT_INC = 0; + _input = { //local function + _nesc = isNil "ACE_ABOUT_STP"; + if (_pages == 1) then {ACE_ABOUT_INC = 0}; //ignore special control + _unset = (ACE_ABOUT_INC == 0) && ACE_ABOUT_RUN; + if (_unset && _nesc) then {false} else {_fadet = _fadet + 5; true}; + }; - //by default cycle - for "_p" from 1 to _pages do { - _text = ""; - _page = call compile format["_page%1",_p]; - _curPage = _p; - { - _text = _text + _x + "
"; - _ctrl ctrlSetStructuredText parseText _text; - if (call _input) exitWith {_p = _pages}; - if (_x != "") then {uisleep 0.8}; - } forEach _page; - }; + //by default cycle + for "_p" from 1 to _pages do { + _text = ""; + _page = call compile format["_page%1",_p]; + _curPage = _p; + { + _text = _text + _x + "
"; + _ctrl ctrlSetStructuredText parseText _text; + if (call _input) exitWith {_p = _pages}; + if (_x != "") then {uisleep 0.8}; + } forEach _page; + }; - _run = true; - while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { - _ctrl ctrlSetFade 0; - _ctrl ctrlCommit 0; - if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; - if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; + _run = true; + while {if (isNil "ACE_ABOUT_STP") then {_run} else {false}} do { + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0; + if (!isNil "_color") then {_ctrl ctrlSetTextColor _color}; + if (!isNil "_bcolor") then {_ctrl ctrlSetBackgroundColor _bcolor}; - _curPage = _curPage + ACE_ABOUT_INC; - if (_curPage > _pages) then {_curPage = 1}; - if (_curPage <= 0) then {_curPage = 1}; - ACE_ABOUT_INC = 0; + _curPage = _curPage + ACE_ABOUT_INC; + if (_curPage > _pages) then {_curPage = 1}; + if (_curPage <= 0) then {_curPage = 1}; + ACE_ABOUT_INC = 0; - if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; + if (!ACE_ABOUT_RUN) then {ACE_ABOUT_RUN = true}; - _text = ""; - _page = call compile format ["_page%1",_curPage]; - {_text = _text + _x + "
"} forEach _page; - _ctrl ctrlSetStructuredText parseText _text; + _text = ""; + _page = call compile format ["_page%1",_curPage]; + {_text = _text + _x + "
"} forEach _page; + _ctrl ctrlSetStructuredText parseText _text; - _ctrl ctrlSetFade 1; - _ctrl ctrlCommit _fadet; + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit _fadet; - _time = time + _fadet + 2; - waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; - }; //while RUN + _time = time + _fadet + 2; + waitUntil{uisleep 1; _run = call _input; _faded = time > _time; (_run || _faded)}; + }; //while RUN }; ACE_ABOUT_STP = Nil; ACE_ABOUT_RUN = Nil; diff --git a/addons/main/license.sqf b/addons/main/license.sqf index e97d9c51a3..d078710247 100644 --- a/addons/main/license.sqf +++ b/addons/main/license.sqf @@ -16,10 +16,10 @@ Waiver Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. Other Rights In no way are any of the following rights affected by the license: - - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; - - The author's moral rights; - - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. - + - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; + - The author's moral rights; + - Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. + Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page. diff --git a/addons/main/script_component.hpp b/addons/main/script_component.hpp index 8c224ed41f..9a18b78a7a 100644 --- a/addons/main/script_component.hpp +++ b/addons/main/script_component.hpp @@ -4,11 +4,11 @@ // #define DEBUG_MODE_FULL #ifdef DEBUG_ENABLED_CORE - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_CORE - #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE + #define DEBUG_SETTINGS DEBUG_SETTINGS_CORE #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/main/script_config.hpp b/addons/main/script_config.hpp index ac8e18fa12..e39240286e 100644 --- a/addons/main/script_config.hpp +++ b/addons/main/script_config.hpp @@ -1,38 +1,38 @@ -#define true 1 -#define false 0 +#define true 1 +#define false 0 -#define private 0 -#define protected 1 -#define public 2 +#define private 0 +#define protected 1 +#define public 2 -#define TEast 0 -#define TWest 1 -#define TGuerrila 2 -#define TCivilian 3 -#define TSideUnknown 4 -#define TEnemy 5 -#define TFriendly 6 -#define TLogic 7 +#define TEast 0 +#define TWest 1 +#define TGuerrila 2 +#define TCivilian 3 +#define TSideUnknown 4 +#define TEnemy 5 +#define TFriendly 6 +#define TLogic 7 -#define VSoft 0 -#define VArmor 1 -#define VAir 2 +#define VSoft 0 +#define VArmor 1 +#define VAir 2 -#define LockNo 0 -#define LockCadet 1 -#define LockYes 2 +#define LockNo 0 +#define LockCadet 1 +#define LockYes 2 -#define ReadAndWrite 0 -#define ReadAndCreate 1 -#define ReadOnly 2 -#define ReadOnlyVerified 3 +#define ReadAndWrite 0 +#define ReadAndCreate 1 +#define ReadOnly 2 +#define ReadOnlyVerified 3 -#define WeaponNoSlot 0 // dummy weapons -#define WeaponSlotPrimary 1 // primary weapons -#define WeaponSlotSecondary 16 // secondary weapons -#define WeaponSlotItem 256 // items -#define WeaponSlotBinocular 4096 // binocular -#define WeaponHardMounted 65536 +#define WeaponNoSlot 0 // dummy weapons +#define WeaponSlotPrimary 1 // primary weapons +#define WeaponSlotSecondary 16 // secondary weapons +#define WeaponSlotItem 256 // items +#define WeaponSlotBinocular 4096 // binocular +#define WeaponHardMounted 65536 #define CanSeeRadar 1 #define CanSeeRye 2 diff --git a/addons/main/script_debug.hpp b/addons/main/script_debug.hpp index 26475fb226..578d76cc91 100644 --- a/addons/main/script_debug.hpp +++ b/addons/main/script_debug.hpp @@ -32,15 +32,15 @@ PERFORMANCE COUNTERS SECTION #ifdef ENABLE_PERFORMANCE_COUNTERS #define CBA_fnc_addPerFrameHandler { _ret = [(_this select 0), (_this select 1), (_this select 2), #function] call CBA_fnc_addPerFrameHandler; if(isNil "ACE_PFH_COUNTER" ) then { ACE_PFH_COUNTER=[]; }; ACE_PFH_COUNTER pushBack [[_ret, __FILE__, __LINE__], [(_this select 0), (_this select 1), (_this select 2)]]; _ret } - - #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); - #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; - #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; + + #define CREATE_COUNTER(x) if(isNil "ACE_COUNTERS" ) then { ACE_COUNTERS=[]; }; GVAR(DOUBLES(x,counter))=[]; GVAR(DOUBLES(x,counter)) set[0, QUOTE(GVAR(DOUBLES(x,counter)))]; GVAR(DOUBLES(x,counter)) set[1, diag_tickTime]; ACE_COUNTERS pushBack GVAR(DOUBLES(x,counter)); + #define BEGIN_COUNTER(x) if(isNil QUOTE(GVAR(DOUBLES(x,counter)))) then { CREATE_COUNTER(x) }; GVAR(DOUBLES(x,counter)) set[2, diag_tickTime]; + #define END_COUNTER(x) GVAR(DOUBLES(x,counter)) pushBack [(GVAR(DOUBLES(x,counter)) select 2), diag_tickTime]; - #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) + #define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC) #else - #define CREATE_COUNTER(x) /* disabled */ - #define BEGIN_COUNTER(x) /* disabled */ - #define END_COUNTER(x) /* disabled */ - #define DUMP_COUNTERS /* disabled */ + #define CREATE_COUNTER(x) /* disabled */ + #define BEGIN_COUNTER(x) /* disabled */ + #define END_COUNTER(x) /* disabled */ + #define DUMP_COUNTERS /* disabled */ #endif \ No newline at end of file diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index ff2c4d615e..79f95545ca 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -43,7 +43,7 @@ #define ACE_ITEMS_CIVILIAN "ItemWatch" -#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072" +#define ACE_DEFAULT_SLOTS "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072" #define ACE_NOGRIP handAnim[] = {} #define ACE_DISTANCE_DEFAULT distanceZoomMin = 300; distanceZoomMax = 300 @@ -51,30 +51,30 @@ // #include "script_macros_optics.hpp" //ToDo #define ACE_NOZEROING discreteDistance[] = {}; \ - discreteDistanceInitIndex = 0; \ - weaponInfoType = "RscWeaponEmpty" + discreteDistanceInitIndex = 0; \ + weaponInfoType = "RscWeaponEmpty" #define ACE_NOTURRETZEROING discreteDistance[] = {}; \ - discreteDistanceInitIndex = 0; \ - turretInfoType = "RscWeaponEmpty" + discreteDistanceInitIndex = 0; \ + turretInfoType = "RscWeaponEmpty" #define ACE_LASER irLaserPos = "laser pos"; \ - irLaserEnd = "laser dir"; \ - irDistance = 300 + irLaserEnd = "laser dir"; \ + irDistance = 300 #define ACE_LASER_DISTANCE_VANILLA irDistance = 300 -#define ACE_NOLASER irLaserPos = "laser pos"; \ - irLaserEnd = "laser dir"; \ - irDistance = 0 +#define ACE_NOLASER irLaserPos = "laser pos"; \ + irLaserEnd = "laser dir"; \ + irDistance = 0 #define ACE_SUPPRESSED ace_suppressed = 1; \ - fireLightDuration = 0; \ - fireLightIntensity = 0 + fireLightDuration = 0; \ + fireLightIntensity = 0 // TODO: Cleanup in all the configs around -#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;} -#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;} +#define ACE_M_MAG(x,y) class _xx_##x {magazine = ##x; count = ##y;} +#define ACE_M_WEP(x,y) class _xx_##x {weapon = ##x; count = ##y;} #define ACE_M_ITEM(x,y) class _xx_##x {name = ##x; count = ##y;} #define ACE_M_BAG(x,y) class _xx_##x {backpack = ##x; count = ##y;} @@ -82,11 +82,11 @@ // Vehicle defines // ACE_canBeLoad = This vehicle acts as transporter, i.e you can load stuff into it // ACE_canBeCargo = This vehicle acts as cargo, i.e you can load this item into other vehicles -#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true -#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false -#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false -#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false -#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_CARGO_FRONT ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = true +#define ACE_CARGO_ONLY ACE_canBeLoad = false; ACE_canBeCargo = true; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_LOAD_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false +#define ACE_GEAR_ONLY ACE_canBeLoad = true; ACE_canBeCargo = false; ACE_canGear = true; ACE_canLoadFront = false +#define ACE_NOCARGOLOAD ACE_canBeLoad = false; ACE_canBeCargo = false; ACE_canGear = false; ACE_canLoadFront = false // Increased FOV for tank driver // Increased Default US Tank driver optic @@ -134,32 +134,32 @@ #undef BWC_CONFIG #define BWC_CONFIG(NAME) class NAME { \ - units[] = {}; \ - weapons[] = {}; \ - requiredVersion = REQUIRED_VERSION; \ - requiredAddons[] = {}; \ - version = VERSION; \ - ACE_BWC; \ + units[] = {}; \ + weapons[] = {}; \ + requiredVersion = REQUIRED_VERSION; \ + requiredAddons[] = {}; \ + version = VERSION; \ + ACE_BWC; \ } #define ACE_FLASHLIGHT class FlashLight { \ - color[] = {0.9, 0.9, 0.7, 0.9}; \ - ambient[] = {0.1, 0.1, 0.1, 1.0}; \ - position = "flash dir"; \ - direction = "flash"; \ - angle = 30; \ - scale[] = {1, 1, 0.5}; \ - brightness = 0.1; \ - } + color[] = {0.9, 0.9, 0.7, 0.9}; \ + ambient[] = {0.1, 0.1, 0.1, 1.0}; \ + position = "flash dir"; \ + direction = "flash"; \ + angle = 30; \ + scale[] = {1, 1, 0.5}; \ + brightness = 0.1; \ + } #define ACE_SMALL_FLASHLIGHT class FlashLight { \ - color[] = {0.9, 0.9, 0.7, 0.9}; \ - ambient[] = {0.1, 0.1, 0.1, 1.0}; \ - position = "flash dir"; \ - direction = "flash"; \ - angle = 20; \ - scale[] = {0.9, 0.9, 0.4}; \ - brightness = 0.09; \ - } + color[] = {0.9, 0.9, 0.7, 0.9}; \ + ambient[] = {0.1, 0.1, 0.1, 1.0}; \ + position = "flash dir"; \ + direction = "flash"; \ + angle = 20; \ + scale[] = {0.9, 0.9, 0.4}; \ + brightness = 0.09; \ + } // Addaction defines for colored text #define ACE_TEXT_ORANGE(Text) ("" + ##Text + "") @@ -172,8 +172,8 @@ #define EGVAR(module,var) TRIPLES(PREFIX,module,var) #define QEGVAR(module,var) QUOTE(EGVAR(module,var)) -#define DGVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(GVAR(varName)) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(GVAR(varName))); }; GVAR(varName) -#define DVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(varName) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(varName)); }; varName +#define DGVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(GVAR(varName)) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(GVAR(varName))); }; GVAR(varName) +#define DVAR(varName) if(isNil "ACE_DEBUG_NAMESPACE") then { ACE_DEBUG_NAMESPACE = []; }; if(!(QUOTE(varName) in ACE_DEBUG_NAMESPACE)) then { PUSH(ACE_DEBUG_NAMESPACE, QUOTE(varName)); }; varName #define DFUNC(var1) TRIPLES(ADDON,fnc,var1) #define DEFUNC(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) @@ -223,23 +223,23 @@ #ifdef DISABLE_COMPILE_CACHE - #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) + #define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) #else - #define PREP(fncName) DFUNC(fncName) = QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) call SLX_XEH_COMPILE + #define PREP(fncName) DFUNC(fncName) = QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)) call SLX_XEH_COMPILE #endif #define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf)) -#define HASH_CREATE ([] call EFUNC(common,hashCreate)) -#define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) -#define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) -#define HASH_REM(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashRem)) -#define HASH_HASKEY(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashHasKey)) +#define HASH_CREATE ([] call EFUNC(common,hashCreate)) +#define HASH_SET(hash, key, val) ([hash, key, val, __FILE__, __LINE__] call EFUNC(common,hashSet)) +#define HASH_GET(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashGet)) +#define HASH_REM(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashRem)) +#define HASH_HASKEY(hash, key) ([hash, key, __FILE__, __LINE__] call EFUNC(common,hashHasKey)) -#define HASHLIST_CREATELIST(keys) ([keys] call EFUNC(common,hashListCreateList)) -#define HASHLIST_CREATEHASH(hashList) ([hashList] call EFUNC(common,hashListCreateHash)) -#define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) -#define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) -#define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) +#define HASHLIST_CREATELIST(keys) ([keys] call EFUNC(common,hashListCreateList)) +#define HASHLIST_CREATEHASH(hashList) ([hashList] call EFUNC(common,hashListCreateHash)) +#define HASHLIST_SELECT(hashList, index) ([hashList, index, __FILE__, __LINE__] call EFUNC(common,hashListSelect)) +#define HASHLIST_SET(hashList, index, value) ([hashList, index, value, __FILE__, __LINE__] call EFUNC(common,hashListSet)) +#define HASHLIST_PUSH(hashList, value) ([hashList, value, __FILE__, __LINE__] call EFUNC(common,hashListPush)) #include "script_debug.hpp" \ No newline at end of file diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index c8dfd56b4c..6ef5ec3f68 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -17,39 +17,39 @@ #define REQUIRED_VERSION 0.5 /* - #define DEBUG_ENABLED_ADDONS - #define DEBUG_ENABLED_ATTACHMENTS - #define DEBUG_ENABLED_weapons_backblast - #define DEBUG_ENABLED_BLOOD - #define DEBUG_ENABLED_CARTRIDGES - #define DEBUG_ENABLED_CRATERS - #define DEBUG_ENABLED_CREWPROTECTION - #define DEBUG_ENABLED_DUMMIES - #define DEBUG_ENABLED_EJECT - #define DEBUG_ENABLED_EXPLOSIVES - #define DEBUG_ENABLED_FLARES - #define DEBUG_ENABLED_FLASHBANG - #define DEBUG_ENABLED_GRENADETHROW - #define DEBUG_ENABLED_HUNTIR - #define DEBUG_ENABLED_INTERACTION - #define DEBUG_ENABLED_IRSTROBE - #define DEBUG_ENABLED_MULTI_BARREL - #define DEBUG_ENABLED_MUZZLEBLAST - #define DEBUG_ENABLED_NVG - #define DEBUG_ENABLED_weapons_overheating - #define DEBUG_ENABLED_RECOILDUST - #define DEBUG_ENABLED_ROCKET_BALLISTICS - #define DEBUG_ENABLED_SANDBAG - #define DEBUG_ENABLED_SHOTGUN - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL - #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE - #define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE - #define DEBUG_ENABLED_TRACERS - #define DEBUG_ENABLED_TRACKING - #define DEBUG_ENABLED_VIEWBLOCK - #define DEBUG_ENABLED_VEHICLE - #define DEBUG_ENABLED_vehicle_damage - #define DEBUG_ENABLED_WEAPONREST - #define DEBUG_ENABLED_WOUNDS + #define DEBUG_ENABLED_ADDONS + #define DEBUG_ENABLED_ATTACHMENTS + #define DEBUG_ENABLED_weapons_backblast + #define DEBUG_ENABLED_BLOOD + #define DEBUG_ENABLED_CARTRIDGES + #define DEBUG_ENABLED_CRATERS + #define DEBUG_ENABLED_CREWPROTECTION + #define DEBUG_ENABLED_DUMMIES + #define DEBUG_ENABLED_EJECT + #define DEBUG_ENABLED_EXPLOSIVES + #define DEBUG_ENABLED_FLARES + #define DEBUG_ENABLED_FLASHBANG + #define DEBUG_ENABLED_GRENADETHROW + #define DEBUG_ENABLED_HUNTIR + #define DEBUG_ENABLED_INTERACTION + #define DEBUG_ENABLED_IRSTROBE + #define DEBUG_ENABLED_MULTI_BARREL + #define DEBUG_ENABLED_MUZZLEBLAST + #define DEBUG_ENABLED_NVG + #define DEBUG_ENABLED_weapons_overheating + #define DEBUG_ENABLED_RECOILDUST + #define DEBUG_ENABLED_ROCKET_BALLISTICS + #define DEBUG_ENABLED_SANDBAG + #define DEBUG_ENABLED_SHOTGUN + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_AT + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_GL + #define DEBUG_ENABLED_SIGHT_ADJUSTMENT_RIFLE + #define DEBUG_ENABLED_SMAW_SPOTTINGRIFLE + #define DEBUG_ENABLED_TRACERS + #define DEBUG_ENABLED_TRACKING + #define DEBUG_ENABLED_VIEWBLOCK + #define DEBUG_ENABLED_VEHICLE + #define DEBUG_ENABLED_vehicle_damage + #define DEBUG_ENABLED_WEAPONREST + #define DEBUG_ENABLED_WOUNDS */ diff --git a/addons/map/script_component.hpp b/addons/map/script_component.hpp index 0c8f7429ab..3f126eb653 100644 --- a/addons/map/script_component.hpp +++ b/addons/map/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_MAP - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_MAP - #define DEBUG_SETTINGS DEBUG_SETTINGS_MAP + #define DEBUG_SETTINGS DEBUG_SETTINGS_MAP #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/maptools/XEH_preInit.sqf b/addons/maptools/XEH_preInit.sqf index 20777fb118..2da38996c3 100644 --- a/addons/maptools/XEH_preInit.sqf +++ b/addons/maptools/XEH_preInit.sqf @@ -24,8 +24,8 @@ PREP(updateMapToolMarkers); PREP(updateLineMarker); if (isServer) then { - GVAR(drawing_serverLineMarkers) = []; - publicVariable QGVAR(drawing_serverLineMarkers); + GVAR(drawing_serverLineMarkers) = []; + publicVariable QGVAR(drawing_serverLineMarkers); }; //Add Event Handlers: diff --git a/addons/maptools/functions/fnc_openMapGpsUpdate.sqf b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf index a4d25f8157..a26a02dd34 100644 --- a/addons/maptools/functions/fnc_openMapGpsUpdate.sqf +++ b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf @@ -4,8 +4,8 @@ #include "script_component.hpp" if ((!("ItemGPS" in assigneditems ACE_player)) || {isNull (uiNamespace getVariable [QGVAR(ui_mapGpsDisplay), displayNull])}) exitWith { - ("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; //close GPS RSC - [(_this select 1)] call CBA_fnc_removePerFrameHandler; //remove frameHandler + ("RscACE_MapGps" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; //close GPS RSC + [(_this select 1)] call CBA_fnc_removePerFrameHandler; //remove frameHandler }; disableSerialization; diff --git a/addons/maptools/script_component.hpp b/addons/maptools/script_component.hpp index a3dad97a49..df2a8d3f62 100644 --- a/addons/maptools/script_component.hpp +++ b/addons/maptools/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_MAPTOOLS - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_MAPTOOLS - #define DEBUG_SETTINGS DEBUG_SETTINGS_MAPTOOLS + #define DEBUG_SETTINGS DEBUG_SETTINGS_MAPTOOLS #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/medical/XEH_init.sqf b/addons/medical/XEH_init.sqf index 0ded7d471f..2f840fe950 100644 --- a/addons/medical/XEH_init.sqf +++ b/addons/medical/XEH_init.sqf @@ -6,5 +6,5 @@ _unit = _this select 0; _unit addEventHandler ["HandleDamage", {_this call FUNC(handleDamage)}]; if (local _unit) then { - [_unit] call FUNC(init); + [_unit] call FUNC(init); }; diff --git a/addons/medical/functions/fnc_actionDropUnit.sqf b/addons/medical/functions/fnc_actionDropUnit.sqf index db1c02aced..53883c93c1 100644 --- a/addons/medical/functions/fnc_actionDropUnit.sqf +++ b/addons/medical/functions/fnc_actionDropUnit.sqf @@ -17,7 +17,7 @@ private "_caller"; _caller = _this select 0; if (!isnil QGVAR(DROP_ADDACTION)) then { - [_caller,objNull] call EFUNC(common,carryObj); - _caller removeAction GVAR(DROP_ADDACTION); + [_caller,objNull] call EFUNC(common,carryObj); + _caller removeAction GVAR(DROP_ADDACTION); GVAR(DROP_ADDACTION) = nil; }; diff --git a/addons/medical/functions/fnc_copyDeadBody.sqf b/addons/medical/functions/fnc_copyDeadBody.sqf index 68d5a356ec..8e476b8662 100644 --- a/addons/medical/functions/fnc_copyDeadBody.sqf +++ b/addons/medical/functions/fnc_copyDeadBody.sqf @@ -67,9 +67,9 @@ _newUnit selectWeapon (primaryWeapon _newUnit); // We are attaching the old unit and hiding it, so we can keep the original unit until later. _oldBody attachTo [_newUnit, [0,0,0]]; if (isMultiplayer) then { - hideObjectGlobal _oldBody; + hideObjectGlobal _oldBody; } else { - hideObject _oldBody; + hideObject _oldBody; }; _newUnit setvariable [QGVAR(copyOfUnit), _oldBody, true]; diff --git a/addons/medical/functions/fnc_dropDownTriageCard.sqf b/addons/medical/functions/fnc_dropDownTriageCard.sqf index 5e763822db..6ea910b7af 100644 --- a/addons/medical/functions/fnc_dropDownTriageCard.sqf +++ b/addons/medical/functions/fnc_dropDownTriageCard.sqf @@ -22,11 +22,11 @@ if (isnil "_display") exitwith {}; _pos = [0,0,0,0]; if (_show) then { - _pos = ctrlPosition (_display displayCtrl 2001); + _pos = ctrlPosition (_display displayCtrl 2001); }; for "_idc" from 2002 to 2006 step 1 do { - _pos set [1, (_pos select 1) + (_pos select 3)]; - _ctrl = (_display displayCtrl _idc); - _ctrl ctrlSetPosition _pos; - _ctrl ctrlCommit 0; + _pos set [1, (_pos select 1) + (_pos select 3)]; + _ctrl = (_display displayCtrl _idc); + _ctrl ctrlSetPosition _pos; + _ctrl ctrlCommit 0; }; diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf index eb35b3e8c5..b4e40984ae 100644 --- a/addons/medical/functions/fnc_handleBandageOpening.sqf +++ b/addons/medical/functions/fnc_handleBandageOpening.sqf @@ -38,81 +38,81 @@ _reopeningMaxDelay = 200; _config = (ConfigFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging"); if (isClass (_config >> _bandage)) then { _config = (_config >> _bandage); - _reopeningChance = getNumber (_config >> "reopeningChance"); - _reopeningMinDelay = getNumber (_config >> "reopeningMinDelay"); - _reopeningMaxDelay = getNumber (_config >> "reopeningMaxDelay") max _reopeningMinDelay; + _reopeningChance = getNumber (_config >> "reopeningChance"); + _reopeningMinDelay = getNumber (_config >> "reopeningMinDelay"); + _reopeningMaxDelay = getNumber (_config >> "reopeningMaxDelay") max _reopeningMinDelay; }; if (isClass (_config >> _className)) then { _woundTreatmentConfig = (_config >> _className); if (isNumber (_woundTreatmentConfig >> "reopeningChance")) then { - _reopeningChance = getNumber (_woundTreatmentConfig >> "reopeningChance"); - }; + _reopeningChance = getNumber (_woundTreatmentConfig >> "reopeningChance"); + }; if (isNumber (_woundTreatmentConfig >> "reopeningMinDelay")) then { - _reopeningMinDelay = getNumber (_woundTreatmentConfig >> "reopeningMinDelay"); - }; + _reopeningMinDelay = getNumber (_woundTreatmentConfig >> "reopeningMinDelay"); + }; if (isNumber (_woundTreatmentConfig >> "reopeningMaxDelay")) then { - _reopeningMaxDelay = getNumber (_woundTreatmentConfig >> "reopeningMaxDelay") max _reopeningMinDelay; - }; + _reopeningMaxDelay = getNumber (_woundTreatmentConfig >> "reopeningMaxDelay") max _reopeningMinDelay; + }; }; _bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []]; _exist = false; _injuryId = _injury select 0; { - if ((_x select 0) == _injuryId) exitwith { - _exist = true; - _existingInjury = _x; - _existingInjury set [3, (_existingInjury select 3) + _impact]; - _bandagedWounds set [_foreachIndex, _existingInjury]; - }; + if ((_x select 0) == _injuryId) exitwith { + _exist = true; + _existingInjury = _x; + _existingInjury set [3, (_existingInjury select 3) + _impact]; + _bandagedWounds set [_foreachIndex, _existingInjury]; + }; }foreach _bandagedWounds; if !(_exist) then { - // [ID, classID, bodypart, percentage treated, bloodloss rate] - _bandagedWounds pushback [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4]; + // [ID, classID, bodypart, percentage treated, bloodloss rate] + _bandagedWounds pushback [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4]; }; _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; // Check if we are ever going to reopen this if (random(1) <= _reopeningChance) then { - _delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay); - [{ - private ["_target", "_impact", "_part", "_injuryIndex", "_bandage", "_injury", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"]; - _target = _this select 0; - _impact = _this select 1; - _part = _this select 2; - _injuryIndex = _this select 3; - _injury = _this select 4; + _delay = _reopeningMinDelay + random(_reopeningMaxDelay - _reopeningMinDelay); + [{ + private ["_target", "_impact", "_part", "_injuryIndex", "_bandage", "_injury", "_openWounds", "_selectedInjury","_bandagedWounds","_exist"]; + _target = _this select 0; + _impact = _this select 1; + _part = _this select 2; + _injuryIndex = _this select 3; + _injury = _this select 4; - if (alive _target) then { - _openWounds = _target getvariable [QGVAR(openWounds), []]; - if ((count _openWounds)-1 < _injuryIndex) exitwith {}; - _selectedInjury = _openWounds select _injuryIndex; - if (_selectedInjury select 0 == _injury select 0) then { // matching the IDs - _selectedInjury set [3, (_selectedInjury select 3) + _impact]; - _openWounds set [_injuryIndex, _selectedInjury]; - _target setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC]; - if (USE_WOUND_EVENT_SYNC) then { - ["medical_propagateWound", [_target, _selectedInjury]] call EFUNC(common,globalEvent); - }; - _bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []]; - _exist = false; - _injuryId = _injury select 0; - { - if ((_x select 0) == _injuryId) exitwith { - _exist = true; - _existingInjury = _x; - _existingInjury set [3, ((_existingInjury select 3) - _impact) max 0]; - _bandagedWounds set [_foreachIndex, _existingInjury]; - }; - }foreach _bandagedWounds; + if (alive _target) then { + _openWounds = _target getvariable [QGVAR(openWounds), []]; + if ((count _openWounds)-1 < _injuryIndex) exitwith {}; + _selectedInjury = _openWounds select _injuryIndex; + if (_selectedInjury select 0 == _injury select 0) then { // matching the IDs + _selectedInjury set [3, (_selectedInjury select 3) + _impact]; + _openWounds set [_injuryIndex, _selectedInjury]; + _target setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC]; + if (USE_WOUND_EVENT_SYNC) then { + ["medical_propagateWound", [_target, _selectedInjury]] call EFUNC(common,globalEvent); + }; + _bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []]; + _exist = false; + _injuryId = _injury select 0; + { + if ((_x select 0) == _injuryId) exitwith { + _exist = true; + _existingInjury = _x; + _existingInjury set [3, ((_existingInjury select 3) - _impact) max 0]; + _bandagedWounds set [_foreachIndex, _existingInjury]; + }; + }foreach _bandagedWounds; - if (_exist) then { - _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; - }; - }; - // Otherwise something went wrong, we we don't reopen them.. - }; - }, [_target, _impact, _part, _injuryIndex, _injury], _delay, 0] call EFUNC(common,waitAndExecute); + if (_exist) then { + _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true]; + }; + }; + // Otherwise something went wrong, we we don't reopen them.. + }; + }, [_target, _impact, _part, _injuryIndex, _injury], _delay, 0] call EFUNC(common,waitAndExecute); }; diff --git a/addons/medical/functions/fnc_handleKilled.sqf b/addons/medical/functions/fnc_handleKilled.sqf index 1a602bd702..ce0f087836 100644 --- a/addons/medical/functions/fnc_handleKilled.sqf +++ b/addons/medical/functions/fnc_handleKilled.sqf @@ -24,9 +24,9 @@ if (GVAR(level) >= 2) then { _unit setvariable [QGVAR(airwayStatus), 0]; if (USE_WOUND_EVENT_SYNC) then { - _openWounds = _unit getvariable [QGVAR(openWounds), []]; - { - ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); - }foreach _openWounds; - }; + _openWounds = _unit getvariable [QGVAR(openWounds), []]; + { + ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); + }foreach _openWounds; + }; }; diff --git a/addons/medical/functions/fnc_onCarryObjectDropped.sqf b/addons/medical/functions/fnc_onCarryObjectDropped.sqf index 8f6dd57310..6a6a990d53 100644 --- a/addons/medical/functions/fnc_onCarryObjectDropped.sqf +++ b/addons/medical/functions/fnc_onCarryObjectDropped.sqf @@ -33,7 +33,7 @@ if (_carrying >= 0) then { _target setvariable [QGVAR(hasCopy), nil, true]; }; - _caller setvariable [QGVAR(isCarrying), -1, true]; + _caller setvariable [QGVAR(isCarrying), -1, true]; if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { _caller removeWeapon "ACE_FakePrimaryWeapon"; }; diff --git a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf index a32288d0a6..c160e47ea0 100644 --- a/addons/medical/functions/fnc_onWoundUpdateRequest.sqf +++ b/addons/medical/functions/fnc_onWoundUpdateRequest.sqf @@ -20,8 +20,8 @@ _lastId = _this select 1; _originOfrequest = _this select 2; if (local _unit) then { - _openWounds = _unit getvariable [QGVAR(openWounds), []]; - { - ["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent); - }foreach _openWounds; + _openWounds = _unit getvariable [QGVAR(openWounds), []]; + { + ["medical_propagateWound", [_originOfrequest], [_unit, _x]] call EFUNC(common,targetEvent); + }foreach _openWounds; }; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf index 6584569227..b08057f615 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf @@ -27,7 +27,7 @@ _items = _this select 4; _specificSpot = if (count _this > 6) then {_this select 6} else {-1}; if !([_target] call FUNC(hasMedicalEnabled)) exitwith { - _this call FUNC(treatmentBasic_bandage); + _this call FUNC(treatmentBasic_bandage); }; [[_target, _className, _selectionName, _specificSpot], QUOTE(DFUNC(treatmentAdvanced_bandageLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf index ead2bf9d52..bdfb95fb2a 100644 --- a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf @@ -24,5 +24,5 @@ _className = _this select 3; [_target, false] call FUNC(setUnconscious); if (_target getvariable [QGVAR(inReviveState), false]) then { - _target setvariable [QGVAR(inReviveState), nil, true]; + _target setvariable [QGVAR(inReviveState), nil, true]; }; diff --git a/addons/medical/functions/fnc_treatmentIVLocal.sqf b/addons/medical/functions/fnc_treatmentIVLocal.sqf index b0b5ce6a7f..66ecdf9d90 100644 --- a/addons/medical/functions/fnc_treatmentIVLocal.sqf +++ b/addons/medical/functions/fnc_treatmentIVLocal.sqf @@ -37,6 +37,6 @@ _varName = format["ACE_Medical_IVVolume_%1",_typeOf]; _target setvariable [_varName, (_target getvariable [_varName, 0]) + _volumeAdded, true]; if !(_varName in GVAR(IVBags)) then { - GVAR(IVBags) pushback _varName; - publicVariable QGVAR(IVBags); + GVAR(IVBags) pushback _varName; + publicVariable QGVAR(IVBags); }; diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index 1a22e191fd..d4f853374c 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -30,12 +30,12 @@ if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { _caller removeWeapon "ACE_FakePrimaryWeapon"; }; if (vehicle _caller == _caller) then { - [_caller, _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""], 1] call EFUNC(common,doAnimation); + [_caller, _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""], 1] call EFUNC(common,doAnimation); }; _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; { - (_x select 0) addItem (_x select 1); + (_x select 0) addItem (_x select 1); }foreach _usersOfItems; // Record specific callback diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index 85cfbf7e52..5910a4be86 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -28,7 +28,7 @@ if (primaryWeapon _caller == "ACE_FakePrimaryWeapon") then { _caller removeWeapon "ACE_FakePrimaryWeapon"; }; if (vehicle _caller == _caller) then { - [_caller, _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""], 1] call EFUNC(common,doAnimation); + [_caller, _caller getvariable [QGVAR(treatmentPrevAnimCaller), ""], 1] call EFUNC(common,doAnimation); }; _caller setvariable [QGVAR(treatmentPrevAnimCaller), nil]; diff --git a/addons/missionmodules/CfgVehicles.hpp b/addons/missionmodules/CfgVehicles.hpp index a38d651c75..6a1dc71705 100644 --- a/addons/missionmodules/CfgVehicles.hpp +++ b/addons/missionmodules/CfgVehicles.hpp @@ -1,68 +1,68 @@ class CfgVehicles { - class Logic; - class Module_F: Logic { - class ArgumentsBaseUnits { - }; - }; + class Logic; + class Module_F: Logic { + class ArgumentsBaseUnits { + }; + }; - // TODO make a curator variant for this - class ACE_moduleAmbianceSound: Module_F { - scope = 2; - displayName = "Ambiance Sounds [ACE]"; - icon = QUOTE(PATHTOF(UI\Icon_Module_Ambient_Sounds_ca.paa)); - category = "ACE_missionModules"; - function = QUOTE(FUNC(moduleAmbianceSound)); - functionPriority = 1; - isGlobal = 1; - isTriggerActivated = 0; - author = "$STR_ACE_Common_ACETeam"; - class Arguments { - class soundFiles { - displayName = "Sounds"; - description = "Classnames of the ambiance sounds played. Seperated by ','. "; - typeName = "STRING"; - defaultValue = ""; - }; - class minimalDistance { - displayName = "Minimal Distance"; - description = "Minimal Distance"; - typeName = "NUMBER"; - defaultValue = 400; - }; - class maximalDistance { - displayName = "Maximal Distance"; - description = "Maximal Distance"; - typeName = "NUMBER"; - defaultValue = 900; - }; - class minimalDelay { - displayName = "Minimal Delay"; - description = "Minimal Delay between sounds played"; - typeName = "NUMBER"; - defaultValue = 10; - }; - class maximalDelay { - displayName = "Maximal Delay"; - description = "Maximal Delay between sounds played"; - typeName = "NUMBER"; - defaultValue = 170; - }; - class followPlayers { - displayName = "Follow Players"; - description = "Follow players. If set to false, loop will play sounds only nearby logic position."; - typeName = "BOOL"; - defaultValue = 0; - }; - class soundVolume { - displayName = "Volume"; - description = "The volume of the sounds played"; - typeName = "NUMBER"; - defaultValue = 1; - }; - }; - class ModuleDescription { - description = "Ambiance sounds loop (synced across MP)"; - sync[] = {}; - }; - }; + // TODO make a curator variant for this + class ACE_moduleAmbianceSound: Module_F { + scope = 2; + displayName = "Ambiance Sounds [ACE]"; + icon = QUOTE(PATHTOF(UI\Icon_Module_Ambient_Sounds_ca.paa)); + category = "ACE_missionModules"; + function = QUOTE(FUNC(moduleAmbianceSound)); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "$STR_ACE_Common_ACETeam"; + class Arguments { + class soundFiles { + displayName = "Sounds"; + description = "Classnames of the ambiance sounds played. Seperated by ','. "; + typeName = "STRING"; + defaultValue = ""; + }; + class minimalDistance { + displayName = "Minimal Distance"; + description = "Minimal Distance"; + typeName = "NUMBER"; + defaultValue = 400; + }; + class maximalDistance { + displayName = "Maximal Distance"; + description = "Maximal Distance"; + typeName = "NUMBER"; + defaultValue = 900; + }; + class minimalDelay { + displayName = "Minimal Delay"; + description = "Minimal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 10; + }; + class maximalDelay { + displayName = "Maximal Delay"; + description = "Maximal Delay between sounds played"; + typeName = "NUMBER"; + defaultValue = 170; + }; + class followPlayers { + displayName = "Follow Players"; + description = "Follow players. If set to false, loop will play sounds only nearby logic position."; + typeName = "BOOL"; + defaultValue = 0; + }; + class soundVolume { + displayName = "Volume"; + description = "The volume of the sounds played"; + typeName = "NUMBER"; + defaultValue = 1; + }; + }; + class ModuleDescription { + description = "Ambiance sounds loop (synced across MP)"; + sync[] = {}; + }; + }; }; diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index 943d795b7a..c02d19aa5f 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -25,99 +25,99 @@ _activated = [_this,2,true,[true]] call BIS_fnc_param; // We only play this on the locality of the logic, since the sounds are broadcasted across the network if (_activated && local _logic) then { - _ambianceSounds = []; - _unparsedSounds = _logic getvariable ["soundFiles", ""]; - _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; - _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; - _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; - _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; - _volume = (_logic getvariable ["soundVolume", 30]) max 1; - _followPlayers = _logic getvariable ["followPlayers", false]; + _ambianceSounds = []; + _unparsedSounds = _logic getvariable ["soundFiles", ""]; + _minimalDistance = (_logic getvariable ["minimalDistance", 400]) max 1; + _maximalDistance = (_logic getvariable ["maximalDistance", 10]) max _minimalDistance; + _minDelayBetweensounds = (_logic getvariable ["minimalDelay", 10]) max 1; + _maxDelayBetweenSounds = (_logic getvariable ["maximalDelay", 170]) max _minDelayBetweensounds; + _volume = (_logic getvariable ["soundVolume", 30]) max 1; + _followPlayers = _logic getvariable ["followPlayers", false]; - _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; + _splittedList = [_unparsedSounds, ","] call BIS_fnc_splitString; - _nilCheckPassedList = ""; - { - _x = [_x] call EFUNC(common,string_removeWhiteSpace); - _splittedList set [_foreachIndex, _x]; - }foreach _splittedList; + _nilCheckPassedList = ""; + { + _x = [_x] call EFUNC(common,string_removeWhiteSpace); + _splittedList set [_foreachIndex, _x]; + }foreach _splittedList; - _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; - { - if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); - } else { - if (isclass (configFile >> "CfgSounds" >> _x)) then { - _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); - }; - }; - }foreach _splittedList; + _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; + { + if (isclass (missionConfigFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback (_soundPath + (getArray(missionConfigFile >> "CfgSounds" >> _x >> "sound") select 0)); + } else { + if (isclass (configFile >> "CfgSounds" >> _x)) then { + _ambianceSounds pushback ((getArray(configFile >> "CfgSounds" >> _x >> "sound") select 0)); + }; + }; + }foreach _splittedList; - if (count _ambianceSounds == 0) exitwith {}; - { - if !([".", _x, true] call BIS_fnc_inString) then { - _ambianceSounds set [_foreachIndex, _x + ".wss"]; - }; - }foreach _ambianceSounds; + if (count _ambianceSounds == 0) exitwith {}; + { + if !([".", _x, true] call BIS_fnc_inString) then { + _ambianceSounds set [_foreachIndex, _x + ".wss"]; + }; + }foreach _ambianceSounds; - [{ - private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"]; - _args = _this select 0; - _logic = _args select 0; - _minDelayBetweensounds = _args select 4; - _maxDelayBetweenSounds = _args select 5; - _lastTimePlayed = _args select 8; + [{ + private ["_args", "_logic", "_ambianceSounds", "_minimalDistance", "_maximalDistance", "_minDelayBetweensounds", "_maxDelayBetweenSounds", "_volume", "_followPlayers","_lastTimePlayed", "_newPos"]; + _args = _this select 0; + _logic = _args select 0; + _minDelayBetweensounds = _args select 4; + _maxDelayBetweenSounds = _args select 5; + _lastTimePlayed = _args select 8; - if (!alive _logic) exitwith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; + if (!alive _logic) exitwith { + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; - if (time - _lastTimePlayed >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { - _ambianceSounds = _args select 1; - _minimalDistance = _args select 2; - _maximalDistance = _args select 3; + if (time - _lastTimePlayed >= ((_minDelayBetweensounds + random(_maxDelayBetweenSounds)) min _maxDelayBetweenSounds)) then { + _ambianceSounds = _args select 1; + _minimalDistance = _args select 2; + _maximalDistance = _args select 3; - _volume = _args select 6; - _followPlayers = _args select 7; + _volume = _args select 6; + _followPlayers = _args select 7; - // Find all players in session. - _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; + // Find all players in session. + _allUnits = if (isMultiplayer) then {playableUnits} else {[ACE_player]}; - // Check if there are enough players to even start playing this sound. - if (count _allUnits > 0) then { + // Check if there are enough players to even start playing this sound. + if (count _allUnits > 0) then { - // Select a target unit at random. - _targetUnit = _allUnits select (round(random((count _allUnits)-1))); + // Select a target unit at random. + _targetUnit = _allUnits select (round(random((count _allUnits)-1))); - // find the position from which we are going to play this sound from. - _newPos = (getPos _targetUnit); - if (!_followPlayers) then { - _newPos = getPos _logic; - }; + // find the position from which we are going to play this sound from. + _newPos = (getPos _targetUnit); + if (!_followPlayers) then { + _newPos = getPos _logic; + }; - // Randomize this position. - if (random(1) >= 0.5) then { - if (random(1) >= 0.5) then { - _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; - }; - } else { - if (random(1) >= 0.5) then { - _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; - } else { - _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; - }; - }; + // Randomize this position. + if (random(1) >= 0.5) then { + if (random(1) >= 0.5) then { + _newPos set [0, (_newPos select 0) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [0, (_newPos select 0) - (_minimalDistance + random(_maximalDistance))]; + }; + } else { + if (random(1) >= 0.5) then { + _newPos set [1, (_newPos select 1) + (_minimalDistance + random(_maximalDistance))]; + } else { + _newPos set [1, (_newPos select 1) - (_minimalDistance + random(_maximalDistance))]; + }; + }; - // If no unit is to close to this position, we will play the sound. - if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { - playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; - _args set [8, time]; - }; - }; - }; - }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call cba_fnc_addPerFrameHandler; + // If no unit is to close to this position, we will play the sound. + if ({(_newPos distance _x < (_minimalDistance / 2))}count _allUnits == 0) then { + playSound3D [_ambianceSounds select (round(random((count _ambianceSounds)-1))), ObjNull, false, _newPos, _volume, 1, 1000]; + _args set [8, time]; + }; + }; + }; + }, 0.1, [_logic, _ambianceSounds, _minimalDistance, _maximalDistance, _minDelayBetweensounds, _maxDelayBetweenSounds, _volume, _followPlayers, time] ] call cba_fnc_addPerFrameHandler; }; true; diff --git a/addons/overheating/script_component.hpp b/addons/overheating/script_component.hpp index d7ce7d2d3b..46a31e6ea3 100644 --- a/addons/overheating/script_component.hpp +++ b/addons/overheating/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_OVERHEATING - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_OVERHEATING - #define DEBUG_SETTINGS DEBUG_SETTINGS_OVERHEATING + #define DEBUG_SETTINGS DEBUG_SETTINGS_OVERHEATING #endif #include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/overpressure/script_component.hpp b/addons/overpressure/script_component.hpp index 8dac72cbbf..21f4cea704 100644 --- a/addons/overpressure/script_component.hpp +++ b/addons/overpressure/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_OVERPRESSURE - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_ENABLED_OVERPRESSURE - #define DEBUG_SETTINGS DEBUG_ENABLED_OVERPRESSURE + #define DEBUG_SETTINGS DEBUG_ENABLED_OVERPRESSURE #endif #include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/parachute/CfgVehicles.hpp b/addons/parachute/CfgVehicles.hpp index 2d8545a607..04732d0506 100644 --- a/addons/parachute/CfgVehicles.hpp +++ b/addons/parachute/CfgVehicles.hpp @@ -20,9 +20,9 @@ class CfgVehicles { author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_Parachute_NonSteerableParachute"; - //picture = "\A3\Characters_F\data\ui\icon_b_parachute_ca.paa"; // @todo - //model = "\A3\Weapons_F\Ammoboxes\Bags\Backpack_Parachute"; // @todo - // backpackSimulation = "ParachuteNonSteerable"; //ParachuteSteerable //Bis broke this in 1.40 + //picture = "\A3\Characters_F\data\ui\icon_b_parachute_ca.paa"; // @todo + //model = "\A3\Weapons_F\Ammoboxes\Bags\Backpack_Parachute"; // @todo + // backpackSimulation = "ParachuteNonSteerable"; //ParachuteSteerable //Bis broke this in 1.40 ParachuteClass = "NonSteerable_Parachute_F"; maximumLoad = 0; mass = 100; diff --git a/addons/parachute/RscTitles.hpp b/addons/parachute/RscTitles.hpp index d51bcad128..c6f41a7362 100644 --- a/addons/parachute/RscTitles.hpp +++ b/addons/parachute/RscTitles.hpp @@ -1,51 +1,51 @@ class RscText; class RscPicture; class RscTitles { - class ACE_Altimeter { - idd = 9935; - enableSimulation = 1; - movingEnable = 0; - fadeIn=0; - fadeOut=1; - duration = 10e10; - onLoad = "uiNamespace setVariable ['ACE_Altimeter', _this select 0];"; - class controls { - class AltimeterImage: RscPicture { - idc = 1200; - text = PATHTOF(UI\watch_altimeter.paa); - x = 0.118437 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.20625 * safezoneW; - h = 0.341 * safezoneH; - }; - class HeightText: RscText { - idc = 1100; - text = "----"; - x = 0.200937 * safezoneW + safezoneX; - y = 0.764 * safezoneH + safezoneY; - w = 0.04125 * safezoneW; - h = 0.033 * safezoneH; - colorBackground[] = {0,0,0,0}; - colorText[] = {0,0,0,1}; - }; - class DecendRate: RscText { - idc = 1000; - text = "--"; - x = 0.21125 * safezoneW + safezoneX; - y = 0.742 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.022 * safezoneH; - colorText[] = {0,0,0,1}; - }; - class TimeText: RscText { - idc = 1001; - text = "00:00"; - x = 0.206094 * safezoneW + safezoneX; - y = 0.819 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.022 * safezoneH; - colorText[] = {0,0,0,1}; - }; - }; - }; + class ACE_Altimeter { + idd = 9935; + enableSimulation = 1; + movingEnable = 0; + fadeIn=0; + fadeOut=1; + duration = 10e10; + onLoad = "uiNamespace setVariable ['ACE_Altimeter', _this select 0];"; + class controls { + class AltimeterImage: RscPicture { + idc = 1200; + text = PATHTOF(UI\watch_altimeter.paa); + x = 0.118437 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.20625 * safezoneW; + h = 0.341 * safezoneH; + }; + class HeightText: RscText { + idc = 1100; + text = "----"; + x = 0.200937 * safezoneW + safezoneX; + y = 0.764 * safezoneH + safezoneY; + w = 0.04125 * safezoneW; + h = 0.033 * safezoneH; + colorBackground[] = {0,0,0,0}; + colorText[] = {0,0,0,1}; + }; + class DecendRate: RscText { + idc = 1000; + text = "--"; + x = 0.21125 * safezoneW + safezoneX; + y = 0.742 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.022 * safezoneH; + colorText[] = {0,0,0,1}; + }; + class TimeText: RscText { + idc = 1001; + text = "00:00"; + x = 0.206094 * safezoneW + safezoneX; + y = 0.819 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.022 * safezoneH; + colorText[] = {0,0,0,1}; + }; + }; + }; }; diff --git a/addons/parachute/functions/fnc_doLanding.sqf b/addons/parachute/functions/fnc_doLanding.sqf index 134ab8a3ea..126a3b0720 100644 --- a/addons/parachute/functions/fnc_doLanding.sqf +++ b/addons/parachute/functions/fnc_doLanding.sqf @@ -19,8 +19,8 @@ _unit = _this select 0; GVAR(PFH) = false; [_unit, "AmovPercMevaSrasWrflDf_AmovPknlMstpSrasWrflDnon", 2] call EFUNC(common,doAnimation); [{ - if (time >= ((_this select 0) select 0) + 1) then { - ((_this select 0) select 1) playActionNow "Crouch"; - [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); - }; + if (time >= ((_this select 0) select 0) + 1) then { + ((_this select 0) select 1) playActionNow "Crouch"; + [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); + }; }, 1, [time,_unit]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/parachute/functions/fnc_onEachFrame.sqf b/addons/parachute/functions/fnc_onEachFrame.sqf index be9f0e000c..dbfab16452 100644 --- a/addons/parachute/functions/fnc_onEachFrame.sqf +++ b/addons/parachute/functions/fnc_onEachFrame.sqf @@ -25,9 +25,9 @@ private ["_pos"]; _pos = getPosASL (vehicle _player); if ((lineIntersects [_pos, _pos vectorAdd [0,0,-0.5], vehicle _player, _player]) || {((ASLtoATL _pos) select 2) < 0.75}) then { - [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); - GVAR(PFH) = false; + [(_this select 1)] call CALLSTACK(cba_fnc_removePerFrameHandler); + GVAR(PFH) = false; // I believe this will not work for Zeus units. - deleteVehicle (vehicle _player); - [_player] call FUNC(doLanding); + deleteVehicle (vehicle _player); + [_player] call FUNC(doLanding); }; diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index 8e3c3d83e3..a8200fb2ca 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -21,26 +21,26 @@ if (isNull (uiNamespace getVariable ["ACE_Altimeter", displayNull])) exitWith {} GVAR(AltimeterActive) = true; [{ - if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);}; - disableSerialization; - EXPLODE_4_PVT(_this select 0,_display,_unit,_oldHeight,_prevTime); - if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);call FUNC(hideAltimeter);}; + if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);}; + disableSerialization; + EXPLODE_4_PVT(_this select 0,_display,_unit,_oldHeight,_prevTime); + if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);call FUNC(hideAltimeter);}; - private ["_height", "_hour", "_minute", "_descentRate","_HeightText", "_DecendRate", "_TimeText", "_curTime"]; - _HeightText = _display displayCtrl 1100; - _DecendRate = _display displayCtrl 1000; - _TimeText = _display displayCtrl 1001; - _hour = floor daytime; - _minute = floor ((daytime - _hour) * 60); + private ["_height", "_hour", "_minute", "_descentRate","_HeightText", "_DecendRate", "_TimeText", "_curTime"]; + _HeightText = _display displayCtrl 1100; + _DecendRate = _display displayCtrl 1000; + _TimeText = _display displayCtrl 1001; + _hour = floor daytime; + _minute = floor ((daytime - _hour) * 60); - _height = (getPosASL _unit) select 2; - _curTime = time; - _descentRate = floor ((_oldHeight - _height) / (_curTime - _prevTime)); + _height = (getPosASL _unit) select 2; + _curTime = time; + _descentRate = floor ((_oldHeight - _height) / (_curTime - _prevTime)); - _TimeText ctrlSetText (format ["%1:%2",[_hour, 2] call EFUNC(common,numberToDigitsString),[_minute, 2] call EFUNC(common,numberToDigitsString)]); - _HeightText ctrlSetText (format ["%1", floor(_height)]); - _DecendRate ctrlSetText (format ["%1", _descentRate max 0]); + _TimeText ctrlSetText (format ["%1:%2",[_hour, 2] call EFUNC(common,numberToDigitsString),[_minute, 2] call EFUNC(common,numberToDigitsString)]); + _HeightText ctrlSetText (format ["%1", floor(_height)]); + _DecendRate ctrlSetText (format ["%1", _descentRate max 0]); - (_this select 0) set [2, _height]; - (_this select 0) set [3, _curTime]; + (_this select 0) set [2, _height]; + (_this select 0) set [3, _curTime]; }, 0.2, [uiNamespace getVariable ["ACE_Altimeter", displayNull], _unit,floor ((getPosASL _unit) select 2), time]] call CALLSTACK(cba_fnc_addPerFrameHandler); diff --git a/addons/resting/script_component.hpp b/addons/resting/script_component.hpp index f6d28bc482..8446cb9415 100644 --- a/addons/resting/script_component.hpp +++ b/addons/resting/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_RESTING - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_RESTING - #define DEBUG_SETTINGS DEBUG_SETTINGS_RESTING + #define DEBUG_SETTINGS DEBUG_SETTINGS_RESTING #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/safemode/script_component.hpp b/addons/safemode/script_component.hpp index f76396afdf..c68b265489 100644 --- a/addons/safemode/script_component.hpp +++ b/addons/safemode/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SAFEMODE - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_SAFEMODE - #define DEBUG_SETTINGS DEBUG_SETTINGS_SAFEMODE + #define DEBUG_SETTINGS DEBUG_SETTINGS_SAFEMODE #endif #include "\z\ace\Addons\main\script_macros.hpp" diff --git a/addons/smallarms/script_component.hpp b/addons/smallarms/script_component.hpp index d9c70ca5e6..589e59433f 100644 --- a/addons/smallarms/script_component.hpp +++ b/addons/smallarms/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_SMALLARMS - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_SMALLARMS - #define DEBUG_SETTINGS DEBUG_SETTINGS_SMALLARMS + #define DEBUG_SETTINGS DEBUG_SETTINGS_SMALLARMS #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/testmissions/script_component.hpp b/addons/testmissions/script_component.hpp index c6c629ff91..da17bfb7e2 100644 --- a/addons/testmissions/script_component.hpp +++ b/addons/testmissions/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\Addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_TESTMISSIONS - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_ENABLED_TESTMISSIONS - #define DEBUG_SETTINGS DEBUG_ENABLED_TESTMISSIONS + #define DEBUG_SETTINGS DEBUG_ENABLED_TESTMISSIONS #endif #include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/weather/XEH_preClientInit.sqf b/addons/weather/XEH_preClientInit.sqf index 81b6f09fe6..b979521cdd 100644 --- a/addons/weather/XEH_preClientInit.sqf +++ b/addons/weather/XEH_preClientInit.sqf @@ -2,16 +2,16 @@ FUNC(KEEPTIME) = { - if((count GVAR(WINDSPEED)) > 0) then { - private ["_wind", "_p", "_str"]; - _wind = ACE_wind; + if((count GVAR(WINDSPEED)) > 0) then { + private ["_wind", "_p", "_str"]; + _wind = ACE_wind; - _p = _wind call CBA_fnc_vect2polar; - _str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)]; - TRACE_2("Wind",_wind,_str); - }; + _p = _wind call CBA_fnc_vect2polar; + _str = format["Wind: %1 at %2m/s (%3MPH)\n%4", floor(_p select 1), floor(_p select 0), floor((_p select 0)*2.23693629), GVAR(WINDSPEED)]; + TRACE_2("Wind",_wind,_str); + }; }; #ifdef DEBUG_MODE_FULL - [FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler; + [FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler; #endif diff --git a/addons/weather/script_component.hpp b/addons/weather/script_component.hpp index abfe607257..a21d8245fd 100644 --- a/addons/weather/script_component.hpp +++ b/addons/weather/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" //#define DEBUG_ENABLED_WEATHER #ifdef DEBUG_ENABLED_WEATHER - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_WEATHER - #define DEBUG_SETTINGS DEBUG_SETTINGS_WEATHER + #define DEBUG_SETTINGS DEBUG_SETTINGS_WEATHER #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/wep_javelin/CfgSounds.hpp b/addons/wep_javelin/CfgSounds.hpp index 0af40b9485..a5002409ff 100644 --- a/addons/wep_javelin/CfgSounds.hpp +++ b/addons/wep_javelin/CfgSounds.hpp @@ -1,13 +1,13 @@ class CfgSounds { class ACE_Javelin_Locking { - name = "ACE_Javelin_Locking"; - sound[] = {PATHTOF(data\sounds\javelin_locking.ogg), db+0, 1.0}; - titles[] = {}; + name = "ACE_Javelin_Locking"; + sound[] = {PATHTOF(data\sounds\javelin_locking.ogg), db+0, 1.0}; + titles[] = {}; }; class ACE_Javelin_Locked { - name = "ACE_Javelin_Locked"; - sound[] = {PATHTOF(data\sounds\javelin_locked.ogg), db+0, 1.0}; - titles[] = {}; + name = "ACE_Javelin_Locked"; + sound[] = {PATHTOF(data\sounds\javelin_locked.ogg), db+0, 1.0}; + titles[] = {}; }; }; diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/wep_javelin/RscInGameUI.hpp index e94e4c58fd..811548a9d2 100644 --- a/addons/wep_javelin/RscInGameUI.hpp +++ b/addons/wep_javelin/RscInGameUI.hpp @@ -17,34 +17,34 @@ class RscInGameUI { onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; class CA_Distance: RscOpticsValue { - idc = 151; - sizeEx = "0"; - colorText[] = {0,0,0,0}; - x = 0; - y = 0; - w = 0; - h = 0; - }; + idc = 151; + sizeEx = "0"; + colorText[] = {0,0,0,0}; + x = 0; + y = 0; + w = 0; + h = 0; + }; class ACE_javelin_elements_group: RscControlsGroup - { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - idc = 170; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { + { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + idc = 170; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { class JavelinLocking : RscMapControl { onDraw = QUOTE(_this call FUNC(onOpticDraw)); idc = -1; @@ -52,385 +52,385 @@ class RscInGameUI { h = 0; }; - class ACE_javelin_Day_mode_off: RscPicture { - idc = 1001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneY+SafezoneH*0.031 - SafezoneY"; - w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.1045752"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa"; - }; - class ACE_javelin_Day_mode: ACE_javelin_Day_mode_off { - idc = 160; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off { - idc = 1004; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa"; - }; - class ACE_javelin_WFOV_mode_group: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW"; - h = "SafezoneH"; - idc = 163; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off { - idc = -1; - y = "0.031*SafezoneH - SafezoneY"; - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaL: RscLine { - x = "0.4899*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaR: RscLine { - x = "0.5109*SafezoneW- SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketL: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.293/4)*3*SafezoneH - SafezoneX"; - y = "0.4677*SafezoneH - SafezoneY"; - w = 0; - h = "0.0646*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketR: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.70/4)*3*SafezoneH - SafezoneX"; - y = "0.4677*SafezoneH - SafezoneY"; - w = 0; - h = "0.0646*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketT: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; - y = "0.3535*SafezoneH - SafezoneY"; - w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = 0; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class BracketB: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; - y = "0.6465*SafezoneH - SafezoneY"; - w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = 0; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; - class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { - idc = 1003; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa"; - }; - class ACE_javelin_NFOV_mode_group: RscControlsGroup { - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - idc = 162; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off { - idc = 699003; - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; - y = "0.031*SafezoneH - SafezoneY"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaL: RscLine { - x = "0.4788*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class StadiaR: RscLine { - x = "0.5212*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.049*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineHL: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.01/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneH*0.5 - SafezoneY"; - w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.0"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineHR: RscLine { - x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.695/4)*3*SafezoneH - SafezoneX"; - y = "SafezoneH*0.5 - SafezoneY"; - w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; - h = "SafezoneH*0.0"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineVT: RscLine { - x = "0.5*SafezoneW - SafezoneX"; - y = "0.171*SafezoneH - SafezoneY"; - w = 0; - h = "0.1825*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class LineVB: RscLine { - x = "0.5*SafezoneW - SafezoneX"; - y = "0.6465*SafezoneH - SafezoneY"; - w = 0; - h = "0.1895*SafezoneH"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; + class ACE_javelin_Day_mode_off: RscPicture { + idc = 1001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneY+SafezoneH*0.031 - SafezoneY"; + w = "0.1045752* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.1045752"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\day_co.paa"; + }; + class ACE_javelin_Day_mode: ACE_javelin_Day_mode_off { + idc = 160; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_WFOV_mode_off: ACE_javelin_Day_mode_off { + idc = 1004; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\wfov_co.paa"; + }; + class ACE_javelin_WFOV_mode_group: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + idc = 163; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class ACE_javelin_WFOV_mode: ACE_javelin_WFOV_mode_off { + idc = -1; + y = "0.031*SafezoneH - SafezoneY"; + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaL: RscLine { + x = "0.4899*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaR: RscLine { + x = "0.5109*SafezoneW- SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketL: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.293/4)*3*SafezoneH - SafezoneX"; + y = "0.4677*SafezoneH - SafezoneY"; + w = 0; + h = "0.0646*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketR: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.70/4)*3*SafezoneH - SafezoneX"; + y = "0.4677*SafezoneH - SafezoneY"; + w = 0; + h = "0.0646*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketT: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; + y = "0.3535*SafezoneH - SafezoneY"; + w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = 0; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class BracketB: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.467/4)*3*SafezoneH - SafezoneX"; + y = "0.6465*SafezoneH - SafezoneY"; + w = "0.065* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = 0; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { + idc = 1003; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\nfov_co.paa"; + }; + class ACE_javelin_NFOV_mode_group: RscControlsGroup { + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + idc = 162; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class ACE_javelin_NFOV_mode: ACE_javelin_NFOV_mode_off { + idc = 699003; + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.586/4)*3*SafezoneH - SafezoneX"; + y = "0.031*SafezoneH - SafezoneY"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaL: RscLine { + x = "0.4788*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class StadiaR: RscLine { + x = "0.5212*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.049*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineHL: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.01/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneH*0.5 - SafezoneY"; + w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.0"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineHR: RscLine { + x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.695/4)*3*SafezoneH - SafezoneX"; + y = "SafezoneH*0.5 - SafezoneY"; + w = "0.29* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH)"; + h = "SafezoneH*0.0"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineVT: RscLine { + x = "0.5*SafezoneW - SafezoneX"; + y = "0.171*SafezoneH - SafezoneY"; + w = 0; + h = "0.1825*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class LineVB: RscLine { + x = "0.5*SafezoneW - SafezoneX"; + y = "0.6465*SafezoneH - SafezoneY"; + w = 0; + h = "0.1895*SafezoneH"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; /* - class TargetingConstrains: RscControlsGroup { - idc = 699100; - x = "SafezoneX"; - y = "SafezoneY"; - w = "SafezoneW-SafezoneX"; - h = "SafezoneH-SafezoneY"; - class VScrollbar { - autoScrollSpeed = -1; - autoScrollDelay = 5; - autoScrollRewind = 0; - color[] = {1,1,1,0}; - width = 0.001; - }; - class HScrollbar { - color[] = {1,1,1,0}; - height = 0.001; - }; - class Controls { - class Top: RscPicture { - idc = 699101; - text = "#(argb,8,8,3)color(1,1,1,1)"; - colorText[] = {0.2941,0.2941,0.2941,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.21*SafezoneH"; - }; - class Bottom: Top { - idc = 699102; - y = "0.64*SafezoneH-SafezoneY"; - }; - class Left: Top { - idc = 699103; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.36*SafezoneH-SafezoneY"; - w = "0.31*(3/4)*SafezoneH"; - h = "0.28*SafezoneH"; - }; - class Right: Left { - idc = 699104; - x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; - }; - class OpticsBorders: RscPicture { - idc = 699105; - text = PATHTOF(data\javelin_ui_border_ca.paa); - colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0.7*SafezoneH"; - }; - }; - }; + class TargetingConstrains: RscControlsGroup { + idc = 699100; + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW-SafezoneX"; + h = "SafezoneH-SafezoneY"; + class VScrollbar { + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = {1,1,1,0}; + width = 0.001; + }; + class HScrollbar { + color[] = {1,1,1,0}; + height = 0.001; + }; + class Controls { + class Top: RscPicture { + idc = 699101; + text = "#(argb,8,8,3)color(1,1,1,1)"; + colorText[] = {0.2941,0.2941,0.2941,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.21*SafezoneH"; + }; + class Bottom: Top { + idc = 699102; + y = "0.64*SafezoneH-SafezoneY"; + }; + class Left: Top { + idc = 699103; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.36*SafezoneH-SafezoneY"; + w = "0.31*(3/4)*SafezoneH"; + h = "0.28*SafezoneH"; + }; + class Right: Left { + idc = 699104; + x = "((SafezoneW -(3/4)*SafezoneH)/2)+ 0.69*(3/4)*SafezoneH - SafezoneX"; + }; + class OpticsBorders: RscPicture { + idc = 699105; + text = PATHTOF(data\javelin_ui_border_ca.paa); + colorText[] = {0,0,0,1}; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH-SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0.7*SafezoneH"; + }; + }; + }; - class TargetingGate: TargetingConstrains { - idc = 699200; - class Controls { - class TargetingGateTL: TargetingConstrains { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699201; - class Controls { - class LineH: RscLine { - idc = 699210; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699211; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateTR: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.15*SafezoneH - SafezoneY"; - idc = 699202; - class Controls { - class LineH: RscLine { - idc = 699220; - x = "0"; - y = "0"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - idc = 699221; - x = "0.025*(3/4)*SafezoneH"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBL: TargetingGateTL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699203; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - class TargetingGateBR: TargetingGateBL { - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; - y = "0.825*SafezoneH - SafezoneY"; - idc = 699204; - class Controls { - class LineH: RscLine { - x = "0"; - y = "0.025*SafezoneH"; - w = "0.025*(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: LineH { - x = "0.025*(3/4)*SafezoneH"; - y = "0"; - w = "0"; - h = "0.025*SafezoneH"; - }; - }; - }; - }; - }; + class TargetingGate: TargetingConstrains { + idc = 699200; + class Controls { + class TargetingGateTL: TargetingConstrains { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699201; + class Controls { + class LineH: RscLine { + idc = 699210; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699211; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateTR: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.15*SafezoneH - SafezoneY"; + idc = 699202; + class Controls { + class LineH: RscLine { + idc = 699220; + x = "0"; + y = "0"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + idc = 699221; + x = "0.025*(3/4)*SafezoneH"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBL: TargetingGateTL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699203; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + class TargetingGateBR: TargetingGateBL { + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX + 0.975*(3/4)*SafezoneH"; + y = "0.825*SafezoneH - SafezoneY"; + idc = 699204; + class Controls { + class LineH: RscLine { + x = "0"; + y = "0.025*SafezoneH"; + w = "0.025*(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: LineH { + x = "0.025*(3/4)*SafezoneH"; + y = "0"; + w = "0"; + h = "0.025*SafezoneH"; + }; + }; + }; + }; + }; - class TargetingLines: TargetingConstrains { - idc = 699300; - class Controls { - class LineH: RscLine { - idc = 699301; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; - y = "0.5*SafezoneH - SafezoneY"; - w = "(3/4)*SafezoneH"; - h = "0"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - class LineV: RscLine { - idc = 699302; - x = "0.5*SafezoneW - SafezoneX"; - y = "0.15*SafezoneH - SafezoneY"; - w = "0"; - h = "0.7*SafezoneH"; - colorText[] = {0.8745,0.8745,0.8745,1}; - }; - }; - }; + class TargetingLines: TargetingConstrains { + idc = 699300; + class Controls { + class LineH: RscLine { + idc = 699301; + x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + y = "0.5*SafezoneH - SafezoneY"; + w = "(3/4)*SafezoneH"; + h = "0"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + class LineV: RscLine { + idc = 699302; + x = "0.5*SafezoneW - SafezoneX"; + y = "0.15*SafezoneH - SafezoneY"; + w = "0"; + h = "0.7*SafezoneH"; + colorText[] = {0.8745,0.8745,0.8745,1}; + }; + }; + }; */ - class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { - idc = 699000; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; - }; - class ACE_javelin_SEEK: ACE_javelin_SEEK_off { - idc = 166; - colorText[] = {0.2941,0.8745,0.2157,0}; - }; - class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { - idc = 1032; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; - }; - class ACE_javelin_Missle: ACE_javelin_Missle_off { - idc = 167; - colorText[] = {0.9255,0.5216,0.1216,0}; - }; - class ACE_javelin_CLU_off: ACE_javelin_Missle_off { - idc = 1027; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; - }; - class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { - idc = 1028; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; - }; - class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { - idc = 699001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_DIR: ACE_javelin_Day_mode { - idc = 699002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; - colorText[] = {0.2941,0.2941,0.2941,1}; - }; - class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { - idc = 1002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; - }; - class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { - idc = 161; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - }; - }; + class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { + idc = 699000; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; + }; + class ACE_javelin_SEEK: ACE_javelin_SEEK_off { + idc = 166; + colorText[] = {0.2941,0.8745,0.2157,0}; + }; + class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { + idc = 1032; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; + }; + class ACE_javelin_Missle: ACE_javelin_Missle_off { + idc = 167; + colorText[] = {0.9255,0.5216,0.1216,0}; + }; + class ACE_javelin_CLU_off: ACE_javelin_Missle_off { + idc = 1027; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; + }; + class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { + idc = 1028; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; + }; + class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { + idc = 699001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_DIR: ACE_javelin_Day_mode { + idc = 699002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; + colorText[] = {0.2941,0.2941,0.2941,1}; + }; + class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { + idc = 1002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; + }; + class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { + idc = 161; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; }; }; diff --git a/addons/wep_javelin/config.cpp b/addons/wep_javelin/config.cpp index fa062944fc..3cc607f0bd 100644 --- a/addons/wep_javelin/config.cpp +++ b/addons/wep_javelin/config.cpp @@ -1,13 +1,13 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = { "ace_main", "ace_common", "ace_laser" }; - VERSION_CONFIG; - }; + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { "ace_main", "ace_common", "ace_laser" }; + VERSION_CONFIG; + }; }; #include "CfgEventhandlers.hpp" diff --git a/addons/wep_javelin/functions/fnc_fired.sqf b/addons/wep_javelin/functions/fnc_fired.sqf index 4e94989677..139f8f4b7e 100644 --- a/addons/wep_javelin/functions/fnc_fired.sqf +++ b/addons/wep_javelin/functions/fnc_fired.sqf @@ -5,70 +5,70 @@ TRACE_1("Launch", _this); PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); FUNC(guidance_Javelin_LOBL_DIR_PFH) = { - TRACE_1("enter", _this); - private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", + TRACE_1("enter", _this); + private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - - if((count _args) > 7) then { - _saveArgs = _args select 7; - _target = _saveArgs select 0; - _targetStartPos = _saveArgs select 1; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + + if((count _args) > 7) then { + _saveArgs = _args select 7; + _target = _saveArgs select 0; + _targetStartPos = _saveArgs select 1; _launchPos = _saveArgs select 2; _wentTerminal = _saveArgs select 3; - } else { + } else { _wentTerminal = false; _launchPos = getPosASL _shooter; _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; - }; - + }; + if(!alive _missile || isNull _missile || isNull _target) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; _targetPos = getPosASL _target; - _curVelocity = velocity _missile; - + _curVelocity = velocity _missile; + TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); - _addHeight = [0,0,0]; - if(!isNil "_target") then { - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; + _addHeight = [0,0,0]; + if(!isNil "_target") then { + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; - if( (_missilePos select 2) < (_targetPos select 2) + 60 && !_wentTerminal) then { - _addHeight = [0,0,(_targetPos select 2) + 120]; - + if( (_missilePos select 2) < (_targetPos select 2) + 60 && !_wentTerminal) then { + _addHeight = [0,0,(_targetPos select 2) + 120]; + _defPitch = 0.15; _defYaw = 0.035; TRACE_1("Climb phase", _addHeight); - } else { - _wentTerminal = true; - _this set[2, _wentTerminal]; - + } else { + _wentTerminal = true; + _this set[2, _wentTerminal]; + _defPitch = 0.15; _defYaw = 0.035; TRACE_1("TERMINAL", ""); - }; - _targetPos = _targetPos vectorAdd _addHeight; + }; + _targetPos = _targetPos vectorAdd _addHeight; - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); _yaw = 0.0; _pitch = 0.0; @@ -88,37 +88,37 @@ FUNC(guidance_Javelin_LOBL_DIR_PFH) = { _pitch = _defPitch; }; }; - - TRACE_3("", _targetVectorSeeker, _pitch, _yaw); - - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + TRACE_3("", _targetVectorSeeker, _pitch, _yaw); + + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - TRACE_3("", _missile, _outVector, _vectorTo); - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + TRACE_3("", _missile, _outVector, _vectorTo); + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; _args set[7, _saveArgs ]; @@ -126,70 +126,70 @@ FUNC(guidance_Javelin_LOBL_DIR_PFH) = { }; FUNC(guidance_Javelin_LOBL_TOP_PFH) = { - TRACE_1("enter", _this); - private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", + TRACE_1("enter", _this); + private["_pitch", "_yaw", "_wentTerminal", "_target", "_targetPos", "_curVelocity", "_missile", "_launchPos", "_targetStartPos", "_defPitch", "_defYaw"]; - _args = _this select 0; - //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - _shooter = _args select 0; - _missile = _args select 6; - - if((count _args) > 7) then { - _saveArgs = _args select 7; - _target = _saveArgs select 0; - _targetStartPos = _saveArgs select 1; + _args = _this select 0; + //PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + _shooter = _args select 0; + _missile = _args select 6; + + if((count _args) > 7) then { + _saveArgs = _args select 7; + _target = _saveArgs select 0; + _targetStartPos = _saveArgs select 1; _launchPos = _saveArgs select 2; _wentTerminal = _saveArgs select 3; - } else { + } else { _wentTerminal = false; _launchPos = getPosASL _shooter; _target = ACE_player getVariable[QGVAR(currentTarget), objNull]; _targetStartPos = ACE_player getVariable[QGVAR(currentTargetPos), [0,0,0]]; - }; - + }; + if(!alive _missile || isNull _missile || isNull _target) exitWith { - [(_this select 1)] call cba_fnc_removePerFrameHandler; - }; + [(_this select 1)] call cba_fnc_removePerFrameHandler; + }; _targetPos = getPosASL _target; - _curVelocity = velocity _missile; - + _curVelocity = velocity _missile; + TRACE_4("", _target, _targetPos, _launchPos, _targetStartPos); - _addHeight = [0,0,0]; - if(!isNil "_target") then { - - _yVec = vectorDir _missile; - _zVec = vectorUp _missile; - _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); - - _missilePos = getPosASL _missile; - // player sideChat "G!"; + _addHeight = [0,0,0]; + if(!isNil "_target") then { + + _yVec = vectorDir _missile; + _zVec = vectorUp _missile; + _xVec = vectorNormalized (_yVec vectorCrossProduct _zVec); + + _missilePos = getPosASL _missile; + // player sideChat "G!"; - TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); - if((count _targetPos) > 0) then { - _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; + TRACE_4("Phase Check", _launchPos, _missilePos, _targetPos, (_missilePos distance _targetPos)); + if((count _targetPos) > 0) then { + _distanceToTarget = [(_missilePos select 0), (_missilePos select 1), (_targetPos select 2)] vectorDistance _targetPos; - if( (_missilePos select 2) < (_targetPos select 2) + 200 && !_wentTerminal) then { - _addHeight = [0,0, ( (_distanceToTarget * 2) + 400)]; - + if( (_missilePos select 2) < (_targetPos select 2) + 200 && !_wentTerminal) then { + _addHeight = [0,0, ( (_distanceToTarget * 2) + 400)]; + _defPitch = 0.25; _defYaw = 0.035; TRACE_1("Climb phase", _addHeight); - } else { - _wentTerminal = true; - _this set[2, _wentTerminal]; - + } else { + _wentTerminal = true; + _this set[2, _wentTerminal]; + _defPitch = 0.25; _defYaw = 0.25; TRACE_1("TERMINAL", ""); - }; - _targetPos = _targetPos vectorAdd _addHeight; + }; + _targetPos = _targetPos vectorAdd _addHeight; - _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); - TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); + _targetVectorSeeker = [_missile, [_xVec, _yVec, _zVec], _targetPos] call FUNC(translateToWeaponSpace); + TRACE_5("", _missile, _xVec, _yVec, _zVec, _targetPos); _yaw = 0.0; _pitch = 0.0; @@ -215,37 +215,37 @@ FUNC(guidance_Javelin_LOBL_TOP_PFH) = { _pitch = _defPitch; }; }; - - TRACE_3("", _targetVectorSeeker, _pitch, _yaw); - - #ifdef DEBUG_MODE_FULL - drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; - - _light = "#lightpoint" createVehicleLocal (getPos _missile); - _light setLightBrightness 1.0; - _light setLightAmbient [1.0, 0.0, 0.0]; - _light setLightColor [1.0, 0.0, 0.0]; - - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; - drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; + + TRACE_3("", _targetVectorSeeker, _pitch, _yaw); + + #ifdef DEBUG_MODE_FULL + drawLine3D [(ASLtoATL _targetPos) vectorAdd _addHeight, ASLtoATL _targetPos, [0,1,0,1]]; + + _light = "#lightpoint" createVehicleLocal (getPos _missile); + _light setLightBrightness 1.0; + _light setLightAmbient [1.0, 0.0, 0.0]; + _light setLightColor [1.0, 0.0, 0.0]; + + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,1,1], ASLtoATL _missilePos, 0.75, 0.75, 0, str _vectorTo, 1, 0.025, "TahomaB"]; + drawLine3D [ASLtoATL _missilePos, ASLtoATL _targetPos, [1,0,0,1]]; - MARKERCOUNT = MARKERCOUNT + 1; - #endif - - if(accTime > 0) then { - TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); - _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); - - _vectorTo = _missilePos vectorFromTo _outVector; - TRACE_3("", _missile, _outVector, _vectorTo); - _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; - }; - - #ifdef DEBUG_MODE_FULL - hintSilent format["d: %1", _distanceToTarget]; - #endif - }; - }; + MARKERCOUNT = MARKERCOUNT + 1; + #endif + + if(accTime > 0) then { + TRACE_5("", _xVec, _yVec, _zVec, _yaw, _pitch); + _outVector = [_missile, [_xVec, _yVec, _zVec], [_yaw, 1/accTime, _pitch]] call FUNC(translateToModelSpace); + + _vectorTo = _missilePos vectorFromTo _outVector; + TRACE_3("", _missile, _outVector, _vectorTo); + _missile setVectorDirAndUp [_vectorTo, vectorUp _missile]; + }; + + #ifdef DEBUG_MODE_FULL + hintSilent format["d: %1", _distanceToTarget]; + #endif + }; + }; _saveArgs = [_target,_targetStartPos, _launchPos, _wentTerminal]; _args set[7, _saveArgs ]; @@ -253,24 +253,24 @@ FUNC(guidance_Javelin_LOBL_TOP_PFH) = { }; FUNC(guidance_Javelin_LOBL_TOP) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Javelin_LOBL_TOP_PFH), 0, _this] call cba_fnc_addPerFrameHandler; + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Javelin_LOBL_TOP_PFH), 0, _this] call cba_fnc_addPerFrameHandler; }; FUNC(guidance_Javelin_LOBL_DIR) = { - PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - - GVAR(lastTime) = time; - [FUNC(guidance_Javelin_LOBL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; + PARAMS_7(_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + GVAR(lastTime) = time; + [FUNC(guidance_Javelin_LOBL_DIR_PFH), 0, _this] call cba_fnc_addPerFrameHandler; }; if(!local _shooter) exitWith { false }; if(_ammo == "M_Titan_AT") then { - _fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; - - switch (_fireMode) do { + _fireMode = _shooter getVariable ["ACE_FIRE_SELECTION", ACE_JAV_FIREMODE_TOP]; + + switch (_fireMode) do { // Default to FIREMODE_DIRECT_LOAL // FIREMODE_DIRECT_LOAL case ACE_JAV_FIREMODE_DIR: { diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf index 1bc848cb04..6a74b3ed57 100644 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf @@ -2,10 +2,10 @@ #include "script_component.hpp" //TRACE_1("enter", _this); -#define __TRACKINTERVAL 0.1 // how frequent the check should be. -#define __LOCKONTIME 1.85 // Lock on won't occur sooner -#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time -#define __SENSORSQUARE 1 // Locking on sensor square side in angles +#define __TRACKINTERVAL 0.1 // how frequent the check should be. +#define __LOCKONTIME 1.85 // Lock on won't occur sooner +#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time +#define __SENSORSQUARE 1 // Locking on sensor square side in angles #define __ConstraintTop (((ctrlPosition __JavelinIGUITargetingConstrainTop) select 1) + ((ctrlPosition (__JavelinIGUITargetingConstrainTop)) select 3)) #define __ConstraintBottom ((ctrlPosition __JavelinIGUITargetingConstrainBottom) select 1) @@ -35,9 +35,9 @@ _soundTime = _args select 4; // Find a target within the optic range _newTarget = objNull; - + // Bail on fast movement -if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. +if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. ACE_player switchCamera "INTERNAL"; }; @@ -71,7 +71,7 @@ if (isNull _newTarget) then { ACE_player setVariable [QGVAR(currentTarget),nil, false]; // Disallow fire - //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; + //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; } else { if (_newTarget distance ACE_player < 2500 // && {(call CBA_fnc_getFoV) select 1 > 7} diff --git a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf index afe2436e5d..8f85005d48 100644 --- a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf @@ -18,9 +18,9 @@ _y = _offset select 1; _z = _offset select 2; _out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; + ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), + ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), + ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) + ]; _out; \ No newline at end of file diff --git a/addons/winddeflection/functions/fnc_initalizeModule.sqf b/addons/winddeflection/functions/fnc_initalizeModule.sqf index 2833ecc54c..85d61e3bcc 100644 --- a/addons/winddeflection/functions/fnc_initalizeModule.sqf +++ b/addons/winddeflection/functions/fnc_initalizeModule.sqf @@ -15,5 +15,5 @@ if (!hasInterface) exitwith {}; // No need for this module on HC or dedicated se private ["_logic"]; _logic = [_this,0,objNull,[objNull]] call BIS_fnc_param; if (!isNull _logic) then { - [_logic, QGVAR(EnableForAI), "EnableForAI" ] call EFUNC(common,readSettingFromModule); + [_logic, QGVAR(EnableForAI), "EnableForAI" ] call EFUNC(common,readSettingFromModule); }; \ No newline at end of file diff --git a/addons/winddeflection/functions/script_component.hpp b/addons/winddeflection/functions/script_component.hpp index 278930e4e7..eb67fc3887 100644 --- a/addons/winddeflection/functions/script_component.hpp +++ b/addons/winddeflection/functions/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_WINDDEFLECTION - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_WINDDEFLECTION - #define DEBUG_SETTINGS DEBUG_SETTINGS_WINDDEFLECTION + #define DEBUG_SETTINGS DEBUG_SETTINGS_WINDDEFLECTION #endif #include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/winddeflection/script_component.hpp b/addons/winddeflection/script_component.hpp index 047b7980e5..4af43227de 100644 --- a/addons/winddeflection/script_component.hpp +++ b/addons/winddeflection/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_WINDDEFLECTION - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_WINDDEFLECTION - #define DEBUG_SETTINGS DEBUG_SETTINGS_WINDDEFLECTION + #define DEBUG_SETTINGS DEBUG_SETTINGS_WINDDEFLECTION #endif #include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file From 4c6dad69f9366be96f5f8955aa51c48800c0c740 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 6 Apr 2015 19:43:27 +0200 Subject: [PATCH 31/57] Should fix #347. Could not reproduce but this at least fixes some issues (which most likely caused the error) --- .../functions/fnc_displayPatientInformation.sqf | 10 ++++++---- addons/medical/functions/fnc_displayTriageCard.sqf | 1 - 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index b5eecbeb8d..599c2f344f 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -31,7 +31,9 @@ if (_show) then { [{ private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"]; _target = (_this select 0) select 0; - if (GVAR(displayPatientInformationTarget) != _target) exitwith { + _selectionN = (_this select 0) select 1; + + if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; @@ -44,7 +46,7 @@ if (_show) then { _allInjuryTexts = []; _genericMessages = []; - _partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select GVAR(currentSelectedSelectionN); + _partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN; _genericMessages pushback [localize _partText, [1, 1, 1, 1]]; if (_target getvariable[QGVAR(isBleeding), false]) then { @@ -54,7 +56,7 @@ if (_show) then { _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_LOST_BLOOD", [1, 0.1, 0.1, 1]]; }; - if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select GVAR(currentSelectedSelectionN)) > 0) then { + if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select _selectionN) > 0) then { _genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_TOURNIQUET_APPLIED", [0.77, 0.51, 0.08, 1]]; }; if (_target getvariable[QGVAR(hasPain), false]) then { @@ -192,7 +194,7 @@ if (_show) then { (_display displayCtrl 303) ctrlSetText (_triageStatus select 0); (_display displayCtrl 303) ctrlSetBackgroundColor (_triageStatus select 2); - }, 0, [_target]] call CBA_fnc_addPerFrameHandler; + }, 0, [_target, GVAR(currentSelectedSelectionN)]] call CBA_fnc_addPerFrameHandler; } else { ("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; diff --git a/addons/medical/functions/fnc_displayTriageCard.sqf b/addons/medical/functions/fnc_displayTriageCard.sqf index c6e59fead2..5feb209b44 100644 --- a/addons/medical/functions/fnc_displayTriageCard.sqf +++ b/addons/medical/functions/fnc_displayTriageCard.sqf @@ -16,7 +16,6 @@ private ["_target", "_show"]; _target = _this select 0; _show = if (count _this > 1) then {_this select 1} else {true}; -GVAR(currentSelectedSelectionN) = if (count _this > 2) then {_this select 2} else {0}; GVAR(TriageCardTarget) = if (_show) then {_target} else {ObjNull}; From d6cf07a3b6dd59cf4d447d4dba11c42aa445b392 Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 11:44:17 -0700 Subject: [PATCH 32/57] Changed: FCS update was not being delayed for laser. Delay of 0.5s added. --- .../laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 2f0feabee7..8f2fbbc8f2 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -74,7 +74,7 @@ FUNC(laserHudDesignatePFH) = { }; if(diag_tickTime > _forceUpdateTime) then { - _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; + _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; }; #ifdef DEBUG_MODE_FULL drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; From c1799616c7f036fb038f119d5c317ad1d91dd7bb Mon Sep 17 00:00:00 2001 From: commy2 Date: Mon, 6 Apr 2015 20:47:11 +0200 Subject: [PATCH 33/57] add function to convert numbers to string --- addons/common/XEH_preInit.sqf | 1 + .../common/functions/fnc_numberToString.sqf | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 addons/common/functions/fnc_numberToString.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index fe9c8a4c77..6db323a9f4 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -122,6 +122,7 @@ PREP(moveToTempGroup); PREP(muteUnit); PREP(numberToDigits); PREP(numberToDigitsString); +PREP(numberToString); PREP(onAnswerRequest); PREP(onLoadRscDisplayChannel); PREP(owned); diff --git a/addons/common/functions/fnc_numberToString.sqf b/addons/common/functions/fnc_numberToString.sqf new file mode 100644 index 0000000000..797593eaea --- /dev/null +++ b/addons/common/functions/fnc_numberToString.sqf @@ -0,0 +1,23 @@ +/* + * Author: commy2 + * + * Converts a number to a string without losing as much precission as str or format. + * + * Argument: + * 0: A number (Number) + * + * Return value: + * The number as string (String) + */ +#include "script_component.hpp" + +private ["_number", "_decimals"]; + +_number = _this select 0; + +_decimals = str (_number mod 1); + +_decimals = toArray _decimals; +_decimals deleteRange [0,2]; + +format ["%1.%2", floor _number, toString _decimals]; From 2ef05577c722bf8a3f0ed4bccbc8afa84e6612b0 Mon Sep 17 00:00:00 2001 From: commy2 Date: Mon, 6 Apr 2015 21:09:20 +0200 Subject: [PATCH 34/57] slightly improve nts function --- addons/common/functions/fnc_numberToString.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/common/functions/fnc_numberToString.sqf b/addons/common/functions/fnc_numberToString.sqf index 797593eaea..78ba554444 100644 --- a/addons/common/functions/fnc_numberToString.sqf +++ b/addons/common/functions/fnc_numberToString.sqf @@ -18,6 +18,6 @@ _number = _this select 0; _decimals = str (_number mod 1); _decimals = toArray _decimals; -_decimals deleteRange [0,2]; +_decimals deleteAt 0; -format ["%1.%2", floor _number, toString _decimals]; +format ["%1%2", floor _number, toString _decimals]; From 04e9f28734f17fee9198a507dd31b1106fd1b0ba Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Mon, 6 Apr 2015 16:12:38 -0300 Subject: [PATCH 35/57] Make function handle negative numbers --- addons/common/functions/fnc_numberToString.sqf | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_numberToString.sqf b/addons/common/functions/fnc_numberToString.sqf index 797593eaea..e0ebf1d77f 100644 --- a/addons/common/functions/fnc_numberToString.sqf +++ b/addons/common/functions/fnc_numberToString.sqf @@ -15,9 +15,11 @@ private ["_number", "_decimals"]; _number = _this select 0; -_decimals = str (_number mod 1); - +_decimals = str (abs(_number) mod 1); _decimals = toArray _decimals; -_decimals deleteRange [0,2]; +_decimals deleteAt 0; -format ["%1.%2", floor _number, toString _decimals]; +if (_number < 0) exitWith { + format ["-%1%2", floor abs(_number), toString _decimals]; +}; +format ["%1%2", floor _number, toString _decimals]; From 906612f954ecb37b852e993e63b93f6bad7fdc1d Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 12:54:06 -0700 Subject: [PATCH 36/57] Fixed: Gunner FOV, explosive rounds and FPS drop. --- addons/aircraft/CfgAmmo.hpp | 9 ++- addons/aircraft/Heli_Attack_01_base_F.hpp | 76 +++++++------------ addons/aircraft/README.md | 2 +- addons/aircraft/RscInGameUI.hpp | 5 +- addons/fcs/CfgOptics.hpp | 8 ++ .../functions/fnc_laserHudDesignateOn.sqf | 4 +- 6 files changed, 50 insertions(+), 54 deletions(-) diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 431abbc307..8fb765c947 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -5,11 +5,14 @@ class CfgAmmo { class ACE_20mm_HEDP : B_20mm { hit = 80; - indirectHit = 25; - indirectHitRange = 1.7; //2; + indirectHit = 12; + indirectHitRange = 2; //2; + caliber = 1.4; + deflecting = 3; fuseDistance = 3; + tracerStartTime = 0.02; timeToLive = 40; - explosive = 0.4; + explosive = 1.8; }; diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index ee271f826a..731fb93d6b 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -869,6 +869,18 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; + outGunnerMayFire = 1; + commanding = -1; + primaryGunner = 1; + gunnerOpticsModel = ""; + gunnerOpticsEffect[] = {"TankCommanderOptics1"}; + gunnerForceOptics = 0; + turretInfoType = "Rsc_ACE_Helo_UI_Turret"; + showAllTargets = 2; + discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; + discretedistanceinitindex = 3; + copilotHasFlares = 1; + isCopilot = 1; showHMD = 1; CanEject = 1; @@ -882,25 +894,6 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { class OpticsIn { - class WideNGS - { - opticsDisplayName = "W"; - initAngleX = 0; - minAngleX = -35; - maxAngleX = 10; - initAngleY = 0; - minAngleY = -100; - maxAngleY = 100; - initFov = 0.466; - minFov = 0.466; - maxFov = 0.466; - visionMode[] = {"Normal","Ti"}; - thermalMode[] = {0,1}; - gunnerOpticsColor[] = {0.15,1,0.15,1}; - gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_03_w_F.p3d"; - directionStabilized = 0; - opticsPPEffects[] = {"OpticsCHAbera2","OpticsBlur2"}; - }; class Wide { opticsDisplayName = "W"; @@ -913,54 +906,43 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { initFov = 0.466; minFov = 0.466; maxFov = 0.466; - visionMode[] = {"Normal","Ti"}; + visionMode[] = {"Normal","NVG","Ti"}; thermalMode[] = {0,1}; - gunnerOpticsColor[] = {0.15,1,0.15,1}; - gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_w_F.p3d"; - directionStabilized = 1; - opticsPPEffects[] = {"OpticsCHAbera2","OpticsBlur2"}; - gunnerOpticsEffect[] = {"TankCommanderOptics1"}; - }; - class WideL: Wide - { - opticsDisplayName = "WL"; - initFov = 0.2; - minFov = 0.2; - maxFov = 0.2; - gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_m_F.p3d"; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; - opticsPPEffects[] = {"OpticsCHAbera2","OpticsBlur2"}; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; class Medium: Wide { opticsDisplayName = "M"; - initFov = 0.1; - minFov = 0.1; - maxFov = 0.1; - directionStabilized = 1; + initFov = 0.093; + minFov = 0.093; + maxFov = 0.093; gunnerOpticsColor[] = {0,0,0,1}; - gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_m_F.p3d"; + directionStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; }; class Narrow: Wide { opticsDisplayName = "N"; + initFov = 0.029; + minFov = 0.029; + maxFov = 0.029; gunnerOpticsColor[] = {0,0,0,1}; - gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_n_F.p3d"; directionStabilized = 1; - initFov = 0.02; - minFov = 0.02; - maxFov = 0.02; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; + }; class Narrower: Wide { - opticsDisplayName = "N"; - gunnerOpticsColor[] = {0,0,0,1}; - gunnerOpticsModel = "A3\Weapons_F\Reticle\Optics_Gunner_MBT_02_n_F.p3d"; - directionStabilized = 1; + opticsDisplayName = "Z"; initFov = 0.01; minFov = 0.01; maxFov = 0.01; + gunnerOpticsColor[] = {0,0,0,1}; + directionStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; + }; }; class OpticsOut diff --git a/addons/aircraft/README.md b/addons/aircraft/README.md index 76c721bd0c..1049493f45 100644 --- a/addons/aircraft/README.md +++ b/addons/aircraft/README.md @@ -3,7 +3,7 @@ ace_aircraft Changes to air weaponry, flightmodels and HUDs. -* Contributations by Kimi for HUD updates +* Contributations by Kimi (geraldbolso1899) for HUD updates ## Maintainers diff --git a/addons/aircraft/RscInGameUI.hpp b/addons/aircraft/RscInGameUI.hpp index 8255de35a6..620d895d9e 100644 --- a/addons/aircraft/RscInGameUI.hpp +++ b/addons/aircraft/RscInGameUI.hpp @@ -8,13 +8,16 @@ class RscOpticsValue; class VScrollbar; class HScrollbar; class RscLadderPicture; +class RscControlsGroupNoScrollbars; + + class RscInGameUI { class RscUnitInfo; class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { idd = 300; - controls[] = {"CA_Zeroing","CA_IGUI_elements_group","CA_VehicleToggles"}; + controls[] = {"CA_IGUI_elements_group","CA_VehicleToggles"}; class VScrollbar; class HScrollbar; class CA_IGUI_elements_group: RscControlsGroup diff --git a/addons/fcs/CfgOptics.hpp b/addons/fcs/CfgOptics.hpp index 3c17e760f0..e32a01b3d1 100644 --- a/addons/fcs/CfgOptics.hpp +++ b/addons/fcs/CfgOptics.hpp @@ -147,6 +147,14 @@ class RscInGameUI { MACRO_RANGEFINDER }; }; + }; + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { + onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"""; + class CA_IGUI_elements_group: RscControlsGroup { + class controls { + MACRO_RANGEFINDER + }; + }; }; class RscOptics_Heli_Attack_01_gunner: RscUnitInfo { onLoad = "uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0]; [""onLoad"",_this,""RscUnitInfo"",'IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf"""; diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 8f2fbbc8f2..2fd1b92cae 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -3,7 +3,7 @@ TRACE_1("enter", _this); -#define FCS_UPDATE_DELAY 2.0 +#define FCS_UPDATE_DELAY 1 FUNC(magnitude) = { _this distance [0, 0, 0] @@ -100,7 +100,7 @@ if(isNil QGVAR(laser)) then { GVAR(laserActive) = true; - _handle = [FUNC(laserHudDesignatePFH), 0, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; + _handle = [FUNC(laserHudDesignatePFH), 0.25, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; GVAR(laser) = _laserTarget; From acf683e6217d8e62037dceb3ec6560cde3e551c5 Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 12:58:53 -0700 Subject: [PATCH 37/57] Call every 10th of a second. --- .../laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index 2fd1b92cae..f0fdc8458f 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -100,7 +100,7 @@ if(isNil QGVAR(laser)) then { GVAR(laserActive) = true; - _handle = [FUNC(laserHudDesignatePFH), 0.25, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; + _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, player]] call cba_fnc_addPerFrameHandler; _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; GVAR(laser) = _laserTarget; From 44c597f7c5de917c5018aa2bc2f9dd7834010c35 Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 6 Apr 2015 22:10:00 +0200 Subject: [PATCH 38/57] Explosives, 2 spaces to 4 space tab. --- addons/explosives/CfgACE_Triggers.hpp | 104 +- addons/explosives/CfgAmmo.hpp | 128 +-- addons/explosives/CfgEventHandlers.hpp | 20 +- addons/explosives/CfgMagazines.hpp | 242 ++--- addons/explosives/CfgModule.hpp | 82 +- addons/explosives/CfgVehicles.hpp | 606 +++++------ addons/explosives/CfgWeapons.hpp | 122 +-- addons/explosives/ExplosivesUI.hpp | 518 ++++----- addons/explosives/config.cpp | 58 +- .../functions/fnc_addCellphoneIED.sqf | 22 +- .../explosives/functions/fnc_addClacker.sqf | 2 + .../functions/fnc_getSpeedDialExplosive.sqf | 8 +- addons/explosives/functions/fnc_module.sqf | 6 +- .../functions/fnc_openTimerSetUI.sqf | 20 +- .../functions/fnc_setupExplosive.sqf | 28 +- .../explosives/functions/fnc_startDefuse.sqf | 64 +- addons/explosives/stringtable.xml | 986 +++++++++--------- 17 files changed, 1510 insertions(+), 1506 deletions(-) diff --git a/addons/explosives/CfgACE_Triggers.hpp b/addons/explosives/CfgACE_Triggers.hpp index 789786bb4f..00522a50e3 100644 --- a/addons/explosives/CfgACE_Triggers.hpp +++ b/addons/explosives/CfgACE_Triggers.hpp @@ -1,54 +1,54 @@ class CfgACE_Triggers { - /* onPlace parameters: - 0: OBJECT - unit placing - 1: OBJECT - Placed explosive - 2: STRING - Magazine classname - 3: ARRAY - vars - Last Index: CfgACE_Triggers config of trigger type. - onSetup parameters: - 0: STRING - Magazine Classname - */ - class Command { - displayName = $STR_ACE_Explosives_clacker_displayName; - picture = PATHTOF(Data\UI\Clacker.paa); - onPlace = QUOTE(_this call FUNC(AddClacker);false); - requires[] = {"ACE_Clacker"}; - }; - class MK16_Transmitter:Command { - displayName = $STR_ACE_Explosives_MK16_displayName; - picture = PATHTOF(Data\UI\MK16_Reciever_ca.paa); - requires[] = {"ACE_M26_Clacker"}; - }; - class DeadManSwitch:Command { - displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; - picture = PATHTOF(Data\UI\DeadmanSwitch.paa); - requires[] = {"ACE_DeadManSwitch"}; - }; - class Cellphone:Command { - displayName = $STR_ACE_Explosives_cellphone_displayName; - picture = PATHTOF(Data\UI\Cellphone_UI.paa); - onPlace = QUOTE(_this call FUNC(addCellphoneIED);false); - requires[] = {"ACE_Cellphone"}; - }; - class PressurePlate { - displayName = $STR_ACE_Explosives_PressurePlate; - picture = PATHTOF(Data\UI\PressurePlate.paa); - onPlace = "_dist=GetNumber(ConfigFile >> 'CfgMagazines' >> (_this select 2) >> 'ACE_Triggers' >> 'PressurePlate' >> 'digDistance');_ex=_this select 1;_ex setPosATL ((getPosATL _ex) vectorDiff ((VectorUp _ex) vectorCrossProduct [0,0,_dist]));false"; - }; - class IRSensor { - displayName = $STR_ACE_Explosives_IRSensor; - picture = PATHTOF(Data\UI\PressurePlate.paa); - onPlace = "false"; - }; - class Timer { - displayName = $STR_ACE_Explosives_timerName; - picture = PATHTOF(data\UI\Timer.paa); - onPlace = QUOTE([ARR_2(_this select 1,(_this select 3) select 0)] call FUNC(startTimer);false); - onSetup = QUOTE(_this call FUNC(openTimerSetUI);true); - }; - class Tripwire { - displayName = $STR_ACE_Explosives_TripWire; - picture = PATHTOF(Data\UI\Tripwire.paa); - onPlace = "false"; - }; +/* onPlace parameters: +0: OBJECT - unit placing +1: OBJECT - Placed explosive +2: STRING - Magazine classname +3: ARRAY - vars +Last Index: CfgACE_Triggers config of trigger type. +onSetup parameters: +0: STRING - Magazine Classname +*/ + class Command { + displayName = $STR_ACE_Explosives_clacker_displayName; + picture = PATHTOF(Data\UI\Clacker.paa); + onPlace = QUOTE(_this call FUNC(AddClacker);false); + requires[] = {"ACE_Clacker"}; + }; + class MK16_Transmitter:Command { + displayName = $STR_ACE_Explosives_MK16_displayName; + picture = PATHTOF(Data\UI\MK16_Reciever_ca.paa); + requires[] = {"ACE_M26_Clacker"}; + }; + class DeadManSwitch:Command { + displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; + picture = PATHTOF(Data\UI\DeadmanSwitch.paa); + requires[] = {"ACE_DeadManSwitch"}; + }; + class Cellphone:Command { + displayName = $STR_ACE_Explosives_cellphone_displayName; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + onPlace = QUOTE(_this call FUNC(addCellphoneIED);false); + requires[] = {"ACE_Cellphone"}; + }; + class PressurePlate { + displayName = $STR_ACE_Explosives_PressurePlate; + picture = PATHTOF(Data\UI\PressurePlate.paa); + onPlace = "_dist=GetNumber(ConfigFile >> 'CfgMagazines' >> (_this select 2) >> 'ACE_Triggers' >> 'PressurePlate' >> 'digDistance');_ex=_this select 1;_ex setPosATL ((getPosATL _ex) vectorDiff ((VectorUp _ex) vectorCrossProduct [0,0,_dist]));false"; + }; + class IRSensor { + displayName = $STR_ACE_Explosives_IRSensor; + picture = PATHTOF(Data\UI\PressurePlate.paa); + onPlace = "false"; + }; + class Timer { + displayName = $STR_ACE_Explosives_timerName; + picture = PATHTOF(data\UI\Timer.paa); + onPlace = QUOTE([ARR_2(_this select 1,(_this select 3) select 0)] call FUNC(startTimer);false); + onSetup = QUOTE(_this call FUNC(openTimerSetUI);true); + }; + class Tripwire { + displayName = $STR_ACE_Explosives_TripWire; + picture = PATHTOF(Data\UI\Tripwire.paa); + onPlace = "false"; + }; }; diff --git a/addons/explosives/CfgAmmo.hpp b/addons/explosives/CfgAmmo.hpp index 4a6e898886..38cd5f508c 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -1,78 +1,78 @@ class CfgAmmo { - // All explosive based Ammo classes. These are all listed in case they become required. - class Default; + // All explosive based Ammo classes. These are all listed in case they become required. + class Default; - class TimeBombCore:Default { - ACE_DefuseTime = 5; - }; - /* - class BoundingMineCore:TimeBombCore; - class BoundingMineBase:BoundingMineCore; - class APERSBoundingMine_Range_Ammo:BoundingMineBase; + class TimeBombCore:Default { + ACE_DefuseTime = 5; + }; + /* + class BoundingMineCore:TimeBombCore; + class BoundingMineBase:BoundingMineCore; + class APERSBoundingMine_Range_Ammo:BoundingMineBase; - class MineCore: TimeBombCore; - class MineBase:MineCore; - class APERSMine_Range_Ammo:MineBase; - class ATMine_Range_Ammo:MineBase; + class MineCore: TimeBombCore; + class MineBase:MineCore; + class APERSMine_Range_Ammo:MineBase; + class ATMine_Range_Ammo:MineBase; - class UnderwaterMine_Range_Ammo:MineBase; - class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo; - class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo; + class UnderwaterMine_Range_Ammo:MineBase; + class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo; + class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo; - class DirectionalBombCore:TimeBombCore; - class DirectionalBombBase:DirectionalBombCore; - class APERSTripMine_Wire_Ammo:DirectionalBombBase; + class DirectionalBombCore:TimeBombCore; + class DirectionalBombBase:DirectionalBombCore; + class APERSTripMine_Wire_Ammo:DirectionalBombBase; - class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase; + class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase; - class PipeBombCore: TimeBombCore; - class PipeBombBase:PipeBombCore; - */ - class DirectionalBombBase; - class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{ - ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; - }; - //class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo; + class PipeBombCore: TimeBombCore; + class PipeBombBase:PipeBombCore; + */ + class DirectionalBombBase; + class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{ + ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted"; + soundActivation[] = {"",0,0,0}; + soundDeactivation[] = {"",0,0,0}; + }; + //class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo; - class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{ - indirectHitRange = 20; - ACE_explodeOnDefuse = 1; - }; - class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo { - mineTrigger = "RemoteTrigger"; - ACE_explodeOnDefuse = 0; - }; - class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo { - mineTrigger = "TimeTrigger"; - ACE_explodeOnDefuse = 0; - }; - class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo { - mineTrigger = "MagneticTrigger"; - }; + class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{ + indirectHitRange = 20; + ACE_explodeOnDefuse = 1; + }; + class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo { + mineTrigger = "RemoteTrigger"; + ACE_explodeOnDefuse = 0; + }; + class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo { + mineTrigger = "TimeTrigger"; + ACE_explodeOnDefuse = 0; + }; + class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo { + mineTrigger = "MagneticTrigger"; + }; - class PipeBombBase; - class DemoCharge_Remote_Ammo:PipeBombBase{ - ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; - hit = 500; - indirectHit = 500; - indirectHitRange = 7; - }; - class SatchelCharge_Remote_Ammo:PipeBombBase{ - ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; - }; - /* - class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo; - class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo; + class PipeBombBase; + class DemoCharge_Remote_Ammo:PipeBombBase{ + ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted"; + soundActivation[] = {"",0,0,0}; + soundDeactivation[] = {"",0,0,0}; + hit = 500; + indirectHit = 500; + indirectHitRange = 7; + }; + class SatchelCharge_Remote_Ammo:PipeBombBase{ + ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted"; + soundActivation[] = {"",0,0,0}; + soundDeactivation[] = {"",0,0,0}; + }; + /* + class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo; + class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo; TODO: Configure IEDs to use the system. - class IEDLandBig_Remote_Ammo:PipeBombBase{ - triggerWhenDestroyed = 1; + class IEDLandBig_Remote_Ammo:PipeBombBase{ + triggerWhenDestroyed = 1; }; class IEDLandSmall_Remote_Ammo:PipeBombBase{ triggerWhenDestroyed = 1; diff --git a/addons/explosives/CfgEventHandlers.hpp b/addons/explosives/CfgEventHandlers.hpp index cefc2fe389..e12d43e0d0 100644 --- a/addons/explosives/CfgEventHandlers.hpp +++ b/addons/explosives/CfgEventHandlers.hpp @@ -1,20 +1,20 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_preInit)); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_postInit)); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; }; /* TODO: Move the addEventHandlers out of PostInit into here or separate eventHandlers, - to enable them on all units, so unit switching works for explosives properly. +to enable them on all units, so unit switching works for explosives properly. class Extended_Init_EventHandlers { - class CAManBase { - init = ""; - } +class CAManBase { +init = ""; +} } */ diff --git a/addons/explosives/CfgMagazines.hpp b/addons/explosives/CfgMagazines.hpp index 51c85e607f..e95e2cfb73 100644 --- a/addons/explosives/CfgMagazines.hpp +++ b/addons/explosives/CfgMagazines.hpp @@ -1,127 +1,127 @@ class CfgMagazines { - class CA_Magazine; - class ATMine_Range_Mag:CA_Magazine{ - ACE_Placeable = 1; - useAction = 0; - ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object. - ACE_DelayTime = 2.5; - class ACE_Triggers { - SupportedTriggers[] = {"PressurePlate"}; - class PressurePlate { - digDistance = 0.1; - }; - }; - }; - class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine"; - class ACE_Triggers { - SupportedTriggers[] = {"PressurePlate"}; - class PressurePlate { - digDistance = 0.075; - }; - }; - }; - class APERSMine_Range_Mag:ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_APERSMine"; - class ACE_Triggers { - SupportedTriggers[] = {"PressurePlate"}; - class PressurePlate { - digDistance = 0.05; - }; - }; - }; - class APERSTripMine_Wire_Mag:ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine"; - class ACE_Triggers { - SupportedTriggers[] = {"Tripwire"}; - class Tripwire; - }; - }; + class CA_Magazine; + class ATMine_Range_Mag:CA_Magazine{ + ACE_Placeable = 1; + useAction = 0; + ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object. + ACE_DelayTime = 2.5; + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.1; + }; + }; + }; + class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine"; + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.075; + }; + }; + }; + class APERSMine_Range_Mag:ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_APERSMine"; + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.05; + }; + }; + }; + class APERSTripMine_Wire_Mag:ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine"; + class ACE_Triggers { + SupportedTriggers[] = {"Tripwire"}; + class Tripwire; + }; + }; - class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{ - ACE_Placeable = 1; - useAction = 0; - ACE_SetupObject = "ACE_Explosives_Place_Claymore"; - ACE_DelayTime = 1.5; - class ACE_Triggers { - SupportedTriggers[] = {"Command"}; - class Command { - FuseTime = 0.5; - }; - }; - }; + class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{ + ACE_Placeable = 1; + useAction = 0; + ACE_SetupObject = "ACE_Explosives_Place_Claymore"; + ACE_DelayTime = 1.5; + class ACE_Triggers { + SupportedTriggers[] = {"Command"}; + class Command { + FuseTime = 0.5; + }; + }; + }; - class SatchelCharge_Remote_Mag:CA_Magazine{ - ACE_Placeable = 1; - useAction = 0; - ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge"; - ACE_DelayTime = 1; - class ACE_Triggers { - SupportedTriggers[] = {"Timer","Command", "MK16_Transmitter", "DeadmanSwitch"}; - class Timer { - FuseTime = 0.5; - }; - class Command { - FuseTime = 0.5; - }; - class MK16_Transmitter:Command{}; - class DeadmanSwitch:Command{}; - }; - }; - class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_DemoCharge"; - model = "\A3\Weapons_F\explosives\c4_charge_small_d"; - }; + class SatchelCharge_Remote_Mag:CA_Magazine{ + ACE_Placeable = 1; + useAction = 0; + ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge"; + ACE_DelayTime = 1; + class ACE_Triggers { + SupportedTriggers[] = {"Timer","Command", "MK16_Transmitter", "DeadmanSwitch"}; + class Timer { + FuseTime = 0.5; + }; + class Command { + FuseTime = 0.5; + }; + class MK16_Transmitter:Command{}; + class DeadmanSwitch:Command{}; + }; + }; + class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_DemoCharge"; + model = "\A3\Weapons_F\explosives\c4_charge_small_d"; + }; - class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_SLAM"; - class ACE_Triggers { - SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"}; - class PressurePlate{ - displayName = $STR_ACE_Explosives_SLAME_Magnetic; - digDistance = 0; - ammo = "SLAMDirectionalMine_Magnetic_Ammo"; - pitch = 90; - }; - class IRSensor{ - displayName = $STR_ACE_Explosives_SLAME_IRSensor; - }; - class Timer { - ammo = "SLAMDirectionalMine_Timer_Ammo"; - }; - class Command { - ammo = "SLAMDirectionalMine_Command_Ammo"; - fuseTime = 0.5; - }; - }; - }; + class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_SLAM"; + class ACE_Triggers { + SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"}; + class PressurePlate{ + displayName = $STR_ACE_Explosives_SLAME_Magnetic; + digDistance = 0; + ammo = "SLAMDirectionalMine_Magnetic_Ammo"; + pitch = 90; + }; + class IRSensor{ + displayName = $STR_ACE_Explosives_SLAME_IRSensor; + }; + class Timer { + ammo = "SLAMDirectionalMine_Timer_Ammo"; + }; + class Command { + ammo = "SLAMDirectionalMine_Command_Ammo"; + fuseTime = 0.5; + }; + }; + }; - class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { - ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; - class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; - class Command { - FuseTime = 0.5; - }; - class DeadmanSwitch:Command{}; - class Cellphone:Command{}; - }; - }; - class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; - }; - class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { - ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; - class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; - class Command { - FuseTime = 0.5; - }; - class DeadmanSwitch:Command{}; - class Cellphone:Command{}; - }; - }; - class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { - ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; - }; + class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; + }; + class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; + }; }; diff --git a/addons/explosives/CfgModule.hpp b/addons/explosives/CfgModule.hpp index fe467cbb53..7486973b2c 100644 --- a/addons/explosives/CfgModule.hpp +++ b/addons/explosives/CfgModule.hpp @@ -1,44 +1,44 @@ class Module_F; class ACE_ModuleExplosive: Module_F { - author = "$STR_ACE_Common_ACETeam"; - category = "ACE"; - displayName = "Explosive System"; - function = QUOTE(FUNC(module)); - scope = 2; - isGlobal = 1; - icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa); - class Arguments { - class RequireSpecialist { - displayName = "Require specialists?"; - description = "Require explosive specialists to disable explosives? Default: No"; - typeName = "BOOL"; - class values { - class Yes { - name = "Yes"; - value = 1; - }; - class No { - default = 1; - name = "No"; - value = 0; - }; - }; - }; - class PunishNonSpecialists { - displayName = "Punish non-specialists?"; - description = "Increase the time it takes to complete actions for non-specialists? Default: Yes"; - typeName = "BOOL"; - class values { - class Yes { - default = 1; - name = "Yes"; - value = 1; - }; - class No { - name = "No"; - value = 0; - }; - }; - }; - }; + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "Explosive System"; + function = QUOTE(FUNC(module)); + scope = 2; + isGlobal = 1; + icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa); + class Arguments { + class RequireSpecialist { + displayName = "Require specialists?"; + description = "Require explosive specialists to disable explosives? Default: No"; + typeName = "BOOL"; + class values { + class Yes { + name = "Yes"; + value = 1; + }; + class No { + default = 1; + name = "No"; + value = 0; + }; + }; + }; + class PunishNonSpecialists { + displayName = "Punish non-specialists?"; + description = "Increase the time it takes to complete actions for non-specialists? Default: Yes"; + typeName = "BOOL"; + class values { + class Yes { + default = 1; + name = "Yes"; + value = 1; + }; + class No { + name = "No"; + value = 0; + }; + }; + }; + }; }; diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 86bf0e5325..2be23e78b5 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -1,327 +1,327 @@ class CfgVehicles { - class Man; - class CAManBase: Man { - class ACE_SelfActions { - class ACE_Explosives { - displayName = $STR_ACE_Explosives_Menu; - condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)])); - statement = ""; - exceptions[] = {"isNotSwimming", "isNotInside"}; - showDisabled = 1; - priority = 4; - icon = PATHTOF(UI\Explosives_Menu_ca.paa); - hotkey = "X"; - //Sub-menu items - class ACE_Detonate { - displayName = $STR_ACE_Explosives_Detonate; - condition = QUOTE([_player] call FUNC(canDetonate)); - statement = ""; - insertChildren = QUOTE([_player] call FUNC(addTransmitterActions);); - exceptions[] = {"isNotSwimming", "isNotInside"}; - showDisabled = 1; - icon = PATHTOF(UI\Explosives_Menu_ca.paa); - priority = 2; - hotkey = "T"; - }; - class ACE_Place { - displayName = $STR_ACE_Explosives_Place; - condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)}); - statement = ""; - insertChildren = QUOTE([_player] call FUNC(addExplosiveActions);); - exceptions[] = {"isNotSwimming"}; - showDisabled = 1; - icon = PATHTOF(UI\Place_Explosive_ca.paa); - priority = 1; - hotkey = "P"; - }; - class ACE_Cellphone { - displayName = $STR_ACE_Explosives_cellphone_displayName; - condition = "('ACE_Cellphone' in (items ace_player))"; - statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; - exceptions[] = {"isNotSwimming", "isNotInside"}; - showDisabled = 0; - icon = PATHTOF(Data\UI\Cellphone_UI.paa); - priority = 0.8; - }; - }; - }; - }; + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_Explosives { + displayName = $STR_ACE_Explosives_Menu; + condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)])); + statement = ""; + exceptions[] = {"isNotSwimming", "isNotInside"}; + showDisabled = 1; + priority = 4; + icon = PATHTOF(UI\Explosives_Menu_ca.paa); + hotkey = "X"; + //Sub-menu items + class ACE_Detonate { + displayName = $STR_ACE_Explosives_Detonate; + condition = QUOTE([_player] call FUNC(canDetonate)); + statement = ""; + insertChildren = QUOTE([_player] call FUNC(addTransmitterActions);); + exceptions[] = {"isNotSwimming", "isNotInside"}; + showDisabled = 1; + icon = PATHTOF(UI\Explosives_Menu_ca.paa); + priority = 2; + hotkey = "T"; + }; + class ACE_Place { + displayName = $STR_ACE_Explosives_Place; + condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)}); + statement = ""; + insertChildren = QUOTE([_player] call FUNC(addExplosiveActions);); + exceptions[] = {"isNotSwimming"}; + showDisabled = 1; + icon = PATHTOF(UI\Place_Explosive_ca.paa); + priority = 1; + hotkey = "P"; + }; + class ACE_Cellphone { + displayName = $STR_ACE_Explosives_cellphone_displayName; + condition = "('ACE_Cellphone' in (items ace_player))"; + statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; + exceptions[] = {"isNotSwimming", "isNotInside"}; + showDisabled = 0; + icon = PATHTOF(Data\UI\Cellphone_UI.paa); + priority = 0.8; + }; + }; + }; + }; - class Items_base_F; - class ACE_DefuseObject: Items_base_F { - XEH_ENABLED; - author = "ACE"; - _generalMacro = "ACE_DefuseObject"; - displayName = "ACE Defuse Helper"; - mapSize = 0.2; - icon = "iconObject_1x2"; - model = "\A3\Weapons_f\dummyweapon.p3d"; - scope = 2; - scopeCurator = 1; - vehicleClass = "Cargo"; - class ACE_Actions { - class ACE_MainActions { - selection = ""; - distance = 5; - condition = "true"; - class ACE_Defuse { - displayName = $STR_ACE_Explosives_Defuse; - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDefuse)); - statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse);); - exceptions[] = {"isNotSwimming"}; - showDisabled = 0; - icon = PATHTOF(UI\Defuse_ca.paa); - priority = 0.8; - hotkey = "F"; - distance = 5; - }; - }; - }; - }; - class ACE_Explosives_Place: Items_base_F { - XEH_ENABLED; - author = "ACE"; - _generalMacro = "ACE_Explosives_Place"; - displayName = "Multi-meter"; - mapSize = 0.2; - icon = "iconObject_1x2"; - model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d"; - scope = 2; - scopeCurator = 1; - vehicleClass = "Cargo"; - ACE_offset[] = {0,0,0}; - class ACE_Actions { - class ACE_MainActions { - selection = ""; - distance = 5; - condition = "true"; - class ACE_SetTrigger { - selection = ""; - displayName = "$STR_ACE_Explosives_TriggerMenu"; - distance = 4; - condition = "true"; - statement = ""; - insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); - showDisabled = 0; - exceptions[] = {}; - priority = 5; - icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); - }; - class ACE_PickUp { - selection = ""; - displayName = "$STR_ACE_Explosives_Pickup"; - distance = 4; - condition = "true"; - statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); - showDisabled = 0; - exceptions[] = {}; - priority = 5; - icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; - }; - }; - }; - }; + class Items_base_F; + class ACE_DefuseObject: Items_base_F { + XEH_ENABLED; + author = "ACE"; + _generalMacro = "ACE_DefuseObject"; + displayName = "ACE Defuse Helper"; + mapSize = 0.2; + icon = "iconObject_1x2"; + model = "\A3\Weapons_f\dummyweapon.p3d"; + scope = 2; + scopeCurator = 1; + vehicleClass = "Cargo"; + class ACE_Actions { + class ACE_MainActions { + selection = ""; + distance = 5; + condition = "true"; + class ACE_Defuse { + displayName = $STR_ACE_Explosives_Defuse; + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDefuse)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse);); + exceptions[] = {"isNotSwimming"}; + showDisabled = 0; + icon = PATHTOF(UI\Defuse_ca.paa); + priority = 0.8; + hotkey = "F"; + distance = 5; + }; + }; + }; + }; + class ACE_Explosives_Place: Items_base_F { + XEH_ENABLED; + author = "ACE"; + _generalMacro = "ACE_Explosives_Place"; + displayName = "Multi-meter"; + mapSize = 0.2; + icon = "iconObject_1x2"; + model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d"; + scope = 2; + scopeCurator = 1; + vehicleClass = "Cargo"; + ACE_offset[] = {0,0,0}; + class ACE_Actions { + class ACE_MainActions { + selection = ""; + distance = 5; + condition = "true"; + class ACE_SetTrigger { + selection = ""; + displayName = "$STR_ACE_Explosives_TriggerMenu"; + distance = 4; + condition = "true"; + statement = ""; + insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + }; + class ACE_PickUp { + selection = ""; + displayName = "$STR_ACE_Explosives_Pickup"; + distance = 4; + condition = "true"; + statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; + }; + }; + }; + }; - class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place { - displayName = "Demo Charge"; - model = "\A3\Weapons_F\explosives\c4_charge_small_d"; - }; - class ACE_Explosives_Place_APERSBoundingMine:ACE_Explosives_Place { - displayName = "APERS Bounding Mine"; - model = "\A3\Weapons_F\explosives\mine_AP_bouncing"; - }; - class ACE_Explosives_Place_APERSMine:ACE_Explosives_Place { - displayName = "APERS Mine"; - model = "\A3\Weapons_F\explosives\mine_ap"; - }; - class ACE_Explosives_Place_APERSTripwireMine:ACE_Explosives_Place { - displayName = "APERS Tripwire Mine"; - model = "\A3\Weapons_F\explosives\mine_AP_tripwire"; - ACE_offset[] = {1,0,0}; - }; + class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place { + displayName = "Demo Charge"; + model = "\A3\Weapons_F\explosives\c4_charge_small_d"; + }; + class ACE_Explosives_Place_APERSBoundingMine:ACE_Explosives_Place { + displayName = "APERS Bounding Mine"; + model = "\A3\Weapons_F\explosives\mine_AP_bouncing"; + }; + class ACE_Explosives_Place_APERSMine:ACE_Explosives_Place { + displayName = "APERS Mine"; + model = "\A3\Weapons_F\explosives\mine_ap"; + }; + class ACE_Explosives_Place_APERSTripwireMine:ACE_Explosives_Place { + displayName = "APERS Tripwire Mine"; + model = "\A3\Weapons_F\explosives\mine_AP_tripwire"; + ACE_offset[] = {1,0,0}; + }; - class ACE_Explosives_Place_ATMine:ACE_Explosives_Place { - displayName = "AT Mine"; - model = "\A3\Weapons_f\Explosives\mine_at"; - }; + class ACE_Explosives_Place_ATMine:ACE_Explosives_Place { + displayName = "AT Mine"; + model = "\A3\Weapons_f\Explosives\mine_at"; + }; - class ACE_Explosives_Place_Claymore:ACE_Explosives_Place { - displayName = "Claymore"; - model = "\A3\Weapons_F\explosives\mine_AP_miniclaymore"; - }; + class ACE_Explosives_Place_Claymore:ACE_Explosives_Place { + displayName = "Claymore"; + model = "\A3\Weapons_F\explosives\mine_AP_miniclaymore"; + }; - class ACE_Explosives_Place_SatchelCharge:ACE_Explosives_Place { - displayName = "Satchel Charge"; - model = "\A3\Weapons_F\Explosives\satchel"; - }; + class ACE_Explosives_Place_SatchelCharge:ACE_Explosives_Place { + displayName = "Satchel Charge"; + model = "\A3\Weapons_F\Explosives\satchel"; + }; - class ACE_Explosives_Place_SLAM:ACE_Explosives_Place { - displayName = "SLAM"; - model = "\A3\Weapons_F\Explosives\mine_SLAM_directional"; - }; + class ACE_Explosives_Place_SLAM:ACE_Explosives_Place { + displayName = "SLAM"; + model = "\A3\Weapons_F\Explosives\mine_SLAM_directional"; + }; - // IEDs - class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place { - displayName = "IED Urban Big"; - model = "\A3\Weapons_F\Explosives\IED_urban_big"; - }; + // IEDs + class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place { + displayName = "IED Urban Big"; + model = "\A3\Weapons_F\Explosives\IED_urban_big"; + }; - class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place { - displayName = "IED Land Big"; - model = "\A3\Weapons_F\Explosives\IED_land_big"; - }; + class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place { + displayName = "IED Land Big"; + model = "\A3\Weapons_F\Explosives\IED_land_big"; + }; - class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place { - displayName = "IED Urban Small"; - model = "\A3\Weapons_F\Explosives\IED_urban_small"; - }; + class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place { + displayName = "IED Urban Small"; + model = "\A3\Weapons_F\Explosives\IED_urban_small"; + }; - class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place { - displayName = "IED Land Small"; - model = "\A3\Weapons_F\Explosives\IED_land_small"; - }; + class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place { + displayName = "IED Land Small"; + model = "\A3\Weapons_F\Explosives\IED_land_small"; + }; - class NATO_Box_Base; - class EAST_Box_Base; - class IND_Box_Base; - class FIA_Box_Base_F; - class Box_NATO_Support_F; + class NATO_Box_Base; + class EAST_Box_Base; + class IND_Box_Base; + class FIA_Box_Base_F; + class Box_NATO_Support_F; - class Box_NATO_AmmoOrd_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - }; - }; + class Box_NATO_AmmoOrd_F: NATO_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + }; + }; - class Box_East_AmmoOrd_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - }; - }; + class Box_East_AmmoOrd_F: EAST_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + }; + }; - class Box_IND_AmmoOrd_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - MACRO_ADDITEM(ACE_Deadmanswitch,2); - MACRO_ADDITEM(ACE_Cellphone,3); - }; - }; + class Box_IND_AmmoOrd_F: IND_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + MACRO_ADDITEM(ACE_Deadmanswitch,2); + MACRO_ADDITEM(ACE_Cellphone,3); + }; + }; - class Box_FIA_Ammo_F: FIA_Box_Base_F { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,2); - MACRO_ADDITEM(ACE_M26_Clacker,2); - MACRO_ADDITEM(ACE_DefusalKit,2); - MACRO_ADDITEM(ACE_Deadmanswitch,1); - MACRO_ADDITEM(ACE_Cellphone,2); - }; - }; + class Box_FIA_Ammo_F: FIA_Box_Base_F { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,2); + MACRO_ADDITEM(ACE_M26_Clacker,2); + MACRO_ADDITEM(ACE_DefusalKit,2); + MACRO_ADDITEM(ACE_Deadmanswitch,1); + MACRO_ADDITEM(ACE_Cellphone,2); + }; + }; - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - MACRO_ADDITEM(ACE_Deadmanswitch,6); - MACRO_ADDITEM(ACE_Cellphone,10); - }; - }; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + MACRO_ADDITEM(ACE_Deadmanswitch,6); + MACRO_ADDITEM(ACE_Cellphone,10); + }; + }; - class B_Kitbag_rgr; - class B_Kitbag_rgr_Exp: B_Kitbag_rgr { - class TransportItems { - class _xx_ToolKit { // xXToOlKiT420mLgXx - count = 0; - }; - }; - }; - class B_Carryall_ocamo; - class B_Carryall_ocamo_Exp: B_Carryall_ocamo { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; - class B_Carryall_oucamo; - class B_Carryall_oucamo_Exp: B_Carryall_oucamo { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; - class B_Carryall_oli; - class G_Carryall_Exp: B_Carryall_oli { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; - class I_Carryall_oli_Exp: B_Carryall_oli { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; + class B_Kitbag_rgr; + class B_Kitbag_rgr_Exp: B_Kitbag_rgr { + class TransportItems { + class _xx_ToolKit { // xXToOlKiT420mLgXx + count = 0; + }; + }; + }; + class B_Carryall_ocamo; + class B_Carryall_ocamo_Exp: B_Carryall_ocamo { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; + class B_Carryall_oucamo; + class B_Carryall_oucamo_Exp: B_Carryall_oucamo { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; + class B_Carryall_oli; + class G_Carryall_Exp: B_Carryall_oli { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; + class I_Carryall_oli_Exp: B_Carryall_oli { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; - #include "CfgModule.hpp" + #include "CfgModule.hpp" - // Add ACE_Clacker and ACE_DefusalKit to every explosive unit. - #define MACRO_ADDMINEKIT \ - items[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; \ - respawnitems[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; + // Add ACE_Clacker and ACE_DefusalKit to every explosive unit. + #define MACRO_ADDMINEKIT \ + items[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; \ + respawnitems[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; - class B_Soldier_base_F; class B_soldier_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; - class B_Soldier_03_f; class B_engineer_F:B_Soldier_03_f {MACRO_ADDMINEKIT}; - class B_Soldier_diver_base_F; class B_diver_exp_F:B_Soldier_diver_base_F {MACRO_ADDMINEKIT}; - class B_Soldier_recon_base; class B_recon_exp_F:B_Soldier_recon_base {MACRO_ADDMINEKIT}; - class B_CTRG_soldier_engineer_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_G_Soldier_base_F; class I_G_engineer_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_G_Soldier_exp_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; - class B_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; - class O_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; - class B_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; - class O_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; - class I_Soldier_02_F; class I_Soldier_exp_F:I_Soldier_02_F {MACRO_ADDMINEKIT}; - class I_Soldier_base_F; class I_engineer_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_Soldier_diver_base_F; class I_diver_exp_F:I_Soldier_diver_base_F {MACRO_ADDMINEKIT}; - class O_Soldier_base_F; class O_soldier_exp_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; - class O_engineer_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; - class O_Soldier_diver_base_F; class O_diver_exp_F:O_Soldier_diver_base_F {MACRO_ADDMINEKIT}; - class O_Soldier_recon_base; class O_recon_exp_F:O_Soldier_recon_base {MACRO_ADDMINEKIT}; - class O_Soldier_Urban_base; class O_soldierU_exp_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; - class O_engineer_U_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; - class B_Protagonist_VR_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; - class O_Protagonist_VR_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_Protagonist_VR_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; - class B_Soldier_F; class b_soldier_universal_f:B_Soldier_F {MACRO_ADDMINEKIT}; - class B_G_Soldier_F; class b_g_soldier_universal_f:B_G_Soldier_F {MACRO_ADDMINEKIT}; - class O_Soldier_F; class o_soldier_universal_f:O_Soldier_F {MACRO_ADDMINEKIT}; - class O_G_Soldier_F; class o_g_soldier_universal_f:O_G_Soldier_F {MACRO_ADDMINEKIT}; - class I_soldier_F; class i_soldier_universal_f:I_soldier_F {MACRO_ADDMINEKIT}; - class I_G_Soldier_F; class i_g_soldier_universal_f:I_G_Soldier_F {MACRO_ADDMINEKIT}; + class B_Soldier_base_F; class B_soldier_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; + class B_Soldier_03_f; class B_engineer_F:B_Soldier_03_f {MACRO_ADDMINEKIT}; + class B_Soldier_diver_base_F; class B_diver_exp_F:B_Soldier_diver_base_F {MACRO_ADDMINEKIT}; + class B_Soldier_recon_base; class B_recon_exp_F:B_Soldier_recon_base {MACRO_ADDMINEKIT}; + class B_CTRG_soldier_engineer_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_G_Soldier_base_F; class I_G_engineer_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_G_Soldier_exp_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; + class B_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; + class O_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; + class B_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; + class O_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; + class I_Soldier_02_F; class I_Soldier_exp_F:I_Soldier_02_F {MACRO_ADDMINEKIT}; + class I_Soldier_base_F; class I_engineer_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_Soldier_diver_base_F; class I_diver_exp_F:I_Soldier_diver_base_F {MACRO_ADDMINEKIT}; + class O_Soldier_base_F; class O_soldier_exp_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; + class O_engineer_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; + class O_Soldier_diver_base_F; class O_diver_exp_F:O_Soldier_diver_base_F {MACRO_ADDMINEKIT}; + class O_Soldier_recon_base; class O_recon_exp_F:O_Soldier_recon_base {MACRO_ADDMINEKIT}; + class O_Soldier_Urban_base; class O_soldierU_exp_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; + class O_engineer_U_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; + class B_Protagonist_VR_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; + class O_Protagonist_VR_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_Protagonist_VR_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; + class B_Soldier_F; class b_soldier_universal_f:B_Soldier_F {MACRO_ADDMINEKIT}; + class B_G_Soldier_F; class b_g_soldier_universal_f:B_G_Soldier_F {MACRO_ADDMINEKIT}; + class O_Soldier_F; class o_soldier_universal_f:O_Soldier_F {MACRO_ADDMINEKIT}; + class O_G_Soldier_F; class o_g_soldier_universal_f:O_G_Soldier_F {MACRO_ADDMINEKIT}; + class I_soldier_F; class i_soldier_universal_f:I_soldier_F {MACRO_ADDMINEKIT}; + class I_G_Soldier_F; class i_g_soldier_universal_f:I_G_Soldier_F {MACRO_ADDMINEKIT}; - // Add ACE_Clacker to snipers and spotters for setting off Claymores - #define MACRO_ADDCLAYMOREKIT \ - items[] = {"FirstAidKit","ACE_Clacker"}; \ - respawnitems[] = {"FirstAidKit","ACE_Clacker"}; + // Add ACE_Clacker to snipers and spotters for setting off Claymores + #define MACRO_ADDCLAYMOREKIT \ + items[] = {"FirstAidKit","ACE_Clacker"}; \ + respawnitems[] = {"FirstAidKit","ACE_Clacker"}; - class B_Soldier_sniper_base_F; - class B_sniper_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class B_spotter_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class I_Soldier_sniper_base_F; - class I_Sniper_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class I_Spotter_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class O_Soldier_sniper_base_F; - class O_sniper_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class O_spotter_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class B_Soldier_sniper_base_F; + class B_sniper_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class B_spotter_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class I_Soldier_sniper_base_F; + class I_Sniper_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class I_Spotter_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class O_Soldier_sniper_base_F; + class O_sniper_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class O_spotter_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; }; diff --git a/addons/explosives/CfgWeapons.hpp b/addons/explosives/CfgWeapons.hpp index fd142019e8..881864076e 100644 --- a/addons/explosives/CfgWeapons.hpp +++ b/addons/explosives/CfgWeapons.hpp @@ -1,69 +1,69 @@ class CfgWeapons { - class ACE_ItemCore; - class InventoryItem_Base_f; + class ACE_ItemCore; + class InventoryItem_Base_f; - class ACE_ExplosiveItem: InventoryItem_Base_f { - allowedSlots[] = {801,701,901}; - //type = 201; - }; + class ACE_ExplosiveItem: InventoryItem_Base_f { + allowedSlots[] = {801,701,901}; + //type = 201; + }; - class ACE_Clacker: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_clacker_displayName; - descriptionShort = $STR_ACE_Explosives_clacker_description; - picture = PATHTOF(Data\UI\Clacker.paa); - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - ACE_Range = 250; - ACE_Detonator = 1; + class ACE_Clacker: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_clacker_displayName; + descriptionShort = $STR_ACE_Explosives_clacker_description; + picture = PATHTOF(Data\UI\Clacker.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 250; + ACE_Detonator = 1; - class ItemInfo: ACE_ExplosiveItem { - mass = 3; - uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; - }; - }; - class ACE_M26_Clacker: ACE_Clacker { - displayName = $STR_ACE_Explosives_M26_displayName; - picture = PATHTOF(Data\UI\MK26_Transmitter_ca.paa); - ACE_Range = 5000; - }; - class ACE_DefusalKit: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_DefusalKit_displayName; - descriptionShort = $STR_ACE_Explosives_DefusalKit_description; - picture = PATHTOF(Data\UI\Pliers.paa); - model = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; + class ItemInfo: ACE_ExplosiveItem { + mass = 3; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; + class ACE_M26_Clacker: ACE_Clacker { + displayName = $STR_ACE_Explosives_M26_displayName; + picture = PATHTOF(Data\UI\MK26_Transmitter_ca.paa); + ACE_Range = 5000; + }; + class ACE_DefusalKit: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_DefusalKit_displayName; + descriptionShort = $STR_ACE_Explosives_DefusalKit_description; + picture = PATHTOF(Data\UI\Pliers.paa); + model = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; - class ItemInfo: ACE_ExplosiveItem { - mass = 5; - uniformModel = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; - }; - }; - class ACE_DeadManSwitch: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; - descriptionShort = $STR_ACE_Explosives_DeadManSwitch_description; - picture = PATHTOF(Data\UI\DeadmanSwitch.paa); - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - ACE_Range = 100; - ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { + mass = 5; + uniformModel = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; + }; + }; + class ACE_DeadManSwitch: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; + descriptionShort = $STR_ACE_Explosives_DeadManSwitch_description; + picture = PATHTOF(Data\UI\DeadmanSwitch.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 100; + ACE_Detonator = 1; - class ItemInfo: ACE_ExplosiveItem { - mass = 2; - uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; - }; - }; - class ACE_Cellphone: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_cellphone_displayName; - descriptionShort = $STR_ACE_Explosives_cellphone_description; - picture = PATHTOF(Data\UI\Cellphone_UI.paa); - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - ACE_Range = 15000; - ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { + mass = 2; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; + class ACE_Cellphone: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_cellphone_displayName; + descriptionShort = $STR_ACE_Explosives_cellphone_description; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 15000; + ACE_Detonator = 1; - class ItemInfo: ACE_ExplosiveItem { - mass = 2; - uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; - }; - }; + class ItemInfo: ACE_ExplosiveItem { + mass = 2; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; }; diff --git a/addons/explosives/ExplosivesUI.hpp b/addons/explosives/ExplosivesUI.hpp index 769b3dc167..ac7a66e954 100644 --- a/addons/explosives/ExplosivesUI.hpp +++ b/addons/explosives/ExplosivesUI.hpp @@ -14,275 +14,275 @@ class RscPicture; class RscEdit; class Rsc_ACE_CallScreen_Edit:RscEdit { - canModify = 1; - colorBackground[] = {0,0,0,1}; - colorText[] = {0,0,0,1}; - colorDisabled[] = {1,1,1,0.25}; - colorSelection[] = { - "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", - "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", - "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", - 1 - }; - text = ""; - style = "0x00 + 0x40 + 0x200"; - shadow = 1; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)"; - x = 0.288594 * safezoneW + safezoneX; - w = 0.0825 * safezoneW; - h = 0.044 * safezoneH; + canModify = 1; + colorBackground[] = {0,0,0,1}; + colorText[] = {0,0,0,1}; + colorDisabled[] = {1,1,1,0.25}; + colorSelection[] = { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + text = ""; + style = "0x00 + 0x40 + 0x200"; + shadow = 1; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; }; class Rsc_ACE_HiddenButton:RscButton { - colorText[] = {0, 0, 0, 0}; - colorDisabled[] = {0, 0, 0, 0}; - colorBackground[] = {0, 0, 0, 0}; - colorBackgroundDisabled[] = {0, 0, 0, 0}; - colorBackgroundActive[] = {0, 0, 0, 0}; - colorFocused[] = {0, 0, 0, 0}; - colorShadow[] = {0, 0, 0, 0}; - colorBorder[] = {0, 0, 0, 0}; - w = 0.095589; - h = 0.039216; - shadow = 0; + colorText[] = {0, 0, 0, 0}; + colorDisabled[] = {0, 0, 0, 0}; + colorBackground[] = {0, 0, 0, 0}; + colorBackgroundDisabled[] = {0, 0, 0, 0}; + colorBackgroundActive[] = {0, 0, 0, 0}; + colorFocused[] = {0, 0, 0, 0}; + colorShadow[] = {0, 0, 0, 0}; + colorBorder[] = {0, 0, 0, 0}; + w = 0.095589; + h = 0.039216; + shadow = 0; }; class Rsc_ACE_Timer_Slider:RscXSliderH { - x = 0.4; - y = 0.2; - w = 0.3; - h = "1*((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0,0,0,0.5}; + x = 0.4; + y = 0.2; + w = 0.3; + h = "1*((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0,0,0,0.5}; }; class RscACE_SelectTimeUI { - idd = 8854; - movingEnable = 0; - class controls { - class back:IGUIBack { - x = X_OFFSET; - y = 0; - w = 0.5; - h = 0.2; - colorBackground[] = {0, 0, 0, 0.5}; - }; - class header: RscText{ - idc = 8870; - x = X_OFFSET + 0.005; - y = 0.005; - w = 0.49; - h = 0.05; - style = ST_CENTER; - text = ""; - }; - class slider: Rsc_ACE_Timer_Slider { - idc = 8845; - x = X_OFFSET + 0.005; - y = 0.06; - w = 0.49; - h = 0.025; - onSliderPosChanged = "private ['_mins', '_secs'];_mins = floor((_this select 1)/60);_secs=floor((_this select 1) - (_mins*60));ctrlSetText [8870, format[localize 'STR_ACE_Explosives_TimerMenu',_mins, _secs]];"; - }; - class cancelBtn: RscButton { - idc = 8855; - x = X_OFFSET + 0.005; - w = 0.15; - h = 0.1; - y = 0.09; - style = ST_CENTER; - text = $STR_ACE_Explosives_Cancel; - action = "closeDialog 0;"; - }; - class approveBtn: RscButton { - idc = 8860; - x = X_OFFSET + 0.345; - y = 0.09; - h = 0.1; - w = 0.15; - style = ST_CENTER; - text = $STR_ACE_Explosives_SetTime; - action = "closeDialog 0;"; - }; - }; + idd = 8854; + movingEnable = 0; + class controls { + class back:IGUIBack { + x = X_OFFSET; + y = 0; + w = 0.5; + h = 0.2; + colorBackground[] = {0, 0, 0, 0.5}; + }; + class header: RscText{ + idc = 8870; + x = X_OFFSET + 0.005; + y = 0.005; + w = 0.49; + h = 0.05; + style = ST_CENTER; + text = ""; + }; + class slider: Rsc_ACE_Timer_Slider { + idc = 8845; + x = X_OFFSET + 0.005; + y = 0.06; + w = 0.49; + h = 0.025; + onSliderPosChanged = "private ['_mins', '_secs'];_mins = floor((_this select 1)/60);_secs=floor((_this select 1) - (_mins*60));ctrlSetText [8870, format[localize 'STR_ACE_Explosives_TimerMenu',_mins, _secs]];"; + }; + class cancelBtn: RscButton { + idc = 8855; + x = X_OFFSET + 0.005; + w = 0.15; + h = 0.1; + y = 0.09; + style = ST_CENTER; + text = $STR_ACE_Explosives_Cancel; + action = "closeDialog 0;"; + }; + class approveBtn: RscButton { + idc = 8860; + x = X_OFFSET + 0.345; + y = 0.09; + h = 0.1; + w = 0.15; + style = ST_CENTER; + text = $STR_ACE_Explosives_SetTime; + action = "closeDialog 0;"; + }; + }; }; class Rsc_ACE_NumKeyButton: Rsc_ACE_HiddenButton{}; class Rsc_ACE_PhoneInterface { - idd = 8855; - movingEnable = 1; - onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1); - class controls { - class RscPicture_1200: RscPicture { - idc = 1200; - text = PATHTOF(Data\UI\Cellphone_Background.paa); - x = 0.231875 * safezoneW + safezoneX; - y = 0.104 * safezoneH + safezoneY; - w = 0.195937 * safezoneW; - h = 0.704 * safezoneH; - }; - class numkey_1: Rsc_ACE_NumKeyButton { - idc = 1600; - x = 0.278281 * safezoneW + safezoneX; - y = 0.533 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "1"; - action = "ctrlSetText [1400,((ctrlText 1400) + '1')];"; - }; - class numkey_2: Rsc_ACE_NumKeyButton { - idc = 1601; - x = 0.314375 * safezoneW + safezoneX; - y = 0.533 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "2"; - action = "ctrlSetText [1400,((ctrlText 1400) + '2')];"; - }; - class numkey_3: Rsc_ACE_NumKeyButton { - idc = 1602; - x = 0.350469 * safezoneW + safezoneX; - y = 0.533 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "3"; - action = "ctrlSetText [1400,((ctrlText 1400) + '3')];"; - }; - class numkey_4: Rsc_ACE_NumKeyButton { - idc = 1603; - x = 0.278281 * safezoneW + safezoneX; - y = 0.577 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "4"; - action = "ctrlSetText [1400,((ctrlText 1400) + '4')];"; - }; - class numkey_5: Rsc_ACE_NumKeyButton { - idc = 1604; - x = 0.314375 * safezoneW + safezoneX; - y = 0.577 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "5"; - action = "ctrlSetText [1400,((ctrlText 1400) + '5')];"; - }; - class numkey_6: Rsc_ACE_NumKeyButton { - idc = 1605; - x = 0.350469 * safezoneW + safezoneX; - y = 0.577 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "6"; - action = "ctrlSetText [1400,((ctrlText 1400) + '6')];"; - }; - class numkey_7: Rsc_ACE_NumKeyButton { - idc = 1606; - x = 0.278281 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "7"; - action = "ctrlSetText [1400,((ctrlText 1400) + '7')];"; - }; - class numkey_8: Rsc_ACE_NumKeyButton { - idc = 1607; - x = 0.314375 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "8"; - action = "ctrlSetText [1400,((ctrlText 1400) + '8')];"; - }; - class numkey_9: Rsc_ACE_NumKeyButton { - idc = 1608; - x = 0.350469 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "9"; - action = "ctrlSetText [1400,((ctrlText 1400) + '9')];"; - }; - class numkey_0: Rsc_ACE_NumKeyButton { - idc = 1609; - x = 0.314375 * safezoneW + safezoneX; - y = 0.676 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "0"; - action = "ctrlSetText [1400,((ctrlText 1400) + '0')];"; - }; - class speedDialAdd: Rsc_ACE_NumKeyButton { - idc = 1610; - x = 0.278281 * safezoneW + safezoneX; - y = 0.676 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial"; - action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial);); - }; - class clear: Rsc_ACE_HiddenButton { - idc = 1610; - x = 0.278281 * safezoneW + safezoneX; - y = 0.445 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Clear"; - action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];); - }; - class dial: Rsc_ACE_HiddenButton { - idc = 1611; - x = 0.309219 * safezoneW + safezoneX; - y = 0.445 * safezoneH + safezoneY; - w = 0.04125 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_Dial"; - action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone);); - }; - class up: Rsc_ACE_HiddenButton { - idc = 1612; - x = 0.360781 * safezoneW + safezoneX; - y = 0.445 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_Up"; - action = QUOTE([true] call FUNC(setSpeedDial)); - }; - class down: Rsc_ACE_HiddenButton { - idc = 1613; - x = 0.345312 * safezoneW + safezoneX; - y = 0.485 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_Down"; - action = QUOTE([false] call FUNC(setSpeedDial)); - }; - class speedDial_Text: RscText { - idc = 1405; - y = 0.302 * safezoneH + safezoneY; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; - x = 0.288594 * safezoneW + safezoneX; - w = 0.0825 * safezoneW; - h = 0.044 * safezoneH; - text = "Name"; - }; - class speedDial_edit: Rsc_ACE_CallScreen_Edit { - idc = 1401; - y = 0.302 * safezoneH + safezoneY; - x = 0.318 * safezoneW + safezoneX; - w = 0.1; - }; - class numberEdit_Text: RscText { - idc = 1406; - y = 0.348 * safezoneH + safezoneY; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; - x = 0.288594 * safezoneW + safezoneX; - w = 0.0825 * safezoneW; - h = 0.044 * safezoneH; - text = "#"; - }; - class number_edit: Rsc_ACE_CallScreen_Edit { - canModify = 0; - idc = 1400; - y = 0.348 * safezoneH + safezoneY; - x = 0.3 * safezoneW + safezoneX; - }; - }; + idd = 8855; + movingEnable = 1; + onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1); + class controls { + class RscPicture_1200: RscPicture { + idc = 1200; + text = PATHTOF(Data\UI\Cellphone_Background.paa); + x = 0.231875 * safezoneW + safezoneX; + y = 0.104 * safezoneH + safezoneY; + w = 0.195937 * safezoneW; + h = 0.704 * safezoneH; + }; + class numkey_1: Rsc_ACE_NumKeyButton { + idc = 1600; + x = 0.278281 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "1"; + action = "ctrlSetText [1400,((ctrlText 1400) + '1')];"; + }; + class numkey_2: Rsc_ACE_NumKeyButton { + idc = 1601; + x = 0.314375 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "2"; + action = "ctrlSetText [1400,((ctrlText 1400) + '2')];"; + }; + class numkey_3: Rsc_ACE_NumKeyButton { + idc = 1602; + x = 0.350469 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "3"; + action = "ctrlSetText [1400,((ctrlText 1400) + '3')];"; + }; + class numkey_4: Rsc_ACE_NumKeyButton { + idc = 1603; + x = 0.278281 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "4"; + action = "ctrlSetText [1400,((ctrlText 1400) + '4')];"; + }; + class numkey_5: Rsc_ACE_NumKeyButton { + idc = 1604; + x = 0.314375 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "5"; + action = "ctrlSetText [1400,((ctrlText 1400) + '5')];"; + }; + class numkey_6: Rsc_ACE_NumKeyButton { + idc = 1605; + x = 0.350469 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "6"; + action = "ctrlSetText [1400,((ctrlText 1400) + '6')];"; + }; + class numkey_7: Rsc_ACE_NumKeyButton { + idc = 1606; + x = 0.278281 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "7"; + action = "ctrlSetText [1400,((ctrlText 1400) + '7')];"; + }; + class numkey_8: Rsc_ACE_NumKeyButton { + idc = 1607; + x = 0.314375 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "8"; + action = "ctrlSetText [1400,((ctrlText 1400) + '8')];"; + }; + class numkey_9: Rsc_ACE_NumKeyButton { + idc = 1608; + x = 0.350469 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "9"; + action = "ctrlSetText [1400,((ctrlText 1400) + '9')];"; + }; + class numkey_0: Rsc_ACE_NumKeyButton { + idc = 1609; + x = 0.314375 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "0"; + action = "ctrlSetText [1400,((ctrlText 1400) + '0')];"; + }; + class speedDialAdd: Rsc_ACE_NumKeyButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial"; + action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial);); + }; + class clear: Rsc_ACE_HiddenButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Clear"; + action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];); + }; + class dial: Rsc_ACE_HiddenButton { + idc = 1611; + x = 0.309219 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.04125 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Dial"; + action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone);); + }; + class up: Rsc_ACE_HiddenButton { + idc = 1612; + x = 0.360781 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Up"; + action = QUOTE([true] call FUNC(setSpeedDial)); + }; + class down: Rsc_ACE_HiddenButton { + idc = 1613; + x = 0.345312 * safezoneW + safezoneX; + y = 0.485 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Down"; + action = QUOTE([false] call FUNC(setSpeedDial)); + }; + class speedDial_Text: RscText { + idc = 1405; + y = 0.302 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "Name"; + }; + class speedDial_edit: Rsc_ACE_CallScreen_Edit { + idc = 1401; + y = 0.302 * safezoneH + safezoneY; + x = 0.318 * safezoneW + safezoneX; + w = 0.1; + }; + class numberEdit_Text: RscText { + idc = 1406; + y = 0.348 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "#"; + }; + class number_edit: Rsc_ACE_CallScreen_Edit { + canModify = 0; + idc = 1400; + y = 0.348 * safezoneH + safezoneY; + x = 0.3 * safezoneW + safezoneX; + }; + }; }; diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index f11ff2b358..b60c6b9ab0 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -1,15 +1,15 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interaction"}; - author[] = {"Garth 'L-H' de Wet"}; - authorUrl = "http://garth.snakebiteink.co.za/"; - VERSION_CONFIG; - }; + class ADDON { + units[] = {}; + weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction"}; + author[] = {"Garth 'L-H' de Wet"}; + authorUrl = "http://garth.snakebiteink.co.za/"; + VERSION_CONFIG; + }; }; #include "CfgEventHandlers.hpp" @@ -22,30 +22,30 @@ class CfgPatches { #include "ExplosivesUI.hpp" class CfgActions { - class None; - class Deactivate:None { - show = 0; - }; - class DeactivateMine:None { - show = 0; - }; + class None; + class Deactivate:None { + show = 0; + }; + class DeactivateMine:None { + show = 0; + }; }; class CfgMineTriggers { - class RangeTrigger; - class MagneticTrigger: RangeTrigger { - mineMagnetic = 1; - mineTriggerRange = 1; - }; + class RangeTrigger; + class MagneticTrigger: RangeTrigger { + mineMagnetic = 1; + mineTriggerRange = 1; + }; }; class ACE_Settings { - class GVAR(RequireSpecialist) { - value = 0; - typeName = "BOOL"; - }; - class GVAR(PunishNonSpecialists) { - value = 1; - typeName = "BOOL"; - }; + class GVAR(RequireSpecialist) { + value = 0; + typeName = "BOOL"; + }; + class GVAR(PunishNonSpecialists) { + value = 1; + typeName = "BOOL"; + }; }; diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index 84cb57cf4e..cb15c53d73 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -25,23 +25,23 @@ _requiredItems = getArray(_config >> "requires"); _hasRequired = true; _detonators = [_unit] call FUNC(getDetonators); { - if !(_x in _detonators) exitWith{ - _hasRequired = false; - }; + if !(_x in _detonators) exitWith{ + _hasRequired = false; + }; } count _requiredItems; private ["_code", "_count", "_codeSet"]; _codeSet = false; while {!_codeSet} do { - _code = str(round (random 9999)); - _count = 4 - count (toArray _code); - while {_count > 0} do { - _code = "0" + _code; - _count = _count - 1; - }; - _codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0; + _code = str(round (random 9999)); + _count = 4 - count (toArray _code); + while {_count > 0} do { + _code = "0" + _code; + _count = _count - 1; + }; + _codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0; }; if (isNil QGVAR(CellphoneIEDs)) then { - GVAR(CellphoneIEDs) = []; + GVAR(CellphoneIEDs) = []; }; _count = GVAR(CellphoneIEDs) pushBack [_explosive,_code,GetNumber(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> "Cellphone" >> "FuseTime")]; _count = _count + 1; diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index 778afc8ae5..dcdddf7669 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -36,7 +36,9 @@ _config = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> co _clacker = _unit getVariable [QGVAR(Clackers), []]; GVAR(PlacedCount) = GVAR(PlacedCount) + 1; + _clacker pushBack [_explosive, getNumber(_config >> "FuseTime"), format [localize "STR_ACE_Explosives_DetonateCode", GVAR(PlacedCount)], _magazineClass, configName ((_this select 3) select (count (_this select 3) - 1))]; + _unit setVariable [QGVAR(Clackers), _clacker, true]; _unit sideChat format [localize "STR_ACE_Explosives_DetonateCode", GVAR(PlacedCount)]; diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf index d6d5b57b3b..4a0b93e229 100644 --- a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -19,9 +19,9 @@ private ["_explosive"]; if (isNil QGVAR(CellphoneIEDs)) exitWith {[]}; _explosive = []; { - if ((_x select 1) == _code) exitWith { - _explosive = _x; - }; - false + if ((_x select 1) == _code) exitWith { + _explosive = _x; + }; + false } count GVAR(CellphoneIEDs); _explosive diff --git a/addons/explosives/functions/fnc_module.sqf b/addons/explosives/functions/fnc_module.sqf index 432671b551..c9dcc3b62a 100644 --- a/addons/explosives/functions/fnc_module.sqf +++ b/addons/explosives/functions/fnc_module.sqf @@ -20,7 +20,9 @@ _activated = _this select 2; if !(_activated) exitWith {}; -[_logic, QGVAR(RequireSpecialist), "RequireSpecialist" ] call EFUNC(Common,readSettingFromModule); -[_logic, QGVAR(PunishNonSpecialists), "PunishNonSpecialists" ] call EFUNC(Common,readSettingFromModule); +[_logic, QGVAR(RequireSpecialist), "RequireSpecialist"] + call EFUNC(Common,readSettingFromModule); +[_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"] + call EFUNC(Common,readSettingFromModule); diag_log text "[ACE]: Explosive Module Initialized."; diff --git a/addons/explosives/functions/fnc_openTimerSetUI.sqf b/addons/explosives/functions/fnc_openTimerSetUI.sqf index e37bef06e3..54b459fdc4 100644 --- a/addons/explosives/functions/fnc_openTimerSetUI.sqf +++ b/addons/explosives/functions/fnc_openTimerSetUI.sqf @@ -23,16 +23,16 @@ sliderSetPosition [8845, 30]; GVAR(explosive) = _explosive; DFUNC(SetTimer) = { - [ - ACE_player, - getPosATL GVAR(explosive), - GVAR(explosive) getVariable QGVAR(Direction), - GVAR(explosive) getVariable QGVAR(class), - "Timer", - [floor sliderPosition 8845], - GVAR(explosive) - ] call FUNC(placeExplosive); - closeDialog 0; + [ + ACE_player, + getPosATL GVAR(explosive), + GVAR(explosive) getVariable QGVAR(Direction), + GVAR(explosive) getVariable QGVAR(class), + "Timer", + [floor sliderPosition 8845], + GVAR(explosive) + ] call FUNC(placeExplosive); + closeDialog 0; }; buttonSetAction [8860, QUOTE(call DFUNC(SetTimer);)]; diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index a8af7e044b..7dd1e3ce60 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -28,22 +28,22 @@ GVAR(Setup) setVariable [QGVAR(class), _class, true]; GVAR(TweakedAngle) = 180; [QGVAR(Placement),"OnEachFrame", { - private "_player"; - _player = ACE_player; - if (GVAR(placer) != _player) exitWith { - call FUNC(place_Cancel); - }; - GVAR(pfeh_running) = true; - _pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]); - GVAR(Setup) setPosATL _pos; - if (ACE_Modifier == 0) then { - GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player); - }; + private "_player"; + _player = ACE_player; + if (GVAR(placer) != _player) exitWith { + call FUNC(place_Cancel); + }; + GVAR(pfeh_running) = true; + _pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]); + GVAR(Setup) setPosATL _pos; + if (ACE_Modifier == 0) then { + GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player); + }; }] call CALLSTACK(BIS_fnc_addStackedEventHandler); [localize "STR_ACE_Explosives_PlaceAction", localize "STR_ACE_Explosives_CancelAction", - localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint); + localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint); _unit setVariable [QGVAR(Place), [_unit, "DefaultAction", - {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)]; + {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)]; _unit setVariable [QGVAR(Cancel), [_unit, "zoomtemp", - {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)]; + {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)]; diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index caf75b8519..283fefede4 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -19,44 +19,44 @@ EXPLODE_2_PVT(_this,_unit,_target); _target = attachedTo (_target); _fnc_DefuseTime = { - EXPLODE_2_PVT(_this,_specialist,_target); + EXPLODE_2_PVT(_this,_specialist,_target); - _defuseTime = 5; - if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then { - _defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime"); - }; - if (!_specialist && {GVAR(PunishNonSpecialists)}) then { - _defuseTime = _defuseTime * 1.5; - }; - _defuseTime + _defuseTime = 5; + if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then { + _defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime"); + }; + if (!_specialist && {GVAR(PunishNonSpecialists)}) then { + _defuseTime = _defuseTime * 1.5; + }; + _defuseTime }; _actionToPlay = "MedicOther"; if (STANCE _unit == "Prone") then { - _actionToPlay = "PutDown"; + _actionToPlay = "PutDown"; }; if (ACE_player != _unit) then { - // If the unit is a player, call the function on the player. - if (isPlayer _unit) then { - [[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc); - } else { - // TODO: use scheduled delay execution - [_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn { - (_this select 0) playActionNow _actionToPlay; - (_this select 0) disableAI "MOVE"; - (_this select 0) disableAI "TARGET"; - sleep (_this select 2); - [(_this select 0), (_this select 1)] call FUNC(defuseExplosive); - (_this select 0) enableAI "MOVE"; - (_this select 0) enableAI "TARGET"; - }; - }; + // If the unit is a player, call the function on the player. + if (isPlayer _unit) then { + [[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc); + } else { + // TODO: use scheduled delay execution + [_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn { + (_this select 0) playActionNow _actionToPlay; + (_this select 0) disableAI "MOVE"; + (_this select 0) disableAI "TARGET"; + sleep (_this select 2); + [(_this select 0), (_this select 1)] call FUNC(defuseExplosive); + (_this select 0) enableAI "MOVE"; + (_this select 0) enableAI "TARGET"; + }; + }; } else { - _unit playActionNow _actionToPlay; - private ["_defuseSeconds", "_isEOD"]; - _isEOD = [_unit] call EFUNC(Common,isEOD); - _defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime; - if (_isEOD || {!GVAR(RequireSpecialist)}) then { - [_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar); - }; + _unit playActionNow _actionToPlay; + private ["_defuseSeconds", "_isEOD"]; + _isEOD = [_unit] call EFUNC(Common,isEOD); + _defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime; + if (_isEOD || {!GVAR(RequireSpecialist)}) then { + [_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar); + }; }; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index f704b12906..78a8aede74 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,497 +1,497 @@ - - - Explosives - Sprengstoffe - Explosivos - Ładunki wybuchowe - Explosifs - Výbušniny - Esplosivi - Robbanóanyagok - Explosivos - Взрывчатка - - - Place >> - Platzieren >> - Colocar >> - Umieść >> - Placer >> - Položit >> - Piazza >> - Lerakás >> - Colocar >> - Установить >> - - - Detonate >> - Zünden >> - Detonar >> - Detonuj >> - Mise à feu >> - Odpálit >> - Detona >> - Robbantás >> - Detonar >> - Подрыв >> - - - Explosive code: %1 - Sprengstoffcode: %1 - Código del explosivo: %1 - Kod ładunku: %1 - Code explosif: %1 - Kód výbušniny: %1 - Codice dell'esplosivo : %1 - Robbanóanyag kódja: %1 - Código do explosivo: %1 - Взрывная код: %1 - - - Place - Platzieren - Colocar - Umieść - Placer - Položit - Piazza - Elhelyezés - Colocar - Положить - - - Cancel - Abbrechen - Cancelar - Anuluj - Annuler - Zrušit - Annulla - Mégsem - Cancelar - Отмена - - - + Modifier, rotates - + Modifikator, drehen - + Modificador, girar - + Modificateur, tourner - + Modificatore, rotazione - + Otočit - + Változtatás, forgatás - + modyfikator, obracanie - + Modificador, rotaciona - + Bращать - - - Turn On Thor III - Thor III aktivieren - Encender Thor III - Włącz Thor III - Allumer Thor III - Zapnout Thor III - Accendi Thor III - Thor III bekapcsolása - Ativar Thor III - Активировать Thor III - - - Turn Off Thor III - Thor III deaktivieren - Apagar Thor III - Wyłącz Thor III - Éteindre Thor III - Vypnout Thor III - Spegni Thor III - Thor III kikapcsolása - Desativar Thor III - Деактивировать Thor III - - - Cellphone - Mobiltelefon - Télefono móvil - Telefon komórkowy - Téléphone Portable - Telefon - Cellulare - Mobil - Celular - Сотовый телефон - - - Used to remotely trigger explosives - Wird benutzt um Sprengstoffe fernzuzünden - Usado para detonar remotamente explosivos - Używany do zdalnego detonowania ładunków wybuchowych - Utilisé pour déclencher des explosifs à distance - Používaný ke vzdálenému odpalování výbušnin - Usato per l'attivazione a distanza degli esplosivi - Robbanóanyagok távoli robbantásához - Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку - - - M57 Firing Device - M57 Zündvorrichtung - Dispositivo de detonación M57 - Zapalnik M57 - M57 Dispositif de mise à feu - M57 Odpalovací Zařízení - Detonatore M57 - M57 Detonátor - M57 Dispositivo de Detonação - Взрыватель M57 - - - Used to remotely trigger explosives - Wird benutzt um Sprengstoffe fernzuzünden - Usado para detonar remotamente explosivos - Używany do zdalnego detonowania ładunków wybuchowych - Utilisé pour déclencher des explosifs à distance - Použévané ke vzdálenému odpalování výbušnin - Usato per l'attivazione a distanza degli esplosivi - Robbanóanyagok távoli robbantásához - Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку - - - M26 Firing Device - M26 Zündvorrichtung - Dispositivo de detonación MK26 - Zapalnik M26 - M26 Dispositif de mise à feu - M26 Odpalovací Zařízení - Detonatore M26 - M26 Detonátor - M26 Dispositivo de Detonação - Взрыватель M26 - - - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - - - Defusal Kit - Entschärfungskit - Kit de desactivación - Zestaw do rozbrajania - Kit de désamorçage - Zneškodňovací sada - Kit E.O.D. - Hatástalanító felszerelés - Kit de desarme - Разминирование комплект - - - Allows defusing of explosives - Erlaubt die Entschärfung von Sprengstoffen - Permite desactivar explosivos - Umożliwia rozbrajanie ładunków wybuchowych - Permet de désamorçer des explosifs - Dovoluje zneškodňování výbušnin - Consente la disattivazione degli ordigni esplosivi - Robbanóanyagok hatástalanításához - Permite o desarme de explosivos - Allows defusing of explosives - - - Add to Speed Dial - Zur Schnellauswahl hinzufügen - Agregar a marcado rápido - Dodaj do szybkiego wybierania - Ajouter à la composition rapide - Přidat jako rychlou volbu - Aggiungi alla selezione rapida - Hozzáadás gyorshíváshoz - Adicionar à ligação rápida - Добавить в ускоренный набор - - - Clear - Löschen - Borrar - Usuń - Désamorçé - Čistý - Libera - Törlés - Limpar - Pассеиваться - - - Dial - Wählen - Marcar - Wybierz mumer - Composer - Vytočit - Composizione numero - Tárcsázás - Discar - Hабрать - - - Up - Hoch - Arriba - W górę - Haut - Nahoru - Sopra - Fel - Cima - Поднять - - - Down - Runter - Abajo - W dół - Bas - Dolu - Sotto - Le - Baixo - Опустить - - - Cancel - Abbrechen - Cancelar - Anuluj - Annuler - Zrušit - Annulla - Mégsem - Cancelar - Отмена - - - Detonate Menu - "Zünden"-Menü - Menú de detonación - Menu detonowania - Menu de mise à feu - Menu Detonace - Menù di detonazione - Robbantás menü - Menu de detonação - Меню Подрыв - - - Place Menu - "Platzieren"-Menü - Menú de colocación - Menu umieszczania - Menu Placement - Menu Umístění - Menù di collocamento - Lerakás menü - Menu de posicionamento - Меню Установить - - - Defuse - Entschärfen - Desactivar - Rozbrój - Désamorçer - Zneškodnit - Disinnesca - Hatástalanítás - Desarmar - Обезвредить - - - Defusing Explosive... - Entschärfe Sprengstoff... - Desactivando explosivo... - Rozbrajanie ładunku... - Désamorçage des explosifs... - Zneškodňuji Výbušninu... - Esposivo in fase di disattivazione... - Robbanóanyag hatástalaníása... - Desarmando Explosivo... - Обезвреживание... - - - Timer - Zeitzünder - Temporizador - Czasomierz - Retard - Časovač - Cronometro - Időzített - Timer - Временной - - - Time: %1m %2s - Zeit: %1m %2s - Tiempo: %1m %2s - Czas: %1m %2s - Temps : %1m %2s - Čas: %1m %2s - Tempo : %1m %2s - Idő: %1m %2s - Tempo: %1m %2s - Tемп: %1m %2c - - - Set Time - Zeit einstellen - Configurar tiempo - Ustaw czas - Régler retard - Nastavit Čas - Modifica il conto alla rovescia - Idő állítása - Configurar Tempo - Xронометр - - - Select a Trigger - Wähle einen Zünder - Seleccionar un disparador - Wybierz zapalnik - Sélectionner une mise à feu - Zvolit Detonátor - Seleziona un Attivatore - Detonátor kiválasztása - Selecionar um Gatilho - Выберите - - - Select - Wählen - Seleccionar - Wybierz - Sélectionner - Zvolit - Seleziona - Kiválasztás - Selecionar - Выбрать защелка - - - Pressure Plate - Płyta naciskowa - Placa de presión - Druckplatte - Plaque de pression - Nášlapná nástraha - Piastra a Pressione - Nyomólap - Placa de pressão - Давление - - - Tripwire - Linka naciągu - Cable trampa - Stolperdraht - Fil de butée - Nástražný drát - Filo a Inciampo - Botlódrót - Linha de tração - Натяжной - - - IR Sensor - Czujnik podczerwieni - Sensor IR - Infrarotsensor - Capteur IR - IR Značkovač - Sensore IR - IR szenzor - Sensor IV - ИК - - - No triggers available for %1 - Brak dostępnych zapalników dla %1 - No hay detonadores disponibles para %1 - Keine Auslöser vorhanden für %1 - Pas de mise à feu disponible pour %1 - Žádný detonátor k dispozici pro %1 - Nessun attivatore disponibile per %1 - Nincs detonátor a %1 - Nenhum gatilho disponível para %1 - Нет защелка доступны для %1 - - - IR Sensor (Side Attack) - Czujnik podczerwieni (wybuch na bok) - Sensor IR (ataque lateral) - Infrarotsensor (Seitenangriff) - Capteur IR (de flanc) - IR Značkovač (Výbuch stranou) - Sensore IR (Attacco laterale) - IR Sensor (Side Attack) - Sensor infravermelho (ataque lateral) - ИК (боковая атака) - - - Magnetic Influence Sensor (Bottom Attack) - Czujnik magnetyczny (wybuch w górę) - Sensor IM (ataque inferior) - Magnetfeldsensor (Bodenangriff) - Capteur Magnétique (par le bas) - Magnetický Senzor (Výbuch ze spoda) - Sensore Magnetico di Prossimità (Attacco inferiore) - Mágneses (Bottom Attack) - Influência magnética (ataque inferior) - Магнитный (дно атака) - - - No explosives on trigger. - Keine Sprengladungen auf diesem Auslöser. - Ningún explosivo en el detonador. - Pas d'explosif à mettre à feu. - Nessun esplosivo sul sensore. - Žádná výbušnina k odpálení. - Nincs robbanóanyag a detonátorhoz. - Brak ładunków na zapalnik. - Nenhum explosivo no gatilho. - Нет взрывчатки на курок. - - - Dead Man's Switch - Totmannschalter - Mise à feu par relâchement de pression - Spínač mrtvého muže - Czuwak - Detonador de hombre muerto - Dead Man's Switch - Кнопка мертвеца - - - Used to remotely trigger explosives when released. - Zündet Sprengladungen wenn losgelassen. - Déclenche la mise à feu d'un explosif lorsqu'il est libéré. - Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny - Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity. - Utilizado para detonar explosivos remotamente al soltarlo. - Robbanóanyagok távoli robbantásához - Используется для дистанционного подрыва, после смерти оператора. - - - Pick up - - + + + Explosives + Sprengstoffe + Explosivos + Ładunki wybuchowe + Explosifs + Výbušniny + Esplosivi + Robbanóanyagok + Explosivos + Взрывчатка + + + Place >> + Platzieren >> + Colocar >> + Umieść >> + Placer >> + Položit >> + Piazza >> + Lerakás >> + Colocar >> + Установить >> + + + Detonate >> + Zünden >> + Detonar >> + Detonuj >> + Mise à feu >> + Odpálit >> + Detona >> + Robbantás >> + Detonar >> + Подрыв >> + + + Explosive code: %1 + Sprengstoffcode: %1 + Código del explosivo: %1 + Kod ładunku: %1 + Code explosif: %1 + Kód výbušniny: %1 + Codice dell'esplosivo : %1 + Robbanóanyag kódja: %1 + Código do explosivo: %1 + Взрывная код: %1 + + + Place + Platzieren + Colocar + Umieść + Placer + Položit + Piazza + Elhelyezés + Colocar + Положить + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + + + + Modifier, rotates + + Modifikator, drehen + + Modificador, girar + + Modificateur, tourner + + Modificatore, rotazione + + Otočit + + Változtatás, forgatás + + modyfikator, obracanie + + Modificador, rotaciona + + Bращать + + + Turn On Thor III + Thor III aktivieren + Encender Thor III + Włącz Thor III + Allumer Thor III + Zapnout Thor III + Accendi Thor III + Thor III bekapcsolása + Ativar Thor III + Активировать Thor III + + + Turn Off Thor III + Thor III deaktivieren + Apagar Thor III + Wyłącz Thor III + Éteindre Thor III + Vypnout Thor III + Spegni Thor III + Thor III kikapcsolása + Desativar Thor III + Деактивировать Thor III + + + Cellphone + Mobiltelefon + Télefono móvil + Telefon komórkowy + Téléphone Portable + Telefon + Cellulare + Mobil + Celular + Сотовый телефон + + + Used to remotely trigger explosives + Wird benutzt um Sprengstoffe fernzuzünden + Usado para detonar remotamente explosivos + Używany do zdalnego detonowania ładunków wybuchowych + Utilisé pour déclencher des explosifs à distance + Používaný ke vzdálenému odpalování výbušnin + Usato per l'attivazione a distanza degli esplosivi + Robbanóanyagok távoli robbantásához + Usado para acionar explosivos remotamente + Используется для удаленного запуска взрывчатку + + + M57 Firing Device + M57 Zündvorrichtung + Dispositivo de detonación M57 + Zapalnik M57 + M57 Dispositif de mise à feu + M57 Odpalovací Zařízení + Detonatore M57 + M57 Detonátor + M57 Dispositivo de Detonação + Взрыватель M57 + + + Used to remotely trigger explosives + Wird benutzt um Sprengstoffe fernzuzünden + Usado para detonar remotamente explosivos + Używany do zdalnego detonowania ładunków wybuchowych + Utilisé pour déclencher des explosifs à distance + Použévané ke vzdálenému odpalování výbušnin + Usato per l'attivazione a distanza degli esplosivi + Robbanóanyagok távoli robbantásához + Usado para acionar explosivos remotamente + Используется для удаленного запуска взрывчатку + + + M26 Firing Device + M26 Zündvorrichtung + Dispositivo de detonación MK26 + Zapalnik M26 + M26 Dispositif de mise à feu + M26 Odpalovací Zařízení + Detonatore M26 + M26 Detonátor + M26 Dispositivo de Detonação + Взрыватель M26 + + + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + + + Defusal Kit + Entschärfungskit + Kit de desactivación + Zestaw do rozbrajania + Kit de désamorçage + Zneškodňovací sada + Kit E.O.D. + Hatástalanító felszerelés + Kit de desarme + Разминирование комплект + + + Allows defusing of explosives + Erlaubt die Entschärfung von Sprengstoffen + Permite desactivar explosivos + Umożliwia rozbrajanie ładunków wybuchowych + Permet de désamorçer des explosifs + Dovoluje zneškodňování výbušnin + Consente la disattivazione degli ordigni esplosivi + Robbanóanyagok hatástalanításához + Permite o desarme de explosivos + Allows defusing of explosives + + + Add to Speed Dial + Zur Schnellauswahl hinzufügen + Agregar a marcado rápido + Dodaj do szybkiego wybierania + Ajouter à la composition rapide + Přidat jako rychlou volbu + Aggiungi alla selezione rapida + Hozzáadás gyorshíváshoz + Adicionar à ligação rápida + Добавить в ускоренный набор + + + Clear + Löschen + Borrar + Usuń + Désamorçé + Čistý + Libera + Törlés + Limpar + Pассеиваться + + + Dial + Wählen + Marcar + Wybierz mumer + Composer + Vytočit + Composizione numero + Tárcsázás + Discar + Hабрать + + + Up + Hoch + Arriba + W górę + Haut + Nahoru + Sopra + Fel + Cima + Поднять + + + Down + Runter + Abajo + W dół + Bas + Dolu + Sotto + Le + Baixo + Опустить + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + + + Detonate Menu + "Zünden"-Menü + Menú de detonación + Menu detonowania + Menu de mise à feu + Menu Detonace + Menù di detonazione + Robbantás menü + Menu de detonação + Меню Подрыв + + + Place Menu + "Platzieren"-Menü + Menú de colocación + Menu umieszczania + Menu Placement + Menu Umístění + Menù di collocamento + Lerakás menü + Menu de posicionamento + Меню Установить + + + Defuse + Entschärfen + Desactivar + Rozbrój + Désamorçer + Zneškodnit + Disinnesca + Hatástalanítás + Desarmar + Обезвредить + + + Defusing Explosive... + Entschärfe Sprengstoff... + Desactivando explosivo... + Rozbrajanie ładunku... + Désamorçage des explosifs... + Zneškodňuji Výbušninu... + Esposivo in fase di disattivazione... + Robbanóanyag hatástalaníása... + Desarmando Explosivo... + Обезвреживание... + + + Timer + Zeitzünder + Temporizador + Czasomierz + Retard + Časovač + Cronometro + Időzített + Timer + Временной + + + Time: %1m %2s + Zeit: %1m %2s + Tiempo: %1m %2s + Czas: %1m %2s + Temps : %1m %2s + Čas: %1m %2s + Tempo : %1m %2s + Idő: %1m %2s + Tempo: %1m %2s + Tемп: %1m %2c + + + Set Time + Zeit einstellen + Configurar tiempo + Ustaw czas + Régler retard + Nastavit Čas + Modifica il conto alla rovescia + Idő állítása + Configurar Tempo + Xронометр + + + Select a Trigger + Wähle einen Zünder + Seleccionar un disparador + Wybierz zapalnik + Sélectionner une mise à feu + Zvolit Detonátor + Seleziona un Attivatore + Detonátor kiválasztása + Selecionar um Gatilho + Выберите + + + Select + Wählen + Seleccionar + Wybierz + Sélectionner + Zvolit + Seleziona + Kiválasztás + Selecionar + Выбрать защелка + + + Pressure Plate + Płyta naciskowa + Placa de presión + Druckplatte + Plaque de pression + Nášlapná nástraha + Piastra a Pressione + Nyomólap + Placa de pressão + Давление + + + Tripwire + Linka naciągu + Cable trampa + Stolperdraht + Fil de butée + Nástražný drát + Filo a Inciampo + Botlódrót + Linha de tração + Натяжной + + + IR Sensor + Czujnik podczerwieni + Sensor IR + Infrarotsensor + Capteur IR + IR Značkovač + Sensore IR + IR szenzor + Sensor IV + ИК + + + No triggers available for %1 + Brak dostępnych zapalników dla %1 + No hay detonadores disponibles para %1 + Keine Auslöser vorhanden für %1 + Pas de mise à feu disponible pour %1 + Žádný detonátor k dispozici pro %1 + Nessun attivatore disponibile per %1 + Nincs detonátor a %1 + Nenhum gatilho disponível para %1 + Нет защелка доступны для %1 + + + IR Sensor (Side Attack) + Czujnik podczerwieni (wybuch na bok) + Sensor IR (ataque lateral) + Infrarotsensor (Seitenangriff) + Capteur IR (de flanc) + IR Značkovač (Výbuch stranou) + Sensore IR (Attacco laterale) + IR Sensor (Side Attack) + Sensor infravermelho (ataque lateral) + ИК (боковая атака) + + + Magnetic Influence Sensor (Bottom Attack) + Czujnik magnetyczny (wybuch w górę) + Sensor IM (ataque inferior) + Magnetfeldsensor (Bodenangriff) + Capteur Magnétique (par le bas) + Magnetický Senzor (Výbuch ze spoda) + Sensore Magnetico di Prossimità (Attacco inferiore) + Mágneses (Bottom Attack) + Influência magnética (ataque inferior) + Магнитный (дно атака) + + + No explosives on trigger. + Keine Sprengladungen auf diesem Auslöser. + Ningún explosivo en el detonador. + Pas d'explosif à mettre à feu. + Nessun esplosivo sul sensore. + Žádná výbušnina k odpálení. + Nincs robbanóanyag a detonátorhoz. + Brak ładunków na zapalnik. + Nenhum explosivo no gatilho. + Нет взрывчатки на курок. + + + Dead Man's Switch + Totmannschalter + Mise à feu par relâchement de pression + Spínač mrtvého muže + Czuwak + Detonador de hombre muerto + Dead Man's Switch + Кнопка мертвеца + + + Used to remotely trigger explosives when released. + Zündet Sprengladungen wenn losgelassen. + Déclenche la mise à feu d'un explosif lorsqu'il est libéré. + Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny + Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity. + Utilizado para detonar explosivos remotamente al soltarlo. + Robbanóanyagok távoli robbantásához + Используется для дистанционного подрыва, после смерти оператора. + + + Pick up + + From 9d7d71b1b171249b499f503ca81d0a59b89bb08e Mon Sep 17 00:00:00 2001 From: Garth L-H de Wet Date: Mon, 6 Apr 2015 22:20:11 +0200 Subject: [PATCH 39/57] Changed the tabs to 4 spaces. Hopefully. --- addons/explosives/CfgACE_Triggers.hpp | 86 +- addons/explosives/CfgAmmo.hpp | 128 +-- addons/explosives/CfgEventHandlers.hpp | 12 +- addons/explosives/CfgMagazines.hpp | 242 ++--- addons/explosives/CfgModule.hpp | 82 +- addons/explosives/CfgVehicles.hpp | 606 +++++------ addons/explosives/CfgWeapons.hpp | 122 +-- addons/explosives/ExplosivesUI.hpp | 518 ++++----- addons/explosives/XEH_postInit.sqf | 68 +- addons/explosives/config.cpp | 58 +- .../functions/fnc_addCellphoneIED.sqf | 22 +- .../explosives/functions/fnc_addClacker.sqf | 8 +- .../functions/fnc_addDetonateActions.sqf | 40 +- .../functions/fnc_addToSpeedDial.sqf | 12 +- .../functions/fnc_addTransmitterActions.sqf | 30 +- .../functions/fnc_addTriggerActions.sqf | 56 +- .../functions/fnc_defuseExplosive.sqf | 8 +- .../functions/fnc_detonateExplosive.sqf | 38 +- addons/explosives/functions/fnc_dialPhone.sqf | 24 +- .../functions/fnc_getDetonators.sqf | 8 +- .../functions/fnc_getPlacedExplosives.sqf | 30 +- .../functions/fnc_getSpeedDialExplosive.sqf | 8 +- .../functions/fnc_hasExplosives.sqf | 6 +- addons/explosives/functions/fnc_module.sqf | 4 +- addons/explosives/functions/fnc_onLanded.sqf | 34 +- .../functions/fnc_openTimerSetUI.sqf | 20 +- .../functions/fnc_placeExplosive.sqf | 16 +- .../functions/fnc_place_Approve.sqf | 10 +- .../explosives/functions/fnc_place_Cancel.sqf | 8 +- .../functions/fnc_removeFromSpeedDial.sqf | 10 +- .../explosives/functions/fnc_setPosition.sqf | 2 +- .../functions/fnc_setupExplosive.sqf | 28 +- .../explosives/functions/fnc_startDefuse.sqf | 64 +- .../explosives/functions/fnc_triggerType.sqf | 2 +- addons/explosives/script_component.hpp | 4 +- addons/explosives/stringtable.xml | 986 +++++++++--------- 36 files changed, 1700 insertions(+), 1700 deletions(-) diff --git a/addons/explosives/CfgACE_Triggers.hpp b/addons/explosives/CfgACE_Triggers.hpp index 00522a50e3..6319444cb2 100644 --- a/addons/explosives/CfgACE_Triggers.hpp +++ b/addons/explosives/CfgACE_Triggers.hpp @@ -8,47 +8,47 @@ Last Index: CfgACE_Triggers config of trigger type. onSetup parameters: 0: STRING - Magazine Classname */ - class Command { - displayName = $STR_ACE_Explosives_clacker_displayName; - picture = PATHTOF(Data\UI\Clacker.paa); - onPlace = QUOTE(_this call FUNC(AddClacker);false); - requires[] = {"ACE_Clacker"}; - }; - class MK16_Transmitter:Command { - displayName = $STR_ACE_Explosives_MK16_displayName; - picture = PATHTOF(Data\UI\MK16_Reciever_ca.paa); - requires[] = {"ACE_M26_Clacker"}; - }; - class DeadManSwitch:Command { - displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; - picture = PATHTOF(Data\UI\DeadmanSwitch.paa); - requires[] = {"ACE_DeadManSwitch"}; - }; - class Cellphone:Command { - displayName = $STR_ACE_Explosives_cellphone_displayName; - picture = PATHTOF(Data\UI\Cellphone_UI.paa); - onPlace = QUOTE(_this call FUNC(addCellphoneIED);false); - requires[] = {"ACE_Cellphone"}; - }; - class PressurePlate { - displayName = $STR_ACE_Explosives_PressurePlate; - picture = PATHTOF(Data\UI\PressurePlate.paa); - onPlace = "_dist=GetNumber(ConfigFile >> 'CfgMagazines' >> (_this select 2) >> 'ACE_Triggers' >> 'PressurePlate' >> 'digDistance');_ex=_this select 1;_ex setPosATL ((getPosATL _ex) vectorDiff ((VectorUp _ex) vectorCrossProduct [0,0,_dist]));false"; - }; - class IRSensor { - displayName = $STR_ACE_Explosives_IRSensor; - picture = PATHTOF(Data\UI\PressurePlate.paa); - onPlace = "false"; - }; - class Timer { - displayName = $STR_ACE_Explosives_timerName; - picture = PATHTOF(data\UI\Timer.paa); - onPlace = QUOTE([ARR_2(_this select 1,(_this select 3) select 0)] call FUNC(startTimer);false); - onSetup = QUOTE(_this call FUNC(openTimerSetUI);true); - }; - class Tripwire { - displayName = $STR_ACE_Explosives_TripWire; - picture = PATHTOF(Data\UI\Tripwire.paa); - onPlace = "false"; - }; + class Command { + displayName = $STR_ACE_Explosives_clacker_displayName; + picture = PATHTOF(Data\UI\Clacker.paa); + onPlace = QUOTE(_this call FUNC(AddClacker);false); + requires[] = {"ACE_Clacker"}; + }; + class MK16_Transmitter:Command { + displayName = $STR_ACE_Explosives_MK16_displayName; + picture = PATHTOF(Data\UI\MK16_Reciever_ca.paa); + requires[] = {"ACE_M26_Clacker"}; + }; + class DeadManSwitch:Command { + displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; + picture = PATHTOF(Data\UI\DeadmanSwitch.paa); + requires[] = {"ACE_DeadManSwitch"}; + }; + class Cellphone:Command { + displayName = $STR_ACE_Explosives_cellphone_displayName; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + onPlace = QUOTE(_this call FUNC(addCellphoneIED);false); + requires[] = {"ACE_Cellphone"}; + }; + class PressurePlate { + displayName = $STR_ACE_Explosives_PressurePlate; + picture = PATHTOF(Data\UI\PressurePlate.paa); + onPlace = "_dist=GetNumber(ConfigFile >> 'CfgMagazines' >> (_this select 2) >> 'ACE_Triggers' >> 'PressurePlate' >> 'digDistance');_ex=_this select 1;_ex setPosATL ((getPosATL _ex) vectorDiff ((VectorUp _ex) vectorCrossProduct [0,0,_dist]));false"; + }; + class IRSensor { + displayName = $STR_ACE_Explosives_IRSensor; + picture = PATHTOF(Data\UI\PressurePlate.paa); + onPlace = "false"; + }; + class Timer { + displayName = $STR_ACE_Explosives_timerName; + picture = PATHTOF(data\UI\Timer.paa); + onPlace = QUOTE([ARR_2(_this select 1,(_this select 3) select 0)] call FUNC(startTimer);false); + onSetup = QUOTE(_this call FUNC(openTimerSetUI);true); + }; + class Tripwire { + displayName = $STR_ACE_Explosives_TripWire; + picture = PATHTOF(Data\UI\Tripwire.paa); + onPlace = "false"; + }; }; diff --git a/addons/explosives/CfgAmmo.hpp b/addons/explosives/CfgAmmo.hpp index 38cd5f508c..fc9e4712dc 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -1,78 +1,78 @@ class CfgAmmo { - // All explosive based Ammo classes. These are all listed in case they become required. - class Default; + // All explosive based Ammo classes. These are all listed in case they become required. + class Default; - class TimeBombCore:Default { - ACE_DefuseTime = 5; - }; - /* - class BoundingMineCore:TimeBombCore; - class BoundingMineBase:BoundingMineCore; - class APERSBoundingMine_Range_Ammo:BoundingMineBase; + class TimeBombCore:Default { + ACE_DefuseTime = 5; + }; + /* + class BoundingMineCore:TimeBombCore; + class BoundingMineBase:BoundingMineCore; + class APERSBoundingMine_Range_Ammo:BoundingMineBase; - class MineCore: TimeBombCore; - class MineBase:MineCore; - class APERSMine_Range_Ammo:MineBase; - class ATMine_Range_Ammo:MineBase; + class MineCore: TimeBombCore; + class MineBase:MineCore; + class APERSMine_Range_Ammo:MineBase; + class ATMine_Range_Ammo:MineBase; - class UnderwaterMine_Range_Ammo:MineBase; - class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo; - class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo; + class UnderwaterMine_Range_Ammo:MineBase; + class UnderwaterMineAB_Range_Ammo:UnderwaterMine_Range_Ammo; + class UnderwaterMinePDM_Range_Ammo:UnderwaterMine_Range_Ammo; - class DirectionalBombCore:TimeBombCore; - class DirectionalBombBase:DirectionalBombCore; - class APERSTripMine_Wire_Ammo:DirectionalBombBase; + class DirectionalBombCore:TimeBombCore; + class DirectionalBombBase:DirectionalBombCore; + class APERSTripMine_Wire_Ammo:DirectionalBombBase; - class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase; + class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase; - class PipeBombCore: TimeBombCore; - class PipeBombBase:PipeBombCore; - */ - class DirectionalBombBase; - class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{ - ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; - }; - //class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo; + class PipeBombCore: TimeBombCore; + class PipeBombBase:PipeBombCore; + */ + class DirectionalBombBase; + class ClaymoreDirectionalMine_Remote_Ammo:DirectionalBombBase{ + ACE_Explosive = "ClaymoreDirectionalMine_Remote_Ammo_Scripted"; + soundActivation[] = {"",0,0,0}; + soundDeactivation[] = {"",0,0,0}; + }; + //class ClaymoreDirectionalMine_Remote_Ammo_Scripted:ClaymoreDirectionalMine_Remote_Ammo; - class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{ - indirectHitRange = 20; - ACE_explodeOnDefuse = 1; - }; - class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo { - mineTrigger = "RemoteTrigger"; - ACE_explodeOnDefuse = 0; - }; - class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo { - mineTrigger = "TimeTrigger"; - ACE_explodeOnDefuse = 0; - }; - class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo { - mineTrigger = "MagneticTrigger"; - }; + class SLAMDirectionalMine_Wire_Ammo:DirectionalBombBase{ + indirectHitRange = 20; + ACE_explodeOnDefuse = 1; + }; + class SLAMDirectionalMine_Command_Ammo:SLAMDirectionalMine_Wire_Ammo { + mineTrigger = "RemoteTrigger"; + ACE_explodeOnDefuse = 0; + }; + class SLAMDirectionalMine_Timer_Ammo:SLAMDirectionalMine_Wire_Ammo { + mineTrigger = "TimeTrigger"; + ACE_explodeOnDefuse = 0; + }; + class SLAMDirectionalMine_Magnetic_Ammo:SLAMDirectionalMine_Wire_Ammo { + mineTrigger = "MagneticTrigger"; + }; - class PipeBombBase; - class DemoCharge_Remote_Ammo:PipeBombBase{ - ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; - hit = 500; - indirectHit = 500; - indirectHitRange = 7; - }; - class SatchelCharge_Remote_Ammo:PipeBombBase{ - ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted"; - soundActivation[] = {"",0,0,0}; - soundDeactivation[] = {"",0,0,0}; - }; - /* - class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo; - class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo; + class PipeBombBase; + class DemoCharge_Remote_Ammo:PipeBombBase{ + ACE_Explosive = "DemoCharge_Remote_Ammo_Scripted"; + soundActivation[] = {"",0,0,0}; + soundDeactivation[] = {"",0,0,0}; + hit = 500; + indirectHit = 500; + indirectHitRange = 7; + }; + class SatchelCharge_Remote_Ammo:PipeBombBase{ + ACE_Explosive = "SatchelCharge_Remote_Ammo_Scripted"; + soundActivation[] = {"",0,0,0}; + soundDeactivation[] = {"",0,0,0}; + }; + /* + class DemoCharge_Remote_Ammo_Scripted:DemoCharge_Remote_Ammo; + class SatchelCharge_Remote_Ammo_Scripted:SatchelCharge_Remote_Ammo; TODO: Configure IEDs to use the system. - class IEDLandBig_Remote_Ammo:PipeBombBase{ - triggerWhenDestroyed = 1; + class IEDLandBig_Remote_Ammo:PipeBombBase{ + triggerWhenDestroyed = 1; }; class IEDLandSmall_Remote_Ammo:PipeBombBase{ triggerWhenDestroyed = 1; diff --git a/addons/explosives/CfgEventHandlers.hpp b/addons/explosives/CfgEventHandlers.hpp index e12d43e0d0..8d0b110935 100644 --- a/addons/explosives/CfgEventHandlers.hpp +++ b/addons/explosives/CfgEventHandlers.hpp @@ -1,12 +1,12 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_preInit)); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_postInit)); - }; + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; }; /* diff --git a/addons/explosives/CfgMagazines.hpp b/addons/explosives/CfgMagazines.hpp index e95e2cfb73..b89a207992 100644 --- a/addons/explosives/CfgMagazines.hpp +++ b/addons/explosives/CfgMagazines.hpp @@ -1,127 +1,127 @@ class CfgMagazines { - class CA_Magazine; - class ATMine_Range_Mag:CA_Magazine{ - ACE_Placeable = 1; - useAction = 0; - ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object. - ACE_DelayTime = 2.5; - class ACE_Triggers { - SupportedTriggers[] = {"PressurePlate"}; - class PressurePlate { - digDistance = 0.1; - }; - }; - }; - class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine"; - class ACE_Triggers { - SupportedTriggers[] = {"PressurePlate"}; - class PressurePlate { - digDistance = 0.075; - }; - }; - }; - class APERSMine_Range_Mag:ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_APERSMine"; - class ACE_Triggers { - SupportedTriggers[] = {"PressurePlate"}; - class PressurePlate { - digDistance = 0.05; - }; - }; - }; - class APERSTripMine_Wire_Mag:ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine"; - class ACE_Triggers { - SupportedTriggers[] = {"Tripwire"}; - class Tripwire; - }; - }; + class CA_Magazine; + class ATMine_Range_Mag:CA_Magazine{ + ACE_Placeable = 1; + useAction = 0; + ACE_SetupObject = "ACE_Explosives_Place_ATMine"; // CfgVehicle class for setup object. + ACE_DelayTime = 2.5; + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.1; + }; + }; + }; + class APERSBoundingMine_Range_Mag:ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_APERSBoundingMine"; + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.075; + }; + }; + }; + class APERSMine_Range_Mag:ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_APERSMine"; + class ACE_Triggers { + SupportedTriggers[] = {"PressurePlate"}; + class PressurePlate { + digDistance = 0.05; + }; + }; + }; + class APERSTripMine_Wire_Mag:ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_APERSTripwireMine"; + class ACE_Triggers { + SupportedTriggers[] = {"Tripwire"}; + class Tripwire; + }; + }; - class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{ - ACE_Placeable = 1; - useAction = 0; - ACE_SetupObject = "ACE_Explosives_Place_Claymore"; - ACE_DelayTime = 1.5; - class ACE_Triggers { - SupportedTriggers[] = {"Command"}; - class Command { - FuseTime = 0.5; - }; - }; - }; + class ClaymoreDirectionalMine_Remote_Mag:CA_Magazine{ + ACE_Placeable = 1; + useAction = 0; + ACE_SetupObject = "ACE_Explosives_Place_Claymore"; + ACE_DelayTime = 1.5; + class ACE_Triggers { + SupportedTriggers[] = {"Command"}; + class Command { + FuseTime = 0.5; + }; + }; + }; - class SatchelCharge_Remote_Mag:CA_Magazine{ - ACE_Placeable = 1; - useAction = 0; - ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge"; - ACE_DelayTime = 1; - class ACE_Triggers { - SupportedTriggers[] = {"Timer","Command", "MK16_Transmitter", "DeadmanSwitch"}; - class Timer { - FuseTime = 0.5; - }; - class Command { - FuseTime = 0.5; - }; - class MK16_Transmitter:Command{}; - class DeadmanSwitch:Command{}; - }; - }; - class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_DemoCharge"; - model = "\A3\Weapons_F\explosives\c4_charge_small_d"; - }; + class SatchelCharge_Remote_Mag:CA_Magazine{ + ACE_Placeable = 1; + useAction = 0; + ACE_SetupObject = "ACE_Explosives_Place_SatchelCharge"; + ACE_DelayTime = 1; + class ACE_Triggers { + SupportedTriggers[] = {"Timer","Command", "MK16_Transmitter", "DeadmanSwitch"}; + class Timer { + FuseTime = 0.5; + }; + class Command { + FuseTime = 0.5; + }; + class MK16_Transmitter:Command{}; + class DeadmanSwitch:Command{}; + }; + }; + class DemoCharge_Remote_Mag:SatchelCharge_Remote_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_DemoCharge"; + model = "\A3\Weapons_F\explosives\c4_charge_small_d"; + }; - class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_SLAM"; - class ACE_Triggers { - SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"}; - class PressurePlate{ - displayName = $STR_ACE_Explosives_SLAME_Magnetic; - digDistance = 0; - ammo = "SLAMDirectionalMine_Magnetic_Ammo"; - pitch = 90; - }; - class IRSensor{ - displayName = $STR_ACE_Explosives_SLAME_IRSensor; - }; - class Timer { - ammo = "SLAMDirectionalMine_Timer_Ammo"; - }; - class Command { - ammo = "SLAMDirectionalMine_Command_Ammo"; - fuseTime = 0.5; - }; - }; - }; + class SLAMDirectionalMine_Wire_Mag: ATMine_Range_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_SLAM"; + class ACE_Triggers { + SupportedTriggers[] = {"IRSensor","PressurePlate","Timer","Command"}; + class PressurePlate{ + displayName = $STR_ACE_Explosives_SLAME_Magnetic; + digDistance = 0; + ammo = "SLAMDirectionalMine_Magnetic_Ammo"; + pitch = 90; + }; + class IRSensor{ + displayName = $STR_ACE_Explosives_SLAME_IRSensor; + }; + class Timer { + ammo = "SLAMDirectionalMine_Timer_Ammo"; + }; + class Command { + ammo = "SLAMDirectionalMine_Command_Ammo"; + fuseTime = 0.5; + }; + }; + }; - class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { - ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; - class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; - class Command { - FuseTime = 0.5; - }; - class DeadmanSwitch:Command{}; - class Cellphone:Command{}; - }; - }; - class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ - ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; - }; - class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { - ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; - class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; - class Command { - FuseTime = 0.5; - }; - class DeadmanSwitch:Command{}; - class Cellphone:Command{}; - }; - }; - class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { - ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; - }; + class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag{ + ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; + }; + class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; + class ACE_Triggers { + SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone"}; + class Command { + FuseTime = 0.5; + }; + class DeadmanSwitch:Command{}; + class Cellphone:Command{}; + }; + }; + class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { + ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; + }; }; diff --git a/addons/explosives/CfgModule.hpp b/addons/explosives/CfgModule.hpp index 7486973b2c..b4f7b65a83 100644 --- a/addons/explosives/CfgModule.hpp +++ b/addons/explosives/CfgModule.hpp @@ -1,44 +1,44 @@ class Module_F; class ACE_ModuleExplosive: Module_F { - author = "$STR_ACE_Common_ACETeam"; - category = "ACE"; - displayName = "Explosive System"; - function = QUOTE(FUNC(module)); - scope = 2; - isGlobal = 1; - icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa); - class Arguments { - class RequireSpecialist { - displayName = "Require specialists?"; - description = "Require explosive specialists to disable explosives? Default: No"; - typeName = "BOOL"; - class values { - class Yes { - name = "Yes"; - value = 1; - }; - class No { - default = 1; - name = "No"; - value = 0; - }; - }; - }; - class PunishNonSpecialists { - displayName = "Punish non-specialists?"; - description = "Increase the time it takes to complete actions for non-specialists? Default: Yes"; - typeName = "BOOL"; - class values { - class Yes { - default = 1; - name = "Yes"; - value = 1; - }; - class No { - name = "No"; - value = 0; - }; - }; - }; - }; + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "Explosive System"; + function = QUOTE(FUNC(module)); + scope = 2; + isGlobal = 1; + icon = PATHTOF(UI\Icon_Module_Explosives_ca.paa); + class Arguments { + class RequireSpecialist { + displayName = "Require specialists?"; + description = "Require explosive specialists to disable explosives? Default: No"; + typeName = "BOOL"; + class values { + class Yes { + name = "Yes"; + value = 1; + }; + class No { + default = 1; + name = "No"; + value = 0; + }; + }; + }; + class PunishNonSpecialists { + displayName = "Punish non-specialists?"; + description = "Increase the time it takes to complete actions for non-specialists? Default: Yes"; + typeName = "BOOL"; + class values { + class Yes { + default = 1; + name = "Yes"; + value = 1; + }; + class No { + name = "No"; + value = 0; + }; + }; + }; + }; }; diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 2be23e78b5..30e1ff151d 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -1,327 +1,327 @@ class CfgVehicles { - class Man; - class CAManBase: Man { - class ACE_SelfActions { - class ACE_Explosives { - displayName = $STR_ACE_Explosives_Menu; - condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)])); - statement = ""; - exceptions[] = {"isNotSwimming", "isNotInside"}; - showDisabled = 1; - priority = 4; - icon = PATHTOF(UI\Explosives_Menu_ca.paa); - hotkey = "X"; - //Sub-menu items - class ACE_Detonate { - displayName = $STR_ACE_Explosives_Detonate; - condition = QUOTE([_player] call FUNC(canDetonate)); - statement = ""; - insertChildren = QUOTE([_player] call FUNC(addTransmitterActions);); - exceptions[] = {"isNotSwimming", "isNotInside"}; - showDisabled = 1; - icon = PATHTOF(UI\Explosives_Menu_ca.paa); - priority = 2; - hotkey = "T"; - }; - class ACE_Place { - displayName = $STR_ACE_Explosives_Place; - condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)}); - statement = ""; - insertChildren = QUOTE([_player] call FUNC(addExplosiveActions);); - exceptions[] = {"isNotSwimming"}; - showDisabled = 1; - icon = PATHTOF(UI\Place_Explosive_ca.paa); - priority = 1; - hotkey = "P"; - }; - class ACE_Cellphone { - displayName = $STR_ACE_Explosives_cellphone_displayName; - condition = "('ACE_Cellphone' in (items ace_player))"; - statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; - exceptions[] = {"isNotSwimming", "isNotInside"}; - showDisabled = 0; - icon = PATHTOF(Data\UI\Cellphone_UI.paa); - priority = 0.8; - }; - }; - }; - }; + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_Explosives { + displayName = $STR_ACE_Explosives_Menu; + condition = QUOTE(!(_player getVariable [ARR_2('ace_explosives_PlantingExplosive',false)])); + statement = ""; + exceptions[] = {"isNotSwimming", "isNotInside"}; + showDisabled = 1; + priority = 4; + icon = PATHTOF(UI\Explosives_Menu_ca.paa); + hotkey = "X"; + //Sub-menu items + class ACE_Detonate { + displayName = $STR_ACE_Explosives_Detonate; + condition = QUOTE([_player] call FUNC(canDetonate)); + statement = ""; + insertChildren = QUOTE([_player] call FUNC(addTransmitterActions);); + exceptions[] = {"isNotSwimming", "isNotInside"}; + showDisabled = 1; + icon = PATHTOF(UI\Explosives_Menu_ca.paa); + priority = 2; + hotkey = "T"; + }; + class ACE_Place { + displayName = $STR_ACE_Explosives_Place; + condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)}); + statement = ""; + insertChildren = QUOTE([_player] call FUNC(addExplosiveActions);); + exceptions[] = {"isNotSwimming"}; + showDisabled = 1; + icon = PATHTOF(UI\Place_Explosive_ca.paa); + priority = 1; + hotkey = "P"; + }; + class ACE_Cellphone { + displayName = $STR_ACE_Explosives_cellphone_displayName; + condition = "('ACE_Cellphone' in (items ace_player))"; + statement = "closeDialog 0;createDialog 'Rsc_ACE_PhoneInterface';"; + exceptions[] = {"isNotSwimming", "isNotInside"}; + showDisabled = 0; + icon = PATHTOF(Data\UI\Cellphone_UI.paa); + priority = 0.8; + }; + }; + }; + }; - class Items_base_F; - class ACE_DefuseObject: Items_base_F { - XEH_ENABLED; - author = "ACE"; - _generalMacro = "ACE_DefuseObject"; - displayName = "ACE Defuse Helper"; - mapSize = 0.2; - icon = "iconObject_1x2"; - model = "\A3\Weapons_f\dummyweapon.p3d"; - scope = 2; - scopeCurator = 1; - vehicleClass = "Cargo"; - class ACE_Actions { - class ACE_MainActions { - selection = ""; - distance = 5; - condition = "true"; - class ACE_Defuse { - displayName = $STR_ACE_Explosives_Defuse; - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDefuse)); - statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse);); - exceptions[] = {"isNotSwimming"}; - showDisabled = 0; - icon = PATHTOF(UI\Defuse_ca.paa); - priority = 0.8; - hotkey = "F"; - distance = 5; - }; - }; - }; - }; - class ACE_Explosives_Place: Items_base_F { - XEH_ENABLED; - author = "ACE"; - _generalMacro = "ACE_Explosives_Place"; - displayName = "Multi-meter"; - mapSize = 0.2; - icon = "iconObject_1x2"; - model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d"; - scope = 2; - scopeCurator = 1; - vehicleClass = "Cargo"; - ACE_offset[] = {0,0,0}; - class ACE_Actions { - class ACE_MainActions { - selection = ""; - distance = 5; - condition = "true"; - class ACE_SetTrigger { - selection = ""; - displayName = "$STR_ACE_Explosives_TriggerMenu"; - distance = 4; - condition = "true"; - statement = ""; - insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); - showDisabled = 0; - exceptions[] = {}; - priority = 5; - icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); - }; - class ACE_PickUp { - selection = ""; - displayName = "$STR_ACE_Explosives_Pickup"; - distance = 4; - condition = "true"; - statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); - showDisabled = 0; - exceptions[] = {}; - priority = 5; - icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; - }; - }; - }; - }; + class Items_base_F; + class ACE_DefuseObject: Items_base_F { + XEH_ENABLED; + author = "ACE"; + _generalMacro = "ACE_DefuseObject"; + displayName = "ACE Defuse Helper"; + mapSize = 0.2; + icon = "iconObject_1x2"; + model = "\A3\Weapons_f\dummyweapon.p3d"; + scope = 2; + scopeCurator = 1; + vehicleClass = "Cargo"; + class ACE_Actions { + class ACE_MainActions { + selection = ""; + distance = 5; + condition = "true"; + class ACE_Defuse { + displayName = $STR_ACE_Explosives_Defuse; + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDefuse)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(startDefuse);); + exceptions[] = {"isNotSwimming"}; + showDisabled = 0; + icon = PATHTOF(UI\Defuse_ca.paa); + priority = 0.8; + hotkey = "F"; + distance = 5; + }; + }; + }; + }; + class ACE_Explosives_Place: Items_base_F { + XEH_ENABLED; + author = "ACE"; + _generalMacro = "ACE_Explosives_Place"; + displayName = "Multi-meter"; + mapSize = 0.2; + icon = "iconObject_1x2"; + model = "\A3\Structures_F\Items\Tools\MultiMeter_F.p3d"; + scope = 2; + scopeCurator = 1; + vehicleClass = "Cargo"; + ACE_offset[] = {0,0,0}; + class ACE_Actions { + class ACE_MainActions { + selection = ""; + distance = 5; + condition = "true"; + class ACE_SetTrigger { + selection = ""; + displayName = "$STR_ACE_Explosives_TriggerMenu"; + distance = 4; + condition = "true"; + statement = ""; + insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); + }; + class ACE_PickUp { + selection = ""; + displayName = "$STR_ACE_Explosives_Pickup"; + distance = 4; + condition = "true"; + statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; + }; + }; + }; + }; - class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place { - displayName = "Demo Charge"; - model = "\A3\Weapons_F\explosives\c4_charge_small_d"; - }; - class ACE_Explosives_Place_APERSBoundingMine:ACE_Explosives_Place { - displayName = "APERS Bounding Mine"; - model = "\A3\Weapons_F\explosives\mine_AP_bouncing"; - }; - class ACE_Explosives_Place_APERSMine:ACE_Explosives_Place { - displayName = "APERS Mine"; - model = "\A3\Weapons_F\explosives\mine_ap"; - }; - class ACE_Explosives_Place_APERSTripwireMine:ACE_Explosives_Place { - displayName = "APERS Tripwire Mine"; - model = "\A3\Weapons_F\explosives\mine_AP_tripwire"; - ACE_offset[] = {1,0,0}; - }; + class ACE_Explosives_Place_DemoCharge:ACE_Explosives_Place { + displayName = "Demo Charge"; + model = "\A3\Weapons_F\explosives\c4_charge_small_d"; + }; + class ACE_Explosives_Place_APERSBoundingMine:ACE_Explosives_Place { + displayName = "APERS Bounding Mine"; + model = "\A3\Weapons_F\explosives\mine_AP_bouncing"; + }; + class ACE_Explosives_Place_APERSMine:ACE_Explosives_Place { + displayName = "APERS Mine"; + model = "\A3\Weapons_F\explosives\mine_ap"; + }; + class ACE_Explosives_Place_APERSTripwireMine:ACE_Explosives_Place { + displayName = "APERS Tripwire Mine"; + model = "\A3\Weapons_F\explosives\mine_AP_tripwire"; + ACE_offset[] = {1,0,0}; + }; - class ACE_Explosives_Place_ATMine:ACE_Explosives_Place { - displayName = "AT Mine"; - model = "\A3\Weapons_f\Explosives\mine_at"; - }; + class ACE_Explosives_Place_ATMine:ACE_Explosives_Place { + displayName = "AT Mine"; + model = "\A3\Weapons_f\Explosives\mine_at"; + }; - class ACE_Explosives_Place_Claymore:ACE_Explosives_Place { - displayName = "Claymore"; - model = "\A3\Weapons_F\explosives\mine_AP_miniclaymore"; - }; + class ACE_Explosives_Place_Claymore:ACE_Explosives_Place { + displayName = "Claymore"; + model = "\A3\Weapons_F\explosives\mine_AP_miniclaymore"; + }; - class ACE_Explosives_Place_SatchelCharge:ACE_Explosives_Place { - displayName = "Satchel Charge"; - model = "\A3\Weapons_F\Explosives\satchel"; - }; + class ACE_Explosives_Place_SatchelCharge:ACE_Explosives_Place { + displayName = "Satchel Charge"; + model = "\A3\Weapons_F\Explosives\satchel"; + }; - class ACE_Explosives_Place_SLAM:ACE_Explosives_Place { - displayName = "SLAM"; - model = "\A3\Weapons_F\Explosives\mine_SLAM_directional"; - }; + class ACE_Explosives_Place_SLAM:ACE_Explosives_Place { + displayName = "SLAM"; + model = "\A3\Weapons_F\Explosives\mine_SLAM_directional"; + }; - // IEDs - class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place { - displayName = "IED Urban Big"; - model = "\A3\Weapons_F\Explosives\IED_urban_big"; - }; + // IEDs + class ACE_Explosives_Place_IEDUrbanBig:ACE_Explosives_Place { + displayName = "IED Urban Big"; + model = "\A3\Weapons_F\Explosives\IED_urban_big"; + }; - class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place { - displayName = "IED Land Big"; - model = "\A3\Weapons_F\Explosives\IED_land_big"; - }; + class ACE_Explosives_Place_IEDLandBig:ACE_Explosives_Place { + displayName = "IED Land Big"; + model = "\A3\Weapons_F\Explosives\IED_land_big"; + }; - class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place { - displayName = "IED Urban Small"; - model = "\A3\Weapons_F\Explosives\IED_urban_small"; - }; + class ACE_Explosives_Place_IEDUrbanSmall:ACE_Explosives_Place { + displayName = "IED Urban Small"; + model = "\A3\Weapons_F\Explosives\IED_urban_small"; + }; - class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place { - displayName = "IED Land Small"; - model = "\A3\Weapons_F\Explosives\IED_land_small"; - }; + class ACE_Explosives_Place_IEDLandSmall:ACE_Explosives_Place { + displayName = "IED Land Small"; + model = "\A3\Weapons_F\Explosives\IED_land_small"; + }; - class NATO_Box_Base; - class EAST_Box_Base; - class IND_Box_Base; - class FIA_Box_Base_F; - class Box_NATO_Support_F; + class NATO_Box_Base; + class EAST_Box_Base; + class IND_Box_Base; + class FIA_Box_Base_F; + class Box_NATO_Support_F; - class Box_NATO_AmmoOrd_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - }; - }; + class Box_NATO_AmmoOrd_F: NATO_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + }; + }; - class Box_East_AmmoOrd_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - }; - }; + class Box_East_AmmoOrd_F: EAST_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + }; + }; - class Box_IND_AmmoOrd_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - MACRO_ADDITEM(ACE_Deadmanswitch,2); - MACRO_ADDITEM(ACE_Cellphone,3); - }; - }; + class Box_IND_AmmoOrd_F: IND_Box_Base { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + MACRO_ADDITEM(ACE_Deadmanswitch,2); + MACRO_ADDITEM(ACE_Cellphone,3); + }; + }; - class Box_FIA_Ammo_F: FIA_Box_Base_F { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,2); - MACRO_ADDITEM(ACE_M26_Clacker,2); - MACRO_ADDITEM(ACE_DefusalKit,2); - MACRO_ADDITEM(ACE_Deadmanswitch,1); - MACRO_ADDITEM(ACE_Cellphone,2); - }; - }; + class Box_FIA_Ammo_F: FIA_Box_Base_F { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,2); + MACRO_ADDITEM(ACE_M26_Clacker,2); + MACRO_ADDITEM(ACE_DefusalKit,2); + MACRO_ADDITEM(ACE_Deadmanswitch,1); + MACRO_ADDITEM(ACE_Cellphone,2); + }; + }; - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_Clacker,12); - MACRO_ADDITEM(ACE_M26_Clacker,6); - MACRO_ADDITEM(ACE_DefusalKit,12); - MACRO_ADDITEM(ACE_Deadmanswitch,6); - MACRO_ADDITEM(ACE_Cellphone,10); - }; - }; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_Clacker,12); + MACRO_ADDITEM(ACE_M26_Clacker,6); + MACRO_ADDITEM(ACE_DefusalKit,12); + MACRO_ADDITEM(ACE_Deadmanswitch,6); + MACRO_ADDITEM(ACE_Cellphone,10); + }; + }; - class B_Kitbag_rgr; - class B_Kitbag_rgr_Exp: B_Kitbag_rgr { - class TransportItems { - class _xx_ToolKit { // xXToOlKiT420mLgXx - count = 0; - }; - }; - }; - class B_Carryall_ocamo; - class B_Carryall_ocamo_Exp: B_Carryall_ocamo { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; - class B_Carryall_oucamo; - class B_Carryall_oucamo_Exp: B_Carryall_oucamo { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; - class B_Carryall_oli; - class G_Carryall_Exp: B_Carryall_oli { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; - class I_Carryall_oli_Exp: B_Carryall_oli { - class TransportItems { - class _xx_ToolKit { - count = 0; - }; - }; - }; + class B_Kitbag_rgr; + class B_Kitbag_rgr_Exp: B_Kitbag_rgr { + class TransportItems { + class _xx_ToolKit { // xXToOlKiT420mLgXx + count = 0; + }; + }; + }; + class B_Carryall_ocamo; + class B_Carryall_ocamo_Exp: B_Carryall_ocamo { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; + class B_Carryall_oucamo; + class B_Carryall_oucamo_Exp: B_Carryall_oucamo { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; + class B_Carryall_oli; + class G_Carryall_Exp: B_Carryall_oli { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; + class I_Carryall_oli_Exp: B_Carryall_oli { + class TransportItems { + class _xx_ToolKit { + count = 0; + }; + }; + }; - #include "CfgModule.hpp" + #include "CfgModule.hpp" - // Add ACE_Clacker and ACE_DefusalKit to every explosive unit. - #define MACRO_ADDMINEKIT \ - items[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; \ - respawnitems[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; + // Add ACE_Clacker and ACE_DefusalKit to every explosive unit. + #define MACRO_ADDMINEKIT \ + items[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; \ + respawnitems[] = {"FirstAidKit", "ACE_Clacker", "ACE_DefusalKit"}; - class B_Soldier_base_F; class B_soldier_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; - class B_Soldier_03_f; class B_engineer_F:B_Soldier_03_f {MACRO_ADDMINEKIT}; - class B_Soldier_diver_base_F; class B_diver_exp_F:B_Soldier_diver_base_F {MACRO_ADDMINEKIT}; - class B_Soldier_recon_base; class B_recon_exp_F:B_Soldier_recon_base {MACRO_ADDMINEKIT}; - class B_CTRG_soldier_engineer_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_G_Soldier_base_F; class I_G_engineer_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_G_Soldier_exp_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; - class B_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; - class O_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; - class B_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; - class O_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; - class I_Soldier_02_F; class I_Soldier_exp_F:I_Soldier_02_F {MACRO_ADDMINEKIT}; - class I_Soldier_base_F; class I_engineer_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_Soldier_diver_base_F; class I_diver_exp_F:I_Soldier_diver_base_F {MACRO_ADDMINEKIT}; - class O_Soldier_base_F; class O_soldier_exp_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; - class O_engineer_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; - class O_Soldier_diver_base_F; class O_diver_exp_F:O_Soldier_diver_base_F {MACRO_ADDMINEKIT}; - class O_Soldier_recon_base; class O_recon_exp_F:O_Soldier_recon_base {MACRO_ADDMINEKIT}; - class O_Soldier_Urban_base; class O_soldierU_exp_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; - class O_engineer_U_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; - class B_Protagonist_VR_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; - class O_Protagonist_VR_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; - class I_Protagonist_VR_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; - class B_Soldier_F; class b_soldier_universal_f:B_Soldier_F {MACRO_ADDMINEKIT}; - class B_G_Soldier_F; class b_g_soldier_universal_f:B_G_Soldier_F {MACRO_ADDMINEKIT}; - class O_Soldier_F; class o_soldier_universal_f:O_Soldier_F {MACRO_ADDMINEKIT}; - class O_G_Soldier_F; class o_g_soldier_universal_f:O_G_Soldier_F {MACRO_ADDMINEKIT}; - class I_soldier_F; class i_soldier_universal_f:I_soldier_F {MACRO_ADDMINEKIT}; - class I_G_Soldier_F; class i_g_soldier_universal_f:I_G_Soldier_F {MACRO_ADDMINEKIT}; + class B_Soldier_base_F; class B_soldier_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; + class B_Soldier_03_f; class B_engineer_F:B_Soldier_03_f {MACRO_ADDMINEKIT}; + class B_Soldier_diver_base_F; class B_diver_exp_F:B_Soldier_diver_base_F {MACRO_ADDMINEKIT}; + class B_Soldier_recon_base; class B_recon_exp_F:B_Soldier_recon_base {MACRO_ADDMINEKIT}; + class B_CTRG_soldier_engineer_exp_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_G_Soldier_base_F; class I_G_engineer_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_G_Soldier_exp_F:I_G_Soldier_base_F {MACRO_ADDMINEKIT}; + class B_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; + class O_G_engineer_F:I_G_engineer_F {MACRO_ADDMINEKIT}; + class B_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; + class O_G_Soldier_exp_F:I_G_Soldier_exp_F {MACRO_ADDMINEKIT}; + class I_Soldier_02_F; class I_Soldier_exp_F:I_Soldier_02_F {MACRO_ADDMINEKIT}; + class I_Soldier_base_F; class I_engineer_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_Soldier_diver_base_F; class I_diver_exp_F:I_Soldier_diver_base_F {MACRO_ADDMINEKIT}; + class O_Soldier_base_F; class O_soldier_exp_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; + class O_engineer_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; + class O_Soldier_diver_base_F; class O_diver_exp_F:O_Soldier_diver_base_F {MACRO_ADDMINEKIT}; + class O_Soldier_recon_base; class O_recon_exp_F:O_Soldier_recon_base {MACRO_ADDMINEKIT}; + class O_Soldier_Urban_base; class O_soldierU_exp_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; + class O_engineer_U_F:O_Soldier_Urban_base {MACRO_ADDMINEKIT}; + class B_Protagonist_VR_F:B_Soldier_base_F {MACRO_ADDMINEKIT}; + class O_Protagonist_VR_F:O_Soldier_base_F {MACRO_ADDMINEKIT}; + class I_Protagonist_VR_F:I_Soldier_base_F {MACRO_ADDMINEKIT}; + class B_Soldier_F; class b_soldier_universal_f:B_Soldier_F {MACRO_ADDMINEKIT}; + class B_G_Soldier_F; class b_g_soldier_universal_f:B_G_Soldier_F {MACRO_ADDMINEKIT}; + class O_Soldier_F; class o_soldier_universal_f:O_Soldier_F {MACRO_ADDMINEKIT}; + class O_G_Soldier_F; class o_g_soldier_universal_f:O_G_Soldier_F {MACRO_ADDMINEKIT}; + class I_soldier_F; class i_soldier_universal_f:I_soldier_F {MACRO_ADDMINEKIT}; + class I_G_Soldier_F; class i_g_soldier_universal_f:I_G_Soldier_F {MACRO_ADDMINEKIT}; - // Add ACE_Clacker to snipers and spotters for setting off Claymores - #define MACRO_ADDCLAYMOREKIT \ - items[] = {"FirstAidKit","ACE_Clacker"}; \ - respawnitems[] = {"FirstAidKit","ACE_Clacker"}; + // Add ACE_Clacker to snipers and spotters for setting off Claymores + #define MACRO_ADDCLAYMOREKIT \ + items[] = {"FirstAidKit","ACE_Clacker"}; \ + respawnitems[] = {"FirstAidKit","ACE_Clacker"}; - class B_Soldier_sniper_base_F; - class B_sniper_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class B_spotter_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class I_Soldier_sniper_base_F; - class I_Sniper_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class I_Spotter_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class O_Soldier_sniper_base_F; - class O_sniper_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; - class O_spotter_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class B_Soldier_sniper_base_F; + class B_sniper_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class B_spotter_F: B_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class I_Soldier_sniper_base_F; + class I_Sniper_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class I_Spotter_F: I_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class O_Soldier_sniper_base_F; + class O_sniper_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; + class O_spotter_F: O_Soldier_sniper_base_F {MACRO_ADDCLAYMOREKIT}; }; diff --git a/addons/explosives/CfgWeapons.hpp b/addons/explosives/CfgWeapons.hpp index 881864076e..a90b4d515f 100644 --- a/addons/explosives/CfgWeapons.hpp +++ b/addons/explosives/CfgWeapons.hpp @@ -1,69 +1,69 @@ class CfgWeapons { - class ACE_ItemCore; - class InventoryItem_Base_f; + class ACE_ItemCore; + class InventoryItem_Base_f; - class ACE_ExplosiveItem: InventoryItem_Base_f { - allowedSlots[] = {801,701,901}; - //type = 201; - }; + class ACE_ExplosiveItem: InventoryItem_Base_f { + allowedSlots[] = {801,701,901}; + //type = 201; + }; - class ACE_Clacker: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_clacker_displayName; - descriptionShort = $STR_ACE_Explosives_clacker_description; - picture = PATHTOF(Data\UI\Clacker.paa); - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - ACE_Range = 250; - ACE_Detonator = 1; + class ACE_Clacker: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_clacker_displayName; + descriptionShort = $STR_ACE_Explosives_clacker_description; + picture = PATHTOF(Data\UI\Clacker.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 250; + ACE_Detonator = 1; - class ItemInfo: ACE_ExplosiveItem { - mass = 3; - uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; - }; - }; - class ACE_M26_Clacker: ACE_Clacker { - displayName = $STR_ACE_Explosives_M26_displayName; - picture = PATHTOF(Data\UI\MK26_Transmitter_ca.paa); - ACE_Range = 5000; - }; - class ACE_DefusalKit: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_DefusalKit_displayName; - descriptionShort = $STR_ACE_Explosives_DefusalKit_description; - picture = PATHTOF(Data\UI\Pliers.paa); - model = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; + class ItemInfo: ACE_ExplosiveItem { + mass = 3; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; + class ACE_M26_Clacker: ACE_Clacker { + displayName = $STR_ACE_Explosives_M26_displayName; + picture = PATHTOF(Data\UI\MK26_Transmitter_ca.paa); + ACE_Range = 5000; + }; + class ACE_DefusalKit: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_DefusalKit_displayName; + descriptionShort = $STR_ACE_Explosives_DefusalKit_description; + picture = PATHTOF(Data\UI\Pliers.paa); + model = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; - class ItemInfo: ACE_ExplosiveItem { - mass = 5; - uniformModel = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; - }; - }; - class ACE_DeadManSwitch: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; - descriptionShort = $STR_ACE_Explosives_DeadManSwitch_description; - picture = PATHTOF(Data\UI\DeadmanSwitch.paa); - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - ACE_Range = 100; - ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { + mass = 5; + uniformModel = "\A3\Structures_F\Items\Tools\Pliers_F.p3d"; + }; + }; + class ACE_DeadManSwitch: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_DeadManSwitch_displayName; + descriptionShort = $STR_ACE_Explosives_DeadManSwitch_description; + picture = PATHTOF(Data\UI\DeadmanSwitch.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 100; + ACE_Detonator = 1; - class ItemInfo: ACE_ExplosiveItem { - mass = 2; - uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; - }; - }; - class ACE_Cellphone: ACE_ItemCore { - scope = 2; - displayName = $STR_ACE_Explosives_cellphone_displayName; - descriptionShort = $STR_ACE_Explosives_cellphone_description; - picture = PATHTOF(Data\UI\Cellphone_UI.paa); - model = "\A3\weapons_F\ammo\mag_univ.p3d"; - ACE_Range = 15000; - ACE_Detonator = 1; + class ItemInfo: ACE_ExplosiveItem { + mass = 2; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; + class ACE_Cellphone: ACE_ItemCore { + scope = 2; + displayName = $STR_ACE_Explosives_cellphone_displayName; + descriptionShort = $STR_ACE_Explosives_cellphone_description; + picture = PATHTOF(Data\UI\Cellphone_UI.paa); + model = "\A3\weapons_F\ammo\mag_univ.p3d"; + ACE_Range = 15000; + ACE_Detonator = 1; - class ItemInfo: ACE_ExplosiveItem { - mass = 2; - uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; - }; - }; + class ItemInfo: ACE_ExplosiveItem { + mass = 2; + uniformModel = "\A3\weapons_F\ammo\mag_univ.p3d"; + }; + }; }; diff --git a/addons/explosives/ExplosivesUI.hpp b/addons/explosives/ExplosivesUI.hpp index ac7a66e954..6871f95f92 100644 --- a/addons/explosives/ExplosivesUI.hpp +++ b/addons/explosives/ExplosivesUI.hpp @@ -14,275 +14,275 @@ class RscPicture; class RscEdit; class Rsc_ACE_CallScreen_Edit:RscEdit { - canModify = 1; - colorBackground[] = {0,0,0,1}; - colorText[] = {0,0,0,1}; - colorDisabled[] = {1,1,1,0.25}; - colorSelection[] = { - "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", - "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", - "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", - 1 - }; - text = ""; - style = "0x00 + 0x40 + 0x200"; - shadow = 1; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)"; - x = 0.288594 * safezoneW + safezoneX; - w = 0.0825 * safezoneW; - h = 0.044 * safezoneH; + canModify = 1; + colorBackground[] = {0,0,0,1}; + colorText[] = {0,0,0,1}; + colorDisabled[] = {1,1,1,0.25}; + colorSelection[] = { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + text = ""; + style = "0x00 + 0x40 + 0x200"; + shadow = 1; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; }; class Rsc_ACE_HiddenButton:RscButton { - colorText[] = {0, 0, 0, 0}; - colorDisabled[] = {0, 0, 0, 0}; - colorBackground[] = {0, 0, 0, 0}; - colorBackgroundDisabled[] = {0, 0, 0, 0}; - colorBackgroundActive[] = {0, 0, 0, 0}; - colorFocused[] = {0, 0, 0, 0}; - colorShadow[] = {0, 0, 0, 0}; - colorBorder[] = {0, 0, 0, 0}; - w = 0.095589; - h = 0.039216; - shadow = 0; + colorText[] = {0, 0, 0, 0}; + colorDisabled[] = {0, 0, 0, 0}; + colorBackground[] = {0, 0, 0, 0}; + colorBackgroundDisabled[] = {0, 0, 0, 0}; + colorBackgroundActive[] = {0, 0, 0, 0}; + colorFocused[] = {0, 0, 0, 0}; + colorShadow[] = {0, 0, 0, 0}; + colorBorder[] = {0, 0, 0, 0}; + w = 0.095589; + h = 0.039216; + shadow = 0; }; class Rsc_ACE_Timer_Slider:RscXSliderH { - x = 0.4; - y = 0.2; - w = 0.3; - h = "1*((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; - colorBackground[] = {0,0,0,0.5}; + x = 0.4; + y = 0.2; + w = 0.3; + h = "1*((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0,0,0,0.5}; }; class RscACE_SelectTimeUI { - idd = 8854; - movingEnable = 0; - class controls { - class back:IGUIBack { - x = X_OFFSET; - y = 0; - w = 0.5; - h = 0.2; - colorBackground[] = {0, 0, 0, 0.5}; - }; - class header: RscText{ - idc = 8870; - x = X_OFFSET + 0.005; - y = 0.005; - w = 0.49; - h = 0.05; - style = ST_CENTER; - text = ""; - }; - class slider: Rsc_ACE_Timer_Slider { - idc = 8845; - x = X_OFFSET + 0.005; - y = 0.06; - w = 0.49; - h = 0.025; - onSliderPosChanged = "private ['_mins', '_secs'];_mins = floor((_this select 1)/60);_secs=floor((_this select 1) - (_mins*60));ctrlSetText [8870, format[localize 'STR_ACE_Explosives_TimerMenu',_mins, _secs]];"; - }; - class cancelBtn: RscButton { - idc = 8855; - x = X_OFFSET + 0.005; - w = 0.15; - h = 0.1; - y = 0.09; - style = ST_CENTER; - text = $STR_ACE_Explosives_Cancel; - action = "closeDialog 0;"; - }; - class approveBtn: RscButton { - idc = 8860; - x = X_OFFSET + 0.345; - y = 0.09; - h = 0.1; - w = 0.15; - style = ST_CENTER; - text = $STR_ACE_Explosives_SetTime; - action = "closeDialog 0;"; - }; - }; + idd = 8854; + movingEnable = 0; + class controls { + class back:IGUIBack { + x = X_OFFSET; + y = 0; + w = 0.5; + h = 0.2; + colorBackground[] = {0, 0, 0, 0.5}; + }; + class header: RscText{ + idc = 8870; + x = X_OFFSET + 0.005; + y = 0.005; + w = 0.49; + h = 0.05; + style = ST_CENTER; + text = ""; + }; + class slider: Rsc_ACE_Timer_Slider { + idc = 8845; + x = X_OFFSET + 0.005; + y = 0.06; + w = 0.49; + h = 0.025; + onSliderPosChanged = "private ['_mins', '_secs'];_mins = floor((_this select 1)/60);_secs=floor((_this select 1) - (_mins*60));ctrlSetText [8870, format[localize 'STR_ACE_Explosives_TimerMenu',_mins, _secs]];"; + }; + class cancelBtn: RscButton { + idc = 8855; + x = X_OFFSET + 0.005; + w = 0.15; + h = 0.1; + y = 0.09; + style = ST_CENTER; + text = $STR_ACE_Explosives_Cancel; + action = "closeDialog 0;"; + }; + class approveBtn: RscButton { + idc = 8860; + x = X_OFFSET + 0.345; + y = 0.09; + h = 0.1; + w = 0.15; + style = ST_CENTER; + text = $STR_ACE_Explosives_SetTime; + action = "closeDialog 0;"; + }; + }; }; class Rsc_ACE_NumKeyButton: Rsc_ACE_HiddenButton{}; class Rsc_ACE_PhoneInterface { - idd = 8855; - movingEnable = 1; - onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1); - class controls { - class RscPicture_1200: RscPicture { - idc = 1200; - text = PATHTOF(Data\UI\Cellphone_Background.paa); - x = 0.231875 * safezoneW + safezoneX; - y = 0.104 * safezoneH + safezoneY; - w = 0.195937 * safezoneW; - h = 0.704 * safezoneH; - }; - class numkey_1: Rsc_ACE_NumKeyButton { - idc = 1600; - x = 0.278281 * safezoneW + safezoneX; - y = 0.533 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "1"; - action = "ctrlSetText [1400,((ctrlText 1400) + '1')];"; - }; - class numkey_2: Rsc_ACE_NumKeyButton { - idc = 1601; - x = 0.314375 * safezoneW + safezoneX; - y = 0.533 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "2"; - action = "ctrlSetText [1400,((ctrlText 1400) + '2')];"; - }; - class numkey_3: Rsc_ACE_NumKeyButton { - idc = 1602; - x = 0.350469 * safezoneW + safezoneX; - y = 0.533 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "3"; - action = "ctrlSetText [1400,((ctrlText 1400) + '3')];"; - }; - class numkey_4: Rsc_ACE_NumKeyButton { - idc = 1603; - x = 0.278281 * safezoneW + safezoneX; - y = 0.577 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "4"; - action = "ctrlSetText [1400,((ctrlText 1400) + '4')];"; - }; - class numkey_5: Rsc_ACE_NumKeyButton { - idc = 1604; - x = 0.314375 * safezoneW + safezoneX; - y = 0.577 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "5"; - action = "ctrlSetText [1400,((ctrlText 1400) + '5')];"; - }; - class numkey_6: Rsc_ACE_NumKeyButton { - idc = 1605; - x = 0.350469 * safezoneW + safezoneX; - y = 0.577 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "6"; - action = "ctrlSetText [1400,((ctrlText 1400) + '6')];"; - }; - class numkey_7: Rsc_ACE_NumKeyButton { - idc = 1606; - x = 0.278281 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "7"; - action = "ctrlSetText [1400,((ctrlText 1400) + '7')];"; - }; - class numkey_8: Rsc_ACE_NumKeyButton { - idc = 1607; - x = 0.314375 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "8"; - action = "ctrlSetText [1400,((ctrlText 1400) + '8')];"; - }; - class numkey_9: Rsc_ACE_NumKeyButton { - idc = 1608; - x = 0.350469 * safezoneW + safezoneX; - y = 0.621 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "9"; - action = "ctrlSetText [1400,((ctrlText 1400) + '9')];"; - }; - class numkey_0: Rsc_ACE_NumKeyButton { - idc = 1609; - x = 0.314375 * safezoneW + safezoneX; - y = 0.676 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "0"; - action = "ctrlSetText [1400,((ctrlText 1400) + '0')];"; - }; - class speedDialAdd: Rsc_ACE_NumKeyButton { - idc = 1610; - x = 0.278281 * safezoneW + safezoneX; - y = 0.676 * safezoneH + safezoneY; - w = 0.0309375 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial"; - action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial);); - }; - class clear: Rsc_ACE_HiddenButton { - idc = 1610; - x = 0.278281 * safezoneW + safezoneX; - y = 0.445 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Clear"; - action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];); - }; - class dial: Rsc_ACE_HiddenButton { - idc = 1611; - x = 0.309219 * safezoneW + safezoneX; - y = 0.445 * safezoneH + safezoneY; - w = 0.04125 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_Dial"; - action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone);); - }; - class up: Rsc_ACE_HiddenButton { - idc = 1612; - x = 0.360781 * safezoneW + safezoneX; - y = 0.445 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_Up"; - action = QUOTE([true] call FUNC(setSpeedDial)); - }; - class down: Rsc_ACE_HiddenButton { - idc = 1613; - x = 0.345312 * safezoneW + safezoneX; - y = 0.485 * safezoneH + safezoneY; - w = 0.020625 * safezoneW; - h = 0.033 * safezoneH; - tooltip = "$STR_ACE_Explosives_Phone_Down"; - action = QUOTE([false] call FUNC(setSpeedDial)); - }; - class speedDial_Text: RscText { - idc = 1405; - y = 0.302 * safezoneH + safezoneY; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; - x = 0.288594 * safezoneW + safezoneX; - w = 0.0825 * safezoneW; - h = 0.044 * safezoneH; - text = "Name"; - }; - class speedDial_edit: Rsc_ACE_CallScreen_Edit { - idc = 1401; - y = 0.302 * safezoneH + safezoneY; - x = 0.318 * safezoneW + safezoneX; - w = 0.1; - }; - class numberEdit_Text: RscText { - idc = 1406; - y = 0.348 * safezoneH + safezoneY; - SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; - x = 0.288594 * safezoneW + safezoneX; - w = 0.0825 * safezoneW; - h = 0.044 * safezoneH; - text = "#"; - }; - class number_edit: Rsc_ACE_CallScreen_Edit { - canModify = 0; - idc = 1400; - y = 0.348 * safezoneH + safezoneY; - x = 0.3 * safezoneW + safezoneX; - }; - }; + idd = 8855; + movingEnable = 1; + onLoad = QUOTE(GVAR(IED_CurrentSpeedDial) = -1); + class controls { + class RscPicture_1200: RscPicture { + idc = 1200; + text = PATHTOF(Data\UI\Cellphone_Background.paa); + x = 0.231875 * safezoneW + safezoneX; + y = 0.104 * safezoneH + safezoneY; + w = 0.195937 * safezoneW; + h = 0.704 * safezoneH; + }; + class numkey_1: Rsc_ACE_NumKeyButton { + idc = 1600; + x = 0.278281 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "1"; + action = "ctrlSetText [1400,((ctrlText 1400) + '1')];"; + }; + class numkey_2: Rsc_ACE_NumKeyButton { + idc = 1601; + x = 0.314375 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "2"; + action = "ctrlSetText [1400,((ctrlText 1400) + '2')];"; + }; + class numkey_3: Rsc_ACE_NumKeyButton { + idc = 1602; + x = 0.350469 * safezoneW + safezoneX; + y = 0.533 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "3"; + action = "ctrlSetText [1400,((ctrlText 1400) + '3')];"; + }; + class numkey_4: Rsc_ACE_NumKeyButton { + idc = 1603; + x = 0.278281 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "4"; + action = "ctrlSetText [1400,((ctrlText 1400) + '4')];"; + }; + class numkey_5: Rsc_ACE_NumKeyButton { + idc = 1604; + x = 0.314375 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "5"; + action = "ctrlSetText [1400,((ctrlText 1400) + '5')];"; + }; + class numkey_6: Rsc_ACE_NumKeyButton { + idc = 1605; + x = 0.350469 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "6"; + action = "ctrlSetText [1400,((ctrlText 1400) + '6')];"; + }; + class numkey_7: Rsc_ACE_NumKeyButton { + idc = 1606; + x = 0.278281 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "7"; + action = "ctrlSetText [1400,((ctrlText 1400) + '7')];"; + }; + class numkey_8: Rsc_ACE_NumKeyButton { + idc = 1607; + x = 0.314375 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "8"; + action = "ctrlSetText [1400,((ctrlText 1400) + '8')];"; + }; + class numkey_9: Rsc_ACE_NumKeyButton { + idc = 1608; + x = 0.350469 * safezoneW + safezoneX; + y = 0.621 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "9"; + action = "ctrlSetText [1400,((ctrlText 1400) + '9')];"; + }; + class numkey_0: Rsc_ACE_NumKeyButton { + idc = 1609; + x = 0.314375 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "0"; + action = "ctrlSetText [1400,((ctrlText 1400) + '0')];"; + }; + class speedDialAdd: Rsc_ACE_NumKeyButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.676 * safezoneH + safezoneY; + w = 0.0309375 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_AddToSpeedDial"; + action = QUOTE([ARR_2(ctrlText 1401,ctrlText 1400)] call FUNC(addToSpeedDial);); + }; + class clear: Rsc_ACE_HiddenButton { + idc = 1610; + x = 0.278281 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Clear"; + action = QUOTE(ctrlSetText [ARR_2(1400,'')];[ctrlText 1401] call FUNC(removeFromSpeedDial);ctrlSetText [ARR_2(1401,'')];); + }; + class dial: Rsc_ACE_HiddenButton { + idc = 1611; + x = 0.309219 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.04125 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Dial"; + action = QUOTE([ARR_2(ace_player,ctrlText 1400)] call FUNC(dialPhone);); + }; + class up: Rsc_ACE_HiddenButton { + idc = 1612; + x = 0.360781 * safezoneW + safezoneX; + y = 0.445 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Up"; + action = QUOTE([true] call FUNC(setSpeedDial)); + }; + class down: Rsc_ACE_HiddenButton { + idc = 1613; + x = 0.345312 * safezoneW + safezoneX; + y = 0.485 * safezoneH + safezoneY; + w = 0.020625 * safezoneW; + h = 0.033 * safezoneH; + tooltip = "$STR_ACE_Explosives_Phone_Down"; + action = QUOTE([false] call FUNC(setSpeedDial)); + }; + class speedDial_Text: RscText { + idc = 1405; + y = 0.302 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "Name"; + }; + class speedDial_edit: Rsc_ACE_CallScreen_Edit { + idc = 1401; + y = 0.302 * safezoneH + safezoneY; + x = 0.318 * safezoneW + safezoneX; + w = 0.1; + }; + class numberEdit_Text: RscText { + idc = 1406; + y = 0.348 * safezoneH + safezoneY; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 22) * 1)"; + x = 0.288594 * safezoneW + safezoneX; + w = 0.0825 * safezoneW; + h = 0.044 * safezoneH; + text = "#"; + }; + class number_edit: Rsc_ACE_CallScreen_Edit { + canModify = 0; + idc = 1400; + y = 0.348 * safezoneH + safezoneY; + x = 0.3 * safezoneW + safezoneX; + }; + }; }; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index e3b40308c3..8ebf62090f 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -22,46 +22,46 @@ GVAR(CurrentSpeedDial) = 0; [{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler); player addEventHandler ["Killed", { - private "_deadman"; - call FUNC(place_Cancel); - _deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives); - { - [(_this select 0), -1, _x, true] call FUNC(detonateExplosive); - } count _deadman; + private "_deadman"; + call FUNC(place_Cancel); + _deadman = [(_this select 0), "DeadManSwitch"] call FUNC(getPlacedExplosives); + { + [(_this select 0), -1, _x, true] call FUNC(detonateExplosive); + } count _deadman; }]; player addEventHandler ["Take", { - private ["_item", "_getter", "_giver", "_config"]; - _item = _this select 2; - _getter = _this select 0; - _giver = _this select 1; + private ["_item", "_getter", "_giver", "_config"]; + _item = _this select 2; + _getter = _this select 0; + _giver = _this select 1; - _config = ConfigFile >> "CfgWeapons" >> _item; - if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { - private ["_clackerItems"]; - _clackerItems = _giver getVariable [QGVAR(Clackers), []]; - _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; + _config = ConfigFile >> "CfgWeapons" >> _item; + if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { + private ["_clackerItems"]; + _clackerItems = _giver getVariable [QGVAR(Clackers), []]; + _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; - _detonators = [_giver] call FUNC(getDetonators); - if (count _detonators == 0) then { - _giver setVariable [QGVAR(Clackers), nil, true]; - }; - }; + _detonators = [_giver] call FUNC(getDetonators); + if (count _detonators == 0) then { + _giver setVariable [QGVAR(Clackers), nil, true]; + }; + }; }]; player addEventHandler ["Put", { - private ["_item", "_getter", "_giver", "_config"]; - _item = _this select 2; - _getter = _this select 1; - _giver = _this select 0; + private ["_item", "_getter", "_giver", "_config"]; + _item = _this select 2; + _getter = _this select 1; + _giver = _this select 0; - _config = ConfigFile >> "CfgWeapons" >> _item; - if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { - private ["_clackerItems"]; - _clackerItems = _giver getVariable [QGVAR(Clackers), []]; - _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; + _config = ConfigFile >> "CfgWeapons" >> _item; + if (isClass _config && {getNumber(_config >> "ACE_Detonator") == 1}) then { + private ["_clackerItems"]; + _clackerItems = _giver getVariable [QGVAR(Clackers), []]; + _getter SetVariable [QGVAR(Clackers), (_getter getVariable [QGVAR(Clackers), []]) + _clackerItems, true]; - _detonators = [_giver] call FUNC(getDetonators); - if (count _detonators == 0) then { - _giver setVariable [QGVAR(Clackers), nil, true]; - }; - }; + _detonators = [_giver] call FUNC(getDetonators); + if (count _detonators == 0) then { + _giver setVariable [QGVAR(Clackers), nil, true]; + }; + }; }]; diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index b60c6b9ab0..9652c38dd2 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -1,15 +1,15 @@ #include "script_component.hpp" class CfgPatches { - class ADDON { - units[] = {}; - weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; - requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interaction"}; - author[] = {"Garth 'L-H' de Wet"}; - authorUrl = "http://garth.snakebiteink.co.za/"; - VERSION_CONFIG; - }; + class ADDON { + units[] = {}; + weapons[] = {"ACE_Clacker", "ACE_DefusalKit", "ACE_M26_Clacker", "ACE_DeadManSwitch", "ACE_Cellphone"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction"}; + author[] = {"Garth 'L-H' de Wet"}; + authorUrl = "http://garth.snakebiteink.co.za/"; + VERSION_CONFIG; + }; }; #include "CfgEventHandlers.hpp" @@ -22,30 +22,30 @@ class CfgPatches { #include "ExplosivesUI.hpp" class CfgActions { - class None; - class Deactivate:None { - show = 0; - }; - class DeactivateMine:None { - show = 0; - }; + class None; + class Deactivate:None { + show = 0; + }; + class DeactivateMine:None { + show = 0; + }; }; class CfgMineTriggers { - class RangeTrigger; - class MagneticTrigger: RangeTrigger { - mineMagnetic = 1; - mineTriggerRange = 1; - }; + class RangeTrigger; + class MagneticTrigger: RangeTrigger { + mineMagnetic = 1; + mineTriggerRange = 1; + }; }; class ACE_Settings { - class GVAR(RequireSpecialist) { - value = 0; - typeName = "BOOL"; - }; - class GVAR(PunishNonSpecialists) { - value = 1; - typeName = "BOOL"; - }; + class GVAR(RequireSpecialist) { + value = 0; + typeName = "BOOL"; + }; + class GVAR(PunishNonSpecialists) { + value = 1; + typeName = "BOOL"; + }; }; diff --git a/addons/explosives/functions/fnc_addCellphoneIED.sqf b/addons/explosives/functions/fnc_addCellphoneIED.sqf index cb15c53d73..3be21df559 100644 --- a/addons/explosives/functions/fnc_addCellphoneIED.sqf +++ b/addons/explosives/functions/fnc_addCellphoneIED.sqf @@ -25,23 +25,23 @@ _requiredItems = getArray(_config >> "requires"); _hasRequired = true; _detonators = [_unit] call FUNC(getDetonators); { - if !(_x in _detonators) exitWith{ - _hasRequired = false; - }; + if !(_x in _detonators) exitWith{ + _hasRequired = false; + }; } count _requiredItems; private ["_code", "_count", "_codeSet"]; _codeSet = false; while {!_codeSet} do { - _code = str(round (random 9999)); - _count = 4 - count (toArray _code); - while {_count > 0} do { - _code = "0" + _code; - _count = _count - 1; - }; - _codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0; + _code = str(round (random 9999)); + _count = 4 - count (toArray _code); + while {_count > 0} do { + _code = "0" + _code; + _count = _count - 1; + }; + _codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0; }; if (isNil QGVAR(CellphoneIEDs)) then { - GVAR(CellphoneIEDs) = []; + GVAR(CellphoneIEDs) = []; }; _count = GVAR(CellphoneIEDs) pushBack [_explosive,_code,GetNumber(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> "Cellphone" >> "FuseTime")]; _count = _count + 1; diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index dcdddf7669..1e12b79d62 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -26,9 +26,9 @@ _requiredItems = getArray(_config >> "requires"); _hasRequired = true; _detonators = [_unit] call FUNC(getDetonators); { - if !(_x in _detonators) exitWith{ - _hasRequired = false; - }; + if !(_x in _detonators) exitWith{ + _hasRequired = false; + }; } count _requiredItems; if !(_hasRequired) exitWith {}; @@ -38,7 +38,7 @@ _clacker = _unit getVariable [QGVAR(Clackers), []]; GVAR(PlacedCount) = GVAR(PlacedCount) + 1; _clacker pushBack [_explosive, getNumber(_config >> "FuseTime"), format [localize "STR_ACE_Explosives_DetonateCode", - GVAR(PlacedCount)], _magazineClass, configName ((_this select 3) select (count (_this select 3) - 1))]; + GVAR(PlacedCount)], _magazineClass, configName ((_this select 3) select (count (_this select 3) - 1))]; _unit setVariable [QGVAR(Clackers), _clacker, true]; _unit sideChat format [localize "STR_ACE_Explosives_DetonateCode", GVAR(PlacedCount)]; diff --git a/addons/explosives/functions/fnc_addDetonateActions.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf index 745fab7b48..0017488458 100644 --- a/addons/explosives/functions/fnc_addDetonateActions.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -23,27 +23,27 @@ _range = GetNumber (ConfigFile >> "CfgWeapons" >> _detonator >> "ACE_Range"); _result = [_unit] call FUNC(getPlacedExplosives); _children = []; { - if (!isNull(_x select 0)) then { - _required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires"); - if (_detonator in _required) then { - _item = ConfigFile >> "CfgMagazines" >> (_x select 3); + if (!isNull(_x select 0)) then { + _required = getArray (ConfigFile >> "CfgACE_Triggers" >> (_x select 4) >> "requires"); + if (_detonator in _required) then { + _item = ConfigFile >> "CfgMagazines" >> (_x select 3); - _children pushBack - [ - [ - format ["Explosive_%1", _forEachIndex], - _x select 2, - getText(_item >> "picture"), - {(_this select 2) call FUNC(detonateExplosive);}, - {true}, - {}, - [ACE_player,_range,_x] - ] call EFUNC(interact_menu,createAction), - [], - ACE_Player - ]; - }; - }; + _children pushBack + [ + [ + format ["Explosive_%1", _forEachIndex], + _x select 2, + getText(_item >> "picture"), + {(_this select 2) call FUNC(detonateExplosive);}, + {true}, + {}, + [ACE_player,_range,_x] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; + }; + }; } foreach _result; _children diff --git a/addons/explosives/functions/fnc_addToSpeedDial.sqf b/addons/explosives/functions/fnc_addToSpeedDial.sqf index 142996e4c3..4f0772e601 100644 --- a/addons/explosives/functions/fnc_addToSpeedDial.sqf +++ b/addons/explosives/functions/fnc_addToSpeedDial.sqf @@ -22,16 +22,16 @@ _found = false; EXPLODE_2_PVT(_this,_name,_code); if ((_code) == "") ExitWith { - [_name] call FUNC(removeFromSpeedDial); + [_name] call FUNC(removeFromSpeedDial); }; { - if ((_x select 0) == _name) exitWith { - _speedDial set [_foreachindex, _this]; - _found = true; - }; + if ((_x select 0) == _name) exitWith { + _speedDial set [_foreachindex, _this]; + _found = true; + }; } foreach _speedDial; if (!_found) then { - _speedDial pushBack _this; + _speedDial pushBack _this; }; ace_player setVariable [QGVAR(SpeedDial), _speedDial]; diff --git a/addons/explosives/functions/fnc_addTransmitterActions.sqf b/addons/explosives/functions/fnc_addTransmitterActions.sqf index 0313b8824e..6408eb2ec7 100644 --- a/addons/explosives/functions/fnc_addTransmitterActions.sqf +++ b/addons/explosives/functions/fnc_addTransmitterActions.sqf @@ -19,21 +19,21 @@ _unit = _this select 0; _detonators = [_unit] call FUNC(getDetonators); _children = []; { - _config = ConfigFile >> "CfgWeapons" >> _x; - _children pushBack - [ - [ - format ["Trigger_%1", _forEachIndex], - getText(_config >> "displayName"), - getText(_config >> "picture"), - {}, - {true}, - {(_this select 2) call FUNC(addDetonateActions);}, - [ACE_player,_x] - ] call EFUNC(interact_menu,createAction), - [], - ACE_Player - ]; + _config = ConfigFile >> "CfgWeapons" >> _x; + _children pushBack + [ + [ + format ["Trigger_%1", _forEachIndex], + getText(_config >> "displayName"), + getText(_config >> "picture"), + {}, + {true}, + {(_this select 2) call FUNC(addDetonateActions);}, + [ACE_player,_x] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; } foreach _detonators; _children diff --git a/addons/explosives/functions/fnc_addTriggerActions.sqf b/addons/explosives/functions/fnc_addTriggerActions.sqf index fb8cb60f81..e9c2dca0e6 100644 --- a/addons/explosives/functions/fnc_addTriggerActions.sqf +++ b/addons/explosives/functions/fnc_addTriggerActions.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" private ["_hasRequiredItems","_triggerTypes", "_children", - "_detonators", "_required", "_magTriggers"]; + "_detonators", "_required", "_magTriggers"]; EXPLODE_2_PVT(_this,_magazine,_explosive); _detonators = [ACE_player] call FUNC(getDetonators); @@ -24,33 +24,33 @@ _triggerTypes = [_magazine] call FUNC(triggerType); _magTriggers = ConfigFile >> "CfgMagazines" >> _magazine >> "ACE_Triggers"; _children = []; { - _required = getArray (_x >> "requires"); - _hasRequiredItems = true; - { - if !(_x in _detonators) exitWith { - _hasRequiredItems = false; - }; - } count _required; - if (_hasRequiredItems) then { - _children pushBack - [ - [ - format ["Trigger_%1", _forEachIndex], - if(isText(_magTriggers >> configName _x >> "displayName"))then - {getText(_magTriggers >> configName _x >> "displayName")} - else{getText(_x >> "displayName")}, - if(isText(_magTriggers >> configName _x >> "picture"))then - {getText(_magTriggers >> configName _x >> "picture")} - else{getText(_x >> "picture")}, - {(_this select 2) call FUNC(selectTrigger);}, - {true}, - {}, - [_explosive, _magazine, configName _x] - ] call EFUNC(interact_menu,createAction), - [], - ACE_Player - ]; - }; + _required = getArray (_x >> "requires"); + _hasRequiredItems = true; + { + if !(_x in _detonators) exitWith { + _hasRequiredItems = false; + }; + } count _required; + if (_hasRequiredItems) then { + _children pushBack + [ + [ + format ["Trigger_%1", _forEachIndex], + if(isText(_magTriggers >> configName _x >> "displayName"))then + {getText(_magTriggers >> configName _x >> "displayName")} + else{getText(_x >> "displayName")}, + if(isText(_magTriggers >> configName _x >> "picture"))then + {getText(_magTriggers >> configName _x >> "picture")} + else{getText(_x >> "picture")}, + {(_this select 2) call FUNC(selectTrigger);}, + {true}, + {}, + [_explosive, _magazine, configName _x] + ] call EFUNC(interact_menu,createAction), + [], + ACE_Player + ]; + }; } foreach _triggerTypes; _children diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index 9f4b2045b3..5abfabe60f 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -18,13 +18,13 @@ EXPLODE_2_PVT(_this,_unit,_explosive); if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith { - [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); + [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); }; { - detach _x; - deleteVehicle _x; - false + detach _x; + deleteVehicle _x; + false } count (attachedObjects (_explosive)); _unit action ["Deactivate", _unit, _explosive]; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 90e40694e3..174436b4e6 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -6,8 +6,8 @@ * 0: Unit * 1: Max range (-1 to ignore) * 2: Explosive - * 0: Explosive - * 1: Fuse time + * 0: Explosive + * 1: Fuse time * * Return Value: * None @@ -28,28 +28,28 @@ if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {fal _helper = (attachedTo (_item select 0)); if (!isNull(_helper)) then { - detach (_item select 0); - deleteVehicle _helper; + detach (_item select 0); + deleteVehicle _helper; }; if (getNumber (ConfigFile >> "CfgAmmo" >> typeof (_item select 0) >> "TriggerWhenDestroyed") == 0) then { - private ["_exp", "_previousExp"]; - _previousExp = _item select 0; - _exp = getText (ConfigFile >> "CfgAmmo" >> typeof (_previousExp) >> "ACE_Explosive"); - if (_exp != "") then { - _exp = createVehicle [_exp, [0,0,15001], [], 0, "NONE"]; - _exp setDir (getDir _previousExp); - _item set [0, _exp]; - _pos = getPosASL _previousExp; - deleteVehicle _previousExp; - _exp setPosASL _pos; - }; + private ["_exp", "_previousExp"]; + _previousExp = _item select 0; + _exp = getText (ConfigFile >> "CfgAmmo" >> typeof (_previousExp) >> "ACE_Explosive"); + if (_exp != "") then { + _exp = createVehicle [_exp, [0,0,15001], [], 0, "NONE"]; + _exp setDir (getDir _previousExp); + _item set [0, _exp]; + _pos = getPosASL _previousExp; + deleteVehicle _previousExp; + _exp setPosASL _pos; + }; }; [{ - _explosive = _this; - if (!isNull _explosive) then { - _explosive setDamage 1; - }; + _explosive = _this; + if (!isNull _explosive) then { + _explosive setDamage 1; + }; }, _item select 0, _item select 1, 0] call EFUNC(common,waitAndExecute); _result diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index 41b2a4a4f7..f00fa8a970 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -24,19 +24,19 @@ _unit setVariable [QGVAR(Dialing), true, true]; _ran = (ceil(random 8)) + 1; _arr = []; for [{_i=0}, {_i<_ran}, {_i=_i+1}] do { - _arr = _arr + ['.','..','...','']; + _arr = _arr + ['.','..','...','']; }; if (_unit == ace_player) then { - ctrlSetText [1400,"Calling"]; - [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); + ctrlSetText [1400,"Calling"]; + [FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler); } else { - private ["_explosive"]; - _explosive = [_code] call FUNC(getSpeedDialExplosive); - if ((count _explosive) > 0) then { - [{ - playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; - (_this select 0) setVariable [QGVAR(Dialing), false, true]; - }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); - [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); - }; + private ["_explosive"]; + _explosive = [_code] call FUNC(getSpeedDialExplosive); + if ((count _explosive) > 0) then { + [{ + playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; + (_this select 0) setVariable [QGVAR(Dialing), false, true]; + }, [_unit,_explosive select 0], 0.25 * (count _arr - 4), 0] call EFUNC(common,waitAndExecute); + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); + }; }; diff --git a/addons/explosives/functions/fnc_getDetonators.sqf b/addons/explosives/functions/fnc_getDetonators.sqf index 83e0087acc..26bde9b190 100644 --- a/addons/explosives/functions/fnc_getDetonators.sqf +++ b/addons/explosives/functions/fnc_getDetonators.sqf @@ -20,10 +20,10 @@ _items = (items _unit); _result = []; { - _config = ConfigFile >> "CfgWeapons" >> _x; - if (getNumber (_config >> "ACE_Detonator") == 1) then { - _result pushBack _x; - }; + _config = ConfigFile >> "CfgWeapons" >> _x; + if (getNumber (_config >> "ACE_Detonator") == 1) then { + _result pushBack _x; + }; } forEach _items; _result diff --git a/addons/explosives/functions/fnc_getPlacedExplosives.sqf b/addons/explosives/functions/fnc_getPlacedExplosives.sqf index fce8e4334a..9b40002bbe 100644 --- a/addons/explosives/functions/fnc_getPlacedExplosives.sqf +++ b/addons/explosives/functions/fnc_getPlacedExplosives.sqf @@ -20,29 +20,29 @@ private ["_unit", "_clackerList", "_adjustedList", "_list", "_filter"]; _unit = _this select 0; _filter = nil; if (count _this > 1) then { - _filter = ConfigFile >> "CfgACE_Triggers" >> (_this select 1); + _filter = ConfigFile >> "CfgACE_Triggers" >> (_this select 1); }; _clackerList = []; _adjustedList = false; _clackerList = _unit getVariable [QGVAR(Clackers), []]; _list = []; { - if (isNull (_x select 0)) then { - _clackerList set [_foreachIndex, "X"]; - _adjustedList = true; - } else { - if (isNil "_filter" || {(ConfigFile >> "CfgACE_Triggers" >> (_x select 4)) == _filter}) then { - _list pushBack _x; - }; - }; + if (isNull (_x select 0)) then { + _clackerList set [_foreachIndex, "X"]; + _adjustedList = true; + } else { + if (isNil "_filter" || {(ConfigFile >> "CfgACE_Triggers" >> (_x select 4)) == _filter}) then { + _list pushBack _x; + }; + }; } foreach _clackerList; if (_adjustedList) then { - _clackerList = _clackerList - ["X"]; - if (count _clackerList == 0) then { - _unit SetVariable [QGVAR(Clackers), nil, true]; - } else { - _unit SetVariable [QGVAR(Clackers), _clackerList, true]; - }; + _clackerList = _clackerList - ["X"]; + if (count _clackerList == 0) then { + _unit SetVariable [QGVAR(Clackers), nil, true]; + } else { + _unit SetVariable [QGVAR(Clackers), _clackerList, true]; + }; }; _list diff --git a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf index 4a0b93e229..b57f4f9f16 100644 --- a/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf +++ b/addons/explosives/functions/fnc_getSpeedDialExplosive.sqf @@ -19,9 +19,9 @@ private ["_explosive"]; if (isNil QGVAR(CellphoneIEDs)) exitWith {[]}; _explosive = []; { - if ((_x select 1) == _code) exitWith { - _explosive = _x; - }; - false + if ((_x select 1) == _code) exitWith { + _explosive = _x; + }; + false } count GVAR(CellphoneIEDs); _explosive diff --git a/addons/explosives/functions/fnc_hasExplosives.sqf b/addons/explosives/functions/fnc_hasExplosives.sqf index ef1deef28a..794cebc57d 100644 --- a/addons/explosives/functions/fnc_hasExplosives.sqf +++ b/addons/explosives/functions/fnc_hasExplosives.sqf @@ -19,9 +19,9 @@ _result = false; _unit = _this select 0; _magazines = magazines _unit; { - if (getNumber (ConfigFile >> "CfgMagazines" >> _x >> "ACE_Placeable") == 1) exitWith { - _result = true; - }; + if (getNumber (ConfigFile >> "CfgMagazines" >> _x >> "ACE_Placeable") == 1) exitWith { + _result = true; + }; } count _magazines; _result diff --git a/addons/explosives/functions/fnc_module.sqf b/addons/explosives/functions/fnc_module.sqf index c9dcc3b62a..3e522e9a70 100644 --- a/addons/explosives/functions/fnc_module.sqf +++ b/addons/explosives/functions/fnc_module.sqf @@ -21,8 +21,8 @@ _activated = _this select 2; if !(_activated) exitWith {}; [_logic, QGVAR(RequireSpecialist), "RequireSpecialist"] - call EFUNC(Common,readSettingFromModule); + call EFUNC(Common,readSettingFromModule); [_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"] - call EFUNC(Common,readSettingFromModule); + call EFUNC(Common,readSettingFromModule); diag_log text "[ACE]: Explosive Module Initialized."; diff --git a/addons/explosives/functions/fnc_onLanded.sqf b/addons/explosives/functions/fnc_onLanded.sqf index bba841b36f..409b6a286f 100644 --- a/addons/explosives/functions/fnc_onLanded.sqf +++ b/addons/explosives/functions/fnc_onLanded.sqf @@ -18,22 +18,22 @@ if ((_explosive getVariable [QGVAR(Handled), false])) exitWith {}; _explosive setVariable [QGVAR(Handled), true]; if (!isNull _hitTarget && {_hitTarget isKindOf "AllVehicles"}) then { - _explosive attachTo [_hitTarget]; - private "_dir"; - _dir = _setup getVariable [QGVAR(Direction), 0]; - _dir = _dir - (getDir _hitTarget); - [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); + _explosive attachTo [_hitTarget]; + private "_dir"; + _dir = _setup getVariable [QGVAR(Direction), 0]; + _dir = _dir - (getDir _hitTarget); + [[_explosive, _dir, 0], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); } else { - [{ - EXPLODE_2_PVT(_this,_player,_explosive); - private "_pos"; - _player setVariable [QGVAR(PlantingExplosive), false]; - if (surfaceIsWater _pos) then { - _pos = getPosASL _explosive; - _explosive setPosASL _pos; - }else{ - _pos = getPosATL _explosive; - _explosive setPosATL _pos; - }; - }, [ACE_player, _explosive], 0.5, 0.1] call EFUNC(common,waitAndExecute); + [{ + EXPLODE_2_PVT(_this,_player,_explosive); + private "_pos"; + _player setVariable [QGVAR(PlantingExplosive), false]; + if (surfaceIsWater _pos) then { + _pos = getPosASL _explosive; + _explosive setPosASL _pos; + }else{ + _pos = getPosATL _explosive; + _explosive setPosATL _pos; + }; + }, [ACE_player, _explosive], 0.5, 0.1] call EFUNC(common,waitAndExecute); }; diff --git a/addons/explosives/functions/fnc_openTimerSetUI.sqf b/addons/explosives/functions/fnc_openTimerSetUI.sqf index 54b459fdc4..e37bef06e3 100644 --- a/addons/explosives/functions/fnc_openTimerSetUI.sqf +++ b/addons/explosives/functions/fnc_openTimerSetUI.sqf @@ -23,16 +23,16 @@ sliderSetPosition [8845, 30]; GVAR(explosive) = _explosive; DFUNC(SetTimer) = { - [ - ACE_player, - getPosATL GVAR(explosive), - GVAR(explosive) getVariable QGVAR(Direction), - GVAR(explosive) getVariable QGVAR(class), - "Timer", - [floor sliderPosition 8845], - GVAR(explosive) - ] call FUNC(placeExplosive); - closeDialog 0; + [ + ACE_player, + getPosATL GVAR(explosive), + GVAR(explosive) getVariable QGVAR(Direction), + GVAR(explosive) getVariable QGVAR(class), + "Timer", + [floor sliderPosition 8845], + GVAR(explosive) + ] call FUNC(placeExplosive); + closeDialog 0; }; buttonSetAction [8860, QUOTE(call DFUNC(SetTimer);)]; diff --git a/addons/explosives/functions/fnc_placeExplosive.sqf b/addons/explosives/functions/fnc_placeExplosive.sqf index efd566611c..3ebaf229d9 100644 --- a/addons/explosives/functions/fnc_placeExplosive.sqf +++ b/addons/explosives/functions/fnc_placeExplosive.sqf @@ -16,7 +16,7 @@ * * Example: * _explosive = [player, player modelToWorld [0,0.5, 0.1], 134, - * "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive; + * "SatchelCharge_Remote_Mag", "Command", []] call ACE_Explosives_fnc_placeExplosive; * * Public: Yes */ @@ -24,25 +24,25 @@ private ["_ammo", "_explosive"]; EXPLODE_6_PVT(_this,_unit,_pos,_dir,_magazineClass,_triggerConfig,_triggerSpecificVars); if (count _this > 6) then { - deleteVehicle (_this select 6); + deleteVehicle (_this select 6); }; if (isNil "_triggerConfig") exitWith { - diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this]; - objNull + diag_log format ["ACE_Explosives: Error config not passed to PlaceExplosive: %1", _this]; + objNull }; _magazineTrigger = ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> _triggerConfig; _triggerConfig = ConfigFile >> "CfgACE_Triggers" >> _triggerConfig; if (isNil "_triggerConfig") exitWith { - diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this]; - objNull + diag_log format ["ACE_Explosives: Error config not found in PlaceExplosive: %1", _this]; + objNull }; _ammo = getText(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ammo"); if (isText(_magazineTrigger >> "ammo")) then { - _ammo = getText (_magazineTrigger >> "ammo"); + _ammo = getText (_magazineTrigger >> "ammo"); }; _triggerSpecificVars pushBack _triggerConfig; private ["_defuseHelper"]; @@ -58,6 +58,6 @@ _defuseHelper setPosATL (((getPosATL _defuseHelper) vectorAdd (_pos vectorDiff _ _explosive setPosATL _pos; if (isText(_triggerConfig >> "onPlace") && {[_unit,_explosive,_magazineClass,_triggerSpecificVars] - call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; + call compile (getText (_triggerConfig >> "onPlace"))}) exitWith {_explosive}; [[_explosive, _dir, getNumber (_magazineTrigger >> "pitch")], QFUNC(setPosition)] call EFUNC(common,execRemoteFnc); _explosive diff --git a/addons/explosives/functions/fnc_place_Approve.sqf b/addons/explosives/functions/fnc_place_Approve.sqf index d39b6bc340..dc94bf3731 100644 --- a/addons/explosives/functions/fnc_place_Approve.sqf +++ b/addons/explosives/functions/fnc_place_Approve.sqf @@ -16,8 +16,8 @@ */ #include "script_component.hpp" if (GVAR(pfeh_running)) then { - [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); - GVAR(pfeh_running) = false; + [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); + GVAR(pfeh_running) = false; }; private ["_mag", "_setup", "_player"]; _setup = GVAR(Setup); @@ -29,13 +29,13 @@ GVAR(placer) = objNull; _player = ACE_player; call EFUNC(interaction,hideMouseHint); if ((_setup getVariable [QGVAR(Class), ""]) == "") exitWith { - deleteVehicle _setup; + deleteVehicle _setup; }; _dir = (getDir _setup); if (_dir > 180) then { - _dir = _dir - 180; + _dir = _dir - 180; } else { - _dir = 180 + _dir; + _dir = 180 + _dir; }; _setup setVariable [QGVAR(Direction), _dir]; _player setVariable [QGVAR(PlantingExplosive), true]; diff --git a/addons/explosives/functions/fnc_place_Cancel.sqf b/addons/explosives/functions/fnc_place_Cancel.sqf index 3df4228c16..78d718e283 100644 --- a/addons/explosives/functions/fnc_place_Cancel.sqf +++ b/addons/explosives/functions/fnc_place_Cancel.sqf @@ -15,15 +15,15 @@ */ #include "script_component.hpp" if (GVAR(pfeh_running)) then { - [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); - GVAR(pfeh_running) = false; + [QGVAR(Placement),"OnEachFrame"] call CALLSTACK(BIS_fnc_removeStackedEventHandler); + GVAR(pfeh_running) = false; }; if (!isNull (GVAR(Setup))) then { - deleteVehicle GVAR(Setup); + deleteVehicle GVAR(Setup); }; GVAR(Setup) = objNull; if (isNil {GVAR(placer)}) then { - GVAR(placer) = objNull; + GVAR(placer) = objNull; }; [GVAR(placer), "ACE_Explosives", false] call EFUNC(Common,setForceWalkStatus); GVAR(placer) = objNull; diff --git a/addons/explosives/functions/fnc_removeFromSpeedDial.sqf b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf index c0a467e6f1..c67313966c 100644 --- a/addons/explosives/functions/fnc_removeFromSpeedDial.sqf +++ b/addons/explosives/functions/fnc_removeFromSpeedDial.sqf @@ -18,9 +18,9 @@ private "_speedDial"; _speedDial = ace_player getVariable [QGVAR(SpeedDial), []]; if (count _speedDial == 0) exitWith {}; { - if ((_x select 0) == (_this select 0)) exitWith { - _speedDial set [_foreachIndex, "x"]; - _speedDial = _speedDial - ["x"]; - ace_player setVariable [QGVAR(SpeedDial),_speedDial]; - }; + if ((_x select 0) == (_this select 0)) exitWith { + _speedDial set [_foreachIndex, "x"]; + _speedDial = _speedDial - ["x"]; + ace_player setVariable [QGVAR(SpeedDial),_speedDial]; + }; } foreach _speedDial; diff --git a/addons/explosives/functions/fnc_setPosition.sqf b/addons/explosives/functions/fnc_setPosition.sqf index 035d47a6c3..dcf2537776 100644 --- a/addons/explosives/functions/fnc_setPosition.sqf +++ b/addons/explosives/functions/fnc_setPosition.sqf @@ -19,5 +19,5 @@ EXPLODE_3_PVT(_this,_explosive,_direction,_pitch); _explosive setDir _direction; if (_pitch != 0) then { - [_explosive, _pitch, 0] call CALLSTACK(BIS_fnc_setPitchBank); + [_explosive, _pitch, 0] call CALLSTACK(BIS_fnc_setPitchBank); }; diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 7dd1e3ce60..ea3a086274 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -28,22 +28,22 @@ GVAR(Setup) setVariable [QGVAR(class), _class, true]; GVAR(TweakedAngle) = 180; [QGVAR(Placement),"OnEachFrame", { - private "_player"; - _player = ACE_player; - if (GVAR(placer) != _player) exitWith { - call FUNC(place_Cancel); - }; - GVAR(pfeh_running) = true; - _pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]); - GVAR(Setup) setPosATL _pos; - if (ACE_Modifier == 0) then { - GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player); - }; + private "_player"; + _player = ACE_player; + if (GVAR(placer) != _player) exitWith { + call FUNC(place_Cancel); + }; + GVAR(pfeh_running) = true; + _pos = (ASLtoATL eyePos _player) vectorAdd (positionCameraToWorld [0,0,1] vectorDiff positionCameraToWorld [0,0,0]); + GVAR(Setup) setPosATL _pos; + if (ACE_Modifier == 0) then { + GVAR(Setup) setDir (GVAR(TweakedAngle) + getDir _player); + }; }] call CALLSTACK(BIS_fnc_addStackedEventHandler); [localize "STR_ACE_Explosives_PlaceAction", localize "STR_ACE_Explosives_CancelAction", - localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint); + localize "STR_ACE_Explosives_ScrollAction"] call EFUNC(interaction,showMouseHint); _unit setVariable [QGVAR(Place), [_unit, "DefaultAction", - {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)]; + {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Approve);}] call EFUNC(common,AddActionEventHandler)]; _unit setVariable [QGVAR(Cancel), [_unit, "zoomtemp", - {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)]; + {GVAR(pfeh_running) AND !isNull (GVAR(Setup))}, {call FUNC(place_Cancel);}] call EFUNC(common,AddActionEventHandler)]; diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index 283fefede4..7eacdd33e1 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -19,44 +19,44 @@ EXPLODE_2_PVT(_this,_unit,_target); _target = attachedTo (_target); _fnc_DefuseTime = { - EXPLODE_2_PVT(_this,_specialist,_target); + EXPLODE_2_PVT(_this,_specialist,_target); - _defuseTime = 5; - if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then { - _defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime"); - }; - if (!_specialist && {GVAR(PunishNonSpecialists)}) then { - _defuseTime = _defuseTime * 1.5; - }; - _defuseTime + _defuseTime = 5; + if (isNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime")) then { + _defuseTime = getNumber(ConfigFile >> "CfgAmmo" >> typeOf (_target) >> "ACE_DefuseTime"); + }; + if (!_specialist && {GVAR(PunishNonSpecialists)}) then { + _defuseTime = _defuseTime * 1.5; + }; + _defuseTime }; _actionToPlay = "MedicOther"; if (STANCE _unit == "Prone") then { - _actionToPlay = "PutDown"; + _actionToPlay = "PutDown"; }; if (ACE_player != _unit) then { - // If the unit is a player, call the function on the player. - if (isPlayer _unit) then { - [[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc); - } else { - // TODO: use scheduled delay execution - [_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn { - (_this select 0) playActionNow _actionToPlay; - (_this select 0) disableAI "MOVE"; - (_this select 0) disableAI "TARGET"; - sleep (_this select 2); - [(_this select 0), (_this select 1)] call FUNC(defuseExplosive); - (_this select 0) enableAI "MOVE"; - (_this select 0) enableAI "TARGET"; - }; - }; + // If the unit is a player, call the function on the player. + if (isPlayer _unit) then { + [[_unit, _target], QFUNC(startDefuse), _unit] call EFUNC(common,execRemoteFnc); + } else { + // TODO: use scheduled delay execution + [_unit, _target, [[_unit] call EFUNC(Common,isEOD), _target] call _fnc_DefuseTime] spawn { + (_this select 0) playActionNow _actionToPlay; + (_this select 0) disableAI "MOVE"; + (_this select 0) disableAI "TARGET"; + sleep (_this select 2); + [(_this select 0), (_this select 1)] call FUNC(defuseExplosive); + (_this select 0) enableAI "MOVE"; + (_this select 0) enableAI "TARGET"; + }; + }; } else { - _unit playActionNow _actionToPlay; - private ["_defuseSeconds", "_isEOD"]; - _isEOD = [_unit] call EFUNC(Common,isEOD); - _defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime; - if (_isEOD || {!GVAR(RequireSpecialist)}) then { - [_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar); - }; + _unit playActionNow _actionToPlay; + private ["_defuseSeconds", "_isEOD"]; + _isEOD = [_unit] call EFUNC(Common,isEOD); + _defuseSeconds = [_isEOD, _target] call _fnc_DefuseTime; + if (_isEOD || {!GVAR(RequireSpecialist)}) then { + [_defuseSeconds, [_unit,_target], {(_this select 0) call FUNC(defuseExplosive)}, {}, (localize "STR_ACE_Explosives_DefusingExplosive")] call EFUNC(common,progressBar); + }; }; diff --git a/addons/explosives/functions/fnc_triggerType.sqf b/addons/explosives/functions/fnc_triggerType.sqf index 4dba9a8d8e..8ebcbf6699 100644 --- a/addons/explosives/functions/fnc_triggerType.sqf +++ b/addons/explosives/functions/fnc_triggerType.sqf @@ -20,6 +20,6 @@ _config = getArray (ConfigFile >> "CfgMagazines" >> (_this select 0) >> "ACE_Tri _count = count _config; for "_index" from 0 to (_count - 1) do { - _result set [_index, ConfigFile >> "CfgACE_Triggers" >> (_config select _index)]; + _result set [_index, ConfigFile >> "CfgACE_Triggers" >> (_config select _index)]; }; _result diff --git a/addons/explosives/script_component.hpp b/addons/explosives/script_component.hpp index fa8b2bac4d..60c7e88d06 100644 --- a/addons/explosives/script_component.hpp +++ b/addons/explosives/script_component.hpp @@ -2,11 +2,11 @@ #include "\z\ace\addons\main\script_mod.hpp" #ifdef DEBUG_ENABLED_EXPLOSIVES - #define DEBUG_MODE_FULL + #define DEBUG_MODE_FULL #endif #ifdef DEBUG_SETTINGS_EXPLOSIVES - #define DEBUG_SETTINGS DEBUG_SETTINGS_EXPLOSIVES + #define DEBUG_SETTINGS DEBUG_SETTINGS_EXPLOSIVES #endif #include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 78a8aede74..57ef190460 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,497 +1,497 @@ - - - Explosives - Sprengstoffe - Explosivos - Ładunki wybuchowe - Explosifs - Výbušniny - Esplosivi - Robbanóanyagok - Explosivos - Взрывчатка - - - Place >> - Platzieren >> - Colocar >> - Umieść >> - Placer >> - Položit >> - Piazza >> - Lerakás >> - Colocar >> - Установить >> - - - Detonate >> - Zünden >> - Detonar >> - Detonuj >> - Mise à feu >> - Odpálit >> - Detona >> - Robbantás >> - Detonar >> - Подрыв >> - - - Explosive code: %1 - Sprengstoffcode: %1 - Código del explosivo: %1 - Kod ładunku: %1 - Code explosif: %1 - Kód výbušniny: %1 - Codice dell'esplosivo : %1 - Robbanóanyag kódja: %1 - Código do explosivo: %1 - Взрывная код: %1 - - - Place - Platzieren - Colocar - Umieść - Placer - Položit - Piazza - Elhelyezés - Colocar - Положить - - - Cancel - Abbrechen - Cancelar - Anuluj - Annuler - Zrušit - Annulla - Mégsem - Cancelar - Отмена - - - + Modifier, rotates - + Modifikator, drehen - + Modificador, girar - + Modificateur, tourner - + Modificatore, rotazione - + Otočit - + Változtatás, forgatás - + modyfikator, obracanie - + Modificador, rotaciona - + Bращать - - - Turn On Thor III - Thor III aktivieren - Encender Thor III - Włącz Thor III - Allumer Thor III - Zapnout Thor III - Accendi Thor III - Thor III bekapcsolása - Ativar Thor III - Активировать Thor III - - - Turn Off Thor III - Thor III deaktivieren - Apagar Thor III - Wyłącz Thor III - Éteindre Thor III - Vypnout Thor III - Spegni Thor III - Thor III kikapcsolása - Desativar Thor III - Деактивировать Thor III - - - Cellphone - Mobiltelefon - Télefono móvil - Telefon komórkowy - Téléphone Portable - Telefon - Cellulare - Mobil - Celular - Сотовый телефон - - - Used to remotely trigger explosives - Wird benutzt um Sprengstoffe fernzuzünden - Usado para detonar remotamente explosivos - Używany do zdalnego detonowania ładunków wybuchowych - Utilisé pour déclencher des explosifs à distance - Používaný ke vzdálenému odpalování výbušnin - Usato per l'attivazione a distanza degli esplosivi - Robbanóanyagok távoli robbantásához - Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку - - - M57 Firing Device - M57 Zündvorrichtung - Dispositivo de detonación M57 - Zapalnik M57 - M57 Dispositif de mise à feu - M57 Odpalovací Zařízení - Detonatore M57 - M57 Detonátor - M57 Dispositivo de Detonação - Взрыватель M57 - - - Used to remotely trigger explosives - Wird benutzt um Sprengstoffe fernzuzünden - Usado para detonar remotamente explosivos - Używany do zdalnego detonowania ładunków wybuchowych - Utilisé pour déclencher des explosifs à distance - Použévané ke vzdálenému odpalování výbušnin - Usato per l'attivazione a distanza degli esplosivi - Robbanóanyagok távoli robbantásához - Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку - - - M26 Firing Device - M26 Zündvorrichtung - Dispositivo de detonación MK26 - Zapalnik M26 - M26 Dispositif de mise à feu - M26 Odpalovací Zařízení - Detonatore M26 - M26 Detonátor - M26 Dispositivo de Detonação - Взрыватель M26 - - - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - - - Defusal Kit - Entschärfungskit - Kit de desactivación - Zestaw do rozbrajania - Kit de désamorçage - Zneškodňovací sada - Kit E.O.D. - Hatástalanító felszerelés - Kit de desarme - Разминирование комплект - - - Allows defusing of explosives - Erlaubt die Entschärfung von Sprengstoffen - Permite desactivar explosivos - Umożliwia rozbrajanie ładunków wybuchowych - Permet de désamorçer des explosifs - Dovoluje zneškodňování výbušnin - Consente la disattivazione degli ordigni esplosivi - Robbanóanyagok hatástalanításához - Permite o desarme de explosivos - Allows defusing of explosives - - - Add to Speed Dial - Zur Schnellauswahl hinzufügen - Agregar a marcado rápido - Dodaj do szybkiego wybierania - Ajouter à la composition rapide - Přidat jako rychlou volbu - Aggiungi alla selezione rapida - Hozzáadás gyorshíváshoz - Adicionar à ligação rápida - Добавить в ускоренный набор - - - Clear - Löschen - Borrar - Usuń - Désamorçé - Čistý - Libera - Törlés - Limpar - Pассеиваться - - - Dial - Wählen - Marcar - Wybierz mumer - Composer - Vytočit - Composizione numero - Tárcsázás - Discar - Hабрать - - - Up - Hoch - Arriba - W górę - Haut - Nahoru - Sopra - Fel - Cima - Поднять - - - Down - Runter - Abajo - W dół - Bas - Dolu - Sotto - Le - Baixo - Опустить - - - Cancel - Abbrechen - Cancelar - Anuluj - Annuler - Zrušit - Annulla - Mégsem - Cancelar - Отмена - - - Detonate Menu - "Zünden"-Menü - Menú de detonación - Menu detonowania - Menu de mise à feu - Menu Detonace - Menù di detonazione - Robbantás menü - Menu de detonação - Меню Подрыв - - - Place Menu - "Platzieren"-Menü - Menú de colocación - Menu umieszczania - Menu Placement - Menu Umístění - Menù di collocamento - Lerakás menü - Menu de posicionamento - Меню Установить - - - Defuse - Entschärfen - Desactivar - Rozbrój - Désamorçer - Zneškodnit - Disinnesca - Hatástalanítás - Desarmar - Обезвредить - - - Defusing Explosive... - Entschärfe Sprengstoff... - Desactivando explosivo... - Rozbrajanie ładunku... - Désamorçage des explosifs... - Zneškodňuji Výbušninu... - Esposivo in fase di disattivazione... - Robbanóanyag hatástalaníása... - Desarmando Explosivo... - Обезвреживание... - - - Timer - Zeitzünder - Temporizador - Czasomierz - Retard - Časovač - Cronometro - Időzített - Timer - Временной - - - Time: %1m %2s - Zeit: %1m %2s - Tiempo: %1m %2s - Czas: %1m %2s - Temps : %1m %2s - Čas: %1m %2s - Tempo : %1m %2s - Idő: %1m %2s - Tempo: %1m %2s - Tемп: %1m %2c - - - Set Time - Zeit einstellen - Configurar tiempo - Ustaw czas - Régler retard - Nastavit Čas - Modifica il conto alla rovescia - Idő állítása - Configurar Tempo - Xронометр - - - Select a Trigger - Wähle einen Zünder - Seleccionar un disparador - Wybierz zapalnik - Sélectionner une mise à feu - Zvolit Detonátor - Seleziona un Attivatore - Detonátor kiválasztása - Selecionar um Gatilho - Выберите - - - Select - Wählen - Seleccionar - Wybierz - Sélectionner - Zvolit - Seleziona - Kiválasztás - Selecionar - Выбрать защелка - - - Pressure Plate - Płyta naciskowa - Placa de presión - Druckplatte - Plaque de pression - Nášlapná nástraha - Piastra a Pressione - Nyomólap - Placa de pressão - Давление - - - Tripwire - Linka naciągu - Cable trampa - Stolperdraht - Fil de butée - Nástražný drát - Filo a Inciampo - Botlódrót - Linha de tração - Натяжной - - - IR Sensor - Czujnik podczerwieni - Sensor IR - Infrarotsensor - Capteur IR - IR Značkovač - Sensore IR - IR szenzor - Sensor IV - ИК - - - No triggers available for %1 - Brak dostępnych zapalników dla %1 - No hay detonadores disponibles para %1 - Keine Auslöser vorhanden für %1 - Pas de mise à feu disponible pour %1 - Žádný detonátor k dispozici pro %1 - Nessun attivatore disponibile per %1 - Nincs detonátor a %1 - Nenhum gatilho disponível para %1 - Нет защелка доступны для %1 - - - IR Sensor (Side Attack) - Czujnik podczerwieni (wybuch na bok) - Sensor IR (ataque lateral) - Infrarotsensor (Seitenangriff) - Capteur IR (de flanc) - IR Značkovač (Výbuch stranou) - Sensore IR (Attacco laterale) - IR Sensor (Side Attack) - Sensor infravermelho (ataque lateral) - ИК (боковая атака) - - - Magnetic Influence Sensor (Bottom Attack) - Czujnik magnetyczny (wybuch w górę) - Sensor IM (ataque inferior) - Magnetfeldsensor (Bodenangriff) - Capteur Magnétique (par le bas) - Magnetický Senzor (Výbuch ze spoda) - Sensore Magnetico di Prossimità (Attacco inferiore) - Mágneses (Bottom Attack) - Influência magnética (ataque inferior) - Магнитный (дно атака) - - - No explosives on trigger. - Keine Sprengladungen auf diesem Auslöser. - Ningún explosivo en el detonador. - Pas d'explosif à mettre à feu. - Nessun esplosivo sul sensore. - Žádná výbušnina k odpálení. - Nincs robbanóanyag a detonátorhoz. - Brak ładunków na zapalnik. - Nenhum explosivo no gatilho. - Нет взрывчатки на курок. - - - Dead Man's Switch - Totmannschalter - Mise à feu par relâchement de pression - Spínač mrtvého muže - Czuwak - Detonador de hombre muerto - Dead Man's Switch - Кнопка мертвеца - - - Used to remotely trigger explosives when released. - Zündet Sprengladungen wenn losgelassen. - Déclenche la mise à feu d'un explosif lorsqu'il est libéré. - Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny - Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity. - Utilizado para detonar explosivos remotamente al soltarlo. - Robbanóanyagok távoli robbantásához - Используется для дистанционного подрыва, после смерти оператора. - - - Pick up - - + + + Explosives + Sprengstoffe + Explosivos + Ładunki wybuchowe + Explosifs + Výbušniny + Esplosivi + Robbanóanyagok + Explosivos + Взрывчатка + + + Place >> + Platzieren >> + Colocar >> + Umieść >> + Placer >> + Položit >> + Piazza >> + Lerakás >> + Colocar >> + Установить >> + + + Detonate >> + Zünden >> + Detonar >> + Detonuj >> + Mise à feu >> + Odpálit >> + Detona >> + Robbantás >> + Detonar >> + Подрыв >> + + + Explosive code: %1 + Sprengstoffcode: %1 + Código del explosivo: %1 + Kod ładunku: %1 + Code explosif: %1 + Kód výbušniny: %1 + Codice dell'esplosivo : %1 + Robbanóanyag kódja: %1 + Código do explosivo: %1 + Взрывная код: %1 + + + Place + Platzieren + Colocar + Umieść + Placer + Položit + Piazza + Elhelyezés + Colocar + Положить + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + + + + Modifier, rotates + + Modifikator, drehen + + Modificador, girar + + Modificateur, tourner + + Modificatore, rotazione + + Otočit + + Változtatás, forgatás + + modyfikator, obracanie + + Modificador, rotaciona + + Bращать + + + Turn On Thor III + Thor III aktivieren + Encender Thor III + Włącz Thor III + Allumer Thor III + Zapnout Thor III + Accendi Thor III + Thor III bekapcsolása + Ativar Thor III + Активировать Thor III + + + Turn Off Thor III + Thor III deaktivieren + Apagar Thor III + Wyłącz Thor III + Éteindre Thor III + Vypnout Thor III + Spegni Thor III + Thor III kikapcsolása + Desativar Thor III + Деактивировать Thor III + + + Cellphone + Mobiltelefon + Télefono móvil + Telefon komórkowy + Téléphone Portable + Telefon + Cellulare + Mobil + Celular + Сотовый телефон + + + Used to remotely trigger explosives + Wird benutzt um Sprengstoffe fernzuzünden + Usado para detonar remotamente explosivos + Używany do zdalnego detonowania ładunków wybuchowych + Utilisé pour déclencher des explosifs à distance + Používaný ke vzdálenému odpalování výbušnin + Usato per l'attivazione a distanza degli esplosivi + Robbanóanyagok távoli robbantásához + Usado para acionar explosivos remotamente + Используется для удаленного запуска взрывчатку + + + M57 Firing Device + M57 Zündvorrichtung + Dispositivo de detonación M57 + Zapalnik M57 + M57 Dispositif de mise à feu + M57 Odpalovací Zařízení + Detonatore M57 + M57 Detonátor + M57 Dispositivo de Detonação + Взрыватель M57 + + + Used to remotely trigger explosives + Wird benutzt um Sprengstoffe fernzuzünden + Usado para detonar remotamente explosivos + Używany do zdalnego detonowania ładunków wybuchowych + Utilisé pour déclencher des explosifs à distance + Použévané ke vzdálenému odpalování výbušnin + Usato per l'attivazione a distanza degli esplosivi + Robbanóanyagok távoli robbantásához + Usado para acionar explosivos remotamente + Используется для удаленного запуска взрывчатку + + + M26 Firing Device + M26 Zündvorrichtung + Dispositivo de detonación MK26 + Zapalnik M26 + M26 Dispositif de mise à feu + M26 Odpalovací Zařízení + Detonatore M26 + M26 Detonátor + M26 Dispositivo de Detonação + Взрыватель M26 + + + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + + + Defusal Kit + Entschärfungskit + Kit de desactivación + Zestaw do rozbrajania + Kit de désamorçage + Zneškodňovací sada + Kit E.O.D. + Hatástalanító felszerelés + Kit de desarme + Разминирование комплект + + + Allows defusing of explosives + Erlaubt die Entschärfung von Sprengstoffen + Permite desactivar explosivos + Umożliwia rozbrajanie ładunków wybuchowych + Permet de désamorçer des explosifs + Dovoluje zneškodňování výbušnin + Consente la disattivazione degli ordigni esplosivi + Robbanóanyagok hatástalanításához + Permite o desarme de explosivos + Allows defusing of explosives + + + Add to Speed Dial + Zur Schnellauswahl hinzufügen + Agregar a marcado rápido + Dodaj do szybkiego wybierania + Ajouter à la composition rapide + Přidat jako rychlou volbu + Aggiungi alla selezione rapida + Hozzáadás gyorshíváshoz + Adicionar à ligação rápida + Добавить в ускоренный набор + + + Clear + Löschen + Borrar + Usuń + Désamorçé + Čistý + Libera + Törlés + Limpar + Pассеиваться + + + Dial + Wählen + Marcar + Wybierz mumer + Composer + Vytočit + Composizione numero + Tárcsázás + Discar + Hабрать + + + Up + Hoch + Arriba + W górę + Haut + Nahoru + Sopra + Fel + Cima + Поднять + + + Down + Runter + Abajo + W dół + Bas + Dolu + Sotto + Le + Baixo + Опустить + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + + + Detonate Menu + "Zünden"-Menü + Menú de detonación + Menu detonowania + Menu de mise à feu + Menu Detonace + Menù di detonazione + Robbantás menü + Menu de detonação + Меню Подрыв + + + Place Menu + "Platzieren"-Menü + Menú de colocación + Menu umieszczania + Menu Placement + Menu Umístění + Menù di collocamento + Lerakás menü + Menu de posicionamento + Меню Установить + + + Defuse + Entschärfen + Desactivar + Rozbrój + Désamorçer + Zneškodnit + Disinnesca + Hatástalanítás + Desarmar + Обезвредить + + + Defusing Explosive... + Entschärfe Sprengstoff... + Desactivando explosivo... + Rozbrajanie ładunku... + Désamorçage des explosifs... + Zneškodňuji Výbušninu... + Esposivo in fase di disattivazione... + Robbanóanyag hatástalaníása... + Desarmando Explosivo... + Обезвреживание... + + + Timer + Zeitzünder + Temporizador + Czasomierz + Retard + Časovač + Cronometro + Időzített + Timer + Временной + + + Time: %1m %2s + Zeit: %1m %2s + Tiempo: %1m %2s + Czas: %1m %2s + Temps : %1m %2s + Čas: %1m %2s + Tempo : %1m %2s + Idő: %1m %2s + Tempo: %1m %2s + Tемп: %1m %2c + + + Set Time + Zeit einstellen + Configurar tiempo + Ustaw czas + Régler retard + Nastavit Čas + Modifica il conto alla rovescia + Idő állítása + Configurar Tempo + Xронометр + + + Select a Trigger + Wähle einen Zünder + Seleccionar un disparador + Wybierz zapalnik + Sélectionner une mise à feu + Zvolit Detonátor + Seleziona un Attivatore + Detonátor kiválasztása + Selecionar um Gatilho + Выберите + + + Select + Wählen + Seleccionar + Wybierz + Sélectionner + Zvolit + Seleziona + Kiválasztás + Selecionar + Выбрать защелка + + + Pressure Plate + Płyta naciskowa + Placa de presión + Druckplatte + Plaque de pression + Nášlapná nástraha + Piastra a Pressione + Nyomólap + Placa de pressão + Давление + + + Tripwire + Linka naciągu + Cable trampa + Stolperdraht + Fil de butée + Nástražný drát + Filo a Inciampo + Botlódrót + Linha de tração + Натяжной + + + IR Sensor + Czujnik podczerwieni + Sensor IR + Infrarotsensor + Capteur IR + IR Značkovač + Sensore IR + IR szenzor + Sensor IV + ИК + + + No triggers available for %1 + Brak dostępnych zapalników dla %1 + No hay detonadores disponibles para %1 + Keine Auslöser vorhanden für %1 + Pas de mise à feu disponible pour %1 + Žádný detonátor k dispozici pro %1 + Nessun attivatore disponibile per %1 + Nincs detonátor a %1 + Nenhum gatilho disponível para %1 + Нет защелка доступны для %1 + + + IR Sensor (Side Attack) + Czujnik podczerwieni (wybuch na bok) + Sensor IR (ataque lateral) + Infrarotsensor (Seitenangriff) + Capteur IR (de flanc) + IR Značkovač (Výbuch stranou) + Sensore IR (Attacco laterale) + IR Sensor (Side Attack) + Sensor infravermelho (ataque lateral) + ИК (боковая атака) + + + Magnetic Influence Sensor (Bottom Attack) + Czujnik magnetyczny (wybuch w górę) + Sensor IM (ataque inferior) + Magnetfeldsensor (Bodenangriff) + Capteur Magnétique (par le bas) + Magnetický Senzor (Výbuch ze spoda) + Sensore Magnetico di Prossimità (Attacco inferiore) + Mágneses (Bottom Attack) + Influência magnética (ataque inferior) + Магнитный (дно атака) + + + No explosives on trigger. + Keine Sprengladungen auf diesem Auslöser. + Ningún explosivo en el detonador. + Pas d'explosif à mettre à feu. + Nessun esplosivo sul sensore. + Žádná výbušnina k odpálení. + Nincs robbanóanyag a detonátorhoz. + Brak ładunków na zapalnik. + Nenhum explosivo no gatilho. + Нет взрывчатки на курок. + + + Dead Man's Switch + Totmannschalter + Mise à feu par relâchement de pression + Spínač mrtvého muže + Czuwak + Detonador de hombre muerto + Dead Man's Switch + Кнопка мертвеца + + + Used to remotely trigger explosives when released. + Zündet Sprengladungen wenn losgelassen. + Déclenche la mise à feu d'un explosif lorsqu'il est libéré. + Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny + Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity. + Utilizado para detonar explosivos remotamente al soltarlo. + Robbanóanyagok távoli robbantásához + Используется для дистанционного подрыва, после смерти оператора. + + + Pick up + + From 35129a7a41d28de171cbbc40c6d78f8a0870ad64 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Mon, 6 Apr 2015 17:37:18 -0300 Subject: [PATCH 40/57] Debug stuff for the velocity correction --- addons/fcs/functions/fnc_firedEH.sqf | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index 67c7e1d301..284210593b 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -45,10 +45,14 @@ _offset = 0; // Correct velocity for weapons that have initVelocity // @todo: Take into account negative initVelocities +systemChat format ["%1/%2", vectorMagnitude velocity _projectile, getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed")]; _velocityCorrection = (vectorMagnitude velocity _projectile) - getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); -[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, _velocityCorrection] call EFUNC(common,changeProjectileDirection); +[_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, -_velocityCorrection] call EFUNC(common,changeProjectileDirection); + +systemChat format ["%1/%2", vectorMagnitude velocity _projectile]; + // Air burst missile // handle locally only From aec9962121511a8f4a08c13c10c29fea84eb931f Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Mon, 6 Apr 2015 18:02:08 -0300 Subject: [PATCH 41/57] Fix changeProjectileDirection --- addons/common/functions/fnc_changeProjectileDirection.sqf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/common/functions/fnc_changeProjectileDirection.sqf b/addons/common/functions/fnc_changeProjectileDirection.sqf index 04154da9c1..85dce2f194 100644 --- a/addons/common/functions/fnc_changeProjectileDirection.sqf +++ b/addons/common/functions/fnc_changeProjectileDirection.sqf @@ -19,10 +19,11 @@ private ["_projectile", "_adjustDir", "_adjustUp", "_adjustSpeed", "_vdir", "_di _projectile = _this select 0; _adjustDir = _this select 1; _adjustUp = _this select 2; -_adjustSpeed = _this select 3; -if (isNil "_adjustSpeed") then { - _adjustSpeed = 0; +_adjustSpeed = if (count _this > 3) then { + _this select 3 +} else { + 0 }; ["CPD", [_fnc_scriptNameParent, _adjustDir, _adjustUp, _adjustSpeed], nil, false] call FUNC(log); From 09461d94ef7f75c852ad8b7ad57b411f32234689 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Mon, 6 Apr 2015 18:10:17 -0300 Subject: [PATCH 42/57] Rewritten changeProjectileDirection --- .../fnc_changeProjectileDirection.sqf | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/addons/common/functions/fnc_changeProjectileDirection.sqf b/addons/common/functions/fnc_changeProjectileDirection.sqf index 85dce2f194..2cb37650b8 100644 --- a/addons/common/functions/fnc_changeProjectileDirection.sqf +++ b/addons/common/functions/fnc_changeProjectileDirection.sqf @@ -29,31 +29,25 @@ _adjustSpeed = if (count _this > 3) then { ["CPD", [_fnc_scriptNameParent, _adjustDir, _adjustUp, _adjustSpeed], nil, false] call FUNC(log); // get old direction vector -_vdir = vectorDir _projectile; +_vdir = vectorNormalized velocity _projectile; // get azimuth and inclination and apply corrections _dir = (_vdir select 0) atan2 (_vdir select 1) + _adjustDir; -_up = sqrt ((_vdir select 1) ^ 2 + (_vdir select 0) ^ 2) atan2 - (_vdir select 2) + _adjustUp; +_up = asin (_vdir select 2) + _adjustUp; // get new direction vector (this is a unit vector) _vdir = [ - sin _dir * sin _up, - cos _dir * sin _up, - - cos _up + sin _dir * cos _up, + cos _dir * cos _up, + sin _up ]; // get best up vector -_l = sqrt ((_vdir select 0) ^ 2 + (_vdir select 1) ^ 2); if (_l == 0) then {diag_log text format ["[ACE] ERROR: %1, %2, %3, %4, %5, %6, %7", _projectile, _adjustDir, _adjustUp, vectorDir _projectile, _vdir, _dir, _up]}; -_r = -(_vdir select 2) / _l; - -_vup = [ - (_vdir select 0) * _r, - (_vdir select 1) * _r, - _l -]; +_vlat = vectorNormalized (_vdir vectorCrossProduct [0,0,1]); +_vup = _vlat vectorCrossProduct _vdir; // get new speed vector. Keep total speed, but change to new direction. Yay for vector commands. -_vel = _vdir vectorMultiply _adjustSpeed + vectorMagnitude velocity _projectile; +_vel = _vdir vectorMultiply (_adjustSpeed + vectorMagnitude velocity _projectile); // set projectile direction dir and up. Projectiles are long objects, especially with tracers, so it would look dumb otherwise. _projectile setVectorDirAndUp [_vdir, _vup]; From b20f3e5b81443bf2e14ee6f61d9889bea02c7082 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Mon, 6 Apr 2015 18:43:32 -0300 Subject: [PATCH 43/57] Fix for the fcs --- extensions/fcs/ace_fcs.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/extensions/fcs/ace_fcs.cpp b/extensions/fcs/ace_fcs.cpp index bf3b8e1290..6338dd8571 100644 --- a/extensions/fcs/ace_fcs.cpp +++ b/extensions/fcs/ace_fcs.cpp @@ -58,12 +58,13 @@ double traceBullet(double initSpeed, double airFriction, double angle, double an while (i < MAXITERATIONS) { lastPosX = posX; lastPosY = posY; - simulationStep = 0.1 - 0.049 * (posX / posTargetX); velMag = sqrt(pow(velX, 2) + pow(velY, 2)); + posX += velX * simulationStep * 0.5; + posY += velY * simulationStep * 0.5; velX += simulationStep * (velX * velMag * airFriction); - velY += simulationStep * (velY * velMag * airFriction - 9.81); - posX += velX * simulationStep; - posY += velY * simulationStep; + velY += simulationStep * (velY * velMag * airFriction - 9.80665); + posX += velX * simulationStep * 0.5; + posY += velY * simulationStep * 0.5; if (posX >= posTargetX) { break; } i++; } From 7fa8365d51d481213d7d726213563be48d576365 Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 14:50:22 -0700 Subject: [PATCH 44/57] Remove debug, new Release build of extension. --- ace_fcs.dll | Bin 32256 -> 779264 bytes addons/fcs/functions/fnc_firedEH.sqf | 3 --- 2 files changed, 3 deletions(-) diff --git a/ace_fcs.dll b/ace_fcs.dll index 7c222dc1d7cd97b28070e7e7fa45baafd34d66b6..189c3c0826ce75e1559ad934a4891813f27a6d47 100644 GIT binary patch literal 779264 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 z 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 literal 32256 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 diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index 284210593b..b993577a70 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -45,14 +45,11 @@ _offset = 0; // Correct velocity for weapons that have initVelocity // @todo: Take into account negative initVelocities -systemChat format ["%1/%2", vectorMagnitude velocity _projectile, getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed")]; _velocityCorrection = (vectorMagnitude velocity _projectile) - getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); [_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, -_velocityCorrection] call EFUNC(common,changeProjectileDirection); -systemChat format ["%1/%2", vectorMagnitude velocity _projectile]; - // Air burst missile // handle locally only From e0605f9e81b26840d01e284d8d254edb45fa06fb Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 14:57:07 -0700 Subject: [PATCH 45/57] Remove default hint for FCS but play sound, Resolves #317 --- addons/fcs/functions/fnc_keyUp.sqf | 17 +++++++++++++---- addons/fcs/functions/fnc_onForceUpdate.sqf | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/addons/fcs/functions/fnc_keyUp.sqf b/addons/fcs/functions/fnc_keyUp.sqf index f0b1f1b137..433053178b 100644 --- a/addons/fcs/functions/fnc_keyUp.sqf +++ b/addons/fcs/functions/fnc_keyUp.sqf @@ -12,7 +12,7 @@ #include "script_component.hpp" -private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_userChange"]; +private ["_vehicle", "_turret", "_turretConfig", "_distance", "_magazines", "_showHint", "_playSound"]; _vehicle = _this select 0; _turret = _this select 1; @@ -162,11 +162,20 @@ _FCSElevation = []; [_vehicle, format ["%1_%2", QGVAR(Elevation), _turret], _FCSElevation] call EFUNC(common,setVariablePublic); [_vehicle, format ["%1_%2", QGVAR(Azimuth), _turret], _FCSAzimuth] call EFUNC(common,setVariablePublic); -_userChange = true; +_showHint = false; if( (count _this) > 3) then { - _userChange = _this select 3; + _showHint = _this select 3; }; -if(_userChange) then { +_playSound = true; +if( (count _this) > 3) then { + _playSound = _this select 4; +}; + +if(_playSound) then { + playSound "ACE_Sound_Click"; +}; + +if(_showHint) then { [format ["%1: %2", localize "STR_ACE_FCS_ZeroedTo", _distance]] call EFUNC(common,displayTextStructured); }; \ No newline at end of file diff --git a/addons/fcs/functions/fnc_onForceUpdate.sqf b/addons/fcs/functions/fnc_onForceUpdate.sqf index c911fc38de..6f477fd3f6 100644 --- a/addons/fcs/functions/fnc_onForceUpdate.sqf +++ b/addons/fcs/functions/fnc_onForceUpdate.sqf @@ -4,4 +4,4 @@ if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) ex if !((!GVAR(enabled) && FUNC(canUseFCS)) || FUNC(canUseRangefinder)) exitWith {false}; [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyDown); -[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false] call FUNC(keyUp); \ No newline at end of file +[vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -1, false, false] call FUNC(keyUp); \ No newline at end of file From 27caff55644f24911420f9f96692be72b9a227d1 Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 18:36:39 -0700 Subject: [PATCH 46/57] Fixed: Add platform velocity to FCS calculations; resolves #361 --- addons/fcs/functions/fnc_firedEH.sqf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index b993577a70..698a9bef22 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -50,6 +50,12 @@ _velocityCorrection = (vectorMagnitude velocity _projectile) - [_projectile, (_vehicle getVariable format ["%1_%2", QGVAR(Azimuth), _turret]), _offset, -_velocityCorrection] call EFUNC(common,changeProjectileDirection); +// Remove the platform velocity +if( (vectorMagnitude velocity _vehicle) > 2) then { + _sumVelocity = (velocity _projectile) vectorDiff (velocity _vehicle); + _projectile setVelocity _sumVelocity; +}; + // Air burst missile // handle locally only From 34444ebb32fc4d58a22dbf7561141ae823734a5f Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 18:37:05 -0700 Subject: [PATCH 47/57] Fixed: github merge error fixed. --- addons/aircraft/Heli_Attack_01_base_F.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 731fb93d6b..817b1dacaa 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -863,9 +863,6 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { class Turrets: Turrets { class MainTurret: MainTurret { - directionStabilized = 1; - horizontallyStabilized = 1; - weapons[] = {"ACE_gatling_20mm_Comanche","missiles_DAGR","missiles_ASRAAM", "ACE_AIR_SAFETY"}; magazines[] = {"ACE_500Rnd_20mm_shells_Comanche","4Rnd_AAA_missiles","24Rnd_PG_missiles"}; @@ -880,7 +877,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { discretedistance[] = {100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000}; discretedistanceinitindex = 3; copilotHasFlares = 1; - + directionStabilized = 1; isCopilot = 1; showHMD = 1; CanEject = 1; @@ -910,6 +907,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { thermalMode[] = {0,1}; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; }; class Medium: Wide @@ -920,6 +918,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxFov = 0.093; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F"; }; class Narrow: Wide @@ -930,6 +929,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxFov = 0.029; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; }; @@ -941,6 +941,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { maxFov = 0.01; gunnerOpticsColor[] = {0,0,0,1}; directionStabilized = 1; + horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; }; @@ -958,8 +959,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { initFov = 1.1; minFov = 0.133; maxFov = 1.1; - visionMode[] = {"Normal","NVG","Ti"}; - thermalMode[] = {2,3}; + visionMode[] = {"Normal","NVG"}; gunnerOpticsModel = ""; gunnerOpticsEffect[] = {}; hideUnitInfo = 1; From a744896b20aeb0daf55a6a3034d057a0b37acc1c Mon Sep 17 00:00:00 2001 From: jaynus Date: Mon, 6 Apr 2015 18:51:08 -0700 Subject: [PATCH 48/57] Fixed: jaynus fucked up. --- addons/aircraft/CfgAmmo.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index 8fb765c947..393b9666e6 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -8,8 +8,6 @@ class CfgAmmo { indirectHit = 12; indirectHitRange = 2; //2; caliber = 1.4; - deflecting = 3; - fuseDistance = 3; tracerStartTime = 0.02; timeToLive = 40; explosive = 1.8; From 8d5bdd2c01d588356dcdcce9ba0bf40553b5784a Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Tue, 7 Apr 2015 09:04:17 +0200 Subject: [PATCH 49/57] Revert "fix shitty initSpeed definitions breaking SD mags, fix #182" This reverts commit 55f49eaa1c86177aa14c0ca9a8d4aebd715e4669. --- addons/magazines/CfgEventHandlers.hpp | 13 ------ addons/magazines/CfgMagazines.hpp | 4 -- addons/magazines/XEH_preInit.sqf | 7 ---- addons/magazines/config.cpp | 2 - .../fnc_forceMagazineMuzzleVelocity.sqf | 41 ------------------- .../magazines/functions/script_component.hpp | 1 - 6 files changed, 68 deletions(-) delete mode 100644 addons/magazines/CfgEventHandlers.hpp delete mode 100644 addons/magazines/XEH_preInit.sqf delete mode 100644 addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf delete mode 100644 addons/magazines/functions/script_component.hpp diff --git a/addons/magazines/CfgEventHandlers.hpp b/addons/magazines/CfgEventHandlers.hpp deleted file mode 100644 index b5577d09b7..0000000000 --- a/addons/magazines/CfgEventHandlers.hpp +++ /dev/null @@ -1,13 +0,0 @@ -class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_preInit)); - }; -}; - -class Extended_FiredBIS_EventHandlers { - class AllVehicles { - class ADDON { - firedBIS = QUOTE(_this call FUNC(forceMagazineMuzzleVelocity)); - }; - }; -}; diff --git a/addons/magazines/CfgMagazines.hpp b/addons/magazines/CfgMagazines.hpp index 1c0242bd6d..86cb6d9e1b 100644 --- a/addons/magazines/CfgMagazines.hpp +++ b/addons/magazines/CfgMagazines.hpp @@ -22,7 +22,6 @@ class CfgMagazines { descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_SDDescription"; picture = "\A3\weapons_f\data\ui\m_30stanag_caseless_green_CA.paa"; initSpeed = 320; - GVAR(forceMagazineMuzzleVelocity) = 1; }; class ACE_30Rnd_65x39_caseless_mag_AP: 30Rnd_65x39_caseless_mag { @@ -58,7 +57,6 @@ class CfgMagazines { displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_SDNameShort"; descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_SDDescription"; initSpeed = 320; - GVAR(forceMagazineMuzzleVelocity) = 1; }; class ACE_30Rnd_65x39_caseless_green_mag_AP: 30Rnd_65x39_caseless_green { @@ -90,7 +88,6 @@ class CfgMagazines { displayNameShort = "$STR_ACE_30Rnd_556x45_mag_SDNameShort"; descriptionShort = "$STR_ACE_30Rnd_556x45_mag_SDDescription"; initSpeed = 320; - GVAR(forceMagazineMuzzleVelocity) = 1; picture = "\A3\weapons_f\data\ui\m_30stanag_green_ca.paa"; }; @@ -130,7 +127,6 @@ class CfgMagazines { displayNameShort = "$STR_ACE_20Rnd_762x51_mag_SDNameShort"; descriptionShort = "$STR_ACE_20Rnd_762x51_mag_SDDescription"; initSpeed = 320; - GVAR(forceMagazineMuzzleVelocity) = 1; }; class ACE_20Rnd_762x51_Mag_AP: 20Rnd_762x51_Mag { diff --git a/addons/magazines/XEH_preInit.sqf b/addons/magazines/XEH_preInit.sqf deleted file mode 100644 index 8e611f370a..0000000000 --- a/addons/magazines/XEH_preInit.sqf +++ /dev/null @@ -1,7 +0,0 @@ -#include "script_component.hpp" - -ADDON = false; - -PREP(forceMagazineMuzzleVelocity); - -ADDON = true; diff --git a/addons/magazines/config.cpp b/addons/magazines/config.cpp index 58c1dfa467..c757d62f5c 100644 --- a/addons/magazines/config.cpp +++ b/addons/magazines/config.cpp @@ -12,8 +12,6 @@ class CfgPatches { }; }; -#include "CfgEventHandlers.hpp" - #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" #include "CfgVehicles.hpp" diff --git a/addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf b/addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf deleted file mode 100644 index 414dbb40e8..0000000000 --- a/addons/magazines/functions/fnc_forceMagazineMuzzleVelocity.sqf +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Author: commy2 - * - * DESCRIPTION. - * - * Arguments: - * firedBIS - * - * Return Value: - * None - */ - -#include "script_component.hpp" - -private ["_weapon", "_magazine", "_projectile"]; - -_weapon = _this select 1; -_magazine = _this select 5; -_projectile = _this select 6; - -if (getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(forceMagazineMuzzleVelocity)) != 1) exitWith { - //hint str (speed _projectile / 3.6); -}; - -private ["_initSpeedWeapon", "_initSpeedMagazine"]; - -_initSpeedWeapon = getNumber (configFile >> "CfgWeapons" >> _weapon >> "initSpeed"); -_initSpeedMagazine = getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); - -//systemChat format ["W: %1m/s, M: %2m/s", _initSpeedWeapon, _initSpeedMagazine]; - -// force magazine initSpeed - -private ["_credit", "_debit"]; - -_credit = vectorMagnitude velocity _projectile; -_debit = _credit + (_initSpeedMagazine - _initSpeedWeapon); - -_projectile setVelocity ((velocity _projectile) vectorMultiply (_debit / _credit)); - -//hint str (speed _projectile / 3.6); diff --git a/addons/magazines/functions/script_component.hpp b/addons/magazines/functions/script_component.hpp deleted file mode 100644 index 2849ae3632..0000000000 --- a/addons/magazines/functions/script_component.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\magazines\script_component.hpp" \ No newline at end of file From 9ce2e3881424931a860df60adad7c7303c5933b7 Mon Sep 17 00:00:00 2001 From: bux578 Date: Tue, 7 Apr 2015 09:27:26 +0200 Subject: [PATCH 50/57] removed language entry --- addons/common/stringtable.xml | 4 ---- addons/laserpointer/stringtable.xml | 1 - addons/winddeflection/stringtable.xml | 5 ----- 3 files changed, 10 deletions(-) diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index cbe9b1120d..bcd2b149aa 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -296,25 +296,21 @@ Nincs hang - Accept Requests Akceptuj prośby Aceptar Peticiones Accept Requests - Decline Requests Ignoruj prośby Rechazar Peticiones Decline Requests - Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Acepta Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. Rechazar Peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 1da46607d4..87b36618a6 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -17,7 +17,6 @@ - <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser <t color='#9cf953'>Utiliser : </t>laser on/off diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 409ebf7523..b52100046f 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -3,31 +3,26 @@ - Wind Information Wind Information Informacje o wietrze Información del viento - Direction: %1 Direction: %1 Kierunek: %1 Dirección: %1 - Speed: %1 m/s Speed: %1 m/s Prędkość: %1 Velocidad: %1 m/s - Weather Information Weather Information Informacje o pogodzie Información Meteorológica - Humidity: %1% Humidity: %1% Wilgotność: %1 Humedad: %1% From ad5aad60c72082275bcae8429e17cb4a4a20c02b Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 7 Apr 2015 13:54:33 +0200 Subject: [PATCH 51/57] fix: ambient brightness can return values greater 1 --- addons/common/functions/fnc_ambientBrightness.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_ambientBrightness.sqf b/addons/common/functions/fnc_ambientBrightness.sqf index f29ff9e8e5..172739247f 100644 --- a/addons/common/functions/fnc_ambientBrightness.sqf +++ b/addons/common/functions/fnc_ambientBrightness.sqf @@ -11,4 +11,4 @@ */ #include "script_component.hpp" -sunOrMoon * sunOrMoon * (1 - overcast * 0.25) + (moonIntensity/5 min 1) * (1 - overcast) +(sunOrMoon * sunOrMoon * (1 - overcast * 0.25) + (moonIntensity/5) * (1 - overcast)) min 1 From 0d126dc5621236a388c4b99c5ed634f9307f6b02 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 7 Apr 2015 14:44:34 +0200 Subject: [PATCH 52/57] function to return object's lights --- addons/common/XEH_preInit.sqf | 1 + .../fnc_getReflectorsWithSelections.sqf | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 addons/common/functions/fnc_getReflectorsWithSelections.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 6db323a9f4..d61dc8b351 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -189,6 +189,7 @@ PREP(getConfigGunner); PREP(getConfigCommander); PREP(getHitPoints); PREP(getHitPointsWithSelections); +PREP(getReflectorsWithSelections); PREP(getVehicleCrew); // turrets diff --git a/addons/common/functions/fnc_getReflectorsWithSelections.sqf b/addons/common/functions/fnc_getReflectorsWithSelections.sqf new file mode 100644 index 0000000000..6d47943155 --- /dev/null +++ b/addons/common/functions/fnc_getReflectorsWithSelections.sqf @@ -0,0 +1,45 @@ +/* + * Author: commy2 + * + * Returns all lighting hitpoints of any vehicle. + * Note: These are actual selections that are affected by setHit and getHit, not getHitPointDamage or setHitpointDamage. + * They behave like having an armor value of 0. + * + * Arguments: + * 0: A vehicle, not the classname (Object) + * + * Return Value: + * The light names and selections (Array) + */ +#include "script_component.hpp" + +private ["_vehicle", "_config", "_hitpoints", "_selections"]; + +_vehicle = _this select 0; + +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; + +_hitpoints = []; +_selections = []; + +// iterate through all parents +while {isClass _config} do { + private "_class"; + _class = _config >> "Reflectors"; + + for "_i" from 0 to (count _class - 1) do { + private ["_entry", "_selection"]; + + _entry = _class select _i; + _selection = getText (_entry >> "hitpoint"); + + if (!(_selection in _selections) && {!isNil {_vehicle getHit _selection}}) then { + _hitpoints pushBack configName _entry; + _selections pushBack _selection; + }; + }; + + _config = inheritsFrom _config; +}; + +[_hitPoints, _selections] From 5df25cf44d9967f0ccd9faa0ffd4345721610345 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 7 Apr 2015 15:06:27 +0200 Subject: [PATCH 53/57] function to return all turned on lights of any objects --- addons/common/XEH_preInit.sqf | 1 + .../functions/fnc_getTurnedOnLights.sqf | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 addons/common/functions/fnc_getTurnedOnLights.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index d61dc8b351..38c2b91287 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -73,6 +73,7 @@ PREP(getStringFromMissionSQM); PREP(getTargetAzimuthAndInclination); PREP(getTargetDistance); PREP(getTargetObject); +PREP(getTurnedOnLights); PREP(getTurretCommander); PREP(getTurretConfigPath); PREP(getTurretCopilot); diff --git a/addons/common/functions/fnc_getTurnedOnLights.sqf b/addons/common/functions/fnc_getTurnedOnLights.sqf new file mode 100644 index 0000000000..6f0dc5a9bb --- /dev/null +++ b/addons/common/functions/fnc_getTurnedOnLights.sqf @@ -0,0 +1,36 @@ +/* + * Author: commy2 + * + * Returns all turned on lights of any vehicle or streetlamp. + * + * Arguments: + * 0: A vehicle, not the classname (Object) + * + * Return Value: + * All burning lights (Array) + */ +#include "script_component.hpp" + +private "_vehicle"; + +_vehicle = _this select 0; + +if (!isLightOn _vehicle) exitWith {[]}; + +private ["_reflectorsWithSelections", "_lights", "_hitpoints"]; + +_reflectorsWithSelections = [_vehicle] call FUNC(getReflectorsWithSelections); + +_lights = _reflectorsWithSelections select 0; +_hitpoints = _reflectorsWithSelections select 1; + +private "_turnedOnLights"; +_turnedOnLights = []; +{ + if (_vehicle getHit _x <= 0.9) then { + _turnedOnLights pushBack (_lights select _forEachIndex); + }; + +} forEach _hitpoints; + +_turnedOnLights From deabbcd8401695a75c599df2abaea9b9488fac3f Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 7 Apr 2015 15:43:23 +0200 Subject: [PATCH 54/57] add function that returns config properties of a vehicles light --- addons/common/XEH_preInit.sqf | 1 + .../functions/fnc_getLightProperties.sqf | 70 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 addons/common/functions/fnc_getLightProperties.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 38c2b91287..be8325a42c 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -191,6 +191,7 @@ PREP(getConfigCommander); PREP(getHitPoints); PREP(getHitPointsWithSelections); PREP(getReflectorsWithSelections); +PREP(getLightProperties); PREP(getVehicleCrew); // turrets diff --git a/addons/common/functions/fnc_getLightProperties.sqf b/addons/common/functions/fnc_getLightProperties.sqf new file mode 100644 index 0000000000..3d00314aae --- /dev/null +++ b/addons/common/functions/fnc_getLightProperties.sqf @@ -0,0 +1,70 @@ +/* + * Author: commy2 + * Read properties of given vehicles light. + * + * Arguments: + * 0: Object with lights (Object) + * 1: Light classname (String) + * + * Return Value: + * Stuff from config (Array) + * + */ +#include "script_component.hpp" + +private ["_vehicle", "_light"]; + +_vehicle = _this select 0; +_light = _this select 1; + +private "_config"; +_config = configFile >> "CfgVehicles" >> typeOf _vehicle >> "Reflectors" >> _light; + +// world position and direction +private ["_position", "_direction"]; + +_position = _vehicle modelToWorld (_vehicle selectionPosition getText (_config >> "position")); +_direction = _vehicle modelToWorld (_vehicle selectionPosition getText (_config >> "direction")); + +_direction = _position vectorFromTo _direction; + +// Intensity, angles +private ["_intensity", "_innerAngle", "_outerAngle"]; + +_intensity = getNumber (_config >> "intensity"); +_innerAngle = getNumber (_config >> "innerAngle"); +_outerAngle = getNumber (_config >> "outerAngle"); + +[_intensity, _position, _direction, _innerAngle, _outerAngle] + +/* +class Reflectors +{ + class Light_1 + { + color[] = {1000,1000,1100}; + ambient[] = {10,10,11}; + intensity = 5; + size = 1; + innerAngle = 90; + outerAngle = 130; + coneFadeCoef = 2; + position = "Light_1_pos"; + direction = "Light_1_dir"; + hitpoint = "Light_1_hitpoint"; + selection = "Light_1_hide"; + useFlare = 1; + flareSize = 0.9; + flareMaxDistance = 85; + class Attenuation + { + start = 0; + constant = 0; + linear = 0; + quadratic = 0.9; + hardLimitStart = 40; + hardLimitEnd = 60; + }; + }; +}; +*/ From 98f7125171688ac7a0147b38a79fcd83e14986b6 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 7 Apr 2015 18:54:53 +0200 Subject: [PATCH 55/57] function to return light intensity recieved from another object --- addons/common/XEH_preInit.sqf | 1 + .../functions/fnc_getLightProperties.sqf | 13 +---- .../fnc_lightIntensityFromObject.sqf | 56 +++++++++++++++++++ 3 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 addons/common/functions/fnc_lightIntensityFromObject.sqf diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index be8325a42c..95a639b943 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -112,6 +112,7 @@ PREP(isModLoaded); PREP(isPlayer); PREP(isTurnedOut); PREP(letterToCode); +PREP(lightIntensityFromObject); PREP(loadPerson); PREP(loadPersonLocal); PREP(loadSettingsFromProfile); diff --git a/addons/common/functions/fnc_getLightProperties.sqf b/addons/common/functions/fnc_getLightProperties.sqf index 3d00314aae..ee1884ac1b 100644 --- a/addons/common/functions/fnc_getLightProperties.sqf +++ b/addons/common/functions/fnc_getLightProperties.sqf @@ -20,18 +20,11 @@ _light = _this select 1; private "_config"; _config = configFile >> "CfgVehicles" >> typeOf _vehicle >> "Reflectors" >> _light; -// world position and direction -private ["_position", "_direction"]; - -_position = _vehicle modelToWorld (_vehicle selectionPosition getText (_config >> "position")); -_direction = _vehicle modelToWorld (_vehicle selectionPosition getText (_config >> "direction")); - -_direction = _position vectorFromTo _direction; - -// Intensity, angles -private ["_intensity", "_innerAngle", "_outerAngle"]; +private ["_intensity", "_position", "_direction", "_innerAngle", "_outerAngle"]; _intensity = getNumber (_config >> "intensity"); +_position = getText (_config >> "position"); +_direction = getText (_config >> "direction"); _innerAngle = getNumber (_config >> "innerAngle"); _outerAngle = getNumber (_config >> "outerAngle"); diff --git a/addons/common/functions/fnc_lightIntensityFromObject.sqf b/addons/common/functions/fnc_lightIntensityFromObject.sqf new file mode 100644 index 0000000000..cf9e215403 --- /dev/null +++ b/addons/common/functions/fnc_lightIntensityFromObject.sqf @@ -0,0 +1,56 @@ +/* + * Author: commy2 + * Calculate light intensity object 1 recieves from object 2 + * + * Arguments: + * 0: Object that recieves light (Object) + * 1: Object that emits light (Object) + * + * Return Value: + * Brightest light level + * + */ +#include "script_component.hpp" + +private ["_unit", "_lightSource"]; + +_unit = _this select 0; +_lightSource = _this select 1; + +private "_unitPos"; +_unitPos = _unit modelToWorld (_unit selectionPosition "spine3"); + +private ["_lights", "_lightLevel"]; + +_lights = [_lightSource] call FUNC(getTurnedOnLights); + +_lightLevel = 0; + +{ + private ["_properties", "_intensity", "_innerAngle", "_outerAngle", "_position", "_direction", "_directionToUnit", "_distance", "_angle"]; + + _properties = [_lightSource, _x] call FUNC(getLightProperties); + + // @todo intensity affects range? + //_intensity = _properties select 0; + + _innerAngle = (_properties select 3) / 2; + _outerAngle = (_properties select 4) / 2; + + // get world position and direction + _position = _lightSource modelToWorld (_lightSource selectionPosition (_properties select 1)); + _direction = _lightSource modelToWorld (_lightSource selectionPosition (_properties select 2)); + + _direction = _position vectorFromTo _direction; + _directionToUnit = _position vectorFromTo _unitPos; + + _distance = _unitPos distance _position; + _angle = acos (_direction vectorDotProduct _directionToUnit); + + _lightLevel = _lightLevel max ((linearConversion [0, 30, _distance, 1, 0, true]) * (linearConversion [_innerAngle, _outerAngle, _angle, 1, 0, true])); + +//systemChat format ["%1 %2", (linearConversion [0, 30, _distance, 1, 0, true]), (linearConversion [_innerAngle, _outerAngle, _angle, 1, 0, true])]; + +} forEach _lights; + +_lightLevel From d34cfdb00367c893312a08c10cf6c75685621811 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 7 Apr 2015 19:38:19 +0200 Subject: [PATCH 56/57] fix: day laser when being captured --- addons/laserpointer/XEH_postInit.sqf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/laserpointer/XEH_postInit.sqf b/addons/laserpointer/XEH_postInit.sqf index 58c47e3de2..14e4c384d8 100644 --- a/addons/laserpointer/XEH_postInit.sqf +++ b/addons/laserpointer/XEH_postInit.sqf @@ -1,6 +1,9 @@ // by commy2 #include "script_component.hpp" +// fixes laser when being captured. Needed, because the selectionpsoition of the right hand is used +["SetHandcuffed", {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call EFUNC(common,addEventHandler); + if !(hasInterface) exitWith {}; GVAR(nearUnits) = []; From 18b51aa2b5feffc59a4ddf0c8ab862fa2f4b43f7 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 7 Apr 2015 12:49:00 -0500 Subject: [PATCH 57/57] Build script: possibly fixed cfgConvert problems --- .../pabstFrankensteinBuilder.py | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/tools/ace_build_tool/pabstFrankensteinBuilder.py b/tools/ace_build_tool/pabstFrankensteinBuilder.py index 43d67e187d..a0c57f2b3e 100644 --- a/tools/ace_build_tool/pabstFrankensteinBuilder.py +++ b/tools/ace_build_tool/pabstFrankensteinBuilder.py @@ -48,6 +48,7 @@ import hashlib import configparser import json import traceback +import time if sys.platform == "win32": import winreg @@ -538,8 +539,8 @@ See the make.cfg file for additional build options. input("Press Enter to continue...") print("Resuming build...") continue - else: - print("WARNING: Module is stored on work drive (" + work_drive + ").") + #else: + #print("WARNING: Module is stored on work drive (" + work_drive + ").") try: # Remove the old pbo, key, and log @@ -577,10 +578,28 @@ See the make.cfg file for additional build options. #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up: os.chdir(os.path.join(arma3tools_path, "CfgConvert")) shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup")) - print_green("\Pabst (double converting):" + "cfgConvertGUI.exe " + os.path.join(work_drive, prefix, module, "config.cpp")) + ret = subprocess.call(["cfgConvertGUI.exe", os.path.join(work_drive, prefix, module, "config.cpp")]) + if ret != 0: + print_error("cfgConvertGUI (bin) return code == " + str(ret)) + input("Press Enter to continue...") + + #PABST: Need micro sleeps because cfgConvertGUI can return before it's finished procressing + time.sleep(0.05) + ret = subprocess.call(["cfgConvertGUI.exe", os.path.join(work_drive, prefix, module, "config.bin")]) - + if ret != 0: + print_error("cfgConvertGUI (txt) return code == " + str(ret)) + input("Press Enter to continue...") + + time.sleep(0.05) + + #cmd = [rapifyTool, "-L", "-P", os.path.join(work_drive, prefix, module, "config.cpp")]; + #ret = subprocess.call(cmd) + #if ret != 0: + # print_error("rapifyTool return code == " + str(ret) + str(cmd)) + # input("Press Enter to continue...") + # Call pboProject os.chdir("P:\\") @@ -625,12 +644,12 @@ See the make.cfg file for additional build options. if not build_successful: print_error("pboProject return code == " + str(ret)) print_error("Module not successfully built/signed.") - #input("Press Enter to continue...") + input("Press Enter to continue...") print ("Resuming build...") continue #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp - print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp")) + #print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp")) os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) os.remove(os.path.join(work_drive, prefix, module, "config.bin")) os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))