From e6c7758d3f9a01cee2a8cb59be1d572d909d8921 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 01:57:24 -0500 Subject: [PATCH 001/276] Prototype - Show Mils on mk6 --- addons/mk6mortar/$PBOPREFIX$ | 1 + addons/mk6mortar/CfgEventHandlers.hpp | 10 +++ addons/mk6mortar/CfgMagazines.hpp | 3 + addons/mk6mortar/CfgVehicles.hpp | 21 +++++++ addons/mk6mortar/CfgWeapons.hpp | 3 + addons/mk6mortar/README.md | 10 +++ addons/mk6mortar/RscInGameUI.hpp | 34 ++++++++++ addons/mk6mortar/XEH_clientInit.sqf | 6 ++ addons/mk6mortar/XEH_preInit.sqf | 9 +++ addons/mk6mortar/config.cpp | 19 ++++++ .../mk6mortar/functions/fnc_handleFired.sqf | 29 +++++++++ .../fnc_handlePlayerVehicleChanged.sqf | 55 ++++++++++++++++ .../functions/fnc_turretDisplayLoaded.sqf | 62 +++++++++++++++++++ .../mk6mortar/functions/script_component.hpp | 1 + addons/mk6mortar/script_component.hpp | 12 ++++ addons/mk6mortar/stringtable.xml | 6 ++ 16 files changed, 281 insertions(+) create mode 100644 addons/mk6mortar/$PBOPREFIX$ create mode 100644 addons/mk6mortar/CfgEventHandlers.hpp create mode 100644 addons/mk6mortar/CfgMagazines.hpp create mode 100644 addons/mk6mortar/CfgVehicles.hpp create mode 100644 addons/mk6mortar/CfgWeapons.hpp create mode 100644 addons/mk6mortar/README.md create mode 100644 addons/mk6mortar/RscInGameUI.hpp create mode 100644 addons/mk6mortar/XEH_clientInit.sqf create mode 100644 addons/mk6mortar/XEH_preInit.sqf create mode 100644 addons/mk6mortar/config.cpp create mode 100644 addons/mk6mortar/functions/fnc_handleFired.sqf create mode 100644 addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf create mode 100644 addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf create mode 100644 addons/mk6mortar/functions/script_component.hpp create mode 100644 addons/mk6mortar/script_component.hpp create mode 100644 addons/mk6mortar/stringtable.xml diff --git a/addons/mk6mortar/$PBOPREFIX$ b/addons/mk6mortar/$PBOPREFIX$ new file mode 100644 index 00000000000..a21eaf95f09 --- /dev/null +++ b/addons/mk6mortar/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\Addons\mk6mortar \ No newline at end of file diff --git a/addons/mk6mortar/CfgEventHandlers.hpp b/addons/mk6mortar/CfgEventHandlers.hpp new file mode 100644 index 00000000000..3daad1425a2 --- /dev/null +++ b/addons/mk6mortar/CfgEventHandlers.hpp @@ -0,0 +1,10 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + }; +}; diff --git a/addons/mk6mortar/CfgMagazines.hpp b/addons/mk6mortar/CfgMagazines.hpp new file mode 100644 index 00000000000..39f8bdd7809 --- /dev/null +++ b/addons/mk6mortar/CfgMagazines.hpp @@ -0,0 +1,3 @@ +class CfgMagazines { + +}; diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp new file mode 100644 index 00000000000..83997770541 --- /dev/null +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -0,0 +1,21 @@ +class CfgVehicles { + class LandVehicle; + class StaticWeapon: LandVehicle { + class Turrets { + class MainTurret; + }; + }; + class StaticMortar: StaticWeapon { + class Turrets: Turrets { + class MainTurret: MainTurret { + }; + }; + }; + class Mortar_01_base_F: StaticMortar { + class Turrets: Turrets { + class MainTurret: MainTurret { + turretInfoType = "ACE_Mk6_RscWeaponRangeArtillery"; + }; + }; + }; +}; diff --git a/addons/mk6mortar/CfgWeapons.hpp b/addons/mk6mortar/CfgWeapons.hpp new file mode 100644 index 00000000000..9d03783519e --- /dev/null +++ b/addons/mk6mortar/CfgWeapons.hpp @@ -0,0 +1,3 @@ +class CfgWeapons { + +}; diff --git a/addons/mk6mortar/README.md b/addons/mk6mortar/README.md new file mode 100644 index 00000000000..84c7a6e9840 --- /dev/null +++ b/addons/mk6mortar/README.md @@ -0,0 +1,10 @@ +ace_mk6mortar +========== + +Tweaks the mk6 mortar from Arma3 + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](https://github.com/PabstMirror) diff --git a/addons/mk6mortar/RscInGameUI.hpp b/addons/mk6mortar/RscInGameUI.hpp new file mode 100644 index 00000000000..4082977a5c8 --- /dev/null +++ b/addons/mk6mortar/RscInGameUI.hpp @@ -0,0 +1,34 @@ +class RscControlsGroup; +class RscText; + +class RscInGameUI { + class RscWeaponRangeArtillery { + class CA_IGUI_elements_group: RscControlsGroup {}; + }; + class ACE_Mk6_RscWeaponRangeArtillery: RscWeaponRangeArtillery { + onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_Mk6_RscWeaponRangeArtillery',(_this select 0))]; _this call FUNC(turretDisplayLoaded);); + controls[] = {"ACE_MILS_GROUP", "CA_IGUI_elements_group","CA_RangeElements_group"}; + class ACE_MILS_GROUP: CA_IGUI_elements_group { + idc = 80170; + class controls { + class CA_Elev_MILS: RscText { + idc = 80175; + style = 1; + sizeEx = "0.038*SafezoneH"; + colorText[] = {0.706,0.0745,0.0196,1}; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "80.5"; + x = "36.8 * (0.01875 * SafezoneH)"; + y = "29.3 * (0.025 * SafezoneH)"; + w = "5.2 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; + }; + class CA_Elev_Need_MILS: CA_Elev_MILS { + idc = 80176; + y = "30.8 * (0.025 * SafezoneH)"; + }; + }; + }; + }; +}; diff --git a/addons/mk6mortar/XEH_clientInit.sqf b/addons/mk6mortar/XEH_clientInit.sqf new file mode 100644 index 00000000000..36b39e58c45 --- /dev/null +++ b/addons/mk6mortar/XEH_clientInit.sqf @@ -0,0 +1,6 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["playerVehicleChanged", {_this call FUNC(handlePlayerVehicleChanged);}] call EFUNC(common,addEventHandler); + diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf new file mode 100644 index 00000000000..ab2d8370d04 --- /dev/null +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -0,0 +1,9 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(handleFired); +PREP(handlePlayerVehicleChanged); +PREP(turretDisplayLoaded); + +ADDON = true; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp new file mode 100644 index 00000000000..f7635d1fb61 --- /dev/null +++ b/addons/mk6mortar/config.cpp @@ -0,0 +1,19 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction"}; + author[] = {"PabstMirror"}; + authorUrl = "https://github.com/acemod"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgMagazines.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" +#include "RscInGameUI.hpp" diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf new file mode 100644 index 00000000000..7f1e00453dc --- /dev/null +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -0,0 +1,29 @@ +/* + * Author: PabstMirror + * + * Arguments: + * 0: mortar - Object the event handler is assigned to + * 1: weapon - Fired weapon + * 2: muzzle - Muzzle that was used + * 3: mode - Current mode of the fired weapon + * 4: ammo - Ammo used + * 5: magazine - magazine name which was used + * 6: projectile - Object of the projectile that was shot + * + * Return Value: + * Nothing + * + * Example: + * [clientFiredBIS-XEH] call ace_grenades_fnc_throwGrenade + * + * Public: No + */ +#include "script_component.hpp" + +disableSerialization; + +PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + + + + diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf new file mode 100644 index 00000000000..a25bda21ff5 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -0,0 +1,55 @@ +/* + * Author: PabstMirror + * + * + * Arguments: + * + * Return Value: + * + * Example: + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_player,_newVehicle); + +if (isNull _newVehicle) exitWith {}; +if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; + +[{ + PARAMS_2(_args,_pfID); + EXPLODE_1_PVT(_args,_veh); + + if ((vehicle ACE_player) != _veh) then { + [_pfID] call CBA_fnc_removePerFrameHandler; + } else { + _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; + if (isNull _display) exitWith {systemChat "null";}; + + _hideRangefinder = false; + + _elevDeg = parseNumber ctrlText (_display displayCtrl 175); + if (true) then { + (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); + hintSilent str (_elevDeg * 6400 / 360); + } else { + (_display displayCtrl 80175) ctrlSetText str _elevDeg; + }; + + if (_hideRangefinder) then { + (_display displayCtrl 80176) ctrlSetText ""; + } else { + _elevDeg = parseNumber ctrlText (_display displayCtrl 176); + if (_elevDeg <= 0) then { + (_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176)); + } else { + if (true) then { + (_display displayCtrl 80176) ctrlSetText str round (_elevDeg * 6400 / 360); + } else { + (_display displayCtrl 80176) ctrlSetText str _elevDeg; + }; + }; + }; + }; +}, 0, [_newVehicle]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf new file mode 100644 index 00000000000..dc3dda40382 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -0,0 +1,62 @@ +/* + * Author: PabstMirror + * + * + * Arguments: + * + * Return Value: + * + * Example: + * + * Public: No + */ +#include "script_component.hpp" + +#define CTRL_CA_HEADING (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_Heading") +#define CTRL_CA_OPTICSPITCH (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSPITCH") +#define CTRL_CA_OPTICSZOOM (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSZOOM") +#define CTRL_CA_SOLUTION_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_SOLUTION_TEXT") +#define CTRL_CA_DISTANCE_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE_TEXT") +#define CTRL_CA_DISTANCE (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_DISTANCE") +#define CTRL_CA_TIME_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME_TEXT") +#define CTRL_CA_TIME (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_TIME") +#define CTRL_CA_ELEV_NEED_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED_TEXT") +#define CTRL_CA_RANGEELEMENTS_GROUP (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_RangeElements_group") + +#define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV") +#define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED") + + +disableSerialization; + +// PARAMS_1(_display); +_display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; +if (isNull _display) exitWith {}; + +_hideRangefinder = true; + +_fnc_hideControl = { + PARAMS_2(_path,_hideCtrl); + _idc = getNumber (_path >> "IDC"); + _pos = []; + if (_hideCtrl) then { + _pos = [-9,-9,0,0]; + } else { + { + if (isNumber (_path >> _x)) then { + _pos pushBack (getNumber (_path >> _x)); + } else { + _pos pushBack (call compile (getText (_path >> _x))); + }; + } forEach ["x", "y", "w", "h"]; + }; + (_display displayCtrl _idc) ctrlSetPosition _pos; + (_display displayCtrl _idc) ctrlCommit 0; +}; + +{ + [_x, _hideRangefinder] call _fnc_hideControl; +} forEach [CTRL_CA_HEADING, CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; + +[CTRL_CA_ELEV, true] call _fnc_hideControl; +[CTRL_CA_ELEV_NEED, true] call _fnc_hideControl; diff --git a/addons/mk6mortar/functions/script_component.hpp b/addons/mk6mortar/functions/script_component.hpp new file mode 100644 index 00000000000..9980d4fc88a --- /dev/null +++ b/addons/mk6mortar/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\mk6mortar\script_component.hpp" \ No newline at end of file diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp new file mode 100644 index 00000000000..adf4a569465 --- /dev/null +++ b/addons/mk6mortar/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT mk6mortar +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_MK6MORTAR + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MK6MORTAR + #define DEBUG_SETTINGS DEBUG_SETTINGS_MK6MORTAR +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml new file mode 100644 index 00000000000..0124da4007c --- /dev/null +++ b/addons/mk6mortar/stringtable.xml @@ -0,0 +1,6 @@ + + + + + + From dab4822876a8ef9e96a680447ed057d30fdb663f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 02:18:51 -0500 Subject: [PATCH 002/276] Settings / Module --- addons/inventory/config.cpp | 2 +- addons/mk6mortar/CfgVehicles.hpp | 26 +++++++++++++++++++ addons/mk6mortar/XEH_preInit.sqf | 1 + addons/mk6mortar/config.cpp | 19 ++++++++++++++ .../fnc_handlePlayerVehicleChanged.sqf | 9 +++---- addons/mk6mortar/functions/fnc_moduleInit.sqf | 25 ++++++++++++++++++ .../functions/fnc_turretDisplayLoaded.sqf | 5 ++-- addons/mk6mortar/stringtable.xml | 7 +++-- 8 files changed, 82 insertions(+), 12 deletions(-) create mode 100644 addons/mk6mortar/functions/fnc_moduleInit.sqf diff --git a/addons/inventory/config.cpp b/addons/inventory/config.cpp index c7b6649be64..83b4a081267 100644 --- a/addons/inventory/config.cpp +++ b/addons/inventory/config.cpp @@ -15,7 +15,7 @@ class CfgPatches { #include "RscDisplayInventory.hpp" class ACE_Settings { - class GVAR(inventoryDisplaySize) { + class GVAR(useMils) { value = 0; typeName = "SCALAR"; isClientSetable = 1; diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 83997770541..26552e32349 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -18,4 +18,30 @@ class CfgVehicles { }; }; }; + + class Logic; + class Module_F: Logic { + class ModuleDescription {}; + }; + class GVAR(module): Module_F { + author = "$STR_ACE_Common_ACETeam"; + category = "ACE"; + displayName = "MK6 Settings"; + function = QFUNC(moduleInit); + scope = 2; + isGlobal = 0; + // icon = QUOTE(PATHTOF(UI\Icon_.paa)); + functionPriority = 0; + class Arguments { + class noComputer { + displayName = "No Computer"; + description = "Removes Computer and Rangefinder"; + typeName = "BOOL"; + defaultValue = 1; + }; + }; + class ModuleDescription: ModuleDescription { + description = ""; + }; + }; }; diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index ab2d8370d04..d3fcaafa5ac 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -4,6 +4,7 @@ ADDON = false; PREP(handleFired); PREP(handlePlayerVehicleChanged); +PREP(moduleInit); PREP(turretDisplayLoaded); ADDON = true; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index f7635d1fb61..9d12dd8bf1e 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -17,3 +17,22 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "RscInGameUI.hpp" + +class ACE_Settings { + class GVAR(useMils) { + value = 1; + typeName = "BOOL"; + isClientSetable = 1; + displayName = "$STR_ACE_mk6mortar_useMils"; + }; + // class GVAR(airResistance) { + // value = 0; + // typeName = "BOOL"; + // isClientSetable = 0; + // }; + class GVAR(noComputer) { + value = 0; + typeName = "BOOL"; + isClientSetable = 0; + }; +}; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index a25bda21ff5..94ba2fda55f 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -27,24 +27,21 @@ if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; if (isNull _display) exitWith {systemChat "null";}; - _hideRangefinder = false; - _elevDeg = parseNumber ctrlText (_display displayCtrl 175); - if (true) then { + if (GVAR(useMils)) then { (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); - hintSilent str (_elevDeg * 6400 / 360); } else { (_display displayCtrl 80175) ctrlSetText str _elevDeg; }; - if (_hideRangefinder) then { + if (GVAR(noComputer)) then { (_display displayCtrl 80176) ctrlSetText ""; } else { _elevDeg = parseNumber ctrlText (_display displayCtrl 176); if (_elevDeg <= 0) then { (_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176)); } else { - if (true) then { + if (GVAR(useMils)) then { (_display displayCtrl 80176) ctrlSetText str round (_elevDeg * 6400 / 360); } else { (_display displayCtrl 80176) ctrlSetText str _elevDeg; diff --git a/addons/mk6mortar/functions/fnc_moduleInit.sqf b/addons/mk6mortar/functions/fnc_moduleInit.sqf new file mode 100644 index 00000000000..22f19da2d0b --- /dev/null +++ b/addons/mk6mortar/functions/fnc_moduleInit.sqf @@ -0,0 +1,25 @@ +/* + * Author: PabstMirror + * + * + * Arguments: + * 0: The Module Logic Object + * 1: synced objects + * 2: Activated + * + * Return Value: + * None + * + * Example: + * + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_logic,_syncedUnits,_activated); + +if (!_activated) exitWith {WARNING("Module - placed but not active");}; +if (!isServer) exitWith {}; + +[_logic, QGVAR(noComputer), "noComputer"] call EFUNC(common,readSettingFromModule); diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index dc3dda40382..345d87c2e9a 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -33,8 +33,6 @@ disableSerialization; _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; if (isNull _display) exitWith {}; -_hideRangefinder = true; - _fnc_hideControl = { PARAMS_2(_path,_hideCtrl); _idc = getNumber (_path >> "IDC"); @@ -55,8 +53,9 @@ _fnc_hideControl = { }; { - [_x, _hideRangefinder] call _fnc_hideControl; + [_x, GVAR(noComputer)] call _fnc_hideControl; } forEach [CTRL_CA_HEADING, CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; +//Always hide these, handled by the mil convertions in handlePlayerVehChanged [CTRL_CA_ELEV, true] call _fnc_hideControl; [CTRL_CA_ELEV_NEED, true] call _fnc_hideControl; diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index 0124da4007c..d105660bcdb 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -1,6 +1,9 @@  - + + + Mk6 Mortar: Show Angle in MILS + - + \ No newline at end of file From 518f2077fe14b3810631537137d4dd2e55a4694f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 02:27:13 -0500 Subject: [PATCH 003/276] Disable ArtyComputer --- .../mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index 94ba2fda55f..c59a1d66a86 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -24,6 +24,11 @@ if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; if ((vehicle ACE_player) != _veh) then { [_pfID] call CBA_fnc_removePerFrameHandler; } else { + if (shownArtilleryComputer && GVAR(noComputer)) then { + //Don't like this solution + closeDialog 0; + [parseText "Computer Disabled"] call EFUNC(common,displayTextStructured); + }; _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; if (isNull _display) exitWith {systemChat "null";}; From 1726b787f79c46931a6d4bd60b947dabb7148d4e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 03:02:24 -0500 Subject: [PATCH 004/276] AirRestitance/Wind Effects --- .../mk6mortar/functions/fnc_handleFired.sqf | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 7f1e00453dc..6fd9caa1a57 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -14,7 +14,7 @@ * Nothing * * Example: - * [clientFiredBIS-XEH] call ace_grenades_fnc_throwGrenade + * [clientFiredBIS-XEH] call ace_ * * Public: No */ @@ -24,6 +24,38 @@ disableSerialization; PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +// if (_bullet isKindOf "BulletBase") then { +[{ + private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"]; + PARAMS_2(_args,_pfID); + EXPLODE_3_PVT(_args,_shell,_airFriction,_time); + if (isNull _shell || {!alive _shell}) exitwith { + [_pfID] call cba_fnc_removePerFrameHandler; + }; + _deltaT = time - _time; + _args set[2, time]; + + _bulletVelocity = velocity _shell; + _bulletSpeed = vectorMagnitude _bulletVelocity; + + if (vectorMagnitude ACE_wind > 0) then { + _trueVelocity = _bulletVelocity vectorDiff ACE_wind; + _trueSpeed = vectorMagnitude _trueVelocity; + + // _dragRef = _deltaT * _airFriction * _bulletSpeed * _bulletSpeed; + // _accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef); + // _bulletVelocity = _bulletVelocity vectorDiff _accelRef; + + _drag = _deltaT * _airFriction * _trueSpeed; + _accel = _trueVelocity vectorMultiply (_drag); + + _bulletVelocity = _bulletVelocity vectorAdd _accel; + }; + _shell setVelocity _bulletVelocity; + // TODO expand with advanced ballistics functionality. + +}, 0, [_projectile, -0.0001, time]] call CBA_fnc_addPerFrameHandler; +// }; From e71378f9b3be2626bb7ea462340e45a7490c7636 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 12:40:48 -0500 Subject: [PATCH 005/276] AirResit Module Setting / Charge Display ctrl --- addons/mk6mortar/CfgVehicles.hpp | 12 ++++++--- addons/mk6mortar/UI/ui_charges.paa | Bin 0 -> 22016 bytes addons/mk6mortar/config.cpp | 12 ++++----- .../mk6mortar/functions/fnc_handleFired.sqf | 6 +++++ .../fnc_handlePlayerVehicleChanged.sqf | 25 ++++++++++++++---- addons/mk6mortar/functions/fnc_moduleInit.sqf | 3 ++- .../functions/fnc_turretDisplayLoaded.sqf | 2 +- 7 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 addons/mk6mortar/UI/ui_charges.paa diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 26552e32349..0c6b540cdc5 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -33,9 +33,15 @@ class CfgVehicles { // icon = QUOTE(PATHTOF(UI\Icon_.paa)); functionPriority = 0; class Arguments { - class noComputer { - displayName = "No Computer"; - description = "Removes Computer and Rangefinder"; + class disableComputerRangefinder { + displayName = "Remove MK6 Computer/Rangefinder"; + description = "Removes Computer and Rangefinder (these should be removed if you enable air resistance)"; + typeName = "BOOL"; + defaultValue = 1; + }; + class airResistanceEnabled { + displayName = "Air Resitance"; + description = "For Player Shots, Model Air Restiance and Wind Effects"; typeName = "BOOL"; defaultValue = 1; }; diff --git a/addons/mk6mortar/UI/ui_charges.paa b/addons/mk6mortar/UI/ui_charges.paa new file mode 100644 index 0000000000000000000000000000000000000000..7041c654e0465d059d89ec5854bdd42b1bbf73ce GIT binary patch literal 22016 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 EA0g|``Tzg` literal 0 HcmV?d00001 diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index 9d12dd8bf1e..a902354777f 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -25,12 +25,12 @@ class ACE_Settings { isClientSetable = 1; displayName = "$STR_ACE_mk6mortar_useMils"; }; - // class GVAR(airResistance) { - // value = 0; - // typeName = "BOOL"; - // isClientSetable = 0; - // }; - class GVAR(noComputer) { + class GVAR(airResistanceEnabled) { + value = 0; + typeName = "BOOL"; + isClientSetable = 0; + }; + class GVAR(disableComputerRangefinder) { value = 0; typeName = "BOOL"; isClientSetable = 0; diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 6fd9caa1a57..41929110d76 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -24,6 +24,12 @@ disableSerialization; PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); +if (!GVAR(airResistanceEnabled)) exitWith {}; + +if (_unit distance ACE_player > 3000) exitWith {false}; // Large enough distance to not simulate any wind deflection. +if (!GVAR(EnableForAI) && !([_unit] call EFUNC(common,isPlayer))) exitWith {false}; + + // if (_bullet isKindOf "BulletBase") then { [{ private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"]; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index c59a1d66a86..e573e74f6a3 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -17,15 +17,30 @@ PARAMS_2(_player,_newVehicle); if (isNull _newVehicle) exitWith {}; if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; + + +_chargeText = (findDisplay 46) ctrlCreate ["RscStructuredText", 80085]; + +_xPos = (profilenamespace getvariable ["IGUI_GRID_WEAPON_X", ((safezoneX + safezoneW) - (12.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * (((safezoneW / safezoneH) min 1.2) / 40))]); +_yPos = 2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getvariable ["IGUI_GRID_WEAPON_Y", (safezoneY + 0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))]); +_wPos = 10 * (((safezoneW / safezoneH) min 1.2) / 40); +_hPos = 1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25); + +_chargeText ctrlSetPosition [_xPos, _yPos, _wPos, _hPos]; +_chargeText ctrlCommit 0; + [{ PARAMS_2(_args,_pfID); - EXPLODE_1_PVT(_args,_veh); + EXPLODE_2_PVT(_args,_veh,_chargeText); if ((vehicle ACE_player) != _veh) then { [_pfID] call CBA_fnc_removePerFrameHandler; + ctrlDelete _chargeText; } else { - if (shownArtilleryComputer && GVAR(noComputer)) then { - //Don't like this solution + _text = format ["%1: %2 ", "Charge", 1, QUOTE(PATHTOF(UI\ui_charges.paa))]; + _chargeText ctrlSetStructuredText parseText _text; + if (shownArtilleryComputer && GVAR(disableComputerRangefinder)) then { + //Don't like this solution, but it works closeDialog 0; [parseText "Computer Disabled"] call EFUNC(common,displayTextStructured); }; @@ -39,7 +54,7 @@ if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; (_display displayCtrl 80175) ctrlSetText str _elevDeg; }; - if (GVAR(noComputer)) then { + if (GVAR(disableComputerRangefinder)) then { (_display displayCtrl 80176) ctrlSetText ""; } else { _elevDeg = parseNumber ctrlText (_display displayCtrl 176); @@ -54,4 +69,4 @@ if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; }; }; }; -}, 0, [_newVehicle]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file +}, 0, [_newVehicle, _chargeText]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_moduleInit.sqf b/addons/mk6mortar/functions/fnc_moduleInit.sqf index 22f19da2d0b..81cf39a2431 100644 --- a/addons/mk6mortar/functions/fnc_moduleInit.sqf +++ b/addons/mk6mortar/functions/fnc_moduleInit.sqf @@ -22,4 +22,5 @@ PARAMS_3(_logic,_syncedUnits,_activated); if (!_activated) exitWith {WARNING("Module - placed but not active");}; if (!isServer) exitWith {}; -[_logic, QGVAR(noComputer), "noComputer"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(disableComputerRangefinder), "disableComputerRangefinder"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(airResistanceEnabled), "airResistanceEnabled"] call EFUNC(common,readSettingFromModule); diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index 345d87c2e9a..f47478133a2 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -53,7 +53,7 @@ _fnc_hideControl = { }; { - [_x, GVAR(noComputer)] call _fnc_hideControl; + [_x, GVAR(disableComputerRangefinder)] call _fnc_hideControl; } forEach [CTRL_CA_HEADING, CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; //Always hide these, handled by the mil convertions in handlePlayerVehChanged From 0281897a3db12aa8867ef2ace37da767c13677c5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 14:34:39 -0500 Subject: [PATCH 006/276] Show Charge - Cleanup Settings --- addons/mk6mortar/CfgVehicles.hpp | 18 ++++++---- addons/mk6mortar/RscInGameUI.hpp | 24 ++++++++++--- addons/mk6mortar/config.cpp | 11 ++++-- .../fnc_handlePlayerVehicleChanged.sqf | 35 +++++++++++++++---- addons/mk6mortar/functions/fnc_moduleInit.sqf | 3 +- .../functions/fnc_turretDisplayLoaded.sqf | 9 +++-- 6 files changed, 77 insertions(+), 23 deletions(-) diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 0c6b540cdc5..9cfb17d3646 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -33,18 +33,24 @@ class CfgVehicles { // icon = QUOTE(PATHTOF(UI\Icon_.paa)); functionPriority = 0; class Arguments { - class disableComputerRangefinder { - displayName = "Remove MK6 Computer/Rangefinder"; - description = "Removes Computer and Rangefinder (these should be removed if you enable air resistance)"; - typeName = "BOOL"; - defaultValue = 1; - }; class airResistanceEnabled { displayName = "Air Resitance"; description = "For Player Shots, Model Air Restiance and Wind Effects"; typeName = "BOOL"; defaultValue = 1; }; + class allowComputerRangefinder { + displayName = "Allow MK6 Computer/Rangefinder"; + description = "Show the Computer and Rangefinder (these should be removed if you enable air resistance)"; + typeName = "BOOL"; + defaultValue = 0; + }; + class allowCompass { + displayName = "Allow MK6 Compass"; + description = "Show the MK6 Digital Compass"; + typeName = "BOOL"; + defaultValue = 1; + }; }; class ModuleDescription: ModuleDescription { description = ""; diff --git a/addons/mk6mortar/RscInGameUI.hpp b/addons/mk6mortar/RscInGameUI.hpp index 4082977a5c8..8de754beddf 100644 --- a/addons/mk6mortar/RscInGameUI.hpp +++ b/addons/mk6mortar/RscInGameUI.hpp @@ -11,6 +11,20 @@ class RscInGameUI { class ACE_MILS_GROUP: CA_IGUI_elements_group { idc = 80170; class controls { + class CA_Heading_MILS: RscText + { + idc = 80156; + style = 0; + colorText[] = {0.706,0.0745,0.0196,1}; + sizeEx = "0.028*SafezoneH"; + shadow = 0; + font = "EtelkaMonospacePro"; + text = "015"; + x = "25.3 * (0.01875 * SafezoneH)"; + y = "6.3 * (0.025 * SafezoneH)"; + w = "2.2 * (0.01875 * SafezoneH)"; + h = "1 * (0.025 * SafezoneH)"; + }; class CA_Elev_MILS: RscText { idc = 80175; style = 1; @@ -19,14 +33,14 @@ class RscInGameUI { shadow = 0; font = "EtelkaMonospacePro"; text = "80.5"; - x = "36.8 * (0.01875 * SafezoneH)"; - y = "29.3 * (0.025 * SafezoneH)"; - w = "5.2 * (0.01875 * SafezoneH)"; - h = "1.2 * (0.025 * SafezoneH)"; + x = "36.8 * (0.01875 * SafezoneH)"; + y = "29.3 * (0.025 * SafezoneH)"; + w = "5.2 * (0.01875 * SafezoneH)"; + h = "1.2 * (0.025 * SafezoneH)"; }; class CA_Elev_Need_MILS: CA_Elev_MILS { idc = 80176; - y = "30.8 * (0.025 * SafezoneH)"; + y = "30.8 * (0.025 * SafezoneH)"; }; }; }; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index a902354777f..e21fb1e6f98 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -25,13 +25,20 @@ class ACE_Settings { isClientSetable = 1; displayName = "$STR_ACE_mk6mortar_useMils"; }; + + //These settings effect gameplay difficutly: defaults will leave the mortar the same as vanilla class GVAR(airResistanceEnabled) { value = 0; typeName = "BOOL"; isClientSetable = 0; }; - class GVAR(disableComputerRangefinder) { - value = 0; + class GVAR(allowComputerRangefinder) { + value = 1; + typeName = "BOOL"; + isClientSetable = 0; + }; + class GVAR(allowCompass) { + value = 1; typeName = "BOOL"; isClientSetable = 0; }; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index e573e74f6a3..73f487fa624 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -29,24 +29,34 @@ _hPos = 1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25); _chargeText ctrlSetPosition [_xPos, _yPos, _wPos, _hPos]; _chargeText ctrlCommit 0; +_tubeWeaponName = (weapons _newVehicle) select 0; +_fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes"); + [{ PARAMS_2(_args,_pfID); - EXPLODE_2_PVT(_args,_veh,_chargeText); + EXPLODE_3_PVT(_args,_mortarVeh,_chargeText,_fireModes); - if ((vehicle ACE_player) != _veh) then { + if ((vehicle ACE_player) != _mortarVeh) then { [_pfID] call CBA_fnc_removePerFrameHandler; ctrlDelete _chargeText; } else { - _text = format ["%1: %2 ", "Charge", 1, QUOTE(PATHTOF(UI\ui_charges.paa))]; + + //Compute: 'charge' from weaponstate + _currentFireMode = (weaponState [_mortarVeh, [0]]) select 2; + _currentChargeMode = _fireModes find _currentFireMode; + + _text = format ["%1: %2 ", "Charge", _currentChargeMode, QUOTE(PATHTOF(UI\ui_charges.paa))]; _chargeText ctrlSetStructuredText parseText _text; - if (shownArtilleryComputer && GVAR(disableComputerRangefinder)) then { + if (shownArtilleryComputer && {!GVAR(allowComputerRangefinder)}) then { //Don't like this solution, but it works closeDialog 0; [parseText "Computer Disabled"] call EFUNC(common,displayTextStructured); }; + _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; if (isNull _display) exitWith {systemChat "null";}; + //Update CurrentElevation Display: _elevDeg = parseNumber ctrlText (_display displayCtrl 175); if (GVAR(useMils)) then { (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); @@ -54,7 +64,8 @@ _chargeText ctrlCommit 0; (_display displayCtrl 80175) ctrlSetText str _elevDeg; }; - if (GVAR(disableComputerRangefinder)) then { + //Update ElevationNeeded Display: + if (!GVAR(allowComputerRangefinder)) then { (_display displayCtrl 80176) ctrlSetText ""; } else { _elevDeg = parseNumber ctrlText (_display displayCtrl 176); @@ -68,5 +79,17 @@ _chargeText ctrlCommit 0; }; }; }; + + //Update Heading Display: + if (!GVAR(allowCompass)) then { + (_display displayCtrl 80156) ctrlSetText ""; + } else { + _elevDeg = parseNumber ctrlText (_display displayCtrl 156); + if (GVAR(useMils)) then { + (_display displayCtrl 80156) ctrlSetText str round (_elevDeg * 6400 / 360); + } else { + (_display displayCtrl 80156) ctrlSetText str _elevDeg; + }; + }; }; -}, 0, [_newVehicle, _chargeText]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file +}, 0, [_newVehicle, _chargeText,_fireModes]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_moduleInit.sqf b/addons/mk6mortar/functions/fnc_moduleInit.sqf index 81cf39a2431..e760e443a22 100644 --- a/addons/mk6mortar/functions/fnc_moduleInit.sqf +++ b/addons/mk6mortar/functions/fnc_moduleInit.sqf @@ -22,5 +22,6 @@ PARAMS_3(_logic,_syncedUnits,_activated); if (!_activated) exitWith {WARNING("Module - placed but not active");}; if (!isServer) exitWith {}; -[_logic, QGVAR(disableComputerRangefinder), "disableComputerRangefinder"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(airResistanceEnabled), "airResistanceEnabled"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(allowComputerRangefinder), "allowComputerRangefinder"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(allowCompass), "allowCompass"] call EFUNC(common,readSettingFromModule); diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index f47478133a2..6a316743f14 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -12,7 +12,7 @@ */ #include "script_component.hpp" -#define CTRL_CA_HEADING (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_Heading") + #define CTRL_CA_OPTICSPITCH (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSPITCH") #define CTRL_CA_OPTICSZOOM (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSZOOM") #define CTRL_CA_SOLUTION_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_SOLUTION_TEXT") @@ -23,6 +23,7 @@ #define CTRL_CA_ELEV_NEED_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED_TEXT") #define CTRL_CA_RANGEELEMENTS_GROUP (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_RangeElements_group") +#define CTRL_CA_HEADING (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_Heading") #define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV") #define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED") @@ -54,8 +55,10 @@ _fnc_hideControl = { { [_x, GVAR(disableComputerRangefinder)] call _fnc_hideControl; -} forEach [CTRL_CA_HEADING, CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; +} forEach [CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; -//Always hide these, handled by the mil convertions in handlePlayerVehChanged +//Always hide these, handled by the mil convertions PFEH in handlePlayerVehChanged +[CTRL_CA_HEADING, true] call _fnc_hideControl; [CTRL_CA_ELEV, true] call _fnc_hideControl; [CTRL_CA_ELEV_NEED, true] call _fnc_hideControl; + From 34a86e0db3d688f0f3b3cc235a9b89f78710e2e5 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 14:48:26 -0500 Subject: [PATCH 007/276] Fix Heading Mils --- addons/mk6mortar/CfgVehicles.hpp | 2 +- addons/mk6mortar/RscInGameUI.hpp | 9 ++++----- .../functions/fnc_handlePlayerVehicleChanged.sqf | 6 +++--- addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 9cfb17d3646..233a8be2055 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -40,7 +40,7 @@ class CfgVehicles { defaultValue = 1; }; class allowComputerRangefinder { - displayName = "Allow MK6 Computer/Rangefinder"; + displayName = "Allow MK6 Computer"; description = "Show the Computer and Rangefinder (these should be removed if you enable air resistance)"; typeName = "BOOL"; defaultValue = 0; diff --git a/addons/mk6mortar/RscInGameUI.hpp b/addons/mk6mortar/RscInGameUI.hpp index 8de754beddf..3a3256e936a 100644 --- a/addons/mk6mortar/RscInGameUI.hpp +++ b/addons/mk6mortar/RscInGameUI.hpp @@ -11,18 +11,17 @@ class RscInGameUI { class ACE_MILS_GROUP: CA_IGUI_elements_group { idc = 80170; class controls { - class CA_Heading_MILS: RscText - { + class CA_Heading_MILS: RscText { idc = 80156; - style = 0; + style = 2; colorText[] = {0.706,0.0745,0.0196,1}; sizeEx = "0.028*SafezoneH"; shadow = 0; font = "EtelkaMonospacePro"; text = "015"; - x = "25.3 * (0.01875 * SafezoneH)"; + x = "25.0 * (0.01875 * SafezoneH)"; y = "6.3 * (0.025 * SafezoneH)"; - w = "2.2 * (0.01875 * SafezoneH)"; + w = "3.3333 * (0.01875 * SafezoneH)"; h = "1 * (0.025 * SafezoneH)"; }; class CA_Elev_MILS: RscText { diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index 73f487fa624..f8a986cb25f 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -84,11 +84,11 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") if (!GVAR(allowCompass)) then { (_display displayCtrl 80156) ctrlSetText ""; } else { - _elevDeg = parseNumber ctrlText (_display displayCtrl 156); + _rotationDegrees = ((getDir _mortarVeh) + (((-180 / PI) * (_mortarVeh animationPhase "mainTurret")) + 360)) % 360; if (GVAR(useMils)) then { - (_display displayCtrl 80156) ctrlSetText str round (_elevDeg * 6400 / 360); + (_display displayCtrl 80156) ctrlSetText str round (_rotationDegrees * 6400 / 360); } else { - (_display displayCtrl 80156) ctrlSetText str _elevDeg; + (_display displayCtrl 80156) ctrlSetText str _rotationDegrees; }; }; }; diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index 6a316743f14..860dea069a1 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -54,7 +54,7 @@ _fnc_hideControl = { }; { - [_x, GVAR(disableComputerRangefinder)] call _fnc_hideControl; + [_x, (!GVAR(allowComputerRangefinder))] call _fnc_hideControl; } forEach [CTRL_CA_OPTICSPITCH, CTRL_CA_OPTICSZOOM, CTRL_CA_SOLUTION_TEXT, CTRL_CA_DISTANCE_TEXT, CTRL_CA_DISTANCE, CTRL_CA_TIME_TEXT, CTRL_CA_TIME, CTRL_CA_ELEV_NEED_TEXT, CTRL_CA_RANGEELEMENTS_GROUP]; //Always hide these, handled by the mil convertions PFEH in handlePlayerVehChanged From 3d9da5f142414f892607af1905bf4f78b6b32639 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 15:00:59 -0500 Subject: [PATCH 008/276] Make Mils Toogle Self Action --- addons/mk6mortar/CfgVehicles.hpp | 10 +++++++++- addons/mk6mortar/XEH_preInit.sqf | 1 + addons/mk6mortar/config.cpp | 7 ------- .../fnc_handlePlayerVehicleChanged.sqf | 10 ++++++---- addons/mk6mortar/functions/fnc_toggleMils.sqf | 20 +++++++++++++++++++ 5 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 addons/mk6mortar/functions/fnc_toggleMils.sqf diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 233a8be2055..ad7bf797f94 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -17,6 +17,14 @@ class CfgVehicles { turretInfoType = "ACE_Mk6_RscWeaponRangeArtillery"; }; }; + class ACE_SelfActions { + class GVAR(toggleMils) { + displayName = "Toggle MILS"; + condition = QUOTE(true); + statement = QUOTE(_this call FUNC(toggleMils)); + exceptions[] = {}; + }; + }; }; class Logic; @@ -44,7 +52,7 @@ class CfgVehicles { description = "Show the Computer and Rangefinder (these should be removed if you enable air resistance)"; typeName = "BOOL"; defaultValue = 0; - }; + }; class allowCompass { displayName = "Allow MK6 Compass"; description = "Show the MK6 Digital Compass"; diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index d3fcaafa5ac..45a72e1528f 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -5,6 +5,7 @@ ADDON = false; PREP(handleFired); PREP(handlePlayerVehicleChanged); PREP(moduleInit); +PREP(toggleMils); PREP(turretDisplayLoaded); ADDON = true; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index e21fb1e6f98..cd849c9efd1 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -19,13 +19,6 @@ class CfgPatches { #include "RscInGameUI.hpp" class ACE_Settings { - class GVAR(useMils) { - value = 1; - typeName = "BOOL"; - isClientSetable = 1; - displayName = "$STR_ACE_mk6mortar_useMils"; - }; - //These settings effect gameplay difficutly: defaults will leave the mortar the same as vanilla class GVAR(airResistanceEnabled) { value = 0; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index f8a986cb25f..6faeeaf4157 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -41,6 +41,8 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") ctrlDelete _chargeText; } else { + _useMils = _mortarVeh getVariable [QGVAR(useMils), true]; + //Compute: 'charge' from weaponstate _currentFireMode = (weaponState [_mortarVeh, [0]]) select 2; _currentChargeMode = _fireModes find _currentFireMode; @@ -58,7 +60,7 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") //Update CurrentElevation Display: _elevDeg = parseNumber ctrlText (_display displayCtrl 175); - if (GVAR(useMils)) then { + if (_useMils) then { (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); } else { (_display displayCtrl 80175) ctrlSetText str _elevDeg; @@ -72,7 +74,7 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") if (_elevDeg <= 0) then { (_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176)); } else { - if (GVAR(useMils)) then { + if (_useMils) then { (_display displayCtrl 80176) ctrlSetText str round (_elevDeg * 6400 / 360); } else { (_display displayCtrl 80176) ctrlSetText str _elevDeg; @@ -85,10 +87,10 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") (_display displayCtrl 80156) ctrlSetText ""; } else { _rotationDegrees = ((getDir _mortarVeh) + (((-180 / PI) * (_mortarVeh animationPhase "mainTurret")) + 360)) % 360; - if (GVAR(useMils)) then { + if (_useMils) then { (_display displayCtrl 80156) ctrlSetText str round (_rotationDegrees * 6400 / 360); } else { - (_display displayCtrl 80156) ctrlSetText str _rotationDegrees; + (_display displayCtrl 80156) ctrlSetText (ctrlText (_display displayCtrl 156)); }; }; }; diff --git a/addons/mk6mortar/functions/fnc_toggleMils.sqf b/addons/mk6mortar/functions/fnc_toggleMils.sqf new file mode 100644 index 00000000000..98714836fcb --- /dev/null +++ b/addons/mk6mortar/functions/fnc_toggleMils.sqf @@ -0,0 +1,20 @@ +/* + * Author: PabstMirror + * + * + * Arguments: + * + * Return Value: + * + * Example: + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_mortarVeh,_unit); + +private "_currentSetting"; + +_currentSetting = _mortarVeh getVariable [QGVAR(useMils), true]; +_mortarVeh setVariable [QGVAR(useMils), (!_currentSetting)]; From 61a0ae1aec783270b39d5d0acd22028a107de925 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 15:48:56 -0500 Subject: [PATCH 009/276] Rangetable Dialog --- addons/mk6mortar/CfgVehicles.hpp | 15 + addons/mk6mortar/RscInGameUI.hpp | 3 - addons/mk6mortar/RscRangeTable.hpp | 87 ++++++ addons/mk6mortar/UI/RangeTable_background.paa | Bin 0 -> 289652 bytes addons/mk6mortar/UI/icon_rangeTable.paa | Bin 0 -> 25789 bytes addons/mk6mortar/XEH_preInit.sqf | 3 + addons/mk6mortar/config.cpp | 11 + .../functions/fnc_rangeTableOpen.sqf | 42 +++ .../functions/fnc_rangeTablePageChange.sqf | 30 ++ .../fnc_rangeTablePreCalculatedValues.sqf | 285 ++++++++++++++++++ addons/mk6mortar/script_component.hpp | 4 +- 11 files changed, 476 insertions(+), 4 deletions(-) create mode 100644 addons/mk6mortar/RscRangeTable.hpp create mode 100644 addons/mk6mortar/UI/RangeTable_background.paa create mode 100644 addons/mk6mortar/UI/icon_rangeTable.paa create mode 100644 addons/mk6mortar/functions/fnc_rangeTableOpen.sqf create mode 100644 addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf create mode 100644 addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index ad7bf797f94..7c39aeafdda 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -1,4 +1,19 @@ class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_Equipment { + class GVAR(rangetable) { + displayName = "Open 82mm Rangetable"; + condition = QUOTE(true); + statement = QUOTE(call FUNC(rangeTableOpen)); + priority = 0; + icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); + }; + }; + }; + }; + class LandVehicle; class StaticWeapon: LandVehicle { class Turrets { diff --git a/addons/mk6mortar/RscInGameUI.hpp b/addons/mk6mortar/RscInGameUI.hpp index 3a3256e936a..102362216aa 100644 --- a/addons/mk6mortar/RscInGameUI.hpp +++ b/addons/mk6mortar/RscInGameUI.hpp @@ -1,6 +1,3 @@ -class RscControlsGroup; -class RscText; - class RscInGameUI { class RscWeaponRangeArtillery { class CA_IGUI_elements_group: RscControlsGroup {}; diff --git a/addons/mk6mortar/RscRangeTable.hpp b/addons/mk6mortar/RscRangeTable.hpp new file mode 100644 index 00000000000..65598fd36d6 --- /dev/null +++ b/addons/mk6mortar/RscRangeTable.hpp @@ -0,0 +1,87 @@ +class ACE_82mm_RangeTable_Dialog +{ + idd = -1; + movingEnable = 1; + onLoad = "uiNamespace setVariable ['ACE_82mm_RangeTable_Dialog', _this select 0];"; + objects[] = {}; + + class ControlsBackground { + class TableBackground: RscPicture { + idc = -1; + text = QUOTE(PATHTOF(UI\RangeTable_background.paa)); + x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "16.2634559672906 * (safeZoneH / 40)"; + h = "23 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {1,1,1,1}; + }; + class ChargeBackground: RscText { + idc = -1; + x = "13 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "5 * (safeZoneH / 40)"; + h = "5 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0,0,0,1}; + }; + }; + class controls { + class TheTable : RscListNBox { + idc = 20001; + // style = ST_CENTER + ST_MULTI + LB_TEXTURES; + // style = ST_LEFT + ST_MULTI + LB_TEXTURES; + // style = LB_MULTI + ST_LEFT; // Style + x = "18 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "3.76 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "16.2634559672906 * (safeZoneH / 40)"; + h = "20.24 * ((safeZoneH / 1.2) / 25)"; + columns[] = {(10/792),(86/792),(172/792),(238/792),(329/792),(405/792),(462/792),(527/792),(588/792),(649/792),(710/792)}; + rowHeight = 0.015 * safeZoneH; + sizeEx = "0.014 * safeZoneH"; + font = "EtelkaMonospacePro"; + drawSideArrows = 1; + idcLeft = 14124; + idcRight = 412343243; + colorText[] = {0, 0, 0, 1}; + shadow = "0"; + // colorBorder[] = {1,0,0,1}; + // colorBackground[] = {1, 0, 0, 1}; + colorSelectBackground[] = {0, 0, 0, 0.025}; + colorSelectBackground2[] = {0, 0, 0, 0.025}; + colorScrollbar[] = {0.95,0,0.95,1}; + class ListScrollBar: ScrollBar{ + color[] = {0,0,0,0.6}; + }; + }; + class ChargeListBox: RscListbox { + idc = 1501; + style = ST_RIGHT; + x = "13 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "5 * (safeZoneH / 40)"; + h = "5 * ((safeZoneH / 1.2) / 25)"; + onLBSelChanged = QUOTE(_this call FUNC(rangeTablePageChange)); + }; + class CloseBackground: RscText { + idc = -1; + x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "0.5 * (safeZoneH / 40)"; + h = "0.5 * ((safeZoneH / 1.2) / 25)"; + colorBackground[] = {0,0,0,0.5}; + }; + class CloseActiveText: RscActiveText { + idc = -1; + style = 48; + color[] = {1,1,1,0.7}; + text = "A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa"; + x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "0.5 * (safeZoneH / 40)"; + h = "0.5 * ((safeZoneH / 1.2) / 25)"; + colorText[] = {1,1,1,0.7}; + colorActive[] = {1,1,1,1}; + tooltip = "Close"; + onButtonClick = "closeDialog 0"; + }; + }; +}; \ No newline at end of file diff --git a/addons/mk6mortar/UI/RangeTable_background.paa b/addons/mk6mortar/UI/RangeTable_background.paa new file mode 100644 index 0000000000000000000000000000000000000000..a2a752ce6e563dad099d03be63140050cb06bb8d GIT binary patch literal 289652 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 literal 0 HcmV?d00001 diff --git a/addons/mk6mortar/UI/icon_rangeTable.paa b/addons/mk6mortar/UI/icon_rangeTable.paa new file mode 100644 index 0000000000000000000000000000000000000000..9273b849d735c0e83c02a483b9abec7b78ad947d GIT binary patch literal 25789 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 literal 0 HcmV?d00001 diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index 45a72e1528f..eed38408ae7 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -5,6 +5,9 @@ ADDON = false; PREP(handleFired); PREP(handlePlayerVehicleChanged); PREP(moduleInit); +PREP(rangeTableOpen); +PREP(rangeTablePageChange); +PREP(rangeTablePreCalculatedValues); PREP(toggleMils); PREP(turretDisplayLoaded); diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index cd849c9efd1..5050bb2b32a 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -16,7 +16,18 @@ class CfgPatches { #include "CfgMagazines.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" + +class RscText; +class RscListbox; +class RscListNBox; +class RscPicture; +class RscControlsGroup; +class ScrollBar; +class RscActiveText; + + #include "RscInGameUI.hpp" +#include "RscRangeTable.hpp" class ACE_Settings { //These settings effect gameplay difficutly: defaults will leave the mortar the same as vanilla diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf new file mode 100644 index 00000000000..e3dbcffd1d2 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -0,0 +1,42 @@ +/* + * Author: PabstMirror + * + * Arguments: + * Return Value: + * + * Example: + * + * Public: No + */ +#include "script_component.hpp" + +#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) + +_weaponName = "mortar_82mm"; + +if (dialog) exitWith {ERROR("Dialog Open");}; +createDialog "ACE_82mm_RangeTable_Dialog"; +if (isNull (uiNamespace getVariable ["ACE_82mm_RangeTable_Dialog", displayNull])) exitWith {ERROR("Dialog failed to open");}; + +//Get Magazine Types +_magazines = getArray (configFile >> "CfgWeapons" >> _weaponName >> "magazines"); + +//For now just get settings from first mag, all rounds have same flight characteristics: +if ((count _magazines) < 1) exitWith {ERROR("No Magazines for weapon");}; +_initSpeed = getNumber (configFile >> "CfgMagazines" >> (_magazines select 0) >> "initSpeed"); + +//Get Charge Modes +_fireModes = getArray (configFile >> "CfgWeapons" >> _weaponName >> "modes"); + +_muzzleVelocities = []; +{ + _showToPlayer = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "showToPlayer"); + if (_showToPlayer == 1) then { + _artilleryCharge = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "artilleryCharge"); + LIST_CHARGE lbAdd format ["%1: %2 [%3m/s]", "Charge", (count _muzzleVelocities), (_initSpeed * _artilleryCharge)]; + LIST_CHARGE lbSetData [(count _muzzleVelocities), str (_artilleryCharge * _initSpeed)]; + _muzzleVelocities pushBack _artilleryCharge; + }; +} forEach _fireModes; + +LIST_CHARGE lbSetCurSel 0; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf new file mode 100644 index 00000000000..c7f740ba154 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -0,0 +1,30 @@ +/* + * Author: PabstMirror + * + * + * Arguments: + * + * Return Value: + * + * Example: + * + * Public: No + */ +#include "script_component.hpp" + +#define RANGE_TABLE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 20001) +#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) + +_listBoxData = LIST_CHARGE lbData (lbCurSel LIST_CHARGE); +if (isNil "_listBoxData" || {_listBoxData == ""}) exitWith {ERROR("lbCurSel out of bounds or no data");}; +_muzzleVelocity = parseNumber _listBoxData; + +_precalcArray = [_muzzleVelocity, MK6_82mm_AIR_FRICTION] call FUNC(rangeTablePreCalculatedValues); + +lnbClear RANGE_TABLE; +{ + RANGE_TABLE lnbAddRow _x; +} forEach _precalcArray; + +//put dummy line at end because scrolling is fucked and can't see last line +RANGE_TABLE lnbAddRow ["", "", "", "", "", "", "", "", "", "", ""]; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf new file mode 100644 index 00000000000..ff0f9b5407e --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -0,0 +1,285 @@ +/* + * Author: PabstMirror +Simple Lookup Table for various muzzle velocities and air frictions. +Use ACE_Artillery_fnc_dev_buildTable to build + * + * Arguments: + * 0: NUMBER - Muzzle Velocity +1: NUMBER - Air Friction + * Return Value: + * + * Example: + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_muzzleVelocity,_airFriction); + +switch (true) do { + +case ((abs(_muzzleVelocity - 60) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { + [ + ["100","1455","16","12.0","2.4","0.3","-0.2","0.3","-0.3","-0.0","0.0"], + ["150","1379","26","11.8","1.6","0.3","-0.2","0.4","-0.4","-0.0","0.1"], + ["200","1296","39","11.6","1.2","0.4","-0.3","0.5","-0.5","-0.0","0.1"], + ["250","1204","57","11.2","1.0","0.4","-0.3","0.7","-0.7","-0.1","0.1"], + ["300","1089","88","10.6","0.8","0.4","-0.3","0.8","-0.8","-0.1","0.1"], + ["350","894","187","9.3","0.6","0.4","-0.3","0.9","-0.9","-0.1","0.1"] + ] + }; + +case ((abs(_muzzleVelocity - 120) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { + [ + ["200","1523","3","23.6","8.2","1.7","-1.6","0.5","-0.5","-0.2","0.2"], + ["250","1503","3","23.5","6.6","1.8","-1.6","0.6","-0.6","-0.2","0.2"], + ["300","1483","4","23.5","5.5","1.8","-1.6","0.7","-0.8","-0.3","0.3"], + ["350","1463","5","23.4","4.7","1.9","-1.7","0.9","-0.9","-0.4","0.3"], + ["400","1443","5","23.4","4.2","1.9","-1.7","1.0","-1.0","-0.4","0.4"], + ["450","1423","6","23.3","3.7","2.0","-1.7","1.1","-1.1","-0.5","0.4"], + ["500","1402","7","23.2","3.4","2.0","-1.8","1.2","-1.3","-0.5","0.5"], + ["550","1381","8","23.1","3.1","2.1","-1.8","1.4","-1.4","-0.6","0.5"], + ["600","1359","9","23.0","2.8","2.2","-1.9","1.5","-1.5","-0.6","0.6"], + ["650","1337","10","22.9","2.6","2.2","-1.9","1.6","-1.6","-0.7","0.7"], + ["700","1314","11","22.7","2.4","2.3","-2.0","1.7","-1.7","-0.7","0.7"], + ["750","1291","13","22.6","2.3","2.4","-2.0","1.9","-1.9","-0.8","0.8"], + ["800","1267","14","22.4","2.1","2.4","-2.1","2.0","-2.0","-0.8","0.8"], + ["850","1241","16","22.2","2.0","2.5","-2.1","2.1","-2.1","-0.9","0.9"], + ["900","1215","17","22.0","1.9","2.5","-2.2","2.2","-2.2","-0.9","0.9"], + ["950","1187","20","21.7","1.8","2.6","-2.3","2.3","-2.4","-1.0","1.0"], + ["1000","1158","23","21.5","1.7","2.6","-2.3","2.5","-2.5","-1.1","1.0"], + ["1050","1127","26","21.1","1.6","2.7","-2.4","2.6","-2.6","-1.1","1.1"], + ["1100","1092","30","20.8","1.5","2.7","-2.4","2.7","-2.8","-1.2","1.1"], + ["1150","1054","36","20.4","1.4","2.7","-2.4","2.9","-2.9","-1.2","1.2"], + ["1200","1011","45","19.8","1.3","2.7","-2.5","3.0","-3.0","-1.3","1.2"], + ["1250","957","59","19.1","1.2","2.7","-2.4","3.1","-3.1","-1.3","1.3"], + ["1300","876","94","18.0","1.1","2.6","-2.4","3.2","-3.3","-1.3","1.3"] + ] + }; + +case ((abs(_muzzleVelocity - 180) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { + [ + ["400","1523","1","34.0","11.7","4.9","-4.6","0.9","-0.9","-0.8","0.8"], + ["450","1513","1","34.0","10.5","4.9","-4.7","1.0","-1.0","-0.9","0.8"], + ["500","1504","2","34.0","9.4","5.0","-4.7","1.1","-1.1","-1.0","0.9"], + ["550","1494","2","33.9","8.6","5.1","-4.7","1.2","-1.2","-1.1","1.0"], + ["600","1484","2","33.9","7.9","5.1","-4.8","1.3","-1.4","-1.2","1.1"], + ["650","1474","2","33.9","7.3","5.2","-4.8","1.5","-1.5","-1.3","1.2"], + ["700","1464","2","33.8","6.8","5.2","-4.9","1.6","-1.6","-1.4","1.3"], + ["750","1454","2","33.8","6.3","5.3","-4.9","1.7","-1.7","-1.5","1.4"], + ["800","1444","3","33.7","6.0","5.4","-5.0","1.8","-1.8","-1.6","1.5"], + ["850","1433","3","33.7","5.6","5.4","-5.0","1.9","-1.9","-1.7","1.6"], + ["900","1423","3","33.6","5.3","5.5","-5.1","2.0","-2.0","-1.8","1.7"], + ["950","1413","3","33.6","5.0","5.6","-5.1","2.1","-2.1","-1.9","1.8"], + ["1000","1402","3","33.5","4.8","5.6","-5.2","2.2","-2.2","-2.0","1.9"], + ["1050","1392","4","33.4","4.6","5.7","-5.3","2.3","-2.4","-2.1","2.0"], + ["1100","1381","4","33.3","4.4","5.8","-5.3","2.5","-2.5","-2.2","2.1"], + ["1150","1370","4","33.3","4.2","5.8","-5.4","2.6","-2.6","-2.3","2.2"], + ["1200","1359","4","33.2","4.0","5.9","-5.5","2.7","-2.7","-2.4","2.3"], + ["1250","1348","5","33.1","3.9","6.0","-5.5","2.8","-2.8","-2.5","2.4"], + ["1300","1337","5","33.0","3.7","6.1","-5.6","2.9","-2.9","-2.6","2.5"], + ["1350","1326","5","32.9","3.6","6.1","-5.6","3.0","-3.0","-2.7","2.6"], + ["1400","1314","5","32.8","3.5","6.2","-5.7","3.1","-3.1","-2.8","2.7"], + ["1450","1302","6","32.7","3.3","6.3","-5.8","3.2","-3.2","-2.9","2.8"], + ["1500","1290","6","32.6","3.2","6.3","-5.9","3.3","-3.4","-3.1","2.9"], + ["1550","1278","6","32.5","3.1","6.4","-5.9","3.4","-3.5","-3.2","3.0"], + ["1600","1266","7","32.3","3.0","6.5","-6.0","3.5","-3.6","-3.3","3.1"], + ["1650","1253","7","32.2","2.9","6.6","-6.1","3.7","-3.7","-3.4","3.2"], + ["1700","1240","8","32.0","2.8","6.6","-6.1","3.8","-3.8","-3.5","3.3"], + ["1750","1227","8","31.9","2.8","6.7","-6.2","3.9","-3.9","-3.6","3.4"], + ["1800","1214","9","31.7","2.7","6.7","-6.3","4.0","-4.0","-3.7","3.5"], + ["1850","1200","9","31.6","2.6","6.8","-6.3","4.1","-4.1","-3.8","3.6"], + ["1900","1186","10","31.4","2.5","6.9","-6.4","4.2","-4.2","-3.9","3.7"], + ["1950","1171","10","31.2","2.4","6.9","-6.5","4.3","-4.3","-4.0","3.8"], + ["2000","1156","11","31.0","2.4","7.0","-6.5","4.4","-4.4","-4.1","3.9"], + ["2050","1141","12","30.8","2.3","7.0","-6.6","4.5","-4.6","-4.2","4.0"], + ["2100","1124","13","30.5","2.2","7.1","-6.6","4.7","-4.7","-4.3","4.1"], + ["2150","1108","14","30.3","2.2","7.1","-6.6","4.8","-4.8","-4.4","4.2"], + ["2200","1090","15","30.0","2.1","7.2","-6.7","4.9","-4.9","-4.5","4.3"], + ["2250","1071","17","29.7","2.0","7.2","-6.7","5.0","-5.0","-4.6","4.4"], + ["2300","1052","18","29.4","2.0","7.2","-6.8","5.1","-5.1","-4.7","4.5"], + ["2350","1030","20","29.0","1.9","7.2","-6.8","5.2","-5.2","-4.8","4.6"], + ["2400","1008","23","28.6","1.9","7.2","-6.8","5.3","-5.3","-4.9","4.7"], + ["2450","983","26","28.2","1.8","7.2","-6.8","5.4","-5.4","-5.0","4.8"], + ["2500","954","31","27.6","1.7","7.1","-6.8","5.6","-5.6","-5.1","4.9"], + ["2550","921","38","27.0","1.6","7.1","-6.7","5.7","-5.7","-5.2","4.9"], + ["2600","878","52","26.1","1.5","6.9","-6.6","5.8","-5.8","-5.2","5.0"] + ] + }; +case ((abs(_muzzleVelocity - 240) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { + [ + ["600","1526","1","43.3","15.3","9.5","-9.1","1.2","-1.2","-1.8","1.7"], + ["650","1519","1","43.3","14.1","9.5","-9.2","1.3","-1.3","-1.9","1.8"], + ["700","1513","1","43.3","13.2","9.6","-9.2","1.4","-1.4","-2.1","1.9"], + ["750","1507","1","43.2","12.3","9.6","-9.2","1.5","-1.5","-2.2","2.1"], + ["800","1500","1","43.2","11.5","9.7","-9.3","1.6","-1.6","-2.4","2.2"], + ["850","1494","1","43.2","10.9","9.7","-9.3","1.7","-1.7","-2.5","2.4"], + ["900","1488","1","43.2","10.3","9.8","-9.4","1.8","-1.8","-2.7","2.5"], + ["950","1481","1","43.1","9.8","9.9","-9.4","1.9","-1.9","-2.8","2.7"], + ["1000","1475","1","43.1","9.3","9.9","-9.5","2.0","-2.0","-3.0","2.8"], + ["1050","1468","1","43.1","8.9","10.0","-9.5","2.1","-2.1","-3.1","2.9"], + ["1100","1462","1","43.0","8.5","10.1","-9.6","2.2","-2.2","-3.3","3.1"], + ["1150","1455","1","43.0","8.1","10.1","-9.6","2.3","-2.3","-3.4","3.2"], + ["1200","1449","1","43.0","7.8","10.2","-9.7","2.4","-2.4","-3.6","3.4"], + ["1250","1442","2","42.9","7.5","10.3","-9.8","2.5","-2.5","-3.7","3.5"], + ["1300","1436","2","42.9","7.2","10.3","-9.8","2.6","-2.6","-3.9","3.6"], + ["1350","1429","2","42.8","6.9","10.4","-9.9","2.7","-2.7","-4.0","3.8"], + ["1400","1422","2","42.8","6.7","10.5","-10.0","2.8","-2.8","-4.2","3.9"], + ["1450","1416","2","42.7","6.5","10.5","-10.0","2.9","-2.9","-4.4","4.1"], + ["1500","1409","2","42.7","6.2","10.6","-10.1","3.0","-3.0","-4.5","4.2"], + ["1550","1402","2","42.6","6.0","10.7","-10.2","3.0","-3.1","-4.7","4.4"], + ["1600","1395","2","42.6","5.9","10.8","-10.2","3.1","-3.2","-4.8","4.5"], + ["1650","1388","2","42.5","5.7","10.8","-10.3","3.2","-3.3","-5.0","4.7"], + ["1700","1381","2","42.4","5.5","10.9","-10.4","3.3","-3.3","-5.1","4.8"], + ["1750","1374","2","42.4","5.4","11.0","-10.4","3.4","-3.4","-5.3","4.9"], + ["1800","1367","2","42.3","5.2","11.0","-10.5","3.5","-3.5","-5.4","5.1"], + ["1850","1360","3","42.2","5.1","11.1","-10.6","3.6","-3.6","-5.6","5.2"], + ["1900","1353","3","42.2","5.0","11.2","-10.6","3.7","-3.7","-5.8","5.4"], + ["1950","1346","3","42.1","4.8","11.3","-10.7","3.8","-3.8","-5.9","5.5"], + ["2000","1338","3","42.0","4.7","11.3","-10.8","3.9","-3.9","-6.1","5.7"], + ["2050","1331","3","41.9","4.6","11.4","-10.9","4.0","-4.0","-6.2","5.8"], + ["2100","1323","3","41.9","4.5","11.5","-10.9","4.1","-4.1","-6.4","6.0"], + ["2150","1316","3","41.8","4.4","11.6","-11.0","4.2","-4.2","-6.5","6.1"], + ["2200","1308","3","41.7","4.3","11.6","-11.1","4.3","-4.3","-6.7","6.3"], + ["2250","1301","3","41.6","4.2","11.7","-11.1","4.4","-4.4","-6.9","6.4"], + ["2300","1293","4","41.5","4.1","11.8","-11.2","4.5","-4.5","-7.0","6.6"], + ["2350","1285","4","41.4","4.0","11.9","-11.3","4.6","-4.6","-7.2","6.7"], + ["2400","1277","4","41.3","3.9","11.9","-11.3","4.7","-4.7","-7.3","6.9"], + ["2450","1269","4","41.2","3.8","12.0","-11.4","4.8","-4.8","-7.5","7.0"], + ["2500","1261","4","41.1","3.8","12.1","-11.5","4.9","-4.9","-7.7","7.1"], + ["2550","1253","4","41.0","3.7","12.1","-11.6","5.0","-5.0","-7.8","7.3"], + ["2600","1244","4","40.9","3.6","12.2","-11.6","5.1","-5.1","-8.0","7.4"], + ["2650","1236","5","40.7","3.5","12.3","-11.7","5.2","-5.2","-8.1","7.6"], + ["2700","1227","5","40.6","3.5","12.3","-11.8","5.3","-5.3","-8.3","7.7"], + ["2750","1219","5","40.5","3.4","12.4","-11.8","5.4","-5.4","-8.4","7.9"], + ["2800","1210","5","40.3","3.3","12.5","-11.9","5.5","-5.5","-8.6","8.0"], + ["2850","1201","5","40.2","3.3","12.5","-12.0","5.6","-5.6","-8.8","8.2"], + ["2900","1192","6","40.1","3.2","12.6","-12.0","5.7","-5.7","-8.9","8.3"], + ["2950","1182","6","39.9","3.1","12.6","-12.1","5.8","-5.8","-9.1","8.5"], + ["3000","1173","6","39.7","3.1","12.7","-12.2","5.9","-5.9","-9.2","8.6"], + ["3050","1163","6","39.6","3.0","12.7","-12.2","6.0","-6.0","-9.4","8.8"], + ["3100","1153","7","39.4","3.0","12.8","-12.3","6.1","-6.0","-9.5","8.9"], + ["3150","1143","7","39.2","2.9","12.8","-12.3","6.1","-6.2","-9.7","9.0"], + ["3200","1133","7","39.0","2.9","12.9","-12.4","6.3","-6.2","-9.8","9.2"], + ["3250","1122","8","38.8","2.8","12.9","-12.4","6.4","-6.3","-10.0","9.3"], + ["3300","1111","8","38.6","2.7","13.0","-12.5","6.4","-6.4","-10.2","9.5"], + ["3350","1100","9","38.4","2.7","13.0","-12.5","6.5","-6.5","-10.3","9.6"], + ["3400","1088","9","38.2","2.6","13.0","-12.5","6.6","-6.6","-10.5","9.8"], + ["3450","1076","10","38.0","2.6","13.0","-12.6","6.7","-6.7","-10.6","9.9"], + ["3500","1064","10","37.7","2.5","13.1","-12.6","6.9","-6.8","-10.7","10.0"], + ["3550","1051","11","37.4","2.5","13.1","-12.6","7.0","-6.9","-10.9","10.2"], + ["3600","1038","12","37.2","2.4","13.1","-12.6","7.0","-7.0","-11.0","10.3"], + ["3650","1024","13","36.9","2.4","13.1","-12.6","7.2","-7.1","-11.2","10.4"], + ["3700","1009","14","36.5","2.3","13.1","-12.6","7.2","-7.3","-11.3","10.5"], + ["3750","993","15","36.2","2.3","13.0","-12.6","7.4","-7.3","-11.4","10.7"], + ["3800","977","16","35.8","2.2","13.0","-12.6","7.5","-7.5","-11.6","10.8"], + ["3850","959","18","35.4","2.2","13.0","-12.6","7.6","-7.6","-11.7","10.9"], + ["3900","940","20","34.9","2.1","12.9","-12.5","7.7","-7.7","-11.8","11.0"], + ["3950","918","23","34.4","2.0","12.8","-12.4","7.8","-7.8","-11.9","11.1"], + ["4000","893","28","33.7","2.0","12.7","-12.3","7.9","-7.9","-12.0","11.2"], + ["4050","863","35","32.9","1.9","12.5","-12.1","8.0","-8.0","-12.0","11.2"], + ["4100","821","50","31.8","1.8","12.1","-11.8","8.2","-8.2","-12.0","11.2"] + ] + }; +case ((abs(_muzzleVelocity - 300) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { + [ + ["800","1527","0","51.4","18.2","15.0","-14.6","1.4","-1.4","-3.1","2.9"], + ["850","1522","1","51.4","17.2","15.0","-14.6","1.5","-1.5","-3.3","3.0"], + ["900","1517","1","51.4","16.2","15.0","-14.7","1.6","-1.6","-3.5","3.2"], + ["950","1513","1","51.4","15.4","15.1","-14.7","1.7","-1.6","-3.7","3.4"], + ["1000","1508","1","51.4","14.7","15.2","-14.8","1.7","-1.7","-3.9","3.6"], + ["1050","1503","1","51.3","14.0","15.2","-14.8","1.8","-1.8","-4.1","3.8"], + ["1100","1498","1","51.3","13.4","15.3","-14.8","1.9","-1.9","-4.3","3.9"], + ["1150","1494","1","51.3","12.8","15.3","-14.9","2.0","-2.0","-4.5","4.1"], + ["1200","1489","1","51.3","12.3","15.4","-14.9","2.1","-2.1","-4.7","4.3"], + ["1250","1484","1","51.2","11.8","15.5","-15.0","2.2","-2.2","-4.9","4.5"], + ["1300","1479","1","51.2","11.3","15.5","-15.0","2.3","-2.3","-5.1","4.7"], + ["1350","1475","1","51.2","10.9","15.6","-15.1","2.3","-2.3","-5.3","4.8"], + ["1400","1470","1","51.2","10.6","15.6","-15.1","2.4","-2.4","-5.5","5.0"], + ["1450","1465","1","51.1","10.2","15.7","-15.2","2.5","-2.5","-5.7","5.2"], + ["1500","1460","1","51.1","9.9","15.8","-15.3","2.6","-2.6","-5.9","5.4"], + ["1550","1455","1","51.1","9.5","15.8","-15.3","2.7","-2.7","-6.1","5.6"], + ["1600","1451","1","51.0","9.3","15.9","-15.4","2.8","-2.8","-6.3","5.8"], + ["1650","1446","1","51.0","9.0","16.0","-15.4","2.9","-2.9","-6.5","5.9"], + ["1700","1441","1","51.0","8.7","16.0","-15.5","3.0","-2.9","-6.7","6.1"], + ["1750","1436","1","50.9","8.5","16.1","-15.6","3.0","-3.0","-6.9","6.3"], + ["1800","1431","1","50.9","8.2","16.2","-15.6","3.1","-3.1","-7.1","6.5"], + ["1850","1426","1","50.8","8.0","16.2","-15.7","3.2","-3.2","-7.3","6.7"], + ["1900","1421","1","50.8","7.8","16.3","-15.8","3.3","-3.3","-7.5","6.9"], + ["1950","1416","1","50.7","7.6","16.4","-15.8","3.4","-3.4","-7.7","7.1"], + ["2000","1411","1","50.7","7.4","16.4","-15.9","3.5","-3.5","-7.9","7.2"], + ["2050","1406","1","50.7","7.3","16.5","-15.9","3.6","-3.5","-8.1","7.4"], + ["2100","1401","1","50.6","7.1","16.6","-16.0","3.6","-3.6","-8.3","7.6"], + ["2150","1396","1","50.6","6.9","16.6","-16.1","3.7","-3.7","-8.5","7.8"], + ["2200","1390","1","50.5","6.8","16.7","-16.1","3.8","-3.8","-8.7","8.0"], + ["2250","1385","2","50.5","6.6","16.8","-16.2","3.9","-3.9","-8.9","8.2"], + ["2300","1380","2","50.4","6.5","16.9","-16.3","4.0","-4.0","-9.1","8.3"], + ["2350","1375","2","50.3","6.3","16.9","-16.4","4.1","-4.1","-9.3","8.5"], + ["2400","1370","2","50.3","6.2","17.0","-16.4","4.2","-4.1","-9.5","8.7"], + ["2450","1364","2","50.2","6.1","17.1","-16.5","4.2","-4.2","-9.7","8.9"], + ["2500","1359","2","50.2","6.0","17.1","-16.6","4.3","-4.3","-9.9","9.1"], + ["2550","1354","2","50.1","5.8","17.2","-16.6","4.4","-4.4","-10.1","9.3"], + ["2600","1348","2","50.0","5.7","17.3","-16.7","4.5","-4.5","-10.3","9.5"], + ["2650","1343","2","50.0","5.6","17.3","-16.8","4.6","-4.6","-10.5","9.6"], + ["2700","1337","2","49.9","5.5","17.4","-16.8","4.7","-4.7","-10.7","9.8"], + ["2750","1332","2","49.8","5.4","17.5","-16.9","4.8","-4.7","-10.9","10.0"], + ["2800","1326","2","49.8","5.3","17.6","-17.0","4.8","-4.8","-11.1","10.2"], + ["2850","1321","2","49.7","5.2","17.6","-17.0","4.9","-4.9","-11.3","10.4"], + ["2900","1315","2","49.6","5.1","17.7","-17.1","5.0","-5.0","-11.5","10.6"], + ["2950","1309","2","49.5","5.0","17.8","-17.2","5.1","-5.1","-11.7","10.8"], + ["3000","1304","2","49.5","5.0","17.8","-17.3","5.2","-5.2","-11.9","10.9"], + ["3050","1298","2","49.4","4.9","17.9","-17.3","5.3","-5.2","-12.1","11.1"], + ["3100","1292","2","49.3","4.8","18.0","-17.4","5.3","-5.3","-12.3","11.3"], + ["3150","1286","3","49.2","4.7","18.0","-17.5","5.4","-5.4","-12.5","11.5"], + ["3200","1280","3","49.1","4.6","18.1","-17.5","5.5","-5.5","-12.7","11.7"], + ["3250","1274","3","49.0","4.6","18.2","-17.6","5.6","-5.6","-12.9","11.9"], + ["3300","1268","3","48.9","4.5","18.2","-17.7","5.7","-5.6","-13.1","12.1"], + ["3350","1262","3","48.8","4.4","18.3","-17.7","5.8","-5.7","-13.3","12.2"], + ["3400","1256","3","48.7","4.4","18.4","-17.8","5.9","-5.8","-13.5","12.4"], + ["3450","1250","3","48.6","4.3","18.4","-17.9","5.9","-5.9","-13.8","12.6"], + ["3500","1244","3","48.5","4.2","18.5","-17.9","6.0","-6.0","-14.0","12.8"], + ["3550","1237","3","48.4","4.2","18.6","-18.0","6.1","-6.1","-14.2","13.0"], + ["3600","1231","3","48.3","4.1","18.6","-18.1","6.2","-6.2","-14.4","13.2"], + ["3650","1224","3","48.2","4.0","18.7","-18.1","6.3","-6.3","-14.6","13.4"], + ["3700","1218","3","48.1","4.0","18.7","-18.2","6.4","-6.3","-14.8","13.5"], + ["3750","1211","4","48.0","3.9","18.8","-18.2","6.5","-6.4","-15.0","13.7"], + ["3800","1205","4","47.8","3.9","18.8","-18.3","6.5","-6.5","-15.2","13.9"], + ["3850","1198","4","47.7","3.8","18.9","-18.4","6.6","-6.6","-15.4","14.1"], + ["3900","1191","4","47.6","3.7","18.9","-18.4","6.7","-6.7","-15.6","14.3"], + ["3950","1184","4","47.5","3.7","19.0","-18.5","6.8","-6.8","-15.8","14.5"], + ["4000","1177","4","47.3","3.6","19.1","-18.5","6.9","-6.8","-16.0","14.7"], + ["4050","1170","4","47.2","3.6","19.1","-18.6","7.0","-6.9","-16.2","14.8"], + ["4100","1163","4","47.0","3.5","19.1","-18.6","7.1","-7.0","-16.4","15.0"], + ["4150","1155","5","46.9","3.5","19.2","-18.7","7.1","-7.1","-16.6","15.2"], + ["4200","1148","5","46.7","3.4","19.2","-18.7","7.2","-7.2","-16.8","15.4"], + ["4250","1140","5","46.6","3.4","19.3","-18.8","7.3","-7.3","-17.0","15.6"], + ["4300","1132","5","46.4","3.3","19.3","-18.8","7.4","-7.4","-17.2","15.7"], + ["4350","1124","5","46.2","3.3","19.3","-18.8","7.5","-7.5","-17.4","15.9"], + ["4400","1116","5","46.1","3.2","19.4","-18.9","7.6","-7.5","-17.6","16.1"], + ["4450","1108","6","45.9","3.2","19.4","-18.9","7.7","-7.6","-17.8","16.3"], + ["4500","1100","6","45.7","3.1","19.4","-19.0","7.8","-7.7","-17.9","16.4"], + ["4550","1091","6","45.5","3.1","19.4","-19.0","7.8","-7.8","-18.1","16.6"], + ["4600","1083","6","45.3","3.1","19.5","-19.0","7.9","-7.9","-18.3","16.8"], + ["4650","1074","7","45.1","3.0","19.5","-19.0","8.0","-8.0","-18.5","17.0"], + ["4700","1065","7","44.9","3.0","19.5","-19.1","8.1","-8.1","-18.7","17.1"], + ["4750","1055","7","44.6","2.9","19.5","-19.1","8.2","-8.2","-18.9","17.3"], + ["4800","1046","8","44.4","2.9","19.5","-19.1","8.3","-8.3","-19.1","17.5"], + ["4850","1036","8","44.2","2.8","19.5","-19.1","8.4","-8.3","-19.2","17.6"], + ["4900","1025","8","43.9","2.8","19.5","-19.1","8.5","-8.4","-19.4","17.8"], + ["4950","1015","9","43.6","2.7","19.5","-19.1","8.6","-8.5","-19.6","18.0"], + ["5000","1004","9","43.3","2.7","19.4","-19.1","8.7","-8.6","-19.8","18.1"], + ["5050","992","10","43.0","2.6","19.4","-19.0","8.8","-8.7","-19.9","18.3"], + ["5100","980","11","42.7","2.6","19.4","-19.0","8.9","-8.8","-20.1","18.4"], + ["5150","968","11","42.4","2.5","19.3","-18.9","9.0","-8.9","-20.2","18.6"], + ["5200","955","12","42.0","2.5","19.2","-18.9","9.1","-9.0","-20.4","18.7"], + ["5250","941","13","41.6","2.4","19.2","-18.8","9.1","-9.1","-20.6","18.8"], + ["5300","926","15","41.2","2.4","19.1","-18.8","9.2","-9.2","-20.7","19.0"], + ["5350","910","16","40.7","2.3","19.0","-18.6","9.4","-9.3","-20.8","19.1"], + ["5400","892","18","40.2","2.3","18.8","-18.5","9.5","-9.4","-20.9","19.2"], + ["5450","872","21","39.6","2.2","18.6","-18.3","9.6","-9.5","-21.0","19.3"], + ["5500","849","26","38.8","2.1","18.4","-18.1","9.7","-9.7","-21.1","19.3"], + ["5550","820","33","37.9","2.1","18.0","-17.8","9.8","-9.8","-21.1","19.4"] + ] + }; + default {systemChat "Error: MuzzleVelocity not found in LUT"; []}; +}; \ No newline at end of file diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp index adf4a569465..cb74d552ded 100644 --- a/addons/mk6mortar/script_component.hpp +++ b/addons/mk6mortar/script_component.hpp @@ -9,4 +9,6 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_MK6MORTAR #endif -#include "\z\ace\Addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\Addons\main\script_macros.hpp" + +#define MK6_82mm_AIR_FRICTION -0.0001 \ No newline at end of file From 3e77eb97371b4503a83d2e4becec60b4c2268eec Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 16:28:12 -0500 Subject: [PATCH 010/276] Rangetable Builder and Prepcalc --- addons/mk6mortar/XEH_preInit.sqf | 7 + .../functions/fnc_dev_buildTable.sqf | 77 +++++ .../functions/fnc_dev_formatNumber.sqf | 83 +++++ .../fnc_dev_simulateCalcRangeTableLine.sqf | 81 +++++ .../fnc_dev_simulateFindSolution.sqf | 57 ++++ .../functions/fnc_dev_simulateShot.sqf | 78 +++++ .../fnc_rangeTablePreCalculatedValues.sqf | 319 ++++-------------- 7 files changed, 447 insertions(+), 255 deletions(-) create mode 100644 addons/mk6mortar/functions/fnc_dev_buildTable.sqf create mode 100644 addons/mk6mortar/functions/fnc_dev_formatNumber.sqf create mode 100644 addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf create mode 100644 addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf create mode 100644 addons/mk6mortar/functions/fnc_dev_simulateShot.sqf diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index eed38408ae7..186a5958965 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -2,6 +2,13 @@ ADDON = false; + +PREP(dev_buildTable); +PREP(dev_formatNumber); +PREP(dev_simulateCalcRangeTableLine); +PREP(dev_simulateFindSolution); +PREP(dev_simulateShot); + PREP(handleFired); PREP(handlePlayerVehicleChanged); PREP(moduleInit); diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf new file mode 100644 index 00000000000..d36aa61819b --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -0,0 +1,77 @@ +/* +Name: AGM_Artillery_fnc_dev_buildTable + +Author: Pabst Mirror + +Description: + DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay) + +Parameters: (normal BIS "Fired" EH stuff) + 0: NUMBER - Muzzle Velocity + 1: NUMBER - Air Friction + +Returns: + Data in clipboard + +Example: + [100, -0.0001] spawn AGM_Artillery_fnc_dev_buildTable; //spawn (scheduled) is slower + [100, -0.0001] call AGM_Artillery_fnc_dev_buildTable; //faster, but will lock while processing +*/ +#include "script_component.hpp" + +private ["_muzzleVelocity", "_airFriction", "_stillInRange", "_currentRange", "_increasePerRow", "_outputArray", "_rangeToHit", "_lineElevation", "_lineHeightElevation", "_lineTimeOfFlight", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_lineTempDec", "_lineTempInc", "_lineAirDensDec", "_lineAirDensInc", "_result", "_outputString"]; + +_muzzleVelocity = _this select 0; +_airFriction = _this select 1; +_stillInRange = true; +_currentRange = 100; +_increasePerRow = 50; +_outputArray = []; + + +//[_rangeToHit, _lineElevation, _lineHeightElevation, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] + +while {_stillInRange} do { + _result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine); + if (_result isEqualTo []) then { + _stillInRange = false; + } else { + if ((_result select 1) < 86) then { + _outputArray pushBack [ + ([(_result select 0), "meters", false] call FUNC(dev_formatNumber)), + ([(_result select 1), "mil", true] call FUNC(dev_formatNumber)), + ([(_result select 2), "mil", true] call FUNC(dev_formatNumber)), + ([(_result select 3), "sec", false] call FUNC(dev_formatNumber)), + ([(_result select 4), "milPrecise", true] call FUNC(dev_formatNumber)), + ([(_result select 5), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)) + ]; + }; + _currentRange = _currentRange + _increasePerRow; + }; + hint str _currentRange; +}; + +//handle floating point rounding errors +_outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && ((abs(_airFriction - %2) < 0.00001))): { +[ +", _muzzleVelocity, _airFriction]; + +{ + if (_forEachIndex < ((count _outputArray) - 1)) then { + _outputString = _outputString + format ["%1, + ", _x]; + } else { + _outputString = _outputString + format ["%1 + ] + };", _x]; + }; +} forEach _outputArray; + +copyToClipboard _outputString; + +hint "done"; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf new file mode 100644 index 00000000000..47e9fc7fbf5 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf @@ -0,0 +1,83 @@ +/* +Name: AGM_Artillery_fnc_formatNumber + +Author: Pabst Mirror + +Description: + Converts numbers into nicely formated strings. + +Parameters: + 0: NUMBER - Input number + 1: STRING - Output type (see case statement) + 2: BOOL - If output type is mil, convert input type from deg->mil + +Returns: + STRING - Formatted number + +Example: + [45, "mil4", true] call AGM_Artillery_fnc_formatNumber = "0800" +*/ +#include "script_component.hpp" + +private ["_theNumber", "_inputType", "_convertToMils", "_decimalPlaces", "_integerPlaces", "_prefix", "_return"]; + +_theNumber = _this select 0; +_inputType = _this select 1; +_convertToMils = _this select 2; + +_decimalPlaces = -1; +_integerPlaces = -1; + +switch (toLower _inputType) do { +case ("meters"): { + _decimalPlaces = 0; + _integerPlaces = 1; + }; +case ("metersprecise"): { + _decimalPlaces = 1; + _integerPlaces = 1; + }; +case ("meters4"): { + _decimalPlaces = 0; + _integerPlaces = 4; + }; +case ("deg3precise"): { + _decimalPlaces = 2; + _integerPlaces = 3; + }; +case ("mil"): { + _decimalPlaces = 0; + _integerPlaces = 1; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; + }; +case ("mil4"): { + _decimalPlaces = 0; + _integerPlaces = 4; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; + }; +case ("milprecise"): { + _decimalPlaces = 1; + _integerPlaces = 1; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; + }; +case ("sec"): { + _decimalPlaces = 1; + _integerPlaces = 1; + }; + default {systemChat format ["badtype %1", _inputType];}; +}; + + +//CBA_fnc_formatNumber is stupid: [-9.58545, 1, 1, false] call CBA_fnc_formatNumber == "-9.-6" + +_prefix = if (_theNumber < 0) then {"-"} else {""}; + +_return = [abs (_theNumber), _integerPlaces, _decimalPlaces, false] call CBA_fnc_formatNumber; + +(_prefix + _return) diff --git a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf new file mode 100644 index 00000000000..24ebd909ed5 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf @@ -0,0 +1,81 @@ +/* +Name: AGM_Artillery_fnc_simulateCalcRangeTableLine + +Author: Pabst Mirror + +Description: + Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range. + +Parameters: + 0: NUMBER - Muzzle Velocity + 1: NUMBER - Air Friction + 2: NUMBER - Range To Hit + +Returns: + ARRAY - Range Table Line Data (see return line) + +Example: + [300, -0.0001, 3000] call AGM_Artillery_fnc_simulateCalcRangeTableLine +*/ +#include "script_component.hpp" + +#define TIME_STEP (1/50) + +private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTime", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"]; + +_startTime = diag_tickTime; + +_muzzleVelocity = _this select 0; +_rangeToHit = _this select 1; +_airFriction = _this select 2; + +//Run Binary search for correct elevation +_solution = [_rangeToHit, 0, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution); +if (_solution isEqualTo []) exitWith {[]}; + +//Real Elevation +_lineElevation = _solution select 0; + +//Time Of Flight: +_lineTimeOfFlight = _solution select 1; + +//Height Adjustment for -100m (another binary search) +_solution = [_rangeToHit, -100, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(dev_simulateFindSolution); +if (_solution isEqualTo []) exitWith {[]};//should never be triggered (lower elevation easier to hit) + +_lineHeightElevation = ((_solution select 0) - _lineElevation); +// _lineHeightTime = (_lastTestResult select 1) - _lineTimeOfFlight; + +//Compute for 10x and divide to minimize rounding errors + +//Crosswind +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 10, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineCrosswindDeg = (_lastTestResult select 2) / 10; + +//Headwind: +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, -10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineHeadwindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//TailWind: +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1, 10, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineTailWindMeters = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Temp Dec +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 - 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineTempDec = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Temp Inc +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, (15 + 10), 1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineTempInc = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Density Dec +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 0.9, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineAirDensDec = (_rangeToHit - (_lastTestResult select 0)) / 10; + +//Air Density Inc +_lastTestResult = [_lineElevation, _muzzleVelocity, _airFriction, 15, 1.1, 0, 0, 0, TIME_STEP] call FUNC(dev_simulateShot); +_lineAirDensInc = (_rangeToHit - (_lastTestResult select 0)) / 10; + +// systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (diag_tickTime - _startTime)]; + +[_rangeToHit, _lineElevation, _lineHeightElevation, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf new file mode 100644 index 00000000000..ddeab4015fd --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -0,0 +1,57 @@ +/* +Name: FUNC(simulateFindSolution) + +Author: Pabst Mirror + +Description: + Converts numbers into nicely formated strings. + +Parameters: + 0: NUMBER - Range to Hit (Meters) + 1: NUMBER - Height To Hit (Meters) + 2: NUMBER - Muzzle Velocity (M/S) + 3: NUMBER - Air Friction + 4: NUMBER - Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) + +Returns: + ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration] + +Example: + [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(simulateFindSolution); +*/ +#include "script_component.hpp" + +private ["_rangeToHit", "_heightToHit", "_muzzleVelocity", "_airFriction", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts"]; + +#define MAX_ATTEMPTS 22 + +_rangeToHit = _this select 0; +_heightToHit = _this select 1; +_muzzleVelocity = _this select 2; +_airFriction = _this select 3; +_timeStep = _this select 4; + +_maxElev = 90; +_minElev = 45; //todo - Low Angle Howitzers??? + +_error = 10000; +_solutionElevation = -1; +_lastTestResult = []; +_numberOfAttempts = 0; + +//(binary search) +while {(_numberOfAttempts < MAX_ATTEMPTS) && ((abs _error) > 0.2)} do { + _numberOfAttempts = _numberOfAttempts + 1; + _solutionElevation = (_maxElev + _minElev) / 2; + _lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot); + _error = _rangeToHit - (_lastTestResult select 0); + if (_error > 0) then { + _maxElev = _solutionElevation; //test range was short + } else { + _minElev = _solutionElevation; //test range was long + }; +}; +if (_numberOfAttempts >= MAX_ATTEMPTS) exitWith {[]}; + +//return the elevation and time required +[_solutionElevation, (_lastTestResult select 1)] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf new file mode 100644 index 00000000000..a6c3761acbb --- /dev/null +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -0,0 +1,78 @@ +/* +Name: simulateShot + +Author: Pabst Mirror + +Description: + Simulates the path of a fired shell. + +Parameters: + 0: NUMBER - Shot Angle (degrees) + 1: NUMBER - Muzzle Velocity (m/s) + 2: NUMBER - Air Friction + 3: NUMBER - Tempeture (degres celcius) + 4: NUMBER - Relative Air Denisty + 5: NUMBER - Tail Wind (m/s) + 6: NUMBER - Cross Wind (m/s) + 7: NUMBER - Height Of Target (M) + 8: NUMBER - Time Step (fraction of a second) + +Returns: + ARRAY - + NUMBER - Distance Traveld + NUMBER - Shot Time + NUMBER - Offset (degrees) + +Example: + [45, 180, -0.0001, 15, 1, 10, 0, 0, 1/50] call simulateShot; +*/ +#include "script_component.hpp" + +private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_wind", "_gravity", "_timeStep", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"]; + +_angleDeg = _this select 0; +_muzzleVelocity = _this select 1; +_airFriction = _this select 2; +_temp = _this select 3; +_relDensity = _this select 4; +_tailWind = _this select 5; +_crosswind = _this select 6; +_heightOfTarget = _this select 7; +_timeStep = _this select 8; + +_wind = [_crosswind, _tailWind, 0]; +_gravity = [0,0,-9.8]; + +_currentPos = [0,0,0]; +_muzzleVelocity = _muzzleVelocity * (1 + ((((_temp + 273.13) / 288.13 - 1) / 2.5 + 1 ) - 1)); +_currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _angleDeg)]; + +_currentTime = 0; +_lastPos = _currentPos; + +_kCoefficent = -1 * _relDensity * _airFriction; //save time in the loop and compute once + +while {((_currentVelocity select 2) > 0) || ((_currentPos select 2) >= _heightOfTarget)} do { + _lastPos = _currentPos; + + _aparentWind = _wind vectorDiff _currentVelocity; + _changeInVelocity = _gravity vectorAdd (_aparentWind vectorMultiply ((vectorMagnitude _aparentWind) * _kCoefficent)); + + _currentVelocity = _currentVelocity vectorAdd (_changeInVelocity vectorMultiply _timeStep); + + _currentPos = _currentPos vectorAdd (_currentVelocity vectorMultiply _timeStep); + _currentTime = _currentTime + _timeStep; +}; + +//Uses linearConversion to get a weighted average betwen points before and after dropping below target height +_linConversion = linearConversion [(_lastPos select 2), (_currentPos select 2), _heightOfTarget, 0, 1, true]; +_middlePos = (_lastPos vectorMultiply (1 - _linConversion)) vectorAdd (_currentPos vectorMultiply (_linConversion)); +// _middlePosOld = (_lastPos vectorAdd _currentPos) vectorMultiply 0.5; + +//Same to find travel time +_middleTotalTravelTime = _currentTime - (_timeStep * (1-_linConversion)); + +//Find shot offset (from crosswind), in degrees + _offsetDeg = (_middlePos select 0) aTan2 (_middlePos select 1); + +[(_middlePos select 1), _middleTotalTravelTime, _offsetDeg] diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index ff0f9b5407e..d11b9efdeb1 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -18,268 +18,77 @@ PARAMS_2(_muzzleVelocity,_airFriction); switch (true) do { -case ((abs(_muzzleVelocity - 60) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { +case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["100","1455","16","12.0","2.4","0.3","-0.2","0.3","-0.3","-0.0","0.0"], - ["150","1379","26","11.8","1.6","0.3","-0.2","0.4","-0.4","-0.0","0.1"], - ["200","1296","39","11.6","1.2","0.4","-0.3","0.5","-0.5","-0.0","0.1"], - ["250","1204","57","11.2","1.0","0.4","-0.3","0.7","-0.7","-0.1","0.1"], - ["300","1089","88","10.6","0.8","0.4","-0.3","0.8","-0.8","-0.1","0.1"], - ["350","894","187","9.3","0.6","0.4","-0.3","0.9","-0.9","-0.1","0.1"] + ["100","1493","9","14.0","3.7","0.4","-0.3","0.3","-0.3","-0.0","0.0"], + ["150","1438","14","13.9","2.5","0.4","-0.4","0.4","-0.4","-0.1","0.0"], + ["200","1381","20","13.8","1.9","0.5","-0.4","0.5","-0.5","-0.1","0.1"], + ["250","1321","27","13.6","1.5","0.5","-0.4","0.7","-0.7","-0.1","0.1"], + ["300","1256","36","13.3","1.3","0.6","-0.5","0.8","-0.8","-0.1","0.1"], + ["350","1183","49","12.9","1.1","0.6","-0.5","0.9","-0.9","-0.1","0.1"], + ["400","1097","70","12.4","0.9","0.6","-0.5","1.1","-1.1","-0.2","0.1"], + ["450","979","113","11.6","0.8","0.6","-0.5","1.2","-1.2","-0.2","0.2"] ] }; -case ((abs(_muzzleVelocity - 120) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { +case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["200","1523","3","23.6","8.2","1.7","-1.6","0.5","-0.5","-0.2","0.2"], - ["250","1503","3","23.5","6.6","1.8","-1.6","0.6","-0.6","-0.2","0.2"], - ["300","1483","4","23.5","5.5","1.8","-1.6","0.7","-0.8","-0.3","0.3"], - ["350","1463","5","23.4","4.7","1.9","-1.7","0.9","-0.9","-0.4","0.3"], - ["400","1443","5","23.4","4.2","1.9","-1.7","1.0","-1.0","-0.4","0.4"], - ["450","1423","6","23.3","3.7","2.0","-1.7","1.1","-1.1","-0.5","0.4"], - ["500","1402","7","23.2","3.4","2.0","-1.8","1.2","-1.3","-0.5","0.5"], - ["550","1381","8","23.1","3.1","2.1","-1.8","1.4","-1.4","-0.6","0.5"], - ["600","1359","9","23.0","2.8","2.2","-1.9","1.5","-1.5","-0.6","0.6"], - ["650","1337","10","22.9","2.6","2.2","-1.9","1.6","-1.6","-0.7","0.7"], - ["700","1314","11","22.7","2.4","2.3","-2.0","1.7","-1.7","-0.7","0.7"], - ["750","1291","13","22.6","2.3","2.4","-2.0","1.9","-1.9","-0.8","0.8"], - ["800","1267","14","22.4","2.1","2.4","-2.1","2.0","-2.0","-0.8","0.8"], - ["850","1241","16","22.2","2.0","2.5","-2.1","2.1","-2.1","-0.9","0.9"], - ["900","1215","17","22.0","1.9","2.5","-2.2","2.2","-2.2","-0.9","0.9"], - ["950","1187","20","21.7","1.8","2.6","-2.3","2.3","-2.4","-1.0","1.0"], - ["1000","1158","23","21.5","1.7","2.6","-2.3","2.5","-2.5","-1.1","1.0"], - ["1050","1127","26","21.1","1.6","2.7","-2.4","2.6","-2.6","-1.1","1.1"], - ["1100","1092","30","20.8","1.5","2.7","-2.4","2.7","-2.8","-1.2","1.1"], - ["1150","1054","36","20.4","1.4","2.7","-2.4","2.9","-2.9","-1.2","1.2"], - ["1200","1011","45","19.8","1.3","2.7","-2.5","3.0","-3.0","-1.3","1.2"], - ["1250","957","59","19.1","1.2","2.7","-2.4","3.1","-3.1","-1.3","1.3"], - ["1300","876","94","18.0","1.1","2.6","-2.4","3.2","-3.3","-1.3","1.3"] + ["450","1527","1","37.3","13.4","6.3","-6.0","1.0","-1.0","-1.0","1.0"], + ["500","1519","1","37.2","12.1","6.3","-6.0","1.1","-1.1","-1.1","1.1"], + ["550","1510","1","37.2","11.0","6.4","-6.0","1.2","-1.2","-1.3","1.2"], + ["600","1502","1","37.2","10.1","6.4","-6.1","1.3","-1.3","-1.4","1.3"], + ["650","1494","1","37.2","9.4","6.5","-6.1","1.4","-1.4","-1.5","1.4"], + ["700","1485","2","37.1","8.7","6.5","-6.2","1.5","-1.5","-1.6","1.5"], + ["750","1477","2","37.1","8.2","6.6","-6.2","1.6","-1.6","-1.7","1.6"], + ["800","1468","2","37.0","7.7","6.7","-6.3","1.7","-1.7","-1.8","1.8"], + ["850","1460","2","37.0","7.2","6.7","-6.3","1.8","-1.8","-2.0","1.9"], + ["900","1451","2","37.0","6.8","6.8","-6.4","1.9","-2.0","-2.1","2.0"], + ["950","1443","2","36.9","6.5","6.9","-6.4","2.0","-2.1","-2.2","2.1"], + ["1000","1434","2","36.9","6.2","6.9","-6.5","2.1","-2.2","-2.3","2.2"], + ["1050","1425","2","36.8","5.9","7.0","-6.6","2.2","-2.3","-2.5","2.3"], + ["1100","1417","3","36.8","5.6","7.1","-6.6","2.3","-2.4","-2.6","2.4"], + ["1150","1408","3","36.7","5.4","7.1","-6.7","2.5","-2.5","-2.7","2.5"], + ["1200","1399","3","36.6","5.2","7.2","-6.7","2.6","-2.6","-2.8","2.7"], + ["1250","1390","3","36.6","5.0","7.3","-6.8","2.7","-2.7","-2.9","2.8"], + ["1300","1381","3","36.5","4.8","7.4","-6.9","2.8","-2.8","-3.0","2.9"], + ["1350","1372","3","36.4","4.6","7.4","-6.9","2.9","-2.9","-3.2","3.0"], + ["1400","1362","4","36.4","4.4","7.5","-7.0","3.0","-3.0","-3.3","3.1"], + ["1450","1353","4","36.3","4.3","7.6","-7.1","3.1","-3.1","-3.4","3.2"], + ["1500","1344","4","36.2","4.2","7.7","-7.1","3.2","-3.2","-3.5","3.4"], + ["1550","1334","4","36.1","4.0","7.7","-7.2","3.3","-3.3","-3.7","3.5"], + ["1600","1324","4","36.0","3.9","7.8","-7.3","3.4","-3.4","-3.8","3.6"], + ["1650","1314","4","35.9","3.8","7.9","-7.3","3.5","-3.5","-3.9","3.7"], + ["1700","1304","5","35.8","3.7","7.9","-7.4","3.6","-3.6","-4.0","3.8"], + ["1750","1294","5","35.7","3.6","8.0","-7.5","3.7","-3.7","-4.2","3.9"], + ["1800","1284","5","35.6","3.5","8.1","-7.6","3.8","-3.9","-4.3","4.0"], + ["1850","1274","5","35.5","3.4","8.2","-7.6","3.9","-4.0","-4.4","4.2"], + ["1900","1263","6","35.4","3.3","8.2","-7.7","4.0","-4.1","-4.5","4.3"], + ["1950","1253","6","35.2","3.2","8.3","-7.8","4.1","-4.2","-4.7","4.4"], + ["2000","1242","6","35.1","3.1","8.4","-7.8","4.3","-4.3","-4.8","4.5"], + ["2050","1231","7","35.0","3.0","8.4","-7.9","4.4","-4.4","-4.9","4.7"], + ["2100","1219","7","34.8","2.9","8.5","-8.0","4.5","-4.5","-5.0","4.8"], + ["2150","1208","7","34.7","2.9","8.5","-8.0","4.6","-4.6","-5.2","4.9"], + ["2200","1196","8","34.5","2.8","8.6","-8.1","4.7","-4.7","-5.3","5.0"], + ["2250","1184","8","34.3","2.7","8.7","-8.2","4.8","-4.8","-5.4","5.1"], + ["2300","1171","9","34.2","2.7","8.7","-8.2","4.9","-4.9","-5.5","5.2"], + ["2350","1158","9","34.0","2.6","8.8","-8.3","5.0","-5.0","-5.7","5.4"], + ["2400","1145","10","33.8","2.5","8.8","-8.3","5.1","-5.1","-5.8","5.5"], + ["2450","1132","10","33.6","2.5","8.9","-8.4","5.2","-5.2","-5.9","5.6"], + ["2500","1118","11","33.3","2.4","8.9","-8.4","5.3","-5.3","-6.0","5.7"], + ["2550","1103","12","33.1","2.4","9.0","-8.5","5.4","-5.4","-6.1","5.8"], + ["2600","1088","13","32.8","2.3","9.0","-8.5","5.5","-5.5","-6.2","5.9"], + ["2650","1072","14","32.6","2.2","9.0","-8.6","5.6","-5.6","-6.4","6.0"], + ["2700","1056","15","32.3","2.2","9.0","-8.6","5.7","-5.8","-6.5","6.1"], + ["2750","1038","16","31.9","2.1","9.1","-8.6","5.9","-5.9","-6.6","6.3"], + ["2800","1020","18","31.6","2.1","9.1","-8.6","6.0","-6.0","-6.7","6.4"], + ["2850","1000","20","31.2","2.0","9.1","-8.6","6.1","-6.1","-6.8","6.5"], + ["2900","978","22","30.8","1.9","9.0","-8.6","6.2","-6.2","-6.9","6.5"], + ["2950","954","26","30.3","1.9","9.0","-8.6","6.3","-6.3","-7.0","6.6"], + ["3000","927","31","29.7","1.8","8.9","-8.5","6.4","-6.4","-7.1","6.7"], + ["3050","894","38","29.0","1.7","8.8","-8.4","6.5","-6.6","-7.2","6.8"], + ["3100","849","54","27.9","1.6","8.5","-8.3","6.6","-6.7","-7.2","6.8"] ] }; -case ((abs(_muzzleVelocity - 180) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { - [ - ["400","1523","1","34.0","11.7","4.9","-4.6","0.9","-0.9","-0.8","0.8"], - ["450","1513","1","34.0","10.5","4.9","-4.7","1.0","-1.0","-0.9","0.8"], - ["500","1504","2","34.0","9.4","5.0","-4.7","1.1","-1.1","-1.0","0.9"], - ["550","1494","2","33.9","8.6","5.1","-4.7","1.2","-1.2","-1.1","1.0"], - ["600","1484","2","33.9","7.9","5.1","-4.8","1.3","-1.4","-1.2","1.1"], - ["650","1474","2","33.9","7.3","5.2","-4.8","1.5","-1.5","-1.3","1.2"], - ["700","1464","2","33.8","6.8","5.2","-4.9","1.6","-1.6","-1.4","1.3"], - ["750","1454","2","33.8","6.3","5.3","-4.9","1.7","-1.7","-1.5","1.4"], - ["800","1444","3","33.7","6.0","5.4","-5.0","1.8","-1.8","-1.6","1.5"], - ["850","1433","3","33.7","5.6","5.4","-5.0","1.9","-1.9","-1.7","1.6"], - ["900","1423","3","33.6","5.3","5.5","-5.1","2.0","-2.0","-1.8","1.7"], - ["950","1413","3","33.6","5.0","5.6","-5.1","2.1","-2.1","-1.9","1.8"], - ["1000","1402","3","33.5","4.8","5.6","-5.2","2.2","-2.2","-2.0","1.9"], - ["1050","1392","4","33.4","4.6","5.7","-5.3","2.3","-2.4","-2.1","2.0"], - ["1100","1381","4","33.3","4.4","5.8","-5.3","2.5","-2.5","-2.2","2.1"], - ["1150","1370","4","33.3","4.2","5.8","-5.4","2.6","-2.6","-2.3","2.2"], - ["1200","1359","4","33.2","4.0","5.9","-5.5","2.7","-2.7","-2.4","2.3"], - ["1250","1348","5","33.1","3.9","6.0","-5.5","2.8","-2.8","-2.5","2.4"], - ["1300","1337","5","33.0","3.7","6.1","-5.6","2.9","-2.9","-2.6","2.5"], - ["1350","1326","5","32.9","3.6","6.1","-5.6","3.0","-3.0","-2.7","2.6"], - ["1400","1314","5","32.8","3.5","6.2","-5.7","3.1","-3.1","-2.8","2.7"], - ["1450","1302","6","32.7","3.3","6.3","-5.8","3.2","-3.2","-2.9","2.8"], - ["1500","1290","6","32.6","3.2","6.3","-5.9","3.3","-3.4","-3.1","2.9"], - ["1550","1278","6","32.5","3.1","6.4","-5.9","3.4","-3.5","-3.2","3.0"], - ["1600","1266","7","32.3","3.0","6.5","-6.0","3.5","-3.6","-3.3","3.1"], - ["1650","1253","7","32.2","2.9","6.6","-6.1","3.7","-3.7","-3.4","3.2"], - ["1700","1240","8","32.0","2.8","6.6","-6.1","3.8","-3.8","-3.5","3.3"], - ["1750","1227","8","31.9","2.8","6.7","-6.2","3.9","-3.9","-3.6","3.4"], - ["1800","1214","9","31.7","2.7","6.7","-6.3","4.0","-4.0","-3.7","3.5"], - ["1850","1200","9","31.6","2.6","6.8","-6.3","4.1","-4.1","-3.8","3.6"], - ["1900","1186","10","31.4","2.5","6.9","-6.4","4.2","-4.2","-3.9","3.7"], - ["1950","1171","10","31.2","2.4","6.9","-6.5","4.3","-4.3","-4.0","3.8"], - ["2000","1156","11","31.0","2.4","7.0","-6.5","4.4","-4.4","-4.1","3.9"], - ["2050","1141","12","30.8","2.3","7.0","-6.6","4.5","-4.6","-4.2","4.0"], - ["2100","1124","13","30.5","2.2","7.1","-6.6","4.7","-4.7","-4.3","4.1"], - ["2150","1108","14","30.3","2.2","7.1","-6.6","4.8","-4.8","-4.4","4.2"], - ["2200","1090","15","30.0","2.1","7.2","-6.7","4.9","-4.9","-4.5","4.3"], - ["2250","1071","17","29.7","2.0","7.2","-6.7","5.0","-5.0","-4.6","4.4"], - ["2300","1052","18","29.4","2.0","7.2","-6.8","5.1","-5.1","-4.7","4.5"], - ["2350","1030","20","29.0","1.9","7.2","-6.8","5.2","-5.2","-4.8","4.6"], - ["2400","1008","23","28.6","1.9","7.2","-6.8","5.3","-5.3","-4.9","4.7"], - ["2450","983","26","28.2","1.8","7.2","-6.8","5.4","-5.4","-5.0","4.8"], - ["2500","954","31","27.6","1.7","7.1","-6.8","5.6","-5.6","-5.1","4.9"], - ["2550","921","38","27.0","1.6","7.1","-6.7","5.7","-5.7","-5.2","4.9"], - ["2600","878","52","26.1","1.5","6.9","-6.6","5.8","-5.8","-5.2","5.0"] - ] - }; -case ((abs(_muzzleVelocity - 240) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { - [ - ["600","1526","1","43.3","15.3","9.5","-9.1","1.2","-1.2","-1.8","1.7"], - ["650","1519","1","43.3","14.1","9.5","-9.2","1.3","-1.3","-1.9","1.8"], - ["700","1513","1","43.3","13.2","9.6","-9.2","1.4","-1.4","-2.1","1.9"], - ["750","1507","1","43.2","12.3","9.6","-9.2","1.5","-1.5","-2.2","2.1"], - ["800","1500","1","43.2","11.5","9.7","-9.3","1.6","-1.6","-2.4","2.2"], - ["850","1494","1","43.2","10.9","9.7","-9.3","1.7","-1.7","-2.5","2.4"], - ["900","1488","1","43.2","10.3","9.8","-9.4","1.8","-1.8","-2.7","2.5"], - ["950","1481","1","43.1","9.8","9.9","-9.4","1.9","-1.9","-2.8","2.7"], - ["1000","1475","1","43.1","9.3","9.9","-9.5","2.0","-2.0","-3.0","2.8"], - ["1050","1468","1","43.1","8.9","10.0","-9.5","2.1","-2.1","-3.1","2.9"], - ["1100","1462","1","43.0","8.5","10.1","-9.6","2.2","-2.2","-3.3","3.1"], - ["1150","1455","1","43.0","8.1","10.1","-9.6","2.3","-2.3","-3.4","3.2"], - ["1200","1449","1","43.0","7.8","10.2","-9.7","2.4","-2.4","-3.6","3.4"], - ["1250","1442","2","42.9","7.5","10.3","-9.8","2.5","-2.5","-3.7","3.5"], - ["1300","1436","2","42.9","7.2","10.3","-9.8","2.6","-2.6","-3.9","3.6"], - ["1350","1429","2","42.8","6.9","10.4","-9.9","2.7","-2.7","-4.0","3.8"], - ["1400","1422","2","42.8","6.7","10.5","-10.0","2.8","-2.8","-4.2","3.9"], - ["1450","1416","2","42.7","6.5","10.5","-10.0","2.9","-2.9","-4.4","4.1"], - ["1500","1409","2","42.7","6.2","10.6","-10.1","3.0","-3.0","-4.5","4.2"], - ["1550","1402","2","42.6","6.0","10.7","-10.2","3.0","-3.1","-4.7","4.4"], - ["1600","1395","2","42.6","5.9","10.8","-10.2","3.1","-3.2","-4.8","4.5"], - ["1650","1388","2","42.5","5.7","10.8","-10.3","3.2","-3.3","-5.0","4.7"], - ["1700","1381","2","42.4","5.5","10.9","-10.4","3.3","-3.3","-5.1","4.8"], - ["1750","1374","2","42.4","5.4","11.0","-10.4","3.4","-3.4","-5.3","4.9"], - ["1800","1367","2","42.3","5.2","11.0","-10.5","3.5","-3.5","-5.4","5.1"], - ["1850","1360","3","42.2","5.1","11.1","-10.6","3.6","-3.6","-5.6","5.2"], - ["1900","1353","3","42.2","5.0","11.2","-10.6","3.7","-3.7","-5.8","5.4"], - ["1950","1346","3","42.1","4.8","11.3","-10.7","3.8","-3.8","-5.9","5.5"], - ["2000","1338","3","42.0","4.7","11.3","-10.8","3.9","-3.9","-6.1","5.7"], - ["2050","1331","3","41.9","4.6","11.4","-10.9","4.0","-4.0","-6.2","5.8"], - ["2100","1323","3","41.9","4.5","11.5","-10.9","4.1","-4.1","-6.4","6.0"], - ["2150","1316","3","41.8","4.4","11.6","-11.0","4.2","-4.2","-6.5","6.1"], - ["2200","1308","3","41.7","4.3","11.6","-11.1","4.3","-4.3","-6.7","6.3"], - ["2250","1301","3","41.6","4.2","11.7","-11.1","4.4","-4.4","-6.9","6.4"], - ["2300","1293","4","41.5","4.1","11.8","-11.2","4.5","-4.5","-7.0","6.6"], - ["2350","1285","4","41.4","4.0","11.9","-11.3","4.6","-4.6","-7.2","6.7"], - ["2400","1277","4","41.3","3.9","11.9","-11.3","4.7","-4.7","-7.3","6.9"], - ["2450","1269","4","41.2","3.8","12.0","-11.4","4.8","-4.8","-7.5","7.0"], - ["2500","1261","4","41.1","3.8","12.1","-11.5","4.9","-4.9","-7.7","7.1"], - ["2550","1253","4","41.0","3.7","12.1","-11.6","5.0","-5.0","-7.8","7.3"], - ["2600","1244","4","40.9","3.6","12.2","-11.6","5.1","-5.1","-8.0","7.4"], - ["2650","1236","5","40.7","3.5","12.3","-11.7","5.2","-5.2","-8.1","7.6"], - ["2700","1227","5","40.6","3.5","12.3","-11.8","5.3","-5.3","-8.3","7.7"], - ["2750","1219","5","40.5","3.4","12.4","-11.8","5.4","-5.4","-8.4","7.9"], - ["2800","1210","5","40.3","3.3","12.5","-11.9","5.5","-5.5","-8.6","8.0"], - ["2850","1201","5","40.2","3.3","12.5","-12.0","5.6","-5.6","-8.8","8.2"], - ["2900","1192","6","40.1","3.2","12.6","-12.0","5.7","-5.7","-8.9","8.3"], - ["2950","1182","6","39.9","3.1","12.6","-12.1","5.8","-5.8","-9.1","8.5"], - ["3000","1173","6","39.7","3.1","12.7","-12.2","5.9","-5.9","-9.2","8.6"], - ["3050","1163","6","39.6","3.0","12.7","-12.2","6.0","-6.0","-9.4","8.8"], - ["3100","1153","7","39.4","3.0","12.8","-12.3","6.1","-6.0","-9.5","8.9"], - ["3150","1143","7","39.2","2.9","12.8","-12.3","6.1","-6.2","-9.7","9.0"], - ["3200","1133","7","39.0","2.9","12.9","-12.4","6.3","-6.2","-9.8","9.2"], - ["3250","1122","8","38.8","2.8","12.9","-12.4","6.4","-6.3","-10.0","9.3"], - ["3300","1111","8","38.6","2.7","13.0","-12.5","6.4","-6.4","-10.2","9.5"], - ["3350","1100","9","38.4","2.7","13.0","-12.5","6.5","-6.5","-10.3","9.6"], - ["3400","1088","9","38.2","2.6","13.0","-12.5","6.6","-6.6","-10.5","9.8"], - ["3450","1076","10","38.0","2.6","13.0","-12.6","6.7","-6.7","-10.6","9.9"], - ["3500","1064","10","37.7","2.5","13.1","-12.6","6.9","-6.8","-10.7","10.0"], - ["3550","1051","11","37.4","2.5","13.1","-12.6","7.0","-6.9","-10.9","10.2"], - ["3600","1038","12","37.2","2.4","13.1","-12.6","7.0","-7.0","-11.0","10.3"], - ["3650","1024","13","36.9","2.4","13.1","-12.6","7.2","-7.1","-11.2","10.4"], - ["3700","1009","14","36.5","2.3","13.1","-12.6","7.2","-7.3","-11.3","10.5"], - ["3750","993","15","36.2","2.3","13.0","-12.6","7.4","-7.3","-11.4","10.7"], - ["3800","977","16","35.8","2.2","13.0","-12.6","7.5","-7.5","-11.6","10.8"], - ["3850","959","18","35.4","2.2","13.0","-12.6","7.6","-7.6","-11.7","10.9"], - ["3900","940","20","34.9","2.1","12.9","-12.5","7.7","-7.7","-11.8","11.0"], - ["3950","918","23","34.4","2.0","12.8","-12.4","7.8","-7.8","-11.9","11.1"], - ["4000","893","28","33.7","2.0","12.7","-12.3","7.9","-7.9","-12.0","11.2"], - ["4050","863","35","32.9","1.9","12.5","-12.1","8.0","-8.0","-12.0","11.2"], - ["4100","821","50","31.8","1.8","12.1","-11.8","8.2","-8.2","-12.0","11.2"] - ] - }; -case ((abs(_muzzleVelocity - 300) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { - [ - ["800","1527","0","51.4","18.2","15.0","-14.6","1.4","-1.4","-3.1","2.9"], - ["850","1522","1","51.4","17.2","15.0","-14.6","1.5","-1.5","-3.3","3.0"], - ["900","1517","1","51.4","16.2","15.0","-14.7","1.6","-1.6","-3.5","3.2"], - ["950","1513","1","51.4","15.4","15.1","-14.7","1.7","-1.6","-3.7","3.4"], - ["1000","1508","1","51.4","14.7","15.2","-14.8","1.7","-1.7","-3.9","3.6"], - ["1050","1503","1","51.3","14.0","15.2","-14.8","1.8","-1.8","-4.1","3.8"], - ["1100","1498","1","51.3","13.4","15.3","-14.8","1.9","-1.9","-4.3","3.9"], - ["1150","1494","1","51.3","12.8","15.3","-14.9","2.0","-2.0","-4.5","4.1"], - ["1200","1489","1","51.3","12.3","15.4","-14.9","2.1","-2.1","-4.7","4.3"], - ["1250","1484","1","51.2","11.8","15.5","-15.0","2.2","-2.2","-4.9","4.5"], - ["1300","1479","1","51.2","11.3","15.5","-15.0","2.3","-2.3","-5.1","4.7"], - ["1350","1475","1","51.2","10.9","15.6","-15.1","2.3","-2.3","-5.3","4.8"], - ["1400","1470","1","51.2","10.6","15.6","-15.1","2.4","-2.4","-5.5","5.0"], - ["1450","1465","1","51.1","10.2","15.7","-15.2","2.5","-2.5","-5.7","5.2"], - ["1500","1460","1","51.1","9.9","15.8","-15.3","2.6","-2.6","-5.9","5.4"], - ["1550","1455","1","51.1","9.5","15.8","-15.3","2.7","-2.7","-6.1","5.6"], - ["1600","1451","1","51.0","9.3","15.9","-15.4","2.8","-2.8","-6.3","5.8"], - ["1650","1446","1","51.0","9.0","16.0","-15.4","2.9","-2.9","-6.5","5.9"], - ["1700","1441","1","51.0","8.7","16.0","-15.5","3.0","-2.9","-6.7","6.1"], - ["1750","1436","1","50.9","8.5","16.1","-15.6","3.0","-3.0","-6.9","6.3"], - ["1800","1431","1","50.9","8.2","16.2","-15.6","3.1","-3.1","-7.1","6.5"], - ["1850","1426","1","50.8","8.0","16.2","-15.7","3.2","-3.2","-7.3","6.7"], - ["1900","1421","1","50.8","7.8","16.3","-15.8","3.3","-3.3","-7.5","6.9"], - ["1950","1416","1","50.7","7.6","16.4","-15.8","3.4","-3.4","-7.7","7.1"], - ["2000","1411","1","50.7","7.4","16.4","-15.9","3.5","-3.5","-7.9","7.2"], - ["2050","1406","1","50.7","7.3","16.5","-15.9","3.6","-3.5","-8.1","7.4"], - ["2100","1401","1","50.6","7.1","16.6","-16.0","3.6","-3.6","-8.3","7.6"], - ["2150","1396","1","50.6","6.9","16.6","-16.1","3.7","-3.7","-8.5","7.8"], - ["2200","1390","1","50.5","6.8","16.7","-16.1","3.8","-3.8","-8.7","8.0"], - ["2250","1385","2","50.5","6.6","16.8","-16.2","3.9","-3.9","-8.9","8.2"], - ["2300","1380","2","50.4","6.5","16.9","-16.3","4.0","-4.0","-9.1","8.3"], - ["2350","1375","2","50.3","6.3","16.9","-16.4","4.1","-4.1","-9.3","8.5"], - ["2400","1370","2","50.3","6.2","17.0","-16.4","4.2","-4.1","-9.5","8.7"], - ["2450","1364","2","50.2","6.1","17.1","-16.5","4.2","-4.2","-9.7","8.9"], - ["2500","1359","2","50.2","6.0","17.1","-16.6","4.3","-4.3","-9.9","9.1"], - ["2550","1354","2","50.1","5.8","17.2","-16.6","4.4","-4.4","-10.1","9.3"], - ["2600","1348","2","50.0","5.7","17.3","-16.7","4.5","-4.5","-10.3","9.5"], - ["2650","1343","2","50.0","5.6","17.3","-16.8","4.6","-4.6","-10.5","9.6"], - ["2700","1337","2","49.9","5.5","17.4","-16.8","4.7","-4.7","-10.7","9.8"], - ["2750","1332","2","49.8","5.4","17.5","-16.9","4.8","-4.7","-10.9","10.0"], - ["2800","1326","2","49.8","5.3","17.6","-17.0","4.8","-4.8","-11.1","10.2"], - ["2850","1321","2","49.7","5.2","17.6","-17.0","4.9","-4.9","-11.3","10.4"], - ["2900","1315","2","49.6","5.1","17.7","-17.1","5.0","-5.0","-11.5","10.6"], - ["2950","1309","2","49.5","5.0","17.8","-17.2","5.1","-5.1","-11.7","10.8"], - ["3000","1304","2","49.5","5.0","17.8","-17.3","5.2","-5.2","-11.9","10.9"], - ["3050","1298","2","49.4","4.9","17.9","-17.3","5.3","-5.2","-12.1","11.1"], - ["3100","1292","2","49.3","4.8","18.0","-17.4","5.3","-5.3","-12.3","11.3"], - ["3150","1286","3","49.2","4.7","18.0","-17.5","5.4","-5.4","-12.5","11.5"], - ["3200","1280","3","49.1","4.6","18.1","-17.5","5.5","-5.5","-12.7","11.7"], - ["3250","1274","3","49.0","4.6","18.2","-17.6","5.6","-5.6","-12.9","11.9"], - ["3300","1268","3","48.9","4.5","18.2","-17.7","5.7","-5.6","-13.1","12.1"], - ["3350","1262","3","48.8","4.4","18.3","-17.7","5.8","-5.7","-13.3","12.2"], - ["3400","1256","3","48.7","4.4","18.4","-17.8","5.9","-5.8","-13.5","12.4"], - ["3450","1250","3","48.6","4.3","18.4","-17.9","5.9","-5.9","-13.8","12.6"], - ["3500","1244","3","48.5","4.2","18.5","-17.9","6.0","-6.0","-14.0","12.8"], - ["3550","1237","3","48.4","4.2","18.6","-18.0","6.1","-6.1","-14.2","13.0"], - ["3600","1231","3","48.3","4.1","18.6","-18.1","6.2","-6.2","-14.4","13.2"], - ["3650","1224","3","48.2","4.0","18.7","-18.1","6.3","-6.3","-14.6","13.4"], - ["3700","1218","3","48.1","4.0","18.7","-18.2","6.4","-6.3","-14.8","13.5"], - ["3750","1211","4","48.0","3.9","18.8","-18.2","6.5","-6.4","-15.0","13.7"], - ["3800","1205","4","47.8","3.9","18.8","-18.3","6.5","-6.5","-15.2","13.9"], - ["3850","1198","4","47.7","3.8","18.9","-18.4","6.6","-6.6","-15.4","14.1"], - ["3900","1191","4","47.6","3.7","18.9","-18.4","6.7","-6.7","-15.6","14.3"], - ["3950","1184","4","47.5","3.7","19.0","-18.5","6.8","-6.8","-15.8","14.5"], - ["4000","1177","4","47.3","3.6","19.1","-18.5","6.9","-6.8","-16.0","14.7"], - ["4050","1170","4","47.2","3.6","19.1","-18.6","7.0","-6.9","-16.2","14.8"], - ["4100","1163","4","47.0","3.5","19.1","-18.6","7.1","-7.0","-16.4","15.0"], - ["4150","1155","5","46.9","3.5","19.2","-18.7","7.1","-7.1","-16.6","15.2"], - ["4200","1148","5","46.7","3.4","19.2","-18.7","7.2","-7.2","-16.8","15.4"], - ["4250","1140","5","46.6","3.4","19.3","-18.8","7.3","-7.3","-17.0","15.6"], - ["4300","1132","5","46.4","3.3","19.3","-18.8","7.4","-7.4","-17.2","15.7"], - ["4350","1124","5","46.2","3.3","19.3","-18.8","7.5","-7.5","-17.4","15.9"], - ["4400","1116","5","46.1","3.2","19.4","-18.9","7.6","-7.5","-17.6","16.1"], - ["4450","1108","6","45.9","3.2","19.4","-18.9","7.7","-7.6","-17.8","16.3"], - ["4500","1100","6","45.7","3.1","19.4","-19.0","7.8","-7.7","-17.9","16.4"], - ["4550","1091","6","45.5","3.1","19.4","-19.0","7.8","-7.8","-18.1","16.6"], - ["4600","1083","6","45.3","3.1","19.5","-19.0","7.9","-7.9","-18.3","16.8"], - ["4650","1074","7","45.1","3.0","19.5","-19.0","8.0","-8.0","-18.5","17.0"], - ["4700","1065","7","44.9","3.0","19.5","-19.1","8.1","-8.1","-18.7","17.1"], - ["4750","1055","7","44.6","2.9","19.5","-19.1","8.2","-8.2","-18.9","17.3"], - ["4800","1046","8","44.4","2.9","19.5","-19.1","8.3","-8.3","-19.1","17.5"], - ["4850","1036","8","44.2","2.8","19.5","-19.1","8.4","-8.3","-19.2","17.6"], - ["4900","1025","8","43.9","2.8","19.5","-19.1","8.5","-8.4","-19.4","17.8"], - ["4950","1015","9","43.6","2.7","19.5","-19.1","8.6","-8.5","-19.6","18.0"], - ["5000","1004","9","43.3","2.7","19.4","-19.1","8.7","-8.6","-19.8","18.1"], - ["5050","992","10","43.0","2.6","19.4","-19.0","8.8","-8.7","-19.9","18.3"], - ["5100","980","11","42.7","2.6","19.4","-19.0","8.9","-8.8","-20.1","18.4"], - ["5150","968","11","42.4","2.5","19.3","-18.9","9.0","-8.9","-20.2","18.6"], - ["5200","955","12","42.0","2.5","19.2","-18.9","9.1","-9.0","-20.4","18.7"], - ["5250","941","13","41.6","2.4","19.2","-18.8","9.1","-9.1","-20.6","18.8"], - ["5300","926","15","41.2","2.4","19.1","-18.8","9.2","-9.2","-20.7","19.0"], - ["5350","910","16","40.7","2.3","19.0","-18.6","9.4","-9.3","-20.8","19.1"], - ["5400","892","18","40.2","2.3","18.8","-18.5","9.5","-9.4","-20.9","19.2"], - ["5450","872","21","39.6","2.2","18.6","-18.3","9.6","-9.5","-21.0","19.3"], - ["5500","849","26","38.8","2.1","18.4","-18.1","9.7","-9.7","-21.1","19.3"], - ["5550","820","33","37.9","2.1","18.0","-17.8","9.8","-9.8","-21.1","19.4"] - ] - }; default {systemChat "Error: MuzzleVelocity not found in LUT"; []}; }; \ No newline at end of file From c768ef65b2970c078d3486593ba885d610df37e1 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 17:07:55 -0500 Subject: [PATCH 011/276] Tweaking PowderEffects/AirRestitance --- .../fnc_dev_simulateCalcRangeTableLine.sqf | 14 +- .../functions/fnc_dev_simulateShot.sqf | 2 +- .../mk6mortar/functions/fnc_handleFired.sqf | 25 ++- .../fnc_rangeTablePreCalculatedValues.sqf | 144 +++++++++++------- addons/mk6mortar/script_component.hpp | 2 +- 5 files changed, 120 insertions(+), 67 deletions(-) diff --git a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf index 24ebd909ed5..b30c5429306 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf @@ -4,19 +4,19 @@ Name: AGM_Artillery_fnc_simulateCalcRangeTableLine Author: Pabst Mirror Description: - Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range. +Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range. Parameters: - 0: NUMBER - Muzzle Velocity - 1: NUMBER - Air Friction - 2: NUMBER - Range To Hit +0: NUMBER - Muzzle Velocity +1: NUMBER - Air Friction +2: NUMBER - Range To Hit Returns: - ARRAY - Range Table Line Data (see return line) +ARRAY - Range Table Line Data (see return line) Example: - [300, -0.0001, 3000] call AGM_Artillery_fnc_simulateCalcRangeTableLine -*/ +[300, -0.0001, 3000] call AGM_Artillery_fnc_simulateCalcRangeTableLine + */ #include "script_component.hpp" #define TIME_STEP (1/50) diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf index a6c3761acbb..170d23321a9 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -44,7 +44,7 @@ _wind = [_crosswind, _tailWind, 0]; _gravity = [0,0,-9.8]; _currentPos = [0,0,0]; -_muzzleVelocity = _muzzleVelocity * (1 + ((((_temp + 273.13) / 288.13 - 1) / 2.5 + 1 ) - 1)); +_muzzleVelocity = _muzzleVelocity * (((_temp + 273.13) / 288.13 - 1) / 30 + 1); _currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _angleDeg)]; _currentTime = 0; diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 41929110d76..ae20b62b64a 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -29,6 +29,27 @@ if (!GVAR(airResistanceEnabled)) exitWith {}; if (_unit distance ACE_player > 3000) exitWith {false}; // Large enough distance to not simulate any wind deflection. if (!GVAR(EnableForAI) && !([_unit] call EFUNC(common,isPlayer))) exitWith {false}; +//Hack Until these are intergrated: +if (isNil QEGVAR(weather,currentRelativeDensity)) then { + EGVAR(weather,currentRelativeDensity) = 1; +}; +if (isNil QEGVAR(weather,currentTemperature)) then { + EGVAR(weather,currentTemperature) = 20; +}; + +//powder effects: +_temperature = EGVAR(weather,currentTemperature); +_newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 30 + 1); +if (_newMuzzleVelocityCoefficent != 1) then { + _bulletVelocity = velocity _projectile; + systemChat format ["Start Vel: %1", _bulletVelocity]; + _bulletSpeed = vectorMagnitude _bulletVelocity; + _bulletVelocity = (vectorNormalized _bulletVelocity) vectorMultiply (_bulletSpeed * _newMuzzleVelocityCoefficent); + systemChat format ["New Vel: %1", _bulletVelocity]; + _projectile setVelocity _bulletVelocity; + _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; +}; + // if (_bullet isKindOf "BulletBase") then { [{ @@ -54,7 +75,7 @@ if (!GVAR(EnableForAI) && !([_unit] call EFUNC(common,isPlayer))) exitWith {fals // _accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef); // _bulletVelocity = _bulletVelocity vectorDiff _accelRef; - _drag = _deltaT * _airFriction * _trueSpeed; + _drag = _deltaT * _airFriction * _trueSpeed * EGVAR(weather,currentRelativeDensity); _accel = _trueVelocity vectorMultiply (_drag); _bulletVelocity = _bulletVelocity vectorAdd _accel; @@ -62,6 +83,6 @@ if (!GVAR(EnableForAI) && !([_unit] call EFUNC(common,isPlayer))) exitWith {fals _shell setVelocity _bulletVelocity; // TODO expand with advanced ballistics functionality. -}, 0, [_projectile, -0.0001, time]] call CBA_fnc_addPerFrameHandler; +}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time]] call CBA_fnc_addPerFrameHandler; // }; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index d11b9efdeb1..3479e8cfa76 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -30,65 +30,97 @@ case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - -0.0001) < 0 ["450","979","113","11.6","0.8","0.6","-0.5","1.2","-1.2","-0.2","0.2"] ] }; - +case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { + [ + ["250","1527","2","27.2","9.9","2.6","-2.4","0.6","-0.6","-0.3","0.3"], + ["300","1512","2","27.2","8.3","2.7","-2.4","0.7","-0.7","-0.4","0.4"], + ["350","1497","3","27.1","7.1","2.7","-2.5","0.8","-0.9","-0.5","0.4"], + ["400","1482","3","27.1","6.2","2.7","-2.5","1.0","-1.0","-0.5","0.5"], + ["450","1467","3","27.0","5.6","2.8","-2.5","1.1","-1.1","-0.6","0.6"], + ["500","1451","4","27.0","5.0","2.9","-2.6","1.2","-1.2","-0.6","0.6"], + ["550","1436","4","26.9","4.6","2.9","-2.6","1.3","-1.3","-0.7","0.7"], + ["600","1420","5","26.8","4.2","3.0","-2.7","1.4","-1.5","-0.8","0.8"], + ["650","1404","5","26.8","3.9","3.0","-2.7","1.6","-1.6","-0.9","0.8"], + ["700","1388","6","26.7","3.6","3.1","-2.8","1.7","-1.7","-0.9","0.9"], + ["750","1372","6","26.6","3.4","3.2","-2.8","1.8","-1.8","-1.0","1.0"], + ["800","1355","7","26.5","3.2","3.2","-2.9","1.9","-1.9","-1.1","1.1"], + ["850","1338","8","26.4","3.0","3.3","-2.9","2.0","-2.1","-1.1","1.1"], + ["900","1321","8","26.2","2.8","3.4","-3.0","2.2","-2.2","-1.2","1.2"], + ["950","1303","9","26.1","2.7","3.4","-3.1","2.3","-2.3","-1.3","1.2"], + ["1000","1285","10","26.0","2.6","3.5","-3.1","2.4","-2.4","-1.4","1.3"], + ["1050","1266","11","25.8","2.4","3.5","-3.2","2.5","-2.5","-1.4","1.4"], + ["1100","1247","12","25.7","2.3","3.6","-3.3","2.6","-2.7","-1.5","1.4"], + ["1150","1228","13","25.5","2.2","3.7","-3.3","2.7","-2.8","-1.6","1.5"], + ["1200","1207","14","25.3","2.1","3.7","-3.4","2.9","-2.9","-1.7","1.6"], + ["1250","1186","15","25.1","2.0","3.8","-3.4","3.0","-3.0","-1.7","1.7"], + ["1300","1163","17","24.8","1.9","3.8","-3.5","3.1","-3.1","-1.8","1.7"], + ["1350","1140","19","24.6","1.9","3.9","-3.5","3.2","-3.2","-1.9","1.8"], + ["1400","1115","21","24.3","1.8","3.9","-3.6","3.4","-3.4","-1.9","1.9"], + ["1450","1088","24","23.9","1.7","4.0","-3.6","3.5","-3.5","-2.0","1.9"], + ["1500","1060","27","23.6","1.6","4.0","-3.7","3.6","-3.6","-2.1","2.0"], + ["1550","1028","32","23.1","1.5","4.0","-3.7","3.7","-3.7","-2.1","2.1"], + ["1600","991","38","22.6","1.5","4.0","-3.7","3.8","-3.9","-2.2","2.1"], + ["1650","947","49","21.9","1.4","4.0","-3.7","3.9","-4.0","-2.3","2.2"], + ["1700","888","71","21.0","1.3","3.9","-3.6","4.1","-4.1","-2.3","2.2"] + ] + }; case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["450","1527","1","37.3","13.4","6.3","-6.0","1.0","-1.0","-1.0","1.0"], - ["500","1519","1","37.2","12.1","6.3","-6.0","1.1","-1.1","-1.1","1.1"], - ["550","1510","1","37.2","11.0","6.4","-6.0","1.2","-1.2","-1.3","1.2"], - ["600","1502","1","37.2","10.1","6.4","-6.1","1.3","-1.3","-1.4","1.3"], - ["650","1494","1","37.2","9.4","6.5","-6.1","1.4","-1.4","-1.5","1.4"], - ["700","1485","2","37.1","8.7","6.5","-6.2","1.5","-1.5","-1.6","1.5"], - ["750","1477","2","37.1","8.2","6.6","-6.2","1.6","-1.6","-1.7","1.6"], - ["800","1468","2","37.0","7.7","6.7","-6.3","1.7","-1.7","-1.8","1.8"], - ["850","1460","2","37.0","7.2","6.7","-6.3","1.8","-1.8","-2.0","1.9"], - ["900","1451","2","37.0","6.8","6.8","-6.4","1.9","-2.0","-2.1","2.0"], - ["950","1443","2","36.9","6.5","6.9","-6.4","2.0","-2.1","-2.2","2.1"], - ["1000","1434","2","36.9","6.2","6.9","-6.5","2.1","-2.2","-2.3","2.2"], - ["1050","1425","2","36.8","5.9","7.0","-6.6","2.2","-2.3","-2.5","2.3"], - ["1100","1417","3","36.8","5.6","7.1","-6.6","2.3","-2.4","-2.6","2.4"], - ["1150","1408","3","36.7","5.4","7.1","-6.7","2.5","-2.5","-2.7","2.5"], - ["1200","1399","3","36.6","5.2","7.2","-6.7","2.6","-2.6","-2.8","2.7"], - ["1250","1390","3","36.6","5.0","7.3","-6.8","2.7","-2.7","-2.9","2.8"], - ["1300","1381","3","36.5","4.8","7.4","-6.9","2.8","-2.8","-3.0","2.9"], - ["1350","1372","3","36.4","4.6","7.4","-6.9","2.9","-2.9","-3.2","3.0"], - ["1400","1362","4","36.4","4.4","7.5","-7.0","3.0","-3.0","-3.3","3.1"], - ["1450","1353","4","36.3","4.3","7.6","-7.1","3.1","-3.1","-3.4","3.2"], - ["1500","1344","4","36.2","4.2","7.7","-7.1","3.2","-3.2","-3.5","3.4"], - ["1550","1334","4","36.1","4.0","7.7","-7.2","3.3","-3.3","-3.7","3.5"], - ["1600","1324","4","36.0","3.9","7.8","-7.3","3.4","-3.4","-3.8","3.6"], - ["1650","1314","4","35.9","3.8","7.9","-7.3","3.5","-3.5","-3.9","3.7"], - ["1700","1304","5","35.8","3.7","7.9","-7.4","3.6","-3.6","-4.0","3.8"], - ["1750","1294","5","35.7","3.6","8.0","-7.5","3.7","-3.7","-4.2","3.9"], - ["1800","1284","5","35.6","3.5","8.1","-7.6","3.8","-3.9","-4.3","4.0"], - ["1850","1274","5","35.5","3.4","8.2","-7.6","3.9","-4.0","-4.4","4.2"], - ["1900","1263","6","35.4","3.3","8.2","-7.7","4.0","-4.1","-4.5","4.3"], - ["1950","1253","6","35.2","3.2","8.3","-7.8","4.1","-4.2","-4.7","4.4"], - ["2000","1242","6","35.1","3.1","8.4","-7.8","4.3","-4.3","-4.8","4.5"], - ["2050","1231","7","35.0","3.0","8.4","-7.9","4.4","-4.4","-4.9","4.7"], - ["2100","1219","7","34.8","2.9","8.5","-8.0","4.5","-4.5","-5.0","4.8"], - ["2150","1208","7","34.7","2.9","8.5","-8.0","4.6","-4.6","-5.2","4.9"], - ["2200","1196","8","34.5","2.8","8.6","-8.1","4.7","-4.7","-5.3","5.0"], - ["2250","1184","8","34.3","2.7","8.7","-8.2","4.8","-4.8","-5.4","5.1"], - ["2300","1171","9","34.2","2.7","8.7","-8.2","4.9","-4.9","-5.5","5.2"], - ["2350","1158","9","34.0","2.6","8.8","-8.3","5.0","-5.0","-5.7","5.4"], - ["2400","1145","10","33.8","2.5","8.8","-8.3","5.1","-5.1","-5.8","5.5"], - ["2450","1132","10","33.6","2.5","8.9","-8.4","5.2","-5.2","-5.9","5.6"], - ["2500","1118","11","33.3","2.4","8.9","-8.4","5.3","-5.3","-6.0","5.7"], - ["2550","1103","12","33.1","2.4","9.0","-8.5","5.4","-5.4","-6.1","5.8"], - ["2600","1088","13","32.8","2.3","9.0","-8.5","5.5","-5.5","-6.2","5.9"], - ["2650","1072","14","32.6","2.2","9.0","-8.6","5.6","-5.6","-6.4","6.0"], - ["2700","1056","15","32.3","2.2","9.0","-8.6","5.7","-5.8","-6.5","6.1"], - ["2750","1038","16","31.9","2.1","9.1","-8.6","5.9","-5.9","-6.6","6.3"], - ["2800","1020","18","31.6","2.1","9.1","-8.6","6.0","-6.0","-6.7","6.4"], - ["2850","1000","20","31.2","2.0","9.1","-8.6","6.1","-6.1","-6.8","6.5"], - ["2900","978","22","30.8","1.9","9.0","-8.6","6.2","-6.2","-6.9","6.5"], - ["2950","954","26","30.3","1.9","9.0","-8.6","6.3","-6.3","-7.0","6.6"], - ["3000","927","31","29.7","1.8","8.9","-8.5","6.4","-6.4","-7.1","6.7"], - ["3050","894","38","29.0","1.7","8.8","-8.4","6.5","-6.6","-7.2","6.8"], - ["3100","849","54","27.9","1.6","8.5","-8.3","6.6","-6.7","-7.2","6.8"] + ["450","1527","1","37.3","13.4","6.3","-6.0","0.2","-0.2","-1.0","1.0"], + ["500","1519","1","37.2","12.1","6.3","-6.0","0.2","-0.2","-1.1","1.1"], + ["550","1510","1","37.2","11.0","6.4","-6.0","0.2","-0.2","-1.3","1.2"], + ["600","1502","1","37.2","10.1","6.4","-6.1","0.2","-0.2","-1.4","1.3"], + ["650","1494","1","37.2","9.4","6.5","-6.1","0.2","-0.3","-1.5","1.4"], + ["700","1485","2","37.1","8.7","6.5","-6.2","0.2","-0.3","-1.6","1.5"], + ["750","1477","2","37.1","8.2","6.6","-6.2","0.3","-0.3","-1.7","1.6"], + ["800","1468","2","37.0","7.7","6.7","-6.3","0.3","-0.3","-1.8","1.8"], + ["850","1460","2","37.0","7.2","6.7","-6.3","0.3","-0.3","-2.0","1.9"], + ["900","1451","2","37.0","6.8","6.8","-6.4","0.3","-0.3","-2.1","2.0"], + ["950","1443","2","36.9","6.5","6.9","-6.4","0.3","-0.4","-2.2","2.1"], + ["1000","1434","2","36.9","6.2","6.9","-6.5","0.4","-0.4","-2.3","2.2"], + ["1050","1425","2","36.8","5.9","7.0","-6.6","0.4","-0.4","-2.5","2.3"], + ["1100","1417","3","36.8","5.6","7.1","-6.6","0.4","-0.4","-2.6","2.4"], + ["1150","1408","3","36.7","5.4","7.1","-6.7","0.4","-0.4","-2.7","2.5"], + ["1200","1399","3","36.6","5.2","7.2","-6.7","0.4","-0.4","-2.8","2.7"], + ["1250","1390","3","36.6","5.0","7.3","-6.8","0.4","-0.4","-2.9","2.8"], + ["1300","1381","3","36.5","4.8","7.4","-6.9","0.5","-0.5","-3.0","2.9"], + ["1350","1372","3","36.4","4.6","7.4","-6.9","0.5","-0.5","-3.2","3.0"], + ["1400","1362","4","36.4","4.4","7.5","-7.0","0.5","-0.5","-3.3","3.1"], + ["1450","1353","4","36.3","4.3","7.6","-7.1","0.5","-0.5","-3.4","3.2"], + ["1500","1344","4","36.2","4.2","7.7","-7.1","0.5","-0.5","-3.5","3.4"], + ["1550","1334","4","36.1","4.0","7.7","-7.2","0.6","-0.5","-3.7","3.5"], + ["1600","1324","4","36.0","3.9","7.8","-7.3","0.6","-0.6","-3.8","3.6"], + ["1650","1314","4","35.9","3.8","7.9","-7.3","0.6","-0.6","-3.9","3.7"], + ["1700","1304","5","35.8","3.7","7.9","-7.4","0.6","-0.6","-4.0","3.8"], + ["1750","1294","5","35.7","3.6","8.0","-7.5","0.6","-0.6","-4.2","3.9"], + ["1800","1284","5","35.6","3.5","8.1","-7.6","0.6","-0.7","-4.3","4.0"], + ["1850","1274","5","35.5","3.4","8.2","-7.6","0.7","-0.7","-4.4","4.2"], + ["1900","1263","6","35.4","3.3","8.2","-7.7","0.7","-0.7","-4.5","4.3"], + ["1950","1253","6","35.2","3.2","8.3","-7.8","0.7","-0.7","-4.7","4.4"], + ["2000","1242","6","35.1","3.1","8.4","-7.8","0.7","-0.7","-4.8","4.5"], + ["2050","1231","7","35.0","3.0","8.4","-7.9","0.7","-0.7","-4.9","4.7"], + ["2100","1219","7","34.8","2.9","8.5","-8.0","0.8","-0.7","-5.0","4.8"], + ["2150","1208","7","34.7","2.9","8.5","-8.0","0.8","-0.8","-5.2","4.9"], + ["2200","1196","8","34.5","2.8","8.6","-8.1","0.8","-0.8","-5.3","5.0"], + ["2250","1184","8","34.3","2.7","8.7","-8.2","0.8","-0.8","-5.4","5.1"], + ["2300","1171","9","34.2","2.7","8.7","-8.2","0.8","-0.8","-5.5","5.2"], + ["2350","1158","9","34.0","2.6","8.8","-8.3","0.8","-0.8","-5.7","5.4"], + ["2400","1145","10","33.8","2.5","8.8","-8.3","0.9","-0.8","-5.8","5.5"], + ["2450","1132","10","33.6","2.5","8.9","-8.4","0.9","-0.9","-5.9","5.6"], + ["2500","1118","11","33.3","2.4","8.9","-8.4","0.9","-0.9","-6.0","5.7"], + ["2550","1103","12","33.1","2.4","9.0","-8.5","0.9","-0.9","-6.1","5.8"], + ["2600","1088","13","32.8","2.3","9.0","-8.5","0.9","-0.9","-6.2","5.9"], + ["2650","1072","14","32.6","2.2","9.0","-8.6","0.9","-0.9","-6.4","6.0"], + ["2700","1056","15","32.3","2.2","9.0","-8.6","0.9","-1.0","-6.5","6.1"], + ["2750","1038","16","31.9","2.1","9.1","-8.6","1.0","-1.0","-6.6","6.3"], + ["2800","1020","18","31.6","2.1","9.1","-8.6","1.0","-1.0","-6.7","6.4"], + ["2850","1000","20","31.2","2.0","9.1","-8.6","1.0","-1.0","-6.8","6.5"], + ["2900","978","22","30.8","1.9","9.0","-8.6","1.0","-1.0","-6.9","6.5"], + ["2950","954","26","30.3","1.9","9.0","-8.6","1.0","-1.1","-7.0","6.6"], + ["3000","927","31","29.7","1.8","8.9","-8.5","1.1","-1.1","-7.1","6.7"], + ["3050","894","38","29.0","1.7","8.8","-8.4","1.1","-1.1","-7.2","6.8"], + ["3100","849","54","27.9","1.6","8.5","-8.3","1.1","-1.1","-7.2","6.8"] ] }; - default {systemChat "Error: MuzzleVelocity not found in LUT"; []}; }; \ No newline at end of file diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp index cb74d552ded..98b9d705e0b 100644 --- a/addons/mk6mortar/script_component.hpp +++ b/addons/mk6mortar/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\Addons\main\script_macros.hpp" -#define MK6_82mm_AIR_FRICTION -0.0001 \ No newline at end of file +#define MK6_82mm_AIR_FRICTION -0.000075 \ No newline at end of file From 5c5b8f656e726f68c5aff8917ec48d6239374f40 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 17:37:11 -0500 Subject: [PATCH 012/276] Tweak Air to match known data --- .../functions/fnc_dev_simulateShot.sqf | 2 +- .../mk6mortar/functions/fnc_handleFired.sqf | 6 +- .../fnc_rangeTablePreCalculatedValues.sqf | 189 +++++++++--------- addons/mk6mortar/script_component.hpp | 2 +- 4 files changed, 101 insertions(+), 98 deletions(-) diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf index 170d23321a9..42ceef21fd0 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -44,7 +44,7 @@ _wind = [_crosswind, _tailWind, 0]; _gravity = [0,0,-9.8]; _currentPos = [0,0,0]; -_muzzleVelocity = _muzzleVelocity * (((_temp + 273.13) / 288.13 - 1) / 30 + 1); +_muzzleVelocity = _muzzleVelocity * (((_temp + 273.13) / 288.13 - 1) / 40 + 1); _currentVelocity = [0, (_muzzleVelocity * cos _angleDeg), (_muzzleVelocity * sin _angleDeg)]; _currentTime = 0; diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index ae20b62b64a..c57f7bc7fee 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -24,6 +24,7 @@ disableSerialization; PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); + if (!GVAR(airResistanceEnabled)) exitWith {}; if (_unit distance ACE_player > 3000) exitWith {false}; // Large enough distance to not simulate any wind deflection. @@ -39,13 +40,12 @@ if (isNil QEGVAR(weather,currentTemperature)) then { //powder effects: _temperature = EGVAR(weather,currentTemperature); -_newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 30 + 1); +_newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1); +systemChat str _newMuzzleVelocityCoefficent; if (_newMuzzleVelocityCoefficent != 1) then { _bulletVelocity = velocity _projectile; - systemChat format ["Start Vel: %1", _bulletVelocity]; _bulletSpeed = vectorMagnitude _bulletVelocity; _bulletVelocity = (vectorNormalized _bulletVelocity) vectorMultiply (_bulletSpeed * _newMuzzleVelocityCoefficent); - systemChat format ["New Vel: %1", _bulletVelocity]; _projectile setVelocity _bulletVelocity; _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; }; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index 3479e8cfa76..e836018b2e7 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -20,107 +20,110 @@ switch (true) do { case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["100","1493","9","14.0","3.7","0.4","-0.3","0.3","-0.3","-0.0","0.0"], - ["150","1438","14","13.9","2.5","0.4","-0.4","0.4","-0.4","-0.1","0.0"], - ["200","1381","20","13.8","1.9","0.5","-0.4","0.5","-0.5","-0.1","0.1"], - ["250","1321","27","13.6","1.5","0.5","-0.4","0.7","-0.7","-0.1","0.1"], - ["300","1256","36","13.3","1.3","0.6","-0.5","0.8","-0.8","-0.1","0.1"], - ["350","1183","49","12.9","1.1","0.6","-0.5","0.9","-0.9","-0.1","0.1"], - ["400","1097","70","12.4","0.9","0.6","-0.5","1.1","-1.1","-0.2","0.1"], - ["450","979","113","11.6","0.8","0.6","-0.5","1.2","-1.2","-0.2","0.2"] + ["100","1493","9","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"], + ["150","1438","14","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"], + ["200","1381","20","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"], + ["250","1321","27","13.6","1.5","0.5","-0.4","0.1","-0.1","-0.1","0.1"], + ["300","1256","36","13.3","1.3","0.6","-0.5","0.1","-0.1","-0.1","0.1"], + ["350","1183","49","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"], + ["400","1097","70","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"], + ["450","979","113","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"] ] }; case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["250","1527","2","27.2","9.9","2.6","-2.4","0.6","-0.6","-0.3","0.3"], - ["300","1512","2","27.2","8.3","2.7","-2.4","0.7","-0.7","-0.4","0.4"], - ["350","1497","3","27.1","7.1","2.7","-2.5","0.8","-0.9","-0.5","0.4"], - ["400","1482","3","27.1","6.2","2.7","-2.5","1.0","-1.0","-0.5","0.5"], - ["450","1467","3","27.0","5.6","2.8","-2.5","1.1","-1.1","-0.6","0.6"], - ["500","1451","4","27.0","5.0","2.9","-2.6","1.2","-1.2","-0.6","0.6"], - ["550","1436","4","26.9","4.6","2.9","-2.6","1.3","-1.3","-0.7","0.7"], - ["600","1420","5","26.8","4.2","3.0","-2.7","1.4","-1.5","-0.8","0.8"], - ["650","1404","5","26.8","3.9","3.0","-2.7","1.6","-1.6","-0.9","0.8"], - ["700","1388","6","26.7","3.6","3.1","-2.8","1.7","-1.7","-0.9","0.9"], - ["750","1372","6","26.6","3.4","3.2","-2.8","1.8","-1.8","-1.0","1.0"], - ["800","1355","7","26.5","3.2","3.2","-2.9","1.9","-1.9","-1.1","1.1"], - ["850","1338","8","26.4","3.0","3.3","-2.9","2.0","-2.1","-1.1","1.1"], - ["900","1321","8","26.2","2.8","3.4","-3.0","2.2","-2.2","-1.2","1.2"], - ["950","1303","9","26.1","2.7","3.4","-3.1","2.3","-2.3","-1.3","1.2"], - ["1000","1285","10","26.0","2.6","3.5","-3.1","2.4","-2.4","-1.4","1.3"], - ["1050","1266","11","25.8","2.4","3.5","-3.2","2.5","-2.5","-1.4","1.4"], - ["1100","1247","12","25.7","2.3","3.6","-3.3","2.6","-2.7","-1.5","1.4"], - ["1150","1228","13","25.5","2.2","3.7","-3.3","2.7","-2.8","-1.6","1.5"], - ["1200","1207","14","25.3","2.1","3.7","-3.4","2.9","-2.9","-1.7","1.6"], - ["1250","1186","15","25.1","2.0","3.8","-3.4","3.0","-3.0","-1.7","1.7"], - ["1300","1163","17","24.8","1.9","3.8","-3.5","3.1","-3.1","-1.8","1.7"], - ["1350","1140","19","24.6","1.9","3.9","-3.5","3.2","-3.2","-1.9","1.8"], - ["1400","1115","21","24.3","1.8","3.9","-3.6","3.4","-3.4","-1.9","1.9"], - ["1450","1088","24","23.9","1.7","4.0","-3.6","3.5","-3.5","-2.0","1.9"], - ["1500","1060","27","23.6","1.6","4.0","-3.7","3.6","-3.6","-2.1","2.0"], - ["1550","1028","32","23.1","1.5","4.0","-3.7","3.7","-3.7","-2.1","2.1"], - ["1600","991","38","22.6","1.5","4.0","-3.7","3.8","-3.9","-2.2","2.1"], - ["1650","947","49","21.9","1.4","4.0","-3.7","3.9","-4.0","-2.3","2.2"], - ["1700","888","71","21.0","1.3","3.9","-3.6","4.1","-4.1","-2.3","2.2"] + ["250","1527","2","27.2","9.9","2.6","-2.4","0.1","-0.0","-0.3","0.3"], + ["300","1512","2","27.2","8.3","2.7","-2.4","0.1","-0.1","-0.4","0.4"], + ["350","1497","3","27.1","7.1","2.7","-2.5","0.1","-0.1","-0.5","0.4"], + ["400","1482","3","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"], + ["450","1467","3","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"], + ["500","1451","4","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"], + ["550","1436","4","26.9","4.6","2.9","-2.6","0.1","-0.1","-0.7","0.7"], + ["600","1420","5","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"], + ["650","1404","5","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"], + ["700","1388","6","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"], + ["750","1372","6","26.6","3.4","3.2","-2.8","0.2","-0.1","-1.0","1.0"], + ["800","1355","7","26.5","3.2","3.2","-2.9","0.2","-0.1","-1.1","1.1"], + ["850","1338","8","26.4","3.0","3.3","-2.9","0.2","-0.2","-1.1","1.1"], + ["900","1321","8","26.2","2.8","3.4","-3.0","0.2","-0.2","-1.2","1.2"], + ["950","1303","9","26.1","2.7","3.4","-3.1","0.2","-0.2","-1.3","1.2"], + ["1000","1285","10","26.0","2.6","3.5","-3.1","0.2","-0.2","-1.4","1.3"], + ["1050","1266","11","25.8","2.4","3.5","-3.2","0.2","-0.2","-1.4","1.4"], + ["1100","1247","12","25.7","2.3","3.6","-3.3","0.2","-0.2","-1.5","1.4"], + ["1150","1228","13","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"], + ["1200","1207","14","25.3","2.1","3.7","-3.4","0.2","-0.3","-1.7","1.6"], + ["1250","1186","15","25.1","2.0","3.8","-3.4","0.2","-0.3","-1.7","1.7"], + ["1300","1163","17","24.8","1.9","3.8","-3.5","0.3","-0.3","-1.8","1.7"], + ["1350","1140","19","24.6","1.9","3.9","-3.5","0.3","-0.3","-1.9","1.8"], + ["1400","1115","21","24.3","1.8","3.9","-3.6","0.3","-0.3","-1.9","1.9"], + ["1450","1088","24","23.9","1.7","4.0","-3.6","0.3","-0.3","-2.0","1.9"], + ["1500","1060","27","23.6","1.6","4.0","-3.7","0.3","-0.3","-2.1","2.0"], + ["1550","1028","32","23.1","1.5","4.0","-3.7","0.3","-0.3","-2.1","2.1"], + ["1600","991","38","22.6","1.5","4.0","-3.7","0.3","-0.3","-2.2","2.1"], + ["1650","947","49","21.9","1.4","4.0","-3.7","0.3","-0.3","-2.3","2.2"], + ["1700","888","71","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"] ] }; case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["450","1527","1","37.3","13.4","6.3","-6.0","0.2","-0.2","-1.0","1.0"], - ["500","1519","1","37.2","12.1","6.3","-6.0","0.2","-0.2","-1.1","1.1"], - ["550","1510","1","37.2","11.0","6.4","-6.0","0.2","-0.2","-1.3","1.2"], - ["600","1502","1","37.2","10.1","6.4","-6.1","0.2","-0.2","-1.4","1.3"], - ["650","1494","1","37.2","9.4","6.5","-6.1","0.2","-0.3","-1.5","1.4"], - ["700","1485","2","37.1","8.7","6.5","-6.2","0.2","-0.3","-1.6","1.5"], - ["750","1477","2","37.1","8.2","6.6","-6.2","0.3","-0.3","-1.7","1.6"], - ["800","1468","2","37.0","7.7","6.7","-6.3","0.3","-0.3","-1.8","1.8"], - ["850","1460","2","37.0","7.2","6.7","-6.3","0.3","-0.3","-2.0","1.9"], - ["900","1451","2","37.0","6.8","6.8","-6.4","0.3","-0.3","-2.1","2.0"], - ["950","1443","2","36.9","6.5","6.9","-6.4","0.3","-0.4","-2.2","2.1"], - ["1000","1434","2","36.9","6.2","6.9","-6.5","0.4","-0.4","-2.3","2.2"], - ["1050","1425","2","36.8","5.9","7.0","-6.6","0.4","-0.4","-2.5","2.3"], - ["1100","1417","3","36.8","5.6","7.1","-6.6","0.4","-0.4","-2.6","2.4"], - ["1150","1408","3","36.7","5.4","7.1","-6.7","0.4","-0.4","-2.7","2.5"], - ["1200","1399","3","36.6","5.2","7.2","-6.7","0.4","-0.4","-2.8","2.7"], - ["1250","1390","3","36.6","5.0","7.3","-6.8","0.4","-0.4","-2.9","2.8"], - ["1300","1381","3","36.5","4.8","7.4","-6.9","0.5","-0.5","-3.0","2.9"], - ["1350","1372","3","36.4","4.6","7.4","-6.9","0.5","-0.5","-3.2","3.0"], - ["1400","1362","4","36.4","4.4","7.5","-7.0","0.5","-0.5","-3.3","3.1"], - ["1450","1353","4","36.3","4.3","7.6","-7.1","0.5","-0.5","-3.4","3.2"], - ["1500","1344","4","36.2","4.2","7.7","-7.1","0.5","-0.5","-3.5","3.4"], - ["1550","1334","4","36.1","4.0","7.7","-7.2","0.6","-0.5","-3.7","3.5"], - ["1600","1324","4","36.0","3.9","7.8","-7.3","0.6","-0.6","-3.8","3.6"], - ["1650","1314","4","35.9","3.8","7.9","-7.3","0.6","-0.6","-3.9","3.7"], - ["1700","1304","5","35.8","3.7","7.9","-7.4","0.6","-0.6","-4.0","3.8"], - ["1750","1294","5","35.7","3.6","8.0","-7.5","0.6","-0.6","-4.2","3.9"], - ["1800","1284","5","35.6","3.5","8.1","-7.6","0.6","-0.7","-4.3","4.0"], - ["1850","1274","5","35.5","3.4","8.2","-7.6","0.7","-0.7","-4.4","4.2"], - ["1900","1263","6","35.4","3.3","8.2","-7.7","0.7","-0.7","-4.5","4.3"], - ["1950","1253","6","35.2","3.2","8.3","-7.8","0.7","-0.7","-4.7","4.4"], - ["2000","1242","6","35.1","3.1","8.4","-7.8","0.7","-0.7","-4.8","4.5"], - ["2050","1231","7","35.0","3.0","8.4","-7.9","0.7","-0.7","-4.9","4.7"], - ["2100","1219","7","34.8","2.9","8.5","-8.0","0.8","-0.7","-5.0","4.8"], - ["2150","1208","7","34.7","2.9","8.5","-8.0","0.8","-0.8","-5.2","4.9"], - ["2200","1196","8","34.5","2.8","8.6","-8.1","0.8","-0.8","-5.3","5.0"], - ["2250","1184","8","34.3","2.7","8.7","-8.2","0.8","-0.8","-5.4","5.1"], - ["2300","1171","9","34.2","2.7","8.7","-8.2","0.8","-0.8","-5.5","5.2"], - ["2350","1158","9","34.0","2.6","8.8","-8.3","0.8","-0.8","-5.7","5.4"], - ["2400","1145","10","33.8","2.5","8.8","-8.3","0.9","-0.8","-5.8","5.5"], - ["2450","1132","10","33.6","2.5","8.9","-8.4","0.9","-0.9","-5.9","5.6"], - ["2500","1118","11","33.3","2.4","8.9","-8.4","0.9","-0.9","-6.0","5.7"], - ["2550","1103","12","33.1","2.4","9.0","-8.5","0.9","-0.9","-6.1","5.8"], - ["2600","1088","13","32.8","2.3","9.0","-8.5","0.9","-0.9","-6.2","5.9"], - ["2650","1072","14","32.6","2.2","9.0","-8.6","0.9","-0.9","-6.4","6.0"], - ["2700","1056","15","32.3","2.2","9.0","-8.6","0.9","-1.0","-6.5","6.1"], - ["2750","1038","16","31.9","2.1","9.1","-8.6","1.0","-1.0","-6.6","6.3"], - ["2800","1020","18","31.6","2.1","9.1","-8.6","1.0","-1.0","-6.7","6.4"], - ["2850","1000","20","31.2","2.0","9.1","-8.6","1.0","-1.0","-6.8","6.5"], - ["2900","978","22","30.8","1.9","9.0","-8.6","1.0","-1.0","-6.9","6.5"], - ["2950","954","26","30.3","1.9","9.0","-8.6","1.0","-1.1","-7.0","6.6"], - ["3000","927","31","29.7","1.8","8.9","-8.5","1.1","-1.1","-7.1","6.7"], - ["3050","894","38","29.0","1.7","8.8","-8.4","1.1","-1.1","-7.2","6.8"], - ["3100","849","54","27.9","1.6","8.5","-8.3","1.1","-1.1","-7.2","6.8"] + ["450","1527","1","37.3","13.4","6.3","-6.0","0.1","-0.1","-1.0","1.0"], + ["500","1519","1","37.2","12.1","6.3","-6.0","0.1","-0.1","-1.1","1.1"], + ["550","1510","1","37.2","11.0","6.4","-6.0","0.1","-0.1","-1.3","1.2"], + ["600","1502","1","37.2","10.1","6.4","-6.1","0.1","-0.1","-1.4","1.3"], + ["650","1494","1","37.2","9.4","6.5","-6.1","0.1","-0.1","-1.5","1.4"], + ["700","1485","2","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"], + ["750","1477","2","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"], + ["800","1468","2","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"], + ["850","1460","2","37.0","7.2","6.7","-6.3","0.2","-0.1","-2.0","1.9"], + ["900","1451","2","37.0","6.8","6.8","-6.4","0.1","-0.2","-2.1","2.0"], + ["950","1443","2","36.9","6.5","6.9","-6.4","0.2","-0.2","-2.2","2.1"], + ["1000","1434","2","36.9","6.2","6.9","-6.5","0.2","-0.2","-2.3","2.2"], + ["1050","1425","2","36.8","5.9","7.0","-6.6","0.2","-0.2","-2.5","2.3"], + ["1100","1417","3","36.8","5.6","7.1","-6.6","0.2","-0.2","-2.6","2.4"], + ["1150","1408","3","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"], + ["1200","1399","3","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"], + ["1250","1390","3","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"], + ["1300","1381","3","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"], + ["1350","1372","3","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"], + ["1400","1362","4","36.4","4.4","7.5","-7.0","0.2","-0.3","-3.3","3.1"], + ["1450","1353","4","36.3","4.3","7.6","-7.1","0.2","-0.3","-3.4","3.2"], + ["1500","1344","4","36.2","4.2","7.7","-7.1","0.3","-0.3","-3.5","3.4"], + ["1550","1334","4","36.1","4.0","7.7","-7.2","0.3","-0.3","-3.7","3.5"], + ["1600","1324","4","36.0","3.9","7.8","-7.3","0.3","-0.3","-3.8","3.6"], + ["1650","1314","4","35.9","3.8","7.9","-7.3","0.3","-0.3","-3.9","3.7"], + ["1700","1304","5","35.8","3.7","7.9","-7.4","0.3","-0.3","-4.0","3.8"], + ["1750","1294","5","35.7","3.6","8.0","-7.5","0.3","-0.3","-4.2","3.9"], + ["1800","1284","5","35.6","3.5","8.1","-7.6","0.3","-0.3","-4.3","4.0"], + ["1850","1274","5","35.5","3.4","8.2","-7.6","0.3","-0.3","-4.4","4.2"], + ["1900","1263","6","35.4","3.3","8.2","-7.7","0.3","-0.3","-4.5","4.3"], + ["1950","1253","6","35.2","3.2","8.3","-7.8","0.3","-0.4","-4.7","4.4"], + ["2000","1242","6","35.1","3.1","8.4","-7.8","0.4","-0.3","-4.8","4.5"], + ["2050","1231","7","35.0","3.0","8.4","-7.9","0.4","-0.4","-4.9","4.7"], + ["2100","1219","7","34.8","2.9","8.5","-8.0","0.4","-0.4","-5.0","4.8"], + ["2150","1208","7","34.7","2.9","8.5","-8.0","0.4","-0.4","-5.2","4.9"], + ["2200","1196","8","34.5","2.8","8.6","-8.1","0.4","-0.4","-5.3","5.0"], + ["2250","1184","8","34.3","2.7","8.7","-8.2","0.4","-0.4","-5.4","5.1"], + ["2300","1171","9","34.2","2.7","8.7","-8.2","0.4","-0.4","-5.5","5.2"], + ["2350","1158","9","34.0","2.6","8.8","-8.3","0.4","-0.4","-5.7","5.4"], + ["2400","1145","10","33.8","2.5","8.8","-8.3","0.4","-0.4","-5.8","5.5"], + ["2450","1132","10","33.6","2.5","8.9","-8.4","0.4","-0.4","-5.9","5.6"], + ["2500","1118","11","33.3","2.4","8.9","-8.4","0.5","-0.4","-6.0","5.7"], + ["2550","1103","12","33.1","2.4","9.0","-8.5","0.4","-0.5","-6.1","5.8"], + ["2600","1088","13","32.8","2.3","9.0","-8.5","0.5","-0.4","-6.2","5.9"], + ["2650","1072","14","32.6","2.2","9.0","-8.6","0.5","-0.5","-6.4","6.0"], + ["2700","1056","15","32.3","2.2","9.0","-8.6","0.5","-0.5","-6.5","6.1"], + ["2750","1038","16","31.9","2.1","9.1","-8.6","0.5","-0.5","-6.6","6.3"], + ["2800","1020","18","31.6","2.1","9.1","-8.6","0.5","-0.5","-6.7","6.4"], + ["2850","1000","20","31.2","2.0","9.1","-8.6","0.5","-0.5","-6.8","6.5"], + ["2900","978","22","30.8","1.9","9.0","-8.6","0.5","-0.5","-6.9","6.5"], + ["2950","954","26","30.3","1.9","9.0","-8.6","0.5","-0.5","-7.0","6.6"], + ["3000","927","31","29.7","1.8","8.9","-8.5","0.5","-0.5","-7.1","6.7"], + ["3050","894","38","29.0","1.7","8.8","-8.4","0.5","-0.6","-7.2","6.8"], + ["3100","849","54","27.9","1.6","8.5","-8.3","0.5","-0.6","-7.2","6.8"] ] }; - default {systemChat "Error: MuzzleVelocity not found in LUT"; []}; + default { + ERROR("MuzzleVelocity not found in LUT"); + [] + }; }; \ No newline at end of file diff --git a/addons/mk6mortar/script_component.hpp b/addons/mk6mortar/script_component.hpp index 98b9d705e0b..cb74d552ded 100644 --- a/addons/mk6mortar/script_component.hpp +++ b/addons/mk6mortar/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\Addons\main\script_macros.hpp" -#define MK6_82mm_AIR_FRICTION -0.000075 \ No newline at end of file +#define MK6_82mm_AIR_FRICTION -0.0001 \ No newline at end of file From a8b000c159e267b4156044ffbd61b05653ae8501 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 17:50:07 -0500 Subject: [PATCH 013/276] Some Headers --- addons/mk6mortar/RscRangeTable.hpp | 7 +++---- addons/mk6mortar/XEH_clientInit.sqf | 1 - addons/mk6mortar/XEH_preInit.sqf | 1 - addons/mk6mortar/config.cpp | 3 +-- addons/mk6mortar/functions/fnc_handleFired.sqf | 16 ++++++++-------- .../functions/fnc_handlePlayerVehicleChanged.sqf | 9 +++++---- addons/mk6mortar/functions/fnc_moduleInit.sqf | 4 ++-- .../mk6mortar/functions/fnc_rangeTableOpen.sqf | 7 ++++++- .../functions/fnc_rangeTablePageChange.sqf | 5 ++++- .../fnc_rangeTablePreCalculatedValues.sqf | 11 +++++++---- addons/mk6mortar/functions/fnc_toggleMils.sqf | 6 +++++- .../functions/fnc_turretDisplayLoaded.sqf | 6 +++--- 12 files changed, 44 insertions(+), 32 deletions(-) diff --git a/addons/mk6mortar/RscRangeTable.hpp b/addons/mk6mortar/RscRangeTable.hpp index 65598fd36d6..96516779acc 100644 --- a/addons/mk6mortar/RscRangeTable.hpp +++ b/addons/mk6mortar/RscRangeTable.hpp @@ -1,5 +1,4 @@ -class ACE_82mm_RangeTable_Dialog -{ +class ACE_82mm_RangeTable_Dialog { idd = -1; movingEnable = 1; onLoad = "uiNamespace setVariable ['ACE_82mm_RangeTable_Dialog', _this select 0];"; @@ -25,7 +24,7 @@ class ACE_82mm_RangeTable_Dialog }; }; class controls { - class TheTable : RscListNBox { + class TheTable: RscListNBox { idc = 20001; // style = ST_CENTER + ST_MULTI + LB_TEXTURES; // style = ST_LEFT + ST_MULTI + LB_TEXTURES; @@ -84,4 +83,4 @@ class ACE_82mm_RangeTable_Dialog onButtonClick = "closeDialog 0"; }; }; -}; \ No newline at end of file +}; diff --git a/addons/mk6mortar/XEH_clientInit.sqf b/addons/mk6mortar/XEH_clientInit.sqf index 36b39e58c45..973772c96a2 100644 --- a/addons/mk6mortar/XEH_clientInit.sqf +++ b/addons/mk6mortar/XEH_clientInit.sqf @@ -3,4 +3,3 @@ if (!hasInterface) exitWith {}; ["playerVehicleChanged", {_this call FUNC(handlePlayerVehicleChanged);}] call EFUNC(common,addEventHandler); - diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index 186a5958965..a60fcb9ce6d 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -2,7 +2,6 @@ ADDON = false; - PREP(dev_buildTable); PREP(dev_formatNumber); PREP(dev_simulateCalcRangeTableLine); diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index 5050bb2b32a..b39b0364162 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -25,7 +25,6 @@ class RscControlsGroup; class ScrollBar; class RscActiveText; - #include "RscInGameUI.hpp" #include "RscRangeTable.hpp" @@ -40,7 +39,7 @@ class ACE_Settings { value = 1; typeName = "BOOL"; isClientSetable = 0; - }; + }; class GVAR(allowCompass) { value = 1; typeName = "BOOL"; diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index c57f7bc7fee..679b689d6d0 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -1,5 +1,6 @@ /* * Author: PabstMirror + * Called when the mortar is fired. * * Arguments: * 0: mortar - Object the event handler is assigned to @@ -14,7 +15,7 @@ * Nothing * * Example: - * [clientFiredBIS-XEH] call ace_ + * [clientFiredBIS-XEH] call ace_mk6mortars_fnc_handleFired * * Public: No */ @@ -24,11 +25,14 @@ disableSerialization; PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); - if (!GVAR(airResistanceEnabled)) exitWith {}; if (_unit distance ACE_player > 3000) exitWith {false}; // Large enough distance to not simulate any wind deflection. -if (!GVAR(EnableForAI) && !([_unit] call EFUNC(common,isPlayer))) exitWith {false}; + +//AI will have no clue how to use: +_shooterMan = gunner _vehicle; +if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false}; + //Hack Until these are intergrated: if (isNil QEGVAR(weather,currentRelativeDensity)) then { @@ -38,6 +42,7 @@ if (isNil QEGVAR(weather,currentTemperature)) then { EGVAR(weather,currentTemperature) = 20; }; + //powder effects: _temperature = EGVAR(weather,currentTemperature); _newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1); @@ -71,17 +76,12 @@ if (_newMuzzleVelocityCoefficent != 1) then { _trueVelocity = _bulletVelocity vectorDiff ACE_wind; _trueSpeed = vectorMagnitude _trueVelocity; - // _dragRef = _deltaT * _airFriction * _bulletSpeed * _bulletSpeed; - // _accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef); - // _bulletVelocity = _bulletVelocity vectorDiff _accelRef; - _drag = _deltaT * _airFriction * _trueSpeed * EGVAR(weather,currentRelativeDensity); _accel = _trueVelocity vectorMultiply (_drag); _bulletVelocity = _bulletVelocity vectorAdd _accel; }; _shell setVelocity _bulletVelocity; - // TODO expand with advanced ballistics functionality. }, 0, [_projectile, MK6_82mm_AIR_FRICTION, time]] call CBA_fnc_addPerFrameHandler; // }; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index 6faeeaf4157..705105eed56 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -1,10 +1,13 @@ /* * Author: PabstMirror - * + * Handles player getting into new vehicle. Loads PFEG for mortar display if it is a mortar. * * Arguments: + * 0:Player + * 1: New Vehicle * * Return Value: + * No * * Example: * @@ -17,8 +20,6 @@ PARAMS_2(_player,_newVehicle); if (isNull _newVehicle) exitWith {}; if (!(_newVehicle isKindOf "Mortar_01_base_F")) exitWith {}; - - _chargeText = (findDisplay 46) ctrlCreate ["RscStructuredText", 80085]; _xPos = (profilenamespace getvariable ["IGUI_GRID_WEAPON_X", ((safezoneX + safezoneW) - (12.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * (((safezoneW / safezoneH) min 1.2) / 40))]); @@ -42,7 +43,7 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") } else { _useMils = _mortarVeh getVariable [QGVAR(useMils), true]; - + //Compute: 'charge' from weaponstate _currentFireMode = (weaponState [_mortarVeh, [0]]) select 2; _currentChargeMode = _fireModes find _currentFireMode; diff --git a/addons/mk6mortar/functions/fnc_moduleInit.sqf b/addons/mk6mortar/functions/fnc_moduleInit.sqf index e760e443a22..c7301c074bf 100644 --- a/addons/mk6mortar/functions/fnc_moduleInit.sqf +++ b/addons/mk6mortar/functions/fnc_moduleInit.sqf @@ -1,6 +1,6 @@ /* * Author: PabstMirror - * + * Loads settings from the module. * * Arguments: * 0: The Module Logic Object @@ -11,7 +11,7 @@ * None * * Example: - * + * * * Public: No */ diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf index e3dbcffd1d2..5ad6736e84b 100644 --- a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -1,16 +1,21 @@ /* * Author: PabstMirror + * Opens the rangetable and fills the charge listbox. * * Arguments: + * No + * * Return Value: + * No * * Example: * + * * Public: No */ #include "script_component.hpp" -#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) +#define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) _weaponName = "mortar_82mm"; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf index c7f740ba154..eb28b80e6ff 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -1,13 +1,16 @@ /* * Author: PabstMirror - * + * Called when listbox selection changes. Updates the rangetable with new values. * * Arguments: + * No * * Return Value: + * No * * Example: * + * * Public: No */ #include "script_component.hpp" diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index e836018b2e7..5c8489941f8 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -1,14 +1,17 @@ /* * Author: PabstMirror -Simple Lookup Table for various muzzle velocities and air frictions. -Use ACE_Artillery_fnc_dev_buildTable to build + * Simple Lookup Table for various muzzle velocities and air frictions. + * Use ace_mk6mortar_fnc_dev_buildTable to build * * Arguments: - * 0: NUMBER - Muzzle Velocity -1: NUMBER - Air Friction + * 0: Muzzle Velocity + * 1: Air Friction + * * Return Value: + * * * Example: + * * * Public: No */ diff --git a/addons/mk6mortar/functions/fnc_toggleMils.sqf b/addons/mk6mortar/functions/fnc_toggleMils.sqf index 98714836fcb..923a553f435 100644 --- a/addons/mk6mortar/functions/fnc_toggleMils.sqf +++ b/addons/mk6mortar/functions/fnc_toggleMils.sqf @@ -1,12 +1,16 @@ /* * Author: PabstMirror - * + * Toggles the mortart to show mils or degrees * * Arguments: + * 0: Vehicle + * 1: Player * * Return Value: + * No * * Example: + * [mortar,bob] call ace_mk6mortar_fnc_toggleMils; * * Public: No */ diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index 860dea069a1..dcce66f0890 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -1,10 +1,12 @@ /* * Author: PabstMirror - * + * Called when the mk6's in game UI is loaded. Hides rangefinder data if it is disabled. * * Arguments: + * None * * Return Value: + * None * * Example: * @@ -12,7 +14,6 @@ */ #include "script_component.hpp" - #define CTRL_CA_OPTICSPITCH (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSPITCH") #define CTRL_CA_OPTICSZOOM (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_OPTICSZOOM") #define CTRL_CA_SOLUTION_TEXT (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_SOLUTION_TEXT") @@ -27,7 +28,6 @@ #define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV") #define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED") - disableSerialization; // PARAMS_1(_display); From 2ada87e3ac09e4a2ae3db6a5257a60e349ee436e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 5 Apr 2015 18:05:23 -0500 Subject: [PATCH 014/276] Rangetable Item --- addons/mk6mortar/CfgVehicles.hpp | 4 ++-- addons/mk6mortar/CfgWeapons.hpp | 12 +++++++++++ addons/mk6mortar/XEH_preInit.sqf | 1 + addons/mk6mortar/config.cpp | 2 +- .../functions/fnc_rangeTableCanUse.sqf | 21 +++++++++++++++++++ 5 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index 7c39aeafdda..b7d6ed93659 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -5,8 +5,8 @@ class CfgVehicles { class ACE_Equipment { class GVAR(rangetable) { displayName = "Open 82mm Rangetable"; - condition = QUOTE(true); - statement = QUOTE(call FUNC(rangeTableOpen)); + condition = QUOTE(_this call FUNC(rangeTableCanUse)); + statement = QUOTE(_this call FUNC(rangeTableOpen)); priority = 0; icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); }; diff --git a/addons/mk6mortar/CfgWeapons.hpp b/addons/mk6mortar/CfgWeapons.hpp index 9d03783519e..f628fe1717f 100644 --- a/addons/mk6mortar/CfgWeapons.hpp +++ b/addons/mk6mortar/CfgWeapons.hpp @@ -1,3 +1,15 @@ class CfgWeapons { + class ACE_ItemCore; + class InventoryItem_Base_F; + class ACE_RangeTable_82mm: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; + displayName = "82mm Rangetable"; + descriptionShort = "82mm Rangetable D"; + picture = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); + class ItemInfo: InventoryItem_Base_F { + mass = 0.5; + }; + }; }; diff --git a/addons/mk6mortar/XEH_preInit.sqf b/addons/mk6mortar/XEH_preInit.sqf index a60fcb9ce6d..9af89ccb356 100644 --- a/addons/mk6mortar/XEH_preInit.sqf +++ b/addons/mk6mortar/XEH_preInit.sqf @@ -11,6 +11,7 @@ PREP(dev_simulateShot); PREP(handleFired); PREP(handlePlayerVehicleChanged); PREP(moduleInit); +PREP(rangeTableCanUse); PREP(rangeTableOpen); PREP(rangeTablePageChange); PREP(rangeTablePreCalculatedValues); diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index b39b0364162..a6e63c819bc 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {}; + weapons[] = {"ACE_RangeTable_82mm"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author[] = {"PabstMirror"}; diff --git a/addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf b/addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf new file mode 100644 index 00000000000..04ca9c32782 --- /dev/null +++ b/addons/mk6mortar/functions/fnc_rangeTableCanUse.sqf @@ -0,0 +1,21 @@ +/* + * Author: PabstMirror + * Can player open 82mm rangetable. + * + * Arguments: + * 0: Vehicle + * 1: Player + * + * Return Value: + * Can Open + * + * Example: + * [bob, bob] call ace_mk6mortar_fnc_rangeTableCanUse + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_vehicle,_player); + +"ACE_RangeTable_82mm" in (items _player); \ No newline at end of file From d295ee6980914360bcd8e38ed19514461150616a Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 6 Apr 2015 01:05:28 -0500 Subject: [PATCH 015/276] Localization / Headers --- addons/mk6mortar/CfgEventHandlers.hpp | 7 ++ addons/mk6mortar/CfgVehicles.hpp | 3 +- addons/mk6mortar/CfgWeapons.hpp | 4 +- .../functions/fnc_dev_buildTable.sqf | 89 +++++++++---------- .../functions/fnc_dev_formatNumber.sqf | 76 ++++++++-------- .../fnc_dev_simulateFindSolution.sqf | 57 ++++++------ .../functions/fnc_dev_simulateShot.sqf | 63 ++++++------- .../mk6mortar/functions/fnc_handleFired.sqf | 28 +++--- .../fnc_handlePlayerVehicleChanged.sqf | 28 +++--- addons/mk6mortar/functions/fnc_moduleInit.sqf | 2 +- .../functions/fnc_rangeTableOpen.sqf | 4 +- .../functions/fnc_rangeTablePageChange.sqf | 2 +- .../fnc_rangeTablePreCalculatedValues.sqf | 2 +- .../functions/fnc_turretDisplayLoaded.sqf | 3 +- addons/mk6mortar/stringtable.xml | 15 +++- 15 files changed, 200 insertions(+), 183 deletions(-) diff --git a/addons/mk6mortar/CfgEventHandlers.hpp b/addons/mk6mortar/CfgEventHandlers.hpp index 3daad1425a2..34c6ecc22cb 100644 --- a/addons/mk6mortar/CfgEventHandlers.hpp +++ b/addons/mk6mortar/CfgEventHandlers.hpp @@ -8,3 +8,10 @@ class Extended_PostInit_EventHandlers { clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); }; }; +class Extended_FiredBIS_EventHandlers { + class Mortar_01_base_F { + class ADDON { + firedBIS = QUOTE(_this call FUNC(handleFired)); + }; + }; +}; diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index b7d6ed93659..a40cc68efb2 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -4,11 +4,12 @@ class CfgVehicles { class ACE_SelfActions { class ACE_Equipment { class GVAR(rangetable) { - displayName = "Open 82mm Rangetable"; + displayName = "$STR_ACE_MK6MORTAR_rangetable_action"; condition = QUOTE(_this call FUNC(rangeTableCanUse)); statement = QUOTE(_this call FUNC(rangeTableOpen)); priority = 0; icon = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); + exceptions[] = {"notOnMap", "isNotInside"}; }; }; }; diff --git a/addons/mk6mortar/CfgWeapons.hpp b/addons/mk6mortar/CfgWeapons.hpp index f628fe1717f..7d5153e9add 100644 --- a/addons/mk6mortar/CfgWeapons.hpp +++ b/addons/mk6mortar/CfgWeapons.hpp @@ -5,8 +5,8 @@ class CfgWeapons { class ACE_RangeTable_82mm: ACE_ItemCore { author = "$STR_ACE_Common_ACETeam"; scope = 2; - displayName = "82mm Rangetable"; - descriptionShort = "82mm Rangetable D"; + displayName = "$STR_ACE_MK6MORTAR_rangetable_name"; + descriptionShort = "$STR_ACE_MK6MORTAR_rangetable_description"; picture = QUOTE(PATHTOF(UI\icon_rangeTable.paa)); class ItemInfo: InventoryItem_Base_F { mass = 0.5; diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf index d36aa61819b..b659cd15121 100644 --- a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -1,24 +1,23 @@ /* -Name: AGM_Artillery_fnc_dev_buildTable - -Author: Pabst Mirror - -Description: - DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay) - -Parameters: (normal BIS "Fired" EH stuff) - 0: NUMBER - Muzzle Velocity - 1: NUMBER - Air Friction - -Returns: - Data in clipboard - -Example: - [100, -0.0001] spawn AGM_Artillery_fnc_dev_buildTable; //spawn (scheduled) is slower - [100, -0.0001] call AGM_Artillery_fnc_dev_buildTable; //faster, but will lock while processing -*/ + * Author: PabstMirror + * DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay) + * + * Arguments: + * 0: Muzzle Velocity + * 1: Air Friction + * + * Return Value: + * + * + * Example: + * [100, -0.0001] spawn ace_mk6mortar_fnc_dev_buildTable; //spawn (scheduled) is slower + * [100, -0.0001] call ace_mk6mortar_fnc_dev_buildTable; //faster, but will lock while processing + * + * Public: No + */ #include "script_component.hpp" + private ["_muzzleVelocity", "_airFriction", "_stillInRange", "_currentRange", "_increasePerRow", "_outputArray", "_rangeToHit", "_lineElevation", "_lineHeightElevation", "_lineTimeOfFlight", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_lineTempDec", "_lineTempInc", "_lineAirDensDec", "_lineAirDensInc", "_result", "_outputString"]; _muzzleVelocity = _this select 0; @@ -32,28 +31,28 @@ _outputArray = []; //[_rangeToHit, _lineElevation, _lineHeightElevation, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] while {_stillInRange} do { - _result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine); - if (_result isEqualTo []) then { - _stillInRange = false; - } else { - if ((_result select 1) < 86) then { - _outputArray pushBack [ - ([(_result select 0), "meters", false] call FUNC(dev_formatNumber)), - ([(_result select 1), "mil", true] call FUNC(dev_formatNumber)), - ([(_result select 2), "mil", true] call FUNC(dev_formatNumber)), - ([(_result select 3), "sec", false] call FUNC(dev_formatNumber)), - ([(_result select 4), "milPrecise", true] call FUNC(dev_formatNumber)), - ([(_result select 5), "metersprecise", false] call FUNC(dev_formatNumber)), - ([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)), - ([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)), - ([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)), - ([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)), - ([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)) - ]; + _result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine); + if (_result isEqualTo []) then { + _stillInRange = false; + } else { + if ((_result select 1) < 86) then { + _outputArray pushBack [ + ([(_result select 0), "meters", false] call FUNC(dev_formatNumber)), + ([(_result select 1), "mil", true] call FUNC(dev_formatNumber)), + ([(_result select 2), "mil", true] call FUNC(dev_formatNumber)), + ([(_result select 3), "sec", false] call FUNC(dev_formatNumber)), + ([(_result select 4), "milPrecise", true] call FUNC(dev_formatNumber)), + ([(_result select 5), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)) + ]; + }; + _currentRange = _currentRange + _increasePerRow; }; - _currentRange = _currentRange + _increasePerRow; - }; - hint str _currentRange; + hintSilent str _currentRange; }; //handle floating point rounding errors @@ -62,14 +61,14 @@ _outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && ((abs(_a ", _muzzleVelocity, _airFriction]; { - if (_forEachIndex < ((count _outputArray) - 1)) then { - _outputString = _outputString + format ["%1, + if (_forEachIndex < ((count _outputArray) - 1)) then { + _outputString = _outputString + format ["%1, ", _x]; - } else { - _outputString = _outputString + format ["%1 - ] + } else { + _outputString = _outputString + format ["%1 + ] };", _x]; - }; + }; } forEach _outputArray; copyToClipboard _outputString; diff --git a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf index 47e9fc7fbf5..a8ad155eecd 100644 --- a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf +++ b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf @@ -4,19 +4,19 @@ Name: AGM_Artillery_fnc_formatNumber Author: Pabst Mirror Description: - Converts numbers into nicely formated strings. +Converts numbers into nicely formated strings. Parameters: - 0: NUMBER - Input number - 1: STRING - Output type (see case statement) - 2: BOOL - If output type is mil, convert input type from deg->mil +0: NUMBER - Input number +1: STRING - Output type (see case statement) +2: BOOL - If output type is mil, convert input type from deg->mil Returns: - STRING - Formatted number +STRING - Formatted number Example: - [45, "mil4", true] call AGM_Artillery_fnc_formatNumber = "0800" -*/ +[45, "mil4", true] call AGM_Artillery_fnc_formatNumber = "0800" + */ #include "script_component.hpp" private ["_theNumber", "_inputType", "_convertToMils", "_decimalPlaces", "_integerPlaces", "_prefix", "_return"]; @@ -30,47 +30,47 @@ _integerPlaces = -1; switch (toLower _inputType) do { case ("meters"): { - _decimalPlaces = 0; - _integerPlaces = 1; - }; + _decimalPlaces = 0; + _integerPlaces = 1; + }; case ("metersprecise"): { - _decimalPlaces = 1; - _integerPlaces = 1; - }; + _decimalPlaces = 1; + _integerPlaces = 1; + }; case ("meters4"): { - _decimalPlaces = 0; - _integerPlaces = 4; - }; + _decimalPlaces = 0; + _integerPlaces = 4; + }; case ("deg3precise"): { - _decimalPlaces = 2; - _integerPlaces = 3; - }; + _decimalPlaces = 2; + _integerPlaces = 3; + }; case ("mil"): { - _decimalPlaces = 0; - _integerPlaces = 1; - if (_convertToMils) then { - _theNumber = _theNumber * (6400 / 360); + _decimalPlaces = 0; + _integerPlaces = 1; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; }; - }; case ("mil4"): { - _decimalPlaces = 0; - _integerPlaces = 4; - if (_convertToMils) then { - _theNumber = _theNumber * (6400 / 360); + _decimalPlaces = 0; + _integerPlaces = 4; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; }; - }; case ("milprecise"): { - _decimalPlaces = 1; - _integerPlaces = 1; - if (_convertToMils) then { - _theNumber = _theNumber * (6400 / 360); + _decimalPlaces = 1; + _integerPlaces = 1; + if (_convertToMils) then { + _theNumber = _theNumber * (6400 / 360); + }; }; - }; case ("sec"): { - _decimalPlaces = 1; - _integerPlaces = 1; - }; - default {systemChat format ["badtype %1", _inputType];}; + _decimalPlaces = 1; + _integerPlaces = 1; + }; + default {systemChat format ["badtype %1", _inputType];}; }; diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf index ddeab4015fd..29a44e3a512 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -1,26 +1,25 @@ /* -Name: FUNC(simulateFindSolution) - -Author: Pabst Mirror - -Description: - Converts numbers into nicely formated strings. - -Parameters: - 0: NUMBER - Range to Hit (Meters) - 1: NUMBER - Height To Hit (Meters) - 2: NUMBER - Muzzle Velocity (M/S) - 3: NUMBER - Air Friction - 4: NUMBER - Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) - -Returns: - ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration] - -Example: - [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(simulateFindSolution); -*/ + * Author: PabstMirror + * DEV to find a firing solution for a given range + * + * Arguments: + * 0: Range to Hit (Meters) + * 1: Height To Hit (Meters) + * 2: Muzzle Velocity (M/S) + * 3: Air Friction + * 4: Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) + * + * Return Value: + * ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration] + * + * Example: + * [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call FUNC(simulateFindSolution); + * + * Public: No + */ #include "script_component.hpp" + private ["_rangeToHit", "_heightToHit", "_muzzleVelocity", "_airFriction", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts"]; #define MAX_ATTEMPTS 22 @@ -41,15 +40,15 @@ _numberOfAttempts = 0; //(binary search) while {(_numberOfAttempts < MAX_ATTEMPTS) && ((abs _error) > 0.2)} do { - _numberOfAttempts = _numberOfAttempts + 1; - _solutionElevation = (_maxElev + _minElev) / 2; - _lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot); - _error = _rangeToHit - (_lastTestResult select 0); - if (_error > 0) then { - _maxElev = _solutionElevation; //test range was short - } else { - _minElev = _solutionElevation; //test range was long - }; + _numberOfAttempts = _numberOfAttempts + 1; + _solutionElevation = (_maxElev + _minElev) / 2; + _lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot); + _error = _rangeToHit - (_lastTestResult select 0); + if (_error > 0) then { + _maxElev = _solutionElevation; //test range was short + } else { + _minElev = _solutionElevation; //test range was long + }; }; if (_numberOfAttempts >= MAX_ATTEMPTS) exitWith {[]}; diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf index 42ceef21fd0..de8471726c4 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -1,31 +1,26 @@ /* -Name: simulateShot - -Author: Pabst Mirror - -Description: - Simulates the path of a fired shell. - -Parameters: - 0: NUMBER - Shot Angle (degrees) - 1: NUMBER - Muzzle Velocity (m/s) - 2: NUMBER - Air Friction - 3: NUMBER - Tempeture (degres celcius) - 4: NUMBER - Relative Air Denisty - 5: NUMBER - Tail Wind (m/s) - 6: NUMBER - Cross Wind (m/s) - 7: NUMBER - Height Of Target (M) - 8: NUMBER - Time Step (fraction of a second) - -Returns: - ARRAY - - NUMBER - Distance Traveld - NUMBER - Shot Time - NUMBER - Offset (degrees) - -Example: - [45, 180, -0.0001, 15, 1, 10, 0, 0, 1/50] call simulateShot; -*/ + * Author: PabstMirror + * DEV function to build mortar tables, very cpu intensive (never used durring normal gameplay) + * + * Arguments: + * 0: Shot Angle (degrees) + * 1: Muzzle Velocity (m/s) + * 2: Air Friction + * 3: Tempeture (degres celcius) + * 4: Relative Air Denisty + * 5: Tail Wind (m/s) + * 6: Cross Wind (m/s) + * 7: Height Of Target (M) + * 8: Time Step (fraction of a second) + * + * Return Value: + * [Distance Traveled, Shot Time, Offset (degrees)] + * + * Example: + * [45, 180, -0.0001, 15, 1, 10, 0, 0, 1/50] call ace_mk6mortar_fnc_dev_simulateShot; + * + * Public: No + */ #include "script_component.hpp" private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_wind", "_gravity", "_timeStep", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"]; @@ -53,15 +48,15 @@ _lastPos = _currentPos; _kCoefficent = -1 * _relDensity * _airFriction; //save time in the loop and compute once while {((_currentVelocity select 2) > 0) || ((_currentPos select 2) >= _heightOfTarget)} do { - _lastPos = _currentPos; + _lastPos = _currentPos; - _aparentWind = _wind vectorDiff _currentVelocity; - _changeInVelocity = _gravity vectorAdd (_aparentWind vectorMultiply ((vectorMagnitude _aparentWind) * _kCoefficent)); + _aparentWind = _wind vectorDiff _currentVelocity; + _changeInVelocity = _gravity vectorAdd (_aparentWind vectorMultiply ((vectorMagnitude _aparentWind) * _kCoefficent)); - _currentVelocity = _currentVelocity vectorAdd (_changeInVelocity vectorMultiply _timeStep); + _currentVelocity = _currentVelocity vectorAdd (_changeInVelocity vectorMultiply _timeStep); - _currentPos = _currentPos vectorAdd (_currentVelocity vectorMultiply _timeStep); - _currentTime = _currentTime + _timeStep; + _currentPos = _currentPos vectorAdd (_currentVelocity vectorMultiply _timeStep); + _currentTime = _currentTime + _timeStep; }; //Uses linearConversion to get a weighted average betwen points before and after dropping below target height @@ -73,6 +68,6 @@ _middlePos = (_lastPos vectorMultiply (1 - _linConversion)) vectorAdd (_currentP _middleTotalTravelTime = _currentTime - (_timeStep * (1-_linConversion)); //Find shot offset (from crosswind), in degrees - _offsetDeg = (_middlePos select 0) aTan2 (_middlePos select 1); +_offsetDeg = (_middlePos select 0) aTan2 (_middlePos select 1); [(_middlePos select 1), _middleTotalTravelTime, _offsetDeg] diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 679b689d6d0..555abcbe6f7 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -15,7 +15,7 @@ * Nothing * * Example: - * [clientFiredBIS-XEH] call ace_mk6mortars_fnc_handleFired + * [clientFiredBIS-XEH] call ace_mk6mortar_fnc_handleFired * * Public: No */ @@ -26,27 +26,29 @@ disableSerialization; PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); if (!GVAR(airResistanceEnabled)) exitWith {}; - -if (_unit distance ACE_player > 3000) exitWith {false}; // Large enough distance to not simulate any wind deflection. +// Large enough distance to not simulate any wind deflection +if (_unit distance ACE_player > 8000) exitWith {false}; //AI will have no clue how to use: _shooterMan = gunner _vehicle; if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false}; +//Should be zero, just make sure: +_bisAirFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction"); +if (_bisAirFriction != 0) exitWith {ERROR("Non zero base airFriction");}; //Hack Until these are intergrated: if (isNil QEGVAR(weather,currentRelativeDensity)) then { EGVAR(weather,currentRelativeDensity) = 1; }; if (isNil QEGVAR(weather,currentTemperature)) then { - EGVAR(weather,currentTemperature) = 20; + EGVAR(weather,currentTemperature) = 15; }; //powder effects: _temperature = EGVAR(weather,currentTemperature); _newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1); -systemChat str _newMuzzleVelocityCoefficent; if (_newMuzzleVelocityCoefficent != 1) then { _bulletVelocity = velocity _projectile; _bulletSpeed = vectorMagnitude _bulletVelocity; @@ -55,8 +57,8 @@ if (_newMuzzleVelocityCoefficent != 1) then { _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; }; +systemChat format ["PFEH for %1", _ammo]; -// if (_bullet isKindOf "BulletBase") then { [{ private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"]; PARAMS_2(_args,_pfID); @@ -72,17 +74,13 @@ if (_newMuzzleVelocityCoefficent != 1) then { _bulletVelocity = velocity _shell; _bulletSpeed = vectorMagnitude _bulletVelocity; - if (vectorMagnitude ACE_wind > 0) then { - _trueVelocity = _bulletVelocity vectorDiff ACE_wind; - _trueSpeed = vectorMagnitude _trueVelocity; + _trueVelocity = _bulletVelocity vectorDiff ACE_wind; + _trueSpeed = vectorMagnitude _trueVelocity; - _drag = _deltaT * _airFriction * _trueSpeed * EGVAR(weather,currentRelativeDensity); - _accel = _trueVelocity vectorMultiply (_drag); + _drag = _deltaT * _airFriction * _trueSpeed * EGVAR(weather,currentRelativeDensity); + _accel = _trueVelocity vectorMultiply (_drag); + _bulletVelocity = _bulletVelocity vectorAdd _accel; - _bulletVelocity = _bulletVelocity vectorAdd _accel; - }; _shell setVelocity _bulletVelocity; }, 0, [_projectile, MK6_82mm_AIR_FRICTION, time]] call CBA_fnc_addPerFrameHandler; -// }; - diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index 705105eed56..8fa11b1cda9 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -10,6 +10,7 @@ * No * * Example: + * [bob, mortar] call ace_mk6mortar_fnc_handlePlayerVehicleChanged; * * Public: No */ @@ -48,7 +49,7 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") _currentFireMode = (weaponState [_mortarVeh, [0]]) select 2; _currentChargeMode = _fireModes find _currentFireMode; - _text = format ["%1: %2 ", "Charge", _currentChargeMode, QUOTE(PATHTOF(UI\ui_charges.paa))]; + _text = format ["%1: %2 ", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), _currentChargeMode, QUOTE(PATHTOF(UI\ui_charges.paa))]; _chargeText ctrlSetStructuredText parseText _text; if (shownArtilleryComputer && {!GVAR(allowComputerRangefinder)}) then { //Don't like this solution, but it works @@ -57,22 +58,29 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") }; _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; - if (isNull _display) exitWith {systemChat "null";}; + if (isNull _display) exitWith {}; //It may be null for the first frame + + //Hud should hidden in 3rd person + _notGunnerView = cameraView != "GUNNER"; //Update CurrentElevation Display: - _elevDeg = parseNumber ctrlText (_display displayCtrl 175); - if (_useMils) then { - (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); + if (_notGunnerView) then { + (_display displayCtrl 80175) ctrlSetText ""; } else { - (_display displayCtrl 80175) ctrlSetText str _elevDeg; + _elevDeg = parseNumber ctrlText (_display displayCtrl 175); + if (_useMils) then { + (_display displayCtrl 80175) ctrlSetText str round (_elevDeg * 6400 / 360); + } else { + (_display displayCtrl 80175) ctrlSetText str _elevDeg; + }; }; //Update ElevationNeeded Display: - if (!GVAR(allowComputerRangefinder)) then { + if (_notGunnerView || (!GVAR(allowComputerRangefinder))) then { (_display displayCtrl 80176) ctrlSetText ""; } else { _elevDeg = parseNumber ctrlText (_display displayCtrl 176); - if (_elevDeg <= 0) then { + if (_elevDeg <= 0) then { //Bad data means "----" out of range (_display displayCtrl 80176) ctrlSetText (ctrlText (_display displayCtrl 176)); } else { if (_useMils) then { @@ -84,7 +92,7 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") }; //Update Heading Display: - if (!GVAR(allowCompass)) then { + if (_notGunnerView || (!GVAR(allowCompass))) then { (_display displayCtrl 80156) ctrlSetText ""; } else { _rotationDegrees = ((getDir _mortarVeh) + (((-180 / PI) * (_mortarVeh animationPhase "mainTurret")) + 360)) % 360; @@ -95,4 +103,4 @@ _fireModes = getArray (configFile >> "CfgWeapons" >> _tubeWeaponName >> "modes") }; }; }; -}, 0, [_newVehicle, _chargeText,_fireModes]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file +}, 0, [_newVehicle, _chargeText,_fireModes]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/mk6mortar/functions/fnc_moduleInit.sqf b/addons/mk6mortar/functions/fnc_moduleInit.sqf index c7301c074bf..75bab4cee95 100644 --- a/addons/mk6mortar/functions/fnc_moduleInit.sqf +++ b/addons/mk6mortar/functions/fnc_moduleInit.sqf @@ -11,7 +11,7 @@ * None * * Example: - * + * [fromModule] call ace_mk6mortar_fnc_moduleInit * * Public: No */ diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf index 5ad6736e84b..67d33c27271 100644 --- a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -9,7 +9,7 @@ * No * * Example: - * + * [] call ace_mk6mortar_fnc_rangeTableOpen * * Public: No */ @@ -38,7 +38,7 @@ _muzzleVelocities = []; _showToPlayer = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "showToPlayer"); if (_showToPlayer == 1) then { _artilleryCharge = getNumber (configFile >> "CfgWeapons" >> _weaponName >> _x >> "artilleryCharge"); - LIST_CHARGE lbAdd format ["%1: %2 [%3m/s]", "Charge", (count _muzzleVelocities), (_initSpeed * _artilleryCharge)]; + LIST_CHARGE lbAdd format ["%1: %2", (localize "STR_ACE_MK6MORTAR_rangetable_charge"), (count _muzzleVelocities)]; LIST_CHARGE lbSetData [(count _muzzleVelocities), str (_artilleryCharge * _initSpeed)]; _muzzleVelocities pushBack _artilleryCharge; }; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf index eb28b80e6ff..6846640f255 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -9,7 +9,7 @@ * No * * Example: - * + * [] call ace_mk6mortar_fnc_rangeTablePageChange * * Public: No */ diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index 5c8489941f8..7c34b6389f9 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -11,7 +11,7 @@ * * * Example: - * + * [200, 0] call ace_mk6mortar_fnc_rangeTablePreCalculatedValues * * Public: No */ diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index dcce66f0890..49722655282 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -9,6 +9,7 @@ * None * * Example: + * [] call ace_mk6mortar_fnc_turretDisplayLoaded * * Public: No */ @@ -28,9 +29,9 @@ #define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV") #define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED") + disableSerialization; -// PARAMS_1(_display); _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNull]; if (isNull _display) exitWith {}; diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index d105660bcdb..da61afb03b5 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -1,9 +1,18 @@  - + - - Mk6 Mortar: Show Angle in MILS + + 82mm Rangetable + + + Range Table for the MK6 82mm Mortar + + + Open 82mm Rangetable + + + Charge \ No newline at end of file From b9341033d7bcd3eb422bf825726a991894d545ce Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 7 Apr 2015 19:19:08 -0500 Subject: [PATCH 016/276] Rangetable for vanilla ballistics --- addons/mk6mortar/RscRangeTable.hpp | 16 +- .../functions/fnc_dev_buildTable.sqf | 12 +- .../functions/fnc_rangeTablePageChange.sqf | 4 +- .../fnc_rangeTablePreCalculatedValues.sqf | 262 +++++++++++++----- 4 files changed, 220 insertions(+), 74 deletions(-) diff --git a/addons/mk6mortar/RscRangeTable.hpp b/addons/mk6mortar/RscRangeTable.hpp index 96516779acc..cb89b093e3a 100644 --- a/addons/mk6mortar/RscRangeTable.hpp +++ b/addons/mk6mortar/RscRangeTable.hpp @@ -16,9 +16,9 @@ class ACE_82mm_RangeTable_Dialog { }; class ChargeBackground: RscText { idc = -1; - x = "13 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "5 * (safeZoneH / 40)"; + w = "4 * (safeZoneH / 40)"; h = "5 * ((safeZoneH / 1.2) / 25)"; colorBackground[] = {0,0,0,1}; }; @@ -54,16 +54,16 @@ class ACE_82mm_RangeTable_Dialog { class ChargeListBox: RscListbox { idc = 1501; style = ST_RIGHT; - x = "13 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; - w = "5 * (safeZoneH / 40)"; + x = "14 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + w = "4 * (safeZoneH / 40)"; h = "5 * ((safeZoneH / 1.2) / 25)"; onLBSelChanged = QUOTE(_this call FUNC(rangeTablePageChange)); }; class CloseBackground: RscText { idc = -1; - x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; - y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; + x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; w = "0.5 * (safeZoneH / 40)"; h = "0.5 * ((safeZoneH / 1.2) / 25)"; colorBackground[] = {0,0,0,0.5}; @@ -73,7 +73,7 @@ class ACE_82mm_RangeTable_Dialog { style = 48; color[] = {1,1,1,0.7}; text = "A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa"; - x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; + x = "33.7634559672906 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)"; y = "1 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; w = "0.5 * (safeZoneH / 40)"; h = "0.5 * ((safeZoneH / 1.2) / 25)"; diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf index b659cd15121..a795b967765 100644 --- a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -35,7 +35,16 @@ while {_stillInRange} do { if (_result isEqualTo []) then { _stillInRange = false; } else { - if ((_result select 1) < 86) then { + if (_airFriction == 0) then { + _result set [4, 0]; + _result set [5, 0]; + _result set [6, 0]; + _result set [7, 0]; + _result set [8, 0]; + _result set [9, 0]; + _result set [10, 0]; + }; + if ((_result select 1) < 88) then { _outputArray pushBack [ ([(_result select 0), "meters", false] call FUNC(dev_formatNumber)), ([(_result select 1), "mil", true] call FUNC(dev_formatNumber)), @@ -72,5 +81,6 @@ _outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && ((abs(_a } forEach _outputArray; copyToClipboard _outputString; +rangeTableOutput = _outputString; hint "done"; \ No newline at end of file diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf index 6846640f255..c9ee241b7a4 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -22,7 +22,9 @@ _listBoxData = LIST_CHARGE lbData (lbCurSel LIST_CHARGE); if (isNil "_listBoxData" || {_listBoxData == ""}) exitWith {ERROR("lbCurSel out of bounds or no data");}; _muzzleVelocity = parseNumber _listBoxData; -_precalcArray = [_muzzleVelocity, MK6_82mm_AIR_FRICTION] call FUNC(rangeTablePreCalculatedValues); +_airFriction = if (GVAR(airResistanceEnabled)) then {MK6_82mm_AIR_FRICTION} else {0}; + +_precalcArray = [_muzzleVelocity, _airFriction] call FUNC(rangeTablePreCalculatedValues); lnbClear RANGE_TABLE; { diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index 7c34b6389f9..6752a875421 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -26,8 +26,8 @@ case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - -0.0001) < 0 ["100","1493","9","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"], ["150","1438","14","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"], ["200","1381","20","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"], - ["250","1321","27","13.6","1.5","0.5","-0.4","0.1","-0.1","-0.1","0.1"], - ["300","1256","36","13.3","1.3","0.6","-0.5","0.1","-0.1","-0.1","0.1"], + ["250","1321","27","13.6","1.5","0.5","-0.4","0.0","-0.0","-0.1","0.1"], + ["300","1256","36","13.3","1.3","0.6","-0.5","0.0","-0.1","-0.1","0.1"], ["350","1183","49","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"], ["400","1097","70","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"], ["450","979","113","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"] @@ -35,9 +35,9 @@ case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - -0.0001) < 0 }; case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { [ - ["250","1527","2","27.2","9.9","2.6","-2.4","0.1","-0.0","-0.3","0.3"], - ["300","1512","2","27.2","8.3","2.7","-2.4","0.1","-0.1","-0.4","0.4"], - ["350","1497","3","27.1","7.1","2.7","-2.5","0.1","-0.1","-0.5","0.4"], + ["250","1527","2","27.2","9.9","2.6","-2.4","0.0","-0.0","-0.3","0.3"], + ["300","1512","2","27.2","8.3","2.7","-2.4","0.1","-0.0","-0.4","0.4"], + ["350","1497","3","27.1","7.1","2.7","-2.5","0.0","-0.1","-0.5","0.4"], ["400","1482","3","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"], ["450","1467","3","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"], ["500","1451","4","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"], @@ -45,25 +45,25 @@ case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - -0.0001) < ["600","1420","5","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"], ["650","1404","5","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"], ["700","1388","6","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"], - ["750","1372","6","26.6","3.4","3.2","-2.8","0.2","-0.1","-1.0","1.0"], - ["800","1355","7","26.5","3.2","3.2","-2.9","0.2","-0.1","-1.1","1.1"], - ["850","1338","8","26.4","3.0","3.3","-2.9","0.2","-0.2","-1.1","1.1"], - ["900","1321","8","26.2","2.8","3.4","-3.0","0.2","-0.2","-1.2","1.2"], - ["950","1303","9","26.1","2.7","3.4","-3.1","0.2","-0.2","-1.3","1.2"], - ["1000","1285","10","26.0","2.6","3.5","-3.1","0.2","-0.2","-1.4","1.3"], - ["1050","1266","11","25.8","2.4","3.5","-3.2","0.2","-0.2","-1.4","1.4"], - ["1100","1247","12","25.7","2.3","3.6","-3.3","0.2","-0.2","-1.5","1.4"], + ["750","1372","6","26.6","3.4","3.2","-2.8","0.1","-0.1","-1.0","1.0"], + ["800","1355","7","26.5","3.2","3.2","-2.9","0.1","-0.1","-1.1","1.1"], + ["850","1338","8","26.4","3.0","3.3","-2.9","0.1","-0.1","-1.1","1.1"], + ["900","1321","8","26.2","2.8","3.4","-3.0","0.1","-0.1","-1.2","1.2"], + ["950","1303","9","26.1","2.7","3.4","-3.1","0.1","-0.2","-1.3","1.2"], + ["1000","1285","10","26.0","2.6","3.5","-3.1","0.2","-0.1","-1.4","1.3"], + ["1050","1266","11","25.8","2.4","3.5","-3.2","0.1","-0.2","-1.4","1.4"], + ["1100","1247","12","25.7","2.3","3.6","-3.3","0.1","-0.2","-1.5","1.4"], ["1150","1228","13","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"], - ["1200","1207","14","25.3","2.1","3.7","-3.4","0.2","-0.3","-1.7","1.6"], - ["1250","1186","15","25.1","2.0","3.8","-3.4","0.2","-0.3","-1.7","1.7"], - ["1300","1163","17","24.8","1.9","3.8","-3.5","0.3","-0.3","-1.8","1.7"], - ["1350","1140","19","24.6","1.9","3.9","-3.5","0.3","-0.3","-1.9","1.8"], - ["1400","1115","21","24.3","1.8","3.9","-3.6","0.3","-0.3","-1.9","1.9"], - ["1450","1088","24","23.9","1.7","4.0","-3.6","0.3","-0.3","-2.0","1.9"], - ["1500","1060","27","23.6","1.6","4.0","-3.7","0.3","-0.3","-2.1","2.0"], - ["1550","1028","32","23.1","1.5","4.0","-3.7","0.3","-0.3","-2.1","2.1"], - ["1600","991","38","22.6","1.5","4.0","-3.7","0.3","-0.3","-2.2","2.1"], - ["1650","947","49","21.9","1.4","4.0","-3.7","0.3","-0.3","-2.3","2.2"], + ["1200","1207","14","25.3","2.1","3.7","-3.4","0.2","-0.2","-1.7","1.6"], + ["1250","1186","15","25.1","2.0","3.8","-3.4","0.2","-0.2","-1.7","1.7"], + ["1300","1163","17","24.8","1.9","3.8","-3.5","0.2","-0.2","-1.8","1.7"], + ["1350","1140","19","24.6","1.9","3.9","-3.5","0.2","-0.2","-1.9","1.8"], + ["1400","1115","21","24.3","1.8","3.9","-3.6","0.2","-0.2","-1.9","1.9"], + ["1450","1088","24","23.9","1.7","4.0","-3.6","0.2","-0.2","-2.0","1.9"], + ["1500","1060","27","23.6","1.6","4.0","-3.7","0.2","-0.2","-2.1","2.0"], + ["1550","1028","32","23.1","1.5","4.0","-3.7","0.2","-0.2","-2.1","2.1"], + ["1600","991","38","22.6","1.5","4.0","-3.7","0.2","-0.2","-2.2","2.1"], + ["1650","947","49","21.9","1.4","4.0","-3.7","0.2","-0.3","-2.3","2.2"], ["1700","888","71","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"] ] }; @@ -77,52 +77,186 @@ case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - -0.0001) < ["700","1485","2","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"], ["750","1477","2","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"], ["800","1468","2","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"], - ["850","1460","2","37.0","7.2","6.7","-6.3","0.2","-0.1","-2.0","1.9"], - ["900","1451","2","37.0","6.8","6.8","-6.4","0.1","-0.2","-2.1","2.0"], - ["950","1443","2","36.9","6.5","6.9","-6.4","0.2","-0.2","-2.2","2.1"], - ["1000","1434","2","36.9","6.2","6.9","-6.5","0.2","-0.2","-2.3","2.2"], - ["1050","1425","2","36.8","5.9","7.0","-6.6","0.2","-0.2","-2.5","2.3"], - ["1100","1417","3","36.8","5.6","7.1","-6.6","0.2","-0.2","-2.6","2.4"], + ["850","1460","2","37.0","7.2","6.7","-6.3","0.1","-0.1","-2.0","1.9"], + ["900","1451","2","37.0","6.8","6.8","-6.4","0.1","-0.1","-2.1","2.0"], + ["950","1443","2","36.9","6.5","6.9","-6.4","0.1","-0.1","-2.2","2.1"], + ["1000","1434","2","36.9","6.2","6.9","-6.5","0.1","-0.1","-2.3","2.2"], + ["1050","1425","2","36.8","5.9","7.0","-6.6","0.1","-0.2","-2.5","2.3"], + ["1100","1417","3","36.8","5.6","7.1","-6.6","0.1","-0.2","-2.6","2.4"], ["1150","1408","3","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"], ["1200","1399","3","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"], ["1250","1390","3","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"], ["1300","1381","3","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"], ["1350","1372","3","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"], - ["1400","1362","4","36.4","4.4","7.5","-7.0","0.2","-0.3","-3.3","3.1"], - ["1450","1353","4","36.3","4.3","7.6","-7.1","0.2","-0.3","-3.4","3.2"], - ["1500","1344","4","36.2","4.2","7.7","-7.1","0.3","-0.3","-3.5","3.4"], - ["1550","1334","4","36.1","4.0","7.7","-7.2","0.3","-0.3","-3.7","3.5"], - ["1600","1324","4","36.0","3.9","7.8","-7.3","0.3","-0.3","-3.8","3.6"], - ["1650","1314","4","35.9","3.8","7.9","-7.3","0.3","-0.3","-3.9","3.7"], - ["1700","1304","5","35.8","3.7","7.9","-7.4","0.3","-0.3","-4.0","3.8"], - ["1750","1294","5","35.7","3.6","8.0","-7.5","0.3","-0.3","-4.2","3.9"], - ["1800","1284","5","35.6","3.5","8.1","-7.6","0.3","-0.3","-4.3","4.0"], - ["1850","1274","5","35.5","3.4","8.2","-7.6","0.3","-0.3","-4.4","4.2"], - ["1900","1263","6","35.4","3.3","8.2","-7.7","0.3","-0.3","-4.5","4.3"], - ["1950","1253","6","35.2","3.2","8.3","-7.8","0.3","-0.4","-4.7","4.4"], - ["2000","1242","6","35.1","3.1","8.4","-7.8","0.4","-0.3","-4.8","4.5"], - ["2050","1231","7","35.0","3.0","8.4","-7.9","0.4","-0.4","-4.9","4.7"], - ["2100","1219","7","34.8","2.9","8.5","-8.0","0.4","-0.4","-5.0","4.8"], - ["2150","1208","7","34.7","2.9","8.5","-8.0","0.4","-0.4","-5.2","4.9"], - ["2200","1196","8","34.5","2.8","8.6","-8.1","0.4","-0.4","-5.3","5.0"], - ["2250","1184","8","34.3","2.7","8.7","-8.2","0.4","-0.4","-5.4","5.1"], - ["2300","1171","9","34.2","2.7","8.7","-8.2","0.4","-0.4","-5.5","5.2"], - ["2350","1158","9","34.0","2.6","8.8","-8.3","0.4","-0.4","-5.7","5.4"], - ["2400","1145","10","33.8","2.5","8.8","-8.3","0.4","-0.4","-5.8","5.5"], - ["2450","1132","10","33.6","2.5","8.9","-8.4","0.4","-0.4","-5.9","5.6"], - ["2500","1118","11","33.3","2.4","8.9","-8.4","0.5","-0.4","-6.0","5.7"], - ["2550","1103","12","33.1","2.4","9.0","-8.5","0.4","-0.5","-6.1","5.8"], - ["2600","1088","13","32.8","2.3","9.0","-8.5","0.5","-0.4","-6.2","5.9"], - ["2650","1072","14","32.6","2.2","9.0","-8.6","0.5","-0.5","-6.4","6.0"], - ["2700","1056","15","32.3","2.2","9.0","-8.6","0.5","-0.5","-6.5","6.1"], - ["2750","1038","16","31.9","2.1","9.1","-8.6","0.5","-0.5","-6.6","6.3"], - ["2800","1020","18","31.6","2.1","9.1","-8.6","0.5","-0.5","-6.7","6.4"], - ["2850","1000","20","31.2","2.0","9.1","-8.6","0.5","-0.5","-6.8","6.5"], - ["2900","978","22","30.8","1.9","9.0","-8.6","0.5","-0.5","-6.9","6.5"], - ["2950","954","26","30.3","1.9","9.0","-8.6","0.5","-0.5","-7.0","6.6"], - ["3000","927","31","29.7","1.8","8.9","-8.5","0.5","-0.5","-7.1","6.7"], - ["3050","894","38","29.0","1.7","8.8","-8.4","0.5","-0.6","-7.2","6.8"], - ["3100","849","54","27.9","1.6","8.5","-8.3","0.5","-0.6","-7.2","6.8"] + ["1400","1362","4","36.4","4.4","7.5","-7.0","0.2","-0.2","-3.3","3.1"], + ["1450","1353","4","36.3","4.3","7.6","-7.1","0.2","-0.2","-3.4","3.2"], + ["1500","1344","4","36.2","4.2","7.7","-7.1","0.2","-0.2","-3.5","3.4"], + ["1550","1334","4","36.1","4.0","7.7","-7.2","0.2","-0.2","-3.7","3.5"], + ["1600","1324","4","36.0","3.9","7.8","-7.3","0.2","-0.2","-3.8","3.6"], + ["1650","1314","4","35.9","3.8","7.9","-7.3","0.2","-0.2","-3.9","3.7"], + ["1700","1304","5","35.8","3.7","7.9","-7.4","0.2","-0.2","-4.0","3.8"], + ["1750","1294","5","35.7","3.6","8.0","-7.5","0.2","-0.2","-4.2","3.9"], + ["1800","1284","5","35.6","3.5","8.1","-7.6","0.2","-0.3","-4.3","4.0"], + ["1850","1274","5","35.5","3.4","8.2","-7.6","0.2","-0.3","-4.4","4.2"], + ["1900","1263","6","35.4","3.3","8.2","-7.7","0.2","-0.3","-4.5","4.3"], + ["1950","1253","6","35.2","3.2","8.3","-7.8","0.2","-0.3","-4.7","4.4"], + ["2000","1242","6","35.1","3.1","8.4","-7.8","0.3","-0.3","-4.8","4.5"], + ["2050","1231","7","35.0","3.0","8.4","-7.9","0.3","-0.3","-4.9","4.7"], + ["2100","1219","7","34.8","2.9","8.5","-8.0","0.3","-0.3","-5.0","4.8"], + ["2150","1208","7","34.7","2.9","8.5","-8.0","0.3","-0.3","-5.2","4.9"], + ["2200","1196","8","34.5","2.8","8.6","-8.1","0.3","-0.3","-5.3","5.0"], + ["2250","1184","8","34.3","2.7","8.7","-8.2","0.3","-0.3","-5.4","5.1"], + ["2300","1171","9","34.2","2.7","8.7","-8.2","0.3","-0.3","-5.5","5.2"], + ["2350","1158","9","34.0","2.6","8.8","-8.3","0.3","-0.3","-5.7","5.4"], + ["2400","1145","10","33.8","2.5","8.8","-8.3","0.3","-0.3","-5.8","5.5"], + ["2450","1132","10","33.6","2.5","8.9","-8.4","0.3","-0.3","-5.9","5.6"], + ["2500","1118","11","33.3","2.4","8.9","-8.4","0.3","-0.3","-6.0","5.7"], + ["2550","1103","12","33.1","2.4","9.0","-8.5","0.3","-0.3","-6.1","5.8"], + ["2600","1088","13","32.8","2.3","9.0","-8.5","0.4","-0.3","-6.2","5.9"], + ["2650","1072","14","32.6","2.2","9.0","-8.6","0.4","-0.4","-6.4","6.0"], + ["2700","1056","15","32.3","2.2","9.0","-8.6","0.3","-0.4","-6.5","6.1"], + ["2750","1038","16","31.9","2.1","9.1","-8.6","0.4","-0.4","-6.6","6.3"], + ["2800","1020","18","31.6","2.1","9.1","-8.6","0.4","-0.4","-6.7","6.4"], + ["2850","1000","20","31.2","2.0","9.1","-8.6","0.4","-0.4","-6.8","6.5"], + ["2900","978","22","30.8","1.9","9.0","-8.6","0.4","-0.4","-6.9","6.5"], + ["2950","954","26","30.3","1.9","9.0","-8.6","0.4","-0.4","-7.0","6.6"], + ["3000","927","31","29.7","1.8","8.9","-8.5","0.4","-0.4","-7.1","6.7"], + ["3050","894","38","29.0","1.7","8.8","-8.4","0.4","-0.4","-7.2","6.8"], + ["3100","849","54","27.9","1.6","8.5","-8.3","0.4","-0.4","-7.2","6.8"] + ] + }; + +case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - 0) < 0.00001))): { + [ + ["100","1497","9","14.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["150","1445","14","14.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["200","1390","19","14.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["250","1333","26","13.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["300","1272","34","13.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1204","45","13.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1127","61","12.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1028","91","12.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ] + }; +case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - 0) < 0.00001))): { + [ + ["150","1562","1","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["200","1549","1","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["250","1536","2","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["300","1523","2","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1510","2","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1497","3","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1484","3","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["500","1471","3","28.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["550","1458","4","28.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["600","1445","4","28.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["650","1431","4","28.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["700","1418","5","28.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["750","1404","5","28.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1390","6","27.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["850","1376","6","27.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["900","1362","6","27.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1348","7","27.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1333","7","27.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1050","1318","8","27.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1100","1303","9","27.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1150","1288","9","27.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1200","1272","10","27.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1250","1256","11","26.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1239","12","26.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1350","1222","13","26.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1400","1205","13","26.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1450","1187","15","26.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1500","1168","16","26.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1550","1148","18","25.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1600","1127","19","25.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1650","1105","21","25.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1700","1082","24","24.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1750","1057","27","24.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1800","1029","31","24.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","997","37","23.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1900","960","46","23.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1950","912","63","22.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ] + }; +case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - 0) < 0.00001))): { + [ + ["300","1563","0","40.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1556","1","40.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1550","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1544","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["500","1537","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["550","1531","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["600","1525","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["650","1519","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["700","1512","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["750","1506","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1499","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["850","1493","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["900","1487","1","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1480","1","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1474","2","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1050","1467","2","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1100","1461","2","40.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1150","1454","2","40.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1200","1448","2","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1250","1441","2","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1435","2","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1350","1428","2","40.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1400","1422","2","40.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1450","1415","2","40.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1500","1408","2","40.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1550","1402","3","40.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1600","1395","3","40.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1650","1388","3","39.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1700","1381","3","39.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1750","1374","3","39.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1800","1367","3","39.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","1360","3","39.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1900","1353","3","39.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1950","1346","4","39.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2000","1339","4","39.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2050","1332","4","39.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2100","1325","4","39.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2150","1317","4","39.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2200","1310","4","39.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2250","1302","4","39.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2300","1295","5","39.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2350","1287","5","38.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2400","1280","5","38.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2450","1272","5","38.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2500","1264","5","38.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2550","1256","5","38.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2600","1248","6","38.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2650","1240","6","38.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2700","1232","6","38.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2750","1223","6","38.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2800","1215","7","37.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2850","1206","7","37.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2900","1197","7","37.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2950","1188","7","37.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3000","1179","8","37.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3050","1170","8","37.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3100","1160","8","37.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3150","1151","9","36.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3200","1141","9","36.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3250","1131","10","36.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3300","1120","10","36.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3350","1109","11","36.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3400","1098","11","35.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3450","1087","12","35.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3500","1075","13","35.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3550","1062","14","35.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3600","1049","15","35.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3650","1036","16","34.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3700","1021","17","34.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3750","1006","19","34.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3800","990","21","33.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3850","971","24","33.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3900","952","27","32.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3950","929","32","32.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["4000","900","40","31.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["4050","861","56","30.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] ] }; default { From 65d61ad1e3bc3d40780670849f26247931244e2e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 7 Apr 2015 19:22:33 -0500 Subject: [PATCH 017/276] opps --- addons/inventory/config.cpp | 2 +- addons/mk6mortar/CfgMagazines.hpp | 3 --- addons/mk6mortar/config.cpp | 1 - addons/mk6mortar/functions/fnc_handleFired.sqf | 2 -- 4 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 addons/mk6mortar/CfgMagazines.hpp diff --git a/addons/inventory/config.cpp b/addons/inventory/config.cpp index 83b4a081267..c7b6649be64 100644 --- a/addons/inventory/config.cpp +++ b/addons/inventory/config.cpp @@ -15,7 +15,7 @@ class CfgPatches { #include "RscDisplayInventory.hpp" class ACE_Settings { - class GVAR(useMils) { + class GVAR(inventoryDisplaySize) { value = 0; typeName = "SCALAR"; isClientSetable = 1; diff --git a/addons/mk6mortar/CfgMagazines.hpp b/addons/mk6mortar/CfgMagazines.hpp deleted file mode 100644 index 39f8bdd7809..00000000000 --- a/addons/mk6mortar/CfgMagazines.hpp +++ /dev/null @@ -1,3 +0,0 @@ -class CfgMagazines { - -}; diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index a6e63c819bc..6751cea5fbe 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -13,7 +13,6 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" -#include "CfgMagazines.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 555abcbe6f7..491794ccc74 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -57,8 +57,6 @@ if (_newMuzzleVelocityCoefficent != 1) then { _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; }; -systemChat format ["PFEH for %1", _ammo]; - [{ private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"]; PARAMS_2(_args,_pfID); From 71d609f8e052e5f0295317ab926df2c21ff7885f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 7 Apr 2015 19:30:07 -0500 Subject: [PATCH 018/276] Private Variables --- addons/mk6mortar/functions/fnc_dev_formatNumber.sqf | 3 +-- addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf | 1 - addons/mk6mortar/functions/fnc_dev_simulateShot.sqf | 2 +- addons/mk6mortar/functions/fnc_handleFired.sqf | 4 +++- addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf | 2 ++ addons/mk6mortar/functions/fnc_rangeTableOpen.sqf | 2 ++ addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf | 2 ++ addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf | 2 ++ 8 files changed, 13 insertions(+), 5 deletions(-) diff --git a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf index a8ad155eecd..84697bbf4a2 100644 --- a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf +++ b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf @@ -73,8 +73,7 @@ case ("sec"): { default {systemChat format ["badtype %1", _inputType];}; }; - -//CBA_fnc_formatNumber is stupid: [-9.58545, 1, 1, false] call CBA_fnc_formatNumber == "-9.-6" +//CBA_fnc_formatNumber is silly: [-9.58545, 1, 1, false] call CBA_fnc_formatNumber == "-9.-6" _prefix = if (_theNumber < 0) then {"-"} else {""}; diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf index 29a44e3a512..edffa1beb21 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -19,7 +19,6 @@ */ #include "script_component.hpp" - private ["_rangeToHit", "_heightToHit", "_muzzleVelocity", "_airFriction", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts"]; #define MAX_ATTEMPTS 22 diff --git a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf index de8471726c4..0e53807a6b2 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateShot.sqf @@ -23,7 +23,7 @@ */ #include "script_component.hpp" -private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_wind", "_gravity", "_timeStep", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"]; +private ["_angleDeg", "_muzzleVelocity", "_airFriction", "_temp", "_relDensity", "_tailWind", "_crosswind", "_heightOfTarget", "_timeStep", "_wind", "_gravity", "_currentPos", "_currentVelocity", "_currentTime", "_lastPos", "_kCoefficent", "_aparentWind", "_changeInVelocity", "_linConversion", "_middlePos", "_middlePosOld", "_middleTotalTravelTime", "_offsetDeg"]; _angleDeg = _this select 0; _muzzleVelocity = _this select 1; diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 491794ccc74..72c8aa4bff5 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -21,13 +21,15 @@ */ #include "script_component.hpp" +private ["_unit", "_shooterMan", "_bisAirFriction", "_temperature", "_newMuzzleVelocityCoefficent", "_bulletVelocity", "_bulletSpeed", "_muzzleVelocity", "_muzzleVelocityShift"]; + disableSerialization; PARAMS_7(_vehicle,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); if (!GVAR(airResistanceEnabled)) exitWith {}; // Large enough distance to not simulate any wind deflection -if (_unit distance ACE_player > 8000) exitWith {false}; +if (_vehicle distance ACE_player > 8000) exitWith {false}; //AI will have no clue how to use: _shooterMan = gunner _vehicle; diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index 8fa11b1cda9..91657fdbe2c 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -16,6 +16,8 @@ */ #include "script_component.hpp" +private ["_chargeText", "_xPos", "_yPos", "_wPos", "_hPos", "_tubeWeaponName", "_fireModes"]; + PARAMS_2(_player,_newVehicle); if (isNull _newVehicle) exitWith {}; diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf index 67d33c27271..c78b00e72d3 100644 --- a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -17,6 +17,8 @@ #define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) +private ["_weaponName", "_magazines", "_initSpeed", "_fireModes", "_muzzleVelocities", "_showToPlayer", "_artilleryCharge"]; + _weaponName = "mortar_82mm"; if (dialog) exitWith {ERROR("Dialog Open");}; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf index c9ee241b7a4..c0cc40ccdca 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -18,6 +18,8 @@ #define RANGE_TABLE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 20001) #define LIST_CHARGE ((uiNamespace getVariable "ACE_82mm_RangeTable_Dialog") displayCtrl 1501) +private ["_listBoxData", "_muzzleVelocity", "_airFriction", "_precalcArray"]; + _listBoxData = LIST_CHARGE lbData (lbCurSel LIST_CHARGE); if (isNil "_listBoxData" || {_listBoxData == ""}) exitWith {ERROR("lbCurSel out of bounds or no data");}; _muzzleVelocity = parseNumber _listBoxData; diff --git a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf index 49722655282..c81ff321325 100644 --- a/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf +++ b/addons/mk6mortar/functions/fnc_turretDisplayLoaded.sqf @@ -29,6 +29,7 @@ #define CTRL_CA_ELEV (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV") #define CTRL_CA_ELEV_NEED (configFile >> "RscInGameUI" >> "ACE_Mk6_RscWeaponRangeArtillery" >> "CA_IGUI_elements_group" >> "controls" >> "CA_ELEV_NEED") +private ["_display", "_fnc_hideControl"]; disableSerialization; @@ -36,6 +37,7 @@ _display = uiNamespace getVariable ["ACE_Mk6_RscWeaponRangeArtillery", displayNu if (isNull _display) exitWith {}; _fnc_hideControl = { + private "_idc"; PARAMS_2(_path,_hideCtrl); _idc = getNumber (_path >> "IDC"); _pos = []; From 656fa8868ad8242f7407d98223cd95a18017b879 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 7 Apr 2015 19:37:46 -0500 Subject: [PATCH 019/276] Module Icons --- addons/mk6mortar/CfgVehicles.hpp | 4 ++-- addons/mk6mortar/UI/Icon_Module_mk6_ca.paa | Bin 0 -> 5625 bytes extras/assets/icons/png/Icon_Module_mk6_ca.png | Bin 0 -> 21458 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 addons/mk6mortar/UI/Icon_Module_mk6_ca.paa create mode 100644 extras/assets/icons/png/Icon_Module_mk6_ca.png diff --git a/addons/mk6mortar/CfgVehicles.hpp b/addons/mk6mortar/CfgVehicles.hpp index a40cc68efb2..1c90842d5f8 100644 --- a/addons/mk6mortar/CfgVehicles.hpp +++ b/addons/mk6mortar/CfgVehicles.hpp @@ -54,7 +54,7 @@ class CfgVehicles { function = QFUNC(moduleInit); scope = 2; isGlobal = 0; - // icon = QUOTE(PATHTOF(UI\Icon_.paa)); + icon = QUOTE(PATHTOF(UI\Icon_Module_mk6_ca.paa)); functionPriority = 0; class Arguments { class airResistanceEnabled { @@ -65,7 +65,7 @@ class CfgVehicles { }; class allowComputerRangefinder { displayName = "Allow MK6 Computer"; - description = "Show the Computer and Rangefinder (these should be removed if you enable air resistance)"; + description = "Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)"; typeName = "BOOL"; defaultValue = 0; }; diff --git a/addons/mk6mortar/UI/Icon_Module_mk6_ca.paa b/addons/mk6mortar/UI/Icon_Module_mk6_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..8abfb4bdd31d81bc3505d2d3c49bacdb83bc9645 GIT binary patch literal 5625 zcmd^@eMl5(7{DK8Yc=~2>&mcf#U&~-E{gr5FUJCPBk|%cvm!`M%F8W+2=2;uE~zl6 zmaQnsGAQVu>n@LDpf7eIsQ##+f-=`g2=oq)5`{jXWqRHjpLgGR7k5~054vrbf&K0K zywB%5&&)ex^ookIA68Y=lsNz(8jY?qxVEf{v5p7hin2B3j5F|J{C#u*lr@tf`h#CoAb0+#&$@9U58qenb{fQ!qH6Rm%<{#JchGK>C% z%n~T(2N!>3Y`wElb_n_cxc*1YuPH6cvwudHx33plFEM{c>OZP|dwsG$nE!%C9+U3Gpf z@yqqd|FE-f^RuSQ6#rP(|GhyMu`Hi%?EGu*uKxQcK2f|24p&9*gg!kbPPcd`ne}y0 zeB-XKUa{oVhFaq0kDV<&r5$M-|J+wv<0Vgh1I3$lplfa9PhW(%XyB)Z_kLFQ6Q^7K z3r~8sIcu7qP<)G*YQBi(D<&=)e)IS3@^Rl1JC|z{BHGJ^#0!k|6Wfpc-||!ZVD_!> z)Mj4ql>>WsE%I#T+}@%8o{K4=cy|uzp%Sf*Gu+Mi4sZuT02hyBf-~w=f z8o~to2k%gt4TkyxVtE@5DjOM|MdJnwuhF175AU__giK43f_@+EgCT z-^lb>zHRg+D?fX{Q~&ne_8hW5=lP+Q?yi;>#L4PQR(|r2{r`l2E7?f)ruVj2^&CCM z;~k%5+s4l<_MZXJNwSxxx8~#v_s@)nUh`%}0TxU4`mPB^4;^7U{kixl5I-_1VO_7Q z9;zcVYUsVc^Zo8pVwdXwqeweBpBUw5MXK|-TT1ws4Di z7W*tZFu%5_=FyIuH0_!)?`-R`CT_N{U2EK=J@(MJ2Hq#`s)Iga2X<7<=M8{$!H=)` Iv)}agGf;wi%>V!Z literal 0 HcmV?d00001 diff --git a/extras/assets/icons/png/Icon_Module_mk6_ca.png b/extras/assets/icons/png/Icon_Module_mk6_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..26c2966551eb3d9df8ddf5c5a5a410543a641584 GIT binary patch literal 21458 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 z76 Date: Tue, 7 Apr 2015 19:41:48 -0500 Subject: [PATCH 020/276] Remove Dialog Check so it works inside veh --- addons/mk6mortar/functions/fnc_rangeTableOpen.sqf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf index c78b00e72d3..dfb53842ab1 100644 --- a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -19,9 +19,8 @@ private ["_weaponName", "_magazines", "_initSpeed", "_fireModes", "_muzzleVelocities", "_showToPlayer", "_artilleryCharge"]; -_weaponName = "mortar_82mm"; +_weaponName = "mortar_82mm"; //todo: work on other weapons -if (dialog) exitWith {ERROR("Dialog Open");}; createDialog "ACE_82mm_RangeTable_Dialog"; if (isNull (uiNamespace getVariable ["ACE_82mm_RangeTable_Dialog", displayNull])) exitWith {ERROR("Dialog failed to open");}; From f0468fa7c8102d733a7b4e6bed25654e89bc324a Mon Sep 17 00:00:00 2001 From: Niko Lehtovirta Date: Fri, 10 Apr 2015 14:21:52 +0300 Subject: [PATCH 021/276] Changed spawn code on respawn to PFH format --- addons/respawn/functions/fnc_module.sqf | 18 +++-- .../respawn/functions/fnc_moveRallypoint.sqf | 65 ++++++++++--------- addons/respawn/functions/fnc_removeBody.sqf | 25 +++---- 3 files changed, 60 insertions(+), 48 deletions(-) diff --git a/addons/respawn/functions/fnc_module.sqf b/addons/respawn/functions/fnc_module.sqf index 6d03c1eda31..391209009f6 100644 --- a/addons/respawn/functions/fnc_module.sqf +++ b/addons/respawn/functions/fnc_module.sqf @@ -33,15 +33,19 @@ GVAR(Module) = true; if (isServer) then { if (GVAR(RemoveDeadBodiesDisconnected)) then { _fnc_deleteDisconnected = { - _this spawn { - _unit = _this select 0; + [ + { + _unit = (_this select 0) select 0; - sleep 4; - - if (!alive _unit) then { + if (!alive _unit) then { deleteVehicle _unit; - }; - }; + + [_this select 0] call CBA_fnc_removePerFrameHandler; + }; + }, + 4, + [_this] + ] call CBA_fnc_addPerFrameHandler false }; diff --git a/addons/respawn/functions/fnc_moveRallypoint.sqf b/addons/respawn/functions/fnc_moveRallypoint.sqf index dcd48108440..28dcc543262 100644 --- a/addons/respawn/functions/fnc_moveRallypoint.sqf +++ b/addons/respawn/functions/fnc_moveRallypoint.sqf @@ -1,54 +1,59 @@ /* Name: ACE_Respawn_fnc_moveRallypoint - + Author(s): commy2 - + Description: Moves a rallypoint to the player's location - + Parameters: 0: OBJECT - unit 1: OBJECT - side - + Returns: VOID */ #include "script_component.hpp" -_this spawn { - _unit = _this select 0; - _side = _this select 1; +_unit = _this select 0; +_side = _this select 1; + +// rallypoint names are defined in CfgVehicles.hpp - // rallypoint names are defined in CfgVehicles.hpp +_rallypoint = [ + objNull, + missionNamespace getVariable ["ACE_Rallypoint_West", objNull], + missionNamespace getVariable ["ACE_RallypointExit_East", objNull], + missionNamespace getVariable ["ACE_RallypointExit_Independent", objNull] +] select ([west, east, independent] find _side) + 1; - _rallypoint = [ - objNull, - missionNamespace getVariable ["ACE_Rallypoint_West", objNull], - missionNamespace getVariable ["ACE_RallypointExit_East", objNull], - missionNamespace getVariable ["ACE_RallypointExit_Independent", objNull] - ] select ([west, east, independent] find _side) + 1; +if (isNull _rallypoint) exitWith {}; - if (isNull _rallypoint) exitWith {}; +_position = getPosATL _unit; +_position = _position findEmptyPosition [0, 2, typeOf _rallypoint]; +if (count _position == 0) then {_position = getPosATL _unit}; - _position = getPosATL _unit; - _position = _position findEmptyPosition [0, 2, typeOf _rallypoint]; - if (count _position == 0) then {_position = getPosATL _unit}; +_position set [2, 0]; - _position set [2, 0]; +[localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); - [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); +[{ + _args = _this select 0; + _rallypoint = _args select 0; + _unit = _args select 1; + _position = _args select 2; + _rallypoint = _args select 3; - sleep 5; - _rallypoint setPosATL _position; - _unit reveal _rallypoint; + _rallypoint setPosATL _position; + _unit reveal _rallypoint; - /* - _marker = format ["AGM_RallyPoint_%1", _side]; - _marker setMarkerPos _position; - _marker setMarkerTextLocal format ["%1:%2", [date select 3, 2, 0] call CBA_fnc_FORMATNumber, [date select 4, 2, 0] call CBA_fnc_FORMATNumber]; - */ + /* + _marker = format ["AGM_RallyPoint_%1", _side]; + _marker setMarkerPos _position; + _marker setMarkerTextLocal format ["%1:%2", [date select 3, 2, 0] call CBA_fnc_FORMATNumber, [date select 4, 2, 0] call CBA_fnc_FORMATNumber]; + */ - [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); -}; + [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); +}, 5, [_rallypoint, _unit, _position, _rallypoint]] diff --git a/addons/respawn/functions/fnc_removeBody.sqf b/addons/respawn/functions/fnc_removeBody.sqf index 5c3ed14988e..a17193aa1a9 100644 --- a/addons/respawn/functions/fnc_removeBody.sqf +++ b/addons/respawn/functions/fnc_removeBody.sqf @@ -1,22 +1,22 @@ /* Name: ACE_Respawn_fnc_removeBody - + Author(s): bux578 - + Description: removes a given body - + Parameters: 0: OBJECT - body 1: BOOLEAN - forceRemove // not used atm - + Returns: VOID */ #include "script_component.hpp" - + private ["_body", "_forceRemove", "_bodyRemoveTimer"]; _body = _this select 0; @@ -29,9 +29,12 @@ if (_forceRemove) then { _bodyRemoveTimer = 2; }; -[_body, _bodyRemoveTimer] spawn { - sleep (_this select 1); - // hideBody takes ~20s till body is fully underground - // a better hideBody would make this more aesthetic - deleteVehicle (_this select 0); -}; +[{ + + _unit = (_this select 1) select 0; + // hideBody takes ~20s till body is fully underground + // a better hideBody would make this more aesthetic + deleteVehicle _unit; +}, +_bodyRemoveTime, +[_body]] call CBA_fnc_addPerFrameHandler \ No newline at end of file From 9f2f660b89aec6c342cb429643deba54b7d6dce3 Mon Sep 17 00:00:00 2001 From: Niko Lehtovirta Date: Fri, 10 Apr 2015 16:23:27 +0300 Subject: [PATCH 022/276] fixed PFH to use EFUNC(common,waitAndExecute) --- addons/respawn/functions/fnc_module.sqf | 35 ++++++++-------- .../respawn/functions/fnc_moveRallypoint.sqf | 42 ++++++++++--------- addons/respawn/functions/fnc_removeBody.sqf | 19 +++++---- 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/addons/respawn/functions/fnc_module.sqf b/addons/respawn/functions/fnc_module.sqf index 391209009f6..57ebb91615f 100644 --- a/addons/respawn/functions/fnc_module.sqf +++ b/addons/respawn/functions/fnc_module.sqf @@ -32,24 +32,23 @@ GVAR(Module) = true; if (isServer) then { if (GVAR(RemoveDeadBodiesDisconnected)) then { - _fnc_deleteDisconnected = { - [ - { - _unit = (_this select 0) select 0; - - if (!alive _unit) then { - deleteVehicle _unit; - - [_this select 0] call CBA_fnc_removePerFrameHandler; - }; - }, - 4, - [_this] - ] call CBA_fnc_addPerFrameHandler - false - }; - - addMissionEventHandler ["HandleDisconnect", _fnc_deleteDisconnected]; + addMissionEventHandler ["HandleDisconnect", + { + [ + { + _unit = _this select 0; + + if (!alive _unit) then { + deleteVehicle _unit; + }; + }, + _this, + 4, + 1 + ] call EFUNC(common,waitAndExecute); + false + } + ]; }; }; diff --git a/addons/respawn/functions/fnc_moveRallypoint.sqf b/addons/respawn/functions/fnc_moveRallypoint.sqf index 28dcc543262..96672fecd64 100644 --- a/addons/respawn/functions/fnc_moveRallypoint.sqf +++ b/addons/respawn/functions/fnc_moveRallypoint.sqf @@ -37,23 +37,25 @@ if (count _position == 0) then {_position = getPosATL _unit}; _position set [2, 0]; -[localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); - -[{ - _args = _this select 0; - _rallypoint = _args select 0; - _unit = _args select 1; - _position = _args select 2; - _rallypoint = _args select 3; - - _rallypoint setPosATL _position; - _unit reveal _rallypoint; - - /* - _marker = format ["AGM_RallyPoint_%1", _side]; - _marker setMarkerPos _position; - _marker setMarkerTextLocal format ["%1:%2", [date select 3, 2, 0] call CBA_fnc_FORMATNumber, [date select 4, 2, 0] call CBA_fnc_FORMATNumber]; - */ - - [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); -}, 5, [_rallypoint, _unit, _position, _rallypoint]] +[ + { + _rallypoint = _this select 0; + _unit = _this select 1; + _position = _this select 2; + _rallypoint = _this select 3; + + _rallypoint setPosATL _position; + _unit reveal _rallypoint; + + /* + _marker = format ["AGM_RallyPoint_%1", _side]; + _marker setMarkerPos _position; + _marker setMarkerTextLocal format ["%1:%2", [date select 3, 2, 0] call CBA_fnc_FORMATNumber, [date select 4, 2, 0] call CBA_fnc_FORMATNumber]; + */ + + [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); + }, + [_rallypoint, _unit, _position, _rallypoint], + 5, + 1 +] call EFUNC(common,waitAndExecute); diff --git a/addons/respawn/functions/fnc_removeBody.sqf b/addons/respawn/functions/fnc_removeBody.sqf index a17193aa1a9..4b7deaa6ce2 100644 --- a/addons/respawn/functions/fnc_removeBody.sqf +++ b/addons/respawn/functions/fnc_removeBody.sqf @@ -29,12 +29,13 @@ if (_forceRemove) then { _bodyRemoveTimer = 2; }; -[{ - - _unit = (_this select 1) select 0; - // hideBody takes ~20s till body is fully underground - // a better hideBody would make this more aesthetic - deleteVehicle _unit; -}, -_bodyRemoveTime, -[_body]] call CBA_fnc_addPerFrameHandler \ No newline at end of file +[ + { + // hideBody takes ~20s till body is fully underground + // a better hideBody would make this more aesthetic + deleteVehicle _this; + }, + _body, + _bodyRemoveTimer, + 1 +] call EFUNC(common,waitAndExecute); From dac3047fcaf426a2e9a135dab304621fd195d833 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 10 Apr 2015 22:16:33 -0500 Subject: [PATCH 023/276] Use AllVehicles Instead of CAManBase --- addons/hearing/CfgEventHandlers.hpp | 4 ++-- addons/hearing/functions/fnc_firedNear.sqf | 24 +++++++++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index 94b1ab07034..cfe71fe01d8 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -20,9 +20,9 @@ class Extended_Init_EventHandlers { }; class Extended_FiredNear_EventHandlers { - class CAManBase { + class AllVehicles { class GVAR(FiredNear) { - clientFiredNear = QUOTE( if (GVAR(enableCombatDeafness) && {_this select 0 == ACE_player}) then {_this call FUNC(firedNear)}; ); + clientFiredNear = QUOTE(_this call FUNC(firedNear);); }; }; }; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index c66361801ec..2351afe3c55 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -21,23 +21,23 @@ */ #include "script_component.hpp" -private ["_unit", "_firer", "_distance", "_weapon", "_muzzle", "_mode", "_ammo", "_silencer", "_audibleFireCoef", "_loudness", "_strength"]; +private ["_silencer", "_audibleFireCoef", "_loudness", "_strength"]; -_unit = _this select 0; -_firer = _this select 1; -_distance = (_this select 2) max 1; -_weapon = _this select 3; -_muzzle = _this select 4; -_mode = _this select 5; -_ammo = _this select 6; +PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo); +//Only run if combatDeafness enabled: +if (!GVAR(enableCombatDeafness)) exitWith {}; +//Only run if firedNear object is player or player's vehicle: +if ((ACE_player != (_this select 0)) && {(vehicle ACE_player) != (_this select 0)}) exitWith {}; if (_weapon in ["Throw", "Put"]) exitWith {}; if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {}; +if (_distance < 1) then {_distance = 1;}; + _silencer = switch (_weapon) do { - case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; - case (secondaryWeapon _firer) : {(secondaryWeaponItems _firer) select 0}; - case (handgunWeapon _firer) : {(handgunItems _firer) select 0}; +case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; +case (secondaryWeapon _firer) : {(secondaryWeaponItems _firer) select 0}; +case (handgunWeapon _firer) : {(handgunItems _firer) select 0}; default {""}; }; @@ -56,4 +56,4 @@ _strength = _loudness - (_loudness/50 * _distance); // linear drop off if (_strength < 0.01) exitWith {}; -[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); +[{_this call FUNC(earRinging)}, [ACE_player, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); From 0edcf03e1253d1ed1b7c5b4014a90e953aa1184e Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 10 Apr 2015 23:21:54 -0500 Subject: [PATCH 024/276] Handle Vehicle Attunation --- addons/hearing/XEH_postInit.sqf | 5 ++ addons/hearing/XEH_preInit.sqf | 1 + addons/hearing/functions/fnc_firedNear.sqf | 5 +- .../fnc_updatePlayerVehicleAttunation.sqf | 57 +++++++++++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index adb7827ce7f..76656bf70bd 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -5,3 +5,8 @@ GVAR(newStrength) = 0; // Spawn volume updating process [FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler; + +GVAR(playerVehAttunation) = 1; + +["playerVehicleChanged", {_this call FUNC(updatePlayerVehicleAttunation);}] call EFUNC(common,addEventHandler); +["playerTurretChanged", {_this call FUNC(updatePlayerVehicleAttunation);}] call EFUNC(common,addEventHandler); diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index 0785a32affa..4ac4c779cda 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -10,6 +10,7 @@ PREP(hasEarPlugsIn); PREP(moduleHearing); PREP(putInEarPlugs); PREP(removeEarPlugs); +PREP(updatePlayerVehicleAttunation); PREP(updateVolume); ADDON = true; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 2351afe3c55..bd6a5035288 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -30,7 +30,8 @@ if (!GVAR(enableCombatDeafness)) exitWith {}; //Only run if firedNear object is player or player's vehicle: if ((ACE_player != (_this select 0)) && {(vehicle ACE_player) != (_this select 0)}) exitWith {}; if (_weapon in ["Throw", "Put"]) exitWith {}; -if (_unit != vehicle _unit && {!([_unit] call EFUNC(common,isTurnedOut))}) exitWith {}; + +_attenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttunation)}; if (_distance < 1) then {_distance = 1;}; @@ -52,7 +53,7 @@ _audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); //_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime"); _loudness = _audibleFireCoef * _audibleFire / 64; -_strength = _loudness - (_loudness/50 * _distance); // linear drop off +_strength = _attenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off if (_strength < 0.01) exitWith {}; diff --git a/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf b/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf new file mode 100644 index 00000000000..bb4899e998e --- /dev/null +++ b/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf @@ -0,0 +1,57 @@ +/* + * Author: PabstMirror + * Gets the sound attunation of a player to the outside. + * + * Arguments: + * 0: Unit (player) + * + * Return Value: + * Ammount that unit can hear outside + * + * Example: + * [] call ace_hearing_fnc_updatePlayerVehicleAttunation + * + * Public: No + */ +#include "script_component.hpp" + +_vehicle = vehicle ACE_player; + +if (isNull _vehicle) exitWith {}; + +_newAttenuation = -1; +if (ACE_player == _vehicle) then { + _newAttenuation = 1; +} else { + _effectType = ""; + _turretPath = [ACE_player] call EFUNC(common,getTurretIndex); + systemChat format ["_turretPath %1", _turretPath]; + _effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType"); + systemChat format ["Veh EffectType %1", _effectType]; + if (!(_turretPath isEqualTo [])) then { + _turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath); + + if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then { + _effectType = ""; + } else { + if (isText (_turretConfig >> "soundAttenuationTurret")) then { + _effectType = getText (_turretConfig >> "soundAttenuationTurret"); + }; + }; + }; + + _newAttenuation = switch (true) do { + case (_effectType == ""): {1}; + case (_effectType == "CarAttenuation"): {0.7}; + case (_effectType == "OpenCarAttenuation"): {1}; + case (_effectType == "TankAttenuation"): {0.1}; + case (_effectType == "HeliAttenuation"): {0.25}; + case (_effectType == "OpenHeliAttenuation"): {0.7}; + case (_effectType == "SemiOpenHeliAttenuation"): {0.5}; + case (_effectType == "HeliAttenuationGunner"): {0.75}; + case (_effectType == "HeliAttenuationRamp"): {0.75}; + default {1}; + }; +}; + +GVAR(playerVehAttunation) = _newAttenuation; From ae064359f6e096c32b785a03b0740044dc12fc19 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 10 Apr 2015 23:51:07 -0500 Subject: [PATCH 025/276] Remove Debug --- addons/hearing/XEH_postInit.sqf | 6 ++++-- addons/hearing/functions/fnc_firedNear.sqf | 8 ++++---- .../functions/fnc_updatePlayerVehicleAttunation.sqf | 5 ++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index 76656bf70bd..4dc22efd4fe 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -1,12 +1,14 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + GVAR(currentDeafness) = 0; GVAR(newStrength) = 0; +GVAR(playerVehAttunation) = 1; // Spawn volume updating process [FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler; -GVAR(playerVehAttunation) = 1; - +//Update veh attunation when player veh changes ["playerVehicleChanged", {_this call FUNC(updatePlayerVehicleAttunation);}] call EFUNC(common,addEventHandler); ["playerTurretChanged", {_this call FUNC(updatePlayerVehicleAttunation);}] call EFUNC(common,addEventHandler); diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index bd6a5035288..7b50a44a14e 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -21,17 +21,17 @@ */ #include "script_component.hpp" -private ["_silencer", "_audibleFireCoef", "_loudness", "_strength"]; +private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation"]; PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo); //Only run if combatDeafness enabled: if (!GVAR(enableCombatDeafness)) exitWith {}; //Only run if firedNear object is player or player's vehicle: -if ((ACE_player != (_this select 0)) && {(vehicle ACE_player) != (_this select 0)}) exitWith {}; +if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {}; if (_weapon in ["Throw", "Put"]) exitWith {}; -_attenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttunation)}; +_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttunation)}; if (_distance < 1) then {_distance = 1;}; @@ -53,7 +53,7 @@ _audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); //_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime"); _loudness = _audibleFireCoef * _audibleFire / 64; -_strength = _attenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off +_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off if (_strength < 0.01) exitWith {}; diff --git a/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf b/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf index bb4899e998e..e03fc23d50e 100644 --- a/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf +++ b/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf @@ -25,12 +25,11 @@ if (ACE_player == _vehicle) then { } else { _effectType = ""; _turretPath = [ACE_player] call EFUNC(common,getTurretIndex); - systemChat format ["_turretPath %1", _turretPath]; _effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType"); - systemChat format ["Veh EffectType %1", _effectType]; + if (!(_turretPath isEqualTo [])) then { _turretConfig = [(configFile >> "CfgVehicles" >> (typeOf _vehicle)), _turretPath] call EFUNC(common,getTurretConfigPath); - + if ((getNumber (_turretConfig >> "disableSoundAttenuation")) == 1) then { _effectType = ""; } else { From 4b50d760e9ed90a257cad4379329db478d9d39dd Mon Sep 17 00:00:00 2001 From: Niko Lehtovirta Date: Sat, 11 Apr 2015 20:36:38 +0300 Subject: [PATCH 026/276] fixed to use proper 4-space tabbing --- addons/respawn/functions/fnc_module.sqf | 26 +++++++------------ .../respawn/functions/fnc_moveRallypoint.sqf | 10 +++---- addons/respawn/functions/fnc_removeBody.sqf | 9 ++----- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/addons/respawn/functions/fnc_module.sqf b/addons/respawn/functions/fnc_module.sqf index 57ebb91615f..77e435349f7 100644 --- a/addons/respawn/functions/fnc_module.sqf +++ b/addons/respawn/functions/fnc_module.sqf @@ -32,23 +32,17 @@ GVAR(Module) = true; if (isServer) then { if (GVAR(RemoveDeadBodiesDisconnected)) then { - addMissionEventHandler ["HandleDisconnect", - { - [ - { - _unit = _this select 0; - - if (!alive _unit) then { - deleteVehicle _unit; - }; + addMissionEventHandler ["HandleDisconnect", { + [{ + _unit = _this select 0; + + if (!alive _unit) then { + deleteVehicle _unit; + }; }, - _this, - 4, - 1 - ] call EFUNC(common,waitAndExecute); - false - } - ]; + _this, 4, 1] call EFUNC(common,waitAndExecute); + false + }]; }; }; diff --git a/addons/respawn/functions/fnc_moveRallypoint.sqf b/addons/respawn/functions/fnc_moveRallypoint.sqf index 96672fecd64..30802c5de28 100644 --- a/addons/respawn/functions/fnc_moveRallypoint.sqf +++ b/addons/respawn/functions/fnc_moveRallypoint.sqf @@ -37,8 +37,7 @@ if (count _position == 0) then {_position = getPosATL _unit}; _position set [2, 0]; -[ - { +[{ _rallypoint = _this select 0; _unit = _this select 1; _position = _this select 2; @@ -54,8 +53,5 @@ _position set [2, 0]; */ [localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured); - }, - [_rallypoint, _unit, _position, _rallypoint], - 5, - 1 -] call EFUNC(common,waitAndExecute); +}, +[_rallypoint, _unit, _position, _rallypoint], 5, 1] call EFUNC(common,waitAndExecute); diff --git a/addons/respawn/functions/fnc_removeBody.sqf b/addons/respawn/functions/fnc_removeBody.sqf index 4b7deaa6ce2..e00f633e6ce 100644 --- a/addons/respawn/functions/fnc_removeBody.sqf +++ b/addons/respawn/functions/fnc_removeBody.sqf @@ -29,13 +29,8 @@ if (_forceRemove) then { _bodyRemoveTimer = 2; }; -[ - { +[{ // hideBody takes ~20s till body is fully underground // a better hideBody would make this more aesthetic deleteVehicle _this; - }, - _body, - _bodyRemoveTimer, - 1 -] call EFUNC(common,waitAndExecute); +}, _body, _bodyRemoveTimer, 1] call EFUNC(common,waitAndExecute); From 722bbf9a78b21676f1a51ed6de0ef805ea2ff5ef Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 15:55:02 +0200 Subject: [PATCH 027/276] Create README_DE.md --- README_DE.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 README_DE.md diff --git a/README_DE.md b/README_DE.md new file mode 100644 index 00000000000..a24fefe3f1e --- /dev/null +++ b/README_DE.md @@ -0,0 +1,48 @@ +

+ +

+

+ + ACE version + + + ACE download + + + ACE issues + + + ACE license + +

+

Benötigt eine Aktuelle Version von CBA A3 | BIF thread

+ +**ACE3** ist ein Gemeinschaftsprojekt der Moddinggruppen von **ACE2**, **AGM** und **CSE** um den Realismus und die Spieltiefe von Arma 3 zu steigern. + +Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License konformt geht. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) + +Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. + +### Features +* Improved medical system +* Logistics system including cargo transport and vehicle maintenance +* Explosives system including different trigger types +* Captivity system +* Realistic names for vehicles and weapons +* Realistic ballistics including wind and humidity +* Backblast simulation +* A fire control system for armored vehicles and helicopters + ***and more...*** + +#### Guides & How-Tos +If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). + +#### Contributing +If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. + +To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). + +#### Testing & Building +If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip). + +To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). From e7e95b9b1ecb03c3dd399203d33f3504ae792b72 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:03:11 +0200 Subject: [PATCH 028/276] Update README_DE.md --- README_DE.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README_DE.md b/README_DE.md index a24fefe3f1e..634b1bcfade 100644 --- a/README_DE.md +++ b/README_DE.md @@ -19,22 +19,22 @@ **ACE3** ist ein Gemeinschaftsprojekt der Moddinggruppen von **ACE2**, **AGM** und **CSE** um den Realismus und die Spieltiefe von Arma 3 zu steigern. -Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License konformt geht. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) +Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License übereinstimmt. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) -Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. +Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene Version der Mod unterhalten kann. Dies kann zum Beispiel einige Funktionalitäten auschließen, da das Feature nicht gewünscht ist, oder es mit einer anderen MOD in Konflikt gerät etc. .Ebenfalls können viele Einstellungen vom Missionsersteller vorgenommen werden (u.a. am medizinischem System), sodass eine individuelle Erfahrung gewährleistet wird. ### Features -* Improved medical system -* Logistics system including cargo transport and vehicle maintenance -* Explosives system including different trigger types +* Verbessertes medizinisches System +* Logistik System: U.a. Transport und Fahrzeugreperatur +* Sprengstoffsystem mit unterschiedlichen Auslösern * Captivity system -* Realistic names for vehicles and weapons -* Realistic ballistics including wind and humidity -* Backblast simulation -* A fire control system for armored vehicles and helicopters +* Reale Namen für vanilla Fahrzeuge und Waffen +* Realistisches ballistisches Verhalten (Wind und Luftfeuchtigkeit) +* Simulation der Rückstrahlzone +* Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber ***and more...*** -#### Guides & How-Tos +#### Anleitungen If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). #### Contributing From d834bfd5ba6a5308edcab7af69073cf73c00319e Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:05:58 +0200 Subject: [PATCH 029/276] Update README_DE.md --- README_DE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README_DE.md b/README_DE.md index 634b1bcfade..002d0994cee 100644 --- a/README_DE.md +++ b/README_DE.md @@ -32,12 +32,12 @@ Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, so * Realistisches ballistisches Verhalten (Wind und Luftfeuchtigkeit) * Simulation der Rückstrahlzone * Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber - ***and more...*** + ***und viel mehr...*** #### Anleitungen -If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). +Du hast ACE3 installiert, hast aber keine Ahnung was und wie alles funktioniert und wo sich was befindet? [Erste Schritte](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). -#### Contributing +#### Mitwirken If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). From 2933a8653f870e687095bc88d440b5f2d8230811 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:12:57 +0200 Subject: [PATCH 030/276] Update README_DE.md --- README_DE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README_DE.md b/README_DE.md index 002d0994cee..81e4300e065 100644 --- a/README_DE.md +++ b/README_DE.md @@ -32,15 +32,15 @@ Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, so * Realistisches ballistisches Verhalten (Wind und Luftfeuchtigkeit) * Simulation der Rückstrahlzone * Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber - ***und viel mehr...*** + ***und noch viel mehr...*** #### Anleitungen Du hast ACE3 installiert, hast aber keine Ahnung was und wie alles funktioniert und wo sich was befindet? [Erste Schritte](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). #### Mitwirken -If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. +Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, indem du nach BUGS Ausschau hältst, oder neue Funktionen vorschlägst. Um etwas Beizutragen, "Forke" einfach dieses Archiv (bzw. repository) und erstelle deine "Pull-Request", welche von anderen Entwicklern und Beiträgern überprüft wird. Bitte trage dich dabei in "AUTHORS.txt" mit deinem Nutzernamen und einer gütligen Email-Adresse ein. -To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). +Um einen Bug oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). #### Testing & Building If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip). From 0ccdd7b650013dc7c3072c82e6a81d6c8152d849 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:28:56 +0200 Subject: [PATCH 031/276] Update README_DE.md --- README_DE.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README_DE.md b/README_DE.md index 81e4300e065..a8eee2aa469 100644 --- a/README_DE.md +++ b/README_DE.md @@ -17,7 +17,7 @@

Benötigt eine Aktuelle Version von CBA A3 | BIF thread

-**ACE3** ist ein Gemeinschaftsprojekt der Moddinggruppen von **ACE2**, **AGM** und **CSE** um den Realismus und die Spieltiefe von Arma 3 zu steigern. +**ACE3** ist ein Gemeinschaftsprojekt der sich zusammengeschlossenenModdinggruppen von **ACE2**, **AGM** und **CSE** mit dem Ziel den Realismus und die Spieltiefe von Arma 3 zu steigern. Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License übereinstimmt. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) @@ -26,10 +26,10 @@ Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, so ### Features * Verbessertes medizinisches System * Logistik System: U.a. Transport und Fahrzeugreperatur -* Sprengstoffsystem mit unterschiedlichen Auslösern -* Captivity system -* Reale Namen für vanilla Fahrzeuge und Waffen -* Realistisches ballistisches Verhalten (Wind und Luftfeuchtigkeit) +* Sprengstoffsystem mit unterschiedlichen Zündern +* Gefangenensystem +* Reale Namen für Arma 3 Fahrzeuge und Waffen +* Realistisches, ballistisches Verhalten (Wind und Luftfeuchtigkeit) * Simulation der Rückstrahlzone * Ein Feuerleitsystem für gepanzerte Fahrzeuge und Hubschrauber ***und noch viel mehr...*** @@ -38,11 +38,11 @@ Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, so Du hast ACE3 installiert, hast aber keine Ahnung was und wie alles funktioniert und wo sich was befindet? [Erste Schritte](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). #### Mitwirken -Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, indem du nach BUGS Ausschau hältst, oder neue Funktionen vorschlägst. Um etwas Beizutragen, "Forke" einfach dieses Archiv (bzw. repository) und erstelle deine "Pull-Request", welche von anderen Entwicklern und Beiträgern überprüft wird. Bitte trage dich dabei in "AUTHORS.txt" mit deinem Nutzernamen und einer gütligen Email-Adresse ein. +Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, indem du nach Fehlern Ausschau hältst, oder neue Funktionen vorschlägst. Um etwas beizutragen, "Forke" einfach dieses Archiv (bzw. repository) und erstelle deine "Pull-Request", welche von anderen Entwicklern und Beiträgern überprüft wird. Bitte trage dich dabei in "AUTHORS.txt" mit deinem Nutzernamen und einer gütligen Email-Adresse ein. -Um einen Bug oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). +Um einen Fehler oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). #### Testing & Building -If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip). +Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir einfach die "Master Branch" herunter. Entweder nutzt du Git - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link] herunter (https://github.com/acemod/ACE3/archive/master.zip). -To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). +Wie du deine eigene Entwicklungsumgebung und eine Testversion von ACE erstellst folge [dieser Anleitung](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). From 333ce76016e93c560aaf927246b2c1bfebb1aeb0 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:29:07 +0200 Subject: [PATCH 032/276] Update README_DE.md --- README_DE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_DE.md b/README_DE.md index a8eee2aa469..70093e1ad01 100644 --- a/README_DE.md +++ b/README_DE.md @@ -17,7 +17,7 @@

Benötigt eine Aktuelle Version von CBA A3 | BIF thread

-**ACE3** ist ein Gemeinschaftsprojekt der sich zusammengeschlossenenModdinggruppen von **ACE2**, **AGM** und **CSE** mit dem Ziel den Realismus und die Spieltiefe von Arma 3 zu steigern. +**ACE3** ist ein Gemeinschaftsprojekt der sich zusammengeschlossenen Moddinggruppen von **ACE2**, **AGM** und **CSE** mit dem Ziel den Realismus und die Spieltiefe von Arma 3 zu steigern. Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License übereinstimmt. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) From 97e6b4039370c86c952453be1c659159cbe060e0 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:30:01 +0200 Subject: [PATCH 033/276] Update README_DE.md --- README_DE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_DE.md b/README_DE.md index 70093e1ad01..54ff7a41fcf 100644 --- a/README_DE.md +++ b/README_DE.md @@ -21,7 +21,7 @@ Da die MOD vollkommen als **open-source** Projekt gestaltet ist, steht es jedem frei Änderungen vorzuschlagen, oder seine eigene, modifizierte Version zu erstellen, solange diese ebenfalls der Öffentlichkeit zugänglich ist und mit GNU General Public License übereinstimmt. (Weitere Informationen ist der Lizenzdatei in diesem Projekt entnehmbar) -Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene Version der Mod unterhalten kann. Dies kann zum Beispiel einige Funktionalitäten auschließen, da das Feature nicht gewünscht ist, oder es mit einer anderen MOD in Konflikt gerät etc. .Ebenfalls können viele Einstellungen vom Missionsersteller vorgenommen werden (u.a. am medizinischem System), sodass eine individuelle Erfahrung gewährleistet wird. +Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, sodass jede Gemeinschaft ihre eigene Version der Mod unterhalten kann. Dies kann zum Beispiel einige Funktionalitäten ausschließen, da das Feature nicht gewünscht ist, oder es mit einer anderen MOD in Konflikt gerät etc. .Ebenfalls können viele Einstellungen vom Missionsersteller vorgenommen werden (u.a. am medizinischem System), sodass eine individuelle Erfahrung gewährleistet wird. ### Features * Verbessertes medizinisches System From 9850426492ab2bcff0bd165bff1b5b582f65ace4 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:30:34 +0200 Subject: [PATCH 034/276] Update README_DE.md --- README_DE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_DE.md b/README_DE.md index 54ff7a41fcf..9bd6d06c51b 100644 --- a/README_DE.md +++ b/README_DE.md @@ -25,7 +25,7 @@ Die Mod ist **modular gestaltet** — beinahe jede PBO kann entfernt werden, so ### Features * Verbessertes medizinisches System -* Logistik System: U.a. Transport und Fahrzeugreperatur +* Logistik System: U.a. Transport und Fahrzeugreparatur * Sprengstoffsystem mit unterschiedlichen Zündern * Gefangenensystem * Reale Namen für Arma 3 Fahrzeuge und Waffen From 0abb4a50339ca68ddf2b5fb02c9d9285a16ceb09 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:33:40 +0200 Subject: [PATCH 035/276] Update README_DE.md --- README_DE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_DE.md b/README_DE.md index 9bd6d06c51b..75269666c35 100644 --- a/README_DE.md +++ b/README_DE.md @@ -43,6 +43,6 @@ Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, Um einen Fehler oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). #### Testing & Building -Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir einfach die "Master Branch" herunter. Entweder nutzt du Git - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link] herunter (https://github.com/acemod/ACE3/archive/master.zip). +Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir einfach die "Master Branch" herunter. Entweder nutzt du Git - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link] (https://github.com/acemod/ACE3/archive/master.zip) herunter. Wie du deine eigene Entwicklungsumgebung und eine Testversion von ACE erstellst folge [dieser Anleitung](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). From 0d3e744183a71bad210c4daf9d144030fb0c4911 Mon Sep 17 00:00:00 2001 From: licht-im-Norden87 Date: Sun, 12 Apr 2015 16:36:28 +0200 Subject: [PATCH 036/276] Update README_DE.md --- README_DE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_DE.md b/README_DE.md index 75269666c35..0b5ca4d0ef1 100644 --- a/README_DE.md +++ b/README_DE.md @@ -42,7 +42,7 @@ Wenn du bei der Entwicklung der MOD mithelfen möchtest, so kannst du dies tun, Um einen Fehler oder ein Feature zu melden bzw. ein bereits Bestehendes zu ändern - nutze unseren [Issue Tracker](https://github.com/acemod/ACE3/issues). -#### Testing & Building +#### Testen & MOD erstellen Wenn du die neusten Entwicklungen erleben und uns dabei helfen möchtest bestehende Fehler zu entdecken, lade dir einfach die "Master Branch" herunter. Entweder nutzt du Git - wenn die Schritte bekannt sind - oder du lädst es dir direkt über [diesen Link] (https://github.com/acemod/ACE3/archive/master.zip) herunter. Wie du deine eigene Entwicklungsumgebung und eine Testversion von ACE erstellst folge [dieser Anleitung](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). From 51bc7208bcc4c94638238163afe0f25e568127ae Mon Sep 17 00:00:00 2001 From: simon84 Date: Sun, 12 Apr 2015 20:52:15 +0200 Subject: [PATCH 037/276] German translation Some german translations and corrections --- addons/disarming/stringtable.xml | 13 +- addons/hearing/stringtable.xml | 1 - addons/medical/stringtable.xml | 2110 +++++++++++++------------ addons/microdagr/stringtable.xml | 353 +++-- addons/nametags/stringtable.xml | 175 +- addons/optionsmenu/stringtable.xml | 308 ++-- addons/overheating/stringtable.xml | 308 ++-- addons/winddeflection/stringtable.xml | 88 +- 8 files changed, 1710 insertions(+), 1646 deletions(-) diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml index 845d0c286ea..7915b08578a 100644 --- a/addons/disarming/stringtable.xml +++ b/addons/disarming/stringtable.xml @@ -1,9 +1,10 @@  - + - - - Open Inventory - - + + + Open Inventory + Inventar öffner + + \ No newline at end of file diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 61be5206bf3..2209290c5e9 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -99,7 +99,6 @@ Disable ear ringing - Deaktiviere Ohrfiepen Desactivar zumbido de oídos Отключить эффект баротравмы Knalltrauma deaktivieren diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 2bba27f26c4..2ebd93a0507 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,1032 +1,1082 @@  + - - - Inject Atropine - Atropin injizieren - Inyectar Atropina - Ввести атропин - Aplikovat atropin - - - Inject Epinephrine - Epinephrine injizieren - Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat adrenalin - Ввести андреналил - Adrénaline - Adrenalin - Injetar Epinefrina - Inietta Epinefrina - - - Inject Morphine - Morphin injizieren - Inyectar Morfina - Wstrzyknij morfinę - Aplikovat morfin - Ввести морфин - Morphine - Morfium - Injetar Morfina - Inietta Morfina - - - Transfuse Blood - Bluttransfusion - Transfundir sangre - Przetocz krew - Transfúze krve - Перелить кровь - Transfusion - Infúzió - Transfundir Sangue - Effettua Trasfusione - - - Transfuse Plasma - Plasmatransfusion - Transfundir plasma - Перелить плазму - Transfúze plazmy - - - Transfuse Saline - Salzlösungtransfusion - Transfundir salino - Влить физраствор - Transfúze fyziologický roztoku - - - Apply Tourniquet - Aderpresse anwenden - Aplicar torniquete - Наложить жгут - Aplikovat škrtidlo - - - Bandage - Verbinden - Venda - Bandaż - Obvázat - Pansement - Benda - Kötözés - Atadura - Перевязать - - - Bandage Head - Kopf verbinden - Vendar la cabeza - Bandażuj głowę - Obvázat hlavu - Перевязать голову - Pansement Tête - Fej kötözése - Atar Cabeça - Benda la testa - - - Bandage Torso - Torso verbinden - Vendar el torso - Bandażuj tors - Obvázat hruď - Перевязать торс - Pansement Torse - Felsőtest kötözése - Atar Tronco - Benda il torso - - - Bandage Left Arm - Arm links verbinden - Vendar el brazo izquierdo - Bandażuj lewe ramię - Obvázat levou ruku - Перевязать левую руку - Pansement Bras Gauche - Bal kar kötözése - Atar Braço Esquerdo - Benda il braccio sinistro - - - Bandage Right Arm - Arm rechts verbinden - Vendar el brazo derecho - Bandażuj prawe ramię - Obvázat pravou ruku - Перевязать правую руку - Pansement Bras Droit - Jobb kar kötözése - Atar Braço Direito - Benda il braccio destro - - - Bandage Left Leg - Bein links verbinden - Vendar la pierna izquierda - Bandażuj lewą nogę - Obvázat levou nohu - Перевязать левую ногу - Pansement Jambe Gauche - Bal láb kötözése - Atar Perna Esquerda - Benda la gamba sinistra - - - Bandage Right Leg - Bein rechts verbinden - Vendar la pierna derecha - Bandażuj prawą nogę - Obvázat pravou nohu - Перевязать правую ногу - Pansement Jambe Droite - Jobb láb kötözése - Atar Perna Direita - Benda la gamba destra - - - Injecting Morphine ... - Morphin injizieren ... - Inyectando Morfina ... - Wstrzykiwanie morfiny ... - Aplikuji morfin ... - Введение морфина... - Injection de Morphine... - Morfium beadása... - Injetando Morfina ... - Inietto la morfina ... - - - Injecting Epinephrine ... - Epinephrin injizieren ... - Inyectando Epinefrina ... - Wstrzykiwanie adrenaliny ... - Aplikuji adrenalin ... - Введение андреналина ... - Injection d'Adrénaline ... - Adrenalin beadása... - Injetando Epinefrina ... - Inietto l'epinefrina ... - - - Injecting Atropine ... - Atropin injizieren ... - Inyectando Atropina ... - Введение атропина ... - Aplikuji atropin ... - - - Transfusing Blood ... - Bluttransfusion ... - Transfusión de sangre ... - Przetaczanie krwi ... - Probíhá transfúze krve ... - Переливание крови... - Transfusion Sanguine ... - Infúzió... - Transfundindo Sangue ... - Effettuo la trasfusione ... - - - Transfusing Saline ... - Sallösungtransfusion ... - Transfusión de salino ... - Вливание физраствора ... - Probíha transfúze fyziologický roztoku ... - - - Transfusing Plasma ... - Plasmatransfusion ... - Transfusión de plasma ... - Переливание плзмы ... - Probíha transfúze plazmy ... - - - Bandaging ... - Verbinden ... - Vendando ... - Bandażowanie ... - Obvazuji ... - Pansement ... - Sto applicando la benda ... - Bekötözés... - Atando ... - Перевязывание ... - - - Applying Tourniquet ... - Setze Aderpresse an ... - Aplicando torniquete ... - Наложение жгута ... - Aplikuji škrtidlo - - - Medical - Zdravotní - Médical - Sanitäter - Medico - Medyczne - Médico - Медик - Médico - - - Field Dressing - Notverband - Compresa de campaña - Бинтовая повязка - Obinadlo - - - Packing Bandage - Verband - Vendaje compresivo - Компресионный пакет - - - Elastic Bandage - Elastische Binde - Vendaje elástico - Давящая повязка - Elastické obinadlo - - - QuikClot - QuikClot - QuikClot - QuickClot - - - Check Pulse - Puls überprüfen - Comprobar pulso - Проверить пульс - Zkontrolovat pulz - - - Check Blood Pressure - Blutdruck überprüfen - Comprobar presión arterial - Проверить кровяное давление - Zkontrolovat krevní tlak - - - Triage Card - Verletztenanhängekarte - Tarjeta de triaje - Медкарта - - - Tourniquet - Aderpresse - Torniquete - Жгут - Škrtidlo - - - Remove Tourniquet - Entferne Aderpresse - Quitar torniquete - Снять жгут - Sundat škrtidlo - - - Give Blood IV (1000ml) - Gebe Blut IV (1000ml) - Dar Sangre IV (1000ml) - Дать кровь для в/в вливания (1000 мл) - - - Give Blood IV (500ml) - Gebe Blut IV (500ml) - Dar Sangre IV (500ml) - Дать кровь для в/в вливания (500 мл) - - - Give Blood IV (250ml) - Gebe Blut IV (250ml) - Dar Sangre IV (250ml) - Дать кровь для в/в вливания (250 мл) - - - Give Plasma IV (1000ml) - Gebe Plasma IV (1000ml) - Dar Plasma IV (1000ml) - Дать плазму для в/в вливания (1000 мл) - - - Give Plasma IV (500ml) - Gebe Plasma IV (500ml) - Dar Plasma IV (500ml) - Дать плазму для в/в вливания (500 мл) - - - Give Plasma IV (250ml) - Gebe Plasma IV (250ml) - Dar Plasma IV (250ml) - Дать плазму для в/в вливания (250 мл) - - - Give Saline IV (1000ml) - Dar Salino IV (1000ml) - Дать физраствор для в/в вливания (1000 мл) - - - Give Saline IV (500ml) - Dar Salino IV (500ml) - Дать физраствор для в/в вливания (500 мл) - - - Give Saline IV (250ml) - Dar Salino IV (250ml) - Дать физраствор для в/в вливания (250 мл) - - - Minor - Gering - Menor - Незначительные травмы - - - Delayed - Retrasado - Груз 300 - - - Immediate - Inmediato - Помощь отложена - - - Deceased - Fallecido - Груз 200 - - - None - Ninguno - Нет - - - Normal breathing - Normales Atmen - Дыхание в норме - Respiración normal - Respiration Normale - Normalny oddech - - - No breathing - Atmet nicht - Дыхания нет - No respira - Apnée - Brak oddechu - - - Difficult breathing - Schweres Atmen - Дыхание затруднено - Dificultad para respirar - Difficultée Respiratoire - Trudności z oddychaniem - - - Almost no breathing - Atmet beinahe nicht - Дыхания почти нет - Casi sin respiración - Respiration Faible - Prawie brak oddechu - - - Bleeding - Blutet - Кровотечение - Sangrando - Seignement - Krwawienie zewnętrzne - - - In Pain - Unter Schmerzen - Испытывает боль - Con dolor - A De La Douleur - W bólu - - - Lost a lot of Blood - Hat eine große Menge Blut verloren - Большая кровопотеря - Mucha sangre perdida - A Perdu Bcp de Sang - Stracił dużo krwi - - - Tourniquet [CAT] - Aderpresse [CAT] - Жгут - Torniquete [CAT] - Garot [CAT] - Opaska uciskowa [CAT] - - - Receiving IV [%1ml] - Wiederbeleben IV [%1ml] - Reciviendo IV [%1ml] - Принимается переливание [%1 мл] - - - Bandage (Basic) - Verband (Basis) - Повязка (обычная) - Vendaje (Básico) - Bandage (Standard) - Bandaż (jałowy) - - - Used to cover a wound - Verwendet um die Wunde zu schützen - Для перевязки ран - Utilizado para cubrir una herida - Utilisé Pour Couvrir Une Blessure - Używany w celu przykrycia i ochrony miejsca zranienia - - - A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. - Ein Verband, der aus einem besonderen Material besteht um die Wunde zu schützen, nachdem die Blutung gestoppt wurde. - Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - - - Packing Bandage - Verband - Тампонирующая повязка - Vendaje compresivo - Bandage Mèche - Bandaż (uciskowy) - - - Used to pack medium to large wounds and stem the bleeding - Wird verwendet, um mittel bis große Wunden zu verbinden und die Blutung zu stoppen - Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas o grandes y detener el sangrado - Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. - Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - - - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. - Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. - - - Bandage (Elastic) - Verband (Elastisch) - Повязка (давящая) - Vendaje (Elástico) - Bandage (Élastique) - Bandaż (elastyczny) - - - Bandage kit, Elastic - Verbandssatz, Elastisch - Давящая повязка - Kit de vendaje (Elástico) - Bandage Compressif Élastique - Zestaw bandaży elastycznych. - - - Allows an even compression and extra support to the injured area. - - - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. - Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. - Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada - - - Tourniquet (CAT) - Aderpresse (CAT) - Жгут - Torniquete (CAT) - Garot (CAT) - Staza (typ. CAT) - - - Slows down blood loss when bleeding - Veringert den Blutverlust - Уменьшает кровопотерю при кровотечении. - Reduce la velocidad de pérdida de sangre - Ralentit le seignement - Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. - - - A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. - - - Morphine autoinjector - Morphin Autoinjector - Морфин в пневмошприце - Morfina auto-inyectable - Auto-injecteur de Morphine - Autostrzykawka z morfiną - - - Used to combat moderate to severe pain experiences - Wird verwendet um moderate bis starke Schmärzen zu lindern. - Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos de moderados a severos - Utiliser pour contrer les douleurs modéré à severes. - Morfina. Ma silne działanie przeciwbólowe. - - - An analgesic used to combat moderate to severe pain experiences. - Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderados a severos. - Un Analgésique puissant servant a contrer les douleur modéré a severe. - Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. - - - Atropin autoinjector - Атропин в пневмошприце - Atropina auto-inyectable - Auto-injecteur d'Atropine - Autostrzykawka AtroPen - - - Used in NBC scenarios - Применяется для защиты от ОМП - Usado en escenarios NBQ - Utiliser en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. - - - A drug used by the Military in NBC scenarios. - Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por militares en escenarios NBQ - Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. - - - Epinephrine autoinjector - Адреналин в пневмошприце - Epinefrina auto-inyectable - Auto-injecteur d'épinéphrine - Autostrzykawka EpiPen - - - Increase heart rate and counter effects given by allergic reactions - Стимулирует работу сердца и купирует аллергические реакции. - Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas - Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique - Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - - - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. - - - Plasma IV (1000ml) - Плазма для в/в вливания (1000 мл) - Plasma IV (1000ml) - Plasma Sanguin IV (1000ml) - Osocze IV (1000ml) - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer les volume sanguin - Składnik krwi, używany do zwiększenia jej objętości. - - - A volume-expanding blood supplement. - Дополнительный препарат, применяемый при возмещении объема крови. - Suplemento para expandir el volumen sanguíneo. - Supplement visant a remplacer le volume sanguin et remplace les plaquettes. - Składnik krwi, używany do zwiększenia jej objętości. - - - Plasma IV (500ml) - Плазма для в/в вливания (500 мл) - Plasma IV (500ml) - Plasma Sanguin IV (500ml) - Osocze IV (500ml) - - - Plasma IV (250ml) - Плазма для в/в вливания (250 мл) - Plasma IV (250ml) - Plasma Sanguin (250ml) - Osocze IV (250ml) - - - Blood IV (1000ml) - Кровь для переливания (1000 мл) - Sangre IV (1000ml) - Cullot Sanguin IV (1000ml) - Krew IV (1000ml) - - - Blood IV, for restoring a patients blood (keep cold) - Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) - Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - - - O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. - - - Blood IV (500ml) - Кровь для переливания (500 мл) - Sangre IV (500ml) - Cullot Sanguin IV (500ml) - Krew IV (500ml) - - - Blood IV (250ml) - Кровь для переливания (250 мл) - Sangre IV (250ml) - Cullot Sanguin IV (250ml) - Krew IV (250ml) - - - Saline IV (1000ml) - Физраствор для в/в вливания (1000 мл) - Solución Salina IV (1000ml) - solution Saline 0.9% IV (1000ml) - Solanka 0,9% IV (1000ml) - - - Saline IV, for restoring a patients blood - Пакет физраствора для возмещения объема потерянной крови - Solución salina intravenosa, para restaurar el volumen sanguíneo - Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel - Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - - - A medical volume-replenishing agent introduced into the blood system through an IV infusion. - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. - Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). - - - Saline IV (500ml) - Физраствор для в/в вливания (500 мл) - Salino IV (500ml) - Solution Saline 0.9% IV (500ml) - Solanka 0,9% IV (500ml) - - - Saline IV (250ml) - Физраствор для в/в вливания (250 мл) - Salino IV (250ml) - Solution Saline 0.9% IV (250ml) - Solanka 0,9% IV (250ml) - - - Basic Field Dressing (QuikClot) - Первичный перевязочный пакет (QuikClot) - Vendaje básico (QuickClot) - Bandage Regulier (Coagulant) - Opatrunek QuikClot - - - QuikClot bandage - Гемостатический пакет QuikClot - Vendaje QuikClot - Bandage coagulant - Podstawowy opatrunek stosowany na rany - - - Hemostatic bandage with coagulant that stops bleeding. - - Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. - Vendaje hemostático con coagulante que detiene el sangrado. - - - Personal Aid Kit - Аптечка - Botiquín de primeros auxilios - Équipement de support Vitale - Apteczka osobista - - - Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitement avancé, tel les point de suture. - Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego - - - - - - - - - Surgical Kit - Хирургический набор - Kit quirúrgico - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit quirúrgico para el tratamiento avanzado en el campo de batalla - - - Surgical Kit for in field advanced medical treatment - Набор для хирургической помощи в полевых условиях - Kit quirúrgico para el tratamiento avanzado en el campo de batalla - - - Bodybag - Мешок для трупов - Bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Una bolsa para cadáveres - - - A bodybag for dead bodies - Мешок для упаковки трупов - Una bolsa para cadáveres - - - Blood Pressure - Артериальное давление - Presión arterial - - - Checking Blood Pressure.. - Проверка артериального давления... - Comprobando presión arterial... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a blood pressure of %2/%3 - Артериальное давление %2/%3 - La presión arterial es %2/%3 - - - You find a low blood pressure - Давление низкое - La presión arterial es baja - - - You find a normal blood pressure - Давление нормальное - La presión arterial es normal - - - You find a high blood pressure - Давление высокое - La presión arterial es alta - - - You find no blood pressure - Давления нет - No hay presión arterial - - - You fail to find a blood pressure - Артериальное давление не определяется - No puedes encontrar presión arterial - - - Pulse - Пульс - Pulso - - - Checking Heart Rate.. - Проверка пульса... - Comprobando ritmo cardíaco... - - - You checked %1 - Вы осмотрели раненого %1 - Examinando a %1 - - - You find a Heart Rate of %2 - Пульс %2 уд./мин. - El ritmo cardíaco es de %2 - - - You find a weak Heart Rate - Пульс слабый - El ritmo cardíaco es débil - - - You find a strong Heart Rate - Пульс учащенный - El ritmo cardíaco está acelerado - - - You find a normal Heart Rate - Пульс в норме - El ritmo cardíaco es bueno - - - You find no Heart Rate - Пульс не прощупывается - No tiene ritmo cardíaco - - - Response - Реакция - Respuesta - - - You check response of patient - Вы проверяете реакцию раненого - Compruebas si el paciente reacciona - - - %1 is responsive - %1 реагирует на раздражители - %1 ha reaccionado - - - %1 is not responsive - %1 не реагирует - %1 no reacciona - - - You checked %1 - Вы осмотрели раненого %1 - Examinas a %1 - - - Bandaged - Повязка наложена - Vendado - - - You bandage %1 (%2) - Вы перевязали раненого %1 (%2) - Aplicas vendaje a %1 en %2 - - - %1 is bandaging you - %1 перевязывает вас - %1 te está vendando - - - You start stitching injures from %1 (%2) - Вы зашиваете ранения от %1 (%2) - Estás suturando heridas de %1 en %2 - - - Stitching - Наложение швов - Suturando - - - You treat the airway of %1 - Вы интубируете раненого %1 - Estás intubando a %1 - - - Airway - Дыхательные пути - Vías aéreas - - - %1 is treating your airway - %1 проводит вам интубацию - %1 te está intubando - - - Drag - Ziehen - Arrastrar - Ciągnij - Táhnout - Тащить - Tracter - Húzás - Arrastar - Trascina - - - Carry - Tragen - Cargar - Nieś - Nést - Нести - Porter - Cipelés - Carregar - Trasporta - - - Release - Loslassen - Soltar - Połóż - Položit - Отпустить - Déposer - Elenged - Largar - Lascia - - - Load Patient Into - Patient Einladen - Cargar el paciente en - Załaduj pacjenta - Naložit pacianta do - Погрузить пациента в - Embarquer le Patient - Sebesült berakása - Carregar Paciente Em - Carica paziente nel - - - Unload Patient - Patient Ausladen - Descargar el paciente - Wyładuj pacjenta - Vyložit pacienta - Выгрузить пациента - Débarquer le Patient - Sebesült kihúzása - Descarregar Paciente - Scarica il paziente - - - Unload patient - Descargar el paciente - Выгрузить пациента - - - Load patient - Cargar el paciente en - Погрузить пациента - - - Place body in bodybag - Colocar cuerpo en bolsa para cadáveres - Поместить тело в мешок - - - Placing body in bodybag - Colocando cuerpo en bolsa para cadáveres - Помещение тела в мешок ... - - - %1 has bandaged patient - %1 has vendado al paciente - %1 перевязал пациента - - - %1 used %2 - %1 usó %2 - %1 применил %2 - - - %1 has given an IV - %1 has puesto una IV - %1 провел переливание - - - %1 applied a tourniquet - %1 aplicado torniquete - %1 наложил жгут - - - + + + Inject Atropine + Atropin injizieren + Inyectar Atropina + Ввести атропин + Aplikovat atropin + + + Inject Epinephrine + Epinephrine injizieren + Inyectar Epinefrina + Wtrzyknij adrenalinę + Aplikovat adrenalin + Ввести андреналил + Adrénaline + Adrenalin + Injetar Epinefrina + Inietta Epinefrina + + + Inject Morphine + Morphin injizieren + Inyectar Morfina + Wstrzyknij morfinę + Aplikovat morfin + Ввести морфин + Morphine + Morfium + Injetar Morfina + Inietta Morfina + + + Transfuse Blood + Bluttransfusion + Transfundir sangre + Przetocz krew + Transfúze krve + Перелить кровь + Transfusion + Infúzió + Transfundir Sangue + Effettua Trasfusione + + + Transfuse Plasma + Plasmatransfusion + Transfundir plasma + Перелить плазму + Transfúze plazmy + + + Transfuse Saline + Salzlösungtransfusion + Transfundir salino + Влить физраствор + Transfúze fyziologický roztoku + + + Apply Tourniquet + Aderpresse anwenden + Aplicar torniquete + Наложить жгут + Aplikovat škrtidlo + + + Bandage + Verbinden + Venda + Bandaż + Obvázat + Pansement + Benda + Kötözés + Atadura + Перевязать + + + Bandage Head + Kopf verbinden + Vendar la cabeza + Bandażuj głowę + Obvázat hlavu + Перевязать голову + Pansement Tête + Fej kötözése + Atar Cabeça + Benda la testa + + + Bandage Torso + Torso verbinden + Vendar el torso + Bandażuj tors + Obvázat hruď + Перевязать торс + Pansement Torse + Felsőtest kötözése + Atar Tronco + Benda il torso + + + Bandage Left Arm + Arm links verbinden + Vendar el brazo izquierdo + Bandażuj lewe ramię + Obvázat levou ruku + Перевязать левую руку + Pansement Bras Gauche + Bal kar kötözése + Atar Braço Esquerdo + Benda il braccio sinistro + + + Bandage Right Arm + Arm rechts verbinden + Vendar el brazo derecho + Bandażuj prawe ramię + Obvázat pravou ruku + Перевязать правую руку + Pansement Bras Droit + Jobb kar kötözése + Atar Braço Direito + Benda il braccio destro + + + Bandage Left Leg + Bein links verbinden + Vendar la pierna izquierda + Bandażuj lewą nogę + Obvázat levou nohu + Перевязать левую ногу + Pansement Jambe Gauche + Bal láb kötözése + Atar Perna Esquerda + Benda la gamba sinistra + + + Bandage Right Leg + Bein rechts verbinden + Vendar la pierna derecha + Bandażuj prawą nogę + Obvázat pravou nohu + Перевязать правую ногу + Pansement Jambe Droite + Jobb láb kötözése + Atar Perna Direita + Benda la gamba destra + + + Injecting Morphine ... + Morphin injizieren ... + Inyectando Morfina ... + Wstrzykiwanie morfiny ... + Aplikuji morfin ... + Введение морфина... + Injection de Morphine... + Morfium beadása... + Injetando Morfina ... + Inietto la morfina ... + + + Injecting Epinephrine ... + Epinephrin injizieren ... + Inyectando Epinefrina ... + Wstrzykiwanie adrenaliny ... + Aplikuji adrenalin ... + Введение андреналина ... + Injection d'Adrénaline ... + Adrenalin beadása... + Injetando Epinefrina ... + Inietto l'epinefrina ... + + + Injecting Atropine ... + Atropin injizieren ... + Inyectando Atropina ... + Введение атропина ... + Aplikuji atropin ... + + + Transfusing Blood ... + Bluttransfusion ... + Transfusión de sangre ... + Przetaczanie krwi ... + Probíhá transfúze krve ... + Переливание крови... + Transfusion Sanguine ... + Infúzió... + Transfundindo Sangue ... + Effettuo la trasfusione ... + + + Transfusing Saline ... + Sallösungtransfusion ... + Transfusión de salino ... + Вливание физраствора ... + Probíha transfúze fyziologický roztoku ... + + + Transfusing Plasma ... + Plasmatransfusion ... + Transfusión de plasma ... + Переливание плзмы ... + Probíha transfúze plazmy ... + + + Bandaging ... + Verbinden ... + Vendando ... + Bandażowanie ... + Obvazuji ... + Pansement ... + Sto applicando la benda ... + Bekötözés... + Atando ... + Перевязывание ... + + + Applying Tourniquet ... + Setze Aderpresse an ... + Aplicando torniquete ... + Наложение жгута ... + Aplikuji škrtidlo + + + Medical + Zdravotní + Médical + Sanitäter + Medico + Medyczne + Médico + Медик + Médico + + + Field Dressing + Notverband + Compresa de campaña + Бинтовая повязка + Obinadlo + + + Packing Bandage + Verband + Vendaje compresivo + Компресионный пакет + + + Elastic Bandage + Elastische Binde + Vendaje elástico + Давящая повязка + Elastické obinadlo + + + QuikClot + QuikClot + QuikClot + QuickClot + + + Check Pulse + Puls überprüfen + Comprobar pulso + Проверить пульс + Zkontrolovat pulz + + + Check Blood Pressure + Blutdruck überprüfen + Comprobar presión arterial + Проверить кровяное давление + Zkontrolovat krevní tlak + + + Triage Card + Verletztenanhängekarte + Tarjeta de triaje + Медкарта + + + Tourniquet + Aderpresse + Torniquete + Жгут + Škrtidlo + + + Remove Tourniquet + Entferne Aderpresse + Quitar torniquete + Снять жгут + Sundat škrtidlo + + + Give Blood IV (1000ml) + Gebe Blutinfusion (1000ml) + Dar Sangre IV (1000ml) + Дать кровь для в/в вливания (1000 мл) + + + Give Blood IV (500ml) + Gebe Blutinfusion (500ml) + Dar Sangre IV (500ml) + Дать кровь для в/в вливания (500 мл) + + + Give Blood IV (250ml) + Gebe Blutinfusion (250ml) + Dar Sangre IV (250ml) + Дать кровь для в/в вливания (250 мл) + + + Give Plasma IV (1000ml) + Gebe Plasmainfusion (1000ml) + Dar Plasma IV (1000ml) + Дать плазму для в/в вливания (1000 мл) + + + Give Plasma IV (500ml) + Gebe Plasmainfusion (500ml) + Dar Plasma IV (500ml) + Дать плазму для в/в вливания (500 мл) + + + Give Plasma IV (250ml) + Gebe Plasmainfusion (250ml) + Dar Plasma IV (250ml) + Дать плазму для в/в вливания (250 мл) + + + Give Saline IV (1000ml) + Dar Salino IV (1000ml) + Дать физраствор для в/в вливания (1000 мл) + Gebe Kochsalzlösung (1000ml) + + + Give Saline IV (500ml) + Dar Salino IV (500ml) + Дать физраствор для в/в вливания (500 мл) + Gebe Kochsalzlösung (500ml) + + + Give Saline IV (250ml) + Dar Salino IV (250ml) + Дать физраствор для в/в вливания (250 мл) + Gebe Kochsalzlösung (250ml) + + + Minor + Minor + Menor + Незначительные травмы + + + Delayed + Retrasado + Груз 300 + Delayed + + + Immediate + Inmediato + Помощь отложена + Immediate + + + Deceased + Fallecido + Груз 200 + Deceased + + + None + Ninguno + Нет + Kein + + + Normal breathing + Normales Atmen + Дыхание в норме + Respiración normal + Respiration Normale + Normalny oddech + + + No breathing + Atmet nicht + Дыхания нет + No respira + Apnée + Brak oddechu + + + Difficult breathing + Schweres Atmen + Дыхание затруднено + Dificultad para respirar + Difficultée Respiratoire + Trudności z oddychaniem + + + Almost no breathing + Atmet beinahe nicht + Дыхания почти нет + Casi sin respiración + Respiration Faible + Prawie brak oddechu + + + Bleeding + Blutet + Кровотечение + Sangrando + Seignement + Krwawienie zewnętrzne + + + In Pain + Unter Schmerzen + Испытывает боль + Con dolor + A De La Douleur + W bólu + + + Lost a lot of Blood + Hat eine große Menge Blut verloren + Большая кровопотеря + Mucha sangre perdida + A Perdu Bcp de Sang + Stracił dużo krwi + + + Tourniquet [CAT] + Aderpresse [CAT] + Жгут + Torniquete [CAT] + Garot [CAT] + Opaska uciskowa [CAT] + + + Receiving IV [%1ml] + Erhalte IV [%1ml] + Reciviendo IV [%1ml] + Принимается переливание [%1 мл] + + + Bandage (Basic) + Verband (Basis) + Повязка (обычная) + Vendaje (Básico) + Bandage (Standard) + Bandaż (jałowy) + + + Used to cover a wound + Verwendet um die Wunde zu schützen + Для перевязки ран + Utilizado para cubrir una herida + Utilisé Pour Couvrir Une Blessure + Używany w celu przykrycia i ochrony miejsca zranienia + + + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. + Ein Verband, der aus einem besonderen Material besteht um die Wunde zu schützen, nachdem die Blutung gestoppt wurde. + Повязка, накладываемая поверх раны после остановки кровотечения. + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. + + + Packing Bandage + Verband + Тампонирующая повязка + Vendaje compresivo + Bandage Mèche + Bandaż (uciskowy) + + + Used to pack medium to large wounds and stem the bleeding + Wird verwendet, um mittel bis große Wunden zu verbinden und die Blutung zu stoppen + Для тампонирования ран среднего и большого размера и остановки кровотечения. + Se utiliza para vendar heridas medianas o grandes y detener el sangrado + Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. + Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. + + + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. + Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. + + + Bandage (Elastic) + Verband (Elastisch) + Повязка (давящая) + Vendaje (Elástico) + Bandage (Élastique) + Bandaż (elastyczny) + + + Bandage kit, Elastic + Verbandssatz, Elastisch + Давящая повязка + Kit de vendaje (Elástico) + Bandage Compressif Élastique + Zestaw bandaży elastycznych. + + + Allows an even compression and extra support to the injured area. + + + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. + Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. + Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada + + + Tourniquet (CAT) + Aderpresse (CAT) + Жгут + Torniquete (CAT) + Garot (CAT) + Staza (typ. CAT) + + + Slows down blood loss when bleeding + Veringert den Blutverlust + Уменьшает кровопотерю при кровотечении. + Reduce la velocidad de pérdida de sangre + Ralentit le seignement + Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + + + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre + Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. + Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. + + + Morphine autoinjector + Morphin Autoinjector + Морфин в пневмошприце + Morfina auto-inyectable + Auto-injecteur de Morphine + Autostrzykawka z morfiną + + + Used to combat moderate to severe pain experiences + Wird verwendet um moderate bis starke Schmärzen zu lindern. + Для снятия средних и сильных болевых ощущений. + Usado para combatir los estados dolorosos de moderados a severos + Utiliser pour contrer les douleurs modéré à severes. + Morfina. Ma silne działanie przeciwbólowe. + + + An analgesic used to combat moderate to severe pain experiences. + Анальгетик для снятия средних и сильных болевых ощущений. + Analgésico usado para combatir los estados dolorosos de moderados a severos. + Un Analgésique puissant servant a contrer les douleur modéré a severe. + Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + + + Atropin autoinjector + Атропин в пневмошприце + Atropina auto-inyectable + Auto-injecteur d'Atropine + Autostrzykawka AtroPen + + + Used in NBC scenarios + Применяется для защиты от ОМП + Usado en escenarios NBQ + Utiliser en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + + + A drug used by the Military in NBC scenarios. + Препарат, используемый в войсках для защиты от оружия массового поражения. + Medicamento usado por militares en escenarios NBQ + Médicament utilisé par l'armée en cas d'attaque CBRN + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. + + + Epinephrine autoinjector + Адреналин в пневмошприце + Epinefrina auto-inyectable + Auto-injecteur d'épinéphrine + Autostrzykawka EpiPen + + + Increase heart rate and counter effects given by allergic reactions + Стимулирует работу сердца и купирует аллергические реакции. + Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas + Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique + Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + + + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. + + + Plasma IV (1000ml) + Плазма для в/в вливания (1000 мл) + Plasma IV (1000ml) + Plasma Sanguin IV (1000ml) + Osocze IV (1000ml) + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer les volume sanguin + Składnik krwi, używany do zwiększenia jej objętości. + + + A volume-expanding blood supplement. + Дополнительный препарат, применяемый при возмещении объема крови. + Suplemento para expandir el volumen sanguíneo. + Supplement visant a remplacer le volume sanguin et remplace les plaquettes. + Składnik krwi, używany do zwiększenia jej objętości. + + + Plasma IV (500ml) + Плазма для в/в вливания (500 мл) + Plasma IV (500ml) + Plasma Sanguin IV (500ml) + Osocze IV (500ml) + + + Plasma IV (250ml) + Плазма для в/в вливания (250 мл) + Plasma IV (250ml) + Plasma Sanguin (250ml) + Osocze IV (250ml) + + + Blood IV (1000ml) + Кровь для переливания (1000 мл) + Sangre IV (1000ml) + Cullot Sanguin IV (1000ml) + Krew IV (1000ml) + + + Blood IV, for restoring a patients blood (keep cold) + Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) + Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) + Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych + + + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. + + + Blood IV (500ml) + Кровь для переливания (500 мл) + Sangre IV (500ml) + Cullot Sanguin IV (500ml) + Krew IV (500ml) + + + Blood IV (250ml) + Кровь для переливания (250 мл) + Sangre IV (250ml) + Cullot Sanguin IV (250ml) + Krew IV (250ml) + + + Saline IV (1000ml) + Физраствор для в/в вливания (1000 мл) + Solución Salina IV (1000ml) + solution Saline 0.9% IV (1000ml) + Solanka 0,9% IV (1000ml) + + + Saline IV, for restoring a patients blood + Пакет физраствора для возмещения объема потерянной крови + Solución salina intravenosa, para restaurar el volumen sanguíneo + Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel + Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta + + + A medical volume-replenishing agent introduced into the blood system through an IV infusion. + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. + Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). + + + Saline IV (500ml) + Физраствор для в/в вливания (500 мл) + Salino IV (500ml) + Solution Saline 0.9% IV (500ml) + Solanka 0,9% IV (500ml) + Kochsalzlösung (500ml) + + + Saline IV (250ml) + Физраствор для в/в вливания (250 мл) + Salino IV (250ml) + Solution Saline 0.9% IV (250ml) + Solanka 0,9% IV (250ml) + Kochsalzlösung (250ml) + + + Basic Field Dressing (QuikClot) + Первичный перевязочный пакет (QuikClot) + Vendaje básico (QuickClot) + Bandage Regulier (Coagulant) + Opatrunek QuikClot + Kompresse (QuikClot) + + + QuikClot bandage + Гемостатический пакет QuikClot + Vendaje QuikClot + Bandage coagulant + Podstawowy opatrunek stosowany na rany + QuikClot Kompresse + + + Hemostatic bandage with coagulant that stops bleeding. + + Un bandage servant a coaguler les seignements mineur à moyen. + Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. + Vendaje hemostático con coagulante que detiene el sangrado. + Eine gerinnungsfördernd Kompresse zu Blutstillung. + + + Personal Aid Kit + Аптечка + Botiquín de primeros auxilios + Équipement de support Vitale + Apteczka osobista + + + Includes various treatment kit needed for stitching or advanced treatment + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. + Incluye material médico para tratamientos avanzados + Inclue du matériel medical pour les traitement avancé, tel les point de suture. + Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + + + + + + + + + Surgical Kit + Хирургический набор + Kit quirúrgico + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit quirúrgico para el tratamiento avanzado en el campo de batalla + + + Surgical Kit for in field advanced medical treatment + Набор для хирургической помощи в полевых условиях + Kit quirúrgico para el tratamiento avanzado en el campo de batalla + + + Bodybag + Мешок для трупов + Bolsa para cadáveres + Leichensack + + + A bodybag for dead bodies + Мешок для упаковки трупов + Una bolsa para cadáveres + Ein Sack für Leichen + + + A bodybag for dead bodies + Мешок для упаковки трупов + Una bolsa para cadáveres + Ein Sack zum Transport für Leichen + + + Blood Pressure + Артериальное давление + Presión arterial + Blutdruck + + + Checking Blood Pressure.. + Проверка артериального давления... + Comprobando presión arterial... + Messe Blutdruck ... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a blood pressure of %2/%3 + Артериальное давление %2/%3 + La presión arterial es %2/%3 + Der Blutdruck beträgt %2/%3 + + + You find a low blood pressure + Давление низкое + La presión arterial es baja + Der Blutdruck ist niedrig + + + You find a normal blood pressure + Давление нормальное + La presión arterial es normal + Der Blutdruck ist normal + + + You find a high blood pressure + Давление высокое + La presión arterial es alta + Der Blutdruck ist hoch + + + You find no blood pressure + Давления нет + No hay presión arterial + Kein Blutdruck feststellbar + + + You fail to find a blood pressure + Артериальное давление не определяется + No puedes encontrar presión arterial + Du kannst keinen Blutdruck feststellen + + + Pulse + Пульс + Pulso + Puls + + + Checking Heart Rate.. + Проверка пульса... + Comprobando ritmo cardíaco... + + + You checked %1 + Вы осмотрели раненого %1 + Examinando a %1 + + + You find a Heart Rate of %2 + Пульс %2 уд./мин. + El ritmo cardíaco es de %2 + Herzfrequenz beträgt %2 + + + You find a weak Heart Rate + Пульс слабый + El ritmo cardíaco es débil + Der Herzfrequenz ist gering + + + You find a strong Heart Rate + Пульс учащенный + El ritmo cardíaco está acelerado + Die Herzfrequenz ist hoch + + + You find a normal Heart Rate + Пульс в норме + El ritmo cardíaco es bueno + Die Herzfrequenz ist normal + + + You find no Heart Rate + Пульс не прощупывается + No tiene ritmo cardíaco + Keine Herzfrequenz feststellbar + + + Response + Реакция + Respuesta + Ansprache + + + You check response of patient + Вы проверяете реакцию раненого + Compruebas si el paciente reacciona + Du überprüfst die Ansprache des Patienten + + + %1 is responsive + %1 реагирует на раздражители + %1 ha reaccionado + %1 ist ansprechbar + + + %1 is not responsive + %1 не реагирует + %1 no reacciona + %1 ist nicht ansprechbar + + + You checked %1 + Вы осмотрели раненого %1 + Examinas a %1 + + + Bandaged + Повязка наложена + Vendado + Verbunden + + + You bandage %1 (%2) + Вы перевязали раненого %1 (%2) + Aplicas vendaje a %1 en %2 + Du bandagierst %1 (%2) + + + %1 is bandaging you + %1 перевязывает вас + %1 te está vendando + %1 verbindet dich + + + You start stitching injures from %1 (%2) + Вы зашиваете ранения от %1 (%2) + Estás suturando heridas de %1 en %2 + Du nähst die Wunden von %1 (%2) + + + Stitching + Наложение швов + Suturando + Nähen + + + You treat the airway of %1 + Вы интубируете раненого %1 + Estás intubando a %1 + Du behandelst die Luftweg von %1 + + + Airway + Дыхательные пути + Vías aéreas + Luftweg + + + %1 is treating your airway + %1 проводит вам интубацию + %1 te está intubando + %1 behandelt deinen Luftweg + + + Drag + Ziehen + Arrastrar + Ciągnij + Táhnout + Тащить + Tracter + Húzás + Arrastar + Trascina + + + Carry + Tragen + Cargar + Nieś + Nést + Нести + Porter + Cipelés + Carregar + Trasporta + + + Release + Loslassen + Soltar + Połóż + Položit + Отпустить + Déposer + Elenged + Largar + Lascia + + + Load Patient Into + Patient einladen + Cargar el paciente en + Załaduj pacjenta + Naložit pacianta do + Погрузить пациента в + Embarquer le Patient + Sebesült berakása + Carregar Paciente Em + Carica paziente nel + + + Unload Patient + Patient ausladen + Descargar el paciente + Wyładuj pacjenta + Vyložit pacienta + Выгрузить пациента + Débarquer le Patient + Sebesült kihúzása + Descarregar Paciente + Scarica il paziente + + + Unload patient + Descargar el paciente + Выгрузить пациента + Patient ausladen + + + Load patient + Cargar el paciente en + Погрузить пациента + Patient einladen + + + Place body in bodybag + Colocar cuerpo en bolsa para cadáveres + Поместить тело в мешок + Körper in Leichesack verpacken + + + Placing body in bodybag + Colocando cuerpo en bolsa para cadáveres + Помещение тела в мешок ... + Verpacke Körper in Leichensack + + + %1 has bandaged patient + %1 has vendado al paciente + %1 перевязал пациента + %1 hat Patient bandagiert + + + %1 used %2 + %1 usó %2 + %1 применил %2 + %1 hat %2 genutzt + + + %1 has given an IV + %1 has puesto una IV + %1 провел переливание + %1 hat eine Infusion gegeben + + + %1 applied a tourniquet + %1 aplicado torniquete + %1 наложил жгут + %1 hat eine Aderpresse angelegt + + + \ No newline at end of file diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 600570c24e1..a02149a333c 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,177 +1,180 @@  + - - - MicroDAGR GPS - MicroDAGR GPS - GPS MicroDAGR - MicroDAGR GPS - MicroDAGR GPS - - - MicroDAGR advanced GPS receiver - MicroDAGR - Fortgeschrittener GPS-Empfänger - Receptor avanzado GPS MicroDAGR - Многофункциональный GPS-приёмник. - - - Angular Unit: - Unidad angular: - Угловые единицы: - - - Mils - Mils - Mils - Тысячные - - - Show Waypoints On Map: - Zeige Wegpunkte auf Karte - Mostrar puntos de ruta en el mapa: - Показывать маршрутные точки на карте: - - - Degrees - Grad - Grados - Градусы - - - On - Zapnuto - Oui - Ein - - Wł. - Ativar - Вкл. - Encendido - - - Off - Vypnuto - Non - Aus - No - Wył. - Desativar - Выкл. - Apagado - - - Enter Grid Cords: - Introducir coordenadas de cuadrícula: - Введите координаты: - - - Name of [%1] - Name von [%1] - Nombre de [%1] - Название [%1] - - - MGRS-New - MGRS-NEU - Nuevo-MGRS - MGRS-Новая - - - WGD - WGD - WGD - WGD - - - Range: - Distancia - Reichweite: - Дистанция: - - - Compass Direction - Kompass Richtung - Dirección de la brújula - Азимут - - - Mark - Markiere - Marca - Отметка - - - Waypoints - Puntos de ruta - Wegpunkte - Машрутные точки - Waypointy - - - Connect To - Conectar a - Соединиться с - Verbinde zu - Připojit k - - - Settings - Einstellungen - Configuración - Настройки - Nastavení - - - SetWP - SetzeWP - Establecer PR - Установить МТ - Nastavit WP - - - Add - Hinzufügen - Añadir - Добавить - Přidat - - - Delete - Smazat - Supprimer - Löschen - Elimina - Usuń - Excluir - Удалить - Borrar - - - Toggle MicroDAGR Display Mode - Wechsle MircoDAGR Bildschirmmodus - Conmutar modo de pantalla del MicroDAGR - Сменить режим показа MicroDAGR - - - Show MicoDAGR - Zeige MicroDAGR - Mostrar MicroDAGR - Показать MicroDAGR - Ukázat MicroDAGR GPS - - - Configure MicroDAGR - Stelle MicroDAGR ein - Configurar MicroDAGR - Настроить MicroDAGR - Konfigurovat MicroDAGR GPS - - - Close MicroDAGR - Schließe MicroDAGR - Cerrar MicroDAGR - Закрыть MicroDAGR - Zavřít MicroDAGR GPS - - - + + + MicroDAGR GPS + MicroDAGR GPS + GPS MicroDAGR + MicroDAGR GPS + MicroDAGR GPS + + + MicroDAGR advanced GPS receiver + MicroDAGR - Fortgeschrittener GPS-Empfänger + Receptor avanzado GPS MicroDAGR + Многофункциональный GPS-приёмник. + + + Angular Unit: + Unidad angular: + Угловые единицы: + Winkeleinheit: + + + Mils + Mils + Mils + Тысячные + + + Show Waypoints On Map: + Zeige Wegpunkte auf Karte + Mostrar puntos de ruta en el mapa: + Показывать маршрутные точки на карте: + + + Degrees + Grad + Grados + Градусы + + + On + Zapnuto + Oui + Ein + + Wł. + Ativar + Вкл. + Encendido + + + Off + Vypnuto + Non + Aus + No + Wył. + Desativar + Выкл. + Apagado + + + Enter Grid Cords: + Introducir coordenadas de cuadrícula: + Введите координаты: + Gebe Koordinaten ein: + + + Name of [%1] + Name von [%1] + Nombre de [%1] + Название [%1] + + + MGRS-New + MGRS-NEU + Nuevo-MGRS + MGRS-Новая + + + WGD + WGD + WGD + WGD + + + Range: + Distancia + Reichweite: + Дистанция: + + + Compass Direction + Kompass Richtung + Dirección de la brújula + Азимут + + + Mark + Markiere + Marca + Отметка + + + Waypoints + Puntos de ruta + Wegpunkte + Машрутные точки + Waypointy + + + Connect To + Conectar a + Соединиться с + Verbinde zu + Připojit k + + + Settings + Einstellungen + Configuración + Настройки + Nastavení + + + SetWP + SetzeWP + Establecer PR + Установить МТ + Nastavit WP + + + Add + Hinzufügen + Añadir + Добавить + Přidat + + + Delete + Smazat + Supprimer + Löschen + Elimina + Usuń + Excluir + Удалить + Borrar + + + Toggle MicroDAGR Display Mode + Wechsle MircoDAGR Bildschirmmodus + Conmutar modo de pantalla del MicroDAGR + Сменить режим показа MicroDAGR + + + Show MicoDAGR + Zeige MicroDAGR + Mostrar MicroDAGR + Показать MicroDAGR + Ukázat MicroDAGR GPS + + + Configure MicroDAGR + Konfiguriere MicroDAGR + Configurar MicroDAGR + Настроить MicroDAGR + Konfigurovat MicroDAGR GPS + + + Close MicroDAGR + Schließe MicroDAGR + Cerrar MicroDAGR + Закрыть MicroDAGR + Zavřít MicroDAGR GPS + + + \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index c61158103fd..9ab1cc99d1f 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,89 +1,90 @@  + - - - Show Names - Namen anzeigen - Mostrar nombres - Afficher noms - Zobrazit jména - Pokaż nazwy - Nevek mutatása - Показать имена - - - Show player names - Spielernamen anzeigen - Mostrar nombres de jugadores - Pokaż nazwy graczy - Afficher nom des joueurs - Játékosnevek mutatása - Zobrazit jména hráčů - Mostrar nomes de jogadores - Mostra i nomi dei giocatori - Показать имена игроков - - - Show player name only on cursor (requires player names) - Pokaż nazwę gracza tylko pod kursorem - Mostrar nombres solo en el cursor (requiere Mostrar nombres de jugadores) - Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen) - Noms uniquement sous le curseur (si noms affichés) - Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů) - Mostra i nomi solo se puntati (richiede i nomi dei giocatori abilitati) - Mostrar nome de jogador somente no cursor (requer nome de jogadores) - Játékosok nevének mutatása (névcímke szükséges) - Показать имена игроков только под курсором (требует имен игроков) - - - Show player name only on keypress (requires player names) - Spielernamen nur auf Tastendruck anzeigen (benötigt Spielernamen) - Mostrar nombres solo al pulsar (requiere Mostrar nombres de jugadores) - Noms uniquement sur pression de la touche (si noms affichés) - Zobrazit jména hráčů jen na klávesu (vyžaduje jména hráčů) - Pokaż nazwę gracza tylko po przytrzymaniu klawisza - Játékosnevek mutatása gombnyomásra(névcíme szükséges) - Показать имена игроков только по нажатию клавиши (требует имен игроков) - - - Show player ranks (requires player names) - Spielerränge anzeigen (benötig Spielernamen) - Pokaż rangi graczy (wymaga nazw graczy) - Mostrar rango de los jugadores (requiere Mostrar nombres de jugadores) - Grade des joueurs (si noms affichés) - Zobrazit hodnosti hráčů (vyžaduje jména hráčů) - Mostra i gradi (richiede i nomi dei giocatori abilitati) - Mostrar patente de jogadores (requer nome de jogadores) - Játékosok rendfokozatának mutatása (névcímke szükséges) - Показать звания игроков (требует имен игроков) - - - Show vehicle crew info - Zeige Fahrzeugbesatzung - Mostrar tripulantes - Pokaż informacje o załodze pojazdu - Zobrazit info o posádce vozidla - Показать экипаж - - - Show name tags for AI units - Zeige KI-Namen - Mostrar etiquetas de nombre para unidades IA - Показывать именые метки ИИ - Zobrazit jména AI - - - Show SoundWaves (requires player names) - Zeigen Schallwellen (benötigt Spielernamen) - Mostrar onda sonora (requiere Mostrar nombres de jugadores) - Показывать звуковые волны (требует имен игроков) - Zobrazit SoundWaves (vyžaduje jména hráčů) - - - Default Nametag Color (Non Group Members) - Voreingestellte Namenfarbe (Spieler außerhalb der Gruppe) - Цвет меток игроков (не членов групп) - Color de etiquetas de nombre por defecto (No miembros de grupo) - - - + + + Show Names + Namen anzeigen + Mostrar nombres + Afficher noms + Zobrazit jména + Pokaż nazwy + Nevek mutatása + Показать имена + + + Show player names + Spielernamen anzeigen + Mostrar nombres de jugadores + Pokaż nazwy graczy + Afficher nom des joueurs + Játékosnevek mutatása + Zobrazit jména hráčů + Mostrar nomes de jogadores + Mostra i nomi dei giocatori + Показать имена игроков + + + Show player name only on cursor (requires player names) + Pokaż nazwę gracza tylko pod kursorem + Mostrar nombres solo en el cursor (requiere Mostrar nombres de jugadores) + Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen) + Noms uniquement sous le curseur (si noms affichés) + Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů) + Mostra i nomi solo se puntati (richiede i nomi dei giocatori abilitati) + Mostrar nome de jogador somente no cursor (requer nome de jogadores) + Játékosok nevének mutatása (névcímke szükséges) + Показать имена игроков только под курсором (требует имен игроков) + + + Show player name only on keypress (requires player names) + Spielernamen nur auf Tastendruck anzeigen (benötigt Spielernamen) + Mostrar nombres solo al pulsar (requiere Mostrar nombres de jugadores) + Noms uniquement sur pression de la touche (si noms affichés) + Zobrazit jména hráčů jen na klávesu (vyžaduje jména hráčů) + Pokaż nazwę gracza tylko po przytrzymaniu klawisza + Játékosnevek mutatása gombnyomásra(névcíme szükséges) + Показать имена игроков только по нажатию клавиши (требует имен игроков) + + + Show player ranks (requires player names) + Spielerränge anzeigen (benötig Spielernamen) + Pokaż rangi graczy (wymaga nazw graczy) + Mostrar rango de los jugadores (requiere Mostrar nombres de jugadores) + Grade des joueurs (si noms affichés) + Zobrazit hodnosti hráčů (vyžaduje jména hráčů) + Mostra i gradi (richiede i nomi dei giocatori abilitati) + Mostrar patente de jogadores (requer nome de jogadores) + Játékosok rendfokozatának mutatása (névcímke szükséges) + Показать звания игроков (требует имен игроков) + + + Show vehicle crew info + Fahrzeugbesatzung anzeigen + Mostrar tripulantes + Pokaż informacje o załodze pojazdu + Zobrazit info o posádce vozidla + Показать экипаж + + + Show name tags for AI units + KI namen anzeigen + Mostrar etiquetas de nombre para unidades IA + Показывать именые метки ИИ + Zobrazit jména AI + + + Show SoundWaves (requires player names) + Schallwellen anzeigen (benötigt Spielernamen) + Mostrar onda sonora (requiere Mostrar nombres de jugadores) + Показывать звуковые волны (требует имен игроков) + Zobrazit SoundWaves (vyžaduje jména hráčů) + + + Default Nametag Color (Non Group Members) + Voreingestellte Namenfarbe (Spieler außerhalb der Gruppe) + Цвет меток игроков (не членов групп) + Color de etiquetas de nombre por defecto (No miembros de grupo) + + + \ No newline at end of file diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 23fa52a52a9..e5fd60134e1 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,155 +1,157 @@  + - - - ACE Options - ACE Optionen - Opciones ACE - Opcje ACE - ACE Nastavení - ACE Options - ACE Настройки - Opções do ACE - ACE Opciók - Opzioni ACE - - - Fix Animation - Behebe Animation - Arreglar animación - Фикс анимации - Opravit animace - - - Reset All - Alles Zurücksetzen - Reiniciar todo - Полный сброс - Vyresetovat vše - - - Colors - Farben - Colores - Цвета - Barvy - - - Options - Optionen - Opciones - Opcje - Nastavení - Options - Настройки - Opções - Opciók - Opzioni - - - Values - Valores - Значения - Hodnoty - - - Yes - Ja - Si - Tak - Ano - Oui - Да - Igen - Sim - Si - - - No - Nein - No - Nie - Ne - Non - Нет - Nem - Não - No - - - Setting: - Nastavení: - Einstellung: - Установки: - Ajuste: - - - Export - Exportieren - Exportar - Экспорт - Exportovat - - - Open Export Menu - Öffne Exportmenü - Abrir menu d'exportación - Открыть меню экспорта - Otevřít exportovací menu - - - String input. - String input. - Introducir frase - Строчный ввод. - - - Array. Seperate elements by using ,. - Array. Teile unterschiedliche Elemente mit ,. - Matriz. Separa elementos usando ,. - Массив. Разделяйте элемены, используя запятую. - - - Number - Nummer - Numero - Число - Číslo - - - Uknown input type - Unbekannter Eingabetyp - Tipo de entrada desconocida - Неизвестный тип ввода - Neznámý vstup - - - Save input - Speichere Eingabe - Guardar entrada - Сохранить ввод - Uložit vstup - - - Include Client Settings - Beinhalte Client-Einstellungen - Incluir configuración de cliente - Включить настройки клиента - Zahrnout nastavení klienta - - - Exclude Client Settings - Schließe Client-Einstellungen aus - Excluir configuración de cliente - Исключить настройки клиента - Nezahrnout nastavení klienta - - - Settings exported to clipboard - Einstellungen in die Zwischenablage exportiert - Configuración exportada al portapapeles - Настройки экспортированы в буфер обмена - Nastevení exportována do schránky - - - + + + ACE Options + ACE Optionen + Opciones ACE + Opcje ACE + ACE Nastavení + ACE Options + ACE Настройки + Opções do ACE + ACE Opciók + Opzioni ACE + + + Fix Animation + Behebe Animation + Arreglar animación + Фикс анимации + Opravit animace + + + Reset All + Alles Zurücksetzen + Reiniciar todo + Полный сброс + Vyresetovat vše + + + Colors + Farben + Colores + Цвета + Barvy + + + Options + Optionen + Opciones + Opcje + Nastavení + Options + Настройки + Opções + Opciók + Opzioni + + + Values + Valores + Значения + Hodnoty + Werte + + + Yes + Ja + Si + Tak + Ano + Oui + Да + Igen + Sim + Si + + + No + Nein + No + Nie + Ne + Non + Нет + Nem + Não + No + + + Setting: + Nastavení: + Einstellung: + Установки: + Ajuste: + + + Export + Exportieren + Exportar + Экспорт + Exportovat + + + Open Export Menu + Öffne Exportmenü + Abrir menu d'exportación + Открыть меню экспорта + Otevřít exportovací menu + + + String input. + String input. + Introducir frase + Строчный ввод. + + + Array. Seperate elements by using ,. + Array. Teile unterschiedliche Elemente mit ,. + Matriz. Separa elementos usando ,. + Массив. Разделяйте элемены, используя запятую. + + + Number + Nummer + Numero + Число + Číslo + + + Uknown input type + Unbekannter Eingabetyp + Tipo de entrada desconocida + Неизвестный тип ввода + Neznámý vstup + + + Save input + Speichere Eingabe + Guardar entrada + Сохранить ввод + Uložit vstup + + + Include Client Settings + Client-Einstellungen einschließen + Incluir configuración de cliente + Включить настройки клиента + Zahrnout nastavení klienta + + + Exclude Client Settings + Client-Einstellungen ausschließen + Excluir configuración de cliente + Исключить настройки клиента + Nezahrnout nastavení klienta + + + Settings exported to clipboard + Einstellungen in die Zwischenablage exportiert + Configuración exportada al portapapeles + Настройки экспортированы в буфер обмена + Nastevení exportována do schránky + + + \ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 558abeb406a..0dfeffa559e 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,155 +1,157 @@  + - - - Display text on jam - Zeige Text bei Ladehemmung - Mostrar texto al encasquillar - Показывать текст, когда клинит оружие - Zobrazit upozornění při zaseknutí - - - Display a notification whenever your weapon gets jammed - Zeige einen Hinweis wenn die Waffe eine Ladehemmung hat - Mostrar notificación cada vez que el arma se encasquille - Демонстровать уведомление, каждый раз, когда клинит Ваше оружие. - Zobrazí upozornění při zaseknutí zbraně - - - Spare barrel - Ersatzlauf - Cañón de repuesto - Zapasowa lufa - Náhradní hlaveň - Deuxième canon - Запасной ствол - Tartalék cső - Cano Reserva - Canna di ricambio - - - Use to swap barrel. - Benutzen, um Lauf zu wechseln. - Permite intercambiar el cañón - Umożliwia wymianę lufy - Používané k výměně hlavně - Utilisé pour changer de canon. - Используется для смены ствола. - Cső kicseréléséhez. - Use para trocar o cano/estriamento. - Usata per cambiare la canna. - - - Weapon jammed! - Ladehemmung! - Arma encasquillada! - Broń się zacięła! - Zbraň se zasekla! - Arme enrayée - Оружие заклинило! - Elakadt a fegyver! - Arma travada! - Arma inceppata! - - - Clear jam - Ladehemmung beheben - Desencasquillar el arma - Usuń zacięcie - Uvolnit zbraň - Désenrayer l'arme - Исправить клин оружия. - Hárítsd el az akadályt! - Destravar arma - Ripulisci l'arma - - - Jam cleared - Ladehemmung behoben - Arma desencasquillada - Zacięcie usunięte - Zbraň uvolněna - Arme désenrayée - Оружие исправлено - Akadály elhárítva! - Arma destravada - Arma pronta al fuoco - - - Swap barrel - Lauf wechseln - Cambiar el cañón - Wymień lufę - Vyměnit hlaveň - Changer de canon - Сменить ствол - Cserélj csövet! - Substituir cano - Sostiuisci la canna - - - Swapping barrel... - Lauf wird gewechselt... - Cambiando el cañón... - Wymienianie lufy... - Vyměňuji hlaveň ... - Changement du canon... - Смена ствола... - Cső cserélése... - Substituindo cano... - Sto sostituendo la canna ... - - - Swapped barrel - Lauf gewechselt - Cañón cambiado - Lufa wymieniona - Hlaveň vyměněna - Canon changé - Ствол сменен - Cső kicserélve! - Cano substituído - Canna sostituita - - - Check weapons temperature - Temperatur der Waffe prüfen - Verificar temperatura del arma - Sprawdź temperaturę broni - Vérifier la température de l'arme - Hőmérséklet ellenőrzése - Zjistit teplotu zbraně - Conferir temperatura da arma - Controlla la temperatura della canna - Проверить температуру оружия - - - Check weapon<br/>temperature - Verificar temperatura<br/>del arma - - - Checking temperature ... - Prüfe Temperatur ... - Verificando temperatura ... - Sprawdzanie temperatury ... - Vérification de la température ... - Hőmérséklet ellenőrzése... - Zjišťuju teplotu ... - Conferindo temperatura ... - Sto controllando la temperatura ... - Проверка температуры ... - - - Temperature - Temperatur - Temperatura - Temperatura - Température - Hőmérséklet - Teplota - Temperatura - Temperatura - Температура - - - + + + Display text on jam + Zeige Text bei Ladehemmung + Mostrar texto al encasquillar + Показывать текст, когда клинит оружие + Zobrazit upozornění při zaseknutí + + + Display a notification whenever your weapon gets jammed + Zeige einen Hinweis wenn die Waffe eine Ladehemmung hat + Mostrar notificación cada vez que el arma se encasquille + Демонстровать уведомление, каждый раз, когда клинит Ваше оружие. + Zobrazí upozornění při zaseknutí zbraně + + + Spare barrel + Ersatzlauf + Cañón de repuesto + Zapasowa lufa + Náhradní hlaveň + Deuxième canon + Запасной ствол + Tartalék cső + Cano Reserva + Canna di ricambio + + + Use to swap barrel. + Benutzen, um Lauf zu wechseln. + Permite intercambiar el cañón + Umożliwia wymianę lufy + Používané k výměně hlavně + Utilisé pour changer de canon. + Используется для смены ствола. + Cső kicseréléséhez. + Use para trocar o cano/estriamento. + Usata per cambiare la canna. + + + Weapon jammed! + Ladehemmung! + Arma encasquillada! + Broń się zacięła! + Zbraň se zasekla! + Arme enrayée + Оружие заклинило! + Elakadt a fegyver! + Arma travada! + Arma inceppata! + + + Clear jam + Ladehemmung beheben + Desencasquillar el arma + Usuń zacięcie + Uvolnit zbraň + Désenrayer l'arme + Исправить клин оружия. + Hárítsd el az akadályt! + Destravar arma + Ripulisci l'arma + + + Jam cleared + Ladehemmung behoben + Arma desencasquillada + Zacięcie usunięte + Zbraň uvolněna + Arme désenrayée + Оружие исправлено + Akadály elhárítva! + Arma destravada + Arma pronta al fuoco + + + Swap barrel + Lauf wechseln + Cambiar el cañón + Wymień lufę + Vyměnit hlaveň + Changer de canon + Сменить ствол + Cserélj csövet! + Substituir cano + Sostiuisci la canna + + + Swapping barrel... + Lauf wird gewechselt... + Cambiando el cañón... + Wymienianie lufy... + Vyměňuji hlaveň ... + Changement du canon... + Смена ствола... + Cső cserélése... + Substituindo cano... + Sto sostituendo la canna ... + + + Swapped barrel + Lauf gewechselt + Cañón cambiado + Lufa wymieniona + Hlaveň vyměněna + Canon changé + Ствол сменен + Cső kicserélve! + Cano substituído + Canna sostituita + + + Check weapons temperature + Temperatur der Waffe prüfen + Verificar temperatura del arma + Sprawdź temperaturę broni + Vérifier la température de l'arme + Hőmérséklet ellenőrzése + Zjistit teplotu zbraně + Conferir temperatura da arma + Controlla la temperatura della canna + Проверить температуру оружия + + + Check weapon<br/>temperature + Verificar temperatura<br/>del arma + Waffentemperatur<br/>prüfen + + + Checking temperature ... + Prüfe Temperatur ... + Verificando temperatura ... + Sprawdzanie temperatury ... + Vérification de la température ... + Hőmérséklet ellenőrzése... + Zjišťuju teplotu ... + Conferindo temperatura ... + Sto controllando la temperatura ... + Проверка температуры ... + + + Temperature + Temperatur + Temperatura + Temperatura + Température + Hőmérséklet + Teplota + Temperatura + Temperatura + Температура + + + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 271332c943a..e4efd815f09 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,42 +1,48 @@ - + + - - - - Wind Information - Informacje o wietrze - Información del viento - Ветер - Informace o větru - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - Направление: %1 - Směr: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - Скорость: %1 м/с - Rychlost: %1 m/s - - - Weather Information - Informacje o pogodzie - Información Meteorológica - Погода - Informace o počasí - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - Влажность: %1% - Vlhkost: %1% - - - - + + + + Wind Information + Informacje o wietrze + Información del viento + Ветер + Informace o větru + Windinformation + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Направление: %1 + Směr: %1 + Richtung:%1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Скорость: %1 м/с + Rychlost: %1 m/s + Geschwindigkeit: %1 m/s + + + Weather Information + Informacje o pogodzie + Información Meteorológica + Погода + Informace o počasí + Wetterinformation + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Влажность: %1% + Vlhkost: %1% + Luftfeuchtigkeit: %1% + + + + \ No newline at end of file From 576431083393375e67bf6794e278ec3c64b402e3 Mon Sep 17 00:00:00 2001 From: bux578 Date: Thu, 16 Apr 2015 21:58:39 +0200 Subject: [PATCH 038/276] german translation double checked by bw medic --- addons/medical/stringtable.xml | 46 ++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 9f651e90b71..6cdcde292e1 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -72,7 +72,7 @@ Apply Tourniquet - Aderpresse anwenden + Tourniquet anwenden Aplicar torniquete Aplikovat škrtidlo Załóż stazę @@ -247,7 +247,7 @@ Applying Tourniquet ... - Setze Aderpresse an ... + Setze Tourniquet an ... Aplicando torniquete ... Aplikuji škrtidlo Zakładanie stazy ... @@ -334,7 +334,7 @@ Triage Card - Verletztenanhängekarte + Triagekarte Tarjeta de triaje Медкарта Karta segregacyjna @@ -345,7 +345,7 @@ Tourniquet - Aderpresse + Tourniquet Torniquete Жгут Škrtidlo @@ -356,7 +356,7 @@ Remove Tourniquet - Aderpresse entfernen + Tourniquet entfernen Quitar torniquete Снять жгут Sundat škrtidlo @@ -598,7 +598,7 @@ Tourniquet [CAT] - Aderpresse [CAT] + Tourniquet [CAT] Жгут Torniquete [CAT] Garrot [CAT] @@ -661,7 +661,7 @@ Used to pack medium to large wounds and stem the bleeding - Verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen + Wird verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen Для тампонирования ран среднего и большого размера и остановки кровотечения. Se utiliza para vendar heridas medianas o grandes y detener el sangrado Utilisé pour remplir la cavité créée dans une blessure de taille moyenne à grande. @@ -677,6 +677,7 @@ Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. Egy kötszerfajta, melyet a sebek nyomására használnak a vérzés elállítása és sebgyógyulás érdekében. A nyomókötés egy lehetőség nagyobb polytraumatikus sérülések esetén. Un bendaggio usato per bendare ferite con emorragie e facilitare la guarigione. Bendare una ferita è una opzione su ferite di vario tipo. + Ein Verband, um die Wunde abzudecken und die Wundheilung zu fördern. Wunden abdecken ist eine Option bei größeren Polytraumen Bandage (Elastic) @@ -701,7 +702,7 @@ Allows an even compression and extra support to the injured area. - + Ermöglicht eine gleichmäßige Kompression und zusätzliche Unterstützung für den verletzten Bereich. Давящая повязка обеспечивает равномерное сжатие и дополнительную поддержку поврежденной области Ce bandage peut être utilisé pour compresser la plaie afin de ralentir le saignement et assurer la tenue du bandage lors de mouvement. Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. @@ -711,7 +712,7 @@ Tourniquet (CAT) - Aderpresse (CAT) + Tourniquet [CAT] Жгут Torniquete (CAT) Garrot (CAT) @@ -819,7 +820,7 @@ Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas Augmente la fréquence cadiaque et annule les effets d'une réaction anaphylactique Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne - Steigert die Herzfrequenz, um den Effekt von allergischen Reaktionen zu bekämpfen + Steigert die Herzfrequenz und bekämpft Symptome von allergischen Reaktionen. Növeli a szívverést és ellenzi az allergiás reakciók hatásait Aumenta il battito cardiaco e combatte gli effetti di reazioni allergiche. @@ -830,6 +831,7 @@ Medicament qui fonctionne sur le système nerveux sympathique créant une dilatation des bronches, augmente la fréquence cardiaque et annule les effets d'une réaction allergique (anaphylaxie). Utilisé lors d'arrêt cardio-respiratoire pour augmenter les chances de retrouver un pouls. EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. Una sostanza che permette di dilatare i bronchi, aumentare il battito cardiaco e combattere effetti di reazioni allergiche. Usato anche in casi di arresto cardiaco. + Ein Medikament, dass die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht. Plasma IV (1000ml) @@ -849,6 +851,7 @@ Składnik krwi, używany do zwiększenia jej objętości. Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. + Volumenerweiterungsmittel (künstliches Blutvolumen) A volume-expanding blood supplement. @@ -858,6 +861,7 @@ Składnik krwi, używany do zwiększenia jej objętości. Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. + Volumenerweiterungsmittel (künstliches Blutvolumen) Plasma IV (500ml) @@ -897,6 +901,7 @@ Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych Vér-infúzió, intravénás bejuttatásra egy páciensnek (hidegen tárolandó) Sangue usato per ripristinare pazienti in cui si è verificata una perdita di sangue (conservare al fresco) + Blut IV, Bluthaushalt des Patienten wiederherstellen. (Kühl halten) O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. @@ -904,6 +909,7 @@ Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. Sangue 0 negativo usato per ripristinare sangue in pazienti in cui si è verificata una perdita di sangue. + O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt. Blood IV (500ml) @@ -943,6 +949,7 @@ Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta 0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására Soluzione salina, usata per ripristinare sangue nei pazienti. + Kochsalzlösung, ein medizinisches Volumenersatzmittel A medical volume-replenishing agent introduced into the blood system through an IV infusion. @@ -952,6 +959,7 @@ Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). Egy orvosi térfogat-helyreállító készítmény, melyet intravénás módon lehet a szervezetbe juttatni. Una soluzione medica per ripristinare il volume del sangue introdotta tramite trasfusione IV. + Ein medizinisches Volumenersatzmittel, dass durch einen intravenösen Zugang in den Blutkreislauf verabreicht wird. Saline IV (500ml) @@ -1128,6 +1136,7 @@ La Presión Arterial es %2/%3 A vérnyomás %2/%3 Hai riscontrato una pressione di %2/%3 + Der Blutdruck liegt bei %2/%3 You find a low blood pressure @@ -1317,6 +1326,7 @@ Zabandażowano Bekötözve Bendato + verbunden You bandage %1 (%2) @@ -1326,6 +1336,7 @@ Bandażujesz %1 (%2) Bekötözöd %1-t (%2) Stai bendando %1 (%2) + Du verbindest %1 (%2) %1 is bandaging you @@ -1335,6 +1346,7 @@ %1 bandażuje Ciebie %1 bekötöz téged %1 ti sta bendando + %1 verbindet dich You start stitching injures from %1 (%2) @@ -1344,6 +1356,7 @@ Zszywasz rany %1 (%2) Elkezded összevarni %1 sérüléseit (%2) Stai suturando le ferite di %1 (%2) + Du nähst die Wunde von %1 (%2) Stitching @@ -1353,6 +1366,7 @@ Szycie Összevarrás Suturando + Nähen You treat the airway of %1 @@ -1362,6 +1376,7 @@ Udrażniasz drogi oddechowe %1 Kezeled %1 légútját Controlli le vie respiratorie di %1 + Du behandelst die Atemwege von %1 Airway @@ -1381,6 +1396,7 @@ %1 udrażnia Twoje drogi oddechowe %1 kezeli a légútadat %1 ti sta trattando le vie respiratorie + %1 behandelt deine Atemwege Drag @@ -1450,6 +1466,7 @@ Débarquer le Patient Sebesült kihúzása Scarica il paziente + Patient Ausladen Load patient @@ -1459,6 +1476,7 @@ Embarquer le Patient Sebesült berakása Carica il paziente + Patient Einladen Place body in bodybag @@ -1468,6 +1486,7 @@ Mettre le corps dans la housse mortuaire Test hullazsákba helyezése Metti il corpo nella sacca per cadaveri + Platziere Körper in Leichensack Placing body in bodybag @@ -1477,6 +1496,7 @@ Placement du corps dans la housse Test hullazsákba helyezése ... Stai mettendo il corpo nella sacca + Platziere Körper in Leichensack %1 has bandaged patient @@ -1486,6 +1506,7 @@ %1 a pansé le patient %1 bekötözte a pácienst %1 ha bendato il paziente + %1 hat den Patienten verbunden %1 used %2 @@ -1495,6 +1516,7 @@ %1 utilise %2 %1 használta a %2-t %1 ha usato %2 + %1 benutzt %2 %1 has given an IV @@ -1504,6 +1526,7 @@ %1 a administré une IV %1 infúziót adott %1 ha somministrato una IV + %1 hat eine Infusion verabreicht %1 applied a tourniquet @@ -1513,6 +1536,7 @@ %1 a appliqué un garrot %1 felhelyezett egy érszorítót %1 ha applicato un laccio emostatico + %1 hat einen Tourniquet angelegt Heavily wounded @@ -1611,4 +1635,4 @@ Aberración cromática - + \ No newline at end of file From c18284d964c87b88fc6fdbe6aaec230ba50ef6d1 Mon Sep 17 00:00:00 2001 From: simon84 Date: Thu, 16 Apr 2015 22:04:24 +0200 Subject: [PATCH 039/276] German translation --- addons/medical/stringtable.xml | 4 ++-- addons/microdagr/stringtable.xml | 2 +- addons/nametags/stringtable.xml | 4 ++-- addons/optionsmenu/stringtable.xml | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 2ebd93a0507..18412dd7524 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -897,13 +897,13 @@ Response Реакция Respuesta - Ansprache + Ansprechbarkeit You check response of patient Вы проверяете реакцию раненого Compruebas si el paciente reacciona - Du überprüfst die Ansprache des Patienten + Du überprüfst die Ansprachbarkeit des Patienten %1 is responsive diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index a02149a333c..f5238138c8d 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -88,7 +88,7 @@ Range: Distancia - Reichweite: + Entfernung: Дистанция: diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 9ab1cc99d1f..d939549304a 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -28,7 +28,7 @@ Show player name only on cursor (requires player names) Pokaż nazwę gracza tylko pod kursorem Mostrar nombres solo en el cursor (requiere Mostrar nombres de jugadores) - Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen) + Zeige Spielernamen nur an, wenn die Maus auf sie gerichtet ist (benötigt Spielernamen) Noms uniquement sous le curseur (si noms affichés) Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů) Mostra i nomi solo se puntati (richiede i nomi dei giocatori abilitati) @@ -68,7 +68,7 @@ Show name tags for AI units - KI namen anzeigen + KI Namen anzeigen Mostrar etiquetas de nombre para unidades IA Показывать именые метки ИИ Zobrazit jména AI diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index e5fd60134e1..3ab6640c1a1 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -23,7 +23,7 @@ Reset All - Alles Zurücksetzen + Alles zurücksetzen Reiniciar todo Полный сброс Vyresetovat vše @@ -101,7 +101,7 @@ String input. - String input. + Zeichenketteneingabe. Introducir frase Строчный ввод. @@ -113,7 +113,7 @@ Number - Nummer + Zahl Numero Число Číslo From e7f9bc09df139fc4f749c58a402ae9275bed351e Mon Sep 17 00:00:00 2001 From: simon84 Date: Thu, 16 Apr 2015 22:52:49 +0200 Subject: [PATCH 040/276] German translations Conflicts: addons/disarming/stringtable.xml addons/hearing/stringtable.xml addons/medical/stringtable.xml addons/microdagr/stringtable.xml addons/nametags/stringtable.xml addons/optionsmenu/stringtable.xml addons/overheating/stringtable.xml addons/winddeflection/stringtable.xml --- addons/medical/stringtable.xml | 2 -- addons/winddeflection/stringtable.xml | 4 ---- 2 files changed, 6 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 3f00c07d88a..c0f34ebfb16 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1353,7 +1353,6 @@ Suturando Nähen Sutures - Suturando Szycie Összevarrás Suturando @@ -1364,7 +1363,6 @@ Estás intubando a %1 Du behandelst den Atemweg von %1 Vous traitez les voies respiratoires de %1 - Estás intubando a %1 Udrażniasz drogi oddechowe %1 Kezeled %1 légútját Controlli le vie respiratorie di %1 diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index cb5421b1b31..f510214a5fe 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,8 +1,4 @@  -<<<<<<< HEAD - -======= ->>>>>>> acemod/master From ff0fb12ca35ac1167bfac736ea6539fab7d24c23 Mon Sep 17 00:00:00 2001 From: simon84 Date: Thu, 16 Apr 2015 23:05:48 +0200 Subject: [PATCH 041/276] minor FCS changes (privatized variables, unnecessary counters) - added some variables to the private statement - removed an iteration counter, which was only used for debugging --- addons/fcs/functions/fnc_getAngle.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/fcs/functions/fnc_getAngle.sqf b/addons/fcs/functions/fnc_getAngle.sqf index 03024d8b98f..2ec9215bea8 100644 --- a/addons/fcs/functions/fnc_getAngle.sqf +++ b/addons/fcs/functions/fnc_getAngle.sqf @@ -19,7 +19,7 @@ #include "script_component.hpp" #define PRECISION 0.1 -private ["_distance","_angleTarget","_maxElev","_initSpeed","_airFriction","_timeToLive","_timeToLive","_simulationStep","_angle","_posTargetX","_posTargetY","_posX","_posY","_velocityX","_velocityY","_velocityMagnitude"]; +private ["_distance","_angleTarget","_maxElev","_initSpeed","_airFriction","_timeToLive","_timeToLive","_simulationStep","_angle","_posTargetX","_posTargetY","_posX","_posY","_velocityX","_velocityY","_velocityMagnitude","_angle1","_angle2","_f1","_f2","_temp"]; _distance = _this select 0; _angleTarget = _this select 1; @@ -73,7 +73,7 @@ if ((_this + [_maxElev]) call FUNC(traceBullet) < 0) exitWith {_maxElev - _angle // Newton Method / Secand Method _angle1 = _angleTarget; _angle2 = _maxElev; -_it2 = 0; +//_it2 = 0; _f1 = (_this + [_angle1]) call FUNC(traceBullet); if ((abs _f1) <= PRECISION) exitWith {0}; @@ -83,7 +83,7 @@ while {(abs _f1) > PRECISION} do { _angle1 = _angle2; _angle2 = _temp; _f1 = _f2; - _it2 = _it2+1; + //_it2 = _it2+1; }; //player globalChat format ["it1: %1 | _angle1: %2 | it2: %3 | _angle2: %4",_it1, _angle-_angleTarget, _it2, _angle2-_angleTarget]; From 079d2666dd47cb6397374e965a506f3614e970bb Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 02:39:15 +0300 Subject: [PATCH 042/276] Testing, 1-2 --- README.md | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 3ec6fe06833..7e7a477834c 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,36 @@

- +

+ + ACE3 Wiki + - ACE version + ACE3 Version - ACE download + ACE3 Download - ACE issues + ACE3 Issues - ACE license + ACE3 License

-

Requires the latest version of CBA A3 | BIF thread

+

Requires the latest version of CBA A3 | BIF thread | Facebook | YouTube | Twitter

**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3. -This mod is entirely **open-source**, and everyone is free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project). +The project is entirely **open-source**. Feel free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project). -The mod is **built modularly** — almost any PBO can be removed, thus a team can maintain its own tailored version of ACE, which excludes a select number of components that they don't like, or which conflict with other add-ons. Components themselves, like e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. +The mod is **built modularly**, so almost any PBO can be removed. This way, a team can maintain its own tailored version of ACE that might exclude any components they don't need, or those possibly conflicting with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. ### Features * Improved medical system @@ -31,18 +40,20 @@ The mod is **built modularly** — almost any PBO can be removed, thus a team ca * Realistic names for vehicles and weapons * Realistic ballistics including wind and humidity * Backblast simulation -* A fire control system for armored vehicles and helicopters +* A fire control system for armored vehicles and helicopters ***and more...*** #### Guides & How-Tos -If you installed ACE3, but have trouble understanding how it all works, or where to start — see [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md). +If you installed ACE3 but have trouble understanding how it all works, or where to start, read this article: +* [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) #### Contributing -If you want to help put with the ongoing development, you can do so by looking for possible bugs or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any .pbo you will be editing and the AUTHORS.txt file; including a valid email address. +You can help out with the ongoing development by looking for potential bugs in the existing code, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any PBO you will be editing and the [AUTHORS.txt](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. -To report a bug, propose a feature, or suggest a change to the existing one — please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues). See [this link](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) for details. +Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest a change to the existing set. See also: +* [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) +* [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) #### Testing & Building -If you want to help us test the latest development changes, feel free to download our master branch, using either git — if familiar with the process — or directly, by following [this link](https://github.com/acemod/ACE3/archive/master.zip). - -To find out how to set up your development environment and build a version of ACE for testing, follow [these instructions](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md). +If you want to help us test the latest development changes, first download our master branch directly ([link](https://github.com/acemod/ACE3/archive/master.zip)), or using [git commands](https://help.github.com/articles/fetching-a-remote/), then create a test build: +* [Setting Up The Development Environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) — step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. From 2a99448fac5d8168f8d48d31157b5ce1e35798b3 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 03:53:43 +0300 Subject: [PATCH 043/276] 3-4... --- README.md | 53 +++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 7e7a477834c..f37927c77cd 100644 --- a/README.md +++ b/README.md @@ -8,52 +8,57 @@ alt="ACE3 Wiki" /> - ACE3 Version - - + ACE3 Download ACE3 Issues + + BIF Thread + ACE3 License

-

Requires the latest version of CBA A3 | BIF thread | Facebook | YouTube | Twitter

+

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter

**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3. -The project is entirely **open-source**. Feel free to propose changes or maintain their own, customized version as long as they make their changes open to the public in accordance with the GNU General Public License (for more information check the license file attached to this project). +The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License: +* [`LICENSE`](https://github.com/acemod/ACE3/blob/master/LICENSE) -The mod is **built modularly**, so almost any PBO can be removed. This way, a team can maintain its own tailored version of ACE that might exclude any components they don't need, or those possibly conflicting with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. +The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those that might possibly conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. ### Features -* Improved medical system -* Logistics system including cargo transport and vehicle maintenance -* Explosives system including different trigger types -* Captivity system -* Realistic names for vehicles and weapons -* Realistic ballistics including wind and humidity -* Backblast simulation -* A fire control system for armored vehicles and helicopters - ***and more...*** - -#### Guides & How-Tos -If you installed ACE3 but have trouble understanding how it all works, or where to start, read this article: -* [Getting Started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) +* Improved medical system +* Logistics system including cargo transport and vehicle maintenance +* Explosives system including different trigger types +* Captivity system +* Realistic names for vehicles and weapons +* Realistic ballistics including wind and humidity +* Backblast simulation +* A fire control system for armored vehicles and helicopters
+ ***and more...*** + +#### Guides & how-tos +If you installed ACE3 but have trouble understanding how it all works, or where to start, read this: +* [Getting started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) #### Contributing -You can help out with the ongoing development by looking for potential bugs in the existing code, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. In the process, please add yourself to the author array of any PBO you will be editing and the [AUTHORS.txt](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. +You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. -Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest a change to the existing set. See also: +Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report a bug, propose a feature, or suggest changes to the existing ones. See also: * [How to report an issue](http://ace3mod.com/wiki/user/how-to-report-an-issue.html) * [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) -#### Testing & Building -If you want to help us test the latest development changes, first download our master branch directly ([link](https://github.com/acemod/ACE3/archive/master.zip)), or using [git commands](https://help.github.com/articles/fetching-a-remote/), then create a test build: -* [Setting Up The Development Environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) — step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. +#### Testing & building +To help us test the latest development changes, first, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or with [git commands](https://help.github.com/articles/fetching-a-remote/)), then assemble a local test build: +* [Setting up the development environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) — step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. From c2588583b138afff53a86c414529f1629b928ea8 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 04:08:58 +0300 Subject: [PATCH 044/276] And just one more --- README.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f37927c77cd..9dadd570609 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@

+ height="96" />

- - ACE3 Wiki - ACE3 Version @@ -46,11 +42,11 @@ The mod is **built modularly**, so almost any included PBO can be easily removed * Realistic ballistics including wind and humidity * Backblast simulation * A fire control system for armored vehicles and helicopters
- ***and more...*** +***and more...*** #### Guides & how-tos -If you installed ACE3 but have trouble understanding how it all works, or where to start, read this: -* [Getting started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) +If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first: +* [Getting started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) #### Contributing You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. @@ -60,5 +56,5 @@ Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report * [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) #### Testing & building -To help us test the latest development changes, first, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or with [git commands](https://help.github.com/articles/fetching-a-remote/)), then assemble a local test build: -* [Setting up the development environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) — step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. +To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or with [git commands](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build: +* [Setting up the development environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. From 1dfd6651545e800799b39da6f2df070a1efe9d8a Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 04:24:25 +0300 Subject: [PATCH 045/276] Upscaling the logo +Reddit link --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9dadd570609..82a7910fc69 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

+ height="112" />

@@ -24,7 +24,7 @@ alt="ACE3 License" />

-

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter

+

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

**ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3. From 90965449225968a1cb94dd32441a147b97dd2507 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 04:30:24 +0300 Subject: [PATCH 046/276] Backblast AREA --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 82a7910fc69..1be9e994c1d 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License: * [`LICENSE`](https://github.com/acemod/ACE3/blob/master/LICENSE) -The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those that might possibly conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. +The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. ### Features * Improved medical system @@ -40,7 +40,7 @@ The mod is **built modularly**, so almost any included PBO can be easily removed * Captivity system * Realistic names for vehicles and weapons * Realistic ballistics including wind and humidity -* Backblast simulation +* Backblast area simulation * A fire control system for armored vehicles and helicopters
***and more...*** From 00f2389fc00aaff1aa8ff6de3baac07ac82c9363 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 04:33:49 +0300 Subject: [PATCH 047/276] less is more --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1be9e994c1d..b0cfaf11d34 100644 --- a/README.md +++ b/README.md @@ -56,5 +56,5 @@ Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report * [How to make a feature request](http://ace3mod.com/wiki/user/how-to-make-a-feature-request.html) #### Testing & building -To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or with [git commands](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build: +To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build: * [Setting up the development environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. From 27ad0c3a286cbfd1e66a5eb32febe137ae550d2c Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 05:26:13 +0300 Subject: [PATCH 048/276] HTML5 strict --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b0cfaf11d34..1ef1c359e50 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,27 @@

+ height="112">

ACE3 Version + alt="ACE version"> ACE3 Download + alt="ACE download"> ACE3 Issues + alt="ACE issues"> BIF Thread + alt="BIF thread"> ACE3 License + alt="ACE license">

Requires the latest version of CBA A3. Visit us on Facebook | YouTube | Twitter | Reddit

@@ -41,7 +41,7 @@ The mod is **built modularly**, so almost any included PBO can be easily removed * Realistic names for vehicles and weapons * Realistic ballistics including wind and humidity * Backblast area simulation -* A fire control system for armored vehicles and helicopters
+* A fire control system for armored vehicles and helicopters
***and more...*** #### Guides & how-tos From 9de834e15664677684c82e880755019ce97f27c0 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 17 Apr 2015 00:04:27 -0300 Subject: [PATCH 049/276] Prototype of simplified diagnosis for basic medical. The left gui is completely scraped. Instead, the medical interaction points are color coded to reflect theier damage (bleeding rate). --- addons/medical/ACE_Medical_Actions.hpp | 6 ++++++ addons/medical/ACE_Medical_SelfActions.hpp | 6 ++++++ addons/medical/XEH_preInit.sqf | 1 + addons/medical/functions/fnc_displayPatientInformation.sqf | 2 ++ 4 files changed, 15 insertions(+) diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index 036dd5e9d94..38f376623cd 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -3,6 +3,7 @@ class ACE_Head { displayName = "$STR_ACE_Interaction_Head"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction)); EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -74,6 +75,7 @@ class ACE_Torso { displayName = "$STR_ACE_Interaction_Torso"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction)); EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -173,6 +175,7 @@ class ACE_ArmLeft { displayName = "$STR_ACE_Interaction_ArmLeft"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction)); EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -329,6 +332,7 @@ class ACE_ArmRight { displayName = "$STR_ACE_Interaction_ArmRight"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction)); EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -482,6 +486,7 @@ class ACE_LegLeft { displayName = "$STR_ACE_Interaction_LegLeft"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction)); EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; @@ -623,6 +628,7 @@ class ACE_LegRight { displayName = "$STR_ACE_Interaction_LegRight"; runOnHover = 1; statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction)); EXCEPTIONS icon = PATHTOF(UI\icons\medical_cross.paa); distance = MEDICAL_ACTION_DISTANCE; diff --git a/addons/medical/ACE_Medical_SelfActions.hpp b/addons/medical/ACE_Medical_SelfActions.hpp index c2a60898f4f..f08dab9598e 100644 --- a/addons/medical/ACE_Medical_SelfActions.hpp +++ b/addons/medical/ACE_Medical_SelfActions.hpp @@ -11,6 +11,7 @@ class Medical { icon = PATHTOF(UI\icons\medical_cross.paa); exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyMedicalAction)); runOnHover = 1; class Bandage { @@ -78,6 +79,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 1)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyMedicalAction)); showDisabled = 1; priority = 2; hotkey = ""; @@ -146,6 +148,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 2)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyMedicalAction)); icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { @@ -246,6 +249,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 3)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyMedicalAction)); icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { @@ -342,6 +346,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 4)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyMedicalAction)); icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { @@ -427,6 +432,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside"}; statement = QUOTE([ARR_3(_target, true, 5)] call DFUNC(displayPatientInformation)); + modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyMedicalAction)); icon = PATHTOF(UI\icons\medical_cross.paa); class Bandage { diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index f15b4ec109d..a27bc5ccb19 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -56,6 +56,7 @@ PREP(isInMedicalVehicle); PREP(isMedic); PREP(isMedicalVehicle); PREP(itemCheck); +PREP(modifyMedicalAction); PREP(onMedicationUsage); PREP(onWoundUpdateRequest); PREP(onPropagateWound); diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index ecd2218c2be..65c98c4b854 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -14,6 +14,8 @@ #include "script_component.hpp" +// Exit for basic medical +if (GVAR(level) < 2) exitWith {}; private ["_target", "_show", "_selectionN"]; _target = _this select 0; _show = if (count _this > 1) then {_this select 1} else {true}; From f6ecfefe539b0b73861b36aa50ac765997360f4e Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 06:41:48 +0300 Subject: [PATCH 050/276] Up-to-date feature list --- README.md | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1ef1c359e50..9fa736a49a7 100644 --- a/README.md +++ b/README.md @@ -33,18 +33,42 @@ The project is entirely **open-source** and all contributions are welcome. Feel The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. -### Features -* Improved medical system -* Logistics system including cargo transport and vehicle maintenance -* Explosives system including different trigger types +### Core features +* Brand new 3D interaction/action system +* Performance and reliability framework +* Focus on modularity and customization +* New flexible client and server settings & configuration +* Improved medical system with various levels (Basic/Advanced) focus on gameplay/realism +* Proper & consistent network-synced weather +* Wind and weather-based ballistics * Captivity system +* Explosives system, including different trigger types +* Map screen improvements – marker placement and map tools +* Advanced missile guidance and laser designation + +#### Additional features +* Carrying and dragging * Realistic names for vehicles and weapons -* Realistic ballistics including wind and humidity -* Backblast area simulation -* A fire control system for armored vehicles and helicopters
-***and more...*** +A fire control system (FCS) for armored vehicles and helicopters +* Realistic ballistics/FCS calculated in C/C++ extensions +* Backblast area and overpressure simulation +* Disposable launchers +* Realistic G-forces +* Vehicle locking +* Realistic night and thermal vision modes +* Magazine repacking +* Realistic weapon overheating mechanic +* Combat deafness (temporary loss of hearing) simulation +* Improved ragdoll physics +* Improved interactions for AARs and ammo bearers +* Adjustable sniper scopes +* No idle animation with lowered weapon +* No talking player avatar +* Jumping over obstacles, climbing over walls and cutting down fences +* Vector, MicroDAGR and Kestrel devices
+***and much more...*** -#### Guides & how-tos +### Guides & how-tos If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first: * [Getting started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) From 0167d98894fdcb02045f8babf68a203d75fe8098 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 06:52:40 +0300 Subject: [PATCH 051/276] missing bullet --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9fa736a49a7..22e6e715921 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ The mod is **built modularly**, so almost any included PBO can be easily removed * Performance and reliability framework * Focus on modularity and customization * New flexible client and server settings & configuration -* Improved medical system with various levels (Basic/Advanced) focus on gameplay/realism +* Improved medical system with various levels (basic/advanced) focus on gameplay/realism * Proper & consistent network-synced weather * Wind and weather-based ballistics * Captivity system @@ -49,7 +49,7 @@ The mod is **built modularly**, so almost any included PBO can be easily removed #### Additional features * Carrying and dragging * Realistic names for vehicles and weapons -A fire control system (FCS) for armored vehicles and helicopters +* A fire control system (FCS) for armored vehicles and helicopters * Realistic ballistics/FCS calculated in C/C++ extensions * Backblast area and overpressure simulation * Disposable launchers From 6b4da61fa4b5b7d43ad8be9dda8768db8e4fbf49 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 06:57:13 +0300 Subject: [PATCH 052/276] Embedded the license link --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 22e6e715921..29729c97ab0 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,7 @@ **ACE3** is a joint effort by the teams behind **ACE2**, **AGM** and **CSE** to improve the realism and authenticity of Arma 3. -The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License: -* [`LICENSE`](https://github.com/acemod/ACE3/blob/master/LICENSE) +The project is entirely **open-source** and all contributions are welcome. Feel free to maintain your own custom version, so long as the changes you make are open to the public in accordance with the GNU General Public License ([GPLv2](https://github.com/acemod/ACE3/blob/master/LICENSE)). The mod is **built modularly**, so almost any included PBO can be easily removed from the configuration. This way, a team can maintain its own tailored version of ACE by simply excluding any components they don't need, or those possibly in conflict with other add-ons. Modules themselves, e.g. the medical system, also include various customization options, allowing mission designers to tweak the overall experience. From b94b6fad536b6d5e307a98f1a02bed60b3f6e40c Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Fri, 17 Apr 2015 07:27:24 +0300 Subject: [PATCH 053/276] Wiki links to site not repo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 29729c97ab0..4ed84011bf3 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ The mod is **built modularly**, so almost any included PBO can be easily removed ### Guides & how-tos If you installed ACE3 but have trouble understanding how it all works, or where to start, read this first: -* [Getting started](https://github.com/acemod/ACE3/blob/master/documentation/user/getting-started.md) +* [Getting started](http://ace3mod.com/wiki/user/getting-started.html) #### Contributing You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. To contribute something to ACE, simply fork this repository and submit your pull requests for review by other collaborators. Remember to add yourself to the author array of any PBO you will be editing and the [`AUTHORS.txt`](https://github.com/acemod/ACE3/blob/master/AUTHORS.txt) file; including a valid email address. @@ -80,4 +80,4 @@ Please, use our [Issue Tracker](https://github.com/acemod/ACE3/issues) to report #### Testing & building To help us test the latest development changes, download our master branch ([directly](https://github.com/acemod/ACE3/archive/master.zip), or [with git](https://help.github.com/articles/fetching-a-remote/)), then assemble a test build: -* [Setting up the development environment](https://github.com/acemod/ACE3/blob/master/documentation/development/setting-up-the-development-environment.md) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. +* [Setting up the development environment](http://ace3mod.com/wiki/development/setting-up-the-development-environment.html) – step-by-step instructions on how to properly setup and build a version of ACE for testing purposes. From 8fc2e96367d472f2eaa4fa4e8aac2ca3d5296688 Mon Sep 17 00:00:00 2001 From: Lex Rivera Date: Fri, 17 Apr 2015 14:49:43 +0300 Subject: [PATCH 054/276] [realisticnames] Adjust SPMG name, fix some russian --- addons/realisticnames/stringtable.xml | 38 +++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2b02d7f5b7d..fe514290a3e 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1650,32 +1650,32 @@ TODO: Navid 9.3 мм (бронза)
- TODO: SPMG .338 - TODO: SPMG .338 - SPMG .338 - TODO: SPMG .338 - TODO: SPMG .338 + LWMMG .338 + LWMMG .338 + LWMMG .338 + LWMMG .338 + LWMMG .338 - TODO: SPMG .338 (MTP) - TODO: SPMG .338 (MTP) - SPMG .338 (MTP) - TODO: SPMG .338 (MTP) - TODO: SPMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) + LWMMG .338 (MTP) - TODO: SPMG .338 (Black) - TODO: SPMG .338 (Black) - SPMG .338 (Noir) - TODO: SPMG .338 (Negro) - TODO: SPMG .338 (черный) + LWMMG .338 (Black) + LWMMG .338 (Black) + LWMMG .338 (Noir) + LWMMG .338 (Negro) + LWMMG .338 (Черный) - TODO: SPMG .338 (Sand) - TODO: SPMG .338 (Sand) + LWMMG .338 (Sand) + LWMMG .338 (Sand) SPMG .338 (Beige) - TODO: SPMG .338 (Arena) - TODO: SPMG .338 (песочный) + LWMMG .338 (Arena) + LWMMG .338 (Песочный) From 2ca20f740e1013b30a1a4a49e0d86a0b107dd80a Mon Sep 17 00:00:00 2001 From: Lex Rivera Date: Fri, 17 Apr 2015 14:53:55 +0300 Subject: [PATCH 055/276] [realisticnames] adjust M14 --- addons/realisticnames/stringtable.xml | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index fe514290a3e..34e6d34fdaa 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1608,25 +1608,25 @@ TODO: Cyrus 9.3 мм (бронза) - TODO: Mk14 7.62 mm - TODO: Mk14 7.62 mm - Mk 14 7.62 mm - TODO: Mk14 7.62 mm - TODO: Mk14 7.62 мм + M14 7.62 mm + M14 7.62 mm + M14 7.62 mm + M14 7.62 mm + M14 7.62 мм - TODO: Mk14 7.62 mm (Camo) - TODO: Mk14 7.62 mm (Camo) - Mk 14 7.62 mm (Camo) - TODO: Mk14 7.62 mm (Camuflaje) - TODO: Mk14 7.62 мм (камо) + M14 7.62 mm (Camo) + M14 7.62 mm (Camo) + M14 7.62 mm (Camo) + M14 7.62 mm (Camuflaje) + M14 7.62 мм (Камо) - TODO: Mk14 7.62 mm (Olive) - TODO: Mk14 7.62 mm (Olive) - Mk 14 7.62 mm (Olive) - TODO: Mk14 7.62 mm (Oliva) - TODO: Mk14 7.62 мм (олива) + M14 7.62 mm (Olive) + M14 7.62 mm (Olive) + M14 7.62 mm (Olive) + M14 7.62 mm (Oliva) + M14 7.62 мм (Олива) TODO: Navid 9.3 mm From 163ac7bd4aca6e9544b1034470f84487a14171a7 Mon Sep 17 00:00:00 2001 From: Lex Rivera Date: Fri, 17 Apr 2015 15:28:30 +0300 Subject: [PATCH 056/276] [realisticnames] Adjust MK-I. Enable actual names --- addons/realisticnames/CfgWeapons.hpp | 11 +++-- addons/realisticnames/stringtable.xml | 70 +++++++++++++-------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 56d9e3b7c89..3cbe03f4658 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -208,7 +208,7 @@ class CfgWeapons { class srifle_DMR_02_sniper_F: srifle_DMR_02_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_02_sniper"; //MAR-10 .338 (Sand)"; }; - + */ class DMR_03_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_03"; //Mk-I EMR 7.62 mm"; }; @@ -236,7 +236,7 @@ class CfgWeapons { class srifle_DMR_03_spotter_F: srifle_DMR_03_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_03_spotter"; //NATO DMR (provisional) spotter"; }; - + /* class DMR_04_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_04"; //ASP-1 Kir 12.7 mm"; }; @@ -264,7 +264,7 @@ class CfgWeapons { class srifle_DMR_05_tan_f: srifle_DMR_05_blk_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_05_tan"; //Cyrus 9.3 mm (Tan)"; }; - + */ class DMR_06_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_06"; //Mk14 7.62 mm"; }; @@ -278,6 +278,7 @@ class CfgWeapons { }; // marksmen mgs + /* class MMG_01_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_01"; //Navid 9.3 mm"; }; @@ -289,7 +290,7 @@ class CfgWeapons { class MMG_01_tan_F: MMG_01_hex_F { displayName = "$STR_ACE_RealisticNames_MMG_01_tan"; //Navid 9.3 mm (Tan)"; }; - + */ class MMG_02_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_02"; //SPMG .338"; }; @@ -304,7 +305,7 @@ class CfgWeapons { class MMG_02_sand_F: MMG_02_camo_F { displayName = "$STR_ACE_RealisticNames_MMG_02_sand"; //SPMG .338 (Sand)"; - };*/ + }; // vehicle weapons diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 34e6d34fdaa..1fcf116d1e5 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1510,53 +1510,53 @@ TODO: MAR-10 .338 (песочный) - TODO: Mk-I EMR 7.62 mm - TODO: Mk-I EMR 7.62 mm - Mk-l EMR 7.62 mm - TODO: Mk-I EMR 7.62 mm - TODO: Mk-I EMR 7.62 мм + SG 556 7.62 mm + SG 556 7.62 mm + SG 556 7.62 mm + SG 556 7.62 mm + SG 556 7.62 мм - TODO: Mk-I EMR 7.62 mm (Black) - TODO: Mk-I EMR 7.62 mm (Black) - Mk-l EMR 7.62 mm (Noir) - TODO: Mk-I EMR 7.62 mm (Negro) - TODO: Mk-I EMR 7.62 мм (черный) + SG 556 7.62 mm (Black) + SG 556 7.62 mm (Black) + SG 556 7.62 mm (Noir) + SG 556 7.62 mm (Negro) + SG 556 7.62 мм (черный) - TODO: Mk-I EMR 7.62 mm (Khaki) - TODO: Mk-I EMR 7.62 mm (Khaki) - Mk-l EMR 7.62 mm (Kaki) - TODO: Mk-I EMR 7.62 mm (Caqui) - TODO: Mk-I EMR 7.62 мм (хаки) + SG 556 7.62 mm (Khaki) + SG 556 7.62 mm (Khaki) + SG 556 7.62 mm (Kaki) + SG 556 7.62 mm (Caqui) + SG 556 7.62 мм (хаки) - TODO: Mk-I EMR 7.62 mm (Sand) - TODO: Mk-I EMR 7.62 mm (Sand) - Mk-l EMR 7.62 mm (Beige) - TODO: Mk-I EMR 7.62 mm (Arena) - TODO: Mk-I EMR 7.62 мм (песочный) + SG 556 7.62 mm (Sand) + SG 556 7.62 mm (Sand) + SG 556 7.62 mm (Beige) + SG 556 7.62 mm (Arena) + SG 556 7.62 мм (песочный) - TODO: Mk-I EMR 7.62 mm (Camo) - TODO: Mk-I EMR 7.62 mm (Camo) - Mk-l EMR 7.62 mm (Camo) - TODO: Mk-I EMR 7.62 mm (Camuflaje) - TODO: Mk-I EMR 7.62 мм (камо) + SG 556 7.62 mm (Camo) + SG 556 7.62 mm (Camo) + SG 556 7.62 mm (Camo) + SG 556 7.62 mm (Camuflaje) + SG 556 7.62 мм (камо) - TODO: Mk-I EMR 7.62 mm (Woodland) - TODO: Mk-I EMR 7.62 mm (Woodland) - Mk-l EMR 7.62 mm (Woodland) - TODO: Mk-I EMR 7.62 mm (Bosque) - TODO: Mk-I EMR 7.62 мм (лесной) + SG 556 7.62 mm (Woodland) + SG 556 7.62 mm (Woodland) + SG 556 7.62 mm (Woodland) + SG 556 7.62 mm (Bosque) + SG 556 7.62 мм (лесной) - TODO: NATO DMR (provisional) spotter - TODO: NATO DMR (provisional) spotter - NATO DMR (provisoire) Observateur - TODO: NATO DMR (provisional) observador - TODO: NATO DMR (provisional) корректировщик + SG 556 7.62 mm (provisional) spotter + SG 556 7.62 mm (provisional) spotter + SG 556 7.62 mm (provisoire) Observateur + SG 556 7.62 mm (provisional) observador + SG 556 7.62 мм (provisional) корректировщик TODO: ASP-1 Kir 12.7 mm From 9f2dd6161364416d0f4564da3ca047cf1788329f Mon Sep 17 00:00:00 2001 From: simon84 Date: Fri, 17 Apr 2015 20:22:49 +0200 Subject: [PATCH 057/276] Revert "minor FCS changes (privatized variables, unnecessary counters)" This reverts commit ff0fb12ca35ac1167bfac736ea6539fab7d24c23. --- addons/fcs/functions/fnc_getAngle.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/fcs/functions/fnc_getAngle.sqf b/addons/fcs/functions/fnc_getAngle.sqf index 2ec9215bea8..03024d8b98f 100644 --- a/addons/fcs/functions/fnc_getAngle.sqf +++ b/addons/fcs/functions/fnc_getAngle.sqf @@ -19,7 +19,7 @@ #include "script_component.hpp" #define PRECISION 0.1 -private ["_distance","_angleTarget","_maxElev","_initSpeed","_airFriction","_timeToLive","_timeToLive","_simulationStep","_angle","_posTargetX","_posTargetY","_posX","_posY","_velocityX","_velocityY","_velocityMagnitude","_angle1","_angle2","_f1","_f2","_temp"]; +private ["_distance","_angleTarget","_maxElev","_initSpeed","_airFriction","_timeToLive","_timeToLive","_simulationStep","_angle","_posTargetX","_posTargetY","_posX","_posY","_velocityX","_velocityY","_velocityMagnitude"]; _distance = _this select 0; _angleTarget = _this select 1; @@ -73,7 +73,7 @@ if ((_this + [_maxElev]) call FUNC(traceBullet) < 0) exitWith {_maxElev - _angle // Newton Method / Secand Method _angle1 = _angleTarget; _angle2 = _maxElev; -//_it2 = 0; +_it2 = 0; _f1 = (_this + [_angle1]) call FUNC(traceBullet); if ((abs _f1) <= PRECISION) exitWith {0}; @@ -83,7 +83,7 @@ while {(abs _f1) > PRECISION} do { _angle1 = _angle2; _angle2 = _temp; _f1 = _f2; - //_it2 = _it2+1; + _it2 = _it2+1; }; //player globalChat format ["it1: %1 | _angle1: %2 | it2: %3 | _angle2: %4",_it1, _angle-_angleTarget, _it2, _angle2-_angleTarget]; From 1d208b4efc698e5592df655568ee8c6b459a7897 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 17 Apr 2015 19:36:03 -0300 Subject: [PATCH 058/276] Modify Function for medical actions --- .../functions/fnc_modifyMedicalAction.sqf | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 addons/medical/functions/fnc_modifyMedicalAction.sqf diff --git a/addons/medical/functions/fnc_modifyMedicalAction.sqf b/addons/medical/functions/fnc_modifyMedicalAction.sqf new file mode 100644 index 00000000000..c7deb07c09c --- /dev/null +++ b/addons/medical/functions/fnc_modifyMedicalAction.sqf @@ -0,0 +1,33 @@ +/* + * Author: esteldunedain + * Modify the visuals of a medical action point. + * On Basic medical: modify the icon color based on damage on that body part. + * + * Arguments: + * 0: The Patient Unit + * 1: The Diagnosing Unit + * 2: Selection Number + * 3: The action to modify + * + * ReturnValue: + * nil + * + * Public: No + */ + +#include "script_component.hpp" + +// Quit for the advanced medical system +if (GVAR(level) >= 2) exitWith {}; + +EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData); + +private ["_pointDamage"]; +_pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN); + +if (_pointDamage >= 0.8) exitWith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; +}; +if (_pointDamage > 0) exitWith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))]; +}; From cce9e1f04cf41c7800c1204663b44786f5dab19c Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 17 Apr 2015 19:38:03 -0300 Subject: [PATCH 059/276] Simple diagnose --- addons/medical/ACE_Medical_Actions.hpp | 6 +++ addons/medical/ACE_Medical_Treatments.hpp | 16 +++---- addons/medical/XEH_preInit.sqf | 2 + .../medical/functions/fnc_actionDiagnose.sqf | 22 ++++++++++ .../functions/fnc_actionDiagnoseLocal.sqf | 42 +++++++++++++++++++ 5 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 addons/medical/functions/fnc_actionDiagnose.sqf create mode 100644 addons/medical/functions/fnc_actionDiagnoseLocal.sqf diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index 38f376623cd..1c4c1c2f9d6 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -70,6 +70,12 @@ class ACE_Head { statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment)); EXCEPTIONS }; + class Diagnose: CheckPulse { + displayName = "Diagnose"; + condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached)); + statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment)); + EXCEPTIONS + }; }; class ACE_Torso { displayName = "$STR_ACE_Interaction_Torso"; diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 5b5e0b6abd8..03b9def6127 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -71,14 +71,14 @@ class ACE_Medical_Actions { itemConsumed = 1; litter[] = {}; }; - class CheckPulse: Bandage { - displayName = ""; - displayNameProgress = ""; + class Diagnose: Bandage { + displayName = "Diagnose"; + displayNameProgress = "Diagnosing..."; treatmentLocations[] = {"All"}; requiredMedic = 0; - treatmentTime = 2; + treatmentTime = 1; items[] = {}; - callbackSuccess = QUOTE(DFUNC(actionCheckPulse)); + callbackSuccess = QUOTE(DFUNC(actionDiagnose)); callbackFailure = ""; callbackProgress = ""; animationPatient = ""; @@ -86,12 +86,6 @@ class ACE_Medical_Actions { itemConsumed = 0; litter[] = {}; }; - class CheckBloodPressure: CheckPulse { - callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure)); - }; - class CheckResponse: CheckPulse { - callbackSuccess = QUOTE(DFUNC(actionCheckResponse)); - }; }; class Advanced { diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index a27bc5ccb19..c1ae7666f35 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -7,6 +7,8 @@ PREP(actionCheckBloodPressureLocal); PREP(actionCheckPulse); PREP(actionCheckPulseLocal); PREP(actionCheckResponse); +PREP(actionDiagnose); +PREP(actionDiagnoseLocal); PREP(actionPlaceInBodyBag); PREP(actionRemoveTourniquet); PREP(actionLoadUnit); diff --git a/addons/medical/functions/fnc_actionDiagnose.sqf b/addons/medical/functions/fnc_actionDiagnose.sqf new file mode 100644 index 00000000000..ff1b05346c6 --- /dev/null +++ b/addons/medical/functions/fnc_actionDiagnose.sqf @@ -0,0 +1,22 @@ +/* +* Author: Glowbal +* Action for diagnosing in basic medical +* +* Arguments: +* 0: The medic +* 1: The patient +* +* Return Value: +* NONE +* +* Public: No +*/ + +#include "script_component.hpp" + +systemChat "actionDiagnose"; + +private ["_caller","_target","_title","_content"]; +_caller = _this select 0; +_target = _this select 1; +[[_caller, _target], QUOTE(DFUNC(actionDiagnoseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ diff --git a/addons/medical/functions/fnc_actionDiagnoseLocal.sqf b/addons/medical/functions/fnc_actionDiagnoseLocal.sqf new file mode 100644 index 00000000000..6428db9f243 --- /dev/null +++ b/addons/medical/functions/fnc_actionDiagnoseLocal.sqf @@ -0,0 +1,42 @@ +/* + * Author: Glowbal + * Local callback for checking the pulse of a patient + * + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * NONE + * + * Public: No + */ + +#include "script_component.hpp" + +systemChat "actionDiagnoseLocal"; + +_caller = _this select 0; +_unit = _this select 1; + +_genericMessages = ["Patient %1 is %2. %3. %4"]; + +_genericMessages pushBack ([_unit] call EFUNC(common,getName)); +if (alive _unit) then { + _genericMessages pushback "alive"; +} else { + _genericMessages pushback "dead"; +}; +if (_target getvariable[QGVAR(hasLostBlood), false]) then { + _genericMessages pushback "He's lost some blood"; +} else { + _genericMessages pushback "He hasn't lost blood"; +; + +if (_target getvariable[QGVAR(hasPain), false]) then { + _genericMessages pushback localize "He is in pain"; +} else { + _genericMessages pushback localize "He is not in pain"; +}; + +["displayTextStructured", [_caller], [format _genericMessages, 1.5, _caller]] call EFUNC(common,targetEvent); From a5c3e86cd3a119859bddb2fee42ffc5d100dcc93 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 17 Apr 2015 20:00:43 -0300 Subject: [PATCH 060/276] Fixes --- addons/medical/functions/fnc_actionDiagnose.sqf | 2 -- .../medical/functions/fnc_actionDiagnoseLocal.sqf | 14 ++++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/addons/medical/functions/fnc_actionDiagnose.sqf b/addons/medical/functions/fnc_actionDiagnose.sqf index ff1b05346c6..7ac4bfd5a58 100644 --- a/addons/medical/functions/fnc_actionDiagnose.sqf +++ b/addons/medical/functions/fnc_actionDiagnose.sqf @@ -14,8 +14,6 @@ #include "script_component.hpp" -systemChat "actionDiagnose"; - private ["_caller","_target","_title","_content"]; _caller = _this select 0; _target = _this select 1; diff --git a/addons/medical/functions/fnc_actionDiagnoseLocal.sqf b/addons/medical/functions/fnc_actionDiagnoseLocal.sqf index 6428db9f243..58c50638bf3 100644 --- a/addons/medical/functions/fnc_actionDiagnoseLocal.sqf +++ b/addons/medical/functions/fnc_actionDiagnoseLocal.sqf @@ -14,12 +14,10 @@ #include "script_component.hpp" -systemChat "actionDiagnoseLocal"; - _caller = _this select 0; _unit = _this select 1; -_genericMessages = ["Patient %1 is %2. %3. %4"]; +_genericMessages = ["Patient %1
is %2.
%3.
%4"]; _genericMessages pushBack ([_unit] call EFUNC(common,getName)); if (alive _unit) then { @@ -31,12 +29,12 @@ if (_target getvariable[QGVAR(hasLostBlood), false]) then { _genericMessages pushback "He's lost some blood"; } else { _genericMessages pushback "He hasn't lost blood"; -; +}; if (_target getvariable[QGVAR(hasPain), false]) then { - _genericMessages pushback localize "He is in pain"; + _genericMessages pushback "He is in pain"; } else { - _genericMessages pushback localize "He is not in pain"; + _genericMessages pushback "He is not in pain"; }; - -["displayTextStructured", [_caller], [format _genericMessages, 1.5, _caller]] call EFUNC(common,targetEvent); +diag_log _genericMessages; +["displayTextStructured", [_caller], [format _genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent); From 15720dce31e95e18afdd69b3f53de10970f169bf Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 17 Apr 2015 20:08:30 -0300 Subject: [PATCH 061/276] Yellow and Red medical crosses --- addons/medical/ui/icons/medical_crossRed.paa | Bin 0 -> 2897 bytes addons/medical/ui/icons/medical_crossYellow.paa | Bin 0 -> 2897 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 addons/medical/ui/icons/medical_crossRed.paa create mode 100644 addons/medical/ui/icons/medical_crossYellow.paa diff --git a/addons/medical/ui/icons/medical_crossRed.paa b/addons/medical/ui/icons/medical_crossRed.paa new file mode 100644 index 0000000000000000000000000000000000000000..5a0c8e9f9cc2e54a4794234bb325084cb65c853b GIT binary patch literal 2897 zcmeHJy-vh140dUU3WnUm-UmTyE2MS-F@O+{!^XxlMY{Lk8M1LhB=b25wvUp63B^e=X(N9zWQ_ zJg>yh#B-?q36B}+Cp(RzXD9X}>o7N3U(2Eg^V#e4v-?l+DEr-YrjB*eKNMHAlAbcT zk?@%7*yXTO>$QAG4-#HK=LTf<*qppx>0g<;6lh@G`CXS8?4zC=m9<1iS|xXp-g`S% Sx88F>1r&$3dA$zLE72R7Mdi2v literal 0 HcmV?d00001 diff --git a/addons/medical/ui/icons/medical_crossYellow.paa b/addons/medical/ui/icons/medical_crossYellow.paa new file mode 100644 index 0000000000000000000000000000000000000000..74ddefd8379c7624c39de30280df92300364822d GIT binary patch literal 2897 zcmeHJ%}T^D5T3O?6g_k=-uFR-wg~M-@t}y0$h-txKgvwF(^ zx__*XtE!5a;)_7{c{vbw{FmVma#oL>b5rq$9dRH1tGz>^xc@EwB?>W~V>o*LKhu-t z&(3pt-YvrZ@&5gE{^4{kcG2#a6azNk;77qvHt3aLm}YA(4C!S%&m2%J+c Ng3&v#*Kvc1UIFa|^X&it literal 0 HcmV?d00001 From 0a9972d7e05054b1aacef09dd00f486f39dae361 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Sat, 18 Apr 2015 04:54:07 +0300 Subject: [PATCH 062/276] Wiki/Shortcuts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Switched places of Shortcut and PBO table columns 2. Combined Shift, Win and Tab keys with their respective unicode symbols (⇧, ⊞, ↹) 3. Key combinations are bound by the plus sign (+) 4. Renamed entries: * Command> Action * Interaction Menu (Selft)> Self-interaction menu * Safe Mode> Safety toggle * Main Gun> Primary weapon * Clear jam> Clear firearm malfunction * Wipe Goggles> Wipe off goggles * Tap Shoulder> Tap on the shoulder * Ammo> Ammunition 5. Added common prefix to sets of keys for visual grouping (NVG, Scope, Vector, FCS) 6. Proper PBO names are tagged as code --- documentation/user/shourtcuts.md | 390 +++++++++++++++---------------- 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/documentation/user/shourtcuts.md b/documentation/user/shourtcuts.md index d44dc548868..0e6444c645d 100644 --- a/documentation/user/shourtcuts.md +++ b/documentation/user/shourtcuts.md @@ -7,198 +7,198 @@ parent: wiki --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PBOCommandShortcut
ACE_InteractionInteraction MenuWin_Left
ACE_InteractionInteraction Menu (Self)Ctrl Win_Left
ACE_InteractionOpen / Close DoorCtrl Space
ACE_InteractionTap ShoulderCtrl T
ACE_LogisticsModifier KeyCtrl_Left
ACE_GogglesWipe GogglesCtrl Shift T
ACE_GrenadesSwitch Grenade Mode8
ACE_NameTagsShow NamesCtrl_Left
ACE_NightVisionIncrease NVG BrightnessAlt Page Up
ACE_NightVisionDecrease NVG BrightnessAlt Page Down
ACE_OverheatingClear jamShift R
ACE_ParachuteShow AltimeterO
ACE_ReloadCheck AmmoCtrl R
ACE_SafeModeSafe Mode`(en) | ^(de)
ACE_ScopesAdjust Elevation UpPage Up
ACE_ScopesAdjust Elevation DownPage Down
ACE_ScopesAdjust Windage LeftCtrl Page Up
ACE_ScopesAdjust Windage RightCtrl Page Down
ACE_VectorVector - Azimuth KeyTab
ACE_VectorVector - Distance KeyR
ACE_VehiclesSpeed LimiterDel
ACE_WeaponSelectSelect Pistol1
ACE_WeaponSelectSelect Rifle2
ACE_WeaponSelectSelect Grenade Launcher3
ACE_WeaponSelectSelect Binoculars5
ACE_WeaponSelectSelect Frag Grenade6
ACE_WeaponSelectSelect Non-Frag Grenade7
ACE_WeaponSelectHolster Weapon0
ACE_WeaponSelectEngine on2
ACE_WeaponSelectEngine off1
ACE_WeaponSelectSelect Main Gun3
ACE_WeaponSelectSelect Machine Gun4
ACE_WeaponSelectSelect Missiles5
ACE_WeaponSelectFire Smoke Launcher9
ACE_FireControlSsystemLase Target / Measure DistanceTab
ACE_FireControlSsystemAdjust FCS Range (Up)Page Up
ACE_FireControlSsystemAdjust FCS Range (Down)Page Down
\ No newline at end of file + + + Shortcut + Action + PBO + + + + + ⊞ Win + Interaction menu + ACE_Interaction + + + Ctrl+⊞ Win + Self-interaction menu + ACE_Interaction + + + Ctrl+Space + Open/close door + ACE_Interaction + + + Ctrl+T + Tap on the shoulder + ACE_Interaction + + + Ctrl + Modifier key + ACE_Logistics + + + Ctrl+⇧ Shift+T + Wipe off goggles + ACE_Goggles + + + 8 + Switch grenade mode + ACE_Grenades + + + Ctrl + Show names + ACE_NameTags + + + Alt+Page Up + NVG: Increase brightness + ACE_NightVision + + + Alt+Page Down + NVG: Decrease brightness + ACE_NightVision + + + ⇧ Shift+R + Clear firearm malfunction + ACE_Overheating + + + O + Altimeter + ACE_Parachute + + + Ctrl+R + Check ammunition + ACE_Reload + + + ` + Safety toggle + ACE_SafeMode + + + Page Up + Scope: Elevation up + ACE_Scopes + + + Page Down + Scope: Elevation down + ACE_Scopes + + + Ctrl+Page Up + Scope: Windage left + ACE_Scopes + + + Ctrl+Page Down + Scope: Windage right + ACE_Scopes + + + Tab ↹ + Vector: Azimuth key + ACE_Vector + + + R + Vector: Distance key + ACE_Vector + + + Del + Speed limiter + ACE_Vehicles + + + 1 + Pistol + ACE_WeaponSelect + + + 2 + Rifle + ACE_WeaponSelect + + + 3 + Grenade launcher + ACE_WeaponSelect + + + 5 + Binoculars + ACE_WeaponSelect + + + 6 + Frag grenade + ACE_WeaponSelect + + + 7 + Non-frag grenade + ACE_WeaponSelect + + + 0 + Holster weapon + ACE_WeaponSelect + + + 2 + Engine on + ACE_WeaponSelect + + + 1 + Engine off + ACE_WeaponSelect + + + 3 + Primary weapon + ACE_WeaponSelect + + + 4 + Machine gun + ACE_WeaponSelect + + + 5 + Missiles + ACE_WeaponSelect + + + 9 + Fire smoke launcher + ACE_WeaponSelect + + + Tab ↹ + FCS: Lase target (measure distance) + ACE_FireControlSsystem + + + Page Up + FCS: Range up + ACE_FireControlSsystem + + + Page Down + FCS: Range down + ACE_FireControlSsystem + + + From 6c3ca2c347cc537449f6ac607977bd41d6d31bb3 Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Sat, 18 Apr 2015 05:45:15 +0300 Subject: [PATCH 063/276] WIP note --- documentation/user/getting-started.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/documentation/user/getting-started.md b/documentation/user/getting-started.md index 5a9c3f69176..7f7d7ade2e1 100644 --- a/documentation/user/getting-started.md +++ b/documentation/user/getting-started.md @@ -1,20 +1,20 @@ --- layout: wiki -title: Getting Started +title: Getting started group: user order: 0 parent: wiki --- +
+
Note:
+

This page is currently under construction. Please, come back later.

+
+ From cfb6d9eeea90797b1a8f8aa9259799f9b861339d Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Sat, 18 Apr 2015 07:21:16 +0300 Subject: [PATCH 064/276] Wiki/Feats Minor rewrite to improve the flow by minimizing repetitive wording. --- .../user/how-to-make-a-feature-request.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/documentation/user/how-to-make-a-feature-request.md b/documentation/user/how-to-make-a-feature-request.md index bfc5401f38a..408a531fbbe 100644 --- a/documentation/user/how-to-make-a-feature-request.md +++ b/documentation/user/how-to-make-a-feature-request.md @@ -6,19 +6,17 @@ order: 11 parent: wiki --- -### Before requesting +### Background +ACE2, AGM and CSE had a lot of features implemented or planned. All of them are or have been evaluated for inclusion in ACE3 itself, and we'd like to port the majority of them eventually. However, due to time constraints, we have managed to finish only a fraction of the job so far. -ACE 2, AGM and CSE had a lot of features implemented or planned. All of them are or have been evaluated for inclusion in ACE3 itself, and we'd like to port the majority of them eventually. However, due to time constraints, we have only managed to do a fraction of the job so far. - -There's really no point on making feature requests for anything included or planned for inclusion in ACE2, AGM or CSE. The majority of those things are been considered for porting or rewritting already. +Please refrain from making requests for any planned or existing features from either ACE2, AGM or CSE. Most of them are already being or have been considered for porting or a rewrite.
-
Please note:
-

Due to the pace at which development is taking place, we are establishing a feature request embargo during the first week weeks prior and posterior to the first release. Feel free to add feature requests as described below, but don't expect them to be evaluated or discussed yet. Any dev activity on the feature request thread is highly unlikely during that period.

+
Note:
+

Due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. Feel free to submit yours now, but don't expect them to be considered just yet. Any treatment or attention by developers towards the feature request thread is highly unlikely during this time.

### Requesting a feature +In order to avoid duplicates and keep the issue tracker organized, we have created a common Issue for feature request. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. -In order not to spam the issue tracker with duplicated requests, we have have created a single Issue for feature request. Any and all requests should be done there, where they will get discussed and evaluated. Before posting a new one, please make sure to check the previous entries on the thread and make a quick search; please don't reiterate requests that had already been either accepted for inclusion or disregarded. - -Accepted feature requests may be moved to a separate issue by moderators for further discussion. +Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. From a2eececf080c93393730127c1a3d238cf162521b Mon Sep 17 00:00:00 2001 From: Bracconiere Date: Sat, 18 Apr 2015 07:29:21 +0300 Subject: [PATCH 065/276] Using actual title for the link to #414 --- documentation/user/how-to-make-a-feature-request.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/user/how-to-make-a-feature-request.md b/documentation/user/how-to-make-a-feature-request.md index 408a531fbbe..7b0c52478db 100644 --- a/documentation/user/how-to-make-a-feature-request.md +++ b/documentation/user/how-to-make-a-feature-request.md @@ -17,6 +17,6 @@ Please refrain from making requests for any planned or existing features from ei ### Requesting a feature -In order to avoid duplicates and keep the issue tracker organized, we have created a common Issue for feature request. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. +In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for ACE 3 Feature requests. Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. From e7472344435aad9c18026abd8406810d901faeec Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 20 Apr 2015 02:17:47 -0500 Subject: [PATCH 066/276] Cleanup Spelling --- addons/hearing/CfgEventHandlers.hpp | 1 - addons/hearing/XEH_postInit.sqf | 6 ++--- addons/hearing/XEH_preInit.sqf | 2 +- ...sqf => fnc_updatePlayerVehAttenuation.sqf} | 27 +++++++------------ 4 files changed, 13 insertions(+), 23 deletions(-) rename addons/hearing/functions/{fnc_updatePlayerVehicleAttunation.sqf => fnc_updatePlayerVehAttenuation.sqf} (57%) diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index cfe71fe01d8..ce968ed2ca0 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit) ); diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index 4dc22efd4fe..7b584f83972 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -4,11 +4,11 @@ if (!hasInterface) exitWith {}; GVAR(currentDeafness) = 0; GVAR(newStrength) = 0; -GVAR(playerVehAttunation) = 1; +GVAR(playerVehAttenuation) = 1; // Spawn volume updating process [FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler; //Update veh attunation when player veh changes -["playerVehicleChanged", {_this call FUNC(updatePlayerVehicleAttunation);}] call EFUNC(common,addEventHandler); -["playerTurretChanged", {_this call FUNC(updatePlayerVehicleAttunation);}] call EFUNC(common,addEventHandler); +["playerVehicleChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler); +["playerTurretChanged", {_this call FUNC(updatePlayerVehAttenuation);}] call EFUNC(common,addEventHandler); diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf index 4ac4c779cda..16b9f35f806 100644 --- a/addons/hearing/XEH_preInit.sqf +++ b/addons/hearing/XEH_preInit.sqf @@ -10,7 +10,7 @@ PREP(hasEarPlugsIn); PREP(moduleHearing); PREP(putInEarPlugs); PREP(removeEarPlugs); -PREP(updatePlayerVehicleAttunation); +PREP(updatePlayerVehAttenuation); PREP(updateVolume); ADDON = true; diff --git a/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf similarity index 57% rename from addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf rename to addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf index e03fc23d50e..15f3121c389 100644 --- a/addons/hearing/functions/fnc_updatePlayerVehicleAttunation.sqf +++ b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf @@ -1,15 +1,15 @@ /* * Author: PabstMirror - * Gets the sound attunation of a player to the outside. + * Gets the sound attenuation of a player to the outside. * * Arguments: - * 0: Unit (player) + * None * * Return Value: * Ammount that unit can hear outside * * Example: - * [] call ace_hearing_fnc_updatePlayerVehicleAttunation + * [] call ace_hearing_fnc_updatePlayerVehAttenuation * * Public: No */ @@ -19,10 +19,8 @@ _vehicle = vehicle ACE_player; if (isNull _vehicle) exitWith {}; -_newAttenuation = -1; -if (ACE_player == _vehicle) then { - _newAttenuation = 1; -} else { +_newAttenuation = 1; +if (ACE_player != _vehicle) then { _effectType = ""; _turretPath = [ACE_player] call EFUNC(common,getTurretIndex); _effectType = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "attenuationEffectType"); @@ -38,19 +36,12 @@ if (ACE_player == _vehicle) then { }; }; }; - _newAttenuation = switch (true) do { - case (_effectType == ""): {1}; - case (_effectType == "CarAttenuation"): {0.7}; - case (_effectType == "OpenCarAttenuation"): {1}; - case (_effectType == "TankAttenuation"): {0.1}; - case (_effectType == "HeliAttenuation"): {0.25}; - case (_effectType == "OpenHeliAttenuation"): {0.7}; - case (_effectType == "SemiOpenHeliAttenuation"): {0.5}; - case (_effectType == "HeliAttenuationGunner"): {0.75}; - case (_effectType == "HeliAttenuationRamp"): {0.75}; default {1}; }; }; -GVAR(playerVehAttunation) = _newAttenuation; +TRACE_2("New vehicle attenuation",_vehicle,_newAttenuation); + +GVAR(playerVehAttenuation) = _newAttenuation; + From 822bd22c977e80566697ce9eead4424dbba291fb Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 20 Apr 2015 02:18:46 -0500 Subject: [PATCH 067/276] gj git --- addons/hearing/functions/fnc_firedNear.sqf | 11 ++++------- .../functions/fnc_updatePlayerVehAttenuation.sqf | 12 +++++++++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index 7b50a44a14e..6a603c3c3ad 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -31,26 +31,23 @@ if (!GVAR(enableCombatDeafness)) exitWith {}; if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {}; if (_weapon in ["Throw", "Put"]) exitWith {}; -_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttunation)}; +_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)}; if (_distance < 1) then {_distance = 1;}; _silencer = switch (_weapon) do { -case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; -case (secondaryWeapon _firer) : {(secondaryWeaponItems _firer) select 0}; -case (handgunWeapon _firer) : {(handgunItems _firer) select 0}; + case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; + case (secondaryWeapon _firer) : {(secondaryWeaponItems _firer) select 0}; + case (handgunWeapon _firer) : {(handgunItems _firer) select 0}; default {""}; }; _audibleFireCoef = 1; -//_audibleFireTimeCoef = 1; if (_silencer != "") then { _audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire"); - //_audibleFireTimeCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFireTime"); }; _audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); -//_audibleFireTime = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFireTime"); _loudness = _audibleFireCoef * _audibleFire / 64; _strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off diff --git a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf index 15f3121c389..a7285d5e2b9 100644 --- a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf +++ b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf @@ -36,7 +36,18 @@ if (ACE_player != _vehicle) then { }; }; }; + _newAttenuation = switch (true) do { + case (_effectType == ""): {1}; + case (_effectType == "CarAttenuation"): {0.5}; + case (_effectType == "RHS_CarAttenuation"): {0.5}; + case (_effectType == "OpenCarAttenuation"): {1}; + case (_effectType == "TankAttenuation"): {0.1}; + case (_effectType == "HeliAttenuation"): {0.3}; + case (_effectType == "OpenHeliAttenuation"): {0.9}; + case (_effectType == "SemiOpenHeliAttenuation"): {0.6}; + case (_effectType == "HeliAttenuationGunner"): {0.85}; + case (_effectType == "HeliAttenuationRamp"): {0.85}; default {1}; }; }; @@ -44,4 +55,3 @@ if (ACE_player != _vehicle) then { TRACE_2("New vehicle attenuation",_vehicle,_newAttenuation); GVAR(playerVehAttenuation) = _newAttenuation; - From 08caf0c695ce5c88fb46e66b3049e47c08f0b3d1 Mon Sep 17 00:00:00 2001 From: ruPaladin Date: Mon, 20 Apr 2015 15:18:17 +0300 Subject: [PATCH 068/276] Updated russian translation (medical) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перевел как смог, вероятно данная настройка будет в ACE3 Настройки. Нужно проверить влезет ли туда. Если влезет, то подкорректировать перевод. Правки строго приветствуются. --- addons/medical/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index e85283c471d..52eff9a897c 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -4,10 +4,12 @@ Litter Simulation Detail Detale zużytych medykamentów + Количество мусора от медицины Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting. Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta. + Устанавливает количество мусора, который появляется после использования мед. препаратов. Большое количество мусора может уменьшить производительность, поэтому данная настройка локальна для клиента. Inject Atropine From 9155056a501456030ca71d3cd7f642f33f53fcbd Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 20 Apr 2015 15:11:14 +0200 Subject: [PATCH 069/276] Proof of concept wind code (custom debug output enabled) --- addons/weather/functions/fnc_getWind.sqf | 66 +++++++++++++++------ addons/weather/functions/fnc_updateWind.sqf | 2 +- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 54ec6efad3b..9163d7e854a 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -10,25 +10,53 @@ * Wind */ #include "script_component.hpp" -private ["_dir","_dirInc","_dirRange","_period","_periodPercent","_periodPosition","_return","_spd","_spdInc","_spdRange"]; -_return = [0,0,0]; -if(!isNil "ACE_WIND_PARAMS") then { - _dir = ACE_WIND_PARAMS select 0; - _dirRange = (ACE_WIND_PARAMS select 1) - (ACE_WIND_PARAMS select 0); - _spd = ACE_WIND_PARAMS select 2; - _spdRange = (ACE_WIND_PARAMS select 3) - (ACE_WIND_PARAMS select 2); - _period = ACE_WIND_PARAMS select 4; +// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece +_AB_Wind_Speed_Max = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; +_AB_Wind_Speed_Mean = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; +_AB_Wind_Speed_Min = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; +_AB_Wind_Direction_Probabilities = [[0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January + [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February + [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March + [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April + [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May + [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June + [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July + [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August + [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September + [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October + [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November + [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02]];// December + +_PI = 3.14159265; +_c1 = 0.2 + random 0.2; +_c2 = 0.3 + random 0.2; +_c3 = 0.5 + random 0.2; +_c4 = 0.7 + random 0.2; - _periodPosition = (time - GVAR(wind_period_start_time)) min _period; - _periodPercent = _periodPosition/_period; - _spdInc = _spdRange * _periodPercent; - _dirInc = _dirRange * _periodPercent; - _spd = (_spd + _spdInc); - _dir = _dir + _dirInc; - if (_dir > 360) then {_dir = _dir - 360}; - if (_dir < 0) then {_dir = _dir + 360}; - - _return = [_spd * sin _dir, _spd * cos _dir, 0]; +_month = date select 1; +_windDirectionProbabilities = _AB_Wind_Direction_Probabilities select (_month - 1); +while {isNil QGVAR(windDirection)} do { + _random = random 1; + for "_i" from 0 to 7 do { + if (_random < (_windDirectionProbabilities select _i)) exitWith { + GVAR(windDirection) = 45 * _i; + }; + }; + GVAR(windDirection) = GVAR(windDirection) + (random 22.5) - (random 22.5); }; -_return; \ No newline at end of file + +_min = _AB_Wind_Speed_Min select (_month - 1); +_min = (_min select 0) + (random (_min select 1)) - (random (_min select 1)); +_min = 0 max _min; +_max = _AB_Wind_Speed_Max select (_month - 1); +_max = (_max select 0) + (random (_max select 1)) - (random (_max select 1)); +_max = 0 max _max; + +_x = time * 180 / _PI; +_ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); +_windSpeed = _min + (_max - _min) * _ratio; + +systemChat format["Speed: %1, Direction: %2", _windSpeed, GVAR(windDirection)]; + +[-1 * sin(GVAR(windDirection)) * _windSpeed, -1 * cos(GVAR(windDirection)) * _windSpeed, 0] diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index e5a52348a86..7c79da00696 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -18,4 +18,4 @@ setWind [ACE_wind select 0, ACE_wind select 1, true]; // Set waves: 0 when no wind, 1 when wind >= 16 m/s 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); -//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; +hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; From 8aa69663d6413358be02c2f29bbb3746c9112a4b Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 20 Apr 2015 16:01:13 +0200 Subject: [PATCH 070/276] More WIP --- addons/weather/functions/fnc_getWind.sqf | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 9163d7e854a..6a077d86afe 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -46,16 +46,18 @@ while {isNil QGVAR(windDirection)} do { GVAR(windDirection) = GVAR(windDirection) + (random 22.5) - (random 22.5); }; -_min = _AB_Wind_Speed_Min select (_month - 1); -_min = (_min select 0) + (random (_min select 1)) - (random (_min select 1)); -_min = 0 max _min; -_max = _AB_Wind_Speed_Max select (_month - 1); -_max = (_max select 0) + (random (_max select 1)) - (random (_max select 1)); -_max = 0 max _max; +if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { + GVAR(minWindSpeed) = _AB_Wind_Speed_Min select (_month - 1); + GVAR(minWindSpeed) = (GVAR(minWindSpeed) select 0) + (random (GVAR(minWindSpeed) select 1)) - (random (GVAR(minWindSpeed) select 1)); + GVAR(minWindSpeed) = 0 max GVAR(minWindSpeed); + GVAR(maxWindSpeed) = _AB_Wind_Speed_Max select (_month - 1); + GVAR(maxWindSpeed) = (GVAR(maxWindSpeed) select 0) + (random (GVAR(maxWindSpeed) select 1)) - (random (GVAR(maxWindSpeed) select 1)); + GVAR(maxWindSpeed) = 0 max GVAR(maxWindSpeed); +}; _x = time * 180 / _PI; _ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); -_windSpeed = _min + (_max - _min) * _ratio; +_windSpeed = GVAR(minWindSpeed) + (GVAR(maxWindSpeed) - GVAR(minWindSpeed)) * _ratio; systemChat format["Speed: %1, Direction: %2", _windSpeed, GVAR(windDirection)]; From ac74e6c6110902a71ab60eba2cc20cedcb8bcd00 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 20 Apr 2015 16:33:36 +0200 Subject: [PATCH 071/276] More WIP --- addons/weather/functions/fnc_getWind.sqf | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 6a077d86afe..5b0f1bfd791 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -36,14 +36,15 @@ _c4 = 0.7 + random 0.2; _month = date select 1; _windDirectionProbabilities = _AB_Wind_Direction_Probabilities select (_month - 1); -while {isNil QGVAR(windDirection)} do { +while {isNil QGVAR(windDirectionReference)} do { _random = random 1; for "_i" from 0 to 7 do { if (_random < (_windDirectionProbabilities select _i)) exitWith { - GVAR(windDirection) = 45 * _i; + GVAR(windDirectionReference) = 45 * _i; }; }; - GVAR(windDirection) = GVAR(windDirection) + (random 22.5) - (random 22.5); + GVAR(windDirectionReference) = GVAR(windDirectionReference) + (random 22.5) - (random 22.5); + GVAR(windDirectionVariance) = (random 10) - (random 10); }; if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { @@ -55,10 +56,19 @@ if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { GVAR(maxWindSpeed) = 0 max GVAR(maxWindSpeed); }; +if ((random 30) < 1) then { + GVAR(windDirectionVariance) = (random 10) - (random 10); +}; +_windDirection = GVAR(windDirectionReference) + GVAR(windDirectionVariance); + _x = time * 180 / _PI; _ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); _windSpeed = GVAR(minWindSpeed) + (GVAR(maxWindSpeed) - GVAR(minWindSpeed)) * _ratio; -systemChat format["Speed: %1, Direction: %2", _windSpeed, GVAR(windDirection)]; +systemChat " "; +systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(GVAR(minWindSpeed) * 10) / 10, Round(_windSpeed * 10) / 10, Round(GVAR(maxWindSpeed) * 10) / 10]; +systemChat format["(Reference/Current/Variance):(%1/%2/%3)", Round(GVAR(windDirectionReference)), Round(_windDirection), Round(GVAR(windDirectionVariance))]; +systemChat " "; +systemChat " "; -[-1 * sin(GVAR(windDirection)) * _windSpeed, -1 * cos(GVAR(windDirection)) * _windSpeed, 0] +[-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] From 222aceaf561bfcaa467759b124caf5cc50a03487 Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora Date: Mon, 20 Apr 2015 17:11:22 +0200 Subject: [PATCH 072/276] PL fix --- addons/magazinerepack/stringtable.xml | 3 ++- addons/realisticnames/stringtable.xml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 3c84a9109e1..ca423317e43 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,4 +1,5 @@  + @@ -66,7 +67,7 @@ %1 volle(s) Magazin(e) und %2 übrig gebliebene Patrone(n) %1 cargador(es) completo(s) y %2 bala(s) extra(s) %1 chargeur(s) plein(s) et %2 cartouche(s) en rab - Pełnych magazynków: %1.<br /> Dodatkowych naboi: %2. + Pełnych magazynków: %1.<br />Dodatkowych naboi: %2. %1 plný zásobník(y) a %2 munice navíc %1 caricatore/i pieno e %2 munizioni extra %1 carregador(es) cheio(s) e %2 disparo(s) a mais diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index a21fcb8e05b..35890ceb442 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,4 +1,5 @@  + @@ -519,7 +520,7 @@ Punisher (GMG) Punisher (GMW) Punisher (GMG) - Punisher (CKM) + Punisher (GMG) Punisher (granátomet) Punisher (GMG) Kаратель (Гранатомет) From 7b790ffb1a63224be21026b81965763c6b8abfd8 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 20 Apr 2015 22:48:11 +0200 Subject: [PATCH 073/276] staged work --- addons/frag/functions/fnc_doSpall.sqf | 42 ++-- addons/frag/functions/fnc_fired.sqf | 12 +- addons/frag/functions/fnc_frago.sqf | 48 ++--- addons/modules/XEH_preInit.sqf | 2 + addons/modules/config.cpp | 3 + .../functions/fnc_bi_moduleProjectile.sqf | 189 ++++++++++++++++++ 6 files changed, 245 insertions(+), 51 deletions(-) create mode 100644 addons/modules/functions/fnc_bi_moduleProjectile.sqf diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 761490fa90b..cb54cb776b1 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -3,11 +3,11 @@ #ifdef DEBUG_MODE_FULL 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", +// ACE_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"]; @@ -40,21 +40,21 @@ if(!alive _round && (_initialData select 6) == 1) then { }; if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { - // player sideChat format["BBBB"]; + // ACE_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]; + // ACE_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!"]; + // ACE_player sideChat format["exit!"]; _exit = true; } else { _vm = 1-(_curVelocity/_oldVelocity); @@ -78,20 +78,20 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { ]; // _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!"]; + // ACE_player sideChat format["FOUND!"]; _spallPos = _pos2; }; }; if(!isNil "_spallPos") then { _spallPolar = _velocity call CBA_fnc_vect2polar; - + if(_explosive > 0) then { - // player sideChat format["EXPLOSIVE!"]; + // ACE_player sideChat format["EXPLOSIVE!"]; _warn = false; _c = getNumber(configFile >> "CfgAmmo" >> _roundType >> "ACE_frag_CHARGE"); if(_c == 0) then { _c = 1; _warn = true;}; @@ -109,7 +109,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _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", @@ -117,7 +117,7 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { "ACE_frag_spall_huge" ]; - + // diag_log text format["SPALL POWER: %1", _spallPolar select 0]; _spread = 15+(random 25); _spallCount = 5+(random 10); @@ -130,14 +130,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _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); + [ACE_player, _fragment, [1,0.5,0,1]] call FUNC(addTrack); }; }; _spread = 5+(random 5); @@ -151,14 +151,14 @@ if(_alive || {_caliber >= 2.5} || {(_explosive > 0 && {_idh >= 1})}) then { _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); + [ACE_player, _fragment, [1,0,0,1]] call FUNC(addTrack); }; }; }; diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index e7d7d096827..3d60ce27f4f 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -11,10 +11,10 @@ if(_round in GVAR(blackList)) exitWith { }; _doFragTrack = false; -if(_gun == player) then { +if(_gun == ACE_player) then { _doFragTrack = true; } else { - if((gunner _gun) == player) then { + if((gunner _gun) == ACE_player) then { _doFragTrack = true; } else { if(local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}) then { @@ -28,14 +28,14 @@ if(_doSpall) then { GVAR(spallHPData) = []; }; if(GVAR(spallIsTrackingCount) > 5) then { - // player sideChat "LIMT!"; + // ACE_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; +// ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)]; +[ACE_player, _round, [1,0,0,1]] call FUNC(addTrack); if(_doFragTrack && alive _round) then { GVAR(trackedObjects) pushBack _round; _spallTrack = []; @@ -44,5 +44,5 @@ if(_doFragTrack && alive _round) then { if(_doSpall) then { [_round, 2, _spallTrack, _spallTrackID] call FUNC(spallTrack); }; - // player sideChat "WTF2"; + // ACE_player sideChat "WTF2"; }; diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 1b737dc70d8..a396de04e89 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -9,14 +9,14 @@ 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", +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"]; - - + + _round = _this select 0; _lastPos = _this select 1; _lastVel = _this select 2; @@ -108,8 +108,8 @@ _fragArcs = []; _fragArcs set[360, 0]; #ifdef DEBUG_MODE_FULL - player sideChat format["_fragRange: %1", _fragRange]; - player sideChat format["_objects: %1", _objects]; + ACE_player sideChat format["_fragRange: %1", _fragRange]; + ACE_player sideChat format["_objects: %1", _objects]; #endif _doRandom = false; if(_isArmed && (count _objects) > 0) then { @@ -127,16 +127,16 @@ if(_isArmed && (count _objects) > 0) then { _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 { @@ -153,18 +153,18 @@ if(_isArmed && (count _objects) > 0) then { }; 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]; @@ -176,7 +176,7 @@ if(_isArmed && (count _objects) > 0) then { GVAR(traceFrags) = true; #endif if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0,0,1]] call FUNC(addTrack); + [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); }; _fragCount = _fragCount + 1; _currentCount = _currentCount + 1; @@ -198,15 +198,15 @@ if(_isArmed && (count _objects) > 0) then { _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; @@ -217,14 +217,14 @@ if(_isArmed && (count _objects) > 0) then { GVAR(traceFrags) = true; #endif if(GVAR(traceFrags)) then { - [player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); + [ACE_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))]; + // ACE_player sideChat format["total frags: %1", GVAR(TOTALFRAGS)]; + // ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; // #endif // _endTime = diag_tickTime; diff --git a/addons/modules/XEH_preInit.sqf b/addons/modules/XEH_preInit.sqf index a8b9bd061e6..dfbbe2c2b9d 100644 --- a/addons/modules/XEH_preInit.sqf +++ b/addons/modules/XEH_preInit.sqf @@ -3,6 +3,8 @@ ADDON = false; PREP(moduleInit); +PREP(bi_moduleProjectile); + GVAR(moduleInitCollection) = []; ADDON = true; diff --git a/addons/modules/config.cpp b/addons/modules/config.cpp index bffcec4faf7..4fc3b8b60d0 100644 --- a/addons/modules/config.cpp +++ b/addons/modules/config.cpp @@ -23,6 +23,9 @@ class CfgVehicles { init = QUOTE(_this call DFUNC(moduleInit)); }; }; + class ModuleOrdnance_F: Module_F { + function = "ace_modules_fnc_bi_moduleProjectile"; + }; }; #include "CfgEventHandlers.hpp" diff --git a/addons/modules/functions/fnc_bi_moduleProjectile.sqf b/addons/modules/functions/fnc_bi_moduleProjectile.sqf new file mode 100644 index 00000000000..65fc13bd6a8 --- /dev/null +++ b/addons/modules/functions/fnc_bi_moduleProjectile.sqf @@ -0,0 +1,189 @@ +/* + * Author: Bohemia Interactive + * Module function for spawning projectiles + * Used by Curator artillery modules etc + * + * Arguments: + * 0: The logic object + * + * Return Value: + * nil + * + * Public: No + */ + +_fnc_scriptNameParentTemp = if !(isnil '_fnc_scriptName') then {_fnc_scriptName} else {'BIS_fnc_moduleProjectile'}; +private ['_fnc_scriptNameParent']; +_fnc_scriptNameParent = _fnc_scriptNameParentTemp; +_fnc_scriptNameParentTemp = nil; + +private ['_fnc_scriptName']; +_fnc_scriptName = 'BIS_fnc_moduleProjectile'; +scriptname _fnc_scriptName; + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if ({local _x} count (objectcurators _logic) > 0) then { + //--- Reveal the circle to curators + _logic hideobject false; + _logic setpos position _logic; +}; +if !(isserver) exitwith {}; + +if (_activated) then { + _ammo = _logic getvariable ["type",gettext (configfile >> "cfgvehicles" >> typeof _logic >> "ammo")]; + if (_ammo != "") then { + _cfgAmmo = configfile >> "cfgammo" >> _ammo; + //if !(isclass _cfgAmmo) exitwith {["CfgAmmo class '%1' not found.",_ammo] call bis_fnc_error;}; + _dirVar = _fnc_scriptname + typeof _logic; + _logic setdir (missionnamespace getvariable [_dirVar,direction _logic]); //--- Restore custom direction + _pos = getposatl _logic; + _posAmmo = +_pos; + _posAmmo set [2,0]; + _dir = direction _logic; + _simulation = tolower gettext (configfile >> "cfgammo" >> _ammo >> "simulation"); + _altitude = 0; + _velocity = []; + _attach = false; + _radio = ""; + _delay = 60; + _sound = ""; + _soundSourceClass = ""; + _hint = []; + _shakeStrength = 0; + _shakeRadius = 0; + switch (_simulation) do { + case "shotshell": { + _altitude = 1000; + _velocity = [0,0,-100]; + _radio = "SentGenIncoming"; + _sounds = if (getnumber (_cfgAmmo >> "hit") < 200) then {["mortar1","mortar2"]} else {["shell1","shell2","shell3","shell4"]}; + _sound = _sounds call bis_fnc_selectrandom; + _hint = ["Curator","PlaceOrdnance"]; + _shakeStrength = 0.01; + _shakeRadius = 300; + }; + case "shotsubmunitions": { + _posAmmo = [_posAmmo,500,_dir + 180] call bis_fnc_relpos; + _altitude = 1000 - ((getterrainheightasl _posAmmo) - (getterrainheightasl _pos)); + _posAmmo set [2,_altitude]; + _velocity = [sin _dir * 68,cos _dir * 68,-100]; + _radio = "SentGenIncoming"; + _hint = ["Curator","PlaceOrdnance"]; + _shakeStrength = 0.02; + _shakeRadius = 500; + }; + case "shotilluminating": { + _altitude = 66; + _velocity = [wind select 0,wind select 1,30]; + _sound = "SN_Flare_Fired_4"; + _soundSourceClass = "SoundFlareLoop_F"; + }; + case "shotnvgmarker"; + case "shotsmokex": { + _altitude = 0; + _velocity = [0,0,0]; + _attach = true; + }; + default {["Ammo simulation '%1' is not supported",_simulation] call bis_fnc_error;}; + }; + _fnc_playRadio = { + if (_radio != "") then { + _entities = (getposatl _logic) nearentities ["All",100]; + _sides = []; + { + if (isplayer _x) then { + _side = side group _x; + if (_side in [east,west,resistance,civilian]) then { + //--- Play radio (only if it wasn't played recently) + if (time > _x getvariable ["BIS_fnc_moduleProjectile_radio",-_delay]) then { + [[_side,_radio,"side"],"bis_fnc_sayMessage",_x] call bis_fnc_mp; + _x setvariable ["BIS_fnc_moduleProjectile_radio",time + _delay]; + }; + }; + }; + } foreach _entities; + }; + }; + if (count _hint > 0) then { + [[_hint,nil,nil,nil,nil,nil,nil,true],"bis_fnc_advHint",objectcurators _logic] call bis_fnc_mp; + }; + if (count _velocity == 3) then { + _altitude = (_logic getvariable ["altitude",_altitude]) call bis_fnc_parsenumber; + _radio = _logic getvariable ["radio",_radio]; + + //--- Create projectile + _posAmmo set [2,_altitude]; + _projectile = createvehicle [_ammo,_posAmmo,[],0,"none"]; + _projectile setpos _posAmmo; + _projectile setvelocity _velocity; + if (_attach) then {_projectile attachto [_logic,[0,0,_altitude]];}; + + // This is our addition to this function + [ACE_player, "", "", "", _ammo, "", _projectile] call ace_frag_fnc_fired; + + //--- Play sound + if (_sound != "") then {[[_logic,_sound,"say3D"],"bis_fnc_sayMessage"] call bis_fnc_mp;}; + + //--- Create sound source + _soundSource = if (_soundSourceClass != "") then {createSoundSource [_soundSourceClass,_pos,[],0]} else {objnull}; + + //--- Play radio warning + [] call _fnc_playRadio; + + //--- Update + if (_attach) then { + waituntil { + _soundSource setposatl getposatl _projectile; + sleep 1; + isnull _projectile || isnull _logic + }; + } else { + waituntil { + _soundSource setposatl getposatl _projectile; + + if (getposatl _logic distance _pos > 0 || direction _logic != _dir) then { + _posNew = getposasl _logic; + _dirDiff = direction _logic - _dir; + _posNew = [_posNew,[getposasl _projectile,_pos] call bis_fnc_distance2d,direction _logic + 180] call bis_fnc_relpos; + _posNew set [2,getposasl _projectile select 2]; + _projectile setvelocity ([velocity _projectile,-_dirDiff] call bis_fnc_rotatevector2d); + _projectile setposasl _posNew; + _pos = getposatl _logic; + _dir = direction _logic; + missionnamespace setvariable [_dirVar,_dir]; + }; + sleep 0.1; + isnull _projectile || isnull _logic + }; + }; + deletevehicle _projectile; + deletevehicle _soundSource; + if (count objectcurators _logic > 0) then { + + //--- Delete curator spawned logic + if (_shakeStrength > 0) then { + if (_simulation == "shotsubmunitions") then {sleep 0.5;}; + [[_shakeStrength,0.7,[position _logic,_shakeRadius]],"bis_fnc_shakeCuratorCamera"] call bis_fnc_mp; + }; + deletevehicle _logic; + } else { + + //--- Repeat to achieve permanent effect + _repeat = _logic getvariable ["repeat",0] > 0; + if (_repeat) then { + [_logic,_units,_activated] call bis_fnc_moduleprojectile; + } else { + deletevehicle _logic; + }; + }; + } else { + deletevehicle _logic; + }; + } else { + ["Cannot create projectile, 'ammo' config attribute is missing in %1",typeof _logic] call bis_fnc_error; + }; +}; From 24c32d8e3fd0b142a6633a8f45411f9f2196d774 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 20 Apr 2015 23:18:53 +0200 Subject: [PATCH 074/276] added configuration --- addons/frag/CfgAmmo.hpp | 90 ++++++++++++------- addons/frag/XEH_pre_Init.sqf | 3 + addons/frag/functions/fnc_fired.sqf | 2 +- .../functions/fnc_bi_moduleProjectile.sqf | 2 +- 4 files changed, 64 insertions(+), 33 deletions(-) diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 8ad76e6ae86..61cd0ccfd0c 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -19,7 +19,7 @@ class CfgAmmo { airFriction = 0.04; laserLock = 0; }; - + class GrenadeBase; class Grenade; class GrenadeHand: Grenade { @@ -42,24 +42,24 @@ class CfgAmmo { 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"}; @@ -68,13 +68,13 @@ class CfgAmmo { 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 { @@ -86,19 +86,47 @@ class CfgAmmo { ACE_FRAG_SKIP = 0; ACE_FRAG_FORCE = 1; }; - + + // curator ammo entries + class Sh_82mm_AMOS; + class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS { + ACE_FRAG_CLASSES[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + ACE_FRAG_METAL = 800; + ACE_FRAG_CHARGE = 4200; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + }; + + class Sh_155mm_AMOS; + class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS { + 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 = 1950; + ACE_FRAG_CHARGE = 15800; + ACE_FRAG_GURNEY_C = 2320; + ACE_FRAG_GURNEY_K = 1/2; + }; + + //class R_230mm_HE; + //class ModuleOrdnanceRocket_F_ammo: R_230mm_HE { + //}; + + //class R_230mm_fly; + //class ModuleOrdnanceRocket_F_subammo: R_230mm_fly { + //}; + // end of curator ammo entries + //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? @@ -253,51 +281,51 @@ class CfgAmmo { 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}; + 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; @@ -305,19 +333,19 @@ class CfgAmmo { 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; @@ -325,7 +353,7 @@ class CfgAmmo { airFriction = BASE_DRAG*0.5; caliber = 2.8; }; - + class ACE_frag_huge_HD: ACE_frag_large { hit = 40; indirectHit = 4; @@ -333,19 +361,19 @@ class CfgAmmo { 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/XEH_pre_Init.sqf b/addons/frag/XEH_pre_Init.sqf index 5b3aa36b188..5fb261cc053 100644 --- a/addons/frag/XEH_pre_Init.sqf +++ b/addons/frag/XEH_pre_Init.sqf @@ -26,6 +26,9 @@ GVAR(tracesStarted) = false; GVAR(traceID) = -1; GVAR(autoTrace) = true; +// TODO setting +GVAR(enabled) = true; + // * Other Shit */ PREP(frag_trace); diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 3d60ce27f4f..ee8c283142a 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" private ["_gun", "_type", "_round", "_doFragTrack", "_doSpall"]; -if !(isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {}; +if !(!isNil QGVAR(enabled) && {GVAR(enabled)}) exitWith {}; _gun = _this select 0; _type = _this select 4; diff --git a/addons/modules/functions/fnc_bi_moduleProjectile.sqf b/addons/modules/functions/fnc_bi_moduleProjectile.sqf index 65fc13bd6a8..7c0932cd590 100644 --- a/addons/modules/functions/fnc_bi_moduleProjectile.sqf +++ b/addons/modules/functions/fnc_bi_moduleProjectile.sqf @@ -123,7 +123,7 @@ if (_activated) then { if (_attach) then {_projectile attachto [_logic,[0,0,_altitude]];}; // This is our addition to this function - [ACE_player, "", "", "", _ammo, "", _projectile] call ace_frag_fnc_fired; + [_logic, "", "", "", _ammo, "", _projectile] call ace_frag_fnc_fired; //--- Play sound if (_sound != "") then {[[_logic,_sound,"say3D"],"bis_fnc_sayMessage"] call bis_fnc_mp;}; From fb93e9e9bc93f0f6a1dd56b343bf47fcfd519dcc Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 20 Apr 2015 23:38:50 +0200 Subject: [PATCH 075/276] wrapped track in debug define --- addons/frag/functions/fnc_fired.sqf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index ee8c283142a..85f5f45c0ab 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -35,7 +35,11 @@ if(_doSpall) then { }; }; // ACE_player sideChat format["c: %1", GVAR(spallIsTrackingCount)]; + +#ifdef DEBUG_MODE_FULL [ACE_player, _round, [1,0,0,1]] call FUNC(addTrack); +#endif + if(_doFragTrack && alive _round) then { GVAR(trackedObjects) pushBack _round; _spallTrack = []; From 4543bab7fb582b947fd246412613eda9d5a06d9a Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 20 Apr 2015 23:41:22 +0200 Subject: [PATCH 076/276] added nil check for function ace_frag_fnc_fired --- addons/modules/functions/fnc_bi_moduleProjectile.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/modules/functions/fnc_bi_moduleProjectile.sqf b/addons/modules/functions/fnc_bi_moduleProjectile.sqf index 7c0932cd590..6273da27049 100644 --- a/addons/modules/functions/fnc_bi_moduleProjectile.sqf +++ b/addons/modules/functions/fnc_bi_moduleProjectile.sqf @@ -123,7 +123,9 @@ if (_activated) then { if (_attach) then {_projectile attachto [_logic,[0,0,_altitude]];}; // This is our addition to this function - [_logic, "", "", "", _ammo, "", _projectile] call ace_frag_fnc_fired; + if (!isnil "ace_frag_fnc_fired") then { + [_logic, "", "", "", _ammo, "", _projectile] call ace_frag_fnc_fired; + }; //--- Play sound if (_sound != "") then {[[_logic,_sound,"say3D"],"bis_fnc_sayMessage"] call bis_fnc_mp;}; From 166c8147cf6a95e38a26e41bbb3cd59710a819a9 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Mon, 20 Apr 2015 23:55:23 +0200 Subject: [PATCH 077/276] Using ace_frag_fnc_addManualTrack instead of fired function --- addons/modules/functions/fnc_bi_moduleProjectile.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/modules/functions/fnc_bi_moduleProjectile.sqf b/addons/modules/functions/fnc_bi_moduleProjectile.sqf index 6273da27049..56e3eb9883a 100644 --- a/addons/modules/functions/fnc_bi_moduleProjectile.sqf +++ b/addons/modules/functions/fnc_bi_moduleProjectile.sqf @@ -123,8 +123,8 @@ if (_activated) then { if (_attach) then {_projectile attachto [_logic,[0,0,_altitude]];}; // This is our addition to this function - if (!isnil "ace_frag_fnc_fired") then { - [_logic, "", "", "", _ammo, "", _projectile] call ace_frag_fnc_fired; + if (!isnil "ace_frag_fnc_addManualTrack") then { + [_projectile] call ace_frag_fnc_addManualTrack }; //--- Play sound From 96be881ea9bfc6ae2ff3edcdb9d25f7e84289428 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 20 Apr 2015 18:28:01 -0500 Subject: [PATCH 078/276] User changeable text/shadow colors for interaction --- addons/interact_menu/XEH_clientInit.sqf | 9 ++++ addons/interact_menu/XEH_preInit.sqf | 1 + addons/interact_menu/config.cpp | 24 +++++++++ .../functions/fnc_renderIcon.sqf | 25 ++++----- .../functions/fnc_renderMenu.sqf | 12 ++--- .../functions/fnc_setupTextColors.sqf | 52 +++++++++++++++++++ addons/interact_menu/stringtable.xml | 14 ++++- 7 files changed, 114 insertions(+), 23 deletions(-) create mode 100644 addons/interact_menu/functions/fnc_setupTextColors.sqf diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index ea4a971563a..b8a8fc899bb 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -3,6 +3,15 @@ if (!hasInterface) exitWith {}; +//Setup text/shadow color matrix +[] call FUNC(setupTextColors); +["SettingChanged", { + PARAMS_2(_name,_value); + if ((_name == QGVAR(colorTextMax)) || {_name == QGVAR(colorTextMin)} || {_name == QGVAR(colorShadowMax)} || {_name == QGVAR(colorShadowMin)}) then { + [] call FUNC(setupTextColors); + }; +}] call EFUNC(common,addEventhandler); + // Install the render EH on the main display addMissionEventHandler ["Draw3D", DFUNC(render)]; diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index 747da7083e1..65d5dd43057 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -21,6 +21,7 @@ PREP(renderBaseMenu); PREP(renderIcon); PREP(renderMenu); PREP(renderSelector); +PREP(setupTextColors); PREP(splitPath); GVAR(keyDown) = false; diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index eeff688a1a4..433c2388c23 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -37,6 +37,30 @@ class ACE_Settings { isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_UseListMenu"; }; + class GVAR(colorTextMax) { + value[] = {1, 1, 1, 1}; + typeName = "COLOR"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_Menu_ColorTextMax"; + }; + class GVAR(colorTextMin) { + value[] = {1, 1, 1, 0.25}; + typeName = "COLOR"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_Menu_ColorTextMin"; + }; + class GVAR(colorShadowMax) { + value[] = {1, 1, 1, 1}; + typeName = "COLOR"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_Menu_ColorShadowMax"; + }; + class GVAR(colorShadowMin) { + value[] = {1, 1, 1, 0.25}; + typeName = "COLOR"; + isClientSettable = 1; + displayName = "$STR_ACE_Interact_Menu_ColorShadowMin"; + }; }; class ACE_Extensions { diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 3da1777bedd..9107b6d998c 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -4,12 +4,11 @@ * * Argument: * 0: Text - * 1: Color + * 1: Icon * 2: 2d position - * 3: ? - * 4: ? - * 5: ? - * 6: Icon + * 3: Color + * 4: Shadow Color + * 5: Icon Color * * Return value: * None @@ -18,11 +17,8 @@ */ #include "script_component.hpp" #define DEFAULT_ICON QUOTE(\z\ace\addons\interaction\ui\dot_ca.paa) -private ["_color", "_sPos", "_ctrl", "_icon"]; -_text = _this select 0; -_color = _this select 1; -_sPos = _this select 2; -_icon = _this select 6; +private ["_ctrl"]; +PARAMS_6(_text,_icon,_sPos,_textColor,_shadowColor,_iconColor); //systemChat format ["Icon %1 - %2,%3", _text, _sPos select 0, _sPos select 1]; @@ -37,16 +33,15 @@ if(_icon == "") then { }; _text = if (GVAR(UseListMenu)) then { - format ["%4", _icon, _color, _color, _text] + format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text] } else { - format ["
%4", _icon, _color, _color, "ace_breakLine" callExtension _text]; + format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; }; _ctrl ctrlSetStructuredText (parseText _text); _text = if (GVAR(UseListMenu)) then { - _ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW]; + _ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW]; } else { - _ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW]; + _ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW]; }; -//_ctrl ctrlSetBackgroundColor [0, 1, 0, 0.1]; _ctrl ctrlCommit 0; diff --git a/addons/interact_menu/functions/fnc_renderMenu.sqf b/addons/interact_menu/functions/fnc_renderMenu.sqf index b46740921e5..e80e9d41abb 100644 --- a/addons/interact_menu/functions/fnc_renderMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderMenu.sqf @@ -45,19 +45,17 @@ _menuInSelectedPath = true; // Render icon // ARGB Color (First Hex Pair is transparancy) -_color = "#FFFFFFFF"; +_textColor = GVAR(colorSelected); +_shadowColor = GVAR(colorSelectedShadow); if(!_menuInSelectedPath) then { - if (_menuDepth > 0) then { - _color = format ["#%1FFFFFF", [255 * ((((count _path) - 1)/_menuDepth) max 0.25)] call EFUNC(common,toHex)]; - } else { - _color = format ["#%1FFFFFF", [255 * 0.75] call EFUNC(common,toHex)]; - }; + _textColor = (GVAR(colorNotSelectedMatrix) select (count _path)) select _menuDepth; + _shadowColor = (GVAR(colorShadowNotSelectedMatrix) select (count _path)) select _menuDepth; }; //END_COUNTER(constructing_colors); //BEGIN_COUNTER(fnc_renderIcons); -[_actionData select 1, _color, _sPos, 1, 1, 0, _actionData select 2, 0.5, 0.025, "TahomaB"] call FUNC(renderIcon); +[_actionData select 1, _actionData select 2, _sPos, _textColor, _shadowColor, "#FFFFFFFF"] call FUNC(renderIcon); //END_COUNTER(fnc_renderIcons); diff --git a/addons/interact_menu/functions/fnc_setupTextColors.sqf b/addons/interact_menu/functions/fnc_setupTextColors.sqf new file mode 100644 index 00000000000..5df9c589da9 --- /dev/null +++ b/addons/interact_menu/functions/fnc_setupTextColors.sqf @@ -0,0 +1,52 @@ +/* + * Author: PabstMirror + * Builds color strings needed for displaying interaction text + * + * Argument: + * None + * + * Return value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +private ["_mixColor", "_rowT", "_rowS", "_menuDepth", "_pathCount", "_menuInSelectedPath", "_color", "_path"]; + +//Mixes 2 colors (number arrays) and makes a color string "#AARRGGBB" for structured text +_mixColor = { + PARAMS_3(_color1,_color2,_ratio); + private ["_return", "_mix", "_index"]; + _return = ""; + for "_index" from 0 to 3 do { + _mix = linearConversion [0, 1, _ratio, (_color1 select _index), (_color2 select _index)]; + if (_index != 3) then { + _return = _return + ([255 * _mix] call EFUNC(common,toHex)); + } else { + _return = "#" + ([255 * _mix] call EFUNC(common,toHex)) + _return; + }; + }; + _return +}; + +GVAR(colorSelected) = [GVAR(colorTextMin), GVAR(colorTextMax), 1] call _mixColor; +GVAR(colorSelectedShadow) = [GVAR(colorShadowMin), GVAR(colorShadowMax), 1] call _mixColor; +GVAR(colorNotSelectedMatrix) = []; +GVAR(colorShadowNotSelectedMatrix) = []; + +for "_pathCount" from 0 to 15 do { + _rowT = []; + _rowS = []; + for "_menuDepth" from 0 to 15 do { + if (_menuDepth > 0) then { + _rowT pushBack ([GVAR(colorTextMin), GVAR(colorTextMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor); + _rowS pushBack ([GVAR(colorShadowMin), GVAR(colorShadowMax), (((_pathCount - 1) / _menuDepth) max 0.25)] call _mixColor); + } else { + _rowT pushBack ([GVAR(colorTextMin), GVAR(colorTextMax), 0] call _mixColor); + _rowS pushBack ([GVAR(colorShadowMin), GVAR(colorShadowMax), 0] call _mixColor); + }; + }; + GVAR(colorNotSelectedMatrix) pushBack _rowT; + GVAR(colorShadowNotSelectedMatrix) pushBack _rowS; +}; diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 0b37f40f5ef..55d67788f43 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -71,5 +71,17 @@ Járműves cselekvések Interazioni con veicoli + + Interaction - Text Max + + + Interaction - Text Min + + + Interaction - Shadow Max + + + Interaction - Shadow Min + - + \ No newline at end of file From 5e440686bbb9c52f5d71965b04a4e001181f38ba Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 21 Apr 2015 04:43:24 +0200 Subject: [PATCH 079/276] put weapon on back without having to stand up --- addons/movement/CfgMoves.hpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/addons/movement/CfgMoves.hpp b/addons/movement/CfgMoves.hpp index 677ad3dc94c..f82ae207a23 100644 --- a/addons/movement/CfgMoves.hpp +++ b/addons/movement/CfgMoves.hpp @@ -5,10 +5,16 @@ class CfgMovesBasic { }; class Actions { - class RifleStandActionsNoAdjust; - class RifleLowStandActionsNoAdjust; + class RifleBaseStandActions; + class RifleKneelActions: RifleBaseStandActions { + Civil = "AmovPknlMstpSnonWnonDnon"; + }; + class RifleProneActions: RifleBaseStandActions { + Civil = "AmovPpneMstpSnonWnonDnon"; + }; // WEAPON RAISED - RUNNING + class RifleStandActionsNoAdjust; class RifleStandActionsRunF: RifleStandActionsNoAdjust { getOver = "AovrPercMrunSrasWrflDf"; }; @@ -18,6 +24,7 @@ class CfgMovesBasic { class RifleStandActionsRunFR: RifleStandActionsNoAdjust { getOver = "AovrPercMrunSrasWrflDf"; }; + // WEAPON RAISED - SPRINTING class RifleStandEvasiveActionsF: RifleStandActionsNoAdjust { getOver = "AovrPercMrunSrasWrflDf"; @@ -28,7 +35,9 @@ class CfgMovesBasic { class RifleStandEvasiveActionsFR: RifleStandActionsNoAdjust { getOver = "AovrPercMrunSrasWrflDf"; }; + // WEAPON LOWERED - RUNNING + class RifleLowStandActionsNoAdjust; class RifleLowStandActionsRunF: RifleLowStandActionsNoAdjust { getOver = "AovrPercMrunSrasWrflDf"; }; From de660cf45fad63d1950bfa7ed7e70e9d645d2fae Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 21 Apr 2015 05:21:04 +0200 Subject: [PATCH 080/276] messing with animations --- addons/movement/CfgMoves.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/movement/CfgMoves.hpp b/addons/movement/CfgMoves.hpp index f82ae207a23..5d7d17c5d47 100644 --- a/addons/movement/CfgMoves.hpp +++ b/addons/movement/CfgMoves.hpp @@ -11,6 +11,12 @@ class CfgMovesBasic { }; class RifleProneActions: RifleBaseStandActions { Civil = "AmovPpneMstpSnonWnonDnon"; + SecondaryWeapon = "AmovPpneMstpSrasWlnrDnon"; + }; + + class PistolStandActions; + class PistolProneActions: PistolStandActions { + SecondaryWeapon = "AmovPpneMstpSrasWlnrDnon"; }; // WEAPON RAISED - RUNNING From 50933077565d80812008455fc778408258d173a2 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 21 Apr 2015 06:10:30 +0200 Subject: [PATCH 081/276] experiment with launcher anim --- addons/movement/CfgMoves.hpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/addons/movement/CfgMoves.hpp b/addons/movement/CfgMoves.hpp index 5d7d17c5d47..bfa9908d92e 100644 --- a/addons/movement/CfgMoves.hpp +++ b/addons/movement/CfgMoves.hpp @@ -19,6 +19,19 @@ class CfgMovesBasic { SecondaryWeapon = "AmovPpneMstpSrasWlnrDnon"; }; + class LauncherKneelActions; + class LauncherStandActions: LauncherKneelActions { + PlayerProne = "AmovPpneMstpSrasWlnrDnon"; + Down = "AmovPpneMstpSrasWlnrDnon"; + }; + + class LauncherProneActions: LauncherKneelActions { + TurnL = "AmovPpneMstpSrasWlnrDnon_turnl"; + TurnLRelaxed = "AmovPpneMstpSrasWlnrDnon_turnl"; + TurnR = "AmovPpneMstpSrasWlnrDnon_turnr"; + TurnRRelaxed = "AmovPpneMstpSrasWlnrDnon_turnr"; + }; + // WEAPON RAISED - RUNNING class RifleStandActionsNoAdjust; class RifleStandActionsRunF: RifleStandActionsNoAdjust { From 616eee6aa48aecea1459189f7225b25ed767ef44 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 21 Apr 2015 06:22:41 +0200 Subject: [PATCH 082/276] remove broken launcher anim --- addons/movement/CfgMoves.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/movement/CfgMoves.hpp b/addons/movement/CfgMoves.hpp index bfa9908d92e..bd9519b013e 100644 --- a/addons/movement/CfgMoves.hpp +++ b/addons/movement/CfgMoves.hpp @@ -20,10 +20,10 @@ class CfgMovesBasic { }; class LauncherKneelActions; - class LauncherStandActions: LauncherKneelActions { + /*class LauncherStandActions: LauncherKneelActions { PlayerProne = "AmovPpneMstpSrasWlnrDnon"; Down = "AmovPpneMstpSrasWlnrDnon"; - }; + };*/ class LauncherProneActions: LauncherKneelActions { TurnL = "AmovPpneMstpSrasWlnrDnon_turnl"; From cebe52051314c75cd78dbae55d4387702094a6c2 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Tue, 21 Apr 2015 08:47:55 -0700 Subject: [PATCH 083/276] Userconfig folder is now properly added to the release folder for final distribution. #783 --- tools/make.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tools/make.py b/tools/make.py index aaaf6501c58..a5c3069887d 100644 --- a/tools/make.py +++ b/tools/make.py @@ -340,14 +340,14 @@ def copy_optionals_for_building(mod,pbos): src_directories = os.listdir(optionals_root) current_dir = os.getcwd() - print("") + print_blue("\nChecking Optionals folder...") try: #special server.pbo processing files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) for file in files: file_name = os.path.basename(file) - print ("Adding the following file: " + file_name) + #print ("Adding the following file: " + file_name) pbos.append(file_name) pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) if (os.path.isfile(pbo_path)): @@ -364,13 +364,19 @@ def copy_optionals_for_building(mod,pbos): try: for dir_name in src_directories: mod.append(dir_name) + #userconfig requires special handling since it is not a PBO source folder. + #CfgConvert fails to build server.pbo if userconfig is not found in P:\ if (dir_name == "userconfig"): + if (os.path.exists(os.path.join(release_dir, "@ace","optionals",dir_name))): + shutil.rmtree(os.path.join(release_dir, "@ace","optionals",dir_name), True) + shutil.copytree(os.path.join(optionals_root,dir_name), os.path.join(release_dir, "@ace","optionals",dir_name)) destination = os.path.join(work_drive,dir_name) else: destination = os.path.join(module_root,dir_name) print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.") - shutil.rmtree(destination, True) + if (os.path.exists(destination)): + shutil.rmtree(destination, True) shutil.copytree(os.path.join(optionals_root,dir_name), destination) except: print_error("Copy Optionals Failed") @@ -382,6 +388,7 @@ def cleanup_optionals(mod,pbos): print("") try: for dir_name in mod: + #userconfig requires special handling since it is not a PBO source folder. if (dir_name == "userconfig"): destination = os.path.join(work_drive,dir_name) else: @@ -681,6 +688,7 @@ def main(argv): # For each module, prep files and then build. + print_blue("\nBuilding...") for module in modules: print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) missing = False From 7b4f451d8a3c21f0daf2440de8bb4729069593a7 Mon Sep 17 00:00:00 2001 From: bux578 Date: Tue, 21 Apr 2015 19:00:13 +0200 Subject: [PATCH 084/276] reduce m84 mass m84 weighs ~260g compared to a m18 with ~520g. Ingame the m18 has a mass of 4 but giving the m84 a mass of 2 seems odd to me. That's why I've reduced it from 10 to 4. --- addons/grenades/CfgMagazines.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/grenades/CfgMagazines.hpp b/addons/grenades/CfgMagazines.hpp index 33392f41eee..968b8ed141b 100644 --- a/addons/grenades/CfgMagazines.hpp +++ b/addons/grenades/CfgMagazines.hpp @@ -1,6 +1,7 @@ class CfgMagazines { class HandGrenade; class ACE_HandFlare_Base: HandGrenade { + author = "$STR_ACE_Common_ACETeam"; value = 2; nameSoundWeapon = "smokeshell"; nameSound = "smokeshell"; @@ -41,19 +42,23 @@ class CfgMagazines { }; class ACE_M84: HandGrenade { ammo = "ACE_G_M84"; + author = "$STR_ACE_Common_ACETeam"; displayname = "$STR_ACE_Grenades_M84_Name"; descriptionshort = "$STR_ACE_Grenades_M84_Description"; displayNameShort = "M84"; + mass = 4; model = PATHTOF(models\ACE_m84.p3d); picture = PATHTOF(UI\ACE_m84_x_ca.paa); }; class 3Rnd_UGL_FlareGreen_F; class 6Rnd_GreenSignal_F: 3Rnd_UGL_FlareGreen_F { + author = "$STR_ACE_Common_ACETeam"; ammo = "F_40mm_Green"; initSpeed = 120; }; class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F { + author = "$STR_ACE_Common_ACETeam"; ammo = "F_40mm_Red"; initSpeed = 120; }; From ced0d3d5769b0cf588ae8c2ff2e5ea85f41e031a Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Tue, 21 Apr 2015 10:02:56 -0700 Subject: [PATCH 085/276] Removing extra spaces from the end of line #783 --- tools/make.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index a5c3069887d..bdf04f6810d 100644 --- a/tools/make.py +++ b/tools/make.py @@ -386,7 +386,7 @@ def copy_optionals_for_building(mod,pbos): def cleanup_optionals(mod,pbos): print("") - try: + try: for dir_name in mod: #userconfig requires special handling since it is not a PBO source folder. if (dir_name == "userconfig"): From e605a8dbca1511ac8c852f311d386a121b58b8cd Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Tue, 21 Apr 2015 10:05:11 -0700 Subject: [PATCH 086/276] Trimming more trailing spaces #783 --- tools/make.py | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/tools/make.py b/tools/make.py index bdf04f6810d..3b7bf9d94e1 100644 --- a/tools/make.py +++ b/tools/make.py @@ -293,9 +293,9 @@ def print_yellow(msg): print(msg) color("reset") - + def copy_important_files(source_dir,destination_dir): - + originalDir = os.getcwd() importantFiles = ["mod.cpp", "README.md", @@ -303,10 +303,10 @@ def copy_important_files(source_dir,destination_dir): "LICENSE", "logo_ace3_ca.paa" ] - + print_yellow ("source_dir: " + source_dir) print_yellow("destination_dir: " + destination_dir) - + #copy importantFiles try: print_blue("\nSearching for important files in " + source_dir) @@ -316,16 +316,16 @@ def copy_important_files(source_dir,destination_dir): except: print_error("COPYING IMPORTANT FILES.") raise - + #copy all extension dlls try: os.chdir(os.path.join(source_dir)) print_blue("\nSearching for DLLs in " + os.getcwd()) filenames = glob.glob("*.dll") - + if not filenames: print ("Empty SET") - + for dll in filenames: print_green("Copying dll => " + os.path.join(source_dir,dll)) if os.path.isfile(dll): @@ -339,10 +339,10 @@ def copy_important_files(source_dir,destination_dir): def copy_optionals_for_building(mod,pbos): src_directories = os.listdir(optionals_root) current_dir = os.getcwd() - + print_blue("\nChecking Optionals folder...") try: - + #special server.pbo processing files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo")) for file in files: @@ -383,7 +383,7 @@ def copy_optionals_for_building(mod,pbos): raise finally: os.chdir(current_dir) - + def cleanup_optionals(mod,pbos): print("") try: @@ -393,9 +393,9 @@ def cleanup_optionals(mod,pbos): destination = os.path.join(work_drive,dir_name) else: destination = os.path.join(module_root,dir_name) - + print("Cleaning " + destination) - + try: file_name = "ace_{}.pbo".format(dir_name) src_file_path = os.path.join(release_dir, "@ace","addons",file_name) @@ -407,7 +407,7 @@ def cleanup_optionals(mod,pbos): print_error(file_name + " already exists") continue shutil.rmtree(destination) - + except: print_error("Cleaning Optionals Failed") raise @@ -535,7 +535,7 @@ def main(argv): global release_dir global module_root_parent global optionals_root - + cfg.read(os.path.join(make_root, "make.cfg")) # Project name (with @ symbol) @@ -569,7 +569,7 @@ def main(argv): # Release/build directory, relative to script dir release_dir = cfg.get(make_target, "release_dir", fallback="release") - + # Project PBO file prefix (files are renamed to prefix_name.pbo) pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None) @@ -578,7 +578,7 @@ def main(argv): module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons")) optionals_root = os.path.join(module_root_parent, "optionals") print_green ("module_root: " + module_root) - + if (os.path.isdir(module_root)): os.chdir(module_root) else: @@ -590,9 +590,9 @@ def main(argv): else: print_error ("Directory " + optionals_root + " does not exist.") sys.exit() - + print_green ("release_dir: " + release_dir) - + except: raise print_error("Could not parse make.cfg.") @@ -640,14 +640,14 @@ def main(argv): print ("No cache found.") cache = {} - #Temporarily copy optionals_root for building. They will be removed later. + #Temporarily copy optionals_root for building. They will be removed later. optionals_modules = [] optional_files = [] copy_optionals_for_building(optionals_modules,optional_files) - + # Get list of subdirs in make root. dirs = next(os.walk(module_root))[1] - + # Autodetect what directories to build. if module_autodetect and not arg_modules: modules = [] @@ -692,7 +692,7 @@ def main(argv): for module in modules: print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) missing = False - + # Cache check if module in cache: old_sha = cache[module] @@ -705,7 +705,7 @@ def main(argv): # Hash the module new_sha = get_directory_hash(os.path.join(module_root, module)) - + # Is the pbo file missing? missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) if missing: @@ -789,7 +789,7 @@ def main(argv): print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.") os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) - + # Include build number try: @@ -807,7 +807,7 @@ def main(argv): f.close() else: os.remove(os.path.join(work_drive, prefix, module, "config.cpp")) - os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) + os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp")) except: raise print_error("Failed to include build number") From be031801ab34387045171441bb64db965e34a6a6 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 21 Apr 2015 12:09:58 -0500 Subject: [PATCH 087/276] #770 - m84 - don't add pain if strength is low --- addons/grenades/functions/fnc_flashbangExplosionEH.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 75e61dab569..67fb2ded9ca 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -80,7 +80,7 @@ _affected = _grenade nearEntities ["CAManBase", 20]; //Add ace_medical pain effect: - if ((isClass (configFile >> "CfgPatches" >> "ACE_Medical")) && {_strength > 0}) then { + if ((isClass (configFile >> "CfgPatches" >> "ACE_Medical")) && {_strength > 0.1}) then { [ACE_player, (_strength / 2)] call EFUNC(medical,adjustPainLevel); }; From 3897b73d569c33834707ea88fcc6409ee9ea62dd Mon Sep 17 00:00:00 2001 From: bux578 Date: Tue, 21 Apr 2015 19:16:54 +0200 Subject: [PATCH 088/276] remove author from items inheriting ACE_ItemCore --- addons/attach/CfgWeapons.hpp | 1 - addons/common/CfgWeapons.hpp | 3 ++- addons/explosives/CfgVehicles.hpp | 4 ++-- addons/logistics_wirecutter/CfgWeapons.hpp | 1 - addons/microdagr/CfgWeapons.hpp | 1 - addons/missileguidance/CfgVehicles.hpp | 2 +- addons/overheating/CfgWeapons.hpp | 1 - addons/vehiclelock/CfgWeapons.hpp | 1 - 8 files changed, 5 insertions(+), 9 deletions(-) diff --git a/addons/attach/CfgWeapons.hpp b/addons/attach/CfgWeapons.hpp index 9734ceb273d..d2df9487186 100644 --- a/addons/attach/CfgWeapons.hpp +++ b/addons/attach/CfgWeapons.hpp @@ -5,7 +5,6 @@ class CfgWeapons { class ACE_IR_Strobe_Item: ACE_ItemCore { ACE_attachable = "ACE_IR_Strobe_Effect"; - author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_IrStrobe_Name"; descriptionShort = "$STR_ACE_IrStrobe_Description"; diff --git a/addons/common/CfgWeapons.hpp b/addons/common/CfgWeapons.hpp index cf8c06798e5..3e40f360feb 100644 --- a/addons/common/CfgWeapons.hpp +++ b/addons/common/CfgWeapons.hpp @@ -2,6 +2,7 @@ class CfgWeapons { class ItemCore; class ACE_ItemCore: ItemCore { + author = "$STR_ACE_Common_ACETeam"; type = 4096;//4; detectRange = -1; simulation = "ItemMineDetector"; @@ -13,6 +14,7 @@ class CfgWeapons { }; class ACE_FakePrimaryWeapon: Rifle_Base_F { + author = "$STR_ACE_Common_ACETeam"; scope = 2; scopeCurator = 1; @@ -30,7 +32,6 @@ class CfgWeapons { class InventoryItem_Base_F; class ACE_Banana: ACE_ItemCore { - author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_Common_bananaDisplayName"; descriptionShort = "$STR_ACE_Common_bananaDescr"; diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 30e1ff151d9..5aa62992fcf 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -50,7 +50,7 @@ class CfgVehicles { class Items_base_F; class ACE_DefuseObject: Items_base_F { XEH_ENABLED; - author = "ACE"; + author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_DefuseObject"; displayName = "ACE Defuse Helper"; mapSize = 0.2; @@ -80,7 +80,7 @@ class CfgVehicles { }; class ACE_Explosives_Place: Items_base_F { XEH_ENABLED; - author = "ACE"; + author = "$STR_ACE_Common_ACETeam"; _generalMacro = "ACE_Explosives_Place"; displayName = "Multi-meter"; mapSize = 0.2; diff --git a/addons/logistics_wirecutter/CfgWeapons.hpp b/addons/logistics_wirecutter/CfgWeapons.hpp index 648bc3a3f80..5cb2db02c2e 100644 --- a/addons/logistics_wirecutter/CfgWeapons.hpp +++ b/addons/logistics_wirecutter/CfgWeapons.hpp @@ -3,7 +3,6 @@ class CfgWeapons { class ACE_ItemCore; class ACE_wirecutter: ACE_ItemCore { - author = "$STR_ACE_Common_ACETeam"; displayName = "$STR_ACE_logistics_wirecutter_wirecutterName"; descriptionShort = "$STR_ACE_logistics_wirecutter_wirecutterDescription"; model = "\A3\weapons_F\ammo\mag_univ.p3d"; diff --git a/addons/microdagr/CfgWeapons.hpp b/addons/microdagr/CfgWeapons.hpp index 73615ea6b68..bf4fc95b5c7 100644 --- a/addons/microdagr/CfgWeapons.hpp +++ b/addons/microdagr/CfgWeapons.hpp @@ -3,7 +3,6 @@ class CfgWeapons { class InventoryItem_Base_F; class ACE_microDAGR: ACE_ItemCore { - author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_microdagr_itemName"; descriptionShort = "$STR_ACE_microdagr_itemDescription"; diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 301795b8d7a..bbb17682556 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -20,7 +20,7 @@ class CfgVehicles { class ACE_Comanche_Test : B_Heli_Attack_01_F { displayName = "ACE_Comanche_Test"; - author = "ACE Team"; + author = "$STR_ACE_Common_ACETeam"; class Library { libTextDesc = "ACE_Comanche_Test"; }; diff --git a/addons/overheating/CfgWeapons.hpp b/addons/overheating/CfgWeapons.hpp index 12ec43024fc..580564e864f 100644 --- a/addons/overheating/CfgWeapons.hpp +++ b/addons/overheating/CfgWeapons.hpp @@ -5,7 +5,6 @@ class CfgWeapons { class ACE_SpareBarrel: ACE_ItemCore { displayname = "$STR_ACE_Overheating_SpareBarrelName"; descriptionshort = "$STR_ACE_Overheating_SpareBarrelDescription"; - //model = ""; picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); scope = 2; class ItemInfo: InventoryItem_Base_F { diff --git a/addons/vehiclelock/CfgWeapons.hpp b/addons/vehiclelock/CfgWeapons.hpp index 4b20de15d70..f3d1422a84d 100644 --- a/addons/vehiclelock/CfgWeapons.hpp +++ b/addons/vehiclelock/CfgWeapons.hpp @@ -3,7 +3,6 @@ class CfgWeapons { class ACE_ItemCore; class ACE_key_master: ACE_ItemCore { - author = "$STR_ACE_Common_ACETeam"; displayName = "Vehicle Key: Master"; descriptionShort = "$STR_ACE_Vehicle_Item_Master_Description"; model = "\A3\weapons_F\ammo\mag_univ.p3d"; From af4fdda477cbf305fc06f7c76dfae33f7eb83a19 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:20:05 +0200 Subject: [PATCH 089/276] Continued work on the new wind system: * Moved the wind data into CfgWorlds.hpp * Modified the contents of ACE_WIND_PARAMS * new getWind function for the clients * new wind init based on the real world weather data --- addons/weather/CfgWorlds.hpp | 34 ++++++++- addons/weather/XEH_postInit.sqf | 20 +----- addons/weather/XEH_preInit.sqf | 1 + addons/weather/functions/fnc_getMapData.sqf | 22 ++++++ addons/weather/functions/fnc_getWind.sqf | 65 ++++------------- addons/weather/functions/fnc_initWind.sqf | 48 +++++++++++++ .../functions/fnc_serverController.sqf | 71 +++++++------------ 7 files changed, 146 insertions(+), 115 deletions(-) create mode 100644 addons/weather/functions/fnc_initWind.sqf diff --git a/addons/weather/CfgWorlds.hpp b/addons/weather/CfgWorlds.hpp index ed932654f74..1391468fd99 100644 --- a/addons/weather/CfgWorlds.hpp +++ b/addons/weather/CfgWorlds.hpp @@ -7,6 +7,22 @@ class CfgWorlds { ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6}; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80}; + // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece + ACE_WindSpeedMax[] = {{8.8, 5.5}, {8.8, 5}, {8.6, 4.8}, {7.6, 3.4}, {7.0, 3.0}, {7.1, 3.0}, {7.5, 3.1}, {8.0, 3.2}, {7.6, 3.5}, {7.8, 4.6}, {7.9, 5.0}, {8.2, 5.5}}; + ACE_WindSpeedMean[] = {4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0}; + ACE_WindSpeedMin[] = {{0.2, 5.0}, {0.1, 5.0}, {0.2, 4.3}, {0.0, 3.0}, {0.0, 2.1}, {0.0, 2.0}, {0.1, 3.1}, {0.3, 3.1}, {0.0, 3.6}, {0.0, 4.2}, {0.1, 5.0}, {0.2, 5.5}}; + ACE_WindDirectionProbabilities[] = {{0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02}, // January + {0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02}, // February + {0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03}, // March + {0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04}, // April + {0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05}, // May + {0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08}, // June + {0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09}, // July + {0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08}, // August + {0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05}, // September + {0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03}, // October + {0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02}, // November + {0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02}};// December }; class Altis: CAWorld { @@ -15,5 +31,21 @@ class CfgWorlds { ACE_TempNight[] = {4, 4, 6, 8, 13, 17, 20, 20, 16, 12, 8, 6}; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Limnos,Greece ACE_Humidity[] = {78, 77, 78, 74, 71, 60, 59, 61, 65, 72, 79, 80}; + // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece + ACE_WindSpeedMax[] = {{8.8, 5.5}, {8.8, 5}, {8.6, 4.8}, {7.6, 3.4}, {7.0, 3.0}, {7.1, 3.0}, {7.5, 3.1}, {8.0, 3.2}, {7.6, 3.5}, {7.8, 4.6}, {7.9, 5.0}, {8.2, 5.5}}; + ACE_WindSpeedMean[] = {4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0}; + ACE_WindSpeedMin[] = {{0.2, 5.0}, {0.1, 5.0}, {0.2, 4.3}, {0.0, 3.0}, {0.0, 2.1}, {0.0, 2.0}, {0.1, 3.1}, {0.3, 3.1}, {0.0, 3.6}, {0.0, 4.2}, {0.1, 5.0}, {0.2, 5.5}}; + ACE_WindDirectionProbabilities[] = {{0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02}, // January + {0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02}, // February + {0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03}, // March + {0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04}, // April + {0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05}, // May + {0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08}, // June + {0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09}, // July + {0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08}, // August + {0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05}, // September + {0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03}, // October + {0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02}, // November + {0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02}};// December }; -}; +}; \ No newline at end of file diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index e40a061aafc..59a83b2a855 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +call FUNC(getMapData); + // Rain variables GVAR(enableRain) = true; GVAR(rain_next_period) = -1; @@ -13,23 +15,7 @@ GVAR(rain_current_range) = -1+(random 2); GVAR(overcast_multiplier) = 1; // Wind Variables -ACE_wind = [0, 0, 0]; -GVAR(wind_initial_dir) = (random 360); -GVAR(wind_initial_speed) = (overcast*5)+(random (overcast*5)) max 1; -GVAR(wind_mean_speed) = GVAR(wind_initial_speed); -GVAR(wind_mean_dir) = GVAR(wind_initial_dir); -GVAR(wind_current_speed) = GVAR(wind_initial_speed); -GVAR(wind_current_dir) = GVAR(wind_initial_dir); -GVAR(wind_current_range_speed) = -1+(random 2); -GVAR(wind_current_range_dir) = -1+(random 2); -GVAR(wind_next_period) = -1; //ceil((2+random(5))/(GVAR(overcast_multiplier)/10)); -GVAR(wind_next_major_period) = -1; -GVAR(wind_period_count) = 0; -GVAR(wind_major_period_count) = 0; -GVAR(wind_total_time) = 0; -GVAR(wind_period_start_time) = time; - -call FUNC(getMapData); +call FUNC(initWind); "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index ee05983a697..1d6b12ee607 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -8,6 +8,7 @@ PREP(calculateBarometricPressure); PREP(displayWindInfo); PREP(getMapData); PREP(getWind); +PREP(initWind); PREP(serverController); PREP(updateHumidity); PREP(updateRain); diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index cb0a961c21b..2cfcb34a3f5 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -40,6 +40,11 @@ if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay")) exitWith GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay"); GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempNight"); GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_Humidity"); + + GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); + GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); + GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); + GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); }; // Check if the map is among the most popular @@ -113,3 +118,20 @@ GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; GVAR(currentTemperature) = 20; GVAR(currentHumidity) = 0.5; + +// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece +GVAR(WindSpeedMax) = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; +GVAR(WindSpeedMean) = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; +GVAR(WindSpeedMin) = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; +GVAR(WindDirectionProbabilities) = [[0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January + [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February + [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March + [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April + [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May + [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June + [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July + [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August + [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September + [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October + [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November + [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02]];// December \ No newline at end of file diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 5b0f1bfd791..c0770b61919 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -11,64 +11,25 @@ */ #include "script_component.hpp" -// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece -_AB_Wind_Speed_Max = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; -_AB_Wind_Speed_Mean = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; -_AB_Wind_Speed_Min = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; -_AB_Wind_Direction_Probabilities = [[0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January - [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February - [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March - [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April - [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May - [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June - [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July - [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August - [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September - [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October - [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November - [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02]];// December - -_PI = 3.14159265; -_c1 = 0.2 + random 0.2; -_c2 = 0.3 + random 0.2; -_c3 = 0.5 + random 0.2; -_c4 = 0.7 + random 0.2; +if (isNil "ACE_WIND_PARAMS") exitWith { [0, 0, 0] }; -_month = date select 1; -_windDirectionProbabilities = _AB_Wind_Direction_Probabilities select (_month - 1); -while {isNil QGVAR(windDirectionReference)} do { - _random = random 1; - for "_i" from 0 to 7 do { - if (_random < (_windDirectionProbabilities select _i)) exitWith { - GVAR(windDirectionReference) = 45 * _i; - }; - }; - GVAR(windDirectionReference) = GVAR(windDirectionReference) + (random 22.5) - (random 22.5); - GVAR(windDirectionVariance) = (random 10) - (random 10); -}; +private ["_period", "_periodPosition", "_x", "_ratio", "_windSpeed"]; -if (isNil QGVAR(minWindSpeed) || isNil QGVAR(maxWindSpeed)) then { - GVAR(minWindSpeed) = _AB_Wind_Speed_Min select (_month - 1); - GVAR(minWindSpeed) = (GVAR(minWindSpeed) select 0) + (random (GVAR(minWindSpeed) select 1)) - (random (GVAR(minWindSpeed) select 1)); - GVAR(minWindSpeed) = 0 max GVAR(minWindSpeed); - GVAR(maxWindSpeed) = _AB_Wind_Speed_Max select (_month - 1); - GVAR(maxWindSpeed) = (GVAR(maxWindSpeed) select 0) + (random (GVAR(maxWindSpeed) select 1)) - (random (GVAR(maxWindSpeed) select 1)); - GVAR(maxWindSpeed) = 0 max GVAR(maxWindSpeed); -}; +EXPLODE_8_PVT(ACE_WIND_PARAMS,_windDirection,_min_wind_speed,_max_wind_speed,_c1,_c2,_c3,_c4,_period); -if ((random 30) < 1) then { - GVAR(windDirectionVariance) = (random 10) - (random 10); -}; -_windDirection = GVAR(windDirectionReference) + GVAR(windDirectionVariance); +_periodPosition = (time - GVAR(wind_period_start_time)) min _period; +_x = _periodPosition * 57.29577958; // time * (180 / PI) +_ratio = 0.5 + (_c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (2 * (_c1 + _c2 + _c3 + _c4)); +_windSpeed = _min_wind_speed + (_max_wind_speed - _min_wind_speed) * _ratio; -_x = time * 180 / _PI; -_ratio = 0 max ((1 + _c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (1 + _c1 + _c2 + _c3 + _c4)); -_windSpeed = GVAR(minWindSpeed) + (GVAR(maxWindSpeed) - GVAR(minWindSpeed)) * _ratio; +//GVAR(wind_speed_debug_output) pushBack _windspeed; +//copyToClipboard Str(GVAR(wind_speed_debug_output)); systemChat " "; -systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(GVAR(minWindSpeed) * 10) / 10, Round(_windSpeed * 10) / 10, Round(GVAR(maxWindSpeed) * 10) / 10]; -systemChat format["(Reference/Current/Variance):(%1/%2/%3)", Round(GVAR(windDirectionReference)), Round(_windDirection), Round(GVAR(windDirectionVariance))]; -systemChat " "; +systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(_min_wind_speed * 10) / 10, Round(_windSpeed * 10) / 10, Round(_max_wind_speed * 10) / 10]; +systemChat format["Direction: %1", Round(_windDirection)]; +systemChat format["(Period/PeriodPosition) : (%1/%2)", Round(_period), Round(_periodPosition)]; +systemChat format["Ratio: %1", _ratio]; systemChat " "; [-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf new file mode 100644 index 00000000000..f0db616c043 --- /dev/null +++ b/addons/weather/functions/fnc_initWind.sqf @@ -0,0 +1,48 @@ +/* + * Author: Ruthberg + * + * Inits the wind variables on mission start + * + * Argument: + * None + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_j", "_i", "_month", "_windDirectionProbabilities"]; +_month = date select 1; +_windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); + +ACE_wind = [0, 0, 0]; + +GVAR(wind_direction_reference) = random 360; +for "_j" from 0 to 10 do { + _random = random 1; + for "_i" from 0 to 7 do { + if (_random < (_windDirectionProbabilities select _i)) exitWith { + GVAR(wind_direction_reference) = 45 * _i; + }; + }; + if (_i < 7) exitWith {}; +}; +GVAR(wind_mean_dir) = GVAR(wind_direction_reference); +GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); + +GVAR(min_wind_speed) = GVAR(WindSpeedMin) select (_month - 1); +GVAR(min_wind_speed) = (GVAR(min_wind_speed) select 0) + (random (GVAR(min_wind_speed) select 1)) - (random (GVAR(min_wind_speed) select 1)); +GVAR(min_wind_speed) = 0 max GVAR(min_wind_speed); +GVAR(max_wind_speed) = GVAR(WindSpeedMax) select (_month - 1); +GVAR(max_wind_speed) = (GVAR(max_wind_speed) select 0) + (random (GVAR(max_wind_speed) select 1)) - (random (GVAR(max_wind_speed) select 1)); +GVAR(max_wind_speed) = 0 max GVAR(max_wind_speed); + +GVAR(c1) = 0.1 + random 0.1; +GVAR(c2) = 0.2 + random 0.1; +GVAR(c3) = 0.5 + random 0.2; +GVAR(c4) = 0.7 + random 0.2; + +GVAR(wind_period_count) = 0; +GVAR(wind_next_period) = -1; + +GVAR(wind_speed_debug_output) = []; diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index d7dff0eb706..878f0bc2419 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -1,7 +1,7 @@ /* - * Author: ACE2 Team, esteldunedain + * Author: ACE2 Team, esteldunedain, ruthberg * - * Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients + * Calculate the wind and rain evolution on the server. Broadcasts the current and next values to the clients * * Argument: * None @@ -10,7 +10,8 @@ * None */ #include "script_component.hpp" -private ["_gustCount","_gustDir","_gustSpeed","_gustTime","_gusts","_i","_lastRain","_maxInterval","_rainOverCast","_startDir","_startSpeed","_time","_timeTillGust","_transitionTime"]; + +private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windDirection", "_time", "_c1", "_c2", "_c3", "_c4"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { @@ -44,49 +45,29 @@ if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { // Wind simulation if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { - _startDir = GVAR(wind_current_dir); - _startSpeed = GVAR(wind_current_speed); - GVAR(wind_current_dir) = (GVAR(wind_current_dir)+(((GVAR(wind_current_dir)))*((overcast*(GVAR(overcast_multiplier)))/8)*GVAR(wind_current_range_dir))); - - GVAR(wind_current_speed) = (GVAR(wind_current_speed)+(((GVAR(wind_current_speed)))*(overcast*(GVAR(overcast_multiplier))/12)*GVAR(wind_current_range_speed))); - GVAR(wind_current_speed) = GVAR(wind_current_speed) max 0.01; - - if(GVAR(wind_current_dir) < 0) then { - GVAR(wind_current_dir) = GVAR(wind_current_dir)+360; - }; - GVAR(wind_current_dir) = GVAR(wind_current_dir) % 360; - - GVAR(wind_current_range_speed) = (-1)+(random 2); - - GVAR(wind_current_range_dir) = (-1)+(random 2); - - GVAR(wind_next_period) = ceil((2+random(5))/(GVAR(overcast_multiplier))); + + GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); GVAR(wind_period_count) = 0; - - _gustCount = floor(random(GVAR(wind_next_period)*(overcast*((GVAR(overcast_multiplier)^3))))); - - _time = GVAR(wind_next_period)*60; - _gusts = []; - if(_gustCount > 0) then { - _maxInterval = _time/_gustCount; - for "_i" from 0 to _gustCount-1 do { - _gustTime = (random (3 min _maxInterval)); - _timeTillGust = (_maxInterval*_i)+(random (_maxInterval - _gustTime)); - _gustSpeed = (random 1); - _gustDir = (GVAR(wind_current_dir)+(GVAR(wind_current_dir)*(-1+(random 2))))*(overcast*(GVAR(overcast_multiplier))); - _gusts set[(count _gusts), [_timeTillGust, _gustTime, _gustSpeed, _gustDir]]; - }; - }; - - GVAR(wind_total_time) = GVAR(wind_total_time) + GVAR(wind_next_period); - - ACE_WIND_PARAMS = [_startDir, - GVAR(wind_current_dir), - _startSpeed, - GVAR(wind_current_speed), - _time, - _gusts]; - + + _windDirectionVariance = (90 - (random 180)) * overcast; + _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; + + _c1 = (0.1 + random 0.1) * overcast; + _c2 = (0.2 + random 0.1) * overcast; + _c3 = (0.5 + random 0.2); + _c4 = (0.7 + random 0.2); + + _time = GVAR(wind_next_period) * 60; + + ACE_WIND_PARAMS = [_windDirection, + GVAR(min_wind_speed), + GVAR(max_wind_speed), + _c1, + _c2, + _c3, + _c4, + _time]; + GVAR(wind_period_start_time) = time; publicVariable "ACE_WIND_PARAMS"; }; From 30d1b1b5e5c1804ae04bae21a6df9ddee9c98038 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:20:22 +0200 Subject: [PATCH 090/276] Fixed a typo in the updateTemperature function --- addons/weather/functions/fnc_updateTemperature.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 5e342ad83d2..3a25a7bc529 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -18,5 +18,5 @@ _month = date select 1; _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; -GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * humidity - 4 * overcast; +GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * GVAR(currentHumidity) - 4 * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; From 428baefc2c9291853a32dd8614fa379cff859196 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:41:50 +0200 Subject: [PATCH 091/276] Added random temperatureShift, badWeatherShift, humidityShift --- addons/weather/XEH_postInit.sqf | 10 ++++++++++ addons/weather/functions/fnc_serverController.sqf | 2 +- addons/weather/functions/fnc_updateHumidity.sqf | 1 + addons/weather/functions/fnc_updateTemperature.sqf | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 59a83b2a855..6c287c3a8a1 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -2,6 +2,11 @@ call FUNC(getMapData); +// Randomization +GVAR(temperatureShift) = 3 - random 6; +GVAR(badWeatherShift) = (random 1) ^ 2 * 10; +GVAR(humidityShift) = (5 - random 10) / 100; + // Rain variables GVAR(enableRain) = true; GVAR(rain_next_period) = -1; @@ -24,6 +29,11 @@ call FUNC(initWind); 30 setLightnings (ACE_MISC_PARAMS select 0); 30 setRainbow (ACE_MISC_PARAMS select 1); 30 setFog (ACE_MISC_PARAMS select 2); + GVAR(temperatureShift) = (ACE_MISC_PARAMS select 3); + GVAR(badWeatherShift) = (ACE_MISC_PARAMS select 4); + GVAR(humidityShift) = (ACE_MISC_PARAMS select 5); + call FUNC(updateTemperature); + call FUNC(updateHumidity); }; }; diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 878f0bc2419..cc96ccdf41c 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -73,7 +73,7 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { }; // Sync misc. parameters -ACE_MISC_PARAMS = [lightnings, rainbow, fogParams]; +ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; publicVariable "ACE_MISC_PARAMS"; GVAR(rain_period_count) = GVAR(rain_period_count) + 1; diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index e3ba7a02248..07edec18548 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -23,6 +23,7 @@ if (rain > 0 && overcast > 0.7) then { _pS1 = 6.112 * exp((17.62 * _avgTemperature) / (243.12 + _avgTemperature)); _PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature))); GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2; + GVAR(currentHumidity) = GVAR(currentHumidity) + GVAR(humidityShift); }; GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1; diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 3a25a7bc529..d66a9b28f48 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -18,5 +18,5 @@ _month = date select 1; _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440)); GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; -GVAR(currentTemperature) = GVAR(currentTemperature) - 2 * GVAR(currentHumidity) - 4 * overcast; +GVAR(currentTemperature) = GVAR(currentTemperature) + GVAR(temperatureShift) - GVAR(badWeatherShift) * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; From 1db9f055e26dabffa250d1b1966b286d575d8616 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:54:47 +0200 Subject: [PATCH 092/276] Removed debug output --- addons/weather/functions/fnc_getWind.sqf | 4 ++-- addons/weather/functions/fnc_updateWind.sqf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index c0770b61919..7ce9d767229 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -24,12 +24,12 @@ _windSpeed = _min_wind_speed + (_max_wind_speed - _min_wind_speed) * _ratio; //GVAR(wind_speed_debug_output) pushBack _windspeed; //copyToClipboard Str(GVAR(wind_speed_debug_output)); - +/* systemChat " "; systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(_min_wind_speed * 10) / 10, Round(_windSpeed * 10) / 10, Round(_max_wind_speed * 10) / 10]; systemChat format["Direction: %1", Round(_windDirection)]; systemChat format["(Period/PeriodPosition) : (%1/%2)", Round(_period), Round(_periodPosition)]; systemChat format["Ratio: %1", _ratio]; systemChat " "; - +*/ [-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index 7c79da00696..e5a52348a86 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -18,4 +18,4 @@ setWind [ACE_wind select 0, ACE_wind select 1, true]; // Set waves: 0 when no wind, 1 when wind >= 16 m/s 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); -hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; +//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; From d7f67970a41a160ba7df79f3ad7c86a4fa0041da Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 20:55:04 +0200 Subject: [PATCH 093/276] Fixed a bug in the wind direction init code --- addons/weather/functions/fnc_initWind.sqf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index f0db616c043..555ec928f49 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -11,21 +11,23 @@ */ #include "script_component.hpp" -private ["_j", "_i", "_month", "_windDirectionProbabilities"]; +private ["_j", "_i", "_directionFound", "_month", "_windDirectionProbabilities"]; _month = date select 1; _windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); ACE_wind = [0, 0, 0]; GVAR(wind_direction_reference) = random 360; +_directionFound = false; for "_j" from 0 to 10 do { _random = random 1; for "_i" from 0 to 7 do { if (_random < (_windDirectionProbabilities select _i)) exitWith { + _directionFound = true; GVAR(wind_direction_reference) = 45 * _i; }; }; - if (_i < 7) exitWith {}; + if (_directionFound) exitWith {}; }; GVAR(wind_mean_dir) = GVAR(wind_direction_reference); GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); From 08203b26c76918917d68f7720de4000b773729bf Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 11:58:07 -0700 Subject: [PATCH 094/276] Illuminate map for gunner of helicopters. Fixes #558 --- addons/map/functions/fnc_determineMapLight.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map/functions/fnc_determineMapLight.sqf b/addons/map/functions/fnc_determineMapLight.sqf index a5168bd8a19..f1fffcf248c 100644 --- a/addons/map/functions/fnc_determineMapLight.sqf +++ b/addons/map/functions/fnc_determineMapLight.sqf @@ -72,7 +72,7 @@ _vehicle = vehicle _unit; // Do not obscure the map if the player is on a enclosed vehicle (assume internal illumination) if (_vehicle != _unit) then { // Player is in a vehicle - if (isTurnedOut _unit && {_vehicle isKindOf "Tank" || {_vehicle isKindOf "Wheeled_APC"}}) then { + if (isTurnedOut _unit && { _vehicle isKindOf "Tank" || { _vehicle isKindOf "Helicopter" && { (gunner _vehicle) == _unit } } || {_vehicle isKindOf "Wheeled_APC"}}) then { _isEnclosed = true; }; }; From b2f978da3ca6005bf47a7eea4655ad6325cfc0cc Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 12:01:30 -0700 Subject: [PATCH 095/276] Added unstabalized optic mode to comanche for following the chopper. Is the first optic, all other zoom levels are stabalized. Fixes #556 --- addons/aircraft/Heli_Attack_01_base_F.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 22f2da3833e..14ca7ef7cd1 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -891,6 +891,25 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { class OpticsIn { + class WideUnstabalized + { + opticsDisplayName = "WU"; + 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,0,0,1}; + directionStabilized = 0; + horizontallyStabilized = 1; + gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F"; + }; class Wide { opticsDisplayName = "W"; From 0ab25a28667b0c0258807a3cde5e921603ccff3a Mon Sep 17 00:00:00 2001 From: Glowbal Date: Tue, 21 Apr 2015 21:41:00 +0200 Subject: [PATCH 096/276] fixed #659 --- addons/dragging/functions/fnc_canCarry.sqf | 2 +- addons/dragging/functions/fnc_canDrag.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/dragging/functions/fnc_canCarry.sqf b/addons/dragging/functions/fnc_canCarry.sqf index 4067b366d6d..0fc5c074d6f 100644 --- a/addons/dragging/functions/fnc_canCarry.sqf +++ b/addons/dragging/functions/fnc_canCarry.sqf @@ -22,4 +22,4 @@ if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false}; // a static weapon has to be empty for dragging if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false}; -alive _target && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLeftLeg") + (_target getHitPointDamage "HitRightLeg") > 0.4})} +alive _target && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})} diff --git a/addons/dragging/functions/fnc_canDrag.sqf b/addons/dragging/functions/fnc_canDrag.sqf index dc2d64168bb..92744553fdc 100644 --- a/addons/dragging/functions/fnc_canDrag.sqf +++ b/addons/dragging/functions/fnc_canDrag.sqf @@ -22,4 +22,4 @@ if !([_unit, _target, []] call EFUNC(common,canInteractWith)) exitWith {false}; // a static weapon has to be empty for dragging if ((typeOf _target) isKindOf "StaticWeapon" && {count crew _target > 0}) exitWith {false}; -alive _target && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLeftLeg") + (_target getHitPointDamage "HitRightLeg") > 0.4})}; \ No newline at end of file +alive _target && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getvariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})}; \ No newline at end of file From d8d658602f2e3929dfcfc5c8771c2959f003ddef Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 12:50:42 -0700 Subject: [PATCH 097/276] Apply to all aircraft gunner and pilot --- addons/map/functions/fnc_determineMapLight.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/map/functions/fnc_determineMapLight.sqf b/addons/map/functions/fnc_determineMapLight.sqf index f1fffcf248c..441dc8103a2 100644 --- a/addons/map/functions/fnc_determineMapLight.sqf +++ b/addons/map/functions/fnc_determineMapLight.sqf @@ -72,7 +72,7 @@ _vehicle = vehicle _unit; // Do not obscure the map if the player is on a enclosed vehicle (assume internal illumination) if (_vehicle != _unit) then { // Player is in a vehicle - if (isTurnedOut _unit && { _vehicle isKindOf "Tank" || { _vehicle isKindOf "Helicopter" && { (gunner _vehicle) == _unit } } || {_vehicle isKindOf "Wheeled_APC"}}) then { + if (isTurnedOut _unit && { _vehicle isKindOf "Tank" || { ( _vehicle isKindOf "Helicopter" || _vehicle isKindOf "Plane" ) && { (driver _vehicle) == _unit || { (gunner _vehicle) == _unit } } } || {_vehicle isKindOf "Wheeled_APC"}}) then { _isEnclosed = true; }; }; From a886afb7d0502b96e9c41989d5ae3da55a6b4623 Mon Sep 17 00:00:00 2001 From: ulteq Date: Tue, 21 Apr 2015 23:26:38 +0200 Subject: [PATCH 098/276] Added a model for the ACE_Box_Ammo --- addons/ballistics/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index 4ea9fc87a2b..7ad864a1e44 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -164,7 +164,7 @@ class CfgVehicles { scope = 2; accuracy = 1000; displayName = "[ACE] Ammo Supply Crate"; - // TODO: model = "..."; + model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F"; author = "$STR_ACE_Common_ACETeam"; class TransportMagazines { MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4); From 1bfb13abacb0a11c42df73d75c8118ba49213ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Badano?= Date: Tue, 21 Apr 2015 19:07:42 -0300 Subject: [PATCH 099/276] Revert "remove author from items inheriting ACE_ItemCore" --- addons/attach/CfgWeapons.hpp | 1 + addons/common/CfgWeapons.hpp | 3 +-- addons/explosives/CfgVehicles.hpp | 4 ++-- addons/logistics_wirecutter/CfgWeapons.hpp | 1 + addons/microdagr/CfgWeapons.hpp | 1 + addons/missileguidance/CfgVehicles.hpp | 2 +- addons/overheating/CfgWeapons.hpp | 1 + addons/vehiclelock/CfgWeapons.hpp | 1 + 8 files changed, 9 insertions(+), 5 deletions(-) diff --git a/addons/attach/CfgWeapons.hpp b/addons/attach/CfgWeapons.hpp index d2df9487186..9734ceb273d 100644 --- a/addons/attach/CfgWeapons.hpp +++ b/addons/attach/CfgWeapons.hpp @@ -5,6 +5,7 @@ class CfgWeapons { class ACE_IR_Strobe_Item: ACE_ItemCore { ACE_attachable = "ACE_IR_Strobe_Effect"; + author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_IrStrobe_Name"; descriptionShort = "$STR_ACE_IrStrobe_Description"; diff --git a/addons/common/CfgWeapons.hpp b/addons/common/CfgWeapons.hpp index 3e40f360feb..cf8c06798e5 100644 --- a/addons/common/CfgWeapons.hpp +++ b/addons/common/CfgWeapons.hpp @@ -2,7 +2,6 @@ class CfgWeapons { class ItemCore; class ACE_ItemCore: ItemCore { - author = "$STR_ACE_Common_ACETeam"; type = 4096;//4; detectRange = -1; simulation = "ItemMineDetector"; @@ -14,7 +13,6 @@ class CfgWeapons { }; class ACE_FakePrimaryWeapon: Rifle_Base_F { - author = "$STR_ACE_Common_ACETeam"; scope = 2; scopeCurator = 1; @@ -32,6 +30,7 @@ class CfgWeapons { class InventoryItem_Base_F; class ACE_Banana: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_Common_bananaDisplayName"; descriptionShort = "$STR_ACE_Common_bananaDescr"; diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 5aa62992fcf..30e1ff151d9 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -50,7 +50,7 @@ class CfgVehicles { class Items_base_F; class ACE_DefuseObject: Items_base_F { XEH_ENABLED; - author = "$STR_ACE_Common_ACETeam"; + author = "ACE"; _generalMacro = "ACE_DefuseObject"; displayName = "ACE Defuse Helper"; mapSize = 0.2; @@ -80,7 +80,7 @@ class CfgVehicles { }; class ACE_Explosives_Place: Items_base_F { XEH_ENABLED; - author = "$STR_ACE_Common_ACETeam"; + author = "ACE"; _generalMacro = "ACE_Explosives_Place"; displayName = "Multi-meter"; mapSize = 0.2; diff --git a/addons/logistics_wirecutter/CfgWeapons.hpp b/addons/logistics_wirecutter/CfgWeapons.hpp index 5cb2db02c2e..648bc3a3f80 100644 --- a/addons/logistics_wirecutter/CfgWeapons.hpp +++ b/addons/logistics_wirecutter/CfgWeapons.hpp @@ -3,6 +3,7 @@ class CfgWeapons { class ACE_ItemCore; class ACE_wirecutter: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; displayName = "$STR_ACE_logistics_wirecutter_wirecutterName"; descriptionShort = "$STR_ACE_logistics_wirecutter_wirecutterDescription"; model = "\A3\weapons_F\ammo\mag_univ.p3d"; diff --git a/addons/microdagr/CfgWeapons.hpp b/addons/microdagr/CfgWeapons.hpp index bf4fc95b5c7..73615ea6b68 100644 --- a/addons/microdagr/CfgWeapons.hpp +++ b/addons/microdagr/CfgWeapons.hpp @@ -3,6 +3,7 @@ class CfgWeapons { class InventoryItem_Base_F; class ACE_microDAGR: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; scope = 2; displayName = "$STR_ACE_microdagr_itemName"; descriptionShort = "$STR_ACE_microdagr_itemDescription"; diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index bbb17682556..301795b8d7a 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -20,7 +20,7 @@ class CfgVehicles { class ACE_Comanche_Test : B_Heli_Attack_01_F { displayName = "ACE_Comanche_Test"; - author = "$STR_ACE_Common_ACETeam"; + author = "ACE Team"; class Library { libTextDesc = "ACE_Comanche_Test"; }; diff --git a/addons/overheating/CfgWeapons.hpp b/addons/overheating/CfgWeapons.hpp index 580564e864f..12ec43024fc 100644 --- a/addons/overheating/CfgWeapons.hpp +++ b/addons/overheating/CfgWeapons.hpp @@ -5,6 +5,7 @@ class CfgWeapons { class ACE_SpareBarrel: ACE_ItemCore { displayname = "$STR_ACE_Overheating_SpareBarrelName"; descriptionshort = "$STR_ACE_Overheating_SpareBarrelDescription"; + //model = ""; picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); scope = 2; class ItemInfo: InventoryItem_Base_F { diff --git a/addons/vehiclelock/CfgWeapons.hpp b/addons/vehiclelock/CfgWeapons.hpp index f3d1422a84d..4b20de15d70 100644 --- a/addons/vehiclelock/CfgWeapons.hpp +++ b/addons/vehiclelock/CfgWeapons.hpp @@ -3,6 +3,7 @@ class CfgWeapons { class ACE_ItemCore; class ACE_key_master: ACE_ItemCore { + author = "$STR_ACE_Common_ACETeam"; displayName = "Vehicle Key: Master"; descriptionShort = "$STR_ACE_Vehicle_Item_Master_Description"; model = "\A3\weapons_F\ammo\mag_univ.p3d"; From 485fd7078f4c360f14cd7c09675bb28eb75096ea Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Wed, 22 Apr 2015 00:22:44 +0200 Subject: [PATCH 100/276] Update stringtable.xml --- addons/magazinerepack/stringtable.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index ca423317e43..9ea10924ac9 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -67,7 +67,7 @@ %1 volle(s) Magazin(e) und %2 übrig gebliebene Patrone(n) %1 cargador(es) completo(s) y %2 bala(s) extra(s) %1 chargeur(s) plein(s) et %2 cartouche(s) en rab - Pełnych magazynków: %1.<br />Dodatkowych naboi: %2. + Pełnych magazynków: %1.<br/>Dodatkowych naboi: %2. %1 plný zásobník(y) a %2 munice navíc %1 caricatore/i pieno e %2 munizioni extra %1 carregador(es) cheio(s) e %2 disparo(s) a mais @@ -103,9 +103,9 @@ %1 Total y %2 Parcial %1 полных и %2 неполных %1 plný a %2 částečně - Pełnych: %1.<br />Częściowo pełnych: %2. + Pełnych: %1.<br/>Częściowo pełnych: %2. %1 teljes és %2 részleges %1 pieno e %2 parziale - \ No newline at end of file + From 1facca2ba90eb65495deded8c9b95c84e2dcfda8 Mon Sep 17 00:00:00 2001 From: commy2 Date: Wed, 22 Apr 2015 00:24:54 +0200 Subject: [PATCH 101/276] fix: missing authors on flares, remove inert duplicate of handgrenade from zeus --- addons/grenades/CfgMagazines.hpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/grenades/CfgMagazines.hpp b/addons/grenades/CfgMagazines.hpp index 968b8ed141b..23eb4cb7596 100644 --- a/addons/grenades/CfgMagazines.hpp +++ b/addons/grenades/CfgMagazines.hpp @@ -1,7 +1,7 @@ class CfgMagazines { class HandGrenade; class ACE_HandFlare_Base: HandGrenade { - author = "$STR_ACE_Common_ACETeam"; + scope = 1; value = 2; nameSoundWeapon = "smokeshell"; nameSound = "smokeshell"; @@ -9,6 +9,8 @@ class CfgMagazines { initSpeed = 22; }; class ACE_HandFlare_White: ACE_HandFlare_Base { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; ammo = "ACE_F_Hand_White"; displayname = "$STR_ACE_Grenades_M127A1_White_Name"; descriptionshort = "$STR_ACE_Grenades_M127A1_White_Description"; @@ -17,6 +19,8 @@ class CfgMagazines { picture = "\A3\Weapons_F\Data\UI\gear_flare_white_ca.paa"; }; class ACE_HandFlare_Red: ACE_HandFlare_Base { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; ammo = "ACE_F_Hand_Red"; displayname = "$STR_ACE_Grenades_M127A1_Red_Name"; descriptionshort = "$STR_ACE_Grenades_M127A1_Red_Description"; @@ -25,6 +29,8 @@ class CfgMagazines { picture = "\A3\Weapons_F\Data\UI\gear_flare_red_ca.paa"; }; class ACE_HandFlare_Green: ACE_HandFlare_Base { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; ammo = "ACE_F_Hand_Green"; displayname = "$STR_ACE_Grenades_M127A1_Green_Name"; descriptionshort = "$STR_ACE_Grenades_M127A1_Green_Description"; @@ -33,6 +39,8 @@ class CfgMagazines { picture = "\A3\Weapons_F\Data\UI\gear_flare_green_ca.paa"; }; class ACE_HandFlare_Yellow: ACE_HandFlare_Base { + author = "$STR_ACE_Common_ACETeam"; + scope = 2; ammo = "ACE_F_Hand_Yellow"; displayname = "$STR_ACE_Grenades_M127A1_Yellow_Name"; descriptionshort = "$STR_ACE_Grenades_M127A1_Yellow_Description"; @@ -41,8 +49,8 @@ class CfgMagazines { picture = "\A3\Weapons_F\Data\UI\gear_flare_yellow_ca.paa"; }; class ACE_M84: HandGrenade { - ammo = "ACE_G_M84"; author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_G_M84"; displayname = "$STR_ACE_Grenades_M84_Name"; descriptionshort = "$STR_ACE_Grenades_M84_Description"; displayNameShort = "M84"; From 93bcf7e9a16ee82a2e5df76ddf3cc9896a8aea89 Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 16:49:30 -0700 Subject: [PATCH 102/276] Added versioning to build process and automated version/git integration. --- extensions/CMakeLists.txt | 28 +++++++++++ .../AdvancedBallistics.cpp | 4 +- extensions/advanced_ballistics/CMakeLists.txt | 2 +- extensions/breakLine/CMakeLists.txt | 2 +- extensions/breakLine/ace_breakLine.cpp | 4 +- extensions/common/ace_common.h | 2 +- extensions/common/ace_version.hpp.in | 4 ++ extensions/common/ace_version_win32.rc.in | 47 +++++++++++++++++++ extensions/fcs/CMakeLists.txt | 2 +- extensions/fcs/ace_fcs.cpp | 4 +- 10 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 extensions/common/ace_version.hpp.in create mode 100644 extensions/common/ace_version_win32.rc.in diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index 60287715548..038bb71d5ca 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -25,6 +25,34 @@ file(GLOB ACE_COMMON_SOURCES common/*.h common/*.hpp common/*.c common/*.cpp) add_library(ace_common STATIC ${ACE_COMMON_SOURCES}) include_directories(AFTER "common") +string(TIMESTAMP ACE_BUILDSTAMP "%Y-%m-%dT%H:%M:%SZ") +set(ACE_VERSION_MAJOR 3) +set(ACE_VERSION_MINOR 0) +set(ACE_VERSION_REVISION 1) +EXECUTE_PROCESS(COMMAND git rev-parse --verify HEAD + OUTPUT_VARIABLE T_ACE_VERSION_BUILD + OUTPUT_STRIP_TRAILING_WHITESPACE +) +string(SUBSTRING ${T_ACE_VERSION_BUILD} 0 7 ACE_VERSION_BUILD ) + +message("Building for: " ${ACE_VERSION_MAJOR}.${ACE_VERSION_MINOR}.${ACE_VERSION_REVISION}-${ACE_VERSION_BUILD}) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version.hpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version.hpp" + @ONLY) + +if(MSVC) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/common/ace_version_win32.rc.in" + "${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc" + @ONLY) + set(GLOBAL_RC ${CMAKE_CURRENT_BINARY_DIR}/common/ace_version_win32.rc) +endif() + +include_directories(AFTER ${CMAKE_CURRENT_BINARY_DIR}/common) +set(GLOBAL_SOURCES ${GLOBAL_RC}) + # Add extensions to build here add_subdirectory(fcs) add_subdirectory(breakLine) diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 2851d6576bd..4bc9a289334 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -19,8 +19,6 @@ #define STD_AIR_DENSITY_ICAO 1.22498 #define STD_AIR_DENSITY_ASM 1.20885 -static char version[] = "1.0"; - struct Bullet { double airFriction; double caliber; @@ -242,7 +240,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) { if (!strcmp(function, "version")) { - int n = sprintf_s(output, outputSize, "%s", version); + int n = sprintf_s(output, outputSize, "%s", ACE_FULL_VERSION_STR); return; } diff --git a/extensions/advanced_ballistics/CMakeLists.txt b/extensions/advanced_ballistics/CMakeLists.txt index f579339a04b..19b9fc41d96 100644 --- a/extensions/advanced_ballistics/CMakeLists.txt +++ b/extensions/advanced_ballistics/CMakeLists.txt @@ -1,7 +1,7 @@ set(ACE_EXTENSION_NAME "ace_advanced_ballistics") file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) add_dependencies(${ACE_EXTENSION_NAME} ace_common) SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") diff --git a/extensions/breakLine/CMakeLists.txt b/extensions/breakLine/CMakeLists.txt index 8981ec487e8..d34ae1b58ec 100644 --- a/extensions/breakLine/CMakeLists.txt +++ b/extensions/breakLine/CMakeLists.txt @@ -1,7 +1,7 @@ set(ACE_EXTENSION_NAME "ace_breakLine") file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) add_dependencies(${ACE_EXTENSION_NAME} ace_common) SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") diff --git a/extensions/breakLine/ace_breakLine.cpp b/extensions/breakLine/ace_breakLine.cpp index fb5775b861b..f84b95053d2 100644 --- a/extensions/breakLine/ace_breakLine.cpp +++ b/extensions/breakLine/ace_breakLine.cpp @@ -19,8 +19,6 @@ #define MAXCHARACTERS 14 -static char VERSION[] = "1.0"; - extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; @@ -68,7 +66,7 @@ std::string addLineBreaks(const std::vector &words) { void __stdcall RVExtension(char *output, int outputSize, const char *function) { if (!strcmp(function, "version")) { - strncpy(output, VERSION, outputSize); + strncpy(output, ACE_FULL_VERSION_STR, outputSize); } else { strncpy(output, addLineBreaks(splitString(function)).c_str(), outputSize); output[outputSize - 1] = '\0'; diff --git a/extensions/common/ace_common.h b/extensions/common/ace_common.h index 4a8847b2093..93f7b9af8a3 100644 --- a/extensions/common/ace_common.h +++ b/extensions/common/ace_common.h @@ -1,4 +1,4 @@ #pragma once #include "targetver.h" - +#include "ace_version.hpp" diff --git a/extensions/common/ace_version.hpp.in b/extensions/common/ace_version.hpp.in new file mode 100644 index 00000000000..853648497d6 --- /dev/null +++ b/extensions/common/ace_version.hpp.in @@ -0,0 +1,4 @@ +#pragma once + +#define ACE_VERSION_STR "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@" +#define ACE_FULL_VERSION_STR "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" \ No newline at end of file diff --git a/extensions/common/ace_version_win32.rc.in b/extensions/common/ace_version_win32.rc.in new file mode 100644 index 00000000000..112f4046499 --- /dev/null +++ b/extensions/common/ace_version_win32.rc.in @@ -0,0 +1,47 @@ +#ifdef _WIN32 + + #include + + #ifndef DEBUG + #define VER_DEBUG 0 + #else + #define VER_DEBUG VS_FF_DEBUG + #endif + + VS_VERSION_INFO VERSIONINFO + FILEVERSION @ACE_VERSION_MAJOR@, @ACE_VERSION_MINOR@, @ACE_VERSION_REVISION@ + PRODUCTVERSION @ACE_VERSION_MAJOR@, @ACE_VERSION_MINOR@, @ACE_VERSION_REVISION@ + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS (VS_FF_PRIVATEBUILD|VS_FF_PRERELEASE|VER_DEBUG) + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE VFT2_UNKNOWN + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + BEGIN + VALUE "CompanyName", "ACE3 Team" + VALUE "FileDescription", "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" + VALUE "FileVersion", "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" + VALUE "ProductName", "ACE3" + VALUE "ProductVersion", "@ACE_VERSION_MAJOR@.@ACE_VERSION_MINOR@.@ACE_VERSION_REVISION@-@ACE_VERSION_BUILD@" + VALUE "Build Date", "@ACE_BUILDSTAMP@" + END + END + + BLOCK "VarFileInfo" + BEGIN + /* The following line should only be modified for localized versions. */ + /* It consists of any number of WORD,WORD pairs, with each pair */ + /* describing a language,codepage combination supported by the file. */ + /* */ + /* For example, a file might have values "0x409,1252" indicating that it */ + /* supports English language (0x409) in the Windows ANSI codepage (1252). */ + + VALUE "Translation", 0x409, 1252 + + END + END + +#endif \ No newline at end of file diff --git a/extensions/fcs/CMakeLists.txt b/extensions/fcs/CMakeLists.txt index 2b245425662..0a4ba1b064b 100644 --- a/extensions/fcs/CMakeLists.txt +++ b/extensions/fcs/CMakeLists.txt @@ -1,7 +1,7 @@ set(ACE_EXTENSION_NAME "ace_fcs") file(GLOB SOURCES *.h *.hpp *.c *.cpp) -add_library( ${ACE_EXTENSION_NAME} SHARED ${SOURCES}) +add_library( ${ACE_EXTENSION_NAME} SHARED ${GLOBAL_SOURCES} ${SOURCES}) add_dependencies(${ACE_EXTENSION_NAME} ace_common) SET_TARGET_PROPERTIES(${ACE_EXTENSION_NAME} PROPERTIES PREFIX "") diff --git a/extensions/fcs/ace_fcs.cpp b/extensions/fcs/ace_fcs.cpp index 9ab49390582..4aada29aff3 100644 --- a/extensions/fcs/ace_fcs.cpp +++ b/extensions/fcs/ace_fcs.cpp @@ -25,8 +25,6 @@ #define PRECISION 0.1 #define RADIANS(X) (X / (180 / M_PI)) -static char version[] = "1.0"; - extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); }; @@ -104,7 +102,7 @@ double getSolution(double initSpeed, double airFriction, double angleTarget, dou void __stdcall RVExtension(char *output, int outputSize, const char *function) { if (!strcmp(function, "version")) { - strncpy(output, version, outputSize); + strncpy(output, ACE_FULL_VERSION_STR, outputSize); } else { std::vector argStrings = splitString(function); double initSpeed = std::stod(argStrings[0]); From e96ba8835102966b2db0b705a9dd033cacf18dec Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 16:50:01 -0700 Subject: [PATCH 103/276] count type correction. --- extensions/breakLine/ace_breakLine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/breakLine/ace_breakLine.cpp b/extensions/breakLine/ace_breakLine.cpp index f84b95053d2..89ea1cfd851 100644 --- a/extensions/breakLine/ace_breakLine.cpp +++ b/extensions/breakLine/ace_breakLine.cpp @@ -37,8 +37,8 @@ std::vector splitString(const std::string & input) { std::string addLineBreaks(const std::vector &words) { std::stringstream sstream; - int numChar = 0; - int i = 0; + size_t numChar = 0; + size_t i = 0; while (i < words.size()) { if (numChar == 0) { From 8aa79a579cb86e000fd1daf9172cc4af34b0ce09 Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 16:56:50 -0700 Subject: [PATCH 104/276] Extensions rebuilt with new versioning. --- ace_advanced_ballistics.dll | Bin 613888 -> 614400 bytes ace_breakLine.dll | Bin 712192 -> 712704 bytes ace_fcs.dll | Bin 787968 -> 788480 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 3349bb5b38df8a69b01736e1346a576c8ef4fcb4..8f1c62484fccd88ee868047cb0bed19e0397580d 100644 GIT binary patch delta 30660 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 F{|D?g&)5I} delta 29992 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 E18$66>;M1& diff --git a/ace_breakLine.dll b/ace_breakLine.dll index 428df80092994ec765c2ee73530a7c9e4c7a216f..a13e1a8da90ffdbde7e461068b703b9868878999 100644 GIT binary patch delta 62329 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

bCxccyoz_oVlykETzj&!pQiLwANJBPk=4 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 TuWroH*U6KzV~O%_LgN1mdk?$T diff --git a/ace_fcs.dll b/ace_fcs.dll index 9cef4549c76b8eb75bd9ad1e417e62ca58cb4bcc..71fbba7d924bed48d439068714078f3bfa864f62 100644 GIT binary patch delta 64776 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 From b384d62edda1f0791c914c482a8986eeb50289bf Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 17:02:50 -0700 Subject: [PATCH 105/276] Fixes typos in medical strings causing missing strings. --- addons/medical/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index f735de7ebf6..53c587bec06 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,12 +1,12 @@  - + Litter Simulation Detail Detale zużytych medykamentów Detalle de simulación de basura - + Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting. Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta. Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente. From b2c5e5e9f13221d410c3deb41fa4d1a3132bf49b Mon Sep 17 00:00:00 2001 From: jaynus Date: Tue, 21 Apr 2015 17:04:16 -0700 Subject: [PATCH 106/276] Remove AB verison check until versioning is complete. --- addons/advanced_ballistics/XEH_postInit.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index 41615696acc..8273859033b 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -33,6 +33,7 @@ GVAR(AtmosphericDensitySimulationEnabled) = true; GVAR(currentGrid) = 0; GVAR(INIT_MESSAGE_ENABLED) = false; +/* @TODO: Remove this until verisoning is in sync with cmake/build versioning GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version"); GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION); if (!GVAR(extensionAvailable)) exitWith { @@ -42,5 +43,5 @@ if (!GVAR(extensionAvailable)) exitWith { diag_log text "[ACE] ERROR: ace_advanced_ballistics.dll is incompatible"; }; }; - +*/ [] call FUNC(initializeTerrainExtension); From 8ec86a337fd8b87fe0974c3b15b47bd9572111ed Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 21 Apr 2015 19:35:04 -0500 Subject: [PATCH 107/276] Show Loaded Ammo for static weapons --- addons/reload/CfgActions.hpp | 1 - addons/reload/CfgEventHandlers.hpp | 1 - addons/reload/CfgVehicles.hpp | 6 +- addons/reload/XEH_postInit.sqf | 5 +- addons/reload/functions/fnc_canCheckAmmo.sqf | 7 +- addons/reload/functions/fnc_checkAmmo.sqf | 2 - addons/reload/functions/fnc_displayAmmo.sqf | 117 ++++++++++--------- 7 files changed, 70 insertions(+), 69 deletions(-) diff --git a/addons/reload/CfgActions.hpp b/addons/reload/CfgActions.hpp index bdef8adf284..a76be64ba30 100644 --- a/addons/reload/CfgActions.hpp +++ b/addons/reload/CfgActions.hpp @@ -1,4 +1,3 @@ - class CfgActions { class LoadMagazine; class LoadEmptyMagazine : LoadMagazine { diff --git a/addons/reload/CfgEventHandlers.hpp b/addons/reload/CfgEventHandlers.hpp index c93f74e0bd9..75c2280e244 100644 --- a/addons/reload/CfgEventHandlers.hpp +++ b/addons/reload/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit)); diff --git a/addons/reload/CfgVehicles.hpp b/addons/reload/CfgVehicles.hpp index 84333a1a096..b6bd212015e 100644 --- a/addons/reload/CfgVehicles.hpp +++ b/addons/reload/CfgVehicles.hpp @@ -3,13 +3,13 @@ class CfgVehicles { class CAManBase: Man { class ACE_Actions { class ACE_Weapon { - class ACE_LinkBelt { + class GVAR(LinkBelt) { displayName = "$STR_ACE_Reload_LinkBelt"; distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canLinkBelt)); statement = QUOTE([ARR_2(_player, _target)] call FUNC(startLinkingBelt)); }; - class ACE_CheckAmmo { + class GVAR(CheckAmmo) { displayName = "$STR_ACE_Reload_checkAmmo"; distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canCheckAmmo)); @@ -23,7 +23,7 @@ class CfgVehicles { class StaticWeapon: LandVehicle { class ACE_Actions { class ACE_MainActions { - class ACE_CheckAmmo { + class GVAR(CheckAmmo) { displayName = "$STR_ACE_Reload_checkAmmo"; distance = 2.0; condition = QUOTE([ARR_2(_player, _target)] call FUNC(canCheckAmmo)); diff --git a/addons/reload/XEH_postInit.sqf b/addons/reload/XEH_postInit.sqf index faefbe449d3..422ea183d35 100644 --- a/addons/reload/XEH_postInit.sqf +++ b/addons/reload/XEH_postInit.sqf @@ -7,10 +7,9 @@ if !(hasInterface) exitWith {}; ["ACE3", QGVAR(checkAmmo), localize "STR_ACE_Reload_checkAmmo", { // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, (vehicle ACE_player), ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !([ACE_player] call EFUNC(common,canUseWeapon) || - {(vehicle ACE_player) isKindOf 'StaticWeapon'}) exitWith {false}; + if !([ACE_player] call EFUNC(common,canUseWeapon) || {(vehicle ACE_player) isKindOf "StaticWeapon"}) exitWith {false}; // Statement [ACE_player] call FUNC(checkAmmo); diff --git a/addons/reload/functions/fnc_canCheckAmmo.sqf b/addons/reload/functions/fnc_canCheckAmmo.sqf index 4075e7a151a..95ac2582a27 100644 --- a/addons/reload/functions/fnc_canCheckAmmo.sqf +++ b/addons/reload/functions/fnc_canCheckAmmo.sqf @@ -7,7 +7,12 @@ * 1: Target * * Return value: - * Can link belt + * Can link belt + * + * Example: + * [player, bob] call ace_reload_fnc_canCheckAmmo + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index a1001890cd9..2499a9a8934 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -33,8 +33,6 @@ if (count _this > 1) then { if (_unit == _target) then { _unit playActionNow "Gear"; -} else { - _unit playActionNow "PutDown"; }; [FUNC(displayAmmo), [_target], 1, 0.1] call EFUNC(common,waitAndExecute); diff --git a/addons/reload/functions/fnc_displayAmmo.sqf b/addons/reload/functions/fnc_displayAmmo.sqf index 06f3a39da39..ce08fbd0620 100644 --- a/addons/reload/functions/fnc_displayAmmo.sqf +++ b/addons/reload/functions/fnc_displayAmmo.sqf @@ -14,7 +14,7 @@ EXPLODE_1_PVT(_this,_target); -private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture", "_a", "_string"]; +private ["_weapon","_muzzle","_magazine","_showNumber","_ammo","_maxRounds","_count","_text","_color","_picture","_ammoBarsStructuredText", "_a", "_loadedName", "_string"]; _weapon = currentWeapon _target; _muzzle = currentMuzzle _target; @@ -22,23 +22,23 @@ _magazine = currentMagazine _target; // currentWeapon returns "" for static weapons before they are shot once if (_target isKindOf "StaticWeapon") then { - if (_weapon == "") then { - if (count (weapons _target) == 1) then { - _weapon = (weapons _target) select 0; - _muzzle = _weapon; - }; - }; - - if (_magazine == "") then { - // Try to get magazine using magazinesAmmoFull - private ["_magazines"]; - _magazines = magazinesAmmoFull _target; - { - if (_x select 2) exitWith { - _magazine = _x select 0; + if (_weapon == "") then { + if (count (weapons _target) == 1) then { + _weapon = (weapons _target) select 0; + _muzzle = _weapon; }; - } forEach _magazines; - }; + }; + + if (_magazine == "") then { + // Try to get magazine using magazinesAmmoFull + private ["_magazines"]; + _magazines = magazinesAmmoFull _target; + { + if (_x select 2) exitWith { + _magazine = _x select 0; + }; + } forEach _magazines; + }; }; if (_magazine == "") exitWith {}; @@ -52,55 +52,56 @@ _count = 0; // not grenade launcher if (_muzzle == _weapon) then { - _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count") max 1; + _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count") max 1; - _ammo = _target ammo _weapon; - if (_maxRounds >= COUNT_BARS) then { - _count = round (COUNT_BARS * _ammo / _maxRounds); + _ammo = _target ammo _weapon; + if (_maxRounds >= COUNT_BARS) then { + _count = round (COUNT_BARS * _ammo / _maxRounds); - if (_ammo > 0) then {_count = _count max 1}; - if (_ammo < _maxRounds) then {_count = _count min (COUNT_BARS - 1)}; - } else { - _count = _ammo; - }; + if (_ammo > 0) then {_count = _count max 1}; + if (_ammo < _maxRounds) then {_count = _count min (COUNT_BARS - 1)}; + } else { + _count = _ammo; + }; -// grenade launcher + // grenade launcher } else { - _showNumber = true; + _showNumber = true; - _count = if (_magazine != "") then { - {_x == _magazine} count (magazines _target + [_magazine]) - } else { - {_x in getArray (configFile >> "CfgWeapons" >> _weapon >> _muzzle >> "Magazines")} count magazines _target - }; + _count = if (_magazine != "") then { + {_x == _magazine} count (magazines _target + [_magazine]) + } else { + {_x in getArray (configFile >> "CfgWeapons" >> _weapon >> _muzzle >> "Magazines")} count magazines _target + }; }; -_text = if (_showNumber) then { - parseText format ["%1x", _count] +_ammoBarsStructuredText = if (_showNumber) then { + parseText format ["%1x", _count] } else { - _color = [ - 2 * (1 - _ammo / _maxRounds) min 1, - 2 * _ammo / _maxRounds min 1, - 00 - ]; - - _string = ""; - for "_a" from 1 to _count do { - _string = _string + "|"; - }; - _text = [_string, _color] call EFUNC(common,stringToColoredText); - - _string = ""; - for "_a" from (_count + 1) to (_maxRounds min COUNT_BARS) do { - _string = _string + "|"; - }; - - composeText [ - _text, - [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText) - ] + _color = [((2 * (1 - _ammo / _maxRounds)) min 1), ((2 * _ammo / _maxRounds) min 1), 0]; + + _string = ""; + for "_a" from 1 to _count do { + _string = _string + "|"; + }; + _text = [_string, _color] call EFUNC(common,stringToColoredText); + + _string = ""; + for "_a" from (_count + 1) to (_maxRounds min COUNT_BARS) do { + _string = _string + "|"; + }; + + composeText [_text, [_string, [0.5, 0.5, 0.5]] call EFUNC(common,stringToColoredText)]; }; -_picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); -[_text, _picture] call EFUNC(common,displayTextPicture); +if (_target isKindOf "StaticWeapon") then { + //Vehicle mags (usualy) don't have pictures, so just show the text above ammo count + _loadedName = getText (configFile >> "CfgMagazines" >> _magazine >> "displaynameshort"); + _loadedName = parseText format ["%1", _loadedName]; + _text = composeText [_loadedName, linebreak, _ammoBarsStructuredText]; + [_text] call EFUNC(common,displayTextStructured); +} else { + _picture = getText (configFile >> "CfgMagazines" >> _magazine >> "picture"); + [_ammoBarsStructuredText, _picture] call EFUNC(common,displayTextPicture); +}; From e479557f8ac9db07e50bbf70a634b696f65eee18 Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 10:48:45 +0200 Subject: [PATCH 108/276] Some magazine Stringtable fixes --- addons/ballistics/CfgMagazines.hpp | 6 +++--- addons/ballistics/stringtable.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 9ce3ad3eb01..16f8b227fc1 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -42,9 +42,9 @@ class CfgMagazines { class ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim: 30Rnd_65x39_caseless_green_mag_Tracer { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_65x39_Caseless_green_Tracer_Dim"; - displayName = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimName"; - displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimNameShort"; - descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_mag_Tracer_DimDescription"; + displayName = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_30Rnd_65x39_caseless_green_mag_Tracer_DimDescription"; }; class 30Rnd_556x45_Stanag: CA_Magazine { diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index c75ab6339d8..b2ec7db7288 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -743,7 +743,7 @@ 6,5 мм ИК-трассирующие - 6.5mm 100Rnd Tracer IR-DIM Mag + 6.5mm 100Rnd Tracer IR-DIM Mag<br />Rounds: 100<br />Used in: MX LSW Magazynek 6,5mm 100rd Smugacz IR-DIM Chargeur 6.5mm 100Rnd Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm @@ -764,7 +764,7 @@ 6,5 мм ИК-трассирующие - 6.5mm 200Rnd Tracer IR-DIM Belt + 6.5mm 200Rnd Tracer IR-DIM Belt<br />Rounds: 200<br />Used in: Stoner 99 LMG Magazynek 6,5mm 200rd Smugacz IR-DIM Bande 6.5mm 200Cps Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm @@ -974,7 +974,7 @@ 6,5 мм Scenar - Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30 + Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30 Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30 From f8006eaac90c1d22e0545c8ee9291c77d974506e Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 11:31:11 +0200 Subject: [PATCH 109/276] Expanded the ammo database: *30-06 Springfield (.30 Cal M1 Ball 174 grain) *6.5 Creedmore (Berger .264 cal 140 grain Hybrid) *7mm Rem Mag (Berger .284 cal 180 grain Hybrid) *.243 Win (Berger .243 cal 105 grain Hybrid) --- addons/ballistics/CfgAmmo.hpp | 60 +++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 76a3970063c..02f25a6c800 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -144,6 +144,21 @@ class CfgAmmo { ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; + class ACE_65_Creedmore_Ball: B_65x39_Caseless + { + airFriction=-0.00078; + typicalSpeed=860 ; + ACE_caliber=0.264; + ACE_bulletLength=1.426; + ACE_bulletMass=140; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.317}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 830, 850, 860, 865}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; class B_762x51_Ball : BulletBase { airFriction=-0.001035; typicalSpeed=833; @@ -211,6 +226,51 @@ class CfgAmmo { ACE_muzzleVelocities[]={305, 325, 335, 340}; ACE_barrelLengths[]={16, 20, 24, 26}; }; + class ACE_30_06_M1_Ball : B_762x51_Ball { + airFriction=-0.0009; + typicalSpeed=800; + hit=10; + ACE_caliber=0.308; + ACE_bulletLength=1.21; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.494}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 785, 800, 830, 840}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { + airFriction=-0.0008; + typicalSpeed=820; + hit=8; + ACE_caliber=0.284; + ACE_bulletLength=1.529; + ACE_bulletMass=180; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.345}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={720, 780, 812, 822, 830}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class ACE_243_Winchester_Ball : B_762x51_Ball { + airFriction=-0.00095; + typicalSpeed=915; + hit=6; + ACE_caliber=0.243; + ACE_bulletLength=1.282; + ACE_bulletMass=180; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.278}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={830, 875, 900, 915, 920}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { airFriction=-0.000830; caliber=1.08; From 2ec95c2862ef768d498298649701b251853cd039 Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 11:32:16 +0200 Subject: [PATCH 110/276] Brackets --- addons/ballistics/CfgAmmo.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 02f25a6c800..3f2fdf0dede 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -129,8 +129,7 @@ class CfgAmmo { class ACE_65x39_Caseless_green_Tracer_Dim : B_65x39_Caseless_green { nvgOnly = 1; }; - class ACE_65x47_Ball_Scenar: B_65x39_Caseless - { + class ACE_65x47_Ball_Scenar: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=820 ; ACE_caliber=0.264; @@ -144,8 +143,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; - class ACE_65_Creedmore_Ball: B_65x39_Caseless - { + class ACE_65_Creedmore_Ball: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=860 ; ACE_caliber=0.264; From 1d108f42a72e473ac2e3a1bb494d29302a43a96a Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 11:53:22 +0200 Subject: [PATCH 111/276] Added a magazine for the new 6.5 Creedmor cartridge *Fixed the 65x47mm short name --- addons/ballistics/CfgAmmo.hpp | 7 ++++++- addons/ballistics/CfgMagazines.hpp | 7 +++++++ addons/ballistics/CfgVehicles.hpp | 9 +++++++++ addons/ballistics/CfgWeapons.hpp | 3 ++- addons/ballistics/stringtable.xml | 23 ++++++++++++++++++----- 5 files changed, 42 insertions(+), 7 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 3f2fdf0dede..3ccc84a7bc4 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -132,6 +132,7 @@ class CfgAmmo { class ACE_65x47_Ball_Scenar: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=820 ; + caliber=0.6; ACE_caliber=0.264; ACE_bulletLength=1.364; ACE_bulletMass=139; @@ -143,9 +144,10 @@ class CfgAmmo { ACE_muzzleVelocities[]={730, 760, 790, 820, 830}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; - class ACE_65_Creedmore_Ball: B_65x39_Caseless { + class ACE_65_Creedmor_Ball: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=860 ; + caliber=0.7; ACE_caliber=0.264; ACE_bulletLength=1.426; ACE_bulletMass=140; @@ -227,6 +229,7 @@ class CfgAmmo { class ACE_30_06_M1_Ball : B_762x51_Ball { airFriction=-0.0009; typicalSpeed=800; + caliber=1.3; hit=10; ACE_caliber=0.308; ACE_bulletLength=1.21; @@ -242,6 +245,7 @@ class CfgAmmo { class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { airFriction=-0.0008; typicalSpeed=820; + caliber=1.4; hit=8; ACE_caliber=0.284; ACE_bulletLength=1.529; @@ -257,6 +261,7 @@ class CfgAmmo { class ACE_243_Winchester_Ball : B_762x51_Ball { airFriction=-0.00095; typicalSpeed=915; + caliber=0.8; hit=6; ACE_caliber=0.243; ACE_bulletLength=1.282; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 16f8b227fc1..5e3f48c369e 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -179,6 +179,13 @@ class CfgMagazines { displayNameShort = "$STR_ACE_30Rnd_65x47_Scenar_mag_NameShort"; descriptionShort = "$STR_ACE_30Rnd_65x47_Scenar_mag_Description"; }; + class ACE_30Rnd_65_Creedmor_mag: 30Rnd_65x39_caseless_mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_65_Creedmor_Ball"; + displayName = "$STR_ACE_30Rnd_65_Creedmor_mag_Name"; + displayNameShort = "$STR_ACE_30Rnd_65_Creedmor_mag_NameShort"; + descriptionShort = "$STR_ACE_30Rnd_65_Creedmor_mag_Description"; + }; class 10Rnd_338_Mag; class ACE_10Rnd_338_300gr_HPBT_Mag: 10Rnd_338_Mag { author = "$STR_ACE_Common_ACETeam"; diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index 7ad864a1e44..b40ee12a725 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -14,6 +14,7 @@ class CfgVehicles { class Box_NATO_Wps_F: NATO_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); }; }; @@ -33,6 +34,7 @@ class CfgVehicles { class Box_NATO_Ammo_F: NATO_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); @@ -64,6 +66,7 @@ class CfgVehicles { class B_supplyCrate_F: ReammoBox_F { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); @@ -76,6 +79,7 @@ class CfgVehicles { class Box_East_Wps_F: EAST_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -85,6 +89,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1); MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -92,6 +97,7 @@ class CfgVehicles { class Box_East_Ammo_F: EAST_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -99,6 +105,7 @@ class CfgVehicles { class Box_East_Support_F: EAST_Box_Base { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; @@ -157,6 +164,7 @@ class CfgVehicles { class C_supplyCrate_F: ReammoBox_F { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); }; }; @@ -185,6 +193,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_100Rnd_65x39_caseless_mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_200Rnd_65x39_cased_Box_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 26b07303c06..e6ce5d4bfd3 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -88,7 +88,8 @@ class CfgWeapons { "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag_Tracer", "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim", - "ACE_30Rnd_65x47_Scenar_mag" + "ACE_30Rnd_65x47_Scenar_mag", + "ACE_30Rnd_65_Creedmor_mag" }; initSpeed = -1.018; ACE_barrelTwist=9; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index b2ec7db7288..2f89e12d008 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -967,11 +967,11 @@ Магазин из 30-ти 6,5x47 мм (HPBT Scenar) - 6.5mm Scenar - 6.5mm Scenar - 6.5mm Scenar - 6,5mm Scenar - 6,5 мм Scenar + 6.5mm Lapua + 6.5mm Lapua + 6.5mm Lapua + 6,5mm Lapua + 6,5 мм Lapua Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM @@ -980,6 +980,19 @@ Kaliber: 6,5x47 mm (HPBT Scenar)<br />Pociski: 30 Калибр: 6,5x47 мм (HPBT Scenar)<br />Патронов: 30 + + 6.5mm Creedmor 30Rnd Mag + + + 6.5mm CM + 6.5mm CM + 6.5mm CM + 6,5mm CM + 6,5 мм CM + + + Caliber: 6.5mm Creedmor<br />Rounds: 30<br />Used in: MXM + .338 10Rnd Mag (300gr Sierra MatchKing HPBT) .338 10 Cps (300gr Sierra MatchKing HPBT) From ac5d593271b1b37604d2dc3150460d96fbb3017c Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 12:56:07 +0200 Subject: [PATCH 112/276] Switched to an improved version of the old getWind function --- addons/weather/functions/fnc_getMapData.sqf | 50 ++++++++++--------- addons/weather/functions/fnc_getWind.sqf | 30 +++++------ addons/weather/functions/fnc_initWind.sqf | 8 +-- .../functions/fnc_serverController.sqf | 45 +++++++++++------ 4 files changed, 74 insertions(+), 59 deletions(-) diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index 2cfcb34a3f5..f2527d11578 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -35,16 +35,37 @@ if (worldName in ["Thirsk"]) then { GVAR(Latitude) = 65; GVAR(Altitude) = 0; }; if (worldName in ["lingor"]) then { GVAR(Latitude) = -4; GVAR(Altitude) = 0; }; if (worldName in ["Panthera3"]) then { GVAR(Latitude) = 46; GVAR(Altitude) = 0; }; +// Assume default wind values +// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece +GVAR(WindSpeedMax) = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; +GVAR(WindSpeedMean) = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; +GVAR(WindSpeedMin) = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; +GVAR(WindDirectionProbabilities) = [[0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January + [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February + [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March + [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April + [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May + [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June + [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July + [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August + [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September + [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October + [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November + [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02]];// December + +// Check if the wind data is defined in the map config +if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean")) then { + GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); + GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); + GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); + GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); +}; + // Check if the weather data is defined in the map config if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay")) exitWith { GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay"); GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempNight"); GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_Humidity"); - - GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); - GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); - GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); - GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); }; // Check if the map is among the most popular @@ -117,21 +138,4 @@ GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; GVAR(currentTemperature) = 20; -GVAR(currentHumidity) = 0.5; - -// Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece -GVAR(WindSpeedMax) = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; -GVAR(WindSpeedMean) = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; -GVAR(WindSpeedMin) = [[0.2, 5.0], [0.1, 5.0], [0.2, 4.3], [0.0, 3.0], [0.0, 2.1], [0.0, 2.0], [0.1, 3.1], [0.3, 3.1], [0.0, 3.6], [0.0, 4.2], [0.1, 5.0], [0.2, 5.5]]; -GVAR(WindDirectionProbabilities) = [[0.06, 0.32, 0.05, 0.04, 0.15, 0.06, 0.02, 0.02], // January - [0.08, 0.32, 0.04, 0.04, 0.18, 0.06, 0.02, 0.02], // February - [0.09, 0.30, 0.04, 0.04, 0.20, 0.06, 0.02, 0.03], // March - [0.10, 0.25, 0.03, 0.04, 0.22, 0.06, 0.02, 0.04], // April - [0.18, 0.25, 0.03, 0.04, 0.18, 0.04, 0.01, 0.05], // May - [0.25, 0.25, 0.03, 0.03, 0.15, 0.03, 0.00, 0.08], // June - [0.32, 0.30, 0.02, 0.02, 0.10, 0.01, 0.00, 0.09], // July - [0.28, 0.35, 0.02, 0.01, 0.08, 0.01, 0.00, 0.08], // August - [0.20, 0.37, 0.03, 0.01, 0.11, 0.01, 0.01, 0.05], // September - [0.10, 0.39, 0.04, 0.02, 0.15, 0.02, 0.01, 0.03], // October - [0.08, 0.38, 0.06, 0.04, 0.19, 0.03, 0.02, 0.02], // November - [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02]];// December \ No newline at end of file +GVAR(currentHumidity) = 0.5; \ No newline at end of file diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 7ce9d767229..33750b77dd3 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -13,23 +13,19 @@ if (isNil "ACE_WIND_PARAMS") exitWith { [0, 0, 0] }; -private ["_period", "_periodPosition", "_x", "_ratio", "_windSpeed"]; - -EXPLODE_8_PVT(ACE_WIND_PARAMS,_windDirection,_min_wind_speed,_max_wind_speed,_c1,_c2,_c3,_c4,_period); +EXPLODE_5_PVT(ACE_WIND_PARAMS,_dir,_dirChange,_spd,_spdChange,_period); +private ["_periodPercent", "_periodPosition"]; _periodPosition = (time - GVAR(wind_period_start_time)) min _period; -_x = _periodPosition * 57.29577958; // time * (180 / PI) -_ratio = 0.5 + (_c1 * sin(_x/1.5) + _c2 * sin(_x/3) + _c3 * sin(_x/12) + _c4 * sin(_x/18)) / (2 * (_c1 + _c2 + _c3 + _c4)); -_windSpeed = _min_wind_speed + (_max_wind_speed - _min_wind_speed) * _ratio; +_periodPercent = _periodPosition / _period; -//GVAR(wind_speed_debug_output) pushBack _windspeed; -//copyToClipboard Str(GVAR(wind_speed_debug_output)); -/* -systemChat " "; -systemChat format["(Min/Current/Max) : (%1/%2/%3)", Round(_min_wind_speed * 10) / 10, Round(_windSpeed * 10) / 10, Round(_max_wind_speed * 10) / 10]; -systemChat format["Direction: %1", Round(_windDirection)]; -systemChat format["(Period/PeriodPosition) : (%1/%2)", Round(_period), Round(_periodPosition)]; -systemChat format["Ratio: %1", _ratio]; -systemChat " "; -*/ -[-1 * sin(_windDirection) * _windSpeed, -1 * cos(_windDirection) * _windSpeed, 0] +_spd = _spd + _spdChange * _periodPercent; +_dir = _dir + _dirChange * _periodPercent; + +_dir = (360 + _dir) % 360; + +TRACE_2("Dir: Current/Change",Round(_dir),Round(_dirChange)); +TRACE_2("Spd: Current/Change",Round(_spd * 10) / 10,Round(_spdChange * 10) / 10); +TRACE_3("Period/Position/Percent",Round(_period),Round(_periodPosition),Round(_periodPercent * 100) / 100); + +[-_spd * sin(_dir), -_spd * cos(_dir), 0] diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index 555ec928f49..2da1b9ea494 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -31,18 +31,18 @@ for "_j" from 0 to 10 do { }; GVAR(wind_mean_dir) = GVAR(wind_direction_reference); GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); +GVAR(wind_direction_reference) = (360 + GVAR(wind_direction_reference)) % 360; GVAR(min_wind_speed) = GVAR(WindSpeedMin) select (_month - 1); GVAR(min_wind_speed) = (GVAR(min_wind_speed) select 0) + (random (GVAR(min_wind_speed) select 1)) - (random (GVAR(min_wind_speed) select 1)); GVAR(min_wind_speed) = 0 max GVAR(min_wind_speed); +GVAR(mean_wind_speed) = GVAR(WindSpeedMean) select (_month - 1); GVAR(max_wind_speed) = GVAR(WindSpeedMax) select (_month - 1); GVAR(max_wind_speed) = (GVAR(max_wind_speed) select 0) + (random (GVAR(max_wind_speed) select 1)) - (random (GVAR(max_wind_speed) select 1)); GVAR(max_wind_speed) = 0 max GVAR(max_wind_speed); -GVAR(c1) = 0.1 + random 0.1; -GVAR(c2) = 0.2 + random 0.1; -GVAR(c3) = 0.5 + random 0.2; -GVAR(c4) = 0.7 + random 0.2; +GVAR(current_wind_direction) = GVAR(wind_direction_reference); +GVAR(current_wind_speed) = GVAR(min_wind_speed) + (GVAR(max_wind_speed) - GVAR(min_wind_speed)) * (random 1); GVAR(wind_period_count) = 0; GVAR(wind_next_period) = -1; diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index cc96ccdf41c..6bc0f4a9bc7 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,7 +11,7 @@ */ #include "script_component.hpp" -private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windDirection", "_time", "_c1", "_c2", "_c3", "_c4"]; +private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { @@ -49,25 +49,38 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); GVAR(wind_period_count) = 0; - _windDirectionVariance = (90 - (random 180)) * overcast; + _windDirectionVariance = (90 - (random 180)) * (overcast ^ 2); _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; + _windDirectionChange = _windDirection - GVAR(current_wind_direction); + if (_windDirectionChange > 180) then { + _windDirectionChange = 360 - _windDirectionChange; + }; + if (_windDirectionChange < -180) then { + _windDirectionChange = -360 - _windDirectionChange; + }; + + _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); + _windMinDiff = GVAR(min_wind_speed) - GVAR(mean_wind_speed); + + _ratioMax = (random 1) ^ 2; + _ratioMin = (random 1) ^ 2; - _c1 = (0.1 + random 0.1) * overcast; - _c2 = (0.2 + random 0.1) * overcast; - _c3 = (0.5 + random 0.2); - _c4 = (0.7 + random 0.2); + _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; + _windSpeedChange = _windSpeed - GVAR(current_wind_speed); _time = GVAR(wind_next_period) * 60; - ACE_WIND_PARAMS = [_windDirection, - GVAR(min_wind_speed), - GVAR(max_wind_speed), - _c1, - _c2, - _c3, - _c4, + TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_time); + + ACE_WIND_PARAMS = [GVAR(current_wind_direction), + _windDirectionChange, + GVAR(current_wind_speed), + _windSpeedChange, _time]; - + + GVAR(current_wind_direction) = _windDirection; + GVAR(current_wind_speed) = _windSpeed; + GVAR(wind_period_start_time) = time; publicVariable "ACE_WIND_PARAMS"; }; @@ -77,4 +90,6 @@ ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR( publicVariable "ACE_MISC_PARAMS"; GVAR(rain_period_count) = GVAR(rain_period_count) + 1; -GVAR(wind_period_count) = GVAR(wind_period_count) + 1; \ No newline at end of file +GVAR(wind_period_count) = GVAR(wind_period_count) + 1; + +GVAR(overcast_multiplier) = 1 max (2* overcast) min 2; // 0 (@ overcast 0), 2 (@ overcast 1) \ No newline at end of file From 1063d4bb2c04da3aae3e97847298a03a11b611c9 Mon Sep 17 00:00:00 2001 From: Grzegorz Sikora Date: Wed, 22 Apr 2015 13:17:43 +0200 Subject: [PATCH 113/276] PL translation --- addons/ballistics/stringtable.xml | 5 ++++- addons/interact_menu/stringtable.xml | 6 ++++++ addons/realisticnames/stringtable.xml | 17 ++++++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 2f89e12d008..87e412bce14 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -1,4 +1,5 @@  + @@ -982,6 +983,7 @@ 6.5mm Creedmor 30Rnd Mag + Magazynek 6,5mm Creedmor 30rd 6.5mm CM @@ -992,6 +994,7 @@ Caliber: 6.5mm Creedmor<br />Rounds: 30<br />Used in: MXM + Kaliber: 6,5mm Creedmor<br />Pociski: 30<br />Używany w: MXM .338 10Rnd Mag (300gr Sierra MatchKing HPBT) @@ -1078,4 +1081,4 @@ Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5 - + \ No newline at end of file diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 55d67788f43..984acd92be4 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,4 +1,5 @@  + @@ -17,6 +18,7 @@ Mostrar siempre el cursor para la interacción Toujours afficher le curseur pour les interactions Mostra sempre il cursore per le interazioni + Zawsze wyświetlaj kursor dla interakcji Display interaction menus as lists @@ -73,15 +75,19 @@ Interaction - Text Max + Interakcja - Tekst max Interaction - Text Min + Interakcja - Tekst min Interaction - Shadow Max + Interakcja - Cień max Interaction - Shadow Min + Interakcja - Cień min \ No newline at end of file diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 1fcf116d1e5..507fd9b5a26 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,4 +1,5 @@  + @@ -1515,6 +1516,7 @@ SG 556 7.62 mm SG 556 7.62 mm SG 556 7.62 мм + SG 556 7,62 mm SG 556 7.62 mm (Black) @@ -1522,6 +1524,7 @@ SG 556 7.62 mm (Noir) SG 556 7.62 mm (Negro) SG 556 7.62 мм (черный) + SG 556 7,62 mm (czarny) SG 556 7.62 mm (Khaki) @@ -1529,6 +1532,7 @@ SG 556 7.62 mm (Kaki) SG 556 7.62 mm (Caqui) SG 556 7.62 мм (хаки) + SG 556 7,62 mm (khaki) SG 556 7.62 mm (Sand) @@ -1536,6 +1540,7 @@ SG 556 7.62 mm (Beige) SG 556 7.62 mm (Arena) SG 556 7.62 мм (песочный) + SG 556 7,62 mm (piaskowy) SG 556 7.62 mm (Camo) @@ -1543,6 +1548,7 @@ SG 556 7.62 mm (Camo) SG 556 7.62 mm (Camuflaje) SG 556 7.62 мм (камо) + SG 556 7,62 mm (kamuflaż) SG 556 7.62 mm (Woodland) @@ -1550,6 +1556,7 @@ SG 556 7.62 mm (Woodland) SG 556 7.62 mm (Bosque) SG 556 7.62 мм (лесной) + SG 556 7,62 mm (leśny) SG 556 7.62 mm (provisional) spotter @@ -1557,6 +1564,7 @@ SG 556 7.62 mm (provisoire) Observateur SG 556 7.62 mm (provisional) observador SG 556 7.62 мм (provisional) корректировщик + SG 556 7,62 mm (prowizoryczny) obserwator TODO: ASP-1 Kir 12.7 mm @@ -1613,6 +1621,7 @@ M14 7.62 mm M14 7.62 mm M14 7.62 мм + M14 7,62 mm M14 7.62 mm (Camo) @@ -1620,6 +1629,7 @@ M14 7.62 mm (Camo) M14 7.62 mm (Camuflaje) M14 7.62 мм (Камо) + M14 7,62 mm (kamuflaż) M14 7.62 mm (Olive) @@ -1627,6 +1637,7 @@ M14 7.62 mm (Olive) M14 7.62 mm (Oliva) M14 7.62 мм (Олива) + M14 7,62 mm (oliwkowy) TODO: Navid 9.3 mm @@ -1655,6 +1666,7 @@ LWMMG .338 LWMMG .338 LWMMG .338 + LWMMG .338 LWMMG .338 (MTP) @@ -1662,6 +1674,7 @@ LWMMG .338 (MTP) LWMMG .338 (MTP) LWMMG .338 (MTP) + LWMMG .338 (MTP) LWMMG .338 (Black) @@ -1669,6 +1682,7 @@ LWMMG .338 (Noir) LWMMG .338 (Negro) LWMMG .338 (Черный) + LWMMG .338 (czarny) LWMMG .338 (Sand) @@ -1676,6 +1690,7 @@ SPMG .338 (Beige) LWMMG .338 (Arena) LWMMG .338 (Песочный) + LWMMG .338 (piaskowy) - + \ No newline at end of file From d63de3a09e1cf72b5a48a5ad3d24d9a3951f49d0 Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 22 Apr 2015 07:49:18 -0700 Subject: [PATCH 114/276] restart PFH on optic reload. Fixes #812 --- addons/javelin/functions/fnc_onOpticLoad.sqf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index a2b26928594..8e268061620 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -33,7 +33,8 @@ uiNameSpace setVariable [QGVAR(arguments), _pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; -if(isNil "_pfh_handle") then { - _pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler; - uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle]; -}; \ No newline at end of file +if(!isNil "_pfh_handle") then { + [] call FUNC(onOpticUnload); // Unload optic if it was already loaded +}; +_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler; +uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle]; From 0c6786a138cf5c940edb803aea53d833640c7f3d Mon Sep 17 00:00:00 2001 From: jaynus Date: Wed, 22 Apr 2015 08:07:58 -0700 Subject: [PATCH 115/276] use the vehicle of the player for variables, not the player. allows static optics. FIxes #808 --- addons/javelin/functions/fnc_onOpticDraw.sqf | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 74f7c49746e..6da83531263 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -9,7 +9,9 @@ private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"]; private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"]; private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"]; -private["_runTime", "_soundTime", "_targetArray", "_zamerny"]; +private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"]; + +_currentShooter = (vehicle ACE_player); #define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 #define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 @@ -128,7 +130,7 @@ FUNC(disableFire) = { if(_firedEH < 0 && difficulty > 0) then { _firedEH = [ACE_player, "DefaultAction", {true}, { - _canFire = ACE_player getVariable["ace_missileguidance_target", nil]; + _canFire = _currentShooter getVariable["ace_missileguidance_target", nil]; if(!isNil "_canFire") exitWith { false }; true }] call EFUNC(common,addActionEventHandler); @@ -155,7 +157,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - ACE_player setVariable ["ace_missileguidance_target",nil, false]; + _currentShooter setVariable ["ace_missileguidance_target",nil, false]; // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); @@ -212,7 +214,7 @@ if (isNull _newTarget) then { {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; - ACE_player setVariable["ace_missileguidance_target", _currentTarget, false]; + _currentShooter setVariable["ace_missileguidance_target", _currentTarget, false]; // Allow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); @@ -227,7 +229,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingConstrains ctrlShow true; __JavelinIGUITargetingLines ctrlShow false; - ACE_player setVariable["ace_missileguidance_target", nil, false]; + _currentShooter setVariable["ace_missileguidance_target", nil, false]; _boundsInput = if (_currentTarget isKindOf "CAManBase") then { [_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"]; @@ -270,7 +272,7 @@ if (isNull _newTarget) then { __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - ACE_player setVariable ["ace_missileguidance_target",nil, false]; + _currentShooter setVariable ["ace_missileguidance_target",nil, false]; // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); From caf2f12eb939c417c359f4ce15ceaacb4ee971ab Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 19:46:09 +0200 Subject: [PATCH 116/276] Improved the wind direction selection based on the probability array --- addons/weather/functions/fnc_initWind.sqf | 28 +++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/addons/weather/functions/fnc_initWind.sqf b/addons/weather/functions/fnc_initWind.sqf index 2da1b9ea494..10b22efa2ab 100644 --- a/addons/weather/functions/fnc_initWind.sqf +++ b/addons/weather/functions/fnc_initWind.sqf @@ -11,24 +11,32 @@ */ #include "script_component.hpp" -private ["_j", "_i", "_directionFound", "_month", "_windDirectionProbabilities"]; +private ["_sum", "_rand", "_csum", "_index", "_month", "_windDirectionProbabilities"]; _month = date select 1; _windDirectionProbabilities = GVAR(WindDirectionProbabilities) select (_month - 1); ACE_wind = [0, 0, 0]; GVAR(wind_direction_reference) = random 360; -_directionFound = false; -for "_j" from 0 to 10 do { - _random = random 1; - for "_i" from 0 to 7 do { - if (_random < (_windDirectionProbabilities select _i)) exitWith { - _directionFound = true; - GVAR(wind_direction_reference) = 45 * _i; - }; +_sum = 0; +for "_i" from 0 to 7 do { + _sum = _sum + (_windDirectionProbabilities select _i); +}; +_rand = random _sum; +_csum = [0, 0, 0, 0, 0, 0, 0, 0]; +for "_i" from 0 to 7 do { + for "_j" from 0 to _i do { + _csum set [_i, (_csum select _i) + (_windDirectionProbabilities select _j)]; + }; +}; +_index = 0; +for "_i" from 0 to 7 do { + if (_rand > (_csum select _i)) then { + _index = _index + 1; }; - if (_directionFound) exitWith {}; }; +GVAR(wind_direction_reference) = 45 * _index; + GVAR(wind_mean_dir) = GVAR(wind_direction_reference); GVAR(wind_direction_reference) = GVAR(wind_direction_reference) + (random 22.5) - (random 22.5); GVAR(wind_direction_reference) = (360 + GVAR(wind_direction_reference)) % 360; From a9726d2b608865ccdea491a3c4b2521f9fdedb4a Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 19:46:27 +0200 Subject: [PATCH 117/276] Simplified the wind direction change calculation --- addons/weather/functions/fnc_getWind.sqf | 2 ++ addons/weather/functions/fnc_serverController.sqf | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 33750b77dd3..5f050d74b35 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -28,4 +28,6 @@ TRACE_2("Dir: Current/Change",Round(_dir),Round(_dirChange)); TRACE_2("Spd: Current/Change",Round(_spd * 10) / 10,Round(_spdChange * 10) / 10); TRACE_3("Period/Position/Percent",Round(_period),Round(_periodPosition),Round(_periodPercent * 100) / 100); +// TODO: Add some deterministic noise + [-_spd * sin(_dir), -_spd * cos(_dir), 0] diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 6bc0f4a9bc7..5e6928d5b1d 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -53,10 +53,10 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; _windDirectionChange = _windDirection - GVAR(current_wind_direction); if (_windDirectionChange > 180) then { - _windDirectionChange = 360 - _windDirectionChange; + _windDirectionChange = _windDirectionChange - 360; }; if (_windDirectionChange < -180) then { - _windDirectionChange = -360 - _windDirectionChange; + _windDirectionChange = 360 + _windDirectionChange; }; _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); From 09ff217e9343bc124e637e7f97652a354c03739a Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 21:16:01 +0200 Subject: [PATCH 118/276] Improved the init process --- addons/weather/XEH_postInit.sqf | 21 ++----------------- addons/weather/XEH_postServerInit.sqf | 19 ++++++++++++++++- addons/weather/XEH_preInit.sqf | 3 +++ addons/weather/functions/fnc_getWind.sqf | 1 + .../functions/fnc_serverController.sqf | 2 +- .../weather/functions/fnc_updateHumidity.sqf | 2 ++ .../functions/fnc_updateTemperature.sqf | 2 ++ 7 files changed, 29 insertions(+), 21 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 6c287c3a8a1..04879971b42 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,26 +1,9 @@ #include "script_component.hpp" -call FUNC(getMapData); - -// Randomization -GVAR(temperatureShift) = 3 - random 6; -GVAR(badWeatherShift) = (random 1) ^ 2 * 10; -GVAR(humidityShift) = (5 - random 10) / 100; - -// Rain variables GVAR(enableRain) = true; -GVAR(rain_next_period) = -1; -GVAR(rain_period_count) = 0; -GVAR(rain_initial_rain) = 0; -if(overcast >= 0.7) then { - GVAR(rain_initial_rain) = (random ((overcast-0.7)/0.3)); -}; -GVAR(current_rain) = GVAR(rain_initial_rain); -GVAR(rain_current_range) = -1+(random 2); -GVAR(overcast_multiplier) = 1; -// Wind Variables -call FUNC(initWind); +GVAR(wind_period_start_time) = time; +GVAR(rain_period_start_time) = time; "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index cfe35e60091..67d536b9967 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -1,3 +1,20 @@ #include "script_component.hpp" -[FUNC(serverController), 60] call cba_fnc_addPerFrameHandler; +// Randomization +GVAR(temperatureShift) = 3 - random 6; +GVAR(badWeatherShift) = (random 1) ^ 2 * 10; +GVAR(humidityShift) = (5 - random 10) / 100; + +// Rain +GVAR(rain_next_period) = -1; +GVAR(rain_period_count) = 0; +GVAR(current_rain) = 0; +GVAR(rain_current_range) = -1+(random 2); + +// Wind +call FUNC(initWind); + +GVAR(overcast_multiplier) = 1; +GVAR(serverUpdateInterval) = 60; + +[FUNC(serverController), GVAR(serverUpdateInterval)] call cba_fnc_addPerFrameHandler; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 1d6b12ee607..70c9341d0f6 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -15,4 +15,7 @@ PREP(updateRain); PREP(updateTemperature); PREP(updateWind); +// Make sure this data is read before client/server postInit +call FUNC(getMapData); + ADDON = true; diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 5f050d74b35..95d97d98b35 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -24,6 +24,7 @@ _dir = _dir + _dirChange * _periodPercent; _dir = (360 + _dir) % 360; +TRACE_1("PeriodStartTime",Round(GVAR(wind_period_start_time))); TRACE_2("Dir: Current/Change",Round(_dir),Round(_dirChange)); TRACE_2("Spd: Current/Change",Round(_spd * 10) / 10,Round(_spdChange * 10) / 10); TRACE_3("Period/Position/Percent",Round(_period),Round(_periodPosition),Round(_periodPercent * 100) / 100); diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 5e6928d5b1d..33ac9098689 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -68,7 +68,7 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; _windSpeedChange = _windSpeed - GVAR(current_wind_speed); - _time = GVAR(wind_next_period) * 60; + _time = GVAR(wind_next_period) * GVAR(serverUpdateInterval); TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_time); diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index 07edec18548..dce031b3f36 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -24,6 +24,8 @@ if (rain > 0 && overcast > 0.7) then { _PS2 = 6.112 * exp((17.62 * GVAR(currentTemperature)) / (243.12 + GVAR(currentTemperature))); GVAR(currentHumidity) = GVAR(currentHumidity) * _PS1 / _PS2; GVAR(currentHumidity) = GVAR(currentHumidity) + GVAR(humidityShift); + + TRACE_1("humidityShift",GVAR(humidityShift)); }; GVAR(currentHumidity) = 0 max GVAR(currentHumidity) min 1; diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index d66a9b28f48..870d00333c1 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -20,3 +20,5 @@ _hourlyCoef = -0.5 * sin(360 * ((3 + (date select 3))/24 + (date select 4)/1440) GVAR(currentTemperature) = (GVAR(TempDay) select (_month - 1)) * (1 - _hourlyCoef) + (GVAR(TempNight) select (_month - 1)) * _hourlyCoef; GVAR(currentTemperature) = GVAR(currentTemperature) + GVAR(temperatureShift) - GVAR(badWeatherShift) * overcast; GVAR(currentTemperature) = round(GVAR(currentTemperature) * 10) / 10; + +TRACE_2("temperatureShift/badWeatherShift",GVAR(temperatureShift),GVAR(badWeatherShift)); From 860b4a446ad843160662f5f976b62bdd6d8bae92 Mon Sep 17 00:00:00 2001 From: ulteq Date: Wed, 22 Apr 2015 22:48:38 +0200 Subject: [PATCH 119/276] Updated the 6.5mm Creedmor airFriction: *Also added it to the ATRagMX gun list --- addons/atragmx/XEH_postInit.sqf | 1 + addons/atragmx/script_component.hpp | 2 +- addons/ballistics/CfgAmmo.hpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 7f047834e2b..2f51bf16f9b 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -34,6 +34,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ["6.5x39mm" , 800, 100, 0.0683, -0.0007850, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"], ["6.5x47mm Lapua" , 800, 100, 0.0682, -0.0007710, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"], + ["6.5mm Creedmor" , 840, 100, 0.0637, -0.0006510, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"], ["5.56x45mm M855" , 870, 100, 0.0626, -0.0012650, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ], ["5.56x45mm Mk262" , 820, 100, 0.0671, -0.0011250, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ], diff --git a/addons/atragmx/script_component.hpp b/addons/atragmx/script_component.hpp index 6e81f794937..c2019251477 100644 --- a/addons/atragmx/script_component.hpp +++ b/addons/atragmx/script_component.hpp @@ -11,4 +11,4 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.2 +#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.3 diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 3ccc84a7bc4..8660e416c99 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -145,7 +145,7 @@ class CfgAmmo { ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; class ACE_65_Creedmor_Ball: B_65x39_Caseless { - airFriction=-0.00078; + airFriction=-0.000651; typicalSpeed=860 ; caliber=0.7; ACE_caliber=0.264; From 5c90a44057012694edc05e83378d96343af67a4c Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Wed, 22 Apr 2015 16:05:28 -0700 Subject: [PATCH 120/276] Required Python 3 --- tools/make.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index 3b7bf9d94e1..bf50685b85a 100644 --- a/tools/make.py +++ b/tools/make.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # vim: set fileencoding=utf-8 : # make.py From 1518ef8d0b627225ae4dc95c6988fcc98df80f8e Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Wed, 22 Apr 2015 16:58:29 -0700 Subject: [PATCH 121/276] Signature keys created by default. #815 --- tools/make.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tools/make.py b/tools/make.py index bf50685b85a..f7e6fe5f854 100644 --- a/tools/make.py +++ b/tools/make.py @@ -60,6 +60,7 @@ release_dir = "" module_root_parent = "" optionals_root = "" +key_name = "ace_preAlpha" ############################################################################### # http://akiscode.com/articles/sha-1directoryhash.shtml @@ -416,7 +417,14 @@ def cleanup_optionals(mod,pbos): def main(argv): """Build an Arma addon suite in a directory from rules in a make.cfg file.""" print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) - + + global work_drive + global module_root + global release_dir + global module_root_parent + global optionals_root + global key_name + if sys.platform != "win32": print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") sys.exit(1) @@ -436,7 +444,7 @@ def main(argv): release_version = 0 # Version of release use_pboproject = True # Default to pboProject build tool make_target = "DEFAULT" # Which section in make.cfg to use for the build - new_key = False # Make a new key and use it to sign? + new_key = True # Make a new key and use it to sign? quiet = False # Suppress output from build tool? # Parse arguments @@ -524,18 +532,13 @@ def main(argv): commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"]) commit_id = str(commit_id, "utf-8")[:8] + key_name = str(key_name+"-"+commit_id) except: print_error("FAILED TO DETERMINE COMMIT ID.") commit_id = "NOGIT" cfg = configparser.ConfigParser(); try: - global work_drive - global module_root - global release_dir - global module_root_parent - global optionals_root - cfg.read(os.path.join(make_root, "make.cfg")) # Project name (with @ symbol) @@ -663,7 +666,7 @@ def main(argv): print_green("\nRequested key does not exist.") ret = subprocess.call([dscreatekey, key_name]) # Created in make_root if ret == 0: - print_blue("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) + print_green("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) else: print_error("Failed to create key!") From a87c1deac8959f467e8a4e2d2a3df3862537d3de Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Wed, 22 Apr 2015 17:45:22 -0700 Subject: [PATCH 122/276] Removing old signature keys when a new key has been created. #815 --- tools/make.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tools/make.py b/tools/make.py index f7e6fe5f854..757d5f02d2c 100644 --- a/tools/make.py +++ b/tools/make.py @@ -412,6 +412,14 @@ def cleanup_optionals(mod,pbos): except: print_error("Cleaning Optionals Failed") raise + + +def purge(dir, pattern, friendlyPattern="files"): + print_yellow("Deleting " + friendlyPattern + " files from directory: " + dir) + for f in os.listdir(dir): + if re.search(pattern, f): + os.remove(os.path.join(dir, f)) + print_yellow("Deleting file => " + f) ############################################################################### def main(argv): @@ -663,15 +671,17 @@ def main(argv): # Make the key specified from command line if necessary. if new_key: if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")): - print_green("\nRequested key does not exist.") + print_yellow("\nRequested key does not exist.") ret = subprocess.call([dscreatekey, key_name]) # Created in make_root if ret == 0: print_green("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) + print("Removing any old signature keys...") + purge(os.path.join(module_root, release_dir, project, "Addons"), "^.*\.bisign$","*.bisign") else: print_error("Failed to create key!") try: - print_blue("Copying public key to release directory.") + print("Copying public key to release directory.") try: os.makedirs(os.path.join(module_root, release_dir, "Keys")) From 9f2d5b9c10f168085b2ee6ab7a55e5fe99704317 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Wed, 22 Apr 2015 19:14:03 -0700 Subject: [PATCH 123/276] Check for missing keys and rebuild them. #815 --- tools/make.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/tools/make.py b/tools/make.py index 757d5f02d2c..3fccc58e590 100644 --- a/tools/make.py +++ b/tools/make.py @@ -61,6 +61,8 @@ module_root_parent = "" optionals_root = "" key_name = "ace_preAlpha" +key = "" +dssignfile = "" ############################################################################### # http://akiscode.com/articles/sha-1directoryhash.shtml @@ -420,19 +422,32 @@ def purge(dir, pattern, friendlyPattern="files"): if re.search(pattern, f): os.remove(os.path.join(dir, f)) print_yellow("Deleting file => " + f) + + +def build_signature_file(file_name): + global key + global dssignfile + print("Signing with " + key + ".") + ret = subprocess.call([dssignfile, key, file_name]) + if ret == 0: + return True + else: + return False ############################################################################### def main(argv): """Build an Arma addon suite in a directory from rules in a make.cfg file.""" print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) - + global work_drive global module_root global release_dir global module_root_parent global optionals_root global key_name - + global key + global dssignfile + if sys.platform != "win32": print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.") sys.exit(1) @@ -705,6 +720,7 @@ def main(argv): for module in modules: print_green("\nMaking " + module + "-"*max(1, (60-len(module)))) missing = False + sigMissing = False # Cache check if module in cache: @@ -719,8 +735,12 @@ def main(argv): # Hash the module new_sha = get_directory_hash(os.path.join(module_root, module)) - # Is the pbo file missing? + # Is the pbo or sig file missing? missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) + sigFile = pbo_name_prefix+module + ".pbo." + key_name + ".bisign" + print("Checking sig file => " + sigFile) + sigMissing = not os.path.isfile(os.path.join(release_dir, project, "addons", sigFile )) + if missing: print("ace_{}.pbo".format(module) + " is missing. Building...") @@ -729,6 +749,10 @@ def main(argv): if old_sha == new_sha and not missing: if not force_build: print("Module has not changed.") + if sigMissing: + if key: + print_yellow("Signature key " + sigFile + " is missing.") + build_signature_file(os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")) # Skip everything else continue @@ -753,7 +777,7 @@ def main(argv): try: # Remove the old pbo, key, and log - old = os.path.join(module_root, release_dir, project, "Addons", module) + "*" + old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*" files = glob.glob(old) for f in files: os.remove(f) From bb676324b93a9a3c4f4777e6b63d238ace4372e6 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Wed, 22 Apr 2015 20:09:52 -0700 Subject: [PATCH 124/276] A little clean up. --- tools/make.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index 3fccc58e590..eb2be34f2eb 100644 --- a/tools/make.py +++ b/tools/make.py @@ -199,6 +199,7 @@ def find_bi_tools(work_drive): else: raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.") + def find_depbo_tools(regKey): """Use registry entries to find DePBO-based tools.""" stop = False @@ -251,6 +252,7 @@ def find_depbo_tools(regKey): #Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths. return [pboproject_path.strip('"'),rapify_path.strip('"'),makepbo_path.strip('"')] + def color(color): """Set the color. Works on Win32 and normal terminals.""" if sys.platform == "win32": @@ -339,6 +341,7 @@ def copy_important_files(source_dir,destination_dir): finally: os.chdir(originalDir) + def copy_optionals_for_building(mod,pbos): src_directories = os.listdir(optionals_root) current_dir = os.getcwd() @@ -387,7 +390,8 @@ def copy_optionals_for_building(mod,pbos): finally: os.chdir(current_dir) -def cleanup_optionals(mod,pbos): + +def cleanup_optionals(mod): print("") try: for dir_name in mod: @@ -435,6 +439,7 @@ def build_signature_file(file_name): return False ############################################################################### + def main(argv): """Build an Arma addon suite in a directory from rules in a make.cfg file.""" print_blue(("\nmake.py for Arma, modified for Advanced Combat Environment v" + __version__)) @@ -1043,6 +1048,8 @@ def main(argv): copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) cleanup_optionals(optionals_modules,optional_files) + + if __name__ == "__main__": main(sys.argv) input("Press Enter to continue...") From c975213579306345c2e02fed327bbca87cc8c3b9 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 11:11:38 +0200 Subject: [PATCH 125/276] Update CfgAmmo.hpp Added missing data to 40mm grenades. --- addons/frag/CfgAmmo.hpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 8ad76e6ae86..94b4e5dbb65 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -76,8 +76,18 @@ class CfgAmmo { }; class ACE_G_40mm_HEDP: G_40mm_HE { + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + ACE_FRAG_METAL = 200; + ACE_FRAG_CHARGE = 45; + ACE_FRAG_GURNEY_C = 2830; + ACE_FRAG_GURNEY_K = 3/5; }; class ACE_G_40mm_HE: ACE_G_40mm_HEDP { + ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + ACE_FRAG_METAL = 200; + ACE_FRAG_CHARGE = 32; + ACE_FRAG_GURNEY_C = 2700; + ACE_FRAG_GURNEY_K = 3/5; }; class ACE_G_40mm_Practice: ACE_G_40mm_HE { ACE_FRAG_SKIP = 1; From e9bb1eea4ca014236e77658a04e0c6c6d11fe896 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 11:27:43 +0200 Subject: [PATCH 126/276] Minor muzzle velocity correction for the 6.5mm Creedmor --- addons/ballistics/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 8660e416c99..f42d4fca903 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -156,7 +156,7 @@ class CfgAmmo { ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; - ACE_muzzleVelocities[]={750, 830, 850, 860, 865}; + ACE_muzzleVelocities[]={750, 820, 840, 852, 860}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; }; class B_762x51_Ball : BulletBase { From be595d9c9e317135abf3972ad74b7f2d3a99b560 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 11:54:24 +0200 Subject: [PATCH 127/276] Made the wind speed change less often during good weather --- addons/weather/functions/fnc_serverController.sqf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 33ac9098689..c4550e3c134 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -65,8 +65,12 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { _ratioMax = (random 1) ^ 2; _ratioMin = (random 1) ^ 2; - _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; - _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + _windSpeed = GVAR(current_wind_speed); + _windSpeedChange = 0; + if ((random 1) < (0.3 max overcast)) then { + _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; + _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + }; _time = GVAR(wind_next_period) * GVAR(serverUpdateInterval); From 4e26a8e29fe16ba501a721aabb14eb73aca2ed46 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 03:18:06 -0700 Subject: [PATCH 128/276] Make sure Optionals get signed too. #815 --- tools/make.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/tools/make.py b/tools/make.py index eb2be34f2eb..8b5a81383c3 100644 --- a/tools/make.py +++ b/tools/make.py @@ -356,10 +356,15 @@ def copy_optionals_for_building(mod,pbos): #print ("Adding the following file: " + file_name) pbos.append(file_name) pbo_path = os.path.join(release_dir, "@ace","optionals",file_name) + sigFile_name = file_name +"."+ key_name + ".bisign" + sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) if (os.path.isfile(pbo_path)): print("Moving " + pbo_path + " for processing.") shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) - + + if (os.path.isfile(sig_path)): + #print("Moving " + sig_path + " for processing.") + shutil.move(sig_path, os.path.join(release_dir,"@ace","addons",sigFile_name)) except: print_error("Error in moving") raise @@ -407,9 +412,17 @@ def cleanup_optionals(mod): file_name = "ace_{}.pbo".format(dir_name) src_file_path = os.path.join(release_dir, "@ace","addons",file_name) dst_file_path = os.path.join(release_dir, "@ace","optionals",file_name) + + sigFile_name = file_name +"."+ key_name + ".bisign" + src_sig_path = os.path.join(release_dir, "@ace","addons",sigFile_name) + dst_sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) + if (os.path.isfile(src_file_path)): #print("Preserving " + file_name) os.renames(src_file_path,dst_file_path) + if (os.path.isfile(src_sig_path)): + #print("Preserving " + sigFile_name) + os.renames(src_sig_path,dst_sig_path) except FileExistsError: print_error(file_name + " already exists") continue @@ -421,11 +434,10 @@ def cleanup_optionals(mod): def purge(dir, pattern, friendlyPattern="files"): - print_yellow("Deleting " + friendlyPattern + " files from directory: " + dir) + print_green("Deleting " + friendlyPattern + " files from directory: " + dir) for f in os.listdir(dir): if re.search(pattern, f): os.remove(os.path.join(dir, f)) - print_yellow("Deleting file => " + f) def build_signature_file(file_name): @@ -735,7 +747,7 @@ def main(argv): #We always build ACE_common so we can properly show the correct version stamp in the RPT file. if module == "common": - old_sha = "" + old_sha = old_sha # Hash the module new_sha = get_directory_hash(os.path.join(module_root, module)) @@ -743,11 +755,10 @@ def main(argv): # Is the pbo or sig file missing? missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module))) sigFile = pbo_name_prefix+module + ".pbo." + key_name + ".bisign" - print("Checking sig file => " + sigFile) sigMissing = not os.path.isfile(os.path.join(release_dir, project, "addons", sigFile )) if missing: - print("ace_{}.pbo".format(module) + " is missing. Building...") + print_yellow("Missing PBO file ace_{}.pbo".format(module) + ". Building...") # Check if it needs rebuilt # print ("Hash:", new_sha) @@ -756,7 +767,7 @@ def main(argv): print("Module has not changed.") if sigMissing: if key: - print_yellow("Signature key " + sigFile + " is missing.") + print_yellow("Missing Signature key " + sigFile) build_signature_file(os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")) # Skip everything else continue @@ -1047,7 +1058,7 @@ def main(argv): print_error("Could not copy files. Is Arma 3 running?") copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) - cleanup_optionals(optionals_modules,optional_files) + cleanup_optionals(optionals_modules) if __name__ == "__main__": From dd72fced364df94c2d5aa0a27b279196d2f7c4b9 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 12:42:01 +0200 Subject: [PATCH 129/276] Added M955, M993, MK316 Mod 0, 127x99mm API ammo classes: *Recalculated the vanilla calibers based on (6.5mm ~ 1.0) --- addons/atragmx/XEH_postInit.sqf | 2 +- addons/ballistics/CfgAmmo.hpp | 115 +++++++++++++++++++++++++------- 2 files changed, 93 insertions(+), 24 deletions(-) diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 2f51bf16f9b..e2e3cb254c5 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -9,7 +9,7 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657, -0.0006400, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ], ["12.7x99mm AMAX" , 860, 100, 0.0612, -0.0003740, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ], - ["12.7x99mm" , 853, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], + ["12.7x99mm" , 900, 100, 0.0623, -0.0006000, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ], ["12.7x54mm" , 300, 100, 0.3395, -0.0001400, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ], diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index f42d4fca903..609eeb6ede5 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -36,7 +36,7 @@ class CfgAmmo { }; class ACE_556x45_Ball_Mk262 : B_556x45_Ball { airFriction=-0.001125; - caliber=0.6; + caliber=0.8; deflecting=18; hit=11; typicalSpeed=836; @@ -53,7 +53,7 @@ class CfgAmmo { }; class ACE_556x45_Ball_Mk318 : B_556x45_Ball { airFriction=-0.001120; - caliber=0.6; + caliber=0.8; deflecting=18; hit=9; typicalSpeed=886; @@ -68,13 +68,30 @@ class CfgAmmo { ACE_muzzleVelocities[]={780, 886, 950}; ACE_barrelLengths[]={10, 15.5, 20}; }; + class ACE_556x45_Ball_M995_AP : B_556x45_Ball { + airFriction=-0.001120; + caliber=1.6; + deflecting=18; + hit=6; + typicalSpeed=886; + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=52; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={950, 1030, 1040}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; class B_556x45_Ball_Tracer_Red; class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red { nvgOnly = 1; }; class ACE_545x39_Ball_7N6M : B_556x45_Ball { airFriction=-0.001162; - caliber=0.5; + caliber=0.6; deflecting=18; hit=7; typicalSpeed=880; @@ -92,7 +109,7 @@ class CfgAmmo { class B_556x45_Ball_Tracer_Yellow; class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow { airFriction=-0.001162; - caliber=0.5; + caliber=0.6; deflecting=18; hit=7; typicalSpeed=883; @@ -132,7 +149,7 @@ class CfgAmmo { class ACE_65x47_Ball_Scenar: B_65x39_Caseless { airFriction=-0.00078; typicalSpeed=820 ; - caliber=0.6; + caliber=0.9; ACE_caliber=0.264; ACE_bulletLength=1.364; ACE_bulletMass=139; @@ -147,7 +164,7 @@ class CfgAmmo { class ACE_65_Creedmor_Ball: B_65x39_Caseless { airFriction=-0.000651; typicalSpeed=860 ; - caliber=0.7; + caliber=1.1; ACE_caliber=0.264; ACE_bulletLength=1.426; ACE_bulletMass=140; @@ -180,7 +197,7 @@ class CfgAmmo { }; class ACE_762x51_Ball_M118LR : B_762x51_Ball { airFriction=-0.0008525; - caliber=1.05; + caliber=1.8; hit=16; typicalSpeed=790; ACE_caliber=0.308; @@ -194,11 +211,27 @@ class CfgAmmo { ACE_muzzleVelocities[]={750, 780, 790, 794}; ACE_barrelLengths[]={16, 20, 24, 26}; }; + class ACE_762x51_Ball_MK316_Mod_0 : B_762x51_Ball { + airFriction=-0.0008525; + caliber=1.8; + hit=16; + typicalSpeed=790; + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={775, 790, 805, 810}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; class ACE_762x51_Ball_Mk319_Mod_0 : B_762x51_Ball { airFriction=-0.00103; - caliber=0.85; + caliber=1.5; hit=14; - typicalSpeed=890; + typicalSpeed=900; ACE_caliber=0.308; ACE_bulletLength=1.24; ACE_bulletMass=130; @@ -210,9 +243,25 @@ class CfgAmmo { ACE_muzzleVelocities[]={838, 892, 910}; ACE_barrelLengths[]={13, 16, 20}; }; + class ACE_762x51_Ball_M993_AP : B_762x51_Ball { + airFriction=-0.00103; + caliber=2.2; + hit=11; + typicalSpeed=930; + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=127; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={875, 910, 930}; + ACE_barrelLengths[]={13, 16, 20}; + }; class ACE_762x51_Ball_Subsonic : B_762x51_Ball { airFriction=-0.000535; - caliber=0.5; + caliber=1; hit=6; typicalSpeed=790; ACE_caliber=0.308; @@ -229,7 +278,7 @@ class CfgAmmo { class ACE_30_06_M1_Ball : B_762x51_Ball { airFriction=-0.0009; typicalSpeed=800; - caliber=1.3; + caliber=2.0; hit=10; ACE_caliber=0.308; ACE_bulletLength=1.21; @@ -245,7 +294,7 @@ class CfgAmmo { class ACE_7_Remington_Magnum_Ball : B_762x51_Ball { airFriction=-0.0008; typicalSpeed=820; - caliber=1.4; + caliber=2.1; hit=8; ACE_caliber=0.284; ACE_bulletLength=1.529; @@ -261,7 +310,7 @@ class CfgAmmo { class ACE_243_Winchester_Ball : B_762x51_Ball { airFriction=-0.00095; typicalSpeed=915; - caliber=0.8; + caliber=2.3; hit=6; ACE_caliber=0.243; ACE_bulletLength=1.282; @@ -276,7 +325,7 @@ class CfgAmmo { }; class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball { airFriction=-0.000830; - caliber=1.08; + caliber=1.8; hit=17; typicalSpeed=900; ACE_caliber=0.308; @@ -292,7 +341,7 @@ class CfgAmmo { }; class ACE_762x67_Ball_Mk248_Mod_1 : B_762x51_Ball { airFriction=-0.000815; - caliber=1.12; + caliber=1.9; hit=18; typicalSpeed=867; ACE_caliber=0.308; @@ -308,7 +357,7 @@ class CfgAmmo { }; class ACE_762x67_Ball_Berger_Hybrid_OTM : B_762x51_Ball { airFriction=-0.00076; - caliber=1.15; + caliber=2.0; hit=19; typicalSpeed=853; ACE_caliber=0.308; @@ -338,7 +387,7 @@ class CfgAmmo { }; class ACE_762x54_Ball_7N14 : B_762x51_Ball { airFriction=-0.001023; - caliber=0.95; + caliber=1.5; hit=15; typicalSpeed=820; ACE_caliber=0.312; @@ -355,7 +404,7 @@ class CfgAmmo { class B_762x54_Tracer_Green; class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green { airFriction=-0.001023; - caliber=0.9; + caliber=1.5; hit=15; typicalSpeed=800; ACE_caliber=0.312; @@ -371,7 +420,7 @@ class CfgAmmo { }; class ACE_762x35_Ball : B_762x51_Ball { airFriction=-0.000821; - caliber=0.9; + caliber=1.5; hit=11; typicalSpeed=790; ACE_caliber=0.308; @@ -388,6 +437,7 @@ class CfgAmmo { class ACE_762x39_Ball : B_762x51_Ball { airFriction=-0.0015168; hit=12; + caliber=1.5 typicalSpeed=716; ACE_caliber=0.308; ACE_bulletLength=1.14; @@ -403,6 +453,7 @@ class CfgAmmo { class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow { airFriction=-0.0015168; hit=12; + caliber=1.5; typicalSpeed=716; ACE_caliber=0.308; ACE_bulletLength=1.14; @@ -493,6 +544,7 @@ class CfgAmmo { class ACE_303_Ball : ACE_762x51_Ball_M118LR { airFriction=-0.00083; typicalSpeed=761; + caliber=2.0; ACE_caliber=0.311; ACE_bulletLength=1.227; ACE_bulletMass=174; @@ -580,7 +632,6 @@ class CfgAmmo { class ACE_338_Ball : B_338_Ball { timeToLive=10; airFriction=-0.000535; - caliber=1.55; typicalSpeed=826; ACE_caliber=0.338; ACE_bulletLength=1.70; @@ -596,7 +647,7 @@ class CfgAmmo { class ACE_338_Ball_API526 : B_338_Ball { timeToLive=10; airFriction=-0.000673; - caliber=2.4; + caliber=2.8; typicalSpeed=826; ACE_caliber=0.338; ACE_bulletLength=1.535; @@ -626,7 +677,7 @@ class CfgAmmo { class B_127x99_Ball : BulletBase { timeToLive=10; airFriction=-0.0006; - typicalSpeed=853; + typicalSpeed=900; ACE_caliber=0.510; ACE_bulletLength=2.310; ACE_bulletMass=647; @@ -635,13 +686,31 @@ class CfgAmmo { ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ASM"; ACE_dragModel=1; - ACE_muzzleVelocities[]={853}; + ACE_muzzleVelocities[]={900}; + ACE_barrelLengths[]={29}; + }; + class B_127x99_API : BulletBase { + timeToLive=10; + airFriction=-0.0006; + typicalSpeed=900; + hit=25; + caliber=4.0; + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=648; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={900}; ACE_barrelLengths[]={29}; }; class ACE_127x99_Ball_AMAX : B_127x99_Ball { timeToLive=10; airFriction=-0.000374; typicalSpeed=860; + caliber=3.0; ACE_caliber=0.510; ACE_bulletLength=2.540; ACE_bulletMass=750; From 822655835ad4872f19bb4799f124ccd8c5a43932 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 03:43:58 -0700 Subject: [PATCH 130/276] Cleanup #815 --- tools/make.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/make.py b/tools/make.py index 8b5a81383c3..b2fc5af26c1 100644 --- a/tools/make.py +++ b/tools/make.py @@ -361,7 +361,7 @@ def copy_optionals_for_building(mod,pbos): if (os.path.isfile(pbo_path)): print("Moving " + pbo_path + " for processing.") shutil.move(pbo_path, os.path.join(release_dir,"@ace","addons",file_name)) - + if (os.path.isfile(sig_path)): #print("Moving " + sig_path + " for processing.") shutil.move(sig_path, os.path.join(release_dir,"@ace","addons",sigFile_name)) @@ -412,11 +412,11 @@ def cleanup_optionals(mod): file_name = "ace_{}.pbo".format(dir_name) src_file_path = os.path.join(release_dir, "@ace","addons",file_name) dst_file_path = os.path.join(release_dir, "@ace","optionals",file_name) - + sigFile_name = file_name +"."+ key_name + ".bisign" src_sig_path = os.path.join(release_dir, "@ace","addons",sigFile_name) dst_sig_path = os.path.join(release_dir, "@ace","optionals",sigFile_name) - + if (os.path.isfile(src_file_path)): #print("Preserving " + file_name) os.renames(src_file_path,dst_file_path) @@ -747,7 +747,7 @@ def main(argv): #We always build ACE_common so we can properly show the correct version stamp in the RPT file. if module == "common": - old_sha = old_sha + old_sha = "" # Hash the module new_sha = get_directory_hash(os.path.join(module_root, module)) From fa69d899db7ccc5a35fd27bf49f90a6d6d8e6260 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 03:58:10 -0700 Subject: [PATCH 131/276] Too much yellow #815 --- tools/make.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index b2fc5af26c1..440ab61a0d4 100644 --- a/tools/make.py +++ b/tools/make.py @@ -767,7 +767,7 @@ def main(argv): print("Module has not changed.") if sigMissing: if key: - print_yellow("Missing Signature key " + sigFile) + print("Missing Signature key " + sigFile) build_signature_file(os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")) # Skip everything else continue From b1521345c2f9c75282aa6099f96dfa0ef4bc7398 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 13:35:57 +0200 Subject: [PATCH 132/276] Added magazines for the new AP rounds: *Fixed some stringtable inconsistencies *Removed some obsolete stringtable entries --- addons/ballistics/CfgAmmo.hpp | 6 +- addons/ballistics/CfgMagazines.hpp | 54 ++++++- addons/ballistics/CfgVehicles.hpp | 24 ++- addons/ballistics/CfgWeapons.hpp | 14 ++ addons/ballistics/stringtable.xml | 228 ++++++++++++++++------------- 5 files changed, 220 insertions(+), 106 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 609eeb6ede5..eb4d15cb755 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -76,7 +76,7 @@ class CfgAmmo { typicalSpeed=886; ACE_caliber=0.224; ACE_bulletLength=0.906; - ACE_bulletMass=52; + ACE_bulletMass=46; ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; ACE_ballisticCoefficients[]={0.151}; ACE_velocityBoundaries[]={}; @@ -211,7 +211,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={750, 780, 790, 794}; ACE_barrelLengths[]={16, 20, 24, 26}; }; - class ACE_762x51_Ball_MK316_Mod_0 : B_762x51_Ball { + class ACE_762x51_Ball_Mk316_Mod_0 : B_762x51_Ball { airFriction=-0.0008525; caliber=1.8; hit=16; @@ -689,7 +689,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={900}; ACE_barrelLengths[]={29}; }; - class B_127x99_API : BulletBase { + class ACE_127x99_API : BulletBase { timeToLive=10; airFriction=-0.0006; typicalSpeed=900; diff --git a/addons/ballistics/CfgMagazines.hpp b/addons/ballistics/CfgMagazines.hpp index 5e3f48c369e..9ead13c9626 100644 --- a/addons/ballistics/CfgMagazines.hpp +++ b/addons/ballistics/CfgMagazines.hpp @@ -49,6 +49,14 @@ class CfgMagazines { class 30Rnd_556x45_Stanag: CA_Magazine { }; + class ACE_30Rnd_556x45_Stanag_M995_AP_mag: 30Rnd_556x45_Stanag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_556x45_Ball_M995_AP"; + displayName = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Name"; + displayNameShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_NameShort"; + descriptionShort = "$STR_ACE_30Rnd_556x45_Stanag_M995_AP_mag_Description"; + initSpeed = 1046; + }; class ACE_30Rnd_556x45_Stanag_Mk262_mag: 30Rnd_556x45_Stanag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_556x45_Ball_Mk262"; @@ -123,6 +131,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_10Rnd_762x51_M118LR_Mag_Description"; initSpeed = 780; }; + class ACE_10Rnd_762x51_Mk316_Mod_0_Mag: 10Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_Mk316_Mod_0"; + count = 10; + displayName = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Name"; + displayNameShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_NameShort"; + descriptionShort = "$STR_ACE_10Rnd_762x51_Mk316_Mod_0_Mag_Description"; + initSpeed = 790; + }; class ACE_10Rnd_762x51_Mk319_Mod_0_Mag: 10Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x51_Ball_Mk319_Mod_0"; @@ -132,6 +149,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_10Rnd_762x51_Mk319_Mod_0_Mag_Description"; initSpeed = 900; }; + class ACE_10Rnd_762x51_M993_AP_Mag: 10Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_M993_AP"; + count = 10; + displayName = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Name"; + displayNameShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_NameShort"; + descriptionShort = "$STR_ACE_10Rnd_762x51_M993_AP_Mag_Description"; + initSpeed = 920; + }; class ACE_20Rnd_762x51_M118LR_Mag: 20Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x51_Ball_M118LR"; @@ -140,6 +166,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_20Rnd_762x51_M118LR_Mag_Description"; initSpeed = 780; }; + class ACE_20Rnd_762x51_Mk316_Mod_0_Mag: 20Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_Mk316_Mod_0"; + count = 20; + displayName = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Name"; + displayNameShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_NameShort"; + descriptionShort = "$STR_ACE_20Rnd_762x51_Mk316_Mod_0_Mag_Description"; + initSpeed = 790; + }; class ACE_20Rnd_762x51_Mk319_Mod_0_Mag: 20Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x51_Ball_Mk319_Mod_0"; @@ -148,6 +183,15 @@ class CfgMagazines { descriptionShort = "$STR_ACE_20Rnd_762x51_Mk319_Mod_0_Mag_Description"; initSpeed = 900; }; + class ACE_20Rnd_762x51_M993_AP_Mag: 20Rnd_762x51_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_762x51_Ball_M993_AP"; + count = 20; + displayName = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Name"; + displayNameShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_NameShort"; + descriptionShort = "$STR_ACE_20Rnd_762x51_M993_AP_Mag_Description"; + initSpeed = 920; + }; class ACE_20Rnd_762x67_Mk248_Mod_0_Mag: 20Rnd_762x51_Mag { author = "$STR_ACE_Common_ACETeam"; ammo = "ACE_762x67_Ball_Mk248_Mod_0"; @@ -211,7 +255,15 @@ class CfgMagazines { displayName = "$STR_ACE_5Rnd_127x99_Mag_Name"; displayNameShort = "$STR_ACE_5Rnd_127x99_Mag_NameShort"; descriptionShort = "$STR_ACE_5Rnd_127x99_Mag_Description"; - initSpeed = 853; + initSpeed = 900; + }; + class ACE_5Rnd_127x99_API_Mag: 5Rnd_127x108_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_127x99_API"; + displayName = "$STR_ACE_5Rnd_127x99_API_Mag_Name"; + displayNameShort = "$STR_ACE_5Rnd_127x99_API_Mag_NameShort"; + descriptionShort = "$STR_ACE_5Rnd_127x99_API_Mag_Description"; + initSpeed = 900; }; class ACE_5Rnd_127x99_AMAX_Mag: 5Rnd_127x108_Mag { author = "$STR_ACE_Common_ACETeam"; diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index b40ee12a725..89f5c266520 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -27,6 +27,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; @@ -37,12 +38,15 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; @@ -51,13 +55,18 @@ class CfgVehicles { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; @@ -69,6 +78,8 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); @@ -106,7 +117,6 @@ class CfgVehicles { class TransportMagazines { MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6); MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4); - MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,3); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); }; }; @@ -114,6 +124,7 @@ class CfgVehicles { class IND_Box_Base; class Box_IND_Wps_F: IND_Box_Base { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -127,6 +138,7 @@ class CfgVehicles { class Box_IND_Ammo_F: IND_Box_Base { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -135,6 +147,7 @@ class CfgVehicles { class FIA_Box_Base_F; class Box_FIA_Wps_F: FIA_Box_Base_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -142,6 +155,7 @@ class CfgVehicles { class Box_FIA_Ammo_F: FIA_Box_Base_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -149,6 +163,7 @@ class CfgVehicles { class I_supplyCrate_F: B_supplyCrate_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -156,6 +171,7 @@ class CfgVehicles { class IG_supplyCrate_F: ReammoBox_F { class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); }; @@ -176,8 +192,12 @@ class CfgVehicles { author = "$STR_ACE_Common_ACETeam"; class TransportMagazines { MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M993_AP_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M993_AP_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_M118LR_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_M118LR_Mag,4); + MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk316_Mod_0_Mag,4); + MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk316_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mk319_Mod_0_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,4); @@ -185,6 +205,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Mk248_Mod_1_Mag,4); MACRO_ADDMAGAZINE(ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4); + MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_M995_AP_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk262_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Mk318_mag,4); MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,4); @@ -197,6 +218,7 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4); MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_Mag,4); + MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_API_Mag,4); MACRO_ADDMAGAZINE(ACE_5Rnd_127x99_AMAX_Mag,4); }; }; diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index e6ce5d4bfd3..7e647d2605f 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -382,6 +382,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -401,6 +402,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -415,6 +417,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -429,6 +432,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -449,6 +453,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -463,6 +468,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -477,6 +483,7 @@ class CfgWeapons { "30Rnd_556x45_Stanag_Tracer_Red", "30Rnd_556x45_Stanag_Tracer_Green", "30Rnd_556x45_Stanag_Tracer_Yellow", + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", "ACE_30Rnd_556x45_Stanag_Mk262_mag", "ACE_30Rnd_556x45_Stanag_Mk318_mag", "ACE_30Rnd_556x45_Stanag_Tracer_Dim" @@ -503,8 +510,10 @@ class CfgWeapons { magazines[] = { "20Rnd_762x51_Mag", "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag", "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9724; @@ -528,6 +537,7 @@ class CfgWeapons { "5Rnd_127x108_Mag", "5Rnd_127x108_APDS_Mag", "ACE_5Rnd_127x99_Mag", + "ACE_5Rnd_127x99_API_Mag", "ACE_5Rnd_127x99_AMAX_Mag" }; initSpeed = -1.0; @@ -551,8 +561,10 @@ class CfgWeapons { magazines[] = { "20Rnd_762x51_Mag", "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag", "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9843; @@ -573,8 +585,10 @@ class CfgWeapons { magazines[] = { "20Rnd_762x51_Mag", "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", "ACE_20Rnd_762x51_M118LR_Mag", "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag", "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.9916; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 2f89e12d008..49b39c0af64 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -256,42 +256,6 @@ Calibro: 5.56x45 mm Traccianti IR-DIM<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - - 5.56mm 30Rnd AP Mag - 5,56 mm Páncéltörő 30-as Tár - 5,56 mm 30-Schuss-Magazin AP - Cargador de 30 balas AP de 5,56mm - Ch. 5,56mm 30Cps AP - Magazynek 5,56mm 30rd AP - 5.56mm 30ks AP Zásobník - Carregador de 30 projéteis AP de 5,56mm - Caricatore 5.56mm 30Rnd AP - Магазин из 30-ти 5,56 мм бронебойных - - - 5.56mm AP - 5,56 mm Páncéltörő - 5,56mm AP - 5,56mm AP - 5,56mm AP - 5,56mm AP - 5.56mm AP - 5,56mm AP - 5.56mm AP - 5,56 мм бронебойные - - - Caliber: 5.56x45 mm AP<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm Páncéltörő<br />Lövedékek: 30<br />Használható: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm AP<br />Patronen: 30<br />Eingesetzt von: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Balas: 30<br />Se usa en: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Cartouches: 30<br />Utilisé dans: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Kaliber: 5,56x45 mm AP<br />Pociski: 30<br />Używane w: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Ráže: 5.56x45 mm AP<br />Munice: 30<br />Použití: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibre: 5,56x45 mm AP<br />Projéteis: 30<br />Usado em: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Calibro: 5.56x45 mm AP<br />Munizioni: 30<br />In uso su: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - Калибр: 5,56x45 мм бронебойные<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR - 7.62mm 20rnd Tracer Mag @@ -401,42 +365,6 @@ Calibro: 7.62x51 mm Sil.<br />Munizioni: 20<br />In uso su: Mk18 ABR Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR - - 7.62mm 20Rnd AP Mag - 7,62 mm Páncéltörő 20-as Tár - 7,62 mm 20-Schuss-Magazin AP - Cargador de 20 balas AP de 7,62mm - Ch. 7,62mm 20Cps AP - Magazynek 7,62mm 20rd AP - 7.62mm 20ks AP Zásobník - Carregador de 20 projéteis AP de 7,62mm - Caricatore 7.62mm 20Rnd AP - Магазин из 20-ти 7,62 мм бронебойных - - - 7.62mm AP - 7,62 mm Páncéltörő - 7,62mm AP - 7,62mm AP - 7,62mm AP - 7,62mm AP - 7.62mm AP - 7,62mm AP - 7.62mm AP - 7,62 мм бронебойные - - - Caliber: 7.62x51 mm AP<br />Rounds: 20<br />Used in: Mk18 ABR - Kaliber: 7,62x51 mm Páncéltörő<br />Lövedékek: 20<br />Használható: Mk18 ABR - Kaliber: 7,62x51 mm AP<br />Patronen: 20<br />Eingesetzt von: EBR - Calibre: 7,62x51 mm AP<br />Balas: 20<br />Se usa en: Mk18 ABR - Calibre: 7,62x51 mm AP<br />Cartouches: 20<br />Utilisé dans: EBR - Kaliber: 7,62x51 mm AP<br />Pociski: 20<br />Używane w: Mk18 ABR - Ráže: 7.62x51 mm AP<br />Munice: 20<br />Použití: Mk18 ABR - Calibre: 7,62x51 mm AP<br />Projéteis: 20<br />Usado em: Mk18 ABR - Calibro: 7.62x51 mm AP<br />Munizioni: 20<br />In uso su: Mk18 ABR - Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR - .338 NM 130Rnd Tracer Belt @@ -564,31 +492,6 @@ Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus - - 9.3mm 10Rnd AP Mag - 9,3mm 10-Schuss-Magazin Hartkern - Magazynek 9,3mm 10rd AP - Chargeur 9.3mm 10Cps AP - Cargador de 10 balas AP de 9.3mm - Магазин из 10-ти 9,3 мм бронебойных - - - 9.3mm AP - 9,3mm AP - 9,3mm AP - 9.3mm AP - 9.3mm AP - 9.3mm AP - 9,3 мм бронебойные - - - Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus - Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus - Kaliber: 9,3x64 mm AP<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm AP<br />Cartouches: 10<br />Utilisé dans: Cyrus - Calibre: 9.3x64mm AP<br />Balas: 10<br />Se usa en: Cyrus - Калибр: 9,3x64 мм бронебойные<br />Патронов: 10<br />Используются с: Cyrus - 9.3mm 150Rnd Tracer Belt @@ -781,7 +684,7 @@ 5.56mm Mk262 5,56mm Mk262 5.56mm Mk262 - 5.56mm (Mk262) + 5.56mm Mk262 5,56 мм Mk262 @@ -793,16 +696,16 @@ 5.56mm 30Rnd Mag (Mk318) - Magazynek 5,56mm 30rd Mk318 + Magazynek 5,56mm 30rd (Mk318) 5.56mm 30Cps (Mk318) Cargador de 30 balas de 5.56mm (Mk318) - Магазин из 30-ти 5.56 мм Mk318 + Магазин из 30-ти 5.56 мм (Mk318) 5.56mm Mk318 5,56mm Mk318 5.56mm Mk318 - 5.56mm (Mk318) + 5.56mm Mk318 5.56 мм Mk318 @@ -812,6 +715,27 @@ Calibre: 5.56x45 mm NATO (Mk318)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30 + + 5.56mm 30Rnd Mag (M995 AP) + Magazynek 5,56mm 30rd (M995 AP) + 5.56mm 30Cps (M995 AP) + Cargador de 30 balas de 5.56mm (M995 AP) + Магазин из 30-ти 5.56 мм (M995 AP) + + + 5.56mm AP + 5,56mm AP + 5.56mm AP + 5.56mm AP + 5.56 мм AP + + + Caliber: 5.56x45 mm NATO (M995 AP)<br />Rounds: 30 + Kaliber: 5,56x45 mm NATO (M995 AP)<br />Pociski: 30 + Calibre: 5.56x45 mm NATO (M995 AP)<br />Cartouches: 30 + Calibre: 5.56x45 mm NATO (M995 AP)<br />Balas: 30 + Калибр: 5,56x45 мм NATO (M995 AP)<br />Патронов: 30 + 7.62mm 10Rnd Mag (M118LR) Magazynek 7,62mm 10rd (M118LR) @@ -854,6 +778,48 @@ Calibre: 7.62x51 mm NATO (M118LR)<br />Balas: 20 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 20 + + 7.62mm 10Rnd Mag (Mk316 Mod 0) + Magazynek 7,62mm 10rd (Mk316 Mod 0) + 7.62mm 10Cps (Mk316 Mod 0) + Cargador de 10 balas de 7.62mm (Mk316 Mod 0) + Магазин из 10-ти 7,62 мм (Mk316 Mod 0) + + + 7.62mm Mk316 + 7,62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7,62 мм Mk316 + + + Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 10 + Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 10 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 10 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 10 + Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10 + + + 7.62mm 20Rnd Mag (Mk316 Mod 0) + Magazynek 7,62mm 20rd (Mk316 Mod 0) + 7.62mm 20Cps (Mk316 Mod 0) + Cargador de 20 balas de 7.62mm (Mk316 Mod 0) + Магазин из 20-ти 7,62 мм (Mk316 Mod 0) + + + 7.62mm Mk316 + 7,62mm Mk316 + 7.62mm Mk316 + 7.62mm Mk316 + 7,62 мм Mk316 + + + Caliber: 7.62x51 mm NATO (Mk316 Mod 0)<br />Rounds: 20 + Kaliber: 7,62x51 mm NATO (Mk316 Mod 0)<br />Pociski: 20 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Cartouches: 20 + Calibre: 7.62x51 mm NATO (Mk316 Mod 0)<br />Balas: 20 + Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20 + 7.62mm 10Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 10rd (Mk319 Mod 0) @@ -896,6 +862,48 @@ Calibre: 7.62x51 mm NATO (Mk319 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20 + + 7.62mm 10Rnd Mag (M993 AP) + Magazynek 7,62mm 10rd (M993 AP) + 7.62mm 10Cps (M993 AP) + Cargador de 10 balas de 7.62mm (M993 AP) + Магазин из 10-ти 7,62 мм (M993 AP) + + + 7.62mm AP + 7,62mm AP + 7.62mm AP + 7.62mm AP + 7,62mm AP + + + Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 10 + Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 10 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 10 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 10 + Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 10 + + + 7.62mm 20Rnd Mag (M993 AP) + Magazynek 7,62mm 20rd (M993 AP) + 7.62mm 20Cps (M993 AP) + Cargador de 20 balas de 7.62mm (M993 AP) + Магазин из 20-ти 7,62 мм (M993 AP) + + + 7.62mm AP + 7,62mm AP + 7.62mm AP + 7.62mm AP + 7,62 мм AP + + + Caliber: 7.62x51 mm NATO (M993 AP)<br />Rounds: 20 + Kaliber: 7,62x51 mm NATO (M993 AP)<br />Pociski: 20 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Cartouches: 20 + Calibre: 7.62x51 mm NATO (M993 AP)<br />Balas: 20 + Калибр: 7,62x51 мм NATO (M993 AP)<br />Патронов: 20 + 7.62mm 20Rnd Mag (Mk248 Mod 0) Magazynek 7,62mm 20rd (Mk248 Mod 0) @@ -1056,6 +1064,24 @@ Kaliber: 12,7x99 mm<br />Pociski: 5 Калибр: 12,7x99 мм<br />Патронов: 5 + + 12.7x99mm API 5Rnd Mag + 12.7x99mm API 5Cps + Cargador de 5 balas de 12.7x99mm API + Magazynek 12,7x99mm API 5rd + + + 12.7mm API + 12.7mm API + 12.7mm API + 12,7mm API + + + Caliber: 12.7x99mm API<br />Rounds: 5 + Calibre: 12.7x99mm API<br />Cartouches: 5 + Calibre: 12.7x99mm API<br />Balas: 5 + Kaliber: 12,7x99 mm API<br />Pociski: 5 + 12.7x99mm 5Rnd Mag (AMAX) 12.7x99mm 5Rnd Mag (AMAX) From 00016097910ed6b4663016ec63c3671d1efe995c Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:44:55 +0200 Subject: [PATCH 133/276] Update CfgAmmo.hpp Added realistic tracer burn times for several ammo types: B_556x45_Ball (parent for several tracer rounds) ACE_545x39_Ball_7T3M B_762x51_Ball (parent for several tracer rounds) ACE_762x54_Ball_7T2 ACE_762x39_Ball_57N231P Also changed color on russian tracer rounds from yellow to green, which is what they are in the real world. --- addons/ballistics/CfgAmmo.hpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 8660e416c99..abefc6a924c 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -23,6 +23,8 @@ class CfgAmmo { airFriction=-0.001265; hit=8; typicalSpeed=750; + tracerStartTime = 0.073; //M856 tracer burns out to 800m + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -89,13 +91,15 @@ class CfgAmmo { ACE_muzzleVelocities[]={780, 880, 920}; ACE_barrelLengths[]={10, 16.3, 20}; }; - class B_556x45_Ball_Tracer_Yellow; - class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Yellow { + class B_556x45_Ball_Tracer_Green; + class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green { airFriction=-0.001162; caliber=0.5; deflecting=18; hit=7; typicalSpeed=883; + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -163,6 +167,8 @@ class CfgAmmo { airFriction=-0.001035; typicalSpeed=833; hit=9; + tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; @@ -358,6 +364,8 @@ class CfgAmmo { caliber=0.9; hit=15; typicalSpeed=800; + tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds + tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -400,10 +408,12 @@ class CfgAmmo { ACE_muzzleVelocities[]={650, 716, 750}; ACE_barrelLengths[]={10, 16.3, 20}; }; - class ACE_762x39_Ball_57N231P : B_762x51_Tracer_Yellow { + class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green { airFriction=-0.0015168; hit=12; typicalSpeed=716; + tracerStartTime = 0.073; //57N231P tracer burns out to 800m + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From ae8a512e8fae2e60d231b9d278a92419eb4049c6 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:47:25 +0200 Subject: [PATCH 134/276] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index abefc6a924c..1bc9208395b 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -24,7 +24,7 @@ class CfgAmmo { hit=8; typicalSpeed=750; tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -98,8 +98,8 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -364,8 +364,8 @@ class CfgAmmo { caliber=0.9; hit=15; typicalSpeed=800; - tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds - tracerEndTime = 3; + tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds + tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -412,8 +412,8 @@ class CfgAmmo { airFriction=-0.0015168; hit=12; typicalSpeed=716; - tracerStartTime = 0.073; //57N231P tracer burns out to 800m - tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //57N231P tracer burns out to 800m + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From f0a1900ad400e7a23c92afaf8858d49da8abd995 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:53:42 +0200 Subject: [PATCH 135/276] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 1bc9208395b..a627f145cad 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -23,8 +23,8 @@ class CfgAmmo { airFriction=-0.001265; hit=8; typicalSpeed=750; - tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //M856 tracer burns out to 800m + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -99,7 +99,7 @@ class CfgAmmo { hit=7; typicalSpeed=883; tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -167,7 +167,7 @@ class CfgAmmo { airFriction=-0.001035; typicalSpeed=833; hit=9; - tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m + tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; @@ -365,7 +365,7 @@ class CfgAmmo { hit=15; typicalSpeed=800; tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds - tracerEndTime = 3; + tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -413,7 +413,7 @@ class CfgAmmo { hit=12; typicalSpeed=716; tracerStartTime = 0.073; //57N231P tracer burns out to 800m - tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From 5bfa97f490cf24588a13958819f50c69fcb7d166 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:55:26 +0200 Subject: [PATCH 136/276] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index a627f145cad..794f9fe6aa3 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -98,8 +98,8 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -168,7 +168,7 @@ class CfgAmmo { typicalSpeed=833; hit=9; tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; From 8d4fff63592a5c9d8720fa1353b8ae93bb177812 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:56:46 +0200 Subject: [PATCH 137/276] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 794f9fe6aa3..ddae9f76c74 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -98,8 +98,8 @@ class CfgAmmo { deflecting=18; hit=7; typicalSpeed=883; - tracerStartTime = 0.073; //7T3M tracer burns out to 850m - tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //7T3M tracer burns out to 850m + tracerEndTime = 1.736; //Time in seconds calculated with ballistics calculator ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -168,7 +168,7 @@ class CfgAmmo { typicalSpeed=833; hit=9; tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; From 91dfd9802ab577e71dec35f871b981058d205efb Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Thu, 23 Apr 2015 13:58:42 +0200 Subject: [PATCH 138/276] Update CfgAmmo.hpp --- addons/ballistics/CfgAmmo.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index ddae9f76c74..f04eea838d7 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -23,8 +23,8 @@ class CfgAmmo { airFriction=-0.001265; hit=8; typicalSpeed=750; - tracerStartTime = 0.073; //M856 tracer burns out to 800m - tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //M856 tracer burns out to 800m + tracerEndTime = 1.579; //Time in seconds calculated with ballistics calculator ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -167,8 +167,8 @@ class CfgAmmo { airFriction=-0.001035; typicalSpeed=833; hit=9; - tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m - tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //Based on the British L5A1 which burns out to 1000m + tracerEndTime = 2.058; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; @@ -364,7 +364,7 @@ class CfgAmmo { caliber=0.9; hit=15; typicalSpeed=800; - tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds + tracerStartTime = 0.073; //Based on the 7T2 which burns three seconds tracerEndTime = 3; ACE_caliber=0.312; ACE_bulletLength=1.14; @@ -412,8 +412,8 @@ class CfgAmmo { airFriction=-0.0015168; hit=12; typicalSpeed=716; - tracerStartTime = 0.073; //57N231P tracer burns out to 800m - tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator + tracerStartTime = 0.073; //57N231P tracer burns out to 800m + tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; From b0eadf83c75f2f41de5856836bb4416be95d4e13 Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 14:04:01 +0200 Subject: [PATCH 139/276] Fixed incorrect typicalSpeed --- addons/ballistics/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index eb4d15cb755..a31d4b0946b 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -263,7 +263,7 @@ class CfgAmmo { airFriction=-0.000535; caliber=1; hit=6; - typicalSpeed=790; + typicalSpeed=320; ACE_caliber=0.308; ACE_bulletLength=1.340; ACE_bulletMass=200; From 24efbf731d2fe322f236c4e5f7f538dce7fb5286 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Thu, 23 Apr 2015 15:46:50 +0200 Subject: [PATCH 140/276] Convert frag config entry names to lowercase --- addons/frag/CfgAmmo.hpp | 86 +++++++++---------- addons/frag/functions/fnc_trackFragRound.sqf | 4 +- .../framework/fragmentation-configuration.md | 20 ++--- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 94b4e5dbb65..9d348610986 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -6,15 +6,15 @@ 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; + // GVAR(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; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 140000; + GVAR(charge) = 87000; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; sideAirFriction = 0.04; airFriction = 0.04; laserLock = 0; @@ -23,90 +23,90 @@ class CfgAmmo { class GrenadeBase; class Grenade; class GrenadeHand: Grenade { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; + GVAR(skip) = 0; + GVAR(force) = 1; // This is a good high-drag frag type for grenades. - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; + GVAR(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 + GVAR(metal) = 210; // metal in grams + GVAR(charge) = 185; // explosive in grams + GVAR(gurney_c) = 2843; // Gurney velocity constant for explosive type. See: http://en.wikipedia.org/wiki/Gurney_equations + GVAR(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; + GVAR(skip) = 1; }; class SmokeShell: GrenadeHand { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; class RocketBase; //class R_Hydra_HE: RocketBase { - // ACE_FRAG_SKIP = 1; + // GVAR(skip) = 1; //}; //class R_57mm_HE: RocketBase { - // ACE_FRAG_SKIP = 1; + // GVAR(skip) = 1; //}; class R_80mm_HE: RocketBase { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; //class R_S8T_AT: RocketBase { - // ACE_FRAG_SKIP = 1; + // GVAR(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; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 140000; + GVAR(charge) = 87000; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; }; class G_40mm_HE: GrenadeBase { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; + GVAR(skip) = 0; + GVAR(force) = 1; }; class ACE_G_40mm_HEDP: G_40mm_HE { - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - ACE_FRAG_METAL = 200; - ACE_FRAG_CHARGE = 45; - ACE_FRAG_GURNEY_C = 2830; - ACE_FRAG_GURNEY_K = 3/5; + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; + GVAR(metal) = 200; + GVAR(charge) = 45; + GVAR(gurney_c) = 2830; + GVAR(gurney_k) = 3/5; }; class ACE_G_40mm_HE: ACE_G_40mm_HEDP { - ACE_FRAG_CLASSES[] = {"ACE_frag_tiny_HD"}; - ACE_FRAG_METAL = 200; - ACE_FRAG_CHARGE = 32; - ACE_FRAG_GURNEY_C = 2700; - ACE_FRAG_GURNEY_K = 3/5; + GVAR(classes)[] = {"ACE_frag_tiny_HD"}; + GVAR(metal) = 200; + GVAR(charge) = 32; + GVAR(gurney_c) = 2700; + GVAR(gurney_k) = 3/5; }; class ACE_G_40mm_Practice: ACE_G_40mm_HE { - ACE_FRAG_SKIP = 1; + GVAR(skip) = 1; }; class ACE_G40mm_HE_VOG25P: G_40mm_HE { - ACE_FRAG_SKIP = 0; - ACE_FRAG_FORCE = 1; + GVAR(skip) = 0; + GVAR(force) = 1; }; //class R_SMAW_HEDP; //class R_MEEWS_HEDP : R_SMAW_HEDP { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.2; + // GVAR(force) = 1; + // GVAR(multiplier) = 1.2; //}; //class MissileBase; //class M_Hellfire_AT: MissileBase { - // ACE_FRAG_FORCE = 1; - // ACE_FRAG_MULTIPLIER = 1.75; + // GVAR(force) = 1; + // GVAR(multiplier) = 1.75; //}; /* diff --git a/addons/frag/functions/fnc_trackFragRound.sqf b/addons/frag/functions/fnc_trackFragRound.sqf index 586bbc01661..43584481882 100644 --- a/addons/frag/functions/fnc_trackFragRound.sqf +++ b/addons/frag/functions/fnc_trackFragRound.sqf @@ -15,11 +15,11 @@ 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"); + _skip = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(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"); + _force = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(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; diff --git a/documentation/framework/fragmentation-configuration.md b/documentation/framework/fragmentation-configuration.md index 1372b2b69a1..c8a64b2db46 100644 --- a/documentation/framework/fragmentation-configuration.md +++ b/documentation/framework/fragmentation-configuration.md @@ -15,15 +15,15 @@ The system for the end-developer is easy to use, and only requires minimal resea Below is an example set of explosives configuration properties for sys_frag (in this case an M67 hand grenade): ```c++ -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 +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 ``` -`ACE_FRAG_METAL` is the amount of metal being fragmented (generally taken as the entire weight of the warhead, though in some cases you might want to only include the fragmentation jacket or body. `ACE_FRAG_CHARGE` is the amount of explosive filler in the warhead. `ACE_FRAG_METAL` and `ACE_FRAG_CHARGE` are dimensionless values, as long as they are both in the same unit (for example kg/kg g/g lbs/lbs). +`ace_frag_metal` is the amount of metal being fragmented (generally taken as the entire weight of the warhead, though in some cases you might want to only include the fragmentation jacket or body. `ace_frag_charge` is the amount of explosive filler in the warhead. `ace_frag_metal` and `ace_frag_charge` are dimensionless values, as long as they are both in the same unit (for example kg/kg g/g lbs/lbs). -`ACE_FRAG_GURNEY_C` is the Gurney constant for explosive force. You can find a list of common explosive types below. If you can not find it here, or want more accurate numbers, just google the type of explosive and Gurney constant and you can find substantial information. This is *NOT* the detonation velocity of the explosive, do not confuse them! +`ace_frag_gurney_c` is the Gurney constant for explosive force. You can find a list of common explosive types below. If you can not find it here, or want more accurate numbers, just google the type of explosive and Gurney constant and you can find substantial information. This is *NOT* the detonation velocity of the explosive, do not confuse them! | Type | Speed | |------------------|----------| @@ -42,7 +42,7 @@ ACE_FRAG_GURNEY_K = 3/5; // Gurney shape factor, in this case a sphere. See: ht |Tritonal | 2320 m/s | -`ACE_FRAG_GURNEY_K` is the shape factor for the explosive configuration. You should choose it based on the general configuration of explosives/metal in the warhead. Most grenades for example are a sphere. Artillery and aircraft bombs are a cylinder. Mines generally a flat plate. Below is a list of the three common shapes and their factors. +`ace_frag_gurney_k` is the shape factor for the explosive configuration. You should choose it based on the general configuration of explosives/metal in the warhead. Most grenades for example are a sphere. Artillery and aircraft bombs are a cylinder. Mines generally a flat plate. Below is a list of the three common shapes and their factors. ``` Sphere = 3/5 @@ -52,7 +52,7 @@ Plate = 3/5 There are other configurations but these are the most common. If you are interested in others check out the wikipedia link given above. Most of these will not correctly function in sys_frag though due to additional variables for the equation. -In addition to these variables there are different types of fragmentation fragments to choose from, and they can be defined in the config value `ACE_FRAG_CLASSES[]`. Below are a list of the types. +In addition to these variables there are different types of fragmentation fragments to choose from, and they can be defined in the config value `ace_frag_classes[]`. Below are a list of the types. ``` ACE_frag_tiny @@ -71,6 +71,6 @@ The tinier the piece of fragmentation the shorter the distance of travel. The `_ The final information needed is a couple of entries for forcing or ignoring fragmentation for this ammo. -If you set `ACE_FRAG_SKIP` to 1 then you will skip fragmentation for ammo of this type. This is useful for things that might cause high network load, such as FFAR rockets, or possibly even 40mm grenades from AGLs. Experimentation under network conditions is required. +If you set `ace_frag_skip` to 1 then you will skip fragmentation for ammo of this type. This is useful for things that might cause high network load, such as FFAR rockets, or possibly even 40mm grenades from AGLs. Experimentation under network conditions is required. -If you set `ACE_FRAG_FORCE` to 1 it will force the fragmentation system to use frag on this ammo, ignoring sys_frags internal qualifications based on hit values. +If you set `ace_frag_force` to 1 it will force the fragmentation system to use frag on this ammo, ignoring sys_frags internal qualifications based on hit values. From ddf62b6db4dc58baefa1167bc3654e0b627c77fd Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 16:08:02 +0200 Subject: [PATCH 141/276] Added missing privates --- addons/weather/functions/fnc_serverController.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index c4550e3c134..87350c2e77b 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,7 +11,7 @@ */ #include "script_component.hpp" -private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time"]; +private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; // Rain simulation if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { From 082d7543f80ac6c474d472014d984c50601aa366 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 09:36:23 -0700 Subject: [PATCH 142/276] The keys folder containing public keys is now properly in the release @ace folder. #816 --- tools/make.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/make.py b/tools/make.py index 440ab61a0d4..ec2b5c3292c 100644 --- a/tools/make.py +++ b/tools/make.py @@ -716,15 +716,15 @@ def main(argv): print("Copying public key to release directory.") try: - os.makedirs(os.path.join(module_root, release_dir, "Keys")) + os.makedirs(os.path.join(module_root, release_dir, project, "keys")) except: pass - shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, "Keys", key_name + ".bikey")) + shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", key_name + ".bikey")) except: - raise print_error("Could not copy key to release directory.") + raise else: print_green("\nNOTE: Using key " + os.path.join(module_root, key_name + ".biprivatekey")) From d1b6dfa5c7eb11a48cd084eeead0a671177a46c7 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 10:12:28 -0700 Subject: [PATCH 143/276] Private key creation folder is now P:\private_keys by default. #816 --- tools/make.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/make.py b/tools/make.py index ec2b5c3292c..4cb6be6daec 100644 --- a/tools/make.py +++ b/tools/make.py @@ -587,6 +587,9 @@ def main(argv): # Private key path key = cfg.get(make_target, "key", fallback=None) + # Private key creation directory + private_key_path = cfg.get(make_target, "private_key_path", fallback=os.path.join(work_drive, "private_keys")) + # Project prefix (folder path) prefix = cfg.get(make_target, "prefix", fallback="") @@ -704,9 +707,16 @@ def main(argv): if new_key: if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")): print_yellow("\nRequested key does not exist.") + try: + os.makedirs(private_key_path) + except: + pass + curDir = os.getcwd() + os.chdir(private_key_path) ret = subprocess.call([dscreatekey, key_name]) # Created in make_root + os.chdir(curDir) if ret == 0: - print_green("Created: " + os.path.join(module_root, key_name + ".biprivatekey")) + print_green("Created: " + os.path.join(private_key_path, key_name + ".biprivatekey")) print("Removing any old signature keys...") purge(os.path.join(module_root, release_dir, project, "Addons"), "^.*\.bisign$","*.bisign") else: @@ -720,16 +730,16 @@ def main(argv): except: pass - shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", key_name + ".bikey")) + shutil.copyfile(os.path.join(private_key_path, key_name + ".bikey"), os.path.join(module_root, release_dir, project, "keys", key_name + ".bikey")) except: print_error("Could not copy key to release directory.") raise else: - print_green("\nNOTE: Using key " + os.path.join(module_root, key_name + ".biprivatekey")) + print_green("\nNOTE: Using key " + os.path.join(private_key_path, key_name + ".biprivatekey")) - key = os.path.join(module_root, key_name + ".biprivatekey") + key = os.path.join(private_key_path, key_name + ".biprivatekey") # For each module, prep files and then build. From 1bf043f9f86289c4c54fbd50abcc6dfc5136135a Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 10:16:28 -0700 Subject: [PATCH 144/276] Remove all old signature keys for optionals and keys folders. #815 --- tools/make.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/make.py b/tools/make.py index 4cb6be6daec..c6594b5f71a 100644 --- a/tools/make.py +++ b/tools/make.py @@ -719,6 +719,8 @@ def main(argv): print_green("Created: " + os.path.join(private_key_path, key_name + ".biprivatekey")) print("Removing any old signature keys...") purge(os.path.join(module_root, release_dir, project, "Addons"), "^.*\.bisign$","*.bisign") + purge(os.path.join(module_root, release_dir, project, "optionals"), "^.*\.bisign$","*.bisign") + purge(os.path.join(module_root, release_dir, project, "keys"), "^.*\.bikey$","*.bikey") else: print_error("Failed to create key!") From 785a40387afacc8e4dbb4cbbd36eced60c3616fa Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 10:28:02 -0700 Subject: [PATCH 145/276] Allow changing private_key creation folder from the default P:\private_keys #816 --- tools/make.cfg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/make.cfg b/tools/make.cfg index e89568d60ee..5e2d9d78da2 100644 --- a/tools/make.cfg +++ b/tools/make.cfg @@ -17,6 +17,11 @@ project = @ace # Default: None # key = D:\Program Files (x86)\Bohemia Interactive\Tools\DSSignFile Tools\keys\ace_preAlpha.biprivatekey +# Path to where private keys are automatically created if the command-line parameter "key" is used +# Make sure this isn't in your public repository! +# Default: \private_keys +# private_key_path = P:\private_keys + # If set to True, the make system will attempt to autodetect addons in the # current folder by looking for directories with 'config.cpp' in them. # Default: True From c5066e24c16299db71784f0854362ea11f8b52b7 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 10:31:17 -0700 Subject: [PATCH 146/276] Fix undefined work_drive variable for the default private_key_path #816 --- tools/make.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/make.py b/tools/make.py index c6594b5f71a..4a8836f7668 100644 --- a/tools/make.py +++ b/tools/make.py @@ -584,6 +584,9 @@ def main(argv): # Project name (with @ symbol) project = cfg.get(make_target, "project", fallback="@"+os.path.basename(os.getcwd())) + # BI Tools work drive on Windows + work_drive = cfg.get(make_target, "work_drive", fallback="P:\\") + # Private key path key = cfg.get(make_target, "key", fallback=None) @@ -607,9 +610,6 @@ def main(argv): # List of directories to ignore when detecting ignore = [x.strip() for x in cfg.get(make_target, "ignore", fallback="release").split(',')] - # BI Tools work drive on Windows - work_drive = cfg.get(make_target, "work_drive", fallback="P:\\") - # Which build tool should we use? build_tool = cfg.get(make_target, "build_tool", fallback="addonbuilder").lower() From 0323e17aac3b541743bc34f34ab2ef85499a4c50 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 10:40:39 -0700 Subject: [PATCH 147/276] Switch to lower case folder names. --- tools/make.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/make.py b/tools/make.py index 4a8836f7668..fe4bc5b1550 100644 --- a/tools/make.py +++ b/tools/make.py @@ -718,7 +718,7 @@ def main(argv): if ret == 0: print_green("Created: " + os.path.join(private_key_path, key_name + ".biprivatekey")) print("Removing any old signature keys...") - purge(os.path.join(module_root, release_dir, project, "Addons"), "^.*\.bisign$","*.bisign") + purge(os.path.join(module_root, release_dir, project, "addons"), "^.*\.bisign$","*.bisign") purge(os.path.join(module_root, release_dir, project, "optionals"), "^.*\.bisign$","*.bisign") purge(os.path.join(module_root, release_dir, project, "keys"), "^.*\.bikey$","*.bikey") else: @@ -780,7 +780,7 @@ def main(argv): if sigMissing: if key: print("Missing Signature key " + sigFile) - build_signature_file(os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")) + build_signature_file(os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")) # Skip everything else continue @@ -805,13 +805,13 @@ def main(argv): try: # Remove the old pbo, key, and log - old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*" + old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" files = glob.glob(old) for f in files: os.remove(f) if pbo_name_prefix: - old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*" + old = os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module) + "*" files = glob.glob(old) for f in files: os.remove(f) @@ -824,11 +824,11 @@ def main(argv): # Build the module into a pbo print_blue("Building: " + os.path.join(work_drive, prefix, module)) - print_blue("Destination: " + os.path.join(module_root, release_dir, project, "Addons")) + print_blue("Destination: " + os.path.join(module_root, release_dir, project, "addons")) # Make destination folder (if needed) try: - os.makedirs(os.path.join(module_root, release_dir, project, "Addons")) + os.makedirs(os.path.join(module_root, release_dir, project, "addons")) except: pass @@ -880,7 +880,7 @@ def main(argv): if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")): print_green("$NOBIN$ Found. Proceeding with non-binarizing!") - cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")] + cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"addons")] else: if check_external: @@ -902,7 +902,7 @@ def main(argv): # Prettyprefix rename the PBO if requested. if pbo_name_prefix: try: - os.rename(os.path.join(module_root, release_dir, project, "Addons", module+".pbo"), os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) + os.rename(os.path.join(module_root, release_dir, project, "addons", module+".pbo"), os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) except: raise print_error("Could not rename built PBO with prefix.") @@ -910,9 +910,9 @@ def main(argv): if key: print("Signing with " + key + ".") if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) else: - ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "addons", module + ".pbo")]) if ret == 0: build_successful = True @@ -952,7 +952,7 @@ def main(argv): # Call AddonBuilder os.chdir("P:\\") - cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "Addons"), "-clear", "-project="+work_drive] + cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "addons"), "-clear", "-project="+work_drive] if not do_binarize: cmd.append("-packonly") @@ -975,7 +975,7 @@ def main(argv): # Prettyprefix rename the PBO if requested. if pbo_name_prefix: try: - os.rename(os.path.join(make_root, release_dir, project, "Addons", module+".pbo"), os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo")) + os.rename(os.path.join(make_root, release_dir, project, "addons", module+".pbo"), os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix+module+".pbo")) except: raise print_error("Could not rename built PBO with prefix.") @@ -985,9 +985,9 @@ def main(argv): if key: print("Signing with " + key + ".") if pbo_name_prefix: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", pbo_name_prefix + module + ".pbo")]) else: - ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", module + ".pbo")]) + ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "addons", module + ".pbo")]) if ret == 0: build_successful = True @@ -1036,7 +1036,7 @@ def main(argv): try: # Delete all log files - for root, dirs, files in os.walk(os.path.join(module_root, release_dir, project, "Addons")): + for root, dirs, files in os.walk(os.path.join(module_root, release_dir, project, "addons")): for currentFile in files: if currentFile.lower().endswith("log"): os.remove(os.path.join(root, currentFile)) From f5e6da60a7567e42cd6e7ebe270d3786dd79c25f Mon Sep 17 00:00:00 2001 From: ulteq Date: Thu, 23 Apr 2015 19:59:57 +0200 Subject: [PATCH 148/276] Added optional rh_m4_comp with advanced ballistics configs --- optionals/rh_m4_comp/CfgAmmo.hpp | 206 ++++++++++++++++++++++ optionals/rh_m4_comp/CfgWeapons.hpp | 158 +++++++++++++++++ optionals/rh_m4_comp/config.cpp | 15 ++ optionals/rh_m4_comp/script_component.hpp | 5 + 4 files changed, 384 insertions(+) create mode 100644 optionals/rh_m4_comp/CfgAmmo.hpp create mode 100644 optionals/rh_m4_comp/CfgWeapons.hpp create mode 100644 optionals/rh_m4_comp/config.cpp create mode 100644 optionals/rh_m4_comp/script_component.hpp diff --git a/optionals/rh_m4_comp/CfgAmmo.hpp b/optionals/rh_m4_comp/CfgAmmo.hpp new file mode 100644 index 00000000000..c15e0e503a5 --- /dev/null +++ b/optionals/rh_m4_comp/CfgAmmo.hpp @@ -0,0 +1,206 @@ +class CfgAmmo { + + class Default; + class BulletCore; + class BulletBase; + class B_9x21_Ball; + class B_556x45_Ball; + class B_65x39_Caseless; + class B_762x51_Ball; + + class RH_9x19_B_M822: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_9x19_B_HP: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_9x19_B_HPSB: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.603; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.212}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={295, 310, 330}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_556x45_B_M855A1: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class RH_556x45_B_Mk318: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class RH_556x45_B_Mk262: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class RH_68x43_B_FMJ: B_65x39_Caseless + { + ACE_caliber=0.277; + ACE_bulletLength=0.959; + ACE_bulletMass=115; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.162}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={713, 785, 810, 850}; + ACE_barrelLengths[]={12, 16, 20, 24}; + }; + class RH_68x43_B_Match: B_65x39_Caseless + { + ACE_caliber=0.277; + ACE_bulletLength=1.250; + ACE_bulletMass=135; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.253}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 732, 750, 780}; + ACE_barrelLengths[]={12, 16, 20, 24}; + }; + class RH_762x35_B_FMJ: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.118; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.398}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={559, 609, 625}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class RH_762x35_B_Match: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.153; + ACE_bulletMass=125; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.349, 0.338, 0.330, 0.310}; + ACE_velocityBoundaries[]={792, 610, 488}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={572, 676, 700}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class RH_762x35_B_MSB: B_65x39_Caseless + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.608}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class RH_762x51_B_M80A1: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class RH_762x51_B_Mk316LR: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={775, 790, 805, 810}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class RH_762x51_B_Mk319: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=130; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={838, 892, 910}; + ACE_barrelLengths[]={13, 16, 20}; + }; + class RH_762x51_B_LFMJSB: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; +}; diff --git a/optionals/rh_m4_comp/CfgWeapons.hpp b/optionals/rh_m4_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..132859f7787 --- /dev/null +++ b/optionals/rh_m4_comp/CfgWeapons.hpp @@ -0,0 +1,158 @@ +class Mode_SemiAuto; +class Mode_Burst; +class Mode_FullAuto; +class SlotInfo; +class MuzzleSlot; +class CowsSlot; +class PointerSlot; +class UnderBarrelSlot; +class asdg_SlotInfo; +class asdg_FrontSideRail; +class asdg_OpticRail; +class asdg_OpticRail1913; +class asdg_OpticRail1913_short; +class asdg_MuzzleSlot_556; +class asdg_MuzzleSlot_762; +class asdg_MuzzleSlot_9MM; +class asdg_UnderSlot; + +class CfgWeapons +{ + class Rifle; + class UGL_F; + class Rifle_Base_F: Rifle + { + }; + class ItemCore; + class ItemInfo; + class InventoryItem_Base_F; + class InventoryMuzzleItem_Base_F; + class InventoryOpticsItem_Base_F; + class InventoryFlashLightItem_Base_F; + class Zasleh2; + class RH_ar10: Rifle_Base_F + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20.8; + }; + class RH_m110: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=20; + }; + class RH_Mk11: RH_m110 + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class RH_SR25EC: RH_m110 + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20; + }; + class RH_m4: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4_ris: RH_m4 + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4A1_ris: RH_M4_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_M4m: RH_M4A1_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=10.5; + }; + class RH_M4sbr: RH_M4A1_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=10.5; + }; + class RH_hb: Rifle_Base_F + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; + class RH_hb_b: RH_hb + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; + class RH_sbr9: Rifle_Base_F + { + ACE_barrelTwist=9.7; + ACE_barrelLength=9; + }; + class RH_M4A6: RH_M4A1_ris + { + ACE_barrelTwist=10; + ACE_barrelLength=14.5; + }; + class RH_M16a1: RH_m4 + { + ACE_barrelTwist=14; + ACE_barrelLength=20; + }; + class RH_M16A2: RH_m4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A4 : Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A3: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A4_m: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_M16A6: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class RH_Mk12mod1: RH_M16A4 + { + ACE_barrelTwist=7; + ACE_barrelLength=18; + }; + class RH_SAMR: RH_Mk12mod1 + { + ACE_barrelTwist=7.7; + ACE_barrelLength=20; + }; + class RH_Hk416: RH_M4A1_ris + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class RH_Hk416s: RH_M4sbr + { + ACE_barrelTwist=7; + ACE_barrelLength=10.4; + }; + class RH_Hk416c: RH_M4sbr + { + ACE_barrelTwist=7; + ACE_barrelLength=9; + }; + class RH_M27IAR: RH_Mk12mod1 + { + ACE_barrelTwist=7; + ACE_barrelLength=16.5; + }; +}; \ No newline at end of file diff --git a/optionals/rh_m4_comp/config.cpp b/optionals/rh_m4_comp/config.cpp new file mode 100644 index 00000000000..937097354f4 --- /dev/null +++ b/optionals/rh_m4_comp/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"asdg_jointrails","RH_m4_cfg"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/rh_m4_comp/script_component.hpp b/optionals/rh_m4_comp/script_component.hpp new file mode 100644 index 00000000000..4ab887e8892 --- /dev/null +++ b/optionals/rh_m4_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT rh_m4_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 8f79147323b5ac52c6704d0172b035b5ba771efb Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 11:22:00 -0700 Subject: [PATCH 149/276] Fix for missing release folder #815 --- tools/make.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/make.py b/tools/make.py index fe4bc5b1550..b1038771b89 100644 --- a/tools/make.py +++ b/tools/make.py @@ -686,6 +686,20 @@ def main(argv): print ("No cache found.") cache = {} + if not os.path.isdir(os.path.join(release_dir, project, "addons")): + try: + os.makedirs(os.path.join(release_dir, project, "addons")) + except: + print_error("Cannot create release directory") + raise + + if not os.path.isdir(os.path.join(release_dir, project, "keys")): + try: + os.makedirs(os.path.join(release_dir, project, "keys")) + except: + print_error("Cannot create release directory") + raise + #Temporarily copy optionals_root for building. They will be removed later. optionals_modules = [] optional_files = [] From 55732d42622776a285d43652c463e910a06ce260 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 23 Apr 2015 13:33:35 -0500 Subject: [PATCH 150/276] Text Shadow should have been black. --- addons/interact_menu/config.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index 433c2388c23..c79c9cd6d1a 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -50,13 +50,13 @@ class ACE_Settings { displayName = "$STR_ACE_Interact_Menu_ColorTextMin"; }; class GVAR(colorShadowMax) { - value[] = {1, 1, 1, 1}; + value[] = {0, 0, 0, 1}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorShadowMax"; }; class GVAR(colorShadowMin) { - value[] = {1, 1, 1, 0.25}; + value[] = {0, 0, 0, 0.25}; typeName = "COLOR"; isClientSettable = 1; displayName = "$STR_ACE_Interact_Menu_ColorShadowMin"; From 381b8c2431c600a6441a168504a51cd4726ad937 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 23 Apr 2015 20:46:28 +0200 Subject: [PATCH 151/276] first draft of medical system feature documentation --- documentation/feature/medical-system.md | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 documentation/feature/medical-system.md diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md new file mode 100644 index 00000000000..2824b35b3d1 --- /dev/null +++ b/documentation/feature/medical-system.md @@ -0,0 +1,71 @@ +--- +layout: wiki +title: Medical System +group: feature +order: 4 +parent: wiki +--- + +## 1. Overview +ACE provide users with a more realistic medical system and comes in both a basic and advanced version. This page will detail the differences between both systems and what they do. It is split into two parts; basic and advanced. Both versions have overlapse but each have their unique characteristics. + + +### Basic Medical +ACE's basic medical system is quite a bit more complex than Arma's default system, but not really difficult to grasp. ACE basic medical is a mixture between the ACE2 and AGM medical systems. + +The four main elements that basic medical introduces are: + +* damage divided into different zones (head, body, left & right arm, left & right leg) +* bleeding +* unconsciousness +* pain + +All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions, and their actions take more time as when performed by trained medics. + + +#### How it works + +When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain treshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once. + +To stop the bleeding, the combat life saver needs to bandage every wounded limb. Unconscious units can be "woken up" with Epipens. Should a unit have lost a lot of blood, it might be necessary to replace the lost blood with a blood bag before being able to wake unconscious units up. + +Should a unit be in pain, materializing itself with a chromatic aberration screen effect, he can be given morphine. + +### Advanced Medical +The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE/CMS medical system. It focuses on a more realistic model for injuries and treatment, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to not get shot. + +The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based of the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. + +Besides the 4 elements introduced by basic medical, advanced introduces the following: + +* More detailed wound system +* Accurate blood loss based upon sustained injuries +* Vitals, including heart rate and blood pressure +* Cardiac Arrest +* Various treatment methods such as CPR, different kinds of IVs and tourniquets +* A basic medication simulation + +#### How it works + +Same as with basic, when hit an injury is sustained. Different though is that the type of injury and the severity of it are based upon how the damage was done and what caused it. This affects both blood loss and immediate consequences, such as being knocked out or being killed right away. When a player has sustained an injury, this will be indicated by flashing red of the screen; this means the player is bleeding. + +##### Stopping bleeding +In order to stop the bleeding, all injuries on every bodypart requires treatment. This is done by either applying a tourniquet to legs or arms as a temporarly solution, or by using bandages to stop the bleeding as a more permament fix. + +##### Vitals +While a unit is bleeding however, the blood volume decreases which will result in a change of vitals. Depending on the factors such as current blood volume, the blood loss rate, medication used, the blood pressure will start to drop. To counter this drop, also based upon the previously mentioned factors and others, the heart rate will adjust accordingly to attempt to keep blood pressure at safe levels. This means that for any patient it is required to keep an eye on the vitals. This is done through the interacction system by selecting check pulse or blood pressure on either the arms or head. + +##### Medication +To stabalize the vitals and to counter for example pain, a player/medic can use medication. Advanced medical has 3 different medications available: +* Morphine +* Atropine +* Epinephrine + +Morphine is used to alleviate large amounts of pain. Has an effect similar to Heroin due to its opiate properties. Must only ever be given once, and only when bleeding has been reduced to a minimum. Morphine must never be given to a casualty with a low heart rate, as it can stop the heart. + +Epinephrine is used to increase heart rate and blood pressure and alleviate unconsciousness. Epinephrine is a synthetic form of Adrenaline, which is naturally produced in the body. It can also be applied to counter-act the effects of Atropine. Be careful though, as it may only be given once. + +_Epinephrine must never be given to a casualty with a high heart rate or blood pressure._ + +Atropine is a vagolytic and anticholinergic drug which in low dosages reduces heart rate but in high dosages increases it, countering effects of organophosphate poisoning (in NBC scenarios; anticholinesterase poisoning) and symptomatic bradycardia (in post-ROSC care and resuscitative medicine). + From 4f7141b6165ce83c16414b67f14ebde8e6f97d67 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 23 Apr 2015 20:48:28 +0200 Subject: [PATCH 152/276] adjusted headers --- documentation/feature/medical-system.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md index 2824b35b3d1..45a83da9252 100644 --- a/documentation/feature/medical-system.md +++ b/documentation/feature/medical-system.md @@ -10,7 +10,7 @@ parent: wiki ACE provide users with a more realistic medical system and comes in both a basic and advanced version. This page will detail the differences between both systems and what they do. It is split into two parts; basic and advanced. Both versions have overlapse but each have their unique characteristics. -### Basic Medical +## Basic Medical ACE's basic medical system is quite a bit more complex than Arma's default system, but not really difficult to grasp. ACE basic medical is a mixture between the ACE2 and AGM medical systems. The four main elements that basic medical introduces are: @@ -23,7 +23,7 @@ The four main elements that basic medical introduces are: All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions, and their actions take more time as when performed by trained medics. -#### How it works +### How it works When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain treshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once. @@ -31,7 +31,7 @@ To stop the bleeding, the combat life saver needs to bandage every wounded limb. Should a unit be in pain, materializing itself with a chromatic aberration screen effect, he can be given morphine. -### Advanced Medical +## Advanced Medical The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE/CMS medical system. It focuses on a more realistic model for injuries and treatment, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to not get shot. The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based of the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. @@ -45,7 +45,7 @@ Besides the 4 elements introduced by basic medical, advanced introduces the foll * Various treatment methods such as CPR, different kinds of IVs and tourniquets * A basic medication simulation -#### How it works +### How it works Same as with basic, when hit an injury is sustained. Different though is that the type of injury and the severity of it are based upon how the damage was done and what caused it. This affects both blood loss and immediate consequences, such as being knocked out or being killed right away. When a player has sustained an injury, this will be indicated by flashing red of the screen; this means the player is bleeding. From 0391408159e53adca24d6adb9c15dbbfb426db83 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Thu, 23 Apr 2015 20:49:05 +0200 Subject: [PATCH 153/276] added chapter numbering --- documentation/feature/medical-system.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md index 45a83da9252..33a7c4c322a 100644 --- a/documentation/feature/medical-system.md +++ b/documentation/feature/medical-system.md @@ -10,7 +10,7 @@ parent: wiki ACE provide users with a more realistic medical system and comes in both a basic and advanced version. This page will detail the differences between both systems and what they do. It is split into two parts; basic and advanced. Both versions have overlapse but each have their unique characteristics. -## Basic Medical +## 2. Basic Medical ACE's basic medical system is quite a bit more complex than Arma's default system, but not really difficult to grasp. ACE basic medical is a mixture between the ACE2 and AGM medical systems. The four main elements that basic medical introduces are: @@ -31,7 +31,7 @@ To stop the bleeding, the combat life saver needs to bandage every wounded limb. Should a unit be in pain, materializing itself with a chromatic aberration screen effect, he can be given morphine. -## Advanced Medical +## 3. Advanced Medical The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE/CMS medical system. It focuses on a more realistic model for injuries and treatment, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to not get shot. The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based of the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. From 79269db913dc1ef3706de9198090f6055648d0bb Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 14:35:33 -0700 Subject: [PATCH 154/276] Added a notification for the Check External References setting. --- tools/make.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/make.py b/tools/make.py index b1038771b89..beb30551948 100644 --- a/tools/make.py +++ b/tools/make.py @@ -560,6 +560,8 @@ def main(argv): else: check_external = False + print_yellow("\nCheck external references is set to " + str(check_external)) + # Get the directory the make script is in. make_root = os.path.dirname(os.path.realpath(__file__)) make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) From 898048eb95f1534524a6d67f2038973c5be42d98 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Thu, 23 Apr 2015 14:53:49 -0700 Subject: [PATCH 155/276] Moved "copy_important_files" call in front of make release and after building is done Moved "cleanup_optionals" call in front of make release and after building is done --- tools/make.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/make.py b/tools/make.py index beb30551948..597ccb314a4 100644 --- a/tools/make.py +++ b/tools/make.py @@ -1046,6 +1046,9 @@ def main(argv): print_green("\nDone.") + copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) + cleanup_optionals(optionals_modules) + # Make release if make_release: print_blue("\nMaking release: " + project + "-" + release_version + ".zip") @@ -1085,10 +1088,6 @@ def main(argv): except: print_error("Could not copy files. Is Arma 3 running?") - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) - cleanup_optionals(optionals_modules) - - if __name__ == "__main__": main(sys.argv) input("Press Enter to continue...") From e8a48fa81c34e52d67a64760dfa6ad876ccc1027 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Fri, 24 Apr 2015 01:54:36 +0200 Subject: [PATCH 156/276] PL translation fix Apparently mini-spike AT still wants to shoot down planes and choppers :) --- addons/realisticnames/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 1fcf116d1e5..341b2a383fb 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1135,7 +1135,7 @@ Mini-Spike (AT) Mini-Spike (PALR) Mini-Spike (PT) - Mini-Spike (AA) + Mini-Spike (AT) Mini-Spike (AT) Mini-Spike (Tankelhárító) Mini-Spike (AT) From c8563ce4846f8679fc4095b6300de6f4f0bb8fcd Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 24 Apr 2015 00:57:22 -0300 Subject: [PATCH 157/276] Add LOS check for actions points. Close #785 --- .../functions/fnc_renderBaseMenu.sqf | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf index 9a20962a8fc..a5214ddcbeb 100644 --- a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -41,9 +41,21 @@ if((count _this) > 2) then { }; }; -// For non-self actions, exit if the action is too far away +// For non-self actions, exit if the action is too far away or ocluded if (GVAR(openedMenuType) == 0 && vehicle ACE_player == ACE_player && - {(ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot")) distance _pos >= _distance}) exitWith {false}; + { + private ["_headPos","_actualDistance"]; + _headPos = ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot"); + _actualDistance = _headPos distance _pos; + + if (_actualDistance > _distance) exitWith {true}; + + if (_distance > 1.0) exitWith { + // If distance to action is greater than 1.0 m, check LOS + _line = [_headPos call EFUNC(common,positionToASL), _pos call EFUNC(common,positionToASL), _object, ACE_player]; + lineIntersects _line + }; + }) exitWith {false}; // Exit if the action is behind you _sPos = if (count _pos != 2) then { From e3a06999c3daff8f0956400ab9842a3976b14d8b Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Fri, 24 Apr 2015 00:57:49 -0300 Subject: [PATCH 158/276] Reduce MainActions distance for CAManBase from 5m to 4m --- addons/interaction/CfgVehicles.hpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index bd36f427035..0408192919d 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -27,7 +27,7 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { displayName = "$STR_ACE_Interaction_MainAction"; - distance = 5; + distance = 4; condition = QUOTE(true); statement = ""; icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa"; @@ -35,7 +35,6 @@ class CfgVehicles { class ACE_TeamManagement { displayName = "$STR_ACE_Interaction_TeamManagement"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); statement = ""; showDisabled = 0; @@ -45,7 +44,6 @@ class CfgVehicles { class ACE_JoinTeamRed { displayName = "$STR_ACE_Interaction_JoinTeamRed"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); showDisabled = 1; @@ -55,7 +53,6 @@ class CfgVehicles { }; class ACE_JoinTeamGreen { displayName = "$STR_ACE_Interaction_JoinTeamGreen"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; @@ -65,7 +62,6 @@ class CfgVehicles { }; class ACE_JoinTeamBlue { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; @@ -75,7 +71,6 @@ class CfgVehicles { }; class ACE_JoinTeamYellow { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; @@ -86,7 +81,6 @@ class CfgVehicles { class ACE_LeaveTeam { displayName = "$STR_ACE_Interaction_LeaveTeam"; - distance = 5; condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; @@ -98,7 +92,6 @@ class CfgVehicles { class ACE_JoinGroup { displayName = "$STR_ACE_Interaction_JoinGroup"; - distance = 5; condition = QUOTE(side group _player == side group _target && {group _player != group _target}); statement = QUOTE([_player] joinSilent group _target;); showDisabled = 0; @@ -109,7 +102,6 @@ class CfgVehicles { class ACE_GetDown { displayName = "$STR_ACE_Interaction_GetDown"; - distance = 5; condition = QUOTE([_target] call DFUNC(canInteractWithCivilian)); statement = QUOTE([_target] call DFUNC(getDown)); showDisabled = 0; @@ -117,7 +109,6 @@ class CfgVehicles { }; class ACE_SendAway { displayName = "$STR_ACE_Interaction_SendAway"; - distance = 5; condition = QUOTE([_target] call DFUNC(canInteractWithCivilian)); statement = QUOTE([_target] call DFUNC(sendAway)); showDisabled = 0; @@ -125,7 +116,6 @@ class CfgVehicles { }; class ACE_Pardon { displayName = "$STR_ACE_Interaction_Pardon"; - distance = 5; condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target}); statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc)); showDisabled = 0; From 01464399253ec24ab7eb2a66cc1927cd0763028f Mon Sep 17 00:00:00 2001 From: Glowbal Date: Fri, 24 Apr 2015 07:46:01 +0200 Subject: [PATCH 159/276] increasing the text box height #834 Temporary solution until we get something properly done. Ideally we would calculate the height of the box through the amount of characters. For that we would need a font with a consistent width across each character, or figure out the width for each character ourselves. --- addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf b/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf index e677cccdce5..c4ddb2d93d1 100644 --- a/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf +++ b/addons/magazinerepack/functions/fnc_magazineRepackFinish.sqf @@ -53,4 +53,4 @@ _structuredOutputText = _structuredOutputText + format ["" + (localize "STR_ACE_MagazineRepack_RepackedMagazinesCount") + ""), _fullMags, _partialMags]; -[parseText _structuredOutputText] call EFUNC(common,displayTextStructured); +[parseText _structuredOutputText, 2] call EFUNC(common,displayTextStructured); From 5a90ef62071882a530f9ceaee80b35f7aaa2b9d1 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:03:48 +0200 Subject: [PATCH 160/276] Added global variables (syncRain, syncWind, syncMisc) which give some control over the weather module: *Removed duplicate debug output --- addons/weather/CfgEventhandlers.hpp | 1 - addons/weather/XEH_postInit.sqf | 14 +++++++++----- addons/weather/XEH_preClientInit.sqf | 17 ----------------- .../weather/functions/fnc_serverController.sqf | 16 +++++++++------- addons/weather/functions/fnc_updateRain.sqf | 4 ++-- addons/weather/functions/fnc_updateWind.sqf | 4 +++- 6 files changed, 23 insertions(+), 33 deletions(-) delete mode 100644 addons/weather/XEH_preClientInit.sqf diff --git a/addons/weather/CfgEventhandlers.hpp b/addons/weather/CfgEventhandlers.hpp index c3f1f2ba0b2..842ad8e7bf1 100644 --- a/addons/weather/CfgEventhandlers.hpp +++ b/addons/weather/CfgEventhandlers.hpp @@ -1,6 +1,5 @@ class Extended_PreInit_EventHandlers { class ADDON { - clientInit = QUOTE(call COMPILE_FILE(XEH_preClientInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 04879971b42..546938448c4 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,6 +1,8 @@ #include "script_component.hpp" -GVAR(enableRain) = true; +GVAR(syncRain) = true; +GVAR(syncWind) = true; // Wind, Gusts, Waves +GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog GVAR(wind_period_start_time) = time; GVAR(rain_period_start_time) = time; @@ -8,10 +10,12 @@ GVAR(rain_period_start_time) = time; "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = time; }; "ACE_MISC_PARAMS" addPublicVariableEventHandler { - if !(isServer) then { - 30 setLightnings (ACE_MISC_PARAMS select 0); - 30 setRainbow (ACE_MISC_PARAMS select 1); - 30 setFog (ACE_MISC_PARAMS select 2); + if (!isServer) then { + if (GVAR(syncMisc)) then { + 30 setLightnings (ACE_MISC_PARAMS select 0); + 30 setRainbow (ACE_MISC_PARAMS select 1); + 30 setFog (ACE_MISC_PARAMS select 2); + }; GVAR(temperatureShift) = (ACE_MISC_PARAMS select 3); GVAR(badWeatherShift) = (ACE_MISC_PARAMS select 4); GVAR(humidityShift) = (ACE_MISC_PARAMS select 5); diff --git a/addons/weather/XEH_preClientInit.sqf b/addons/weather/XEH_preClientInit.sqf deleted file mode 100644 index b979521cddd..00000000000 --- a/addons/weather/XEH_preClientInit.sqf +++ /dev/null @@ -1,17 +0,0 @@ -#include "script_component.hpp" - - -FUNC(KEEPTIME) = { - 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); - }; -}; - -#ifdef DEBUG_MODE_FULL - [FUNC(KEEPTIME), 0.0, []] call CBA_fnc_addPerFrameHandler; -#endif diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 87350c2e77b..8b1ef46234e 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,12 +11,12 @@ */ #include "script_component.hpp" -private ["_i", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; +private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; // Rain simulation -if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { +if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { - if(overcast >= 0.7) then { + if (overcast >= 0.7) then { _lastRain = GVAR(current_rain); _rainOverCast = ((overcast-0.7)/0.3); GVAR(rain_next_period) = ceil((1+random(10))/GVAR(overcast_multiplier)); @@ -44,7 +44,7 @@ if(GVAR(rain_period_count) > GVAR(rain_next_period)) then { }; // Wind simulation -if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { +if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); GVAR(wind_period_count) = 0; @@ -89,9 +89,11 @@ if(GVAR(wind_period_count) > GVAR(wind_next_period)) then { publicVariable "ACE_WIND_PARAMS"; }; -// Sync misc. parameters -ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; -publicVariable "ACE_MISC_PARAMS"; + +if (GVAR(syncMisc)) then { + ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; + publicVariable "ACE_MISC_PARAMS"; +}; GVAR(rain_period_count) = GVAR(rain_period_count) + 1; GVAR(wind_period_count) = GVAR(wind_period_count) + 1; diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index 01e32e17341..55babfeeefe 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -11,9 +11,9 @@ */ #include "script_component.hpp" -private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; +if (!GVAR(syncRain)) exitWith {}; -if (!GVAR(enableRain)) exitWith {}; +private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; if (!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { _oldStrength = ACE_RAIN_PARAMS select 0; diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index e5a52348a86..bf73d5760d1 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -11,6 +11,8 @@ */ #include "script_component.hpp" +if (!GVAR(syncWind)) exitWith { ACE_wind = wind }; + ACE_wind = [] call FUNC(getWind); setWind [ACE_wind select 0, ACE_wind select 1, true]; 2 setGusts 0; @@ -18,4 +20,4 @@ setWind [ACE_wind select 0, ACE_wind select 1, true]; // Set waves: 0 when no wind, 1 when wind >= 16 m/s 1 setWaves (((vectorMagnitude ACE_wind) / 16.0) min 1.0); -//hintSilent format["Wind: %1\nACE_wind: %2\nDeviation: %3 (m/s)", wind, ACE_wind, Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000]; +TRACE_3("Wind/ACE_wind/Deviation(m/s)",wind,ACE_wind,Round((vectorMagnitude (ACE_wind vectorDiff wind)) * 1000) / 1000); From 50546646fac2fe83b2a39d81c945a3659c7546cc Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:05:13 +0200 Subject: [PATCH 161/276] Added missing rain_period_count reset to 0 --- addons/weather/functions/fnc_serverController.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 8b1ef46234e..4324f2e790b 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -16,10 +16,12 @@ private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVarianc // Rain simulation if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { + GVAR(rain_next_period) = ceil((1 + (random 10)) / GVAR(overcast_multiplier)); + GVAR(rain_period_count) = 0; + if (overcast >= 0.7) then { _lastRain = GVAR(current_rain); _rainOverCast = ((overcast-0.7)/0.3); - GVAR(rain_next_period) = ceil((1+random(10))/GVAR(overcast_multiplier)); GVAR(current_rain) = (GVAR(current_rain)+(((GVAR(current_rain)))*((_rainOverCast*(GVAR(overcast_multiplier)))/8)*GVAR(rain_current_range))); GVAR(current_rain) = (GVAR(current_rain) max 0.01) min 1; From 062aeae6e6c6129f8f0be00704da6280b6d44fe2 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:25:31 +0200 Subject: [PATCH 162/276] Fixed several bugs in the rain simulation: *Added missing rain initialization based on overcast value *Added proper fade out when the overcast changes from >=0.7 to <0.7 *Removed duplicate code --- .../functions/fnc_serverController.sqf | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 4324f2e790b..2d24af89ca7 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,7 +11,7 @@ */ #include "script_component.hpp" -private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_time", "_ratioMin", "_ratioMax"]; +private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; // Rain simulation if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { @@ -19,27 +19,30 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { GVAR(rain_next_period) = ceil((1 + (random 10)) / GVAR(overcast_multiplier)); GVAR(rain_period_count) = 0; + _lastRain = GVAR(current_rain); + if (overcast >= 0.7) then { - _lastRain = GVAR(current_rain); - _rainOverCast = ((overcast-0.7)/0.3); - - GVAR(current_rain) = (GVAR(current_rain)+(((GVAR(current_rain)))*((_rainOverCast*(GVAR(overcast_multiplier)))/8)*GVAR(rain_current_range))); - GVAR(current_rain) = (GVAR(current_rain) max 0.01) min 1; - - _transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20))+1; - GVAR(rain_current_range) = -1+(random 2); - - ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; - TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast); + _rainOverCast = (overcast - 0.7) / 0.3; + if (GVAR(current_rain) == 0) then { + // Initialize rain with a random strength depending on the current overcast value + GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; + }; + hintSilent format["%1, %2", ((_rainOverCast * GVAR(overcast_multiplier)) / 8), GVAR(rain_current_range)]; + GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * GVAR(overcast_multiplier)) / 8) * GVAR(rain_current_range); + GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; + + GVAR(rain_current_range) = -1 + (random 2); } else { - GVAR(current_rain) = 0; - _lastRain = GVAR(current_rain); _rainOverCast = 1; - _transitionTime = (_rainOverCast*5)+(random (_rainOverCast*20))+1; - - ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; - TRACE_4("",_lastRain,_rainOverCast,_transitionTime, overcast); + + GVAR(current_rain) = 0; }; + + _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); + + systemChat format["%1, %2, %3", _lastRain, GVAR(current_rain), _transitionTime]; + ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; + TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); GVAR(rain_period_start_time) = time; publicVariable "ACE_RAIN_PARAMS"; @@ -74,15 +77,15 @@ if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { _windSpeedChange = _windSpeed - GVAR(current_wind_speed); }; - _time = GVAR(wind_next_period) * GVAR(serverUpdateInterval); + _transitionTime = GVAR(wind_next_period) * GVAR(serverUpdateInterval); - TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_time); + TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_transitionTime); ACE_WIND_PARAMS = [GVAR(current_wind_direction), _windDirectionChange, GVAR(current_wind_speed), _windSpeedChange, - _time]; + _transitionTime]; GVAR(current_wind_direction) = _windDirection; GVAR(current_wind_speed) = _windSpeed; From b3f4bf306da607fa690cac7d534a6d001dd12d30 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:46:33 +0200 Subject: [PATCH 163/276] Moved the global weather controls into preInit --- addons/weather/XEH_postInit.sqf | 4 ---- addons/weather/XEH_preInit.sqf | 8 ++++++++ addons/weather/functions/fnc_serverController.sqf | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 546938448c4..05cd29c093b 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,9 +1,5 @@ #include "script_component.hpp" -GVAR(syncRain) = true; -GVAR(syncWind) = true; // Wind, Gusts, Waves -GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog - GVAR(wind_period_start_time) = time; GVAR(rain_period_start_time) = time; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 70c9341d0f6..401ae155c1f 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -15,6 +15,14 @@ PREP(updateRain); PREP(updateTemperature); PREP(updateWind); +// Control server side weather propagation +GVAR(enableServerController) = true; + +// Control client side weather effects +GVAR(syncRain) = true; +GVAR(syncWind) = true; // Wind, Gusts, Waves +GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog + // Make sure this data is read before client/server postInit call FUNC(getMapData); diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 2d24af89ca7..50dcdd82289 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -11,6 +11,8 @@ */ #include "script_component.hpp" +if (!GVAR(enableServerController)) exitWith {}; + private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; // Rain simulation @@ -27,7 +29,7 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { // Initialize rain with a random strength depending on the current overcast value GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; }; - hintSilent format["%1, %2", ((_rainOverCast * GVAR(overcast_multiplier)) / 8), GVAR(rain_current_range)]; + GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * GVAR(overcast_multiplier)) / 8) * GVAR(rain_current_range); GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; From b3bf44fa1e5a6139cd1655837293a1b5094f975f Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 10:58:55 +0200 Subject: [PATCH 164/276] Code cleanup --- addons/weather/functions/fnc_getWind.sqf | 2 +- .../functions/fnc_serverController.sqf | 1 - addons/weather/functions/fnc_updateRain.sqf | 19 +++++++++---------- addons/weather/functions/fnc_updateWind.sqf | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf index 95d97d98b35..a23394e9922 100644 --- a/addons/weather/functions/fnc_getWind.sqf +++ b/addons/weather/functions/fnc_getWind.sqf @@ -1,5 +1,5 @@ /* - * Author: ACE2 Team + * Author: ACE2 Team, Ruthberg * * Calculate current wind locally from the data broadcasted by the server * diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index 50dcdd82289..a9ceca38157 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -42,7 +42,6 @@ if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); - systemChat format["%1, %2, %3", _lastRain, GVAR(current_rain), _transitionTime]; ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index 55babfeeefe..d2400934438 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -1,5 +1,5 @@ /* - * Author: ACE2 Team + * Author: ACE2 Team, Ruthberg * * Updates rain based on ACE_RAIN_PARAMS * @@ -13,14 +13,13 @@ if (!GVAR(syncRain)) exitWith {}; -private ["_oldStrength", "_rainStrength", "_transitionTime", "_periodPosition", "_periodPercent"]; +if (!isNil "ACE_RAIN_PARAMS") then { + + EXPLODE_3_PVT(ACE_RAIN_PARAMS,_oldRain,_newRain,_period); + + private ["_periodPosition", "_periodPercent"]; + _periodPosition = (time - GVAR(rain_period_start_time)) min _period; + _periodPercent = (_periodPosition / _period) min 1; -if (!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then { - _oldStrength = ACE_RAIN_PARAMS select 0; - _rainStrength = ACE_RAIN_PARAMS select 1; - _transitionTime = ACE_RAIN_PARAMS select 2; - _periodPosition = (time - GVAR(rain_period_start_time)) min _transitionTime; - _periodPercent = (_periodPosition/_transitionTime) min 1; - - 0 setRain ((_periodPercent*(_rainStrength-_oldStrength))+_oldStrength); + 0 setRain (_oldRain + (_newRain - _oldRain) * _periodPercent); }; diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index bf73d5760d1..06bb57d093e 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -1,5 +1,5 @@ /* - * Author: ACE2 Team + * Author: ACE2 Team, Ruthberg * * Updates wind, gusts and waves based on ACE_wind * From eb88f94cf7ccc9e6c68d15d5723b8580c8f74410 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 11:53:06 +0200 Subject: [PATCH 165/276] Removed unused privates --- addons/advanced_ballistics/functions/fnc_handleFired.sqf | 2 +- addons/kestrel4500/functions/fnc_collectData.sqf | 2 +- addons/kestrel4500/functions/fnc_displayKestrel.sqf | 5 ++--- addons/kestrel4500/functions/fnc_generateOutputData.sqf | 2 +- addons/weather/functions/fnc_displayWindInfo.sqf | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 54a7f2d5b0b..0180245f256 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -19,7 +19,7 @@ */ #include "script_component.hpp" -private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_bulletWeight", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"]; +private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"]; _unit = _this select 0; _weapon = _this select 1; _mode = _this select 3; diff --git a/addons/kestrel4500/functions/fnc_collectData.sqf b/addons/kestrel4500/functions/fnc_collectData.sqf index bbad8619bc2..a812ad0f7c8 100644 --- a/addons/kestrel4500/functions/fnc_collectData.sqf +++ b/addons/kestrel4500/functions/fnc_collectData.sqf @@ -14,7 +14,7 @@ */ #include "script_component.hpp" -private ["_playerDir", "_windSpeed", "_windDir", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"]; +private ["_playerDir", "_windSpeed", "_crosswind", "_headwind", "_humidity", "_temperature", "_humidity", "_barometricPressure", "_altitude"]; if (isNil QGVAR(MIN) || isNil QGVAR(MAX)) then { _temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL ACE_player) select 2); diff --git a/addons/kestrel4500/functions/fnc_displayKestrel.sqf b/addons/kestrel4500/functions/fnc_displayKestrel.sqf index 2c1241bb6c9..8eb2cea0ada 100644 --- a/addons/kestrel4500/functions/fnc_displayKestrel.sqf +++ b/addons/kestrel4500/functions/fnc_displayKestrel.sqf @@ -42,9 +42,7 @@ if (GVAR(Kestrel4500) && dialog) then { GVAR(Overlay) = true; -[{ - private ["_outputData", "_updateTimer"]; - +[{ // abort condition if (!GVAR(Overlay) || {!(("ACE_Kestrel4500" in (uniformItems ACE_player)) || ("ACE_Kestrel4500" in (vestItems ACE_player)))}) exitWith { GVAR(Overlay) = false; @@ -55,6 +53,7 @@ GVAR(Overlay) = true; if (diag_tickTime > GVAR(updateTimer)) then { GVAR(updateTimer) = diag_tickTime + 1; + private ["_outputData"]; _outputData = [] call FUNC(generateOutputData); 3 cutRsc ["RscKestrel4500", "PLAIN", 1, false]; diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index 3f5e77b748c..6b139fe72e4 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -14,7 +14,7 @@ */ #include "script_component.hpp" -private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir", "_newWindSpeed", "_windSource", "_height"]; +private ["_playerDir", "_textTop", "_textCenterBig", "_textCenterLine1Left", "_textCenterLine2Left", "_textCenterLine3Left", "_textCenterLine1Right", "_textCenterLine2Right", "_textCenterLine3Right", "_textInfoLine1", "_textInfoLine2", "_temperature", "_humidity", "_windSpeed", "_windDir"]; [] call FUNC(collectData); diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf index 58d728bf67a..79965037193 100644 --- a/addons/weather/functions/fnc_displayWindInfo.sqf +++ b/addons/weather/functions/fnc_displayWindInfo.sqf @@ -28,7 +28,7 @@ EGVAR(advanced_ballistics,Protractor) = false; GVAR(WindInfo) = true; [{ - private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor", "_newWindSpeed", "_windSource", "_height"]; + private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor"]; if !(GVAR(WindInfo) && !(underwater ACE_player) && vehicle ACE_player == ACE_player) exitWith { GVAR(WindInfo) = false; From 3747df3ec59fef1c7818f782e64b9cd625c87e5e Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 11:54:17 +0200 Subject: [PATCH 166/276] Added python script that finds never used privates --- tools/search_unused_privates.py | 128 ++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 tools/search_unused_privates.py diff --git a/tools/search_unused_privates.py b/tools/search_unused_privates.py new file mode 100644 index 00000000000..b9bdd880ced --- /dev/null +++ b/tools/search_unused_privates.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 + +import fnmatch +import os +import re +import ntpath +import sys +import argparse + +def get_private_declare(content): + priv_declared = [] + + srch = re.compile('private.*') + priv_srch_declared = srch.findall(content) + priv_srch_declared = sorted(set(priv_srch_declared)) + + priv_dec_str = ''.join(priv_srch_declared) + + srch = re.compile('(? 0: + print (filepath) + + private_output = 'private['; + first = True + for bad_priv in unused: + if first: + first = False + private_output = private_output + '"' + bad_priv + else: + private_output = private_output + '", "' + bad_priv + + private_output = private_output + '"];'; + print (private_output) + + for bad_priv in unused: + print ('\t' + bad_priv) + bad_count_file = bad_count_file + 1 + + + + return bad_count_file + +def main(): + + print("#########################") + print("# Search your Privates #") + print("#########################") + + sqf_list = [] + bad_count = 0 + + parser = argparse.ArgumentParser() + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") + args = parser.parse_args() + + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): + for filename in fnmatch.filter(filenames, '*.sqf'): + sqf_list.append(os.path.join(root, filename)) + + for filename in sqf_list: + bad_count = bad_count + check_privates(filename) + + + print ("Bad Count {0}".format(bad_count)) + +if __name__ == "__main__": + main() From 6361bda3e98137eedfb4dada4c025cc700bbc72d Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 13:01:11 +0200 Subject: [PATCH 167/276] Removed unused function --- .../functions/fnc_calculateAirDensity.sqf | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf diff --git a/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf b/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf deleted file mode 100644 index 298049e51db..00000000000 --- a/addons/advanced_ballistics/functions/fnc_calculateAirDensity.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Author: Ruthberg - * - * Calculates the air density - * - * Arguments: - * 0: temperature - degrees celcius - * 1: pressure - hPa - * 2: relativeHumidity - value between 0.0 and 1.0 - * - * Return Value: - * 0: density of air - kg * m^(-3) - * - * Return value: - * None - */ -#include "script_component.hpp" - -private ["_temperature", "_pressure", "_relativeHumidity"]; -_temperature = _this select 0; // in C -_pressure = _this select 1; // in hPa -_relativeHumidity = _this select 2; // as ratio 0-1 - -_pressure = _pressure * 100; - -if (_relativeHumidity > 0) then { - private ["_pSat", "_vaporPressure", "_partialPressure"]; - // Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm - _pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3)); - _vaporPressure = _relativeHumidity * _pSat; - _partialPressure = _pressure - _vaporPressure; - - (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature)) -} else { - _pressure / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature)) -}; From 5e766835a65627645b84e4fe952631f9fcd00518 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 13:11:43 +0200 Subject: [PATCH 168/276] Improved regex matching --- tools/search_privates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/search_privates.py b/tools/search_privates.py index 6445a24dd79..37320214fcc 100644 --- a/tools/search_privates.py +++ b/tools/search_privates.py @@ -53,7 +53,7 @@ def popClosing(): # Regex search privates - srch = re.compile('(? Date: Fri, 24 Apr 2015 14:14:20 +0200 Subject: [PATCH 169/276] Added compatibility configs for hlcmods_core and hlcmods_m60e4 --- optionals/hlcmods_core_comp/CfgAmmo.hpp | 315 ++++++++++++++++++ optionals/hlcmods_core_comp/config.cpp | 14 + .../hlcmods_core_comp/script_component.hpp | 5 + optionals/hlcmods_m60e4_comp/CfgWeapons.hpp | 15 + optionals/hlcmods_m60e4_comp/config.cpp | 14 + .../hlcmods_m60e4_comp/script_component.hpp | 5 + 6 files changed, 368 insertions(+) create mode 100644 optionals/hlcmods_core_comp/CfgAmmo.hpp create mode 100644 optionals/hlcmods_core_comp/config.cpp create mode 100644 optionals/hlcmods_core_comp/script_component.hpp create mode 100644 optionals/hlcmods_m60e4_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_m60e4_comp/config.cpp create mode 100644 optionals/hlcmods_m60e4_comp/script_component.hpp diff --git a/optionals/hlcmods_core_comp/CfgAmmo.hpp b/optionals/hlcmods_core_comp/CfgAmmo.hpp new file mode 100644 index 00000000000..dd060b5cbb1 --- /dev/null +++ b/optionals/hlcmods_core_comp/CfgAmmo.hpp @@ -0,0 +1,315 @@ +class CfgAmmo +{ + class B_762x51_Ball; + class B_556x45_Ball; + class B_127x99_Ball; + class B_127x99_Ball_Tracer_Red; + class HLC_762x51_ball; + class HLC_556NATO_EPR: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[]={0.151}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[]={8.3, 9.4, 10.6, 11.8, 13.0, 14.2, 15.4, 16.5, 17.7, 18.9, 20.0, 24.0}; + }; + class HLC_556NATO_SOST: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class HLC_556NATO_SPR: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class HLC_300Blackout_Ball: B_556x45_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.118; + ACE_bulletMass=147; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.398}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={559, 609, 625}; + ACE_barrelLengths[]={6, 16, 20}; + }; + class HLC_300Blackout_SMK: HLC_300Blackout_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.608}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={300, 320, 340}; + ACE_barrelLengths[]={9, 16, 20}; + }; + class HLC_762x39_Ball: HLC_300Blackout_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_762x39_Tracer: HLC_762x39_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_762x51_MK316_20in: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x51_BTSub: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.340; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.235}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={305, 325, 335, 340}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x54_ball: HLC_762x51_ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_762x54_tracer: HLC_762x51_tracer + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class HLC_303Brit_B: B_556x45_Ball + { + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class HLC_792x57_Ball: HLC_303Brit_B + { + ACE_caliber=0.318; + ACE_bulletLength=1.128; + ACE_bulletMass=196; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.315}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={785, 800, 815}; + ACE_barrelLengths[]={20, 23.62, 26}; + }; + class HLC_542x42_ball: HLC_303Brit_B + { + }; + class HLC_542x42_Tracer: HLC_303Brit_B + { + }; + class FH_545x39_Ball: B_556x45_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class FH_545x39_7u1: FH_545x39_Ball + { + ACE_bulletMass=80; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_muzzleVelocities[]={260, 303, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class HLC_57x28mm_JHP: FH_545x39_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.495; + ACE_bulletMass=28; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.144}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={550, 625, 720}; + ACE_barrelLengths[]={4, 6, 10.35}; + }; + class HLC_9x19_Ball: B_556x45_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class HLC_9x19_M882_SMG: B_556x45_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class HLC_9x19_GoldDot: HLC_9x19_Ball + { + ACE_muzzleVelocities[]={350, 380, 420}; + }; + class HLC_9x19_Subsonic: HLC_9x19_Ball + { + ACE_muzzleVelocities[]={300, 320, 340}; + }; + class HLC_10mm_FMJ: HLC_9x19_Ball + { + ACE_caliber=0.5; + ACE_bulletLength=0.764; + ACE_bulletMass=165; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.189}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 400, 430}; + ACE_barrelLengths[]={4, 4.61, 9}; + }; + class HLC_45ACP_Ball: B_556x45_Ball + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class FH_44Mag: HLC_45ACP_Ball + { + ACE_caliber=0.429; + ACE_bulletLength=0.804; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.172}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 390, 420}; + ACE_barrelLengths[]={4, 7.5, 9}; + }; + class FH_50BMG_SLAP: B_127x99_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.25; + ACE_bulletMass=350; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={1.056}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={1204}; + ACE_barrelLengths[]={29}; + }; + class FH_50BMG_Raufoss: B_127x99_Ball + { + ACE_caliber=0.510; + ACE_bulletLength=2.380; + ACE_bulletMass=660; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={817}; + ACE_barrelLengths[]={29}; + }; +}; diff --git a/optionals/hlcmods_core_comp/config.cpp b/optionals/hlcmods_core_comp/config.cpp new file mode 100644 index 00000000000..ecd780908f8 --- /dev/null +++ b/optionals/hlcmods_core_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_core"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" diff --git a/optionals/hlcmods_core_comp/script_component.hpp b/optionals/hlcmods_core_comp/script_component.hpp new file mode 100644 index 00000000000..444799ed4af --- /dev/null +++ b/optionals/hlcmods_core_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_core_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp b/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..9532c1968da --- /dev/null +++ b/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp @@ -0,0 +1,15 @@ + +class CfgWeapons +{ + class hlc_M60e4_base; + class hlc_lmg_M60E4: hlc_M60e4_base + { + ACE_barrelTwist=12; + ACE_barrelLength=17; + }; + class hlc_lmg_m60: hlc_M60e4_base + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; +}; diff --git a/optionals/hlcmods_m60e4_comp/config.cpp b/optionals/hlcmods_m60e4_comp/config.cpp new file mode 100644 index 00000000000..1df3a97a203 --- /dev/null +++ b/optionals/hlcmods_m60e4_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_m60e4"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_m60e4_comp/script_component.hpp b/optionals/hlcmods_m60e4_comp/script_component.hpp new file mode 100644 index 00000000000..4a5a9c03b05 --- /dev/null +++ b/optionals/hlcmods_m60e4_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlc_m60e4_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 7e491c95a59c2cf2f17a2b77b553a9da08bffc6c Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 16:54:55 +0200 Subject: [PATCH 170/276] Added optional hlc_ar15 compatibility pbo --- optionals/hlc_ar15_comp/CfgWeapons.hpp | 65 ++++++++++++++++++++ optionals/hlc_ar15_comp/config.cpp | 14 +++++ optionals/hlc_ar15_comp/script_component.hpp | 5 ++ 3 files changed, 84 insertions(+) create mode 100644 optionals/hlc_ar15_comp/CfgWeapons.hpp create mode 100644 optionals/hlc_ar15_comp/config.cpp create mode 100644 optionals/hlc_ar15_comp/script_component.hpp diff --git a/optionals/hlc_ar15_comp/CfgWeapons.hpp b/optionals/hlc_ar15_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..d57de932e63 --- /dev/null +++ b/optionals/hlc_ar15_comp/CfgWeapons.hpp @@ -0,0 +1,65 @@ +class CfgWeapons +{ + class Rifle; + class Rifle_Base_F; + class hlc_ar15_base: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=11.5; + }; + class hlc_rifle_RU556: hlc_ar15_base + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class hlc_rifle_RU5562: hlc_rifle_RU556 + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class hlc_rifle_CQBR: hlc_rifle_RU556 + { + ACE_barrelTwist=7; + ACE_barrelLength=10; + }; + class hlc_rifle_M4: hlc_rifle_RU556 + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_bcmjack: hlc_ar15_base + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Colt727: hlc_ar15_base + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Colt727_GL: hlc_rifle_Colt727 + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class hlc_rifle_Bushmaster300: hlc_rifle_Colt727 + { + ACE_barrelTwist=8; + ACE_barrelLength=14.5; + }; + class hlc_rifle_vendimus: hlc_rifle_Bushmaster300 + { + ACE_barrelTwist=8; + ACE_barrelLength=16; + }; + class hlc_rifle_SAMR: hlc_rifle_RU556 + { + ACE_barrelTwist=9; + ACE_barrelLength=16; + }; + class hlc_rifle_honeybase: hlc_rifle_RU556 + { + ACE_barrelTwist=8; + ACE_barrelLength=6; + }; +}; \ No newline at end of file diff --git a/optionals/hlc_ar15_comp/config.cpp b/optionals/hlc_ar15_comp/config.cpp new file mode 100644 index 00000000000..51e42dc0408 --- /dev/null +++ b/optionals/hlc_ar15_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_ar15"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlc_ar15_comp/script_component.hpp b/optionals/hlc_ar15_comp/script_component.hpp new file mode 100644 index 00000000000..3fb38b04772 --- /dev/null +++ b/optionals/hlc_ar15_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_ar15_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From f707ce3577ae4cf5c8f4ff92009de5d7c646a70d Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 16:58:01 +0200 Subject: [PATCH 171/276] Added optional hlc_wp_mp5 compatibility pbo --- optionals/hlc_wp_mp5_comp/CfgWeapons.hpp | 60 +++++++++++++++++++ optionals/hlc_wp_mp5_comp/config.cpp | 14 +++++ .../hlc_wp_mp5_comp/script_component.hpp | 5 ++ 3 files changed, 79 insertions(+) create mode 100644 optionals/hlc_wp_mp5_comp/CfgWeapons.hpp create mode 100644 optionals/hlc_wp_mp5_comp/config.cpp create mode 100644 optionals/hlc_wp_mp5_comp/script_component.hpp diff --git a/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp b/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..bb2762d1bcb --- /dev/null +++ b/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp @@ -0,0 +1,60 @@ + +class CfgWeapons +{ + class Rifle_Base_F; + class hlc_MP5_base: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5k_PDW: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=4.5; + }; + class hlc_smg_mp5k: hlc_smg_mp5k_PDW + { + ACE_barrelTwist=10; + ACE_barrelLength=4.5; + }; + class hlc_smg_mp5a2: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_MP5N: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_9mmar: hlc_smg_MP5N + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5a4: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp510: hlc_smg_MP5N + { + ACE_barrelTwist=15; + ACE_barrelLength=9; + }; + class hlc_smg_mp5sd5: hlc_MP5_base + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5a3: hlc_smg_mp5a2 + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; + class hlc_smg_mp5sd6: hlc_smg_mp5sd5 + { + ACE_barrelTwist=10; + ACE_barrelLength=9; + }; +}; diff --git a/optionals/hlc_wp_mp5_comp/config.cpp b/optionals/hlc_wp_mp5_comp/config.cpp new file mode 100644 index 00000000000..1f4fe78db42 --- /dev/null +++ b/optionals/hlc_wp_mp5_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_mp5"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlc_wp_mp5_comp/script_component.hpp b/optionals/hlc_wp_mp5_comp/script_component.hpp new file mode 100644 index 00000000000..6b19e4912bd --- /dev/null +++ b/optionals/hlc_wp_mp5_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_mp5_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 87252c3a3e429dc00588114aea1b09b74a675b54 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:05:09 +0200 Subject: [PATCH 172/276] Added optional hlcmods_ak compatibility pbo --- optionals/hlcmods_ak_comp/CfgWeapons.hpp | 54 +++++++++++++++++++ optionals/hlcmods_ak_comp/config.cpp | 14 +++++ .../hlcmods_ak_comp/script_component.hpp | 5 ++ 3 files changed, 73 insertions(+) create mode 100644 optionals/hlcmods_ak_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_ak_comp/config.cpp create mode 100644 optionals/hlcmods_ak_comp/script_component.hpp diff --git a/optionals/hlcmods_ak_comp/CfgWeapons.hpp b/optionals/hlcmods_ak_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..ef9c7a6beb4 --- /dev/null +++ b/optionals/hlcmods_ak_comp/CfgWeapons.hpp @@ -0,0 +1,54 @@ +class CfgWeapons +{ + class hlc_ak_base; + class hlc_rifle_ak74: hlc_ak_base + { + ACE_barrelTwist=7.8699999; + ACE_barrelLength=16.299999; + }; + class hlc_rifle_aku12: hlc_rifle_ak12 + { + ACE_barrelTwist=6.3000002; + ACE_barrelLength=8.3000002; + }; + class hlc_rifle_RPK12: hlc_rifle_ak12 + { + ACE_barrelLength=23.200001; + }; + class hlc_rifle_aks74u: hlc_rifle_ak74 + { + ACE_barrelTwist=6.3000002; + ACE_barrelLength=8.3000002; + }; + class hlc_rifle_ak47: hlc_rifle_ak74 + { + ACE_barrelTwist=9.4499998; + ACE_barrelLength=16.299999; + }; + class hlc_rifle_akm: hlc_rifle_ak47 + { + ACE_barrelTwist=7.8699999; + ACE_barrelLength=16.299999; + }; + class hlc_rifle_rpk: hlc_rifle_ak47 + { + ACE_barrelTwist=9.4499998; + ACE_barrelLength=23.200001; + }; + class hlc_rifle_rpk74n: hlc_rifle_rpk + { + ACE_barrelTwist=9.4499998; + ACE_barrelLength=23.200001; + }; + class hlc_rifle_aek971: hlc_rifle_ak74 + { + ACE_barrelTwist=9.5; + ACE_barrelLength=17; + }; + class hlc_rifle_saiga12k: hlc_rifle_ak47 + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=16.9; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_ak_comp/config.cpp b/optionals/hlcmods_ak_comp/config.cpp new file mode 100644 index 00000000000..7c8cdba2ba0 --- /dev/null +++ b/optionals/hlcmods_ak_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_aks"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_ak_comp/script_component.hpp b/optionals/hlcmods_ak_comp/script_component.hpp new file mode 100644 index 00000000000..a9702298467 --- /dev/null +++ b/optionals/hlcmods_ak_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_aks_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From aeef674b082b08680e9e79180a5a89696e3521ad Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:08:08 +0200 Subject: [PATCH 173/276] Added optional hlcmods_fal compatibility pbo --- optionals/hlcmods_fal_comp/CfgWeapons.hpp | 50 +++++++++++++++++++ optionals/hlcmods_fal_comp/config.cpp | 14 ++++++ .../hlcmods_fal_comp/script_component.hpp | 5 ++ 3 files changed, 69 insertions(+) create mode 100644 optionals/hlcmods_fal_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_fal_comp/config.cpp create mode 100644 optionals/hlcmods_fal_comp/script_component.hpp diff --git a/optionals/hlcmods_fal_comp/CfgWeapons.hpp b/optionals/hlcmods_fal_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..05a17d8eb4d --- /dev/null +++ b/optionals/hlcmods_fal_comp/CfgWeapons.hpp @@ -0,0 +1,50 @@ + +class CfgWeapons +{ + class hlc_fal_base; + class hlc_rifle_falosw: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=13; + }; + class hlc_rifle_osw_GL: hlc_rifle_falosw + { + ACE_barrelTwist=12; + ACE_barrelLength=13; + }; + class hlc_rifle_SLR: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=21.700001; + }; + class hlc_rifle_STG58F: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_FAL5061: hlc_fal_base + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; + class hlc_rifle_L1A1SLR: hlc_rifle_SLR + { + ACE_barrelTwist=12; + ACE_barrelLength=21.700001; + }; + class hlc_rifle_c1A1: hlc_rifle_SLR + { + ACE_barrelTwist=12; + ACE_barrelLength=21.700001; + }; + class hlc_rifle_LAR: hlc_rifle_FAL5061 + { + ACE_barrelTwist=12; + ACE_barrelLength=21; + }; + class hlc_rifle_SLRchopmod: hlc_rifle_FAL5061 + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_fal_comp/config.cpp b/optionals/hlcmods_fal_comp/config.cpp new file mode 100644 index 00000000000..5428e9871ca --- /dev/null +++ b/optionals/hlcmods_fal_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_falpocalypse"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_fal_comp/script_component.hpp b/optionals/hlcmods_fal_comp/script_component.hpp new file mode 100644 index 00000000000..828722a5a41 --- /dev/null +++ b/optionals/hlcmods_fal_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_falpocalypse_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 5e23f7d84242173926963fae5f5fc6ebb05ef708 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:12:03 +0200 Subject: [PATCH 174/276] Added optional hlcmods_g3 compatibility pbo --- optionals/hlcmods_g3_comp/CfgWeapons.hpp | 45 +++++++++++++++++++ optionals/hlcmods_g3_comp/config.cpp | 14 ++++++ .../hlcmods_g3_comp/script_component.hpp | 5 +++ 3 files changed, 64 insertions(+) create mode 100644 optionals/hlcmods_g3_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_g3_comp/config.cpp create mode 100644 optionals/hlcmods_g3_comp/script_component.hpp diff --git a/optionals/hlcmods_g3_comp/CfgWeapons.hpp b/optionals/hlcmods_g3_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..e45fe340481 --- /dev/null +++ b/optionals/hlcmods_g3_comp/CfgWeapons.hpp @@ -0,0 +1,45 @@ + +class CfgWeapons +{ + class hlc_g3_base; + class hlc_rifle_g3sg1: hlc_g3_base + { + ACE_barrelTwist=12; + ACE_barrelLength=17.700001; + }; + class hlc_rifle_psg1: hlc_rifle_g3sg1 + { + ACE_barrelTwist=12; + ACE_barrelLength=25.6; + }; + class hlc_rifle_g3a3: hlc_rifle_g3sg1 + { + ACE_barrelTwist=12; + ACE_barrelLength=17.700001; + }; + class hlc_rifle_g3a3ris: hlc_rifle_g3a3 + { + ACE_barrelTwist=12; + ACE_barrelLength=17.700001; + }; + class hlc_rifle_g3ka4: hlc_rifle_g3a3 + { + ACE_barrelTwist=12; + ACE_barrelLength=12.4; + }; + class HLC_Rifle_g3ka4_GL: hlc_rifle_g3ka4 + { + ACE_barrelTwist=12; + ACE_barrelLength=12.4; + }; + class hlc_rifle_hk51: hlc_rifle_g3sg1 + { + ACE_barrelTwist=12; + ACE_barrelLength=8.3100004; + }; + class hlc_rifle_hk53: hlc_rifle_g3sg1 + { + ACE_barrelTwist=7; + ACE_barrelLength=8.3100004; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_g3_comp/config.cpp b/optionals/hlcmods_g3_comp/config.cpp new file mode 100644 index 00000000000..6b794863642 --- /dev/null +++ b/optionals/hlcmods_g3_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_g3"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_g3_comp/script_component.hpp b/optionals/hlcmods_g3_comp/script_component.hpp new file mode 100644 index 00000000000..642977f87bc --- /dev/null +++ b/optionals/hlcmods_g3_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_g3_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From 9078eed6bbad7c9623bd2207731610687e78f757 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:15:28 +0200 Subject: [PATCH 175/276] Added optional hlcmods_m14 compatibility pbo --- optionals/hlcmods_m14_comp/CfgWeapons.hpp | 15 +++++++++++++++ optionals/hlcmods_m14_comp/config.cpp | 14 ++++++++++++++ optionals/hlcmods_m14_comp/script_component.hpp | 5 +++++ 3 files changed, 34 insertions(+) create mode 100644 optionals/hlcmods_m14_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_m14_comp/config.cpp create mode 100644 optionals/hlcmods_m14_comp/script_component.hpp diff --git a/optionals/hlcmods_m14_comp/CfgWeapons.hpp b/optionals/hlcmods_m14_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..a0aa6459fa8 --- /dev/null +++ b/optionals/hlcmods_m14_comp/CfgWeapons.hpp @@ -0,0 +1,15 @@ + +class CfgWeapons +{ + class Rifle_Base_F; + class hlc_M14_base: Rifle_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class hlc_rifle_m14sopmod: hlc_rifle_M14 + { + ACE_barrelTwist=12; + ACE_barrelLength=18; + }; +}; diff --git a/optionals/hlcmods_m14_comp/config.cpp b/optionals/hlcmods_m14_comp/config.cpp new file mode 100644 index 00000000000..cdf11a7db18 --- /dev/null +++ b/optionals/hlcmods_m14_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_m14"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_m14_comp/script_component.hpp b/optionals/hlcmods_m14_comp/script_component.hpp new file mode 100644 index 00000000000..a29b7511959 --- /dev/null +++ b/optionals/hlcmods_m14_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_m14_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From b405f17df2e9f4f159a9bf7128ba182249567b02 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:19:18 +0200 Subject: [PATCH 176/276] Added missing ; --- addons/ballistics/CfgAmmo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 54be0cc5705..c2d6f0147a7 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -445,7 +445,7 @@ class CfgAmmo { class ACE_762x39_Ball : B_762x51_Ball { airFriction=-0.0015168; hit=12; - caliber=1.5 + caliber=1.5; typicalSpeed=716; ACE_caliber=0.308; ACE_bulletLength=1.14; From afccc3a44b232a8c31c9783ab9a11c012b187723 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 17:27:26 +0200 Subject: [PATCH 177/276] Added missing base classes --- optionals/hlcmods_ak_comp/CfgWeapons.hpp | 1 + optionals/hlcmods_m14_comp/CfgWeapons.hpp | 1 + 2 files changed, 2 insertions(+) diff --git a/optionals/hlcmods_ak_comp/CfgWeapons.hpp b/optionals/hlcmods_ak_comp/CfgWeapons.hpp index ef9c7a6beb4..51a86e42cfa 100644 --- a/optionals/hlcmods_ak_comp/CfgWeapons.hpp +++ b/optionals/hlcmods_ak_comp/CfgWeapons.hpp @@ -1,6 +1,7 @@ class CfgWeapons { class hlc_ak_base; + class hlc_rifle_ak12; class hlc_rifle_ak74: hlc_ak_base { ACE_barrelTwist=7.8699999; diff --git a/optionals/hlcmods_m14_comp/CfgWeapons.hpp b/optionals/hlcmods_m14_comp/CfgWeapons.hpp index a0aa6459fa8..01a67ff063c 100644 --- a/optionals/hlcmods_m14_comp/CfgWeapons.hpp +++ b/optionals/hlcmods_m14_comp/CfgWeapons.hpp @@ -2,6 +2,7 @@ class CfgWeapons { class Rifle_Base_F; + class hlc_rifle_M14; class hlc_M14_base: Rifle_Base_F { ACE_barrelTwist=12; From e207a11851af6072226e3a654b980167835598ec Mon Sep 17 00:00:00 2001 From: commy2 Date: Fri, 24 Apr 2015 19:02:29 +0200 Subject: [PATCH 178/276] fix: Cannot zero when looking through optics of static weapons and vehicle mg/gmg, fix #836 --- addons/fcs/initKeybinds.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/fcs/initKeybinds.sqf b/addons/fcs/initKeybinds.sqf index 3f1a5707a8d..8e79bc8056d 100644 --- a/addons/fcs/initKeybinds.sqf +++ b/addons/fcs/initKeybinds.sqf @@ -35,7 +35,7 @@ // Conditions: canInteract if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false}; + if !(call FUNC(canUseFCS)) exitWith {false}; // Statement [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), 50] call FUNC(adjustRange); @@ -49,7 +49,7 @@ // Conditions: canInteract if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !(call FUNC(canUseRangefinder) || FUNC(canUseFCS)) exitWith {false}; + if !(call FUNC(canUseFCS)) exitWith {false}; // Statement [vehicle ACE_player, [ACE_player] call EFUNC(common,getTurretIndex), -50] call FUNC(adjustRange); From 819b7af42617795cddf1d7dafeb93bbd8a11908e Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 19:56:11 +0200 Subject: [PATCH 179/276] Added more compatibility modules: *hlcmods_ak *hlcmods_aug *rh_acc *rh_de *rh_m4 *rh_pdf *rksl_pm_ii --- optionals/hlcmods_ak_comp/CfgWeapons.hpp | 21 +++ optionals/hlcmods_aug_comp/CfgWeapons.hpp | 51 ++++++ optionals/hlcmods_aug_comp/config.cpp | 14 ++ .../hlcmods_aug_comp/script_component.hpp | 5 + optionals/rh_acc_comp/CfgWeapons.hpp | 131 ++++++++++++++ optionals/rh_acc_comp/config.cpp | 14 ++ optionals/rh_acc_comp/script_component.hpp | 5 + optionals/rh_de_comp/CfgAmmo.hpp | 161 ++++++++++++++++++ optionals/rh_de_comp/CfgWeapons.hpp | 140 +++++++++++++++ optionals/rh_de_comp/config.cpp | 15 ++ optionals/rh_de_comp/script_component.hpp | 5 + optionals/rh_pdw_comp/CfgAmmo.hpp | 15 ++ optionals/rh_pdw_comp/CfgWeapons.hpp | 10 ++ optionals/rh_pdw_comp/config.cpp | 15 ++ optionals/rh_pdw_comp/script_component.hpp | 5 + optionals/rksl_pm_ii_comp/CfgWeapons.hpp | 33 ++++ optionals/rksl_pm_ii_comp/config.cpp | 14 ++ .../rksl_pm_ii_comp/script_component.hpp | 5 + 18 files changed, 659 insertions(+) create mode 100644 optionals/hlcmods_aug_comp/CfgWeapons.hpp create mode 100644 optionals/hlcmods_aug_comp/config.cpp create mode 100644 optionals/hlcmods_aug_comp/script_component.hpp create mode 100644 optionals/rh_acc_comp/CfgWeapons.hpp create mode 100644 optionals/rh_acc_comp/config.cpp create mode 100644 optionals/rh_acc_comp/script_component.hpp create mode 100644 optionals/rh_de_comp/CfgAmmo.hpp create mode 100644 optionals/rh_de_comp/CfgWeapons.hpp create mode 100644 optionals/rh_de_comp/config.cpp create mode 100644 optionals/rh_de_comp/script_component.hpp create mode 100644 optionals/rh_pdw_comp/CfgAmmo.hpp create mode 100644 optionals/rh_pdw_comp/CfgWeapons.hpp create mode 100644 optionals/rh_pdw_comp/config.cpp create mode 100644 optionals/rh_pdw_comp/script_component.hpp create mode 100644 optionals/rksl_pm_ii_comp/CfgWeapons.hpp create mode 100644 optionals/rksl_pm_ii_comp/config.cpp create mode 100644 optionals/rksl_pm_ii_comp/script_component.hpp diff --git a/optionals/hlcmods_ak_comp/CfgWeapons.hpp b/optionals/hlcmods_ak_comp/CfgWeapons.hpp index 51a86e42cfa..390d3e6177c 100644 --- a/optionals/hlcmods_ak_comp/CfgWeapons.hpp +++ b/optionals/hlcmods_ak_comp/CfgWeapons.hpp @@ -1,7 +1,9 @@ class CfgWeapons { + class optic_dms; class hlc_ak_base; class hlc_rifle_ak12; + class InventoryOpticsItem_Base_F; class hlc_rifle_ak74: hlc_ak_base { ACE_barrelTwist=7.8699999; @@ -52,4 +54,23 @@ class CfgWeapons ACE_twistDirection=0; ACE_barrelLength=16.9; }; + + class HLC_Optic_PSO1 : optic_dms { + ACE_ScopeAdjust_Vertical[] = { 0, 0 }; + ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_Increment = 0.5; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Snip { + discreteDistance[]={100, 200, 300, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; + discreteDistanceInitIndex=3; + }; + }; + }; + }; + class HLC_Optic_1p29 : HLC_Optic_PSO1 { + ACE_ScopeAdjust_Vertical[] = {}; + ACE_ScopeAdjust_Horizontal[] = {}; + ACE_ScopeAdjust_Increment = 0; + }; }; \ No newline at end of file diff --git a/optionals/hlcmods_aug_comp/CfgWeapons.hpp b/optionals/hlcmods_aug_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..b46cf485e1f --- /dev/null +++ b/optionals/hlcmods_aug_comp/CfgWeapons.hpp @@ -0,0 +1,51 @@ + +class CfgWeapons +{ + class Rifle_Base_F; + class hlc_aug_base; + class hlc_rifle_aug: hlc_aug_base + { + ACE_barrelTwist=9; + ACE_barrelLength=20; + }; + class hlc_rifle_auga1carb: hlc_rifle_aug + { + ACE_barrelTwist=9; + ACE_barrelLength=16; + }; + class hlc_rifle_aughbar: hlc_rifle_aug + { + ACE_barrelTwist=9; + ACE_barrelLength=24; + }; + class hlc_rifle_augpara: hlc_rifle_aug + { + ACE_barrelTwist=9; + ACE_barrelLength=16.5; + }; + class hlc_rifle_auga2: hlc_rifle_aug + { + ACE_barrelTwist=9; + ACE_barrelLength=20; + }; + class hlc_rifle_auga2para: hlc_rifle_auga2 + { + ACE_barrelTwist=9; + ACE_barrelLength=16.5; + }; + class hlc_rifle_auga2carb: hlc_rifle_auga2 + { + ACE_barrelTwist=9; + ACE_barrelLength=18; + }; + class hlc_rifle_auga2lsw: hlc_rifle_aughbar + { + ACE_barrelTwist=9; + ACE_barrelLength=24; + }; + class hlc_rifle_auga3: hlc_rifle_aug + { + ACE_barrelTwist=9; + ACE_barrelLength=18; + }; +}; \ No newline at end of file diff --git a/optionals/hlcmods_aug_comp/config.cpp b/optionals/hlcmods_aug_comp/config.cpp new file mode 100644 index 00000000000..06192a6ffda --- /dev/null +++ b/optionals/hlcmods_aug_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"hlcweapons_AUG"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/hlcmods_aug_comp/script_component.hpp b/optionals/hlcmods_aug_comp/script_component.hpp new file mode 100644 index 00000000000..d5a6712b6b9 --- /dev/null +++ b/optionals/hlcmods_aug_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT hlcweapons_AUG_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/rh_acc_comp/CfgWeapons.hpp b/optionals/rh_acc_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..4dda8ffbe0d --- /dev/null +++ b/optionals/rh_acc_comp/CfgWeapons.hpp @@ -0,0 +1,131 @@ + +class CfgWeapons { + class ItemCore; + class InventoryOpticsItem_Base_F; + + class RH_accupoint : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Accupoint { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_m3lr : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class m3lr { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_leu_mk4 : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class mk4 { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_c79 : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class c79scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_c79_2d : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class c79scope { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_anpvs10 : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class pvs10 { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_pas13cm : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class MTWS { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_pas13cmg : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class MTWSmg { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RH_pas13ch : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class HTWS { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; +}; diff --git a/optionals/rh_acc_comp/config.cpp b/optionals/rh_acc_comp/config.cpp new file mode 100644 index 00000000000..9f563bd157a --- /dev/null +++ b/optionals/rh_acc_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"RH_acc"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/rh_acc_comp/script_component.hpp b/optionals/rh_acc_comp/script_component.hpp new file mode 100644 index 00000000000..4b36a38ce07 --- /dev/null +++ b/optionals/rh_acc_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT RH_acc_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/rh_de_comp/CfgAmmo.hpp b/optionals/rh_de_comp/CfgAmmo.hpp new file mode 100644 index 00000000000..b66b55f5302 --- /dev/null +++ b/optionals/rh_de_comp/CfgAmmo.hpp @@ -0,0 +1,161 @@ + +class CfgAmmo +{ + class BulletBase; + class RH_50_AE_Ball: BulletBase + { + ACE_caliber=0.5; + ACE_bulletLength=1.110; + ACE_bulletMass=325; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.228}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 398, 420}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_454_Casull: BulletBase + { + ACE_caliber=0.452; + ACE_bulletLength=0.895; + ACE_bulletMass=325; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.171}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={450, 490, 500}; + ACE_barrelLengths[]={4, 7.5, 9}; + }; + class RH_32ACP: BulletBase + { + ACE_caliber=0.3125; + ACE_bulletLength=0.610; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.118}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={282, 300, 320}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_45ACP: BulletBase + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_B_40SW: BulletBase + { + ACE_caliber=0.4; + ACE_bulletLength=0.447; + ACE_bulletMass=135; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.105, 0.115, 0.120, 0.105}; + ACE_velocityBoundaries[]={365, 305, 259}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 380, 400}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_44mag_ball: BulletBase + { + ACE_caliber=0.429; + ACE_bulletLength=0.804; + ACE_bulletMass=200; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.172}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 390, 420}; + ACE_barrelLengths[]={4, 7.5, 9}; + }; + class RH_357mag_ball: BulletBase + { + ACE_caliber=0.357; + ACE_bulletLength=0.541; + ACE_bulletMass=125; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.148}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={490, 510, 535}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_762x25: BulletBase + { + ACE_caliber=0.310; + ACE_bulletLength=0.5455; + ACE_bulletMass=86; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.17}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={360, 380, 400}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_9x18_Ball: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class RH_B_9x19_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class RH_B_22LR_SD: BulletBase + { + ACE_caliber=0.223; + ACE_bulletLength=0.45; + ACE_bulletMass=38; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.111}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={330, 340, 360}; + ACE_barrelLengths[]={4, 6, 9}; + }; + class RH_57x28mm: BulletBase + { + ACE_caliber=0.224; + ACE_bulletLength=0.495; + ACE_bulletMass=28; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.144}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={550, 625, 720}; + ACE_barrelLengths[]={4, 6, 10.35}; + }; +}; \ No newline at end of file diff --git a/optionals/rh_de_comp/CfgWeapons.hpp b/optionals/rh_de_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..8fdff293c96 --- /dev/null +++ b/optionals/rh_de_comp/CfgWeapons.hpp @@ -0,0 +1,140 @@ +class CfgWeapons +{ + class Pistol_Base_F; + class RH_Pistol_Base_F; + class RH_deagle: RH_Pistol_Base_F + { + ACE_barrelTwist=19; + ACE_barrelLength=6; + }; + class RH_mateba: Pistol_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=6; + }; + class RH_mp412: Pistol_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=6; + }; + class RH_python: Pistol_Base_F + { + ACE_barrelTwist=14; + ACE_barrelLength=6; + }; + class RH_bull: RH_python + { + ACE_barrelTwist=24; + ACE_barrelLength=6.5; + }; + class RH_ttracker: Pistol_Base_F + { + ACE_barrelTwist=12; + ACE_barrelLength=4; + }; + class RH_cz75: RH_Pistol_Base_F + { + ACE_barrelTwist=9.7; + ACE_barrelLength=4.7; + }; + class RH_p226: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.4; + }; + class RH_sw659: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=7.44; + }; + class RH_usp: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.41; + }; + class RH_uspm: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=6; + }; + class RH_kimber: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class RH_m1911: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; + class RH_tt33: RH_Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=4.6; + }; + class RH_mak: RH_Pistol_Base_F + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class RH_mk2: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4; + }; + class RH_m9: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.9; + }; + class RH_g18: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.49; + }; + class RH_g17: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.49; + }; + class RH_g19: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4; + }; + class RH_gsh18: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.1; + }; + class RH_fnp45: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class RH_fn57: RH_fnp45 + { + ACE_barrelTwist=9.1; + ACE_barrelLength=4.8; + }; + class RH_vp70: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=4.6; + }; + class RH_vz61: RH_Pistol_Base_F + { + ACE_barrelTwist=16; + ACE_barrelLength=4.5; + }; + class RH_tec9: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=5; + }; + class RH_muzi: RH_Pistol_Base_F + { + ACE_barrelTwist=9.8; + ACE_barrelLength=5; + }; +}; \ No newline at end of file diff --git a/optionals/rh_de_comp/config.cpp b/optionals/rh_de_comp/config.cpp new file mode 100644 index 00000000000..3d82eab05ae --- /dev/null +++ b/optionals/rh_de_comp/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"RH_de_cfg"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/rh_de_comp/script_component.hpp b/optionals/rh_de_comp/script_component.hpp new file mode 100644 index 00000000000..07ed06ae3fa --- /dev/null +++ b/optionals/rh_de_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT RH_de_cfg_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/rh_pdw_comp/CfgAmmo.hpp b/optionals/rh_pdw_comp/CfgAmmo.hpp new file mode 100644 index 00000000000..706344ff8c8 --- /dev/null +++ b/optionals/rh_pdw_comp/CfgAmmo.hpp @@ -0,0 +1,15 @@ + +class BulletBase; +class RH_B_6x35: BulletBase +{ + ACE_caliber=0.224; + ACE_bulletLength=0.445; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.26}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={730, 750, 760}; + ACE_barrelLengths[]={8, 10, 12}; +}; \ No newline at end of file diff --git a/optionals/rh_pdw_comp/CfgWeapons.hpp b/optionals/rh_pdw_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..b009a202cee --- /dev/null +++ b/optionals/rh_pdw_comp/CfgWeapons.hpp @@ -0,0 +1,10 @@ + +class CfgWeapons +{ + class Rifle_Base_F; + class RH_PDW: Rifle_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=10; + }; +}; diff --git a/optionals/rh_pdw_comp/config.cpp b/optionals/rh_pdw_comp/config.cpp new file mode 100644 index 00000000000..4aed0e62418 --- /dev/null +++ b/optionals/rh_pdw_comp/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"RH_PDW"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/rh_pdw_comp/script_component.hpp b/optionals/rh_pdw_comp/script_component.hpp new file mode 100644 index 00000000000..67c4617e067 --- /dev/null +++ b/optionals/rh_pdw_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT RH_PDW_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/rksl_pm_ii_comp/CfgWeapons.hpp b/optionals/rksl_pm_ii_comp/CfgWeapons.hpp new file mode 100644 index 00000000000..621dd98b71e --- /dev/null +++ b/optionals/rksl_pm_ii_comp/CfgWeapons.hpp @@ -0,0 +1,33 @@ + +class CfgWeapons { + class ItemCore; + class InventoryOpticsItem_Base_F; + + class RKSL_optic_PMII_312 : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Snip { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RKSL_optic_PMII_312_sunshade : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class Snip { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; +}; diff --git a/optionals/rksl_pm_ii_comp/config.cpp b/optionals/rksl_pm_ii_comp/config.cpp new file mode 100644 index 00000000000..c3ed720f8bc --- /dev/null +++ b/optionals/rksl_pm_ii_comp/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"RKSL_PMII"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" diff --git a/optionals/rksl_pm_ii_comp/script_component.hpp b/optionals/rksl_pm_ii_comp/script_component.hpp new file mode 100644 index 00000000000..a98639b0e8b --- /dev/null +++ b/optionals/rksl_pm_ii_comp/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT RKSL_PMII_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From af6f9f5a8c88a901d6a3f78938c8bb850853cac5 Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 19:56:36 +0200 Subject: [PATCH 180/276] Removed unnecessary required addon --- optionals/rh_m4_comp/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optionals/rh_m4_comp/config.cpp b/optionals/rh_m4_comp/config.cpp index 937097354f4..9c28be4f89f 100644 --- a/optionals/rh_m4_comp/config.cpp +++ b/optionals/rh_m4_comp/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"asdg_jointrails","RH_m4_cfg"}; + requiredAddons[] = {"RH_m4_cfg"}; author[]={"Ruthberg"}; VERSION_CONFIG; }; From 9f2196ffcfc341378ab194d2ae10aa87d2f3161f Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 19:56:51 +0200 Subject: [PATCH 181/276] Spaces --- extras/CfgWeaponsReference.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/CfgWeaponsReference.hpp b/extras/CfgWeaponsReference.hpp index 77ce494e398..4821d538132 100644 --- a/extras/CfgWeaponsReference.hpp +++ b/extras/CfgWeaponsReference.hpp @@ -294,7 +294,7 @@ class CfgWeapons class RH_gsh18 : Pistol_Base_F { ACE_barrelTwist=9.8; - ACE_barrelLength=4.1; + ACE_barrelLength=4.1; }; class RH_mateba : Pistol_Base_F { @@ -329,7 +329,7 @@ class CfgWeapons class RH_fn57 : Pistol_Base_F { ACE_barrelTwist=9.1; - ACE_barrelLength=4.8; + ACE_barrelLength=4.8; }; class RH_vp70 : Pistol_Base_F { From 9e33b7a32e3beb589cbe0262ac1366ba84abee4a Mon Sep 17 00:00:00 2001 From: ulteq Date: Fri, 24 Apr 2015 20:00:35 +0200 Subject: [PATCH 182/276] Renamed all compatibility module to follow the new naming scheme: *compat_xxx --- optionals/{asdg_comp => compat_asdg}/config.cpp | 0 optionals/{asdg_comp => compat_asdg}/script_component.hpp | 0 optionals/{hlc_ar15_comp => compat_hlc_ar15}/CfgWeapons.hpp | 0 optionals/{hlc_ar15_comp => compat_hlc_ar15}/config.cpp | 0 optionals/{hlc_ar15_comp => compat_hlc_ar15}/script_component.hpp | 0 optionals/{hlc_wp_mp5_comp => compat_hlc_wp_mp5}/CfgWeapons.hpp | 0 optionals/{hlc_wp_mp5_comp => compat_hlc_wp_mp5}/config.cpp | 0 .../{hlc_wp_mp5_comp => compat_hlc_wp_mp5}/script_component.hpp | 0 optionals/{hlcmods_ak_comp => compat_hlcmods_ak}/CfgWeapons.hpp | 0 optionals/{hlcmods_ak_comp => compat_hlcmods_ak}/config.cpp | 0 .../{hlcmods_ak_comp => compat_hlcmods_ak}/script_component.hpp | 0 optionals/{hlcmods_aug_comp => compat_hlcmods_aug}/CfgWeapons.hpp | 0 optionals/{hlcmods_aug_comp => compat_hlcmods_aug}/config.cpp | 0 .../{hlcmods_aug_comp => compat_hlcmods_aug}/script_component.hpp | 0 optionals/{hlcmods_core_comp => compat_hlcmods_core}/CfgAmmo.hpp | 0 optionals/{hlcmods_core_comp => compat_hlcmods_core}/config.cpp | 0 .../script_component.hpp | 0 optionals/{hlcmods_fal_comp => compat_hlcmods_fal}/CfgWeapons.hpp | 0 optionals/{hlcmods_fal_comp => compat_hlcmods_fal}/config.cpp | 0 .../{hlcmods_fal_comp => compat_hlcmods_fal}/script_component.hpp | 0 optionals/{hlcmods_g3_comp => compat_hlcmods_g3}/CfgWeapons.hpp | 0 optionals/{hlcmods_g3_comp => compat_hlcmods_g3}/config.cpp | 0 .../{hlcmods_g3_comp => compat_hlcmods_g3}/script_component.hpp | 0 optionals/{hlcmods_m14_comp => compat_hlcmods_m14}/CfgWeapons.hpp | 0 optionals/{hlcmods_m14_comp => compat_hlcmods_m14}/config.cpp | 0 .../{hlcmods_m14_comp => compat_hlcmods_m14}/script_component.hpp | 0 .../{hlcmods_m60e4_comp => compat_hlcmods_m60e4}/CfgWeapons.hpp | 0 optionals/{hlcmods_m60e4_comp => compat_hlcmods_m60e4}/config.cpp | 0 .../script_component.hpp | 0 optionals/{rh_acc_comp => compat_rh_acc}/CfgWeapons.hpp | 0 optionals/{rh_acc_comp => compat_rh_acc}/config.cpp | 0 optionals/{rh_acc_comp => compat_rh_acc}/script_component.hpp | 0 optionals/{rh_de_comp => compat_rh_de}/CfgAmmo.hpp | 0 optionals/{rh_de_comp => compat_rh_de}/CfgWeapons.hpp | 0 optionals/{rh_de_comp => compat_rh_de}/config.cpp | 0 optionals/{rh_de_comp => compat_rh_de}/script_component.hpp | 0 optionals/{rh_m4_comp => compat_rh_m4}/CfgAmmo.hpp | 0 optionals/{rh_m4_comp => compat_rh_m4}/CfgWeapons.hpp | 0 optionals/{rh_m4_comp => compat_rh_m4}/config.cpp | 0 optionals/{rh_m4_comp => compat_rh_m4}/script_component.hpp | 0 optionals/{rh_pdw_comp => compat_rh_pdw}/CfgAmmo.hpp | 0 optionals/{rh_pdw_comp => compat_rh_pdw}/CfgWeapons.hpp | 0 optionals/{rh_pdw_comp => compat_rh_pdw}/config.cpp | 0 optionals/{rh_pdw_comp => compat_rh_pdw}/script_component.hpp | 0 optionals/{rksl_pm_ii_comp => compat_rksl_pm_ii}/CfgWeapons.hpp | 0 optionals/{rksl_pm_ii_comp => compat_rksl_pm_ii}/config.cpp | 0 .../{rksl_pm_ii_comp => compat_rksl_pm_ii}/script_component.hpp | 0 47 files changed, 0 insertions(+), 0 deletions(-) rename optionals/{asdg_comp => compat_asdg}/config.cpp (100%) rename optionals/{asdg_comp => compat_asdg}/script_component.hpp (100%) rename optionals/{hlc_ar15_comp => compat_hlc_ar15}/CfgWeapons.hpp (100%) rename optionals/{hlc_ar15_comp => compat_hlc_ar15}/config.cpp (100%) rename optionals/{hlc_ar15_comp => compat_hlc_ar15}/script_component.hpp (100%) rename optionals/{hlc_wp_mp5_comp => compat_hlc_wp_mp5}/CfgWeapons.hpp (100%) rename optionals/{hlc_wp_mp5_comp => compat_hlc_wp_mp5}/config.cpp (100%) rename optionals/{hlc_wp_mp5_comp => compat_hlc_wp_mp5}/script_component.hpp (100%) rename optionals/{hlcmods_ak_comp => compat_hlcmods_ak}/CfgWeapons.hpp (100%) rename optionals/{hlcmods_ak_comp => compat_hlcmods_ak}/config.cpp (100%) rename optionals/{hlcmods_ak_comp => compat_hlcmods_ak}/script_component.hpp (100%) rename optionals/{hlcmods_aug_comp => compat_hlcmods_aug}/CfgWeapons.hpp (100%) rename optionals/{hlcmods_aug_comp => compat_hlcmods_aug}/config.cpp (100%) rename optionals/{hlcmods_aug_comp => compat_hlcmods_aug}/script_component.hpp (100%) rename optionals/{hlcmods_core_comp => compat_hlcmods_core}/CfgAmmo.hpp (100%) rename optionals/{hlcmods_core_comp => compat_hlcmods_core}/config.cpp (100%) rename optionals/{hlcmods_core_comp => compat_hlcmods_core}/script_component.hpp (100%) rename optionals/{hlcmods_fal_comp => compat_hlcmods_fal}/CfgWeapons.hpp (100%) rename optionals/{hlcmods_fal_comp => compat_hlcmods_fal}/config.cpp (100%) rename optionals/{hlcmods_fal_comp => compat_hlcmods_fal}/script_component.hpp (100%) rename optionals/{hlcmods_g3_comp => compat_hlcmods_g3}/CfgWeapons.hpp (100%) rename optionals/{hlcmods_g3_comp => compat_hlcmods_g3}/config.cpp (100%) rename optionals/{hlcmods_g3_comp => compat_hlcmods_g3}/script_component.hpp (100%) rename optionals/{hlcmods_m14_comp => compat_hlcmods_m14}/CfgWeapons.hpp (100%) rename optionals/{hlcmods_m14_comp => compat_hlcmods_m14}/config.cpp (100%) rename optionals/{hlcmods_m14_comp => compat_hlcmods_m14}/script_component.hpp (100%) rename optionals/{hlcmods_m60e4_comp => compat_hlcmods_m60e4}/CfgWeapons.hpp (100%) rename optionals/{hlcmods_m60e4_comp => compat_hlcmods_m60e4}/config.cpp (100%) rename optionals/{hlcmods_m60e4_comp => compat_hlcmods_m60e4}/script_component.hpp (100%) rename optionals/{rh_acc_comp => compat_rh_acc}/CfgWeapons.hpp (100%) rename optionals/{rh_acc_comp => compat_rh_acc}/config.cpp (100%) rename optionals/{rh_acc_comp => compat_rh_acc}/script_component.hpp (100%) rename optionals/{rh_de_comp => compat_rh_de}/CfgAmmo.hpp (100%) rename optionals/{rh_de_comp => compat_rh_de}/CfgWeapons.hpp (100%) rename optionals/{rh_de_comp => compat_rh_de}/config.cpp (100%) rename optionals/{rh_de_comp => compat_rh_de}/script_component.hpp (100%) rename optionals/{rh_m4_comp => compat_rh_m4}/CfgAmmo.hpp (100%) rename optionals/{rh_m4_comp => compat_rh_m4}/CfgWeapons.hpp (100%) rename optionals/{rh_m4_comp => compat_rh_m4}/config.cpp (100%) rename optionals/{rh_m4_comp => compat_rh_m4}/script_component.hpp (100%) rename optionals/{rh_pdw_comp => compat_rh_pdw}/CfgAmmo.hpp (100%) rename optionals/{rh_pdw_comp => compat_rh_pdw}/CfgWeapons.hpp (100%) rename optionals/{rh_pdw_comp => compat_rh_pdw}/config.cpp (100%) rename optionals/{rh_pdw_comp => compat_rh_pdw}/script_component.hpp (100%) rename optionals/{rksl_pm_ii_comp => compat_rksl_pm_ii}/CfgWeapons.hpp (100%) rename optionals/{rksl_pm_ii_comp => compat_rksl_pm_ii}/config.cpp (100%) rename optionals/{rksl_pm_ii_comp => compat_rksl_pm_ii}/script_component.hpp (100%) diff --git a/optionals/asdg_comp/config.cpp b/optionals/compat_asdg/config.cpp similarity index 100% rename from optionals/asdg_comp/config.cpp rename to optionals/compat_asdg/config.cpp diff --git a/optionals/asdg_comp/script_component.hpp b/optionals/compat_asdg/script_component.hpp similarity index 100% rename from optionals/asdg_comp/script_component.hpp rename to optionals/compat_asdg/script_component.hpp diff --git a/optionals/hlc_ar15_comp/CfgWeapons.hpp b/optionals/compat_hlc_ar15/CfgWeapons.hpp similarity index 100% rename from optionals/hlc_ar15_comp/CfgWeapons.hpp rename to optionals/compat_hlc_ar15/CfgWeapons.hpp diff --git a/optionals/hlc_ar15_comp/config.cpp b/optionals/compat_hlc_ar15/config.cpp similarity index 100% rename from optionals/hlc_ar15_comp/config.cpp rename to optionals/compat_hlc_ar15/config.cpp diff --git a/optionals/hlc_ar15_comp/script_component.hpp b/optionals/compat_hlc_ar15/script_component.hpp similarity index 100% rename from optionals/hlc_ar15_comp/script_component.hpp rename to optionals/compat_hlc_ar15/script_component.hpp diff --git a/optionals/hlc_wp_mp5_comp/CfgWeapons.hpp b/optionals/compat_hlc_wp_mp5/CfgWeapons.hpp similarity index 100% rename from optionals/hlc_wp_mp5_comp/CfgWeapons.hpp rename to optionals/compat_hlc_wp_mp5/CfgWeapons.hpp diff --git a/optionals/hlc_wp_mp5_comp/config.cpp b/optionals/compat_hlc_wp_mp5/config.cpp similarity index 100% rename from optionals/hlc_wp_mp5_comp/config.cpp rename to optionals/compat_hlc_wp_mp5/config.cpp diff --git a/optionals/hlc_wp_mp5_comp/script_component.hpp b/optionals/compat_hlc_wp_mp5/script_component.hpp similarity index 100% rename from optionals/hlc_wp_mp5_comp/script_component.hpp rename to optionals/compat_hlc_wp_mp5/script_component.hpp diff --git a/optionals/hlcmods_ak_comp/CfgWeapons.hpp b/optionals/compat_hlcmods_ak/CfgWeapons.hpp similarity index 100% rename from optionals/hlcmods_ak_comp/CfgWeapons.hpp rename to optionals/compat_hlcmods_ak/CfgWeapons.hpp diff --git a/optionals/hlcmods_ak_comp/config.cpp b/optionals/compat_hlcmods_ak/config.cpp similarity index 100% rename from optionals/hlcmods_ak_comp/config.cpp rename to optionals/compat_hlcmods_ak/config.cpp diff --git a/optionals/hlcmods_ak_comp/script_component.hpp b/optionals/compat_hlcmods_ak/script_component.hpp similarity index 100% rename from optionals/hlcmods_ak_comp/script_component.hpp rename to optionals/compat_hlcmods_ak/script_component.hpp diff --git a/optionals/hlcmods_aug_comp/CfgWeapons.hpp b/optionals/compat_hlcmods_aug/CfgWeapons.hpp similarity index 100% rename from optionals/hlcmods_aug_comp/CfgWeapons.hpp rename to optionals/compat_hlcmods_aug/CfgWeapons.hpp diff --git a/optionals/hlcmods_aug_comp/config.cpp b/optionals/compat_hlcmods_aug/config.cpp similarity index 100% rename from optionals/hlcmods_aug_comp/config.cpp rename to optionals/compat_hlcmods_aug/config.cpp diff --git a/optionals/hlcmods_aug_comp/script_component.hpp b/optionals/compat_hlcmods_aug/script_component.hpp similarity index 100% rename from optionals/hlcmods_aug_comp/script_component.hpp rename to optionals/compat_hlcmods_aug/script_component.hpp diff --git a/optionals/hlcmods_core_comp/CfgAmmo.hpp b/optionals/compat_hlcmods_core/CfgAmmo.hpp similarity index 100% rename from optionals/hlcmods_core_comp/CfgAmmo.hpp rename to optionals/compat_hlcmods_core/CfgAmmo.hpp diff --git a/optionals/hlcmods_core_comp/config.cpp b/optionals/compat_hlcmods_core/config.cpp similarity index 100% rename from optionals/hlcmods_core_comp/config.cpp rename to optionals/compat_hlcmods_core/config.cpp diff --git a/optionals/hlcmods_core_comp/script_component.hpp b/optionals/compat_hlcmods_core/script_component.hpp similarity index 100% rename from optionals/hlcmods_core_comp/script_component.hpp rename to optionals/compat_hlcmods_core/script_component.hpp diff --git a/optionals/hlcmods_fal_comp/CfgWeapons.hpp b/optionals/compat_hlcmods_fal/CfgWeapons.hpp similarity index 100% rename from optionals/hlcmods_fal_comp/CfgWeapons.hpp rename to optionals/compat_hlcmods_fal/CfgWeapons.hpp diff --git a/optionals/hlcmods_fal_comp/config.cpp b/optionals/compat_hlcmods_fal/config.cpp similarity index 100% rename from optionals/hlcmods_fal_comp/config.cpp rename to optionals/compat_hlcmods_fal/config.cpp diff --git a/optionals/hlcmods_fal_comp/script_component.hpp b/optionals/compat_hlcmods_fal/script_component.hpp similarity index 100% rename from optionals/hlcmods_fal_comp/script_component.hpp rename to optionals/compat_hlcmods_fal/script_component.hpp diff --git a/optionals/hlcmods_g3_comp/CfgWeapons.hpp b/optionals/compat_hlcmods_g3/CfgWeapons.hpp similarity index 100% rename from optionals/hlcmods_g3_comp/CfgWeapons.hpp rename to optionals/compat_hlcmods_g3/CfgWeapons.hpp diff --git a/optionals/hlcmods_g3_comp/config.cpp b/optionals/compat_hlcmods_g3/config.cpp similarity index 100% rename from optionals/hlcmods_g3_comp/config.cpp rename to optionals/compat_hlcmods_g3/config.cpp diff --git a/optionals/hlcmods_g3_comp/script_component.hpp b/optionals/compat_hlcmods_g3/script_component.hpp similarity index 100% rename from optionals/hlcmods_g3_comp/script_component.hpp rename to optionals/compat_hlcmods_g3/script_component.hpp diff --git a/optionals/hlcmods_m14_comp/CfgWeapons.hpp b/optionals/compat_hlcmods_m14/CfgWeapons.hpp similarity index 100% rename from optionals/hlcmods_m14_comp/CfgWeapons.hpp rename to optionals/compat_hlcmods_m14/CfgWeapons.hpp diff --git a/optionals/hlcmods_m14_comp/config.cpp b/optionals/compat_hlcmods_m14/config.cpp similarity index 100% rename from optionals/hlcmods_m14_comp/config.cpp rename to optionals/compat_hlcmods_m14/config.cpp diff --git a/optionals/hlcmods_m14_comp/script_component.hpp b/optionals/compat_hlcmods_m14/script_component.hpp similarity index 100% rename from optionals/hlcmods_m14_comp/script_component.hpp rename to optionals/compat_hlcmods_m14/script_component.hpp diff --git a/optionals/hlcmods_m60e4_comp/CfgWeapons.hpp b/optionals/compat_hlcmods_m60e4/CfgWeapons.hpp similarity index 100% rename from optionals/hlcmods_m60e4_comp/CfgWeapons.hpp rename to optionals/compat_hlcmods_m60e4/CfgWeapons.hpp diff --git a/optionals/hlcmods_m60e4_comp/config.cpp b/optionals/compat_hlcmods_m60e4/config.cpp similarity index 100% rename from optionals/hlcmods_m60e4_comp/config.cpp rename to optionals/compat_hlcmods_m60e4/config.cpp diff --git a/optionals/hlcmods_m60e4_comp/script_component.hpp b/optionals/compat_hlcmods_m60e4/script_component.hpp similarity index 100% rename from optionals/hlcmods_m60e4_comp/script_component.hpp rename to optionals/compat_hlcmods_m60e4/script_component.hpp diff --git a/optionals/rh_acc_comp/CfgWeapons.hpp b/optionals/compat_rh_acc/CfgWeapons.hpp similarity index 100% rename from optionals/rh_acc_comp/CfgWeapons.hpp rename to optionals/compat_rh_acc/CfgWeapons.hpp diff --git a/optionals/rh_acc_comp/config.cpp b/optionals/compat_rh_acc/config.cpp similarity index 100% rename from optionals/rh_acc_comp/config.cpp rename to optionals/compat_rh_acc/config.cpp diff --git a/optionals/rh_acc_comp/script_component.hpp b/optionals/compat_rh_acc/script_component.hpp similarity index 100% rename from optionals/rh_acc_comp/script_component.hpp rename to optionals/compat_rh_acc/script_component.hpp diff --git a/optionals/rh_de_comp/CfgAmmo.hpp b/optionals/compat_rh_de/CfgAmmo.hpp similarity index 100% rename from optionals/rh_de_comp/CfgAmmo.hpp rename to optionals/compat_rh_de/CfgAmmo.hpp diff --git a/optionals/rh_de_comp/CfgWeapons.hpp b/optionals/compat_rh_de/CfgWeapons.hpp similarity index 100% rename from optionals/rh_de_comp/CfgWeapons.hpp rename to optionals/compat_rh_de/CfgWeapons.hpp diff --git a/optionals/rh_de_comp/config.cpp b/optionals/compat_rh_de/config.cpp similarity index 100% rename from optionals/rh_de_comp/config.cpp rename to optionals/compat_rh_de/config.cpp diff --git a/optionals/rh_de_comp/script_component.hpp b/optionals/compat_rh_de/script_component.hpp similarity index 100% rename from optionals/rh_de_comp/script_component.hpp rename to optionals/compat_rh_de/script_component.hpp diff --git a/optionals/rh_m4_comp/CfgAmmo.hpp b/optionals/compat_rh_m4/CfgAmmo.hpp similarity index 100% rename from optionals/rh_m4_comp/CfgAmmo.hpp rename to optionals/compat_rh_m4/CfgAmmo.hpp diff --git a/optionals/rh_m4_comp/CfgWeapons.hpp b/optionals/compat_rh_m4/CfgWeapons.hpp similarity index 100% rename from optionals/rh_m4_comp/CfgWeapons.hpp rename to optionals/compat_rh_m4/CfgWeapons.hpp diff --git a/optionals/rh_m4_comp/config.cpp b/optionals/compat_rh_m4/config.cpp similarity index 100% rename from optionals/rh_m4_comp/config.cpp rename to optionals/compat_rh_m4/config.cpp diff --git a/optionals/rh_m4_comp/script_component.hpp b/optionals/compat_rh_m4/script_component.hpp similarity index 100% rename from optionals/rh_m4_comp/script_component.hpp rename to optionals/compat_rh_m4/script_component.hpp diff --git a/optionals/rh_pdw_comp/CfgAmmo.hpp b/optionals/compat_rh_pdw/CfgAmmo.hpp similarity index 100% rename from optionals/rh_pdw_comp/CfgAmmo.hpp rename to optionals/compat_rh_pdw/CfgAmmo.hpp diff --git a/optionals/rh_pdw_comp/CfgWeapons.hpp b/optionals/compat_rh_pdw/CfgWeapons.hpp similarity index 100% rename from optionals/rh_pdw_comp/CfgWeapons.hpp rename to optionals/compat_rh_pdw/CfgWeapons.hpp diff --git a/optionals/rh_pdw_comp/config.cpp b/optionals/compat_rh_pdw/config.cpp similarity index 100% rename from optionals/rh_pdw_comp/config.cpp rename to optionals/compat_rh_pdw/config.cpp diff --git a/optionals/rh_pdw_comp/script_component.hpp b/optionals/compat_rh_pdw/script_component.hpp similarity index 100% rename from optionals/rh_pdw_comp/script_component.hpp rename to optionals/compat_rh_pdw/script_component.hpp diff --git a/optionals/rksl_pm_ii_comp/CfgWeapons.hpp b/optionals/compat_rksl_pm_ii/CfgWeapons.hpp similarity index 100% rename from optionals/rksl_pm_ii_comp/CfgWeapons.hpp rename to optionals/compat_rksl_pm_ii/CfgWeapons.hpp diff --git a/optionals/rksl_pm_ii_comp/config.cpp b/optionals/compat_rksl_pm_ii/config.cpp similarity index 100% rename from optionals/rksl_pm_ii_comp/config.cpp rename to optionals/compat_rksl_pm_ii/config.cpp diff --git a/optionals/rksl_pm_ii_comp/script_component.hpp b/optionals/compat_rksl_pm_ii/script_component.hpp similarity index 100% rename from optionals/rksl_pm_ii_comp/script_component.hpp rename to optionals/compat_rksl_pm_ii/script_component.hpp From 7dc8a08b895f8a3b777c97b34b6b61abb0b3e991 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Fri, 24 Apr 2015 20:03:04 +0200 Subject: [PATCH 183/276] Replaced _currentshooter by _this Fixes script error `Error Undefined variable in expression: _currentshooter` --- addons/javelin/functions/fnc_onOpticDraw.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 6da83531263..8fa96c036a1 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -130,7 +130,7 @@ FUNC(disableFire) = { if(_firedEH < 0 && difficulty > 0) then { _firedEH = [ACE_player, "DefaultAction", {true}, { - _canFire = _currentShooter getVariable["ace_missileguidance_target", nil]; + _canFire = _this getVariable["ace_missileguidance_target", nil]; if(!isNil "_canFire") exitWith { false }; true }] call EFUNC(common,addActionEventHandler); @@ -289,4 +289,4 @@ _args set[3, _lockTime]; _args set[4, _soundTime]; _args set[6, _fireDisabledEH]; -uiNamespace setVariable[QGVAR(arguments), _args ]; \ No newline at end of file +uiNamespace setVariable[QGVAR(arguments), _args ]; From 3b9b09a7afeeddefbc63420543e78881932c25ea Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 24 Apr 2015 13:26:09 -0500 Subject: [PATCH 184/276] UpdateFiringTable-ChangesFromWeather --- addons/mk6mortar/RscRangeTable.hpp | 3 +- addons/mk6mortar/UI/RangeTable_background.paa | Bin 289652 -> 342488 bytes .../functions/fnc_dev_buildTable.sqf | 11 +- .../functions/fnc_dev_formatNumber.sqf | 4 +- .../fnc_dev_simulateCalcRangeTableLine.sqf | 10 +- .../fnc_dev_simulateFindSolution.sqf | 2 +- .../mk6mortar/functions/fnc_handleFired.sqf | 27 +- .../fnc_rangeTablePreCalculatedValues.sqf | 445 +++++++++--------- 8 files changed, 254 insertions(+), 248 deletions(-) diff --git a/addons/mk6mortar/RscRangeTable.hpp b/addons/mk6mortar/RscRangeTable.hpp index cb89b093e3a..6bf0e516199 100644 --- a/addons/mk6mortar/RscRangeTable.hpp +++ b/addons/mk6mortar/RscRangeTable.hpp @@ -33,7 +33,8 @@ class ACE_82mm_RangeTable_Dialog { y = "3.76 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)"; w = "16.2634559672906 * (safeZoneH / 40)"; h = "20.24 * ((safeZoneH / 1.2) / 25)"; - columns[] = {(10/792),(86/792),(172/792),(238/792),(329/792),(405/792),(462/792),(527/792),(588/792),(649/792),(710/792)}; + columns[] = {(10/867),(86/867),(171/867),(238/867),(320/867),(405/867), + (485/867),(546/867),(607/867),(668/867),(729/867),(790/867)}; rowHeight = 0.015 * safeZoneH; sizeEx = "0.014 * safeZoneH"; font = "EtelkaMonospacePro"; diff --git a/addons/mk6mortar/UI/RangeTable_background.paa b/addons/mk6mortar/UI/RangeTable_background.paa index a2a752ce6e563dad099d03be63140050cb06bb8d..bf4b5ee04405312e94420ebebc7a0ba5fee08640 100644 GIT binary patch literal 342488 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 z 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 diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf index a795b967765..7a60e91e687 100644 --- a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -28,7 +28,7 @@ _increasePerRow = 50; _outputArray = []; -//[_rangeToHit, _lineElevation, _lineHeightElevation, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] +//[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] while {_stillInRange} do { _result = [_muzzleVelocity, _currentRange, _airFriction] call FUNC(dev_simulateCalcRangeTableLine); @@ -50,13 +50,14 @@ while {_stillInRange} do { ([(_result select 1), "mil", true] call FUNC(dev_formatNumber)), ([(_result select 2), "mil", true] call FUNC(dev_formatNumber)), ([(_result select 3), "sec", false] call FUNC(dev_formatNumber)), - ([(_result select 4), "milPrecise", true] call FUNC(dev_formatNumber)), - ([(_result select 5), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 4), "sec", false] call FUNC(dev_formatNumber)), + ([(_result select 5), "milPrecise", true] call FUNC(dev_formatNumber)), ([(_result select 6), "metersprecise", false] call FUNC(dev_formatNumber)), ([(_result select 7), "metersprecise", false] call FUNC(dev_formatNumber)), ([(_result select 8), "metersprecise", false] call FUNC(dev_formatNumber)), ([(_result select 9), "metersprecise", false] call FUNC(dev_formatNumber)), - ([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)) + ([(_result select 10), "metersprecise", false] call FUNC(dev_formatNumber)), + ([(_result select 11), "metersprecise", false] call FUNC(dev_formatNumber)) ]; }; _currentRange = _currentRange + _increasePerRow; @@ -65,7 +66,7 @@ while {_stillInRange} do { }; //handle floating point rounding errors -_outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && ((abs(_airFriction - %2) < 0.00001))): { +_outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && {(abs(_airFriction - %2) < 0.00001)}): { [ ", _muzzleVelocity, _airFriction]; diff --git a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf index 84697bbf4a2..f89c3a1b8f9 100644 --- a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf +++ b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf @@ -1,6 +1,4 @@ /* -Name: AGM_Artillery_fnc_formatNumber - Author: Pabst Mirror Description: @@ -15,7 +13,7 @@ Returns: STRING - Formatted number Example: -[45, "mil4", true] call AGM_Artillery_fnc_formatNumber = "0800" +[45, "mil4", true] call ace_mk6mortar_fnc_dev_formatNumber = "0800" */ #include "script_component.hpp" diff --git a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf index b30c5429306..d1e0a8dd05b 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf @@ -1,6 +1,4 @@ /* -Name: AGM_Artillery_fnc_simulateCalcRangeTableLine - Author: Pabst Mirror Description: @@ -15,13 +13,13 @@ Returns: ARRAY - Range Table Line Data (see return line) Example: -[300, -0.0001, 3000] call AGM_Artillery_fnc_simulateCalcRangeTableLine +[300, -0.0001, 3000] call ace_mk6mortar_fnc_simulateCalcRangeTableLine */ #include "script_component.hpp" #define TIME_STEP (1/50) -private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTime", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"]; +private ["_startTime", "_muzzleVelocity", "_rangeToHit", "_airFriction", "_vacElevation", "_radicand", "_maxElev", "_minElev", "_error", "_solutionElevation", "_lastTestResult", "_numberOfAttempts", "_lineElevation", "_lineTimeOfFlight", "_lineHeightElevation", "_lineHeightTimeDelta", "_lineCrosswindDeg", "_lineHeadwindMeters", "_lineTailWindMeters", "_result"]; _startTime = diag_tickTime; @@ -44,7 +42,7 @@ _solution = [_rangeToHit, -100, _muzzleVelocity, _airFriction, TIME_STEP] call F if (_solution isEqualTo []) exitWith {[]};//should never be triggered (lower elevation easier to hit) _lineHeightElevation = ((_solution select 0) - _lineElevation); -// _lineHeightTime = (_lastTestResult select 1) - _lineTimeOfFlight; +_lineHeightTimeDelta = (_solution select 1) - _lineTimeOfFlight; //Compute for 10x and divide to minimize rounding errors @@ -78,4 +76,4 @@ _lineAirDensInc = (_rangeToHit - (_lastTestResult select 0)) / 10; // systemChat format ["debug: Range %1 - in %2 sec", _rangeToHit, (diag_tickTime - _startTime)]; -[_rangeToHit, _lineElevation, _lineHeightElevation, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] +[_rangeToHit, _lineElevation, _lineHeightElevation, _lineHeightTimeDelta, _lineTimeOfFlight, _lineCrosswindDeg, _lineHeadwindMeters, _lineTailWindMeters, _lineTempDec, _lineTempInc, _lineAirDensDec, _lineAirDensInc] diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf index edffa1beb21..a45c415b402 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -38,7 +38,7 @@ _lastTestResult = []; _numberOfAttempts = 0; //(binary search) -while {(_numberOfAttempts < MAX_ATTEMPTS) && ((abs _error) > 0.2)} do { +while {(_numberOfAttempts < MAX_ATTEMPTS) && {(abs _error) > 0.2}} do { _numberOfAttempts = _numberOfAttempts + 1; _solutionElevation = (_maxElev + _minElev) / 2; _lastTestResult = [_solutionElevation, _muzzleVelocity, _airFriction, 15, 1, 0, 0, _heightToHit, _timeStep] call FUNC(dev_simulateShot); diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 72c8aa4bff5..e2b440c5209 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -21,7 +21,7 @@ */ #include "script_component.hpp" -private ["_unit", "_shooterMan", "_bisAirFriction", "_temperature", "_newMuzzleVelocityCoefficent", "_bulletVelocity", "_bulletSpeed", "_muzzleVelocity", "_muzzleVelocityShift"]; +private ["_shooterMan", "_bisAirFriction", "_temperature", "_newMuzzleVelocityCoefficent", "_bulletVelocity", "_bulletSpeed", "_muzzleVelocity", "_muzzleVelocityShift"]; disableSerialization; @@ -39,17 +39,19 @@ if (!([_shooterMan] call EFUNC(common,isPlayer))) exitWith {false}; _bisAirFriction = getNumber (configFile >> "CfgAmmo" >> _ammo >> "airFriction"); if (_bisAirFriction != 0) exitWith {ERROR("Non zero base airFriction");}; -//Hack Until these are intergrated: -if (isNil QEGVAR(weather,currentRelativeDensity)) then { - EGVAR(weather,currentRelativeDensity) = 1; -}; -if (isNil QEGVAR(weather,currentTemperature)) then { - EGVAR(weather,currentTemperature) = 15; -}; +//Calculate air density: +_altitude = (getPosASL _vehicle) select 2; +#define GET_TEMPERATURE_AT_HEIGHT(h) (EGVAR(weather,currentTemperature) - 0.0065 * (h)) +_temperature = GET_TEMPERATURE_AT_HEIGHT(_altitude); +_pressure = _altitude call EFUNC(weather,calculateBarometricPressure); +_relativeHumidity = EGVAR(weather,currentHumidity); +_airDensity = [_temperature, _pressure, _relativeHumidity] call EFUNC(weather,calculateAirDensity); +_relativeDensity = _airDensity / 1.225; + +TRACE_5("FiredWeather",_temperature,_pressure,_relativeHumidity,_airDensity,_relativeDensity); //powder effects: -_temperature = EGVAR(weather,currentTemperature); _newMuzzleVelocityCoefficent = (((_temperature + 273.13) / 288.13 - 1) / 40 + 1); if (_newMuzzleVelocityCoefficent != 1) then { _bulletVelocity = velocity _projectile; @@ -59,10 +61,11 @@ if (_newMuzzleVelocityCoefficent != 1) then { _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; }; + [{ private ["_deltaT", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_dragRef", "_accelRef", "_drag", "_accel"]; PARAMS_2(_args,_pfID); - EXPLODE_3_PVT(_args,_shell,_airFriction,_time); + EXPLODE_4_PVT(_args,_shell,_airFriction,_time,_relativeDensity); if (isNull _shell || {!alive _shell}) exitwith { [_pfID] call cba_fnc_removePerFrameHandler; @@ -77,10 +80,10 @@ if (_newMuzzleVelocityCoefficent != 1) then { _trueVelocity = _bulletVelocity vectorDiff ACE_wind; _trueSpeed = vectorMagnitude _trueVelocity; - _drag = _deltaT * _airFriction * _trueSpeed * EGVAR(weather,currentRelativeDensity); + _drag = _deltaT * _airFriction * _trueSpeed * _relativeDensity; _accel = _trueVelocity vectorMultiply (_drag); _bulletVelocity = _bulletVelocity vectorAdd _accel; _shell setVelocity _bulletVelocity; -}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time]] call CBA_fnc_addPerFrameHandler; +}, 0, [_projectile, MK6_82mm_AIR_FRICTION, time, _relativeDensity]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index 6752a875421..d775b873656 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -21,242 +21,247 @@ PARAMS_2(_muzzleVelocity,_airFriction); switch (true) do { -case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { +case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): { [ - ["100","1493","9","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"], - ["150","1438","14","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"], - ["200","1381","20","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"], - ["250","1321","27","13.6","1.5","0.5","-0.4","0.0","-0.0","-0.1","0.1"], - ["300","1256","36","13.3","1.3","0.6","-0.5","0.0","-0.1","-0.1","0.1"], - ["350","1183","49","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"], - ["400","1097","70","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"], - ["450","979","113","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"] + ["100","1493","9","1.4","14.0","3.7","0.4","-0.3","0.0","-0.0","-0.0","0.0"], + ["150","1438","14","1.4","13.9","2.5","0.4","-0.4","0.0","-0.0","-0.1","0.0"], + ["200","1381","20","1.4","13.8","1.9","0.5","-0.4","0.0","-0.0","-0.1","0.1"], + ["250","1321","27","1.5","13.6","1.5","0.5","-0.4","0.0","-0.0","-0.1","0.1"], + ["300","1256","36","1.6","13.3","1.3","0.6","-0.5","0.0","-0.1","-0.1","0.1"], + ["350","1183","49","1.7","12.9","1.1","0.6","-0.5","0.1","-0.1","-0.1","0.1"], + ["400","1097","70","1.9","12.4","0.9","0.6","-0.5","0.1","-0.1","-0.2","0.1"], + ["450","979","113","2.3","11.6","0.8","0.6","-0.5","0.1","-0.1","-0.2","0.2"] ] }; -case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { +case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): { [ - ["250","1527","2","27.2","9.9","2.6","-2.4","0.0","-0.0","-0.3","0.3"], - ["300","1512","2","27.2","8.3","2.7","-2.4","0.1","-0.0","-0.4","0.4"], - ["350","1497","3","27.1","7.1","2.7","-2.5","0.0","-0.1","-0.5","0.4"], - ["400","1482","3","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"], - ["450","1467","3","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"], - ["500","1451","4","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"], - ["550","1436","4","26.9","4.6","2.9","-2.6","0.1","-0.1","-0.7","0.7"], - ["600","1420","5","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"], - ["650","1404","5","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"], - ["700","1388","6","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"], - ["750","1372","6","26.6","3.4","3.2","-2.8","0.1","-0.1","-1.0","1.0"], - ["800","1355","7","26.5","3.2","3.2","-2.9","0.1","-0.1","-1.1","1.1"], - ["850","1338","8","26.4","3.0","3.3","-2.9","0.1","-0.1","-1.1","1.1"], - ["900","1321","8","26.2","2.8","3.4","-3.0","0.1","-0.1","-1.2","1.2"], - ["950","1303","9","26.1","2.7","3.4","-3.1","0.1","-0.2","-1.3","1.2"], - ["1000","1285","10","26.0","2.6","3.5","-3.1","0.2","-0.1","-1.4","1.3"], - ["1050","1266","11","25.8","2.4","3.5","-3.2","0.1","-0.2","-1.4","1.4"], - ["1100","1247","12","25.7","2.3","3.6","-3.3","0.1","-0.2","-1.5","1.4"], - ["1150","1228","13","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"], - ["1200","1207","14","25.3","2.1","3.7","-3.4","0.2","-0.2","-1.7","1.6"], - ["1250","1186","15","25.1","2.0","3.8","-3.4","0.2","-0.2","-1.7","1.7"], - ["1300","1163","17","24.8","1.9","3.8","-3.5","0.2","-0.2","-1.8","1.7"], - ["1350","1140","19","24.6","1.9","3.9","-3.5","0.2","-0.2","-1.9","1.8"], - ["1400","1115","21","24.3","1.8","3.9","-3.6","0.2","-0.2","-1.9","1.9"], - ["1450","1088","24","23.9","1.7","4.0","-3.6","0.2","-0.2","-2.0","1.9"], - ["1500","1060","27","23.6","1.6","4.0","-3.7","0.2","-0.2","-2.1","2.0"], - ["1550","1028","32","23.1","1.5","4.0","-3.7","0.2","-0.2","-2.1","2.1"], - ["1600","991","38","22.6","1.5","4.0","-3.7","0.2","-0.2","-2.2","2.1"], - ["1650","947","49","21.9","1.4","4.0","-3.7","0.2","-0.3","-2.3","2.2"], - ["1700","888","71","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"] + ["150","1556","1","0.8","27.2","16.3","2.5","-2.4","0.0","-0.0","-0.2","0.2"], + ["200","1541","1","0.8","27.2","12.3","2.5","-2.4","0.0","-0.0","-0.3","0.2"], + ["250","1527","2","0.8","27.2","9.9","2.6","-2.4","0.0","-0.0","-0.3","0.3"], + ["300","1512","2","0.8","27.2","8.3","2.7","-2.4","0.1","-0.0","-0.4","0.4"], + ["350","1497","3","0.8","27.1","7.1","2.7","-2.5","0.0","-0.1","-0.5","0.4"], + ["400","1482","3","0.8","27.1","6.2","2.7","-2.5","0.1","-0.1","-0.5","0.5"], + ["450","1467","3","0.8","27.0","5.6","2.8","-2.5","0.1","-0.1","-0.6","0.6"], + ["500","1451","4","0.8","27.0","5.0","2.9","-2.6","0.1","-0.1","-0.6","0.6"], + ["550","1436","4","0.8","26.9","4.6","2.9","-2.6","0.1","-0.1","-0.7","0.7"], + ["600","1420","5","0.8","26.8","4.2","3.0","-2.7","0.1","-0.1","-0.8","0.8"], + ["650","1404","5","0.8","26.8","3.9","3.0","-2.7","0.1","-0.1","-0.9","0.8"], + ["700","1388","6","0.8","26.7","3.6","3.1","-2.8","0.1","-0.1","-0.9","0.9"], + ["750","1372","6","0.8","26.6","3.4","3.2","-2.8","0.1","-0.1","-1.0","1.0"], + ["800","1355","7","0.8","26.5","3.2","3.2","-2.9","0.1","-0.1","-1.1","1.1"], + ["850","1338","8","0.8","26.4","3.0","3.3","-2.9","0.1","-0.1","-1.1","1.1"], + ["900","1321","8","0.8","26.2","2.8","3.4","-3.0","0.1","-0.1","-1.2","1.2"], + ["950","1303","9","0.9","26.1","2.7","3.4","-3.1","0.1","-0.2","-1.3","1.2"], + ["1000","1285","10","0.9","26.0","2.6","3.5","-3.1","0.2","-0.1","-1.4","1.3"], + ["1050","1266","11","0.9","25.8","2.4","3.5","-3.2","0.1","-0.2","-1.4","1.4"], + ["1100","1247","12","0.9","25.7","2.3","3.6","-3.3","0.1","-0.2","-1.5","1.4"], + ["1150","1228","13","0.9","25.5","2.2","3.7","-3.3","0.2","-0.2","-1.6","1.5"], + ["1200","1207","14","1.0","25.3","2.1","3.7","-3.4","0.2","-0.2","-1.7","1.6"], + ["1250","1186","15","1.0","25.1","2.0","3.8","-3.4","0.2","-0.2","-1.7","1.7"], + ["1300","1163","17","1.0","24.8","1.9","3.8","-3.5","0.2","-0.2","-1.8","1.7"], + ["1350","1140","19","1.0","24.6","1.9","3.9","-3.5","0.2","-0.2","-1.9","1.8"], + ["1400","1115","21","1.1","24.3","1.8","3.9","-3.6","0.2","-0.2","-1.9","1.9"], + ["1450","1088","24","1.1","23.9","1.7","4.0","-3.6","0.2","-0.2","-2.0","1.9"], + ["1500","1060","27","1.2","23.6","1.6","4.0","-3.7","0.2","-0.2","-2.1","2.0"], + ["1550","1028","32","1.3","23.1","1.5","4.0","-3.7","0.2","-0.2","-2.1","2.1"], + ["1600","991","38","1.4","22.6","1.5","4.0","-3.7","0.2","-0.2","-2.2","2.1"], + ["1650","947","49","1.7","21.9","1.4","4.0","-3.7","0.2","-0.3","-2.3","2.2"], + ["1700","888","71","2.1","21.0","1.3","3.9","-3.6","0.3","-0.3","-2.3","2.2"] ] }; -case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - -0.0001) < 0.00001))): { +case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - -0.0001) < 0.00001)}): { [ - ["450","1527","1","37.3","13.4","6.3","-6.0","0.1","-0.1","-1.0","1.0"], - ["500","1519","1","37.2","12.1","6.3","-6.0","0.1","-0.1","-1.1","1.1"], - ["550","1510","1","37.2","11.0","6.4","-6.0","0.1","-0.1","-1.3","1.2"], - ["600","1502","1","37.2","10.1","6.4","-6.1","0.1","-0.1","-1.4","1.3"], - ["650","1494","1","37.2","9.4","6.5","-6.1","0.1","-0.1","-1.5","1.4"], - ["700","1485","2","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"], - ["750","1477","2","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"], - ["800","1468","2","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"], - ["850","1460","2","37.0","7.2","6.7","-6.3","0.1","-0.1","-2.0","1.9"], - ["900","1451","2","37.0","6.8","6.8","-6.4","0.1","-0.1","-2.1","2.0"], - ["950","1443","2","36.9","6.5","6.9","-6.4","0.1","-0.1","-2.2","2.1"], - ["1000","1434","2","36.9","6.2","6.9","-6.5","0.1","-0.1","-2.3","2.2"], - ["1050","1425","2","36.8","5.9","7.0","-6.6","0.1","-0.2","-2.5","2.3"], - ["1100","1417","3","36.8","5.6","7.1","-6.6","0.1","-0.2","-2.6","2.4"], - ["1150","1408","3","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"], - ["1200","1399","3","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"], - ["1250","1390","3","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"], - ["1300","1381","3","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"], - ["1350","1372","3","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"], - ["1400","1362","4","36.4","4.4","7.5","-7.0","0.2","-0.2","-3.3","3.1"], - ["1450","1353","4","36.3","4.3","7.6","-7.1","0.2","-0.2","-3.4","3.2"], - ["1500","1344","4","36.2","4.2","7.7","-7.1","0.2","-0.2","-3.5","3.4"], - ["1550","1334","4","36.1","4.0","7.7","-7.2","0.2","-0.2","-3.7","3.5"], - ["1600","1324","4","36.0","3.9","7.8","-7.3","0.2","-0.2","-3.8","3.6"], - ["1650","1314","4","35.9","3.8","7.9","-7.3","0.2","-0.2","-3.9","3.7"], - ["1700","1304","5","35.8","3.7","7.9","-7.4","0.2","-0.2","-4.0","3.8"], - ["1750","1294","5","35.7","3.6","8.0","-7.5","0.2","-0.2","-4.2","3.9"], - ["1800","1284","5","35.6","3.5","8.1","-7.6","0.2","-0.3","-4.3","4.0"], - ["1850","1274","5","35.5","3.4","8.2","-7.6","0.2","-0.3","-4.4","4.2"], - ["1900","1263","6","35.4","3.3","8.2","-7.7","0.2","-0.3","-4.5","4.3"], - ["1950","1253","6","35.2","3.2","8.3","-7.8","0.2","-0.3","-4.7","4.4"], - ["2000","1242","6","35.1","3.1","8.4","-7.8","0.3","-0.3","-4.8","4.5"], - ["2050","1231","7","35.0","3.0","8.4","-7.9","0.3","-0.3","-4.9","4.7"], - ["2100","1219","7","34.8","2.9","8.5","-8.0","0.3","-0.3","-5.0","4.8"], - ["2150","1208","7","34.7","2.9","8.5","-8.0","0.3","-0.3","-5.2","4.9"], - ["2200","1196","8","34.5","2.8","8.6","-8.1","0.3","-0.3","-5.3","5.0"], - ["2250","1184","8","34.3","2.7","8.7","-8.2","0.3","-0.3","-5.4","5.1"], - ["2300","1171","9","34.2","2.7","8.7","-8.2","0.3","-0.3","-5.5","5.2"], - ["2350","1158","9","34.0","2.6","8.8","-8.3","0.3","-0.3","-5.7","5.4"], - ["2400","1145","10","33.8","2.5","8.8","-8.3","0.3","-0.3","-5.8","5.5"], - ["2450","1132","10","33.6","2.5","8.9","-8.4","0.3","-0.3","-5.9","5.6"], - ["2500","1118","11","33.3","2.4","8.9","-8.4","0.3","-0.3","-6.0","5.7"], - ["2550","1103","12","33.1","2.4","9.0","-8.5","0.3","-0.3","-6.1","5.8"], - ["2600","1088","13","32.8","2.3","9.0","-8.5","0.4","-0.3","-6.2","5.9"], - ["2650","1072","14","32.6","2.2","9.0","-8.6","0.4","-0.4","-6.4","6.0"], - ["2700","1056","15","32.3","2.2","9.0","-8.6","0.3","-0.4","-6.5","6.1"], - ["2750","1038","16","31.9","2.1","9.1","-8.6","0.4","-0.4","-6.6","6.3"], - ["2800","1020","18","31.6","2.1","9.1","-8.6","0.4","-0.4","-6.7","6.4"], - ["2850","1000","20","31.2","2.0","9.1","-8.6","0.4","-0.4","-6.8","6.5"], - ["2900","978","22","30.8","1.9","9.0","-8.6","0.4","-0.4","-6.9","6.5"], - ["2950","954","26","30.3","1.9","9.0","-8.6","0.4","-0.4","-7.0","6.6"], - ["3000","927","31","29.7","1.8","8.9","-8.5","0.4","-0.4","-7.1","6.7"], - ["3050","894","38","29.0","1.7","8.8","-8.4","0.4","-0.4","-7.2","6.8"], - ["3100","849","54","27.9","1.6","8.5","-8.3","0.4","-0.4","-7.2","6.8"] + ["250","1559","1","0.6","37.3","23.8","6.1","-5.9","0.0","-0.0","-0.6","0.5"], + ["300","1551","1","0.6","37.3","20.0","6.1","-5.9","0.1","-0.0","-0.7","0.7"], + ["350","1543","1","0.6","37.3","17.2","6.2","-5.9","0.0","-0.1","-0.8","0.7"], + ["400","1535","1","0.6","37.3","15.1","6.2","-5.9","0.1","-0.0","-0.9","0.9"], + ["450","1527","1","0.6","37.3","13.4","6.3","-6.0","0.1","-0.1","-1.0","1.0"], + ["500","1519","1","0.6","37.2","12.1","6.3","-6.0","0.1","-0.1","-1.1","1.1"], + ["550","1510","1","0.6","37.2","11.0","6.4","-6.0","0.1","-0.1","-1.3","1.2"], + ["600","1502","1","0.6","37.2","10.1","6.4","-6.1","0.1","-0.1","-1.4","1.3"], + ["650","1494","1","0.6","37.2","9.4","6.5","-6.1","0.1","-0.1","-1.5","1.4"], + ["700","1485","2","0.6","37.1","8.7","6.5","-6.2","0.1","-0.1","-1.6","1.5"], + ["750","1477","2","0.6","37.1","8.2","6.6","-6.2","0.1","-0.1","-1.7","1.6"], + ["800","1468","2","0.6","37.0","7.7","6.7","-6.3","0.1","-0.1","-1.8","1.8"], + ["850","1460","2","0.6","37.0","7.2","6.7","-6.3","0.1","-0.1","-2.0","1.9"], + ["900","1451","2","0.6","37.0","6.8","6.8","-6.4","0.1","-0.1","-2.1","2.0"], + ["950","1443","2","0.6","36.9","6.5","6.9","-6.4","0.1","-0.1","-2.2","2.1"], + ["1000","1434","2","0.6","36.9","6.2","6.9","-6.5","0.1","-0.1","-2.3","2.2"], + ["1050","1425","2","0.6","36.8","5.9","7.0","-6.6","0.1","-0.2","-2.5","2.3"], + ["1100","1417","3","0.6","36.8","5.6","7.1","-6.6","0.1","-0.2","-2.6","2.4"], + ["1150","1408","3","0.6","36.7","5.4","7.1","-6.7","0.2","-0.2","-2.7","2.5"], + ["1200","1399","3","0.6","36.6","5.2","7.2","-6.7","0.2","-0.2","-2.8","2.7"], + ["1250","1390","3","0.6","36.6","5.0","7.3","-6.8","0.2","-0.2","-2.9","2.8"], + ["1300","1381","3","0.6","36.5","4.8","7.4","-6.9","0.2","-0.2","-3.0","2.9"], + ["1350","1372","3","0.6","36.4","4.6","7.4","-6.9","0.2","-0.2","-3.2","3.0"], + ["1400","1362","4","0.6","36.4","4.4","7.5","-7.0","0.2","-0.2","-3.3","3.1"], + ["1450","1353","4","0.6","36.3","4.3","7.6","-7.1","0.2","-0.2","-3.4","3.2"], + ["1500","1344","4","0.6","36.2","4.2","7.7","-7.1","0.2","-0.2","-3.5","3.4"], + ["1550","1334","4","0.6","36.1","4.0","7.7","-7.2","0.2","-0.2","-3.7","3.5"], + ["1600","1324","4","0.6","36.0","3.9","7.8","-7.3","0.2","-0.2","-3.8","3.6"], + ["1650","1314","4","0.7","35.9","3.8","7.9","-7.3","0.2","-0.2","-3.9","3.7"], + ["1700","1304","5","0.7","35.8","3.7","7.9","-7.4","0.2","-0.2","-4.0","3.8"], + ["1750","1294","5","0.7","35.7","3.6","8.0","-7.5","0.2","-0.2","-4.2","3.9"], + ["1800","1284","5","0.7","35.6","3.5","8.1","-7.6","0.2","-0.3","-4.3","4.0"], + ["1850","1274","5","0.7","35.5","3.4","8.2","-7.6","0.2","-0.3","-4.4","4.2"], + ["1900","1263","6","0.7","35.4","3.3","8.2","-7.7","0.2","-0.3","-4.5","4.3"], + ["1950","1253","6","0.7","35.2","3.2","8.3","-7.8","0.2","-0.3","-4.7","4.4"], + ["2000","1242","6","0.7","35.1","3.1","8.4","-7.8","0.3","-0.3","-4.8","4.5"], + ["2050","1231","7","0.7","35.0","3.0","8.4","-7.9","0.3","-0.3","-4.9","4.7"], + ["2100","1219","7","0.7","34.8","2.9","8.5","-8.0","0.3","-0.3","-5.0","4.8"], + ["2150","1208","7","0.7","34.7","2.9","8.5","-8.0","0.3","-0.3","-5.2","4.9"], + ["2200","1196","8","0.7","34.5","2.8","8.6","-8.1","0.3","-0.3","-5.3","5.0"], + ["2250","1184","8","0.7","34.3","2.7","8.7","-8.2","0.3","-0.3","-5.4","5.1"], + ["2300","1171","9","0.8","34.2","2.7","8.7","-8.2","0.3","-0.3","-5.5","5.2"], + ["2350","1158","9","0.8","34.0","2.6","8.8","-8.3","0.3","-0.3","-5.7","5.4"], + ["2400","1145","10","0.8","33.8","2.5","8.8","-8.3","0.3","-0.3","-5.8","5.5"], + ["2450","1132","10","0.8","33.6","2.5","8.9","-8.4","0.3","-0.3","-5.9","5.6"], + ["2500","1118","11","0.8","33.3","2.4","8.9","-8.4","0.3","-0.3","-6.0","5.7"], + ["2550","1103","12","0.8","33.1","2.4","9.0","-8.5","0.3","-0.3","-6.1","5.8"], + ["2600","1088","13","0.9","32.8","2.3","9.0","-8.5","0.4","-0.3","-6.2","5.9"], + ["2650","1072","14","0.9","32.6","2.2","9.0","-8.6","0.4","-0.4","-6.4","6.0"], + ["2700","1056","15","0.9","32.3","2.2","9.0","-8.6","0.3","-0.4","-6.5","6.1"], + ["2750","1038","16","1.0","31.9","2.1","9.1","-8.6","0.4","-0.4","-6.6","6.3"], + ["2800","1020","18","1.0","31.6","2.1","9.1","-8.6","0.4","-0.4","-6.7","6.4"], + ["2850","1000","20","1.1","31.2","2.0","9.1","-8.6","0.4","-0.4","-6.8","6.5"], + ["2900","978","22","1.1","30.8","1.9","9.0","-8.6","0.4","-0.4","-6.9","6.5"], + ["2950","954","26","1.2","30.3","1.9","9.0","-8.6","0.4","-0.4","-7.0","6.6"], + ["3000","927","31","1.4","29.7","1.8","8.9","-8.5","0.4","-0.4","-7.1","6.7"], + ["3050","894","38","1.6","29.0","1.7","8.8","-8.4","0.4","-0.4","-7.2","6.8"], + ["3100","849","54","2.0","27.9","1.6","8.5","-8.3","0.4","-0.4","-7.2","6.8"] ] }; - -case ((abs(_muzzleVelocity - 70) < 0.00001) && ((abs(_airFriction - 0) < 0.00001))): { +case ((abs(_muzzleVelocity - 70) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { [ - ["100","1497","9","14.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["150","1445","14","14.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["200","1390","19","14.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["250","1333","26","13.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["300","1272","34","13.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["350","1204","45","13.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["400","1127","61","12.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["450","1028","91","12.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ["100","1497","9","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["150","1445","14","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["200","1390","19","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["250","1333","26","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["300","1272","34","1.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["350","1204","45","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["400","1127","61","1.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["450","1028","91","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] ] }; -case ((abs(_muzzleVelocity - 140) < 0.00001) && ((abs(_airFriction - 0) < 0.00001))): { +case ((abs(_muzzleVelocity - 140) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { [ - ["150","1562","1","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["200","1549","1","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["250","1536","2","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["300","1523","2","28.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["350","1510","2","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["400","1497","3","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["450","1484","3","28.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["500","1471","3","28.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["550","1458","4","28.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["600","1445","4","28.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["650","1431","4","28.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["700","1418","5","28.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["750","1404","5","28.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["800","1390","6","27.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["850","1376","6","27.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["900","1362","6","27.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["950","1348","7","27.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1000","1333","7","27.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1050","1318","8","27.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1100","1303","9","27.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1150","1288","9","27.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1200","1272","10","27.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1250","1256","11","26.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1300","1239","12","26.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1350","1222","13","26.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1400","1205","13","26.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1450","1187","15","26.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1500","1168","16","26.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1550","1148","18","25.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1600","1127","19","25.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1650","1105","21","25.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1700","1082","24","24.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1750","1057","27","24.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1800","1029","31","24.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1850","997","37","23.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1900","960","46","23.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1950","912","63","22.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ["150","1562","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["200","1549","1","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["250","1536","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["300","1523","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["350","1510","2","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["400","1497","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["450","1484","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["500","1471","3","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["550","1458","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["600","1445","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["650","1431","4","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["700","1418","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["750","1404","5","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1390","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["850","1376","6","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["900","1362","6","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1348","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1333","7","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1050","1318","8","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1100","1303","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1150","1288","9","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1200","1272","10","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1250","1256","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1239","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1350","1222","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1400","1205","13","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1450","1187","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1500","1168","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1550","1148","18","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1600","1127","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1650","1105","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1700","1082","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1750","1057","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1800","1029","31","1.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","997","37","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1900","960","46","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1950","912","63","1.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"] ] }; -case ((abs(_muzzleVelocity - 200) < 0.00001) && ((abs(_airFriction - 0) < 0.00001))): { +case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - 0) < 0.00001)}): { [ - ["300","1563","0","40.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["350","1556","1","40.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["400","1550","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["450","1544","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["500","1537","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["550","1531","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["600","1525","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["650","1519","1","40.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["700","1512","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["750","1506","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["800","1499","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["850","1493","1","40.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["900","1487","1","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["950","1480","1","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1000","1474","2","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1050","1467","2","40.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1100","1461","2","40.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1150","1454","2","40.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1200","1448","2","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1250","1441","2","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1300","1435","2","40.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1350","1428","2","40.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1400","1422","2","40.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1450","1415","2","40.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1500","1408","2","40.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1550","1402","3","40.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1600","1395","3","40.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1650","1388","3","39.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1700","1381","3","39.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1750","1374","3","39.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1800","1367","3","39.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1850","1360","3","39.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1900","1353","3","39.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["1950","1346","4","39.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2000","1339","4","39.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2050","1332","4","39.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2100","1325","4","39.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2150","1317","4","39.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2200","1310","4","39.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2250","1302","4","39.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2300","1295","5","39.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2350","1287","5","38.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2400","1280","5","38.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2450","1272","5","38.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2500","1264","5","38.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2550","1256","5","38.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2600","1248","6","38.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2650","1240","6","38.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2700","1232","6","38.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2750","1223","6","38.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2800","1215","7","37.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2850","1206","7","37.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2900","1197","7","37.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["2950","1188","7","37.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3000","1179","8","37.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3050","1170","8","37.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3100","1160","8","37.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3150","1151","9","36.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3200","1141","9","36.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3250","1131","10","36.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3300","1120","10","36.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3350","1109","11","36.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3400","1098","11","35.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3450","1087","12","35.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3500","1075","13","35.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3550","1062","14","35.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3600","1049","15","35.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3650","1036","16","34.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3700","1021","17","34.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3750","1006","19","34.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3800","990","21","33.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3850","971","24","33.3","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3900","952","27","32.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["3950","929","32","32.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["4000","900","40","31.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], - ["4050","861","56","30.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] + ["300","1563","0","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["350","1556","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["400","1550","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["450","1544","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["500","1537","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["550","1531","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["600","1525","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["650","1519","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["700","1512","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["750","1506","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["800","1499","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["850","1493","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["900","1487","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["950","1480","1","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1000","1474","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1050","1467","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1100","1461","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1150","1454","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1200","1448","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1250","1441","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1300","1435","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1350","1428","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1400","1422","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1450","1415","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1500","1408","2","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1550","1402","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1600","1395","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1650","1388","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["1700","1381","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1750","1374","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1800","1367","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1850","1360","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1900","1353","3","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["1950","1346","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2000","1339","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2050","1332","4","0.5","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2100","1325","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2150","1317","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2200","1310","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2250","1302","4","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2300","1295","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2350","1287","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2400","1280","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2450","1272","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2500","1264","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2550","1256","5","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2600","1248","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2650","1240","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2700","1232","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2750","1223","6","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2800","1215","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["2850","1206","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2900","1197","7","0.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["2950","1188","7","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3000","1179","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3050","1170","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3100","1160","8","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3150","1151","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3200","1141","9","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3250","1131","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3300","1120","10","0.7","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3350","1109","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3400","1098","11","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3450","1087","12","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3500","1075","13","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3550","1062","14","0.8","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3600","1049","15","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3650","1036","16","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3700","1021","17","0.9","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3750","1006","19","1.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3800","990","21","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3850","971","24","1.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["3900","952","27","1.2","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["3950","929","32","1.4","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"], + ["4000","900","40","1.6","0.0","0.0","0.0","0.0","0.0","0.0","0.0","-0.0"], + ["4050","861","56","2.1","0.0","0.0","0.0","0.0","0.0","0.0","0.0","0.0"] ] }; default { From aa0b1ecba001f71e953083a5adce063769dfacd7 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Fri, 24 Apr 2015 21:35:20 +0200 Subject: [PATCH 185/276] PL translation fix --- addons/realisticnames/stringtable.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 341b2a383fb..69b568dbca7 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -519,7 +519,7 @@ Punisher (GMG) Punisher (GMW) Punisher (GMG) - Punisher (CKM) + Punisher (GMG) Punisher (granátomet) Punisher (GMG) Kаратель (Гранатомет) From 8e62a0bf8fd0d3518fd3a2d31fe7af63dba57d02 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Fri, 24 Apr 2015 13:25:40 -0700 Subject: [PATCH 186/276] Fixed: make.py looking for private key in the wrong area --- tools/make.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index 597ccb314a4..c7dfd2e4fb2 100644 --- a/tools/make.py +++ b/tools/make.py @@ -721,7 +721,7 @@ def main(argv): # Make the key specified from command line if necessary. if new_key: - if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")): + if not os.path.isfile(os.path.join(private_key_path, key_name + ".biprivatekey")): print_yellow("\nRequested key does not exist.") try: os.makedirs(private_key_path) From 732e7cc28faf3f6ee28fa9e17f263befb27a1fce Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Fri, 24 Apr 2015 14:43:30 -0700 Subject: [PATCH 187/276] remove obsolete PBOs and their signatures during the build process. --- tools/make.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/make.py b/tools/make.py index c7dfd2e4fb2..b4a1dfdbde4 100644 --- a/tools/make.py +++ b/tools/make.py @@ -449,6 +449,13 @@ def build_signature_file(file_name): return True else: return False + + +def check_for_obsolete_pbos(addonspath, file): + module = file[4:-4] + if not os.path.exists(os.path.join(addonspath, module)): + return True + return False ############################################################################### @@ -759,6 +766,14 @@ def main(argv): key = os.path.join(private_key_path, key_name + ".biprivatekey") + # Remove any obsolete files. + obsolete_check_path = os.path.join(module_root, release_dir, project,"addons") + for file in os.listdir(obsolete_check_path): + if (file.endswith(".pbo") and os.path.isfile(os.path.join(obsolete_check_path,file))): + if check_for_obsolete_pbos(module_root, file): + fileName = os.path.splitext(file)[0] + print_yellow("Removing obsolete file => " + file)) + purge(obsolete_check_path,fileName+"\..",fileName+".*") # For each module, prep files and then build. print_blue("\nBuilding...") From 97a4bab70cea0070f12fe87e9c154fdd0c81f87c Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Fri, 24 Apr 2015 14:44:57 -0700 Subject: [PATCH 188/276] Fixed a typo --- tools/make.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/make.py b/tools/make.py index b4a1dfdbde4..752238cdc53 100644 --- a/tools/make.py +++ b/tools/make.py @@ -772,7 +772,7 @@ def main(argv): if (file.endswith(".pbo") and os.path.isfile(os.path.join(obsolete_check_path,file))): if check_for_obsolete_pbos(module_root, file): fileName = os.path.splitext(file)[0] - print_yellow("Removing obsolete file => " + file)) + print_yellow("Removing obsolete file => " + file) purge(obsolete_check_path,fileName+"\..",fileName+".*") # For each module, prep files and then build. From 4c9b94912a686ec1a0c6d191e9ed3d736f95e826 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Fri, 24 Apr 2015 14:46:47 -0700 Subject: [PATCH 189/276] Adding notification --- tools/make.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/make.py b/tools/make.py index 752238cdc53..903f72d023d 100644 --- a/tools/make.py +++ b/tools/make.py @@ -767,6 +767,7 @@ def main(argv): key = os.path.join(private_key_path, key_name + ".biprivatekey") # Remove any obsolete files. + print_blue("\nChecking for obsolete files...") obsolete_check_path = os.path.join(module_root, release_dir, project,"addons") for file in os.listdir(obsolete_check_path): if (file.endswith(".pbo") and os.path.isfile(os.path.join(obsolete_check_path,file))): From e6062d577a6a6d38e3277fcc468f49c29af92874 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Fri, 24 Apr 2015 15:08:19 -0700 Subject: [PATCH 190/276] Moving some notices around. --- tools/make.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/make.py b/tools/make.py index 903f72d023d..382f8dd7765 100644 --- a/tools/make.py +++ b/tools/make.py @@ -309,12 +309,12 @@ def copy_important_files(source_dir,destination_dir): "logo_ace3_ca.paa" ] - print_yellow ("source_dir: " + source_dir) - print_yellow("destination_dir: " + destination_dir) - #copy importantFiles try: print_blue("\nSearching for important files in " + source_dir) + print("Source_dir: " + source_dir) + print("Destination_dir: " + destination_dir) + for file in importantFiles: print_green("Copying file => " + os.path.join(source_dir,file)) shutil.copyfile(os.path.join(source_dir,file),os.path.join(destination_dir,file)) @@ -1060,8 +1060,6 @@ def main(argv): except: print_error("ERROR: Could not delete pboProject temp files.") - print_green("\nDone.") - copy_important_files(module_root_parent,os.path.join(release_dir, "@ace")) cleanup_optionals(optionals_modules) @@ -1103,6 +1101,9 @@ def main(argv): shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project)) except: print_error("Could not copy files. Is Arma 3 running?") + + print_green("\nDone.") + if __name__ == "__main__": main(sys.argv) From be3de0d965a0690119a0a046c538f3de6b1687d7 Mon Sep 17 00:00:00 2001 From: ViperMaul Date: Fri, 24 Apr 2015 15:25:32 -0700 Subject: [PATCH 191/276] Fixing missing inheritance: class HLC_762x54_tracer: HLC_762x51_tracer --- optionals/compat_hlcmods_core/CfgAmmo.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/optionals/compat_hlcmods_core/CfgAmmo.hpp b/optionals/compat_hlcmods_core/CfgAmmo.hpp index dd060b5cbb1..7259d2da3d1 100644 --- a/optionals/compat_hlcmods_core/CfgAmmo.hpp +++ b/optionals/compat_hlcmods_core/CfgAmmo.hpp @@ -4,6 +4,7 @@ class CfgAmmo class B_556x45_Ball; class B_127x99_Ball; class B_127x99_Ball_Tracer_Red; + class HLC_762x51_tracer; class HLC_762x51_ball; class HLC_556NATO_EPR: B_556x45_Ball { From d7d0f00592eb515edae5dac841b5102cced17af8 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 25 Apr 2015 05:51:44 +0200 Subject: [PATCH 192/276] tweaking recoil --- addons/recoil/CfgRecoils.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/recoil/CfgRecoils.hpp b/addons/recoil/CfgRecoils.hpp index 56a28f1dc1c..76bad23fb19 100644 --- a/addons/recoil/CfgRecoils.hpp +++ b/addons/recoil/CfgRecoils.hpp @@ -1,8 +1,8 @@ -#define KICKBACK 1.6 +#define KICKBACK 1.4 #define MUZZLETEMP 1 -#define MUZZLEPERM 0.1 +#define MUZZLEPERM 0.4 #define MUZZLECLIMB_POS 1 #define MUZZLERIGHT_POS 0.4 @@ -70,7 +70,7 @@ class CfgRecoils { class recoil_sw: recoil_default { muzzleOuter[] = {0.3*MUZZLERIGHT_POS,0.8*MUZZLECLIMB_POS,0.5*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; kickBack[] = {0.02*KICKBACK,0.04*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_mxm: recoil_default { @@ -178,13 +178,13 @@ class CfgRecoils { class recoil_mk200: recoil_default { muzzleOuter[] = {0.4*MUZZLERIGHT_POS,0.6*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.2*MUZZLECLIMB_MAG}; kickBack[] = {0.03*KICKBACK,0.06*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_zafir: recoil_default { muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1*MUZZLECLIMB_POS,0.7*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; kickBack[] = {0.02*KICKBACK,0.08*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_m320: recoil_default { @@ -244,12 +244,12 @@ class CfgRecoils { class recoil_mmg_01: recoil_default { muzzleOuter[] = {0.6*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.8*MUZZLERIGHT_MAG,0.3*MUZZLECLIMB_MAG}; kickBack[] = {0.02*KICKBACK,0.08*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; class recoil_mmg_02: recoil_default { muzzleOuter[] = {0.5*MUZZLERIGHT_POS,1.5*MUZZLECLIMB_POS,0.6*MUZZLERIGHT_MAG,0.4*MUZZLECLIMB_MAG}; kickBack[] = {0.04*KICKBACK,0.08*KICKBACK}; - temporary = 0.005*MUZZLETEMP; + temporary = 0.01*MUZZLETEMP; //0.005*MUZZLETEMP; }; }; From 12280bbcadf3ef46682aab21a12a9769208eb5da Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 25 Apr 2015 07:21:11 +0200 Subject: [PATCH 193/276] revive tmr camshake --- addons/recoil/CfgEventHandlers.hpp | 14 ++++ addons/recoil/CfgMoves.hpp | 85 ++++++++++++++++++++ addons/recoil/CfgRecoils.hpp | 4 +- addons/recoil/XEH_preInit.sqf | 8 ++ addons/recoil/config.cpp | 8 ++ addons/recoil/functions/fnc_camshake.sqf | 63 +++++++++++++++ addons/recoil/functions/script_component.hpp | 1 + 7 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 addons/recoil/CfgEventHandlers.hpp create mode 100644 addons/recoil/CfgMoves.hpp create mode 100644 addons/recoil/XEH_preInit.sqf create mode 100644 addons/recoil/functions/fnc_camshake.sqf create mode 100644 addons/recoil/functions/script_component.hpp diff --git a/addons/recoil/CfgEventHandlers.hpp b/addons/recoil/CfgEventHandlers.hpp new file mode 100644 index 00000000000..60fc3892fc7 --- /dev/null +++ b/addons/recoil/CfgEventHandlers.hpp @@ -0,0 +1,14 @@ + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_FiredBIS_EventHandlers { + class CAManBase { + class ADDON { + clientFiredBIS = QUOTE(if (_this select 0 == ACE_player) then {_this call FUNC(camshake)};); + }; + }; +}; diff --git a/addons/recoil/CfgMoves.hpp b/addons/recoil/CfgMoves.hpp new file mode 100644 index 00000000000..ecad382cb5b --- /dev/null +++ b/addons/recoil/CfgMoves.hpp @@ -0,0 +1,85 @@ + +// Completely disable BI's camshake on fire. +#define ACE_CAMSHAKEFIRE_BASE 0 +#define ACE_CAMSHAKEFIRE_LESS 0 +#define ACE_CAMSHAKEFIRE_MORE 0 + +// Go through all modes that have a camshakefire defined and change it to ours. +class CfgMovesBasic { + class Default { + camShakeFire = ACE_CAMSHAKEFIRE_NORMAL; + }; +}; + +class CfgMovesMaleSdr: CfgMovesBasic { + class States { + class AmovPercMstpSlowWrflDnon; + class AmovPknlMstpSlowWrflDnon: AmovPercMstpSlowWrflDnon { + camShakeFire = ACE_CAMSHAKEFIRE_LESS; + }; + + class AmovPercMstpSrasWrflDnon; + class AmovPpneMstpSrasWrflDnon: AmovPercMstpSrasWrflDnon { + camShakeFire = ACE_CAMSHAKEFIRE_LESS; + }; + + class AmovPknlMstpSrasWlnrDnon: Default { + camShakeFire = ACE_CAMSHAKEFIRE_LESS; + }; + + class AmovPknlMrunSlowWrflDf; + class AmovPknlMtacSlowWrflDf: AmovPknlMrunSlowWrflDf { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDfl; + class AmovPknlMtacSlowWrflDfl: AmovPknlMrunSlowWrflDfl { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDl; + class AmovPknlMtacSlowWrflDl: AmovPknlMrunSlowWrflDl { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDbl; + class AmovPknlMtacSlowWrflDbl: AmovPknlMrunSlowWrflDbl { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDb; + class AmovPknlMtacSlowWrflDb: AmovPknlMrunSlowWrflDb { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDbr; + class AmovPknlMtacSlowWrflDbr: AmovPknlMrunSlowWrflDbr { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDr; + class AmovPknlMtacSlowWrflDr: AmovPknlMrunSlowWrflDr { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMrunSlowWrflDfr; + class AmovPknlMtacSlowWrflDfr: AmovPknlMrunSlowWrflDfr { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMstpSrasWrflDnon; + class AmovPknlMwlkSrasWrflDf: AmovPknlMstpSrasWrflDnon { + camShakeFire = ACE_CAMSHAKEFIRE_NORMAL; + }; + + class AmovPknlMrunSrasWrflDf; + class AmovPknlMtacSrasWrflDf: AmovPknlMrunSrasWrflDf { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + + class AmovPknlMwlkSrasWpstDf; + class AmovPknlMtacSrasWpstDf: AmovPknlMwlkSrasWpstDf { + camShakeFire = ACE_CAMSHAKEFIRE_MORE; + }; + }; +}; diff --git a/addons/recoil/CfgRecoils.hpp b/addons/recoil/CfgRecoils.hpp index 76bad23fb19..4b473919d5d 100644 --- a/addons/recoil/CfgRecoils.hpp +++ b/addons/recoil/CfgRecoils.hpp @@ -1,11 +1,11 @@ #define KICKBACK 1.4 -#define MUZZLETEMP 1 +#define MUZZLETEMP 1.2 #define MUZZLEPERM 0.4 #define MUZZLECLIMB_POS 1 -#define MUZZLERIGHT_POS 0.4 +#define MUZZLERIGHT_POS 0.2 #define MUZZLECLIMB_MAG 1 #define MUZZLERIGHT_MAG 1 diff --git a/addons/recoil/XEH_preInit.sqf b/addons/recoil/XEH_preInit.sqf new file mode 100644 index 00000000000..f6d04886c1c --- /dev/null +++ b/addons/recoil/XEH_preInit.sqf @@ -0,0 +1,8 @@ +// by commy2 +#include "script_component.hpp" + +ADDON = false; + +PREP(camshake); + +ADDON = true; diff --git a/addons/recoil/config.cpp b/addons/recoil/config.cpp index 1e2ce69fae1..5b8002bc37c 100644 --- a/addons/recoil/config.cpp +++ b/addons/recoil/config.cpp @@ -12,4 +12,12 @@ class CfgPatches { }; }; +#include "CfgEventHandlers.hpp" + +#include "CfgMoves.hpp" #include "CfgRecoils.hpp" + +class CfgCameraShake { + // What does this do, really? It seems like the engine no longer respects it. + defaultCaliberCoefWeaponFire = 0; +}; diff --git a/addons/recoil/functions/fnc_camshake.sqf b/addons/recoil/functions/fnc_camshake.sqf new file mode 100644 index 00000000000..737582b1cbc --- /dev/null +++ b/addons/recoil/functions/fnc_camshake.sqf @@ -0,0 +1,63 @@ +// TMR: Small Arms - Recoil initialization and functions +// (C) 2013 Ryan Schultz. See LICENSE. +// Edited prefixes for compatability in AGM_Realism by KoffeinFlummi +// Edited by commy2 +#include "script_component.hpp" + +#define BASE_POWER 0.40 +#define BASE_TIME 0.19 +#define BASE_FREQ 13 +#define RECOIL_COEF 40 + +private ["_unit", "_weapon", "_muzzle"]; + +_unit = _this select 0; +_weapon = _this select 1; +_muzzle = _this select 2; + +if (toLower _weapon in ["throw", "put"]) exitWith {}; + +private ["_powerMod", "_timeMod", "_freqMod"]; + +_powerMod = ([0, -0.1, -0.1, 0, -0.2] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find stance _unit)) + ([0, -1, 0, -1] select (["INTERNAL", "EXTERNAL", "GUNNER", "GROUP"] find cameraView)); +_timeMod = 0; +_freqMod = 0; + +// to get camshake read kickback +private ["_config", "_recoil"]; + +_config = configFile >> "CfgWeapons" >> _weapon; +_recoil = if (_muzzle == _weapon) then { + getText (_config >> "recoil") +} else { + getText (_config >> _muzzle >> "recoil") +}; + +_recoil = getArray (configFile >> "CfgRecoils" >> _recoil >> "kickBack"); +if (count _recoil < 2) then { + _recoil = [0, 0]; +}; + +// parse numbers +_recoil set [0, call compile format ["%1", _recoil select 0]]; +_recoil set [1, call compile format ["%1", _recoil select 1]]; + +private "_powerCoef"; +_powerCoef = RECOIL_COEF * linearConversion [0, 1, random 1, _recoil select 0, _recoil select 1, false]; + +if (isWeaponRested _unit) then {_powerMod = _powerMod - 0.07}; +if (isWeaponDeployed _unit) then {_powerMod = _powerMod - 0.11}; + +private "_camshake"; +_camshake = [ + _powerCoef * (BASE_POWER + _powerMod) max 0, + BASE_TIME + _timeMod max 0, + BASE_FREQ + _freqMod max 0 +]; + +/* + systemChat str _camshake; + copyToClipboard format ["addCamShake %1;", _camshake]; +*/ + +addCamShake _camshake; diff --git a/addons/recoil/functions/script_component.hpp b/addons/recoil/functions/script_component.hpp new file mode 100644 index 00000000000..d66ac7aec33 --- /dev/null +++ b/addons/recoil/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\overpressure\script_component.hpp" \ No newline at end of file From c8e6e7018c1427de2ba07929e5ca71d0214d299a Mon Sep 17 00:00:00 2001 From: Nou Date: Sat, 25 Apr 2015 00:49:47 -0700 Subject: [PATCH 194/276] Moved infinite spawned loop to Loaded event for handing save game loads. Events for the win! diag_activeSQFScripts as of this build returns empty on a bare mission. --- addons/common/XEH_postInit.sqf | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 3a16ac9d431..a06792a75db 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -97,14 +97,16 @@ if (!hasInterface) exitWith {}; call COMPILE_FILE(scripts\assignedItemFix); call COMPILE_FILE(scripts\initScrollWheel); -0 spawn { - while {true} do { - waitUntil {!isNull (findDisplay 46)}; sleep 0.1; - findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )]; - [false] call FUNC(disableUserInput); - waitUntil {isNull (findDisplay 46)}; - }; +DFUNC(mouseZHandler) = { + waitUntil {!isNull (findDisplay 46)}; sleep 0.1; + findDisplay 46 displayAddEventHandler ["MouseZChanged", QUOTE( _this call GVAR(onScrollWheel) )]; + [false] call FUNC(disableUserInput); }; + +addMissionEventHandler ["Loaded", FUNC(mouseZHandler)]; +[] spawn FUNC(mouseZHandler); + + enableCamShake true; // Set the name for the current player From 7c857a5a7e8d6db3ed9c852a1841958aed82428f Mon Sep 17 00:00:00 2001 From: Nou Date: Sat, 25 Apr 2015 00:52:51 -0700 Subject: [PATCH 195/276] Make sure load spawns the function, not calls it. --- addons/common/XEH_postInit.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index a06792a75db..7dc07743ed9 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -103,7 +103,7 @@ DFUNC(mouseZHandler) = { [false] call FUNC(disableUserInput); }; -addMissionEventHandler ["Loaded", FUNC(mouseZHandler)]; +addMissionEventHandler ["Loaded", {[] spawn FUNC(mouseZHandler)}]; [] spawn FUNC(mouseZHandler); From f897f204a4b3bdb6600408f6866194b3b8324da7 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 10:28:37 +0200 Subject: [PATCH 196/276] Added optional CUP ammunition compatibility pbo --- optionals/compat_cup/CfgAmmo.hpp | 422 ++++++++++++++++++++++ optionals/compat_cup/config.cpp | 14 + optionals/compat_cup/script_component.hpp | 5 + 3 files changed, 441 insertions(+) create mode 100644 optionals/compat_cup/CfgAmmo.hpp create mode 100644 optionals/compat_cup/config.cpp create mode 100644 optionals/compat_cup/script_component.hpp diff --git a/optionals/compat_cup/CfgAmmo.hpp b/optionals/compat_cup/CfgAmmo.hpp new file mode 100644 index 00000000000..1dcd91bc237 --- /dev/null +++ b/optionals/compat_cup/CfgAmmo.hpp @@ -0,0 +1,422 @@ +class CfgAmmo +{ + class BulletBase; + class B_762x51_Ball; + class B_127x99_Ball; + class CUP_B_545x39_Ball: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_Green: CUP_B_545x39_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_Red: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_White: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_545x39_Ball_Tracer_Yellow: BulletBase + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_762x39_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_762x39_Ball_Tracer_Green: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_9x18_Ball: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_Tracer_Green: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_Tracer_Red: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_Tracer_Yellow: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x18_Ball_White_Tracer: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_9x19_Ball: BulletBase + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=124; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.165}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={340, 370, 400}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class CUP_B_762x51_noTracer: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_303_Ball: BulletBase + { + ACE_caliber=0.311; + ACE_bulletLength=1.227; + ACE_bulletMass=174; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.499, 0.493, 0.48}; + ACE_velocityBoundaries[]={671, 549}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={748, 761, 765}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class CUP_B_127x107_Ball_Green_Tracer: BulletBase + { + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class CUP_B_127x108_Ball_Green_Tracer: BulletBase + { + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class CUP_B_762x54_Ball_White_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_762x54_Ball_Red_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_762x54_Ball_Green_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_762x54_Ball_Yellow_Tracer: BulletBase + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class CUP_B_9x39_SP5: BulletBase + { + ACE_caliber=0.364; + ACE_bulletLength=1.24; + ACE_bulletMass=250; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={280, 300, 320}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class CUP_B_762x51_Tracer_Green: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Tracer_Red: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Tracer_Yellow: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class CUP_B_762x51_Tracer_White: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class B_127x107_Ball: BulletBase + { + ACE_caliber=0.511; + ACE_bulletLength=2.520; + ACE_bulletMass=745; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.63}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={820}; + ACE_barrelLengths[]={28.7}; + }; + class CUP_B_9x18_SD: BulletBase + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 340}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; + class CUP_B_765x17_Ball: BulletBase + { + ACE_caliber=0.3125; + ACE_bulletLength=0.610; + ACE_bulletMass=65; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.118}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={282, 300, 320}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class CUP_B_145x115_AP_Green_Tracer: BulletBase + { + ACE_caliber=0.586; + ACE_bulletLength=2.00; + ACE_bulletMass=1010; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.620}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={1000}; + ACE_barrelLengths[]={53}; + }; + class CUP_B_127x99_Ball_White_Tracer: B_127x99_Ball + { + ACE_caliber=0.510; + ACE_bulletLength=2.310; + ACE_bulletMass=647; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.670}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={853}; + ACE_barrelLengths[]={29}; + }; + class CUP_B_86x70_Ball_noTracer: BulletBase + { + ACE_caliber=0.338; + ACE_bulletLength=1.70; + ACE_bulletMass=300; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.381}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={820, 826, 830}; + ACE_barrelLengths[]={24, 26.5, 28}; + }; +}; \ No newline at end of file diff --git a/optionals/compat_cup/config.cpp b/optionals/compat_cup/config.cpp new file mode 100644 index 00000000000..e4f26f8051c --- /dev/null +++ b/optionals/compat_cup/config.cpp @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"CUP_Weapons_Ammunition"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" diff --git a/optionals/compat_cup/script_component.hpp b/optionals/compat_cup/script_component.hpp new file mode 100644 index 00000000000..3d77fcb3701 --- /dev/null +++ b/optionals/compat_cup/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT CUP_Weapons_Ammunition_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From f645672281c955d8d466f3f97912136ed215eab3 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 10:38:28 +0200 Subject: [PATCH 197/276] At least set GVAR(extensionAvailable) to true --- addons/advanced_ballistics/XEH_postInit.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index 8273859033b..8d9f47764c0 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -33,6 +33,7 @@ GVAR(AtmosphericDensitySimulationEnabled) = true; GVAR(currentGrid) = 0; GVAR(INIT_MESSAGE_ENABLED) = false; +GVAR(extensionAvailable) = true; /* @TODO: Remove this until verisoning is in sync with cmake/build versioning GVAR(extensionVersion) = ("ace_advanced_ballistics" callExtension "version"); GVAR(extensionAvailable) = (GVAR(extensionVersion) == EXTENSION_REQUIRED_VERSION); From 6fdaf4c400c9e66c944afe0d291f56cb96d72d71 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 10:59:48 +0200 Subject: [PATCH 198/276] Completely removed the SQF version of the advanced ballistics PFH --- .../functions/fnc_handleFired.sqf | 250 ++---------------- 1 file changed, 21 insertions(+), 229 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 0180245f256..dcf051d5700 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -149,235 +149,27 @@ if (GVAR(AdvancedAirDragEnabled)) then { }; }; -#ifdef USE_ADVANCEDBALLISTICS_DLL - GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; - - "ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; - - [{ - private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; - EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index); - - _bulletVelocity = velocity _bullet; - _bulletPosition = getPosASL _bullet; - - _bulletSpeed = vectorMagnitude _bulletVelocity; - - if (!alive _bullet || _bulletSpeed < 100) exitWith { - [_this select 1] call cba_fnc_removePerFrameHandler; - }; - - if (_bulletTraceVisible && _bulletSpeed > 600) then { - drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; - }; - - call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]); - - }, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler; -#else - _index = count GVAR(bulletDatabase); - if (count GVAR(bulletDatabaseFreeIndices) > 0) then { - _index = GVAR(bulletDatabaseFreeIndices) select 0; - GVAR(bulletDatabaseFreeIndices) = GVAR(bulletDatabaseFreeIndices) - [_index]; +GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; + +"ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; + +[{ + private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; + EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index); + + _bulletVelocity = velocity _bullet; + _bulletPosition = getPosASL _bullet; + + _bulletSpeed = vectorMagnitude _bulletVelocity; + + if (!alive _bullet || _bulletSpeed < 100) exitWith { + [_this select 1] call cba_fnc_removePerFrameHandler; + }; + + if (_bulletTraceVisible && _bulletSpeed > 600) then { + drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; }; - GVAR(bulletDatabase) set[_index, [_bullet, _caliber, _airFriction, _muzzleVelocity, _stabilityFactor, _transonicStabilityCoef, _twistDirection, _unit, _bulletTraceVisible, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _index]]; - GVAR(bulletDatabaseStartTime) set[_index, time]; - GVAR(bulletDatabaseSpeed) set[_index, 0]; - GVAR(bulletDatabaseFrames) set[_index, 1]; - GVAR(bulletDatabaseLastFrame) set[_index, time]; - GVAR(bulletDatabaseHDeflect) set[_index, 0]; - GVAR(bulletDatabaseSpinDrift) set[_index, 0]; - - if ((GVAR(bulletDatabaseOccupiedIndices) pushBack _index) == 0) then { - [{ - private ["_bulletDatabaseEntry", "_bullet", "_caliber", "_muzzleVelocity", "_frames", "_speed", "_airFriction", "_airFrictionRef", "_dragModel", "_atmosphereModel", "_ballisticCoefficient", "_ballisticCoefficients", "_velocityBoundaries", "_airDensity", "_stabilityFactor", "_transonicStabilityCoef", "_twistDirection", "_unit", "_bulletTraceVisible", "_index", "_temperature", "_humidity", "_deltaT", "_TOF", "_bulletPosition", "_bulletVelocity", "_bulletSpeed", "_trueVelocity", "_trueSpeed", "_bulletSpeedAvg", "_wind", "_drag", "_dragRef", "_vect", "_accel", "_accelRef", "_centripetalAccel", "_pressure", "_pressureDeviation", "_windSourceObstacle", "_windSourceTerrain", "_height", "_roughnessLength", "_bulletDir", "_horizontalDeflection", "_horizontalDeflectionPartial", "_spinDrift", "_spinDriftPartial"]; - - { - _bulletDatabaseEntry = (GVAR(bulletDatabase) select _x); - if (!alive (_bulletDatabaseEntry select 0)) then { - _index = _bulletDatabaseEntry select 13; - GVAR(bulletDatabaseOccupiedIndices) = GVAR(bulletDatabaseOccupiedIndices) - [_index]; - GVAR(bulletDatabaseFreeIndices) pushBack _index; - }; - true - } count GVAR(bulletDatabaseOccupiedIndices); - - if (count GVAR(bulletDatabaseOccupiedIndices) == 0) exitWith { - GVAR(bulletDatabase) = []; - GVAR(bulletDatabaseStartTime) = []; - GVAR(bulletDatabaseSpeed) = []; - GVAR(bulletDatabaseFrames) = []; - GVAR(bulletDatabaseLastFrame) = []; - GVAR(bulletDatabaseHDeflect) = []; - GVAR(bulletDatabaseSpinDrift) = []; - GVAR(bulletDatabaseOccupiedIndices) = []; - GVAR(bulletDatabaseFreeIndices) = []; - [_this select 1] call cba_fnc_removePerFrameHandler; - }; - - { - _bulletDatabaseEntry = GVAR(bulletDatabase) select _x; - _bullet = _bulletDatabaseEntry select 0; - _caliber = _bulletDatabaseEntry select 1; - _airFriction = _bulletDatabaseEntry select 2; - _muzzleVelocity = _bulletDatabaseEntry select 3; - _stabilityFactor = _bulletDatabaseEntry select 4; - _transonicStabilityCoef = _bulletDatabaseEntry select 5; - _twistDirection = _bulletDatabaseEntry select 6; - _unit = _bulletDatabaseEntry select 7; - _bulletTraceVisible = _bulletDatabaseEntry select 8; - _ballisticCoefficients = _bulletDatabaseEntry select 9; - _velocityBoundaries = _bulletDatabaseEntry select 10; - _atmosphereModel = _bulletDatabaseEntry select 11; - _dragModel = _bulletDatabaseEntry select 12; - _index = _bulletDatabaseEntry select 13; - - _TOF = time - (GVAR(bulletDatabaseStartTime) select _index); - - _bulletVelocity = velocity _bullet; - _bulletPosition = getPosASL _bullet; - - _bulletSpeed = vectorMagnitude _bulletVelocity; - _bulletDir = (_bulletVelocity select 0) atan2 (_bulletVelocity select 1); - - _speed = (GVAR(bulletDatabaseSpeed) select _index); - GVAR(bulletDatabaseSpeed) set[_index, _speed + _bulletSpeed]; - - _frames = (GVAR(bulletDatabaseFrames) select _index); - GVAR(bulletDatabaseFrames) set[_index, _frames + 1]; - - _bulletSpeedAvg = (_speed / _frames); - - if ((GVAR(SimulationPrecision) < 2) || {_frames % GVAR(SimulationPrecision) == _index % GVAR(SimulationPrecision)}) then { - _deltaT = time - (GVAR(bulletDatabaseLastFrame) select _index); - GVAR(bulletDatabaseLastFrame) set[_index, time]; - - _trueVelocity = _bulletVelocity; - _trueSpeed = _bulletSpeed; - _wind = [0, 0, 0]; - if (GVAR(WindEnabled) && (vectorMagnitude ACE_wind) > 0) then { - _windSourceObstacle = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 10); - _windSourceTerrain = _bulletPosition vectorDiff ((vectorNormalized ACE_wind) vectorMultiply 100); - - if (!(lineIntersects [_bulletPosition, _windSourceObstacle]) && !(terrainIntersectASL [_bulletPosition, _windSourceTerrain])) then { - _wind = ACE_wind; - _height = ASLToATL(_bulletPosition) select 2; - _height = 0 max _height min 20; - if (_height < 20) then { - _roughnessLength = _bulletPosition call FUNC(calculateRoughnessLength); - _wind = _wind vectorMultiply (ln(_height / _roughnessLength) / ln(20 / _roughnessLength)); - }; - - _trueVelocity = _bulletVelocity vectorDiff _wind; - _trueSpeed = vectorMagnitude _trueVelocity; - }; - }; - - _airFrictionRef = _airFriction; - if (GVAR(AdvancedAirDragEnabled) && (count _ballisticCoefficients) == (count _velocityBoundaries) + 1) then { - _dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed; - _accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef); - _bulletVelocity = _bulletVelocity vectorDiff _accelRef; - - _ballisticCoefficient = (_ballisticCoefficients select 0); - for "_i" from (count _velocityBoundaries) - 1 to 0 step -1 do { - if (_bulletSpeed < (_velocityBoundaries select _i)) exitWith { - _ballisticCoefficient = (_ballisticCoefficients select (_i + 1)); - }; - }; - - if (GVAR(AtmosphericDensitySimulationEnabled)) then { - _pressure = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure); - _temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2); - _humidity = EGVAR(weather,currentHumidity); - _airDensity = STD_AIR_DENSITY_ICAO; - if (_humidity > 0) then { - private ["_pSat", "_vaporPressure", "_partialPressure"]; - // Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm - _pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3)); - _vaporPressure = _humidity * _pSat; - _partialPressure = (_pressure * 100)- _vaporPressure; - - _airDensity = (_partialPressure * DRY_AIR_MOLAR_MASS + _vaporPressure * WATER_VAPOR_MOLAR_MASS) / (UNIVERSAL_GAS_CONSTANT * KELVIN(_temperature)); - } else { - _airDensity = (_pressure * 100) / (SPECIFIC_GAS_CONSTANT_DRY_AIR * KELVIN(_temperature)); - }; - if (_atmosphereModel == "ICAO") then { - _ballisticCoefficient = (STD_AIR_DENSITY_ICAO / _airDensity) * _ballisticCoefficient; - } else { - _ballisticCoefficient = (STD_AIR_DENSITY_ASM / _airDensity) * _ballisticCoefficient; - }; - }; - - _drag = _deltaT * ([_dragModel, _ballisticCoefficient, _trueSpeed] call FUNC(calculateRetardation)); - _accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag); - _bulletVelocity = _bulletVelocity vectorDiff _accel; - } else { - if (GVAR(AtmosphericDensitySimulationEnabled)) then { - _pressureDeviation = (_bulletPosition select 2) call EFUNC(weather,calculateBarometricPressure) - 1013.25; - _temperature = GET_TEMPERATURE_AT_HEIGHT(_bulletPosition select 2); - _humidity = EGVAR(weather,currentHumidity); - _airFriction = _airFriction + ((_temperature - 15) * 0.0000015 + _humidity * 0.0000040 + _pressureDeviation * -0.0000009); - }; - - if (_airFriction != _airFrictionRef || vectorMagnitude _wind > 0) then { - _dragRef = _deltaT * _airFrictionRef * _bulletSpeed * _bulletSpeed; - _accelRef = (vectorNormalized _bulletVelocity) vectorMultiply (_dragRef); - _bulletVelocity = _bulletVelocity vectorDiff _accelRef; - - _drag = _deltaT * _airFriction * _trueSpeed * _trueSpeed; - _accel = (vectorNormalized _trueVelocity) vectorMultiply (_drag); - _bulletVelocity = _bulletVelocity vectorAdd _accel; - }; - }; - - if (GVAR(CoriolisEnabled) && _bulletSpeedAvg > 0) then { - _horizontalDeflection = 0.0000729 * (_unit distanceSqr _bullet) * sin(EGVAR(weather,Latitude)) / _bulletSpeedAvg; - _horizontalDeflectionPartial = _horizontalDeflection - (GVAR(bulletDatabaseHDeflect) select _index); - GVAR(bulletDatabaseHDeflect) set[_index, _horizontalDeflection]; - _vect = [sin(_bulletDir + 90) * _horizontalDeflectionPartial, cos(_bulletDir + 90) * _horizontalDeflectionPartial, 0]; - - _bulletPosition = _bulletPosition vectorAdd _vect; - }; - - /* - // Negligible effect on the trajectory - if (GVAR(EoetvoesEnabled)) then { - _centripetalAccel = 2 * 0.0000729 * (_muzzleVelocity / -32.2) * cos(EGVAR(weather,Latitude)) * sin(_bulletDir); - _accel = [0, 0, -(_centripetalAccel * _deltaT)]; - - _bulletVelocity = _bulletVelocity vectorAdd _accel; - }; - //*/ - - if (GVAR(SpinDriftEnabled)) then { - _spinDrift = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; - _spinDriftPartial = _spinDrift - (GVAR(bulletDatabaseSpinDrift) select _index); - GVAR(bulletDatabaseSpinDrift) set[_index, _spinDrift]; - _vect = [sin(_bulletDir + 90) * _spinDriftPartial, cos(_bulletDir + 90) * _spinDriftPartial, 0]; - - _bulletPosition = _bulletPosition vectorAdd _vect; - }; - }; - - if (GVAR(TransonicRegionEnabled) && _transonicStabilityCoef < 1) then { - if (_bulletSpeed < 345 && _bulletSpeedAvg > 340 && _bulletSpeed > 335) then { - _accel = [(random 0.8) - 0.4, (random 0.8) - 0.4, (random 0.8) - 0.4]; - _accel = _accel vectorMultiply (1 - _transonicStabilityCoef); - _bulletVelocity = _bulletVelocity vectorAdd _accel; - }; - }; - - if (_bulletTraceVisible && _bulletSpeed > 600 && _bullet distanceSqr _unit > 400) then { - drop ["\A3\data_f\ParticleEffects\Universal\Refract","","Billboard",1,0.1,getPos _bullet,[0,0,0],0,1.275,1,0,[0.4*_caliber,0.2*_caliber],[[0,0,0,0.6],[0,0,0,0.4]],[1,0],0,0,"","",""]; - }; - - _bullet setVelocity _bulletVelocity; - _bullet setPosASL _bulletPosition; - true - } count GVAR(bulletDatabaseOccupiedIndices); + call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, floor(time), time - floor(time)]); - }, GVAR(simulationInterval), []] call CBA_fnc_addPerFrameHandler; - }; -#endif +}, GVAR(simulationInterval), [_bullet, _caliber, _bulletTraceVisible, GVAR(currentbulletID)]] call CBA_fnc_addPerFrameHandler; From d414e5a3a19c11878552591c180dd477a9e1f05f Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 12:08:31 +0200 Subject: [PATCH 199/276] Removed unused define --- addons/advanced_ballistics/script_component.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/advanced_ballistics/script_component.hpp b/addons/advanced_ballistics/script_component.hpp index 70c2f479907..3334bb32072 100644 --- a/addons/advanced_ballistics/script_component.hpp +++ b/addons/advanced_ballistics/script_component.hpp @@ -1,8 +1,6 @@ #define COMPONENT advanced_ballistics #include "\z\ace\addons\main\script_mod.hpp" -#define USE_ADVANCEDBALLISTICS_DLL - #ifdef DEBUG_ENABLED_ADVANCEDBALLISTICS #define DEBUG_MODE_FULL #endif From 1415adc2bde1b418c3581c63166a590e6536ea40 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 25 Apr 2015 12:35:07 +0200 Subject: [PATCH 200/276] removed local diagnose action. Added localization --- addons/medical/XEH_preInit.sqf | 1 - .../medical/functions/fnc_actionDiagnose.sqf | 23 ++++++++++- .../functions/fnc_actionDiagnoseLocal.sqf | 40 ------------------- addons/medical/stringtable.xml | 22 ++++++++++ 4 files changed, 44 insertions(+), 42 deletions(-) delete mode 100644 addons/medical/functions/fnc_actionDiagnoseLocal.sqf diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index c9c149d2a67..b6deca40333 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -8,7 +8,6 @@ PREP(actionCheckPulse); PREP(actionCheckPulseLocal); PREP(actionCheckResponse); PREP(actionDiagnose); -PREP(actionDiagnoseLocal); PREP(actionPlaceInBodyBag); PREP(actionRemoveTourniquet); PREP(actionLoadUnit); diff --git a/addons/medical/functions/fnc_actionDiagnose.sqf b/addons/medical/functions/fnc_actionDiagnose.sqf index 7ac4bfd5a58..234cc6d303f 100644 --- a/addons/medical/functions/fnc_actionDiagnose.sqf +++ b/addons/medical/functions/fnc_actionDiagnose.sqf @@ -17,4 +17,25 @@ private ["_caller","_target","_title","_content"]; _caller = _this select 0; _target = _this select 1; -[[_caller, _target], QUOTE(DFUNC(actionDiagnoseLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ + +_genericMessages = ["STR_ACE_MEDICAL_diagnoseMessage"]; + +_genericMessages pushBack ([_target] call EFUNC(common,getName)); +if (alive _target) then { + _genericMessages pushback "STR_ACE_MEDICAL_diagnoseAlive"; +} else { + _genericMessages pushback "STR_ACE_MEDICAL_diagnoseDead"; +}; +if (_target getvariable[QGVAR(hasLostBlood), false]) then { + _genericMessages pushback "STR_ACE_MEDICAL_lostBlood"; +} else { + _genericMessages pushback "STR_ACE_MEDICAL_noBloodloss"; +}; + +if (_target getvariable[QGVAR(hasPain), false]) then { + _genericMessages pushback "STR_ACE_MEDICAL_inPain"; +} else { + _genericMessages pushback "STR_ACE_MEDICAL_noPain"; +}; + +["displayTextStructured", [_caller], [_genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent); diff --git a/addons/medical/functions/fnc_actionDiagnoseLocal.sqf b/addons/medical/functions/fnc_actionDiagnoseLocal.sqf deleted file mode 100644 index 58c50638bf3..00000000000 --- a/addons/medical/functions/fnc_actionDiagnoseLocal.sqf +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Author: Glowbal - * Local callback for checking the pulse of a patient - * - * Arguments: - * 0: The medic - * 1: The patient - * - * Return Value: - * NONE - * - * Public: No - */ - -#include "script_component.hpp" - -_caller = _this select 0; -_unit = _this select 1; - -_genericMessages = ["Patient %1
is %2.
%3.
%4"]; - -_genericMessages pushBack ([_unit] call EFUNC(common,getName)); -if (alive _unit) then { - _genericMessages pushback "alive"; -} else { - _genericMessages pushback "dead"; -}; -if (_target getvariable[QGVAR(hasLostBlood), false]) then { - _genericMessages pushback "He's lost some blood"; -} else { - _genericMessages pushback "He hasn't lost blood"; -}; - -if (_target getvariable[QGVAR(hasPain), false]) then { - _genericMessages pushback "He is in pain"; -} else { - _genericMessages pushback "He is not in pain"; -}; -diag_log _genericMessages; -["displayTextStructured", [_caller], [format _genericMessages, 3.0, _caller]] call EFUNC(common,targetEvent); diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 53c587bec06..9220eb6671e 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1322,6 +1322,28 @@ Megnézted %1-t Hai controllato %1 + + Patient %1<br/>is %2.<br/>%3.<br/>%4 + + + alive + + + dead + + + He's lost some blood + + + He hasn't lost blood + + + He is in pain + + + He is not in pain + + Bandaged Bandé From 2d14ae61f98ef0094450a2ea484aa1b8a51f7fa4 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 12:36:04 +0200 Subject: [PATCH 201/276] Simplified muzzle velocity shift calculation: *Also added some missing privates --- .../functions/fnc_handleFired.sqf | 30 ++++--------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index dcf051d5700..6d8324355dc 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -19,7 +19,7 @@ */ #include "script_component.hpp" -private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityCoef", "_muzzleAccessory", "_initSpeedCoef", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef"]; +private ["_unit", "_weapon", "_mode", "_ammo", "_magazine", "_caliber", "_bullet", "_abort", "_index", "_opticsName", "_opticType", "_bulletTraceVisible", "_temperature", "_barometricPressure", "_atmosphereModel", "_bulletMass", "_bulletLength", "_airFriction", "_dragModel", "_muzzleVelocity", "_muzzleVelocityShift", "_bulletVelocity", "_bulletSpeed", "_bulletLength", "_barrelTwist", "_twistDirection", "_stabilityFactor", "_transonicStabilityCoef", "_ballisticCoefficients", "_velocityBoundaries"]; _unit = _this select 0; _weapon = _this select 1; _mode = _this select 3; @@ -52,32 +52,14 @@ if (_abort || !(GVAR(extensionAvailable))) exitWith { }; _airFriction = getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction"); -_muzzleVelocity = getNumber(configFile >> "cfgMagazines" >> _magazine >> "initSpeed"); -_muzzleVelocityCoef = getNumber(configFile >> "cfgWeapons" >> _weapon >> "initSpeed"); -if (_muzzleVelocityCoef > 0) then { - _muzzleVelocity = _muzzleVelocityCoef; -}; -if (_muzzleVelocityCoef < 0) then { - _muzzleVelocity = _muzzleVelocity * (-1 * _muzzleVelocityCoef); -}; -_muzzleAccessory = ""; -switch (currentWeapon _unit) do { - case primaryWeapon _unit: { _muzzleAccessory = (primaryWeaponItems _unit) select 0; }; - case handgunWeapon _unit: { _muzzleAccessory = (handgunItems _unit) select 0; }; -}; - -if (_muzzleAccessory != "" && isNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed")) then { - _initSpeedCoef = getNumber(configFile >> "cfgWeapons" >> _muzzleAccessory >> "ItemInfo" >> "MagazineCoef" >> "initSpeed"); - _muzzleVelocity = _muzzleVelocity * _initSpeedCoef; -}; +_bulletVelocity = velocity _bullet; +_muzzleVelocity = vectorMagnitude _bulletVelocity; if (GVAR(barrelLengthInfluenceEnabled)) then { _muzzleVelocityShift = [_ammo, _weapon, _muzzleVelocity] call FUNC(calculateBarrelLengthVelocityShift); if (_muzzleVelocityShift != 0) then { - _bulletVelocity = velocity _bullet; - _bulletSpeed = vectorMagnitude _bulletVelocity; - _bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity))); + _bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift)); _bullet setVelocity _bulletVelocity; _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; }; @@ -87,9 +69,7 @@ if (GVAR(ammoTemperatureEnabled)) then { _temperature = GET_TEMPERATURE_AT_HEIGHT((getPosASL _unit) select 2); _muzzleVelocityShift = [_ammo, _temperature] call FUNC(calculateAmmoTemperatureVelocityShift); if (_muzzleVelocityShift != 0) then { - _bulletVelocity = velocity _bullet; - _bulletSpeed = vectorMagnitude _bulletVelocity; - _bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift * (_bulletSpeed / _muzzleVelocity))); + _bulletVelocity = _bulletVelocity vectorAdd ((vectorNormalized _bulletVelocity) vectorMultiply (_muzzleVelocityShift)); _bullet setVelocity _bulletVelocity; _muzzleVelocity = _muzzleVelocity + _muzzleVelocityShift; }; From 6799903e4b1e18dadb2b73c28af39a7e78472d46 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 25 Apr 2015 12:45:04 +0200 Subject: [PATCH 202/276] Also display different color for advanced --- .../functions/fnc_modifyMedicalAction.sqf | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/addons/medical/functions/fnc_modifyMedicalAction.sqf b/addons/medical/functions/fnc_modifyMedicalAction.sqf index c7deb07c09c..66398a25905 100644 --- a/addons/medical/functions/fnc_modifyMedicalAction.sqf +++ b/addons/medical/functions/fnc_modifyMedicalAction.sqf @@ -17,17 +17,24 @@ #include "script_component.hpp" -// Quit for the advanced medical system -if (GVAR(level) >= 2) exitWith {}; - EXPLODE_4_PVT(_this,_target,_player,_selectionN,_actionData); +if (GVAR(level) < 2) exitwith { + private ["_pointDamage"]; + _pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN); -private ["_pointDamage"]; -_pointDamage = _target getHitPointDamage (["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"] select _selectionN); - -if (_pointDamage >= 0.8) exitWith { - _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; -}; -if (_pointDamage > 0) exitWith { - _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))]; + if (_pointDamage >= 0.8) exitWith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; + }; + if (_pointDamage > 0) exitWith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossYellow.paa))]; + }; }; + +private ["_openWounds", "_amountOf"]; +_openWounds = _target getvariable [QGVAR(openWounds), []]; +{ + _amountOf = _x select 3; + if (_amountOf > 0 && {(_selectionN == (_x select 2))}) exitwith { + _actionData set [2, QUOTE(PATHTOF(UI\icons\medical_crossRed.paa))]; + }; +}foreach _openWounds; From c8badaec5d194f7683aa15f72de026f967eb88fc Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 25 Apr 2015 12:58:54 +0200 Subject: [PATCH 203/276] Adjusted medical doc based on Jaynus comments --- documentation/feature/medical-system.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/documentation/feature/medical-system.md b/documentation/feature/medical-system.md index 33a7c4c322a..3d756b70c88 100644 --- a/documentation/feature/medical-system.md +++ b/documentation/feature/medical-system.md @@ -7,7 +7,7 @@ parent: wiki --- ## 1. Overview -ACE provide users with a more realistic medical system and comes in both a basic and advanced version. This page will detail the differences between both systems and what they do. It is split into two parts; basic and advanced. Both versions have overlapse but each have their unique characteristics. +ACE provide users with a more realistic medical system and comes in both a basic and advanced version. This page will detail the differences between both systems and what they do. It is split into two parts; basic and advanced. Both versions have overlap but each have their own unique characteristics. ## 2. Basic Medical @@ -20,12 +20,12 @@ The four main elements that basic medical introduces are: * unconsciousness * pain -All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions, and their actions take more time as when performed by trained medics. +All interactions in the medical system are done with the interaction menu. Non-medics can - by default - not perform all actions, and their actions take more time as when performed by trained medics. These actions are using epinephrine and blood IVs. ### How it works -When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain treshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once. +When hit, units start to lose blood depending on the severity of their wounds. Once the level of blood falls below a certain threshold, the unit will fall unconscious and eventually die. Units will also fall unconscious when sustaining large amounts of damage at once. To stop the bleeding, the combat life saver needs to bandage every wounded limb. Unconscious units can be "woken up" with Epipens. Should a unit have lost a lot of blood, it might be necessary to replace the lost blood with a blood bag before being able to wake unconscious units up. @@ -34,7 +34,7 @@ Should a unit be in pain, materializing itself with a chromatic aberration scree ## 3. Advanced Medical The advanced medical system provides a more complex and detailed medical simulation and is based off the CSE/CMS medical system. It focuses on a more realistic model for injuries and treatment, thus resulting in a more important and prominent role for combat medics, and a bigger incentive to not get shot. -The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based of the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. +The system behind advanced medical is designed to attempt to mimic important parts of the human body, as well as react to any injuries sustained and treatments applied in a realistic manner. The available treatments and supplies in advanced medical are based off the Tactical Combat Casualty Care (TCCC) guidelines, which are the same guidelines used by real-life combat medics around the world. Besides the 4 elements introduced by basic medical, advanced introduces the following: @@ -53,19 +53,18 @@ Same as with basic, when hit an injury is sustained. Different though is that th In order to stop the bleeding, all injuries on every bodypart requires treatment. This is done by either applying a tourniquet to legs or arms as a temporarly solution, or by using bandages to stop the bleeding as a more permament fix. ##### Vitals -While a unit is bleeding however, the blood volume decreases which will result in a change of vitals. Depending on the factors such as current blood volume, the blood loss rate, medication used, the blood pressure will start to drop. To counter this drop, also based upon the previously mentioned factors and others, the heart rate will adjust accordingly to attempt to keep blood pressure at safe levels. This means that for any patient it is required to keep an eye on the vitals. This is done through the interacction system by selecting check pulse or blood pressure on either the arms or head. +While a unit is bleeding however, the blood volume decreases which will result in a change of vitals. Depending on the factors such as current blood volume, the blood loss rate, medication used, the blood pressure will start to drop. To counter this drop, also based upon the previously mentioned factors and others, the heart rate will adjust accordingly to attempt to keep blood pressure at safe levels. This means that for any patient it is required to keep an eye on the vitals. This is done through the interaction system by selecting check pulse or blood pressure on either the arms or head. ##### Medication To stabalize the vitals and to counter for example pain, a player/medic can use medication. Advanced medical has 3 different medications available: -* Morphine * Atropine +* Morphine * Epinephrine +Atropine is a vagolytic and anticholinergic drug which in low dosages reduces heart rate but in high dosages increases it, countering effects of organophosphate poisoning (in NBC scenarios; anticholinesterase poisoning) and symptomatic bradycardia (in post-ROSC care and resuscitative medicine). + Morphine is used to alleviate large amounts of pain. Has an effect similar to Heroin due to its opiate properties. Must only ever be given once, and only when bleeding has been reduced to a minimum. Morphine must never be given to a casualty with a low heart rate, as it can stop the heart. Epinephrine is used to increase heart rate and blood pressure and alleviate unconsciousness. Epinephrine is a synthetic form of Adrenaline, which is naturally produced in the body. It can also be applied to counter-act the effects of Atropine. Be careful though, as it may only be given once. _Epinephrine must never be given to a casualty with a high heart rate or blood pressure._ - -Atropine is a vagolytic and anticholinergic drug which in low dosages reduces heart rate but in high dosages increases it, countering effects of organophosphate poisoning (in NBC scenarios; anticholinesterase poisoning) and symptomatic bradycardia (in post-ROSC care and resuscitative medicine). - From d8eee168aa1f49959e6d0939343e92d52b615197 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 12:59:26 +0200 Subject: [PATCH 204/276] Improved onlyActiveForLocalPlayers abort condition check: *Fixed alwaysSimulateForSnipers abort condition --- .../functions/fnc_handleFired.sqf | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 6d8324355dc..3741254267a 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -35,18 +35,21 @@ if (!([_unit] call EFUNC(common,isPlayer))) exitWith {}; if (underwater _unit) exitWith {}; if (!(_ammo isKindOf "BulletBase")) exitWith {}; if (_unit distance ACE_player > GVAR(simulationRadius)) exitWith {}; -if (GVAR(onlyActiveForLocalPlayers) && _unit != ACE_player) then { _abort = true; }; +if (GVAR(onlyActiveForLocalPlayers) && !(local _unit)) then { + if (GVAR(alwaysSimulateForSnipers)) then { + // The shooter is non local + if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then { + _opticsName = (primaryWeaponItems _unit) select 2; + _opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); + _abort = _opticType != 2; // We only abort if the non local shooter is not a sniper + }; + } else { + _abort = true; + }; +}; //if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // TODO: We currently do not have firedEHs on vehicles if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "cfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; }; -if (_abort && alwaysSimulateForSnipers) then { - // The shooter is non local - if (currentWeapon _unit == primaryWeapon _unit && count primaryWeaponItems _unit > 2) then { - _opticsName = (primaryWeaponItems _unit) select 2; - _opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); - _abort = _opticType != 2; // We only abort if the non local shooter is not a sniper - }; -}; if (_abort || !(GVAR(extensionAvailable))) exitWith { [_bullet, getNumber(configFile >> "cfgAmmo" >> _ammo >> "airFriction")] call EFUNC(winddeflection,updateTrajectoryPFH); }; From b053a641d9ca58d4e048b7a458253ad7dd03db99 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 13:15:54 +0200 Subject: [PATCH 205/276] Improved bullet trace visibility check --- .../functions/fnc_handleFired.sqf | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 3741254267a..8d8d77a812b 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -79,10 +79,16 @@ if (GVAR(ammoTemperatureEnabled)) then { }; _bulletTraceVisible = false; -if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER" && currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then { - _opticsName = (primaryWeaponItems ACE_player) select 2; - _opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); - _bulletTraceVisible = (_opticType == 2 || currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]); +if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then { + if (currentWeapon ACE_player in ["ACE_Vector", "Binocular", "Rangefinder", "Laserdesignator"]) then { + _bulletTraceVisible = true; + } else { + if (currentWeapon ACE_player == primaryWeapon ACE_player && count primaryWeaponItems ACE_player > 2) then { + _opticsName = (primaryWeaponItems ACE_player) select 2; + _opticType = getNumber(configFile >> "cfgWeapons" >> _opticsName >> "ItemInfo" >> "opticType"); + _bulletTraceVisible = _opticType == 2; + }; + }; }; _caliber = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_caliber"); From 73b17efa2f147991633789dea22edee8153ece27 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 25 Apr 2015 13:28:21 +0200 Subject: [PATCH 206/276] cache ctrlSetStructedText parseText --- addons/interact_menu/XEH_clientInit.sqf | 2 ++ addons/interact_menu/XEH_preInit.sqf | 1 + .../functions/fnc_ctrlSetParsedTextCached.sqf | 13 +++++++++++++ addons/interact_menu/functions/fnc_renderIcon.sqf | 6 +++--- 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index b8a8fc899bb..faabf773f4a 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -3,6 +3,8 @@ if (!hasInterface) exitWith {}; +GVAR(ParsedTextCached) = []; + //Setup text/shadow color matrix [] call FUNC(setupTextColors); ["SettingChanged", { diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index 65d5dd43057..7e86646b797 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -8,6 +8,7 @@ PREP(compileMenu); PREP(compileMenuSelfAction); PREP(collectActiveActionTree); PREP(createAction); +PREP(ctrlSetParsedTextCached); PREP(findActionNode); PREP(handlePlayerChanged); PREP(isSubPath); diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf new file mode 100644 index 00000000000..16ff9311de3 --- /dev/null +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -0,0 +1,13 @@ +// by commy2 +#include "script_component.hpp" + +private ["_ctrl", "_index", "_text"]; + +_ctrl = _this select 0; +_index = _this select 1; +_text = _this select 2; + +if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"")) then { + GVAR(ParsedTextCached) set [_index, _text]; + _ctrl ctrlSetStructuredText parseText _text; +}; diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 9107b6d998c..ccfe67ac77f 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -33,12 +33,12 @@ if(_icon == "") then { }; _text = if (GVAR(UseListMenu)) then { - format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text] + format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text] } else { - format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; + format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; }; -_ctrl ctrlSetStructuredText (parseText _text); +[_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached); _text = if (GVAR(UseListMenu)) then { _ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW]; } else { From eca7657ffacddc3c2fddc3b72019be5e08452781 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 13:34:47 +0200 Subject: [PATCH 207/276] Removed a bunch of obsolete code: *Obsolete, as of: https://github.com/acemod/ACE3/commit/6fdaf4c400c9e66c944afe0d291f56cb96d72d71 --- addons/advanced_ballistics/XEH_postInit.sqf | 10 --- .../functions/fnc_handleFired.sqf | 28 ++++--- .../functions/fnc_calculate_range_card.sqf | 2 +- .../functions/fnc_calculate_solution.sqf | 78 +++++++++---------- .../fnc_calculate_target_solution.sqf | 2 +- addons/atragmx/functions/fnc_parse_input.sqf | 4 +- addons/atragmx/functions/fnc_update_gun.sqf | 2 +- .../functions/fnc_update_gun_ammo_data.sqf | 2 +- 8 files changed, 54 insertions(+), 74 deletions(-) diff --git a/addons/advanced_ballistics/XEH_postInit.sqf b/addons/advanced_ballistics/XEH_postInit.sqf index 8d9f47764c0..3f0e101d3b8 100644 --- a/addons/advanced_ballistics/XEH_postInit.sqf +++ b/addons/advanced_ballistics/XEH_postInit.sqf @@ -20,16 +20,6 @@ GVAR(WindInfoStart) = time; GVAR(Protractor) = false; GVAR(ProtractorStart) = time; -// Those are only used in the pure sqf version (extension free PFH) -GVAR(SimulationPrecision) = 2; -GVAR(WindEnabled) = true; -GVAR(SpinDriftEnabled) = true; -GVAR(CoriolisEnabled) = true; -GVAR(EoetvoesEnabled) = true; -GVAR(AdvancedAirDragEnabled) = true; -GVAR(TransonicRegionEnabled) = true; -GVAR(AtmosphericDensitySimulationEnabled) = true; - GVAR(currentGrid) = 0; GVAR(INIT_MESSAGE_ENABLED) = false; diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 8d8d77a812b..c21ac6af1f4 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -120,23 +120,21 @@ _dragModel = 1; _ballisticCoefficients = []; _velocityBoundaries = []; _atmosphereModel = "ICAO"; -if (GVAR(AdvancedAirDragEnabled)) then { - if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then { - _dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel"); - if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then { - _dragModel = 1; - }; - }; - if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then { - _ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients"); - }; - if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then { - _velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries"); - }; - if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then { - _atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere"); +if (isNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel")) then { + _dragModel = getNumber(configFile >> "cfgAmmo" >> _ammo >> "ACE_dragModel"); + if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then { + _dragModel = 1; }; }; +if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients")) then { + _ballisticCoefficients = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_ballisticCoefficients"); +}; +if (isArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries")) then { + _velocityBoundaries = getArray(configFile >> "cfgAmmo" >> _ammo >> "ACE_velocityBoundaries"); +}; +if (isText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere")) then { + _atmosphereModel = getText(configFile >> "cfgAmmo" >> _ammo >> "ACE_standardAtmosphere"); +}; GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index f3f27f7d3e6..cfaf7441f87 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then { private ["_bulletLength", "_stabilityFactor"]; _bulletLength = 1.8; _stabilityFactor = 1.5; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { _stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); }; diff --git a/addons/atragmx/functions/fnc_calculate_solution.sqf b/addons/atragmx/functions/fnc_calculate_solution.sqf index f90b299ce9a..2049398a9c1 100644 --- a/addons/atragmx/functions/fnc_calculate_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_solution.sqf @@ -106,7 +106,7 @@ private ["_wind1", "_wind2", "_windDrift"]; _wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection * 30) * _windSpeed1, 0]; _wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0]; _windDrift = 0; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { _bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection); }; @@ -117,7 +117,7 @@ _speedAverage = 0; private ["_eoetvoesMultiplier"]; _eoetvoesMultiplier = 0; -if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { _eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire); }; @@ -142,14 +142,12 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _trueSpeed = vectorMagnitude _trueVelocity; if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false]) then { - _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { - parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])) - } else { - ([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation)) - }; - _bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag); + _drag = if (missionNamespace getVariable [QEGVAR(advanced_ballistics,extensionAvailable), false]) then { + parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed])) + } else { + ([_dragModel, _bc, _trueSpeed] call EFUNC(advanced_ballistics,calculateRetardation)) }; + _bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag); } else { _bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction); }; @@ -177,23 +175,20 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do { _kineticEnergy = _kineticEnergy * 0.737562149; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then { - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then { - _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; - _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); - _windage1 = _windage1 + _horizontalCoriolis; - _windage2 = _windage2 + _horizontalCoriolis; - }; - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then { - _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; - _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); - _elevation = _elevation + _verticalCoriolis; - }; - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then { - _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; - _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); - _windage1 = _windage1 + _spinDrift; - _windage2 = _windage2 + _spinDrift; - }; + // Coriolis + _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); + _windage1 = _windage1 + _horizontalCoriolis; + _windage2 = _windage2 + _horizontalCoriolis; + // Eoetvoes + _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; + _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); + _elevation = _elevation + _verticalCoriolis; + // Spin drift + _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; + _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); + _windage1 = _windage1 + _spinDrift; + _windage2 = _windage2 + _spinDrift; }; GVAR(rangeCardData) set [_n, [_range, _elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy]]; @@ -217,23 +212,20 @@ _kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2)); _kineticEnergy = _kineticEnergy * 0.737562149; if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then { - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,CoriolisEnabled), false]) then { - _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; - _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); - _windage1 = _windage1 + _horizontalCoriolis; - _windage2 = _windage2 + _horizontalCoriolis; - }; - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,EoetvoesEnabled), false]) then { - _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; - _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); - _elevation = _elevation + _verticalCoriolis; - }; - if (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false]) then { - _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; - _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); - _windage1 = _windage1 + _spinDrift; - _windage2 = _windage2 + _spinDrift; - }; + // Coriolis + _horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage; + _horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1)); + _windage1 = _windage1 + _horizontalCoriolis; + _windage2 = _windage2 + _horizontalCoriolis; + // Eoetvoes + _verticalDeflection = (_bulletPos select 2) * _eoetvoesMultiplier; + _verticalCoriolis = - atan(_verticalDeflection / (_bulletPos select 1)); + _elevation = _elevation + _verticalCoriolis; + // Spin drift + _spinDeflection = _twistDirection * 0.0254 * 1.25 * (_stabilityFactor + 1.2) * _TOF ^ 1.83; + _spinDrift = - atan(_spinDeflection / (_bulletPos select 1)); + _windage1 = _windage1 + _spinDrift; + _windage2 = _windage2 + _spinDrift; }; [_elevation * 60, [_windage1 * 60, _windage2 * 60], _lead, _TOF, _bulletSpeed, _kineticEnergy, _verticalCoriolis * 60, _horizontalCoriolis * 60, _spinDrift * 60] diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index 641551fca12..677c4bb7936 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -54,7 +54,7 @@ if (!GVAR(atmosphereModeTBH)) then { private ["_bulletLength", "_stabilityFactor"]; _bulletLength = 1.8; _stabilityFactor = 1.5; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,SpinDriftEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then { _stabilityFactor = [_bulletDiameter / 10 / 2.54, _bulletLength, _bulletMass * 15.4323584, _barrelTwist / 2.54, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor); }; diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index 504c45fb28c..2534c2a3191 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -60,7 +60,7 @@ private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifl _boreHeight = parseNumber(ctrlText 120000); _bulletMass = parseNumber(ctrlText 120010); _bulletDiameter = parseNumber(ctrlText 120020); -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { _airFriction = 0.1 max parseNumber(ctrlText 120030) min 2; } else { _airFriction = parseNumber(ctrlText 120030) / -1000; @@ -87,7 +87,7 @@ GVAR(workingMemory) set [5, _boreHeight]; GVAR(workingMemory) set [12, _bulletMass]; GVAR(workingMemory) set [13, _bulletDiameter]; GVAR(workingMemory) set [14, _rifleTwist]; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { GVAR(workingMemory) set [15, _airFriction]; } else { GVAR(workingMemory) set [4, _airFriction]; diff --git a/addons/atragmx/functions/fnc_update_gun.sqf b/addons/atragmx/functions/fnc_update_gun.sqf index 4ca7338e579..aa1f8c44bf2 100644 --- a/addons/atragmx/functions/fnc_update_gun.sqf +++ b/addons/atragmx/functions/fnc_update_gun.sqf @@ -26,7 +26,7 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))]; }; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)]; } else { ctrlSetText [120, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)]; diff --git a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf index 4ccae287e73..b11b2145007 100644 --- a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf @@ -32,7 +32,7 @@ if (GVAR(currentUnit) != 2) then { } else { ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) * 1000) / 1000)]; }; -if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (missionNamespace getVariable [QEGVAR(advanced_ballistics,AdvancedAirDragEnabled), false])) then { +if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then { ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)]; } else { ctrlSetText [120030, Str(Round((GVAR(workingMemory) select 4) * -1000 * 1000) / 1000)]; From b7763331d6379f0bea32decee6ce49f34090127d Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 25 Apr 2015 14:34:09 +0200 Subject: [PATCH 208/276] the index --- addons/interact_menu/functions/fnc_renderIcon.sqf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index ccfe67ac77f..443328fbc9f 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -27,7 +27,6 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]); }; _ctrl = GVAR(iconCtrls) select GVAR(iconCount); -GVAR(iconCount) = GVAR(iconCount) + 1; if(_icon == "") then { _icon = DEFAULT_ICON; }; @@ -38,8 +37,11 @@ _text = if (GVAR(UseListMenu)) then { format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; }; +//_ctrl ctrlSetStructuredText parseText _text; [_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached); -_text = if (GVAR(UseListMenu)) then { +GVAR(iconCount) = GVAR(iconCount) + 1; + +if (GVAR(UseListMenu)) then { _ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW]; } else { _ctrl ctrlSetPosition [(_sPos select 0)-(0.0750*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.15*SafeZoneW, 0.100*SafeZoneW]; From f3d360d3d88c5aeaa7bf51b1fb11d1953a5ab4f3 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Sat, 25 Apr 2015 14:36:42 +0200 Subject: [PATCH 209/276] Update stringtable.xml --- addons/ballistics/stringtable.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 87e412bce14..48394f898fd 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -1,5 +1,4 @@  - @@ -1081,4 +1080,4 @@ Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5
- \ No newline at end of file + From a7e1d1c1c8a011330dfbbaf76e50366c959b1ee8 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Sat, 25 Apr 2015 14:36:53 +0200 Subject: [PATCH 210/276] Update stringtable.xml --- addons/interact_menu/stringtable.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 984acd92be4..1335432f288 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,5 +1,4 @@  - @@ -90,4 +89,4 @@ Interakcja - Cień min - \ No newline at end of file + From 3427bc5bbb9a9dd9bfbb65f06a08be99af4bbf67 Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Sat, 25 Apr 2015 14:37:03 +0200 Subject: [PATCH 211/276] Update stringtable.xml --- addons/realisticnames/stringtable.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 507fd9b5a26..fd63a74c41a 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,5 +1,4 @@  - @@ -1693,4 +1692,4 @@ LWMMG .338 (piaskowy) - \ No newline at end of file + From fc49814689556120588c207050a672f85a726d66 Mon Sep 17 00:00:00 2001 From: esteldunedain Date: Sat, 25 Apr 2015 10:52:52 -0300 Subject: [PATCH 212/276] Use FUNC(ctrlSetParsedTextCached) for the selector too. Eliminates glitches --- addons/interact_menu/functions/fnc_renderSelector.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/interact_menu/functions/fnc_renderSelector.sqf b/addons/interact_menu/functions/fnc_renderSelector.sqf index 5afcf63cc6b..7d5a3359f7c 100644 --- a/addons/interact_menu/functions/fnc_renderSelector.sqf +++ b/addons/interact_menu/functions/fnc_renderSelector.sqf @@ -22,14 +22,14 @@ if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then { private "_ctrl"; _ctrl = GVAR(iconCtrls) select GVAR(iconCount); -GVAR(iconCount) = GVAR(iconCount) + 1; if (GVAR(UseListMenu)) then { - _ctrl ctrlSetStructuredText (parseText format ["", _icon]); + [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); _ctrl ctrlSetPosition [(_sPos select 0)-(0.014*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.05*SafeZoneW, 0.035*SafeZoneW]; } else { - _ctrl ctrlSetStructuredText (parseText format ["", _icon]); + [_ctrl, GVAR(iconCount), format ["", _icon]] call FUNC(ctrlSetParsedTextCached); _ctrl ctrlSetPosition [(_sPos select 0)-(0.050*SafeZoneW), (_sPos select 1)-(0.014*SafeZoneW), 0.1*SafeZoneW, 0.035*SafeZoneW]; }; //_ctrl ctrlSetBackgroundColor [1, 0, 0, 0.1]; +GVAR(iconCount) = GVAR(iconCount) + 1; _ctrl ctrlCommit 0; From 4a8153b75713ee51b6030338b5a1f3558b81bb12 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 17:19:43 +0200 Subject: [PATCH 213/276] Replaced EXPLODE_4_PVT macro inside of ABs PFH --- addons/advanced_ballistics/functions/fnc_handleFired.sqf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index c21ac6af1f4..b6aae2c7407 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -141,8 +141,12 @@ GVAR(currentbulletID) = (GVAR(currentbulletID) + 1) % 10000; "ace_advanced_ballistics" callExtension format["new:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:%18", GVAR(currentbulletID), _airFriction, _ballisticCoefficients, _velocityBoundaries, _atmosphereModel, _dragModel, _stabilityFactor, _twistDirection, _muzzleVelocity, _transonicStabilityCoef, getPosASL _bullet, EGVAR(weather,Latitude), EGVAR(weather,currentTemperature), EGVAR(weather,Altitude), EGVAR(weather,currentHumidity), overcast, floor(time), time - floor(time)]; [{ - private ["_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; - EXPLODE_4_PVT(_this select 0,_bullet,_caliber,_bulletTraceVisible,_index); + private ["_args", "_index", "_bullet", "_caliber", "_bulletTraceVisible", "_bulletVelocity", "_bulletPosition"]; + _args = _this select 0; + _bullet = _args select 0; + _caliber = _args select 1; + _bulletTraceVisible = _args select 2; + _index = _args select 3; _bulletVelocity = velocity _bullet; _bulletPosition = getPosASL _bullet; From f0477b8e955260dd2e357e25cb9251eb81de6361 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 25 Apr 2015 10:25:04 -0500 Subject: [PATCH 214/276] Make PARAM/Explode_X faster skips the IS_ARRAY check normaly found in EXPLODE_1_SYS --- addons/main/script_macros.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index fce9ec526a6..d4b67399187 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -1,6 +1,11 @@ #include "\x\cba\addons\main\script_macros_common.hpp" #include "\x\cba\addons\xeh\script_xeh.hpp" +//Faster Array Unwraping (skips the IS_ARRAY check normaly found in EXPLODE_1_SYS) +#undef EXPLODE_2_SYS +#define EXPLODE_1_SYS_FAST(ARRAY,A) A =(ARRAY) select 0 +#define EXPLODE_2_SYS(ARRAY,A,B) EXPLODE_1_SYS_FAST(ARRAY,A); B = (ARRAY) select 1 + // Default versioning level #define DEFAULT_VERSIONING_LEVEL 2 From 71df545d528cdd85e61e32f0a59e027a8e76dae7 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 18:30:58 +0200 Subject: [PATCH 215/276] Improved the Mk248 muzzle velocity shift table --- addons/ballistics/CfgAmmo.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index c2d6f0147a7..7a9a0c2acb9 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -337,7 +337,7 @@ class CfgAmmo { ACE_caliber=0.308; ACE_bulletLength=1.353; ACE_bulletMass=190; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; ACE_ballisticCoefficients[]={0.268}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; @@ -353,7 +353,7 @@ class CfgAmmo { ACE_caliber=0.308; ACE_bulletLength=1.489; ACE_bulletMass=220; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ammoTempMuzzleVelocityShifts[]={-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; ACE_ballisticCoefficients[]={0.310}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; From 78eba4e703648b88dc7c5511cd888e894d558c56 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 18:56:55 +0200 Subject: [PATCH 216/276] Moved weather randomization back to postInit --- addons/weather/XEH_postInit.sqf | 5 +++++ addons/weather/XEH_postServerInit.sqf | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 05cd29c093b..1427ff59b18 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -1,5 +1,10 @@ #include "script_component.hpp" +// Randomization +GVAR(temperatureShift) = 3 - random 6; +GVAR(badWeatherShift) = (random 1) ^ 2 * 10; +GVAR(humidityShift) = (5 - random 10) / 100; + GVAR(wind_period_start_time) = time; GVAR(rain_period_start_time) = time; diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index 67d536b9967..076b538806b 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -1,10 +1,5 @@ #include "script_component.hpp" -// Randomization -GVAR(temperatureShift) = 3 - random 6; -GVAR(badWeatherShift) = (random 1) ^ 2 * 10; -GVAR(humidityShift) = (5 - random 10) / 100; - // Rain GVAR(rain_next_period) = -1; GVAR(rain_period_count) = 0; From 94400f2b16a7797534d1fdae0ef5fcf4cb2b0908 Mon Sep 17 00:00:00 2001 From: Felix Wiegand Date: Sat, 25 Apr 2015 19:56:42 +0200 Subject: [PATCH 217/276] Change year in LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 0f013a10b9a..b76b90e8fbb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2014 Felix "KoffeinFlummi" Wiegand +Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From e873aa19436def16c636920253e8429b8b325c8b Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 20:29:27 +0200 Subject: [PATCH 218/276] Removed unused config entries --- optionals/compat_rh_m4/CfgWeapons.hpp | 30 +-------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/optionals/compat_rh_m4/CfgWeapons.hpp b/optionals/compat_rh_m4/CfgWeapons.hpp index 132859f7787..df99cf6779f 100644 --- a/optionals/compat_rh_m4/CfgWeapons.hpp +++ b/optionals/compat_rh_m4/CfgWeapons.hpp @@ -1,35 +1,7 @@ -class Mode_SemiAuto; -class Mode_Burst; -class Mode_FullAuto; -class SlotInfo; -class MuzzleSlot; -class CowsSlot; -class PointerSlot; -class UnderBarrelSlot; -class asdg_SlotInfo; -class asdg_FrontSideRail; -class asdg_OpticRail; -class asdg_OpticRail1913; -class asdg_OpticRail1913_short; -class asdg_MuzzleSlot_556; -class asdg_MuzzleSlot_762; -class asdg_MuzzleSlot_9MM; -class asdg_UnderSlot; class CfgWeapons { - class Rifle; - class UGL_F; - class Rifle_Base_F: Rifle - { - }; - class ItemCore; - class ItemInfo; - class InventoryItem_Base_F; - class InventoryMuzzleItem_Base_F; - class InventoryOpticsItem_Base_F; - class InventoryFlashLightItem_Base_F; - class Zasleh2; + class Rifle_Base_F; class RH_ar10: Rifle_Base_F { ACE_barrelTwist=11.25; From 8c8d02334535da6c1331183b043e916944535206 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 20:29:45 +0200 Subject: [PATCH 219/276] Fixed compat_rh_m4 module component name --- optionals/compat_rh_m4/script_component.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optionals/compat_rh_m4/script_component.hpp b/optionals/compat_rh_m4/script_component.hpp index 4ab887e8892..167c926dd76 100644 --- a/optionals/compat_rh_m4/script_component.hpp +++ b/optionals/compat_rh_m4/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT rh_m4_comp +#define COMPONENT RH_m4_cfg_comp #include "\z\ace\addons\main\script_mod.hpp" From bccf07cafbda72a4b8d32298badfc392aba82c70 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 20:30:03 +0200 Subject: [PATCH 220/276] Fixes: https://github.com/acemod/ACE3/issues/855 --- optionals/compat_rh_m4/CfgWeapons.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optionals/compat_rh_m4/CfgWeapons.hpp b/optionals/compat_rh_m4/CfgWeapons.hpp index df99cf6779f..69536e93024 100644 --- a/optionals/compat_rh_m4/CfgWeapons.hpp +++ b/optionals/compat_rh_m4/CfgWeapons.hpp @@ -77,7 +77,7 @@ class CfgWeapons ACE_barrelTwist=7; ACE_barrelLength=20; }; - class RH_M16A4 : Rifle_Base_F + class RH_M16A4 : RH_M4_ris { ACE_barrelTwist=7; ACE_barrelLength=20; From ca6a5595574d59d3543c2777ff12474c9ac7637a Mon Sep 17 00:00:00 2001 From: ulteq Date: Sat, 25 Apr 2015 21:18:09 +0200 Subject: [PATCH 221/276] Fixed a typo --- addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf index 16ff9311de3..c68f233b9b7 100644 --- a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -7,7 +7,7 @@ _ctrl = _this select 0; _index = _this select 1; _text = _this select 2; -if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"")) then { +if (_text != Str(ARR_SELECT(GVAR(ParsedTextCached),_index,""))) then { GVAR(ParsedTextCached) set [_index, _text]; _ctrl ctrlSetStructuredText parseText _text; }; From 898d6c74a82c9d6aa3a1f3f85b640e90580af953 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 25 Apr 2015 16:02:59 -0500 Subject: [PATCH 222/276] #854 - No canInteractWith check for Ace_MainAction Was preventing subactions from showing. --- addons/interact_menu/functions/fnc_compileMenu.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 7983c493e1e..bd2023a90d8 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -53,7 +53,9 @@ _recurseFnc = { if (_condition == "") then {_condition = "true"}; // Add canInteract (including exceptions) and canInteractWith to condition - _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; + if ((configName _entryCfg) != "ACE_MainActions") then { + _condition = _condition + format [QUOTE( && {[ARR_3(ACE_player, _target, %1)] call EFUNC(common,canInteractWith)} ), getArray (_entryCfg >> "exceptions")]; + }; _insertChildren = compile (getText (_entryCfg >> "insertChildren")); _modifierFunction = compile (getText (_entryCfg >> "modifierFunction")); From ca980379c8dfb6e41b50221fd4e6ca519bb42593 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 25 Apr 2015 16:03:21 -0500 Subject: [PATCH 223/276] Minor captive cleanup --- addons/captives/CfgVehicles.hpp | 9 ++------- addons/captives/functions/fnc_doEscortCaptive.sqf | 10 ++++------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/addons/captives/CfgVehicles.hpp b/addons/captives/CfgVehicles.hpp index 10b2d0285f5..1e2eb3f201c 100644 --- a/addons/captives/CfgVehicles.hpp +++ b/addons/captives/CfgVehicles.hpp @@ -101,25 +101,20 @@ class CfgVehicles { #define MACRO_LOADUNLOADCAPTIVE \ class ACE_Actions { \ class ACE_MainActions { \ - selection = ""; \ - class ACE_LoadCaptive { \ + class GVAR(LoadCaptive) { \ displayName = "$STR_ACE_Captives_LoadCaptive"; \ distance = 4; \ condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \ statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \ exceptions[] = {"isNotEscorting"}; \ - showDisabled = 0; \ priority = 1.2; \ - hotkey = "L"; \ }; \ - class ACE_UnloadCaptive { \ + class GVAR(UnloadCaptive) { \ displayName = "$STR_ACE_Captives_UnloadCaptive"; \ distance = 4; \ condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \ statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \ - showDisabled = 0; \ priority = 1.2; \ - hotkey = "C"; \ }; \ }; \ }; diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index 08f44a1437a..b8758065d8b 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -22,7 +22,7 @@ PARAMS_3(_unit,_target,_state); if (_state) then { if (_unit getVariable [QGVAR(isEscorting), false]) exitWith {}; - [_unit, _target] call EFUNC(common,claim); + [_unit, _target, false] call EFUNC(common,claim); _unit setVariable [QGVAR(isEscorting), true, true]; _target attachTo [_unit, [0, 1, 0]]; @@ -34,8 +34,7 @@ if (_state) then { {[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);}, nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))]; - private "_escortFnc"; - _escortFnc = { + [{ EXPLODE_3_PVT((_this select 0),_unit,_target,_actionID); if (_unit getVariable [QGVAR(isEscorting), false]) then { if (!alive _target || {!alive _unit} || {!canStand _target} || {!canStand _unit} || {_target getVariable ["ACE_isUnconscious", false]} || {_unit getVariable ["ACE_isUnconscious", false]} || {!isNull (attachedTo _unit)}) then { @@ -45,13 +44,12 @@ if (_state) then { if (!(_unit getVariable [QGVAR(isEscorting), false])) then { [(_this select 1)] call cba_fnc_removePerFrameHandler; - [objNull, _target] call EFUNC(common,claim); + [objNull, _target, false] call EFUNC(common,claim); detach _target; _unit removeAction _actionID; _unit setVariable [QGVAR(escortedUnit), objNull, true]; }; - }; - [_escortFnc, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler; + }, 0, [_unit, _target, _actionID]] call CBA_fnc_addPerFrameHandler; } else { _unit setVariable [QGVAR(isEscorting), false, true]; From 772ac6056bcb7e0a3c6a62ebdc1b92b7d3dcfbe7 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Sat, 25 Apr 2015 23:21:52 +0200 Subject: [PATCH 224/276] Move german README to documentation/ --- README_DE.md => documentation/README_DE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README_DE.md => documentation/README_DE.md (100%) diff --git a/README_DE.md b/documentation/README_DE.md similarity index 100% rename from README_DE.md rename to documentation/README_DE.md From 986d2ee1686ec82678f43c0567f4c29b50d61b4b Mon Sep 17 00:00:00 2001 From: commy2 Date: Sat, 25 Apr 2015 23:41:20 +0200 Subject: [PATCH 225/276] fix c&p error --- addons/recoil/functions/script_component.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/recoil/functions/script_component.hpp b/addons/recoil/functions/script_component.hpp index d66ac7aec33..24cb1ba7766 100644 --- a/addons/recoil/functions/script_component.hpp +++ b/addons/recoil/functions/script_component.hpp @@ -1 +1 @@ -#include "\z\ace\addons\overpressure\script_component.hpp" \ No newline at end of file +#include "\z\ace\addons\recoil\script_component.hpp" \ No newline at end of file From 9ac662ea7cebeff18ef1a442095b120486dd71ea Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Sun, 26 Apr 2015 00:01:48 +0200 Subject: [PATCH 226/276] Lowercase curator ammo frag entries --- addons/frag/CfgAmmo.hpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/frag/CfgAmmo.hpp b/addons/frag/CfgAmmo.hpp index 14b1a1ab692..3cfb27dfafe 100644 --- a/addons/frag/CfgAmmo.hpp +++ b/addons/frag/CfgAmmo.hpp @@ -100,20 +100,20 @@ class CfgAmmo { // curator ammo entries class Sh_82mm_AMOS; class ModuleOrdnanceMortar_F_Ammo: Sh_82mm_AMOS { - ACE_FRAG_CLASSES[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; - ACE_FRAG_METAL = 800; - ACE_FRAG_CHARGE = 4200; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; + GVAR(classes)[] = {"ACE_frag_medium", "ACE_frag_medium_HD"}; + GVAR(metal) = 800; + GVAR(charge) = 4200; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; }; class Sh_155mm_AMOS; class ModuleOrdnanceHowitzer_F_ammo: Sh_155mm_AMOS { - 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 = 1950; - ACE_FRAG_CHARGE = 15800; - ACE_FRAG_GURNEY_C = 2320; - ACE_FRAG_GURNEY_K = 1/2; + GVAR(classes)[] = {"ACE_frag_large", "ACE_frag_large", "ACE_frag_large_HD", "ACE_frag_large", "ACE_frag_huge", "ACE_frag_huge_HD", "ACE_frag_huge"}; + GVAR(metal) = 1950; + GVAR(charge) = 15800; + GVAR(gurney_c) = 2320; + GVAR(gurney_k) = 1/2; }; //class R_230mm_HE; From 4e6c6a46d7ac7e9085bc7f0ee1e9dd19997125a1 Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 07:51:13 +0200 Subject: [PATCH 227/276] add vector21 to getting started --- documentation/user/getting-started.md | 83 ++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 7 deletions(-) diff --git a/documentation/user/getting-started.md b/documentation/user/getting-started.md index 7f7d7ade2e1..f224b44e3a9 100644 --- a/documentation/user/getting-started.md +++ b/documentation/user/getting-started.md @@ -8,13 +8,82 @@ parent: wiki
Note:
-

This page is currently under construction. Please, come back later.

+

This page is currently under construction.

- +Tap the "Azimuth" key once then press and hold it until the red pointing circle appears. Sight the circle on the object and tap the "Distance" key while further holding the "Azimuth" key. The first measurement is confirmed ("1-P" = first point). Sight the Fall of shot and release the "Azimuth" key. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If the "Distance" key is tapped the height correction values will be displayed (`UP` and `dn`). From 1c5c432392d340a8ce24efa8c74829deb3bf4b72 Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 08:00:16 +0200 Subject: [PATCH 228/276] fix vector list --- documentation/user/getting-started.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/documentation/user/getting-started.md b/documentation/user/getting-started.md index f224b44e3a9..012f307445b 100644 --- a/documentation/user/getting-started.md +++ b/documentation/user/getting-started.md @@ -33,15 +33,16 @@ ACE3 adds a realistic depiction of the Vector 21 rangefinder to the game. Unlike The Vector is controlled with 2 keys: the azimuth key and the range key; Tab and R by default. First you bring it up like every other binocular in the game and then, while looking through it you can access all the different functions. The Vector 21 rangefinder has the following usage modes: - 1. Slope distance - 2. Azimuth - 3. Slope distance & Azimuth - 4. Horizontal distance and height difference - 5. Azimuth & Inclination - 6. Distance between two points - 7. Horizontal & vertical distance between two points - 8. Horizontal distance & azimuth between two points - 9. Fall of shot + +1. Slope distance +2. Azimuth +3. Slope distance & Azimuth +4. Horizontal distance and height difference +5. Azimuth & Inclination +6. Distance between two points +7. Horizontal & vertical distance between two points +8. Horizontal distance & azimuth between two points +9. Fall of shot #### 1. Slope distance Measuring Slope distance From 5ed7cee6fd1e25f7aeaaf79fbeed3b293d85b264 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 09:22:04 +0200 Subject: [PATCH 229/276] Fixed a copy&paste typo --- addons/ballistics/CfgAmmo.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 7a9a0c2acb9..02df51e8918 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -572,7 +572,6 @@ class CfgAmmo { ACE_caliber=0.366; ACE_bulletLength=1.350; ACE_bulletMass=230; - ACE_transonicStabilityCoef=1; ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; ACE_ballisticCoefficients[]={0.368}; ACE_velocityBoundaries[]={}; From ad6176832dff967cd815c2a3f62addd438440a37 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 09:26:01 +0200 Subject: [PATCH 230/276] Completed the CfgWeapon and CfgAmmo config entries --- documentation/development/ace3-config-entries.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md index cc0104a8b11..78f80228569 100644 --- a/documentation/development/ace3-config-entries.md +++ b/documentation/development/ace3-config-entries.md @@ -46,17 +46,20 @@ ace_gforcecoef ace_protection ace_scopeadjust_horizontal ace_scopeadjust_vertical +ace_scopeadjust_increment ace_isusedlauncher ace_attachable ace_range ace_detonator +ace_barrelTwist +ace_twistDirection +ace_barrelLength ``` ### CfgAmmo ```c++ -ace_bulletmass ace_recoil_shakemultiplier ace_frag_skip ace_frag_force @@ -68,6 +71,17 @@ ace_frag_gurney_k ace_explodeondefuse ace_explosive ace_fcs_airburst +ace_caliber +ace_bulletlength +ace_bulletmass +ace_transonicstabilitycoef +ace_ammotempmuzzlevelocityshifts +ace_ballisticcoefficients +ace_velocityboundaries +ace_standardatmosphere +ace_dragmodel +ace_muzzlevelocities +ace_barrellengths ``` From 171cea998e630cc76bf969ecad64cc20faec1244 Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 09:36:51 +0200 Subject: [PATCH 231/276] add most of the translations --- addons/medical/ACE_Medical_Actions.hpp | 12 +++---- addons/medical/ACE_Medical_Treatments.hpp | 34 +++++++++++-------- .../fnc_actionCheckBloodPressureLocal.sqf | 10 +++--- .../functions/fnc_actionCheckPulseLocal.sqf | 8 ++--- .../fnc_displayPatientInformation.sqf | 3 +- .../functions/fnc_displayTriageCard.sqf | 2 +- addons/medical/ui/RscTitles.hpp | 2 +- addons/medical/ui/triagecard.hpp | 2 +- 8 files changed, 40 insertions(+), 33 deletions(-) diff --git a/addons/medical/ACE_Medical_Actions.hpp b/addons/medical/ACE_Medical_Actions.hpp index a7b76fef44c..70e286f7d89 100644 --- a/addons/medical/ACE_Medical_Actions.hpp +++ b/addons/medical/ACE_Medical_Actions.hpp @@ -66,13 +66,13 @@ class ACE_Head { EXCEPTIONS }; class CheckResponse: CheckPulse { - displayName = "Check Response"; + displayName = "$STR_ACE_MEDICAL_CHECK_RESPONSE"; condition = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'CheckResponse')] call DFUNC(treatment)); EXCEPTIONS }; class Diagnose: CheckPulse { - displayName = "Diagnose"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose"; condition = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'head', 'Diagnose')] call DFUNC(treatment)); EXCEPTIONS @@ -111,7 +111,7 @@ class ACE_Torso { enableInside = 1; }; class TriageCard { - displayName = "Triage Card"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; distance = 2.0; condition = "true"; statement = QUOTE([ARR_2(_target, true)] call DFUNC(displayTriageCard)); @@ -158,21 +158,21 @@ class ACE_Torso { icon = PATHTOF(UI\icons\bandage.paa); }; class SurgicalKit: fieldDressing { - displayName = "Use Surgical Kit"; + displayName = "$STR_ACE_MEDICAL_USE_SURGICALKIT"; condition = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'SurgicalKit')] call DFUNC(treatment)); EXCEPTIONS icon = PATHTOF(UI\icons\surgicalKit.paa); }; class PersonalAidKit: fieldDressing { - displayName = "Use Personal Aid Kit"; + displayName = "$STR_ACE_MEDICAL_USE_AID_KIT"; condition = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'PersonalAidKit')] call DFUNC(treatment)); EXCEPTIONS icon = ""; }; class CPR: fieldDressing { - displayName = "CPR"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR"; condition = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(canTreatCached)); statement = QUOTE([ARR_4(_player, _target, 'body', 'CPR')] call DFUNC(treatment)); EXCEPTIONS diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 03b9def6127..23141be6ba6 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -72,8 +72,8 @@ class ACE_Medical_Actions { litter[] = {}; }; class Diagnose: Bandage { - displayName = "Diagnose"; - displayNameProgress = "Diagnosing..."; + displayName = "$STR_ACE_MEDICAL_ACTIONS_Diagnose"; + displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_Diagnosing"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 1; @@ -250,8 +250,8 @@ class ACE_Medical_Actions { condition = QUOTE([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo)); }; class CPR: fieldDressing { - displayName = "CPR"; - displayNameProgress = "Performing CPR"; + displayName = "$STR_ACE_MEDICAL_ACTIONS_CPR"; + displayNameProgress = "$STR_ACE_MEDICAL_ACTIONS_PerformingCPR"; treatmentLocations[] = {"All"}; requiredMedic = 0; treatmentTime = 15; @@ -297,7 +297,7 @@ class ACE_Medical_Advanced { // Source: Scarle // Also called scrapes, they occur when the skin is rubbed away by friction against another rough surface (e.g. rope burns and skinned knees). class Abrasion { - name = "Scrape"; + name = "$STR_ACE_Medical_Wounds_Abrasion"; selections[] = {"All"}; bleedingRate = 0.0001; pain = 0.01; @@ -321,23 +321,29 @@ class ACE_Medical_Advanced { // Occur when an entire structure or part of it is forcibly pulled away, such as the loss of a permanent tooth or an ear lobe. Explosions, gunshots, and animal bites may cause avulsions. class Avulsions { - name = "Avulsion"; + name = "$STR_ACE_Medical_Wounds_Avulsion"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.3; causes[] = {"explosive", "vehiclecrash", "grenade", "shell", "bullet", "backblast", "bite"}; minDamage = 0.2; class Minor { + name = "Fisch"; + displayName = "Fisch2"; minDamage = 0.2; maxDamage = 0.3; bleedingRate = 0.01; }; class Medium { + name = "Fisch"; + displayName = "Fisch2"; minDamage = 0.3; maxDamage = 0.6; bleedingRate = 0.02; }; class Large { + name = "Fisch"; + displayName = "Fisch2"; minDamage = 0.5; bleedingRate = 0.05; }; @@ -345,11 +351,11 @@ class ACE_Medical_Advanced { // Also called bruises, these are the result of a forceful trauma that injures an internal structure without breaking the skin. Blows to the chest, abdomen, or head with a blunt instrument (e.g. a football or a fist) can cause contusions. class Contusion { - name = "Bruise"; + name = "$STR_ACE_Medical_Wounds_Contusion"; selections[] = {"All"}; bleedingRate = 0.0; pain = 0.05; - causes[] = {"bullet", "backblast", "punch","vehiclecrash","falling"}; + causes[] = {"bullet", "backblast", "punch", "vehiclecrash", "falling"}; minDamage = 0.01; maxDamage = 0.1; class Minor { @@ -368,7 +374,7 @@ class ACE_Medical_Advanced { // Occur when a heavy object falls onto a person, splitting the skin and shattering or tearing underlying structures. class CrushWound { - name = "Crushed tissue"; + name = "$STR_ACE_Medical_Wounds_Crush"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.1; @@ -392,7 +398,7 @@ class ACE_Medical_Advanced { // Slicing wounds made with a sharp instrument, leaving even edges. They may be as minimal as a paper cut or as significant as a surgical incision. class Cut { - name = "Cut"; + name = "$STR_ACE_Medical_Wounds_Cut"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.075; @@ -416,7 +422,7 @@ class ACE_Medical_Advanced { // Also called tears, these are separating wounds that produce ragged edges. They are produced by a tremendous force against the body, either from an internal source as in childbirth, or from an external source like a punch. class Laceration { - name = "Tear"; + name = "$STR_ACE_Medical_Wounds_Laceration"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.075; @@ -440,7 +446,7 @@ class ACE_Medical_Advanced { // Also called velocity wounds, they are caused by an object entering the body at a high speed, typically a bullet or small peices of shrapnel. class velocityWound { - name = "Velocity Wound"; + name = "$STR_ACE_Medical_Wounds_VelocityWound"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.2; @@ -463,7 +469,7 @@ class ACE_Medical_Advanced { // Deep, narrow wounds produced by sharp objects such as nails, knives, and broken glass. class punctureWound { - name = "Puncture Wound"; + name = "$STR_ACE_Medical_Wounds_PunctureWound"; selections[] = {"All"}; bleedingRate = 0.01; pain = 0.075; @@ -487,7 +493,7 @@ class ACE_Medical_Advanced { }; class fractures { class Femur { - name = "Broken Femur"; + name = "$STR_ACE_Medical_Wounds_Femur"; selections[] = {"Head", "Torso"}; pain = 0.2; causes[] = {"Bullet", "VehicleCrash", "Backblast", "Explosive", "Shell", "Grenade"}; diff --git a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf index 28ed10c83c6..a9228d1760e 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf @@ -33,20 +33,20 @@ if ([_caller] call FUNC(isMedic)) then { } else { if (_bloodPressureHigh > 20) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_2"; - _logOutPut = "Low"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOW"; if (_bloodPressureHigh > 100) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_3"; - _logOutPut = "Normal"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NORMAL"; if (_bloodPressureHigh > 160) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_4"; - _logOutPut = "High"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_HIGH"; }; }; } else { if (random(10) > 3) then { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_5"; - _logOutPut = "No Blood Pressure"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_NOBLOODPRESSURE"; } else { _output = "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_OUTPUT_6"; }; @@ -56,5 +56,5 @@ if ([_caller] call FUNC(isMedic)) then { ["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName), round(_bloodPressureHigh),round(_bloodPressureLow)], 1.75, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_target,"activity", "%1 checked Blood Pressure: %2", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog); + [_target,"activity", localize "STR_ACE_MEDICAL_CHECK_BLOODPRESSURE_LOG", [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf index 73d1d071902..dcb098c925a 100644 --- a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf @@ -33,14 +33,14 @@ if (_heartRate > 1.0) then { } else { // non medical personel will only find a pulse/HR _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_2"; - _logOutPut = "Weak"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_WEAK"; if (_heartRate > 60) then { if (_heartRate > 100) then { _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_3"; - _logOutPut = "Strong"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_STRONG"; } else { _heartRateOutput = "STR_ACE_MEDICAL_CHECK_PULSE_OUTPUT_4"; - _logOutPut = "Normal"; + _logOutPut = localize "STR_ACE_MEDICAL_CHECK_PULSE_NORMAL"; }; }; }; @@ -49,5 +49,5 @@ if (_heartRate > 1.0) then { ["displayTextStructured", [_caller], [[_heartRateOutput, [_unit] call EFUNC(common,getName), round(_heartRate)], 1.5, _caller]] call EFUNC(common,targetEvent); if (_logOutPut != "") then { - [_unit,"activity","%1 checked Heart Rate: %2",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); + [_unit,"activity", localize "STR_ACE_MEDICAL_CHECK_PULSE_LOG",[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog); }; diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index 65c98c4b854..b8614374811 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -186,7 +186,8 @@ if (_show) then { _lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1]; }foreach _allInjuryTexts; if (count _allInjuryTexts == 0) then { - _lbCtrl lbAdd "No injuries on this bodypart.."; + //_lbCtrl lbAdd "No injuries on this bodypart.."; + _lbCtrl lbAdd (localize "STR_ACE_Medical_NoInjuriesBodypart"); }; _logCtrl = (_display displayCtrl 302); diff --git a/addons/medical/functions/fnc_displayTriageCard.sqf b/addons/medical/functions/fnc_displayTriageCard.sqf index 5feb209b44b..8e9660a3d51 100644 --- a/addons/medical/functions/fnc_displayTriageCard.sqf +++ b/addons/medical/functions/fnc_displayTriageCard.sqf @@ -58,7 +58,7 @@ if (_show) then { }foreach _log; if (count _triageCardTexts == 0) then { - _lbCtrl lbAdd "No entries on this triage card.."; + _lbCtrl lbAdd (localize "STR_ACE_MEDICAL_TriageCard_NoEntry"); }; { _lbCtrl lbAdd _x; diff --git a/addons/medical/ui/RscTitles.hpp b/addons/medical/ui/RscTitles.hpp index 1962daec80a..dece0e0a8d8 100644 --- a/addons/medical/ui/RscTitles.hpp +++ b/addons/medical/ui/RscTitles.hpp @@ -60,7 +60,7 @@ class Rsctitles { font = "PuristaMedium"; colorText[] = {0.95, 0.95, 0.95, 0.75}; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"}; - text = "INJURIES"; + text = "$STR_ACE_Medical_Injuries"; }; class InjuryList: ACE_gui_listBoxBase { idc = 200; diff --git a/addons/medical/ui/triagecard.hpp b/addons/medical/ui/triagecard.hpp index f1b98f1e2d2..a93440d13ad 100644 --- a/addons/medical/ui/triagecard.hpp +++ b/addons/medical/ui/triagecard.hpp @@ -49,7 +49,7 @@ class GVAR(triageCard) { font = "PuristaMedium"; colorText[] = {0,0,0,1}; colorBackground[] = {0,0,0,0}; - text = "TRIAGE CARD"; + text = "$STR_ACE_MEDICAL_ACTIONS_TriageCard"; }; class TriageList: ACE_gui_listBoxBase { idc = 200; From 0aa2b31dd4c7849bba6e55eff433fb055f441536 Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 09:37:02 +0200 Subject: [PATCH 232/276] gj git --- addons/medical/stringtable.xml | 134 +++++++++++++++++++++++++++++---- 1 file changed, 121 insertions(+), 13 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 7ff4d9d4b34..e82da7ac910 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,6 +1,14 @@  + + Injuries + Verletzungen + + + No injuries on this bodypart ... + Körperteil nicht verletzt ... + Litter Simulation Detail Detale zużytych medykamentów @@ -356,6 +364,10 @@ Orvosi lap Triage Card + + No entries on this triage card. + Keine Einträge auf der Triagekarte + Tourniquet Aderpresse @@ -378,6 +390,22 @@ Érszorító leszedése Rimuovi laccio emostatico + + Diagnose + Diagnose + + + Diagnosing ... + Diagnostizieren ... + + + CPR + HLW + + + Performing CPR ... + HLW durchführen ... + Give Blood IV (1000ml) Bluttransfusion IV (1000ml) @@ -446,7 +474,7 @@ Give Saline IV (1000ml) - Kochsaltzlösung IV (1000ml) + Kochsalzlösung IV (1000ml) Dar Salino IV (1000ml) Перелить пакет физраствора (1000 мл) Podaj sól fizjologiczną IV (1000ml) @@ -457,7 +485,7 @@ Give Saline IV (500ml) - Kochsaltzlösung IV (500ml) + Kochsalzlösung IV (500ml) Dar Salino IV (500ml) Перелить пакет физраствора (500 мл) Podaj sól fizjologiczną IV (500ml) @@ -468,7 +496,7 @@ Give Saline IV (250ml) - Kochsaltzlösung IV (250ml) + Kochsalzlösung IV (250ml) Dar Salino IV (250ml) Перелить пакет физраствора (250 мл) Podaj sól fizjologiczną IV (250ml) @@ -1038,12 +1066,12 @@ Include vario materiale medico per trattamenti avanzati. - - - - + Personal Aid Kit for in field stitching or advanced treatment W znacznym stopniu poprawia stan pacjenta - + + + Use Personal Aid Kit + Verbandpäckchen benutzen Surgical Kit @@ -1075,6 +1103,10 @@ Sebészeti készlet komplex orvosi feladatok terepen való ellátására Kit chirurgico per trattamenti avanzati sul campo. + + Use Surgical Kit + Operationsset benutzen + Bodybag Housse mortuaire @@ -1125,6 +1157,10 @@ Vérnyomás megmérése... Controllando la pressione sanguigna.. + + %1 checked Blood Pressure: %2 + %1 kontrollierte Blutdruck: %2 + You checked %1 Vous diagnostiquez %1 @@ -1194,6 +1230,22 @@ Nem sikerült a vérnyomás megmérése Manca strumento per misurare pressione sanguigna + + Low + Niedrig + + + Normal + Normal + + + High + Hoch + + + No Blood Pressure + Kein Blutdruck + Pulse Пульс @@ -1205,14 +1257,14 @@ Polso - Checking Heart Rate.. + Checking Heart Rate ... Vérification du rythme cardiaque ... Проверка пульса ... - Comprobando ritmo cardíaco... - Sprawdzanie tętna... - Kontrolliere Herzfrequenz + Comprobando ritmo cardíaco ... + Sprawdzanie tętna ... + Kontrolliere Herzfrequenz ... Szívverés-szám mérése... - Controllando il battito cardiaco.. + Controllando il battito cardiaco ... You checked %1 @@ -1224,6 +1276,22 @@ A %1 ellenőrizve Hai diagnosticato %1 + + %1 checked Heart Rate: %2 + %1 kontrollierte Herzfrequenz: %2 + + + Weak + Schwach + + + Normal + Normal + + + Strong + Stark + You find a Heart Rate of %2 Rythme carquiaque de %2 @@ -1659,5 +1727,45 @@ Aberración cromática Aberration chromatique + + Scrape + Kratzer + + + Avulsion + Avulsion + + + Bruise + Prellung + + + Crushed tissue + Quetschverletzung + + + Cut + Schnittwunde + + + Tear + Riss + + + Velocity Wound + Ballistisches Trauma + + + Puncture Wound + Stichwunde + + + Puncture Wound + Stichwunde + + + Broken Femur + Gebrochener Oberschenkelknochen + From dec47dade8028ac1c8b8a7330b42a7282c6f32ae Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 09:38:56 +0200 Subject: [PATCH 233/276] ups, remove test code --- addons/medical/ACE_Medical_Treatments.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 23141be6ba6..1f32bd60b83 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -328,22 +328,16 @@ class ACE_Medical_Advanced { causes[] = {"explosive", "vehiclecrash", "grenade", "shell", "bullet", "backblast", "bite"}; minDamage = 0.2; class Minor { - name = "Fisch"; - displayName = "Fisch2"; minDamage = 0.2; maxDamage = 0.3; bleedingRate = 0.01; }; class Medium { - name = "Fisch"; - displayName = "Fisch2"; minDamage = 0.3; maxDamage = 0.6; bleedingRate = 0.02; }; class Large { - name = "Fisch"; - displayName = "Fisch2"; minDamage = 0.5; bleedingRate = 0.05; }; From b2dd065429b97952e6f6449c67050e9ab8bb991a Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 12:27:06 +0200 Subject: [PATCH 234/276] remove comment --- addons/medical/functions/fnc_displayPatientInformation.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index b8614374811..1fc1051efa1 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -186,7 +186,6 @@ if (_show) then { _lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1]; }foreach _allInjuryTexts; if (count _allInjuryTexts == 0) then { - //_lbCtrl lbAdd "No injuries on this bodypart.."; _lbCtrl lbAdd (localize "STR_ACE_Medical_NoInjuriesBodypart"); }; From f96deadd20cc5528044353eb518e5f84898d8bbb Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 12:41:15 +0200 Subject: [PATCH 235/276] imenu: remove shadow, fix caching --- .../interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf | 2 +- addons/interact_menu/functions/fnc_keyDown.sqf | 1 + addons/interact_menu/functions/fnc_render.sqf | 1 + addons/interact_menu/functions/fnc_renderIcon.sqf | 4 ++-- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf index c68f233b9b7..f538807ffe8 100644 --- a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -7,7 +7,7 @@ _ctrl = _this select 0; _index = _this select 1; _text = _this select 2; -if (_text != Str(ARR_SELECT(GVAR(ParsedTextCached),_index,""))) then { +if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")) then { GVAR(ParsedTextCached) set [_index, _text]; _ctrl ctrlSetStructuredText parseText _text; }; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 1bd4d044747..37e5bc37973 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -30,6 +30,7 @@ if (_menuType == 0) then { GVAR(keyDownTime) = diag_tickTime; GVAR(openedMenuType) = _menuType; GVAR(lastTimeSearchedActions) = -1000; +GVAR(ParsedTextCached) = []; GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap || diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index b9afa75616e..0c0635f8a4a 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -77,6 +77,7 @@ if (GVAR(openedMenuType) >= 0) then { GVAR(startHoverTime) = diag_tickTime; GVAR(lastPath) = _hoverPath; GVAR(expanded) = false; + GVAR(ParsedTextCached) = []; } else { if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then { GVAR(expanded) = true; diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index 443328fbc9f..32e8aa1a636 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -32,9 +32,9 @@ if(_icon == "") then { }; _text = if (GVAR(UseListMenu)) then { - format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text] + format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text] } else { - format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; + format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text]; }; //_ctrl ctrlSetStructuredText parseText _text; From b3c461b9da6924b7dd7c6fa4bd8fe9a1f72cde93 Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 14:02:14 +0200 Subject: [PATCH 236/276] last few translations --- addons/medical/ACE_Medical_Treatments.hpp | 24 +++++ addons/medical/stringtable.xml | 106 +++++++++++++++++++++- 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 1f32bd60b83..85bcab96164 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -304,16 +304,19 @@ class ACE_Medical_Advanced { causes[] = {"falling", "ropeburn", "vehiclecrash", "unknown"}; minDamage = 0.01; class Minor { + name = "$STR_ACE_Medical_Wounds_Abrasion_Minor"; minDamage = 0.01; maxDamage = 0.2; bleedingRate = 0.0001; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Abrasion_Medium"; minDamage = 0.2; maxDamage = 0.3; bleedingRate = 0.00015; }; class Large { + name = "$STR_ACE_Medical_Wounds_Abrasion_Large"; minDamage = 0.3; bleedingRate = 0.0002; }; @@ -328,16 +331,19 @@ class ACE_Medical_Advanced { causes[] = {"explosive", "vehiclecrash", "grenade", "shell", "bullet", "backblast", "bite"}; minDamage = 0.2; class Minor { + name = "$STR_ACE_Medical_Wounds_Avulsion_Minor"; minDamage = 0.2; maxDamage = 0.3; bleedingRate = 0.01; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Avulsion_Medium"; minDamage = 0.3; maxDamage = 0.6; bleedingRate = 0.02; }; class Large { + name = "$STR_ACE_Medical_Wounds_Avulsion_Large"; minDamage = 0.5; bleedingRate = 0.05; }; @@ -353,14 +359,17 @@ class ACE_Medical_Advanced { minDamage = 0.01; maxDamage = 0.1; class Minor { + name = "$STR_ACE_Medical_Wounds_Contusion_Minor"; minDamage = 0.01; maxDamage = 0.1; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Contusion_Medium"; minDamage = 0.1; maxDamage = 0.15; }; class Large { + name = "$STR_ACE_Medical_Wounds_Contusion_Large"; minDamage = 0.15; maxDamage = 0.2; }; @@ -375,16 +384,19 @@ class ACE_Medical_Advanced { causes[] = {"falling", "vehiclecrash", "punch", "unknown"}; minDamage = 0.1; class Minor { + name = "$STR_ACE_Medical_Wounds_Crush_Minor"; minDamage = 0.1; maxDamage = 0.45; bleedingRate = 0.005; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Crush_Medium"; minDamage = 0.4; maxDamage = 0.7; bleedingRate = 0.007; }; class Large { + name = "$STR_ACE_Medical_Wounds_Crush_Large"; minDamage = 0.6; bleedingRate = 0.0095; }; @@ -399,16 +411,19 @@ class ACE_Medical_Advanced { causes[] = {"vehiclecrash", "grenade", "explosive", "shell", "backblast", "stab", "unknown"}; minDamage = 0.1; class Minor { + name = "$STR_ACE_Medical_Wounds_Cut_Minor"; minDamage = 0.1; maxDamage = 0.3; bleedingRate = 0.005; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Cut_Medium"; minDamage = 0.3; maxDamage = 0.65; bleedingRate = 0.02; }; class Large { + name = "$STR_ACE_Medical_Wounds_Cut_Large"; minDamage = 0.65; bleedingRate = 0.05; }; @@ -423,16 +438,19 @@ class ACE_Medical_Advanced { causes[] = {"vehiclecrash", "punch"}; minDamage = 0.01; class Minor { + name = "$STR_ACE_Medical_Wounds_Laceration_Minor"; minDamage = 0.1; maxDamage = 0.5; bleedingRate = 0.005; }; class Medium { + name = "$STR_ACE_Medical_Wounds_Laceration_Medium"; minDamage = 0.5; maxDamage = 0.7; bleedingRate = 0.01; }; class Large { + name = "$STR_ACE_Medical_Wounds_Laceration_Large"; minDamage = 0.7; bleedingRate = 0.03; }; @@ -447,15 +465,18 @@ class ACE_Medical_Advanced { causes[] = {"bullet", "grenade","explosive", "shell", "unknown"}; minDamage = 0.15; class Minor { + name = "$STR_ACE_Medical_Wounds_VelocityWound_Minor"; minDamage = 0.15; maxDamage = 0.3; bleedingRate = 0.025; }; class Medium { + name = "$STR_ACE_Medical_Wounds_VelocityWound_Medium"; minDamage = 0.3; bleedingRate = 0.05; }; class Large { + name = "$STR_ACE_Medical_Wounds_VelocityWound_Large"; minDamage = 0.75; bleedingRate = 0.1; }; @@ -470,16 +491,19 @@ class ACE_Medical_Advanced { causes[] = {"stab", "grenade"}; minDamage = 0.01; class Minor { + name = "$STR_ACE_Medical_Wounds_PunctureWound_Minor"; minDamage = 0.01; maxDamage = 0.5; bleedingRate = 0.01; }; class Medium { + name = "$STR_ACE_Medical_Wounds_PunctureWound_Medium"; minDamage = 0.5; maxDamage = 0.75; bleedingRate = 0.03; }; class Large { + name = "$STR_ACE_Medical_Wounds_PunctureWound_Large"; minDamage = 0.65; bleedingRate = 0.08; }; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index e82da7ac910..ea4214ec782 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1731,38 +1731,138 @@ Scrape Kratzer + + Minor Scrape + Kleiner Kratzer + + + Medium Scrape + Mittlerer Kratzer + + + Large Scrape + Großer Kratzer + + Avulsion Avulsion + + Minor Avulsion + Kleine Avulsion + + + Medium Avulsion + Mittlere Avulsion + + + Large Avulsion + Große Avulsion + + Bruise Prellung + + Minor Bruise + Kleine Prellung + + + Medium Bruise + Mittlere Prellung + + + Large Bruise + Große Prellung + + Crushed tissue Quetschverletzung + + Minor crushed tissue + Kleine Quetschverletzung + + + Medium crushed tissue + Mittlere Quetschverletzung + + + Large crushed tissue + Große Quetschverletzung + + Cut Schnittwunde + + Small Cut + Kleine Schnittwunde + + + Medium Cut + Mittlere Schnittwunde + + + Large Cut + Große Schnittwunde + + Tear Riss + + Small Tear + Kleiner Riss + + + Medium Tear + Mittlerer Riss + + + Large Tear + Großer Riss + + Velocity Wound Ballistisches Trauma - - Puncture Wound - Stichwunde + + Smal Velocity Wound + Kleines Ballistisches Trauma + + + Medium Velocity Wound + Mittleres Ballistisches Trauma + + + Large Velocity Wound + Großes Ballistisches Trauma + Puncture Wound Stichwunde + + Minor Puncture Wound + Kleine Stichwunde + + + Medium Puncture Wound + Mittlere Stichwunde + + + Large Puncture Wound + Große Stichwunde + + Broken Femur Gebrochener Oberschenkelknochen From 6cc4f48eb211c87a5872747348b49a709f9b89ed Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 14:19:28 +0200 Subject: [PATCH 237/276] Uppercase Injuries --- addons/medical/stringtable.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index ea4214ec782..2cc967d861b 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -2,8 +2,8 @@ - Injuries - Verletzungen + INJURIES + VERLETZUNGEN No injuries on this bodypart ... From 769953d8c164c6c83ba374ba67c86e90e1c22484 Mon Sep 17 00:00:00 2001 From: Simon Reuter Date: Sun, 26 Apr 2015 14:46:04 +0200 Subject: [PATCH 238/276] Update AUTHORS.txt Added email address. --- AUTHORS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 2f16aea49c5..aa88fce0088 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -69,7 +69,7 @@ Raspu86 Riccardo Petricca Robert Boklahánics ramius86 -simon84 +simon84 Sniperwolf572 Tachi Tonic From 28a8fbc4fe96d911e2a9f9d72c86ad2ab3c020ff Mon Sep 17 00:00:00 2001 From: bux578 Date: Sun, 26 Apr 2015 15:36:47 +0200 Subject: [PATCH 239/276] fix vector name it's the vector 21 not the vector IV --- addons/vector/stringtable.xml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml index 05289d189fe..edef7a7bea5 100644 --- a/addons/vector/stringtable.xml +++ b/addons/vector/stringtable.xml @@ -1,18 +1,17 @@  - - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV - Vector IV + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 + Vector 21 Rangefinder From 8976b6983de4b3c01cf54200b3eb6451d541cc1b Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 16:47:36 +0200 Subject: [PATCH 240/276] mute unconsious units --- addons/medical/functions/fnc_setUnconscious.sqf | 5 ++++- addons/medical/functions/fnc_unconsciousPFH.sqf | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index c5809f8c8e5..86f9425d230 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -26,7 +26,7 @@ if !(_set) exitwith { _unit setvariable ["ACE_isUnconscious", false, true]; }; -if !(!(isNull _unit) && {(_unit isKindOf "CaManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; +if !(!(isNull _unit) && {(_unit isKindOf "CAManBase") && ([_unit] call EFUNC(common,isAwake))}) exitwith{}; if (!local _unit) exitwith { [[_unit], QUOTE(DFUNC(setUnconscious)), _unit, false] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */ @@ -86,4 +86,7 @@ _startingTime = time; [DFUNC(unconsciousPFH), 0.1, [_unit,_animState, _originalPos, _startingTime, _minWaitingTime, false, vehicle _unit isKindOf "ParachuteBase"] ] call CBA_fnc_addPerFrameHandler; +// unconscious can't talk +[_unit, "isUnconscious"] call EFUNC(common,muteUnit); + ["medical_onUnconscious", [_unit, true]] call EFUNC(common,globalEvent); diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index 1d7558e5fcf..fc60c2bb025 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -31,6 +31,8 @@ if (!alive _unit) exitwith { [_unit, false] call EFUNC(common,disableAI); //_unit setUnitPos _originalPos; _unit setUnconscious false; + + [_unit, "isUnconscious"] call EFUNC(common,unmuteUnit); ["medical_onUnconscious", [_unit, false]] call EFUNC(common,globalEvent); [(_this select 1)] call cba_fnc_removePerFrameHandler; @@ -71,6 +73,8 @@ if !(_unit getvariable ["ACE_isUnconscious",false]) exitwith { _unit setUnconscious false; + [_unit, "isUnconscious"] call EFUNC(common,unmuteUnit); + // ensure this statement runs only once _args set [5, true]; }; From d6f2ac95dd13cfb3092df4d46e4ad536333fca9c Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 17:04:49 +0200 Subject: [PATCH 241/276] fix ace ammo box doesn't show up in zeus --- addons/ballistics/CfgVehicles.hpp | 2 +- addons/ballistics/config.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/ballistics/CfgVehicles.hpp b/addons/ballistics/CfgVehicles.hpp index 89f5c266520..c43782d024d 100644 --- a/addons/ballistics/CfgVehicles.hpp +++ b/addons/ballistics/CfgVehicles.hpp @@ -9,7 +9,7 @@ class CfgVehicles { //hitPart = "systemChat str _this"; }; }; - + class NATO_Box_Base; class Box_NATO_Wps_F: NATO_Box_Base { class TransportMagazines { diff --git a/addons/ballistics/config.cpp b/addons/ballistics/config.cpp index 8ea75e4460f..66ff7d188ee 100644 --- a/addons/ballistics/config.cpp +++ b/addons/ballistics/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {"ACE_TargetWall"}; + units[] = {"ACE_TargetWall","ACE_Box_Ammo"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; From 90f1d1f3fa3c0f799745ef828bae13be8957d4a1 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 17:25:56 +0200 Subject: [PATCH 242/276] those damn mine detectors, also fix advanced medical box not showing up in zeus --- addons/medical/CfgWeapons.hpp | 8 -------- addons/medical/config.cpp | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 8fd58e25717..262c7b4b484 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -35,7 +35,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\packingBandage_x_ca.paa)); model = QUOTE(PATHTOF(data\packingbandage.p3d)); @@ -49,7 +48,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; picture = QUOTE(PATHTOF(ui\items\elasticBandage_x_ca.paa)); model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d"; @@ -63,7 +61,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; picture = QUOTE(PATHTOF(ui\items\tourniquet_x_ca.paa)); model = QUOTE(PATHTOF(data\tourniquet.p3d)); @@ -77,7 +74,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\morphine_x_ca.paa)); model = QUOTE(PATHTOF(data\morphine.p3d)); @@ -91,7 +87,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\atropine_x_ca.paa)); model = QUOTE(PATHTOF(data\atropine.p3d)); @@ -106,7 +101,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\epinephrine_x_ca.paa)); model = QUOTE(PATHTOF(data\epinephrine.p3d)); @@ -193,7 +187,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; picture = QUOTE(PATHTOF(ui\items\quickclot_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_QUIKCLOT_DESC_SHORT; @@ -206,7 +199,6 @@ class CfgWeapons { scope = 2; value = 1; count = 1; - type = 16; displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; picture = QUOTE(PATHTOF(ui\items\personal_aid_kit_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_AID_KIT_DESC_SHORT; diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index 4dca8bdeca5..de99778c115 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", "ACE_bodyBagObject"}; + units[] = {"ACE_medicalSupplyCrate", "ACE_medicalSupplyCrate_advanced", "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_interaction","ace_modules"}; From 7319a3dbc6c360f1f0274232224a6a10e99e467a Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 17:38:48 +0200 Subject: [PATCH 243/276] remove obsolete config entries --- addons/medical/CfgWeapons.hpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/addons/medical/CfgWeapons.hpp b/addons/medical/CfgWeapons.hpp index 262c7b4b484..8c45b6906cc 100644 --- a/addons/medical/CfgWeapons.hpp +++ b/addons/medical/CfgWeapons.hpp @@ -33,8 +33,6 @@ class CfgWeapons { }; class ACE_packingBandage: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\packingBandage_x_ca.paa)); model = QUOTE(PATHTOF(data\packingbandage.p3d)); @@ -46,8 +44,6 @@ class CfgWeapons { }; class ACE_elasticBandage: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY; picture = QUOTE(PATHTOF(ui\items\elasticBandage_x_ca.paa)); model = "\A3\Structures_F_EPA\Items\Medical\Bandage_F.p3d"; @@ -59,8 +55,6 @@ class CfgWeapons { }; class ACE_tourniquet: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY; picture = QUOTE(PATHTOF(ui\items\tourniquet_x_ca.paa)); model = QUOTE(PATHTOF(data\tourniquet.p3d)); @@ -72,8 +66,6 @@ class CfgWeapons { }; class ACE_morphine: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\morphine_x_ca.paa)); model = QUOTE(PATHTOF(data\morphine.p3d)); @@ -85,8 +77,6 @@ class CfgWeapons { }; class ACE_atropine: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\atropine_x_ca.paa)); model = QUOTE(PATHTOF(data\atropine.p3d)); @@ -99,8 +89,6 @@ class CfgWeapons { }; class ACE_epinephrine: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY; picture = QUOTE(PATHTOF(ui\items\epinephrine_x_ca.paa)); model = QUOTE(PATHTOF(data\epinephrine.p3d)); @@ -112,8 +100,6 @@ class CfgWeapons { }; class ACE_plasmaIV: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_PLASMA_IV; picture = QUOTE(PATHTOF(ui\items\plasmaIV_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_PLASMA_IV_DESC_SHORT; @@ -136,8 +122,6 @@ class CfgWeapons { }; class ACE_bloodIV: ACE_ItemCore { scope = 2; - value = 1; - count = 1; model = "\A3\Structures_F_EPA\Items\Medical\BloodBag_F.p3d"; displayName = $STR_ACE_MEDICAL_BLOOD_IV; picture = QUOTE(PATHTOF(ui\items\bloodIV_x_ca.paa)); @@ -161,8 +145,6 @@ class CfgWeapons { }; class ACE_salineIV: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_SALINE_IV; picture = QUOTE(PATHTOF(ui\items\salineIV_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_SALINE_IV_DESC_SHORT; @@ -185,8 +167,6 @@ class CfgWeapons { }; class ACE_quikclot: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY; picture = QUOTE(PATHTOF(ui\items\quickclot_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_QUIKCLOT_DESC_SHORT; @@ -197,8 +177,6 @@ class CfgWeapons { }; class ACE_personalAidKit: ACE_ItemCore { scope = 2; - value = 1; - count = 1; displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY; picture = QUOTE(PATHTOF(ui\items\personal_aid_kit_x_ca.paa)); descriptionShort = $STR_ACE_MEDICAL_AID_KIT_DESC_SHORT; From 5320f4c6b70a0b73dc6514381207d3a54790fc30 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 19:33:08 +0200 Subject: [PATCH 244/276] fix broken parse text cache in some cases --- addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf | 2 ++ addons/interact_menu/functions/fnc_render.sqf | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf index f538807ffe8..b5d6a4e967a 100644 --- a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -7,6 +7,8 @@ _ctrl = _this select 0; _index = _this select 1; _text = _this select 2; +//systemChat str (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")); + if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"-1")) then { GVAR(ParsedTextCached) set [_index, _text]; _ctrl ctrlSetStructuredText parseText _text; diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 0c0635f8a4a..01a550eb911 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -77,7 +77,6 @@ if (GVAR(openedMenuType) >= 0) then { GVAR(startHoverTime) = diag_tickTime; GVAR(lastPath) = _hoverPath; GVAR(expanded) = false; - GVAR(ParsedTextCached) = []; } else { if(!GVAR(expanded) && diag_tickTime-GVAR(startHoverTime) > 0.25) then { GVAR(expanded) = true; @@ -120,6 +119,7 @@ if(!_foundTarget && GVAR(actionSelected)) then { }; for "_i" from GVAR(iconCount) to (count GVAR(iconCtrls))-1 do { ctrlDelete (GVAR(iconCtrls) select _i); + GVAR(ParsedTextCached) set [_i, ""]; }; GVAR(iconCtrls) resize GVAR(iconCount); GVAR(iconCount) = 0; From 384ff3c9b0e5dafd84bacffbf51c3299216fbe25 Mon Sep 17 00:00:00 2001 From: Felix Wiegand Date: Sun, 26 Apr 2015 20:12:11 +0200 Subject: [PATCH 245/276] Add biprivatekeys to gitignore ... just in case. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 76f95dcd109..f05646fb8a2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ release/* texHeaders.bin *.swp *.swo +*.biprivatekey From f5d73318471ef08c835ea95ec477a8361d4043e3 Mon Sep 17 00:00:00 2001 From: commy2 Date: Sun, 26 Apr 2015 20:57:55 +0200 Subject: [PATCH 246/276] no team management on the dead or unconscious units, fix #803 --- addons/interaction/CfgVehicles.hpp | 40 +++++++++---------- addons/interaction/XEH_preInit.sqf | 2 + .../functions/fnc_canJoinGroup.sqf | 12 ++++++ .../interaction/functions/fnc_canJoinTeam.sqf | 12 ++++++ 4 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 addons/interaction/functions/fnc_canJoinGroup.sqf create mode 100644 addons/interaction/functions/fnc_canJoinTeam.sqf diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 0408192919d..f6f39808b9d 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -35,7 +35,7 @@ class CfgVehicles { class ACE_TeamManagement { displayName = "$STR_ACE_Interaction_TeamManagement"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {GVAR(EnableTeamManagement)}); statement = ""; showDisabled = 0; priority = 3.2; @@ -44,7 +44,7 @@ class CfgVehicles { class ACE_JoinTeamRed { displayName = "$STR_ACE_Interaction_JoinTeamRed"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_red_ca.paa); @@ -53,7 +53,7 @@ class CfgVehicles { }; class ACE_JoinTeamGreen { displayName = "$STR_ACE_Interaction_JoinTeamGreen"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_green_ca.paa); @@ -62,7 +62,7 @@ class CfgVehicles { }; class ACE_JoinTeamBlue { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_blue_ca.paa); @@ -71,7 +71,7 @@ class CfgVehicles { }; class ACE_JoinTeamYellow { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam)); statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_yellow_ca.paa); @@ -81,7 +81,7 @@ class CfgVehicles { class ACE_LeaveTeam { displayName = "$STR_ACE_Interaction_LeaveTeam"; - condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'}); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {assignedTeam _player != 'MAIN'}); statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -92,8 +92,8 @@ class CfgVehicles { class ACE_JoinGroup { displayName = "$STR_ACE_Interaction_JoinGroup"; - condition = QUOTE(side group _player == side group _target && {group _player != group _target}); - statement = QUOTE([_player] joinSilent group _target;); + condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinGroup)); + statement = QUOTE([_player] joinSilent group _target); showDisabled = 0; priority = 2.6; icon = PATHTOF(UI\team\team_management_ca.paa); @@ -223,7 +223,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_JoinTeamBlue"; condition = QUOTE(true); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'BLUE')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.2; icon = PATHTOF(UI\team\team_blue_ca.paa); @@ -233,7 +233,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_JoinTeamYellow"; condition = QUOTE(true); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'YELLOW')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.1; icon = PATHTOF(UI\team\team_yellow_ca.paa); @@ -244,7 +244,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_LeaveTeam"; condition = QUOTE(assignedTeam _player != 'MAIN'); exceptions[] = {"isNotInside"}; - statement = QUOTE([ARR_2(_player,'MAIN')] call FUNC(joinTeam)); + statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.5; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -252,9 +252,9 @@ class CfgVehicles { }; class ACE_BecomeLeader { displayName = "$STR_ACE_Interaction_BecomeLeader"; - condition = QUOTE(_this call FUNC(canBecomeLeader)); + condition = QUOTE(_this call DFUNC(canBecomeLeader)); exceptions[] = {"isNotInside"}; - statement = QUOTE(_this call FUNC(doBecomeLeader)); + statement = QUOTE(_this call DFUNC(doBecomeLeader)); showDisabled = 1; priority = 1.0; icon = PATHTOF(UI\team\team_white_ca.paa); @@ -405,7 +405,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -423,7 +423,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -443,7 +443,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -461,7 +461,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -479,7 +479,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Push"; distance = 6; condition = QUOTE(getMass _target < 1000 && {alive _target}); - statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call FUNC(push);); + statement = QUOTE([ARR_2(_target, [ARR_3(2 * (vectorDir _player select 0), 2 * (vectorDir _player select 1), 0.5)])] call DFUNC(push);); showDisabled = 0; priority = -1; }; @@ -490,7 +490,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; @@ -509,7 +509,7 @@ class CfgVehicles { displayName = "$STR_ACE_Interaction_Passengers"; condition = "true"; statement = ""; - insertChildren = QUOTE(_this call FUNC(addPassengersActions)); + insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; }; }; diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index 6f10a4e8348..34c225c8f0f 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -8,6 +8,8 @@ PREP(addSelectableItem); PREP(applyButtons); PREP(canBecomeLeader); PREP(canInteractWithCivilian); +PREP(canJoinGroup); +PREP(canJoinTeam); PREP(canTapShoulder); PREP(doBecomeLeader); PREP(getDoor); diff --git a/addons/interaction/functions/fnc_canJoinGroup.sqf b/addons/interaction/functions/fnc_canJoinGroup.sqf new file mode 100644 index 00000000000..d2995249250 --- /dev/null +++ b/addons/interaction/functions/fnc_canJoinGroup.sqf @@ -0,0 +1,12 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +alive _target +&& {!(_target getVariable ["ACE_isUnconscious", false])} +&& {side group _unit == side group _target} +&& {group _unit != group _target} diff --git a/addons/interaction/functions/fnc_canJoinTeam.sqf b/addons/interaction/functions/fnc_canJoinTeam.sqf new file mode 100644 index 00000000000..45f96393a94 --- /dev/null +++ b/addons/interaction/functions/fnc_canJoinTeam.sqf @@ -0,0 +1,12 @@ +// by commy2 +#include "script_component.hpp" + +private ["_unit", "_target"]; + +_unit = _this select 0; +_target = _this select 1; + +alive _target +&& {!(_target getVariable ["ACE_isUnconscious", false])} +&& {!([_target] call EFUNC(common,isPlayer))} +&& {_target in units group _unit} From b472292b20e9d032fb3f92a80d0e0659b01e48e8 Mon Sep 17 00:00:00 2001 From: KoffeinFlummi Date: Sun, 26 Apr 2015 21:05:41 +0200 Subject: [PATCH 247/276] Remove tabler comments. sed is awesome. --- addons/advanced_ballistics/stringtable.xml | 1 - addons/atragmx/stringtable.xml | 1 - addons/flashsuppressors/stringtable.xml | 1 - addons/goggles/stringtable.xml | 1 - addons/grenades/stringtable.xml | 1 - addons/magazinerepack/stringtable.xml | 1 - addons/map/stringtable.xml | 1 - addons/medical/stringtable.xml | 1 - addons/missileguidance/stringtable.xml | 1 - addons/mk6mortar/stringtable.xml | 1 - addons/nametags/stringtable.xml | 1 - addons/optics/stringtable.xml | 1 - addons/optionsmenu/stringtable.xml | 1 - addons/overheating/stringtable.xml | 1 - addons/parachute/stringtable.xml | 1 - addons/reloadlaunchers/stringtable.xml | 1 - addons/vehicles/stringtable.xml | 1 - 17 files changed, 17 deletions(-) diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index cd6b75cf974..dbf2784f21c 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index dd8fe236a7a..f3825c405a8 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index d3185fc2b08..e312f2d5c14 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 16fd227b114..ce337760d75 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 7f8321d6c6c..c1ff10143d1 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 9ea10924ac9..4bdfecbd785 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index e3e2a6fe93b..4423bbcfb47 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 7608824af1b..b4e1c425b12 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index 59a80df0dce..e0923981f3b 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index da61afb03b5..19d68d8eb11 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index ab3119a4e06..7c435cd6fd8 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/optics/stringtable.xml b/addons/optics/stringtable.xml index 28530ecf1e0..56216f2cb13 100644 --- a/addons/optics/stringtable.xml +++ b/addons/optics/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index f5ba573f32f..cdbdcf72a0a 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 8f37ca097dc..865b7a82428 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index a1de714331d..c0a63755b18 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 77160503344..bb949040d0a 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,5 +1,4 @@  - diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 2312ce60278..603f2563dcd 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -1,5 +1,4 @@  - From a148ded254c85143ce47b4795183ad9b972ce326 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 21:15:04 +0200 Subject: [PATCH 248/276] Added an e-mail address --- AUTHORS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index 5c273e18dfa..724cfae6c11 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -17,7 +17,7 @@ Janus Kieran NouberNou PabstMirror -Ruthberg +Ruthberg tpM ViperMaul VKing From 227f4827f23963d98f62f4228236f0d4f8ef0e8d Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 21:28:16 +0200 Subject: [PATCH 249/276] Added advanced_ballistics and weather shortcuts --- documentation/user/shourtcuts.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/documentation/user/shourtcuts.md b/documentation/user/shourtcuts.md index 0e6444c645d..66e12ae76fd 100644 --- a/documentation/user/shourtcuts.md +++ b/documentation/user/shourtcuts.md @@ -15,6 +15,11 @@ parent: wiki + + Ctrl+⇧ Shift+K + Show Protractor + ACE_Advanced_Ballistics + ⊞ Win Interaction menu @@ -200,5 +205,10 @@ parent: wiki FCS: Range down ACE_FireControlSsystem + + ⇧ Shift+K + Show Wind Info + ACE_Weather + From 58395b166beb3be5ab3a8b012ae140bc8f065a44 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 21:29:43 +0200 Subject: [PATCH 250/276] Fixed a typo --- documentation/user/{shourtcuts.md => shortcuts.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename documentation/user/{shourtcuts.md => shortcuts.md} (100%) diff --git a/documentation/user/shourtcuts.md b/documentation/user/shortcuts.md similarity index 100% rename from documentation/user/shourtcuts.md rename to documentation/user/shortcuts.md From 9bd32f5797620e91474d155708de0511ae0ce3d2 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 22:33:11 +0200 Subject: [PATCH 251/276] Fixed an incorrect module setting description --- addons/winddeflection/ACE_Settings.hpp | 2 +- addons/winddeflection/CfgVehicles.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/winddeflection/ACE_Settings.hpp b/addons/winddeflection/ACE_Settings.hpp index b10b78db0c0..0a0cac6b343 100644 --- a/addons/winddeflection/ACE_Settings.hpp +++ b/addons/winddeflection/ACE_Settings.hpp @@ -19,7 +19,7 @@ class ACE_Settings { }; class GVAR(simulationRadius) { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which projectiles are wind deflected"; typeName = "SCALAR"; value = 3000; }; diff --git a/addons/winddeflection/CfgVehicles.hpp b/addons/winddeflection/CfgVehicles.hpp index 76ac0c13d36..1c24c0a386a 100644 --- a/addons/winddeflection/CfgVehicles.hpp +++ b/addons/winddeflection/CfgVehicles.hpp @@ -31,7 +31,7 @@ class CfgVehicles { }; class simulationRadius { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which projectiles are wind deflected"; typeName = "NUMBER"; defaultValue = 3000; }; From af2dc6270506cd18edad5c41b08b3418a989a0d7 Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 22:44:18 +0200 Subject: [PATCH 252/276] Improved a module setting description --- addons/advanced_ballistics/ACE_Settings.hpp | 2 +- addons/advanced_ballistics/CfgVehicles.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/advanced_ballistics/ACE_Settings.hpp b/addons/advanced_ballistics/ACE_Settings.hpp index d1462b144fb..67bc51511e6 100644 --- a/addons/advanced_ballistics/ACE_Settings.hpp +++ b/addons/advanced_ballistics/ACE_Settings.hpp @@ -57,7 +57,7 @@ class ACE_Settings { }; class GVAR(simulationRadius) { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles"; typeName = "SCALAR"; value = 3000; }; diff --git a/addons/advanced_ballistics/CfgVehicles.hpp b/addons/advanced_ballistics/CfgVehicles.hpp index 8e6e40e21e1..fda4b9a8ffd 100644 --- a/addons/advanced_ballistics/CfgVehicles.hpp +++ b/addons/advanced_ballistics/CfgVehicles.hpp @@ -69,7 +69,7 @@ class CfgVehicles { }; class simulationRadius { displayName = "Simulation Radius"; - description = "Defines the radius (in meters) in which advanced ballistics are applied"; + description = "Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles"; typeName = "NUMBER"; defaultValue = 3000; }; From 9c322d5a226efd179178a5dc0df5f4a091a250df Mon Sep 17 00:00:00 2001 From: ulteq Date: Sun, 26 Apr 2015 22:50:47 +0200 Subject: [PATCH 253/276] Added module descriptions for advanced ballistics and wind deflection --- documentation/missionmaker/modules.md | 100 ++++++++++++++++++++------ 1 file changed, 77 insertions(+), 23 deletions(-) diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 0b0f13f8d6f..239f1db7898 100644 --- a/documentation/missionmaker/modules.md +++ b/documentation/missionmaker/modules.md @@ -11,8 +11,42 @@ parent: wiki ## 1. Modules -### 1.1 BlueForceTracking -*Part of: ACE_Map* +### 1.1 Advanced Ballistics +*Part of: ace_advanced_ballistics* + +This module allows to enable advanced external- and internal ballistics. + +**Settings:** + +1. **Advanced Ballistics (Boolean)
** +Enables advanced ballistics.
+`Default value: No` +2. **Always Enabled For Snipers (Boolean)
** +Always enables advanced ballistics when high power optics are used.
+`Default value: Yes` +3. **Disabled In FullAuto Mode (Boolean)
** +Disables the advanced ballistics during full auto fire.
+`Default value: No` +4. **Disabled For Non Local Players (Boolean)
** +Disables the advanced ballistics for bullets coming from other players (enable this if you encounter frame drops during heavy firefights in multiplayer).
+`Default value: Yes` +5. **Enable Ammo Temperature Simulation (Boolean)
** +Muzzle velocity varies with ammo temperature.
+`Default value: Yes` +6. **Enable Barrel Length Simulation (Boolean)
** +Muzzle velocity varies with barrel length.
+`Default value: Yes` +7. **Enable Bullet Trace Effect (Boolean)
** +Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics).
+8. **Simulation Interval (Number)
** +Defines the interval between every calculation step.
+`Default value: 0.05` +9. **Simulation Radius (Number)
** +Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles.
+`Default value: 3000` + +### 1.2 BlueForceTracking +*Part of: ace_map* When adding the "BlueForceTracking" module to your mission it adds map markers to every group on the players side and refreshes them in certain configurable interval (in seconds). The module takes the group type into account and uses the proper NATO icon for each marker. @@ -25,8 +59,8 @@ How often the markers should be refreshed (in seconds).
Hide markers for "AI only" groups.
`Default value: No` -### 1.2 Check PBOs -*Part of: ACE_Core* +### 1.3 Check PBOs +*Part of: ace_core* If you are worried that players haven't updated ACE or other mods to the version you're using on the server, you can place the "Check PBOs" module on your map. You can choose one of three posible actions that are being executed when a player joins that has a wrong version of ACE or an other mod: @@ -61,8 +95,8 @@ Example 3: @JSRS + @Blastcore-A3:
[TBD, "warfxpe","blastcore_vep"] ``` -### 1.3 Explosive System -*Part of: ACE_Explosive* +### 1.4 Explosive System +*Part of: ace_explosive* The "Explosive System" module lets you tweak the settings for the new explosive system that ACE introduces. @@ -75,17 +109,17 @@ Require explosive specialists to disable explosives.
Increase the time it takes to complete actions for non-specialists.
`Default value: Yes` -### 1.4 Fatigue System (deprecated) +### 1.5 Fatigue System (deprecated) **Warning:** *This module is deprecated and only in there not to break older missions that have used this module. It will be removed in a future update. It serves no purpose.* -### 1.5 Friendly Fire Messages -*Part of: ACE_Respawn* +### 1.6 Friendly Fire Messages +*Part of: ace_respawn* The "Friendly Fire Messages" module triggers a message when a player kills a friendly or civilian unit. This module isn't needed on servers with a low difficulty setting. -### 1.6 Interaction -*Part of: ACE_Interaction* +### 1.7 Interaction +*Part of: ace_interaction* This module allows you to tweak the settings for player names tags. @@ -95,8 +129,8 @@ This module allows you to tweak the settings for player names tags. Sets the distance (in meters) at which player name tags become visible.
`Default value: 5` -### 1.7 Medical System -*Part of: ACE_Medical* +### 1.8 Medical System +*Part of: ace_medical* When using the medical system ACE offers you probably want to fine tune some aspects of the wounding, healing or gameplay mechanics and fit them to your needs. The "Medical System" module offers a lot of settings to do just that. @@ -133,16 +167,16 @@ Use one bandage to heal the entire body.
Allow all players to use chat while unconcious? Admin can always use the chat regardless.
`Default value: No` -### 1.8 Rallypoint System -*Part of: ACE_Respawn* +### 1.9 Rallypoint System +*Part of: ace_respawn* This module was introduced with 0.94 and enables Mission Makers to specificly enable units to move a rallypoint. Every unit that is synced with that module is able to move a rallypoint. **Note:** It's important to mention that this doesn't work for player who join during a mission (JIP = Join in progress). That's something we can't change because that's the way Bohemia has implemented their module framework. To enable JIP players to move rally points have a look at [3.1 ACE Rallypoints](#31-ace-rallypoints). -### 1.9 Repair System -*Part of: ACE_Logistics* +### 1.10 Repair System +*Part of: ace_logistics* Placing the "Repair System" module makes it possible to define the time it takes for certain repair actions. @@ -161,8 +195,8 @@ Time to replace a track (in seconds).
Limits the amount of damage that can be repaired. 0 = Repair all damage, 1 = Cannot repair any damage.
`Default value: 0` -### 1.10 Respawn System -*Part of: ACE_Respawn* +### 1.11 Respawn System +*Part of: ace_respawn* The "Respawn System" module enables players to respawn with the gear they had before dying and to remove bodies of players after a configurable interval (in seconds). @@ -172,8 +206,8 @@ The "Respawn System" module enables players to respawn with the gear they had be Respawn with the gear a player had just before his death.
`Default value: No` -### 1.11 SwitchUnits System -*Part of: ACE_SwitchUnits* +### 1.12 SwitchUnits System +*Part of: ace_switchunits* The [SwitchUnits System](#32-ace-switchunits) enables players to control certain AI units on the map. @@ -199,8 +233,28 @@ The safe zone around players from a different team (in meters)
`Default value: 200` -### 1.12 LSD Vehicles -*Part of: ACE_Core* +### 1.13 LSD Vehicles +*Part of: ace_core* + +### 1.14 Wind Deflection +*Part of: ace_winddeflection* + +This module allows you to define when wind deflection is active. + +**Settings:** + +1. **Wind Deflection (Boolean)
** +Enables wind deflection.
+`Default value: Yes` +2. **Vehicle Enabled (Boolean)
** +Enables wind deflection for static/vehicle gunners.
+`Default value: Yes` +3. **Simulation Interval (Number)
** +Defines the interval between every calculation step.
+`Default value: 0.05` +4. **Simulation Radius (Number)
** +Defines the radius around the player (in meters) at which projectiles are wind deflected.
+`Default value: 3000` And then there's the "LSD Vehicles" module … it does 'something' to all vehicles synced to that module. http://youtu.be/X3e0LTexEok From 882bfd711b9a70a84af8e04ba018db202ec71d3b Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Sun, 26 Apr 2015 23:50:03 +0200 Subject: [PATCH 254/276] Update AUTHORS.txt Added myself, including e-mail (only made two minor contributions so far though) --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index 724cfae6c11..dc8fb271301 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -33,6 +33,7 @@ Aggr094 Anthariel BlackQwar Brakoviejo +Brisse Clon1998 Codingboy Crusty From d64783fca12e7b4bc154c790e106d8135a517ca9 Mon Sep 17 00:00:00 2001 From: commy2 Date: Mon, 27 Apr 2015 02:40:04 +0200 Subject: [PATCH 255/276] remove the calibers from the weapon names --- addons/realisticnames/stringtable.xml | 308 +++++++++++++------------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 02995def8cd..88088f53685 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1482,214 +1482,214 @@ VS-121
- TODO: MAR-10 .338 - TODO: MAR-10 .338 - MAR-10 .338 - TODO: MAR-10 .338 - TODO: MAR-10 .338 + MAR-10 + MAR-10 + MAR-10 + MAR-10 + MAR-10 - TODO: MAR-10 .338 (Black) - TODO: MAR-10 .338 (Black) - MAR-10 .338 (Noir) - TODO: MAR-10 .338 (Negro) - TODO: MAR-10 .338 (черный) + MAR-10 (Black) + MAR-10 (Black) + MAR-10 (Noir) + MAR-10 (Negro) + MAR-10 (черный) - TODO: MAR-10 .338 (Camo) - TODO: MAR-10 .338 (Camo) - MAR-10 .338 (Camo) - TODO: MAR-10 .338 (Camuflaje) - TODO: MAR-10 .338 (камо) + MAR-10 (Camo) + MAR-10 (Camo) + MAR-10 (Camo) + MAR-10 (Camuflaje) + MAR-10 (камо) - TODO: MAR-10 .338 (Sand) - TODO: MAR-10 .338 (Sand) - MAR-10 .338 (Beige) - TODO: MAR-10 .338 (Arena) - TODO: MAR-10 .338 (песочный) + MAR-10 (Sand) + MAR-10 (Sand) + MAR-10 (Beige) + MAR-10 (Arena) + MAR-10 (песочный) - SG 556 7.62 mm - SG 556 7.62 mm - SG 556 7.62 mm - SG 556 7.62 mm - SG 556 7.62 мм - SG 556 7,62 mm + SG 556 + SG 556 + SG 556 + SG 556 + SG 556 + SG 556 - SG 556 7.62 mm (Black) - SG 556 7.62 mm (Black) - SG 556 7.62 mm (Noir) - SG 556 7.62 mm (Negro) - SG 556 7.62 мм (черный) - SG 556 7,62 mm (czarny) + SG 556 (Black) + SG 556 (Black) + SG 556 (Noir) + SG 556 (Negro) + SG 556 (черный) + SG 556 (czarny) - SG 556 7.62 mm (Khaki) - SG 556 7.62 mm (Khaki) - SG 556 7.62 mm (Kaki) - SG 556 7.62 mm (Caqui) - SG 556 7.62 мм (хаки) - SG 556 7,62 mm (khaki) + SG 556 (Khaki) + SG 556 (Khaki) + SG 556 (Kaki) + SG 556 (Caqui) + SG 556 (хаки) + SG 556 (khaki) - SG 556 7.62 mm (Sand) - SG 556 7.62 mm (Sand) - SG 556 7.62 mm (Beige) - SG 556 7.62 mm (Arena) - SG 556 7.62 мм (песочный) - SG 556 7,62 mm (piaskowy) + SG 556 (Sand) + SG 556 (Sand) + SG 556 (Beige) + SG 556 (Arena) + SG 556 (песочный) + SG 556 (piaskowy) - SG 556 7.62 mm (Camo) - SG 556 7.62 mm (Camo) - SG 556 7.62 mm (Camo) - SG 556 7.62 mm (Camuflaje) - SG 556 7.62 мм (камо) - SG 556 7,62 mm (kamuflaż) + SG 556 (Camo) + SG 556 (Camo) + SG 556 (Camo) + SG 556 (Camuflaje) + SG 556 (камо) + SG 556 (kamuflaż) - SG 556 7.62 mm (Woodland) - SG 556 7.62 mm (Woodland) - SG 556 7.62 mm (Woodland) - SG 556 7.62 mm (Bosque) - SG 556 7.62 мм (лесной) - SG 556 7,62 mm (leśny) + SG 556 (Woodland) + SG 556 (Woodland) + SG 556 (Woodland) + SG 556 (Bosque) + SG 556 (лесной) + SG 556 (leśny) - SG 556 7.62 mm (provisional) spotter - SG 556 7.62 mm (provisional) spotter - SG 556 7.62 mm (provisoire) Observateur - SG 556 7.62 mm (provisional) observador - SG 556 7.62 мм (provisional) корректировщик - SG 556 7,62 mm (prowizoryczny) obserwator + SG 556 (provisional) spotter + SG 556 (provisional) spotter + SG 556 (provisoire) Observateur + SG 556 (provisional) observador + SG 556 (provisional) корректировщик + SG 556 (prowizoryczny) obserwator - TODO: ASP-1 Kir 12.7 mm - TODO: ASP-1 Kir 12.7 mm - ASP-1 Kir 12.7 mm - TODO: ASP-1 Kir 12.7 mm - TODO: ASP-1 Kir 12.7 мм + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir + ASP-1 Kir - TODO: ASP-1 Kir 12.7 mm (Black) - TODO: ASP-1 Kir 12.7 mm (Black) - ASP-1 Kir 12.7 mm (Noir) - TODO: ASP-1 Kir 12.7 mm (Negro) - TODO: ASP-1 Kir 12.7 мм (черный) + ASP-1 Kir (Black) + ASP-1 Kir (Black) + ASP-1 Kir (Noir) + ASP-1 Kir (Negro) + ASP-1 Kir (черный) - TODO: ASP-1 Kir 12.7 mm (Tan) - TODO: ASP-1 Kir 12.7 mm (Tan) - ASP-1 Kir 12.7 mm (Tan) - TODO: ASP-1 Kir 12.7 mm (Tan) - TODO: ASP-1 Kir 12.7 мм (бронзовый) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (Tan) + ASP-1 Kir (бронзовый) - TODO: Cyrus 9.3 mm - TODO: Cyrus 9.3 mm - Cyrus 9.3 mm - TODO: Cyrus 9.3 mm - TODO: Cyrus 9.3 мм + Cyrus + Cyrus + Cyrus + Cyrus + Cyrus - TODO: Cyrus 9.3 mm (Black) - TODO: Cyrus 9.3 mm (Black) - Cyrus 9.3 mm (Noir) - TODO: Cyrus 9.3 mm (Negro) - TODO: Cyrus 9.3 мм (черный) + Cyrus (Black) + Cyrus (Black) + Cyrus (Noir) + Cyrus (Negro) + Cyrus (черный) - TODO: Cyrus 9.3 mm (Hex) - TODO: Cyrus 9.3 mm (Hex) - Cyrus 9.3 mm (Hex) - TODO: Cyrus 9.3 mm (Hex) - TODO: Cyrus 9.3 мм (гекс) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (Hex) + Cyrus (гекс) - TODO: Cyrus 9.3 mm (Tan) - TODO: Cyrus 9.3 mm (Tan) - Cyrus 9.3 mm (Tan) - TODO: Cyrus 9.3 mm (Tan) - TODO: Cyrus 9.3 мм (бронза) + Cyrus (Tan) + Cyrus (Tan) + Cyrus (Tan) + Cyrus (Tan) + Cyrus (бронза) - M14 7.62 mm - M14 7.62 mm - M14 7.62 mm - M14 7.62 mm - M14 7.62 мм - M14 7,62 mm + M14 + M14 + M14 + M14 + M14 + M14 - M14 7.62 mm (Camo) - M14 7.62 mm (Camo) - M14 7.62 mm (Camo) - M14 7.62 mm (Camuflaje) - M14 7.62 мм (Камо) - M14 7,62 mm (kamuflaż) + M14 (Camo) + M14 (Camo) + M14 (Camo) + M14 (Camuflaje) + M14 (Камо) + M14 (kamuflaż) - M14 7.62 mm (Olive) - M14 7.62 mm (Olive) - M14 7.62 mm (Olive) - M14 7.62 mm (Oliva) - M14 7.62 мм (Олива) - M14 7,62 mm (oliwkowy) + M14 (Olive) + M14 (Olive) + M14 (Olive) + M14 (Oliva) + M14 (Олива) + M14 (oliwkowy) - TODO: Navid 9.3 mm - TODO: Navid 9.3 mm - Navid 9.3 mm - TODO: Navid 9.3 mm - TODO: Navid 9.3 мм + Navid + Navid + Navid + Navid + Navid - TODO: Navid 9.3 mm (Hex) - TODO: Navid 9.3 mm (Hex) - Navid 9.3 mm (Hex) - TODO: Navid 9.3 mm (Hex) - TODO: Navid 9.3 мм (гекс) + Navid (Hex) + Navid (Hex) + Navid (Hex) + Navid (Hex) + Navid (гекс) - TODO: Navid 9.3 mm (Tan) - TODO: Navid 9.3 mm (Tan) - Navid 9.3 mm (Tan) - TODO: Navid 9.3 mm (Tan) - TODO: Navid 9.3 мм (бронза) + Navid (Tan) + Navid (Tan) + Navid (Tan) + Navid (Tan) + Navid (бронза) - LWMMG .338 - LWMMG .338 - LWMMG .338 - LWMMG .338 - LWMMG .338 - LWMMG .338 + LWMMG + LWMMG + LWMMG + LWMMG + LWMMG + LWMMG - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) - LWMMG .338 (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) + LWMMG (MTP) - LWMMG .338 (Black) - LWMMG .338 (Black) - LWMMG .338 (Noir) - LWMMG .338 (Negro) - LWMMG .338 (Черный) - LWMMG .338 (czarny) + LWMMG (Black) + LWMMG (Black) + LWMMG (Noir) + LWMMG (Negro) + LWMMG (Черный) + LWMMG (czarny) - LWMMG .338 (Sand) - LWMMG .338 (Sand) - SPMG .338 (Beige) - LWMMG .338 (Arena) - LWMMG .338 (Песочный) - LWMMG .338 (piaskowy) + LWMMG (Sand) + LWMMG (Sand) + SPMG (Beige) + LWMMG (Arena) + LWMMG (Песочный) + LWMMG (piaskowy)
From db553644aa840f9d2ae89cb879d9ea6d85d3035b Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Mon, 27 Apr 2015 10:24:42 +0200 Subject: [PATCH 256/276] Update stringtable.xml Is this okay? MAR-10 -> Noreen Bad news EMR-1 -> SIG 762 Navid -> HK 122 --- addons/realisticnames/stringtable.xml | 154 +++++++++++++------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 88088f53685..ac642790d28 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1482,88 +1482,88 @@ VS-121
- MAR-10 - MAR-10 - MAR-10 - MAR-10 - MAR-10 + Noreen Bad News + Noreen Bad News + Noreen Bad News + Noreen Bad News + Noreen Bad News - MAR-10 (Black) - MAR-10 (Black) - MAR-10 (Noir) - MAR-10 (Negro) - MAR-10 (черный) + Noreen Bad News (Black) + Noreen Bad News (Black) + Noreen Bad News (Noir) + Noreen Bad News (Negro) + Noreen Bad News (черный) - MAR-10 (Camo) - MAR-10 (Camo) - MAR-10 (Camo) - MAR-10 (Camuflaje) - MAR-10 (камо) + Noreen Bad News (Camo) + Noreen Bad News (Camo) + Noreen Bad News (Camo) + Noreen Bad News (Camuflaje) + Noreen Bad News (камо) - MAR-10 (Sand) - MAR-10 (Sand) - MAR-10 (Beige) - MAR-10 (Arena) - MAR-10 (песочный) + Noreen Bad News (Sand) + Noreen Bad News (Sand) + Noreen Bad News (Beige) + Noreen Bad News (Arena) + Noreen Bad News (песочный) - SG 556 - SG 556 - SG 556 - SG 556 - SG 556 - SG 556 + SIG 762 + SIG 762 + SIG 762 + SIG 762 + SIG 762 + SIG 762 - SG 556 (Black) - SG 556 (Black) - SG 556 (Noir) - SG 556 (Negro) - SG 556 (черный) - SG 556 (czarny) + SIG 762 (Black) + SIG 762 (Black) + SIG 762 (Noir) + SIG 762 (Negro) + SIG 762 (черный) + SIG 762 (czarny) - SG 556 (Khaki) - SG 556 (Khaki) - SG 556 (Kaki) - SG 556 (Caqui) - SG 556 (хаки) - SG 556 (khaki) + SIG 762 (Khaki) + SIG 762 (Khaki) + SIG 762 (Kaki) + SIG 762 (Caqui) + SIG 762 (хаки) + SIG 762 (khaki) - SG 556 (Sand) - SG 556 (Sand) - SG 556 (Beige) - SG 556 (Arena) - SG 556 (песочный) - SG 556 (piaskowy) + SIG 762 (Sand) + SIG 762 (Sand) + SIG 762 (Beige) + SIG 762 (Arena) + SIG 762 (песочный) + SIG 762 (piaskowy) - SG 556 (Camo) - SG 556 (Camo) - SG 556 (Camo) - SG 556 (Camuflaje) - SG 556 (камо) - SG 556 (kamuflaż) + SIG 762 (Camo) + SIG 762 (Camo) + SIG 762 (Camo) + SIG 762 (Camuflaje) + SIG 762 (камо) + SIG 762 (kamuflaż) - SG 556 (Woodland) - SG 556 (Woodland) - SG 556 (Woodland) - SG 556 (Bosque) - SG 556 (лесной) - SG 556 (leśny) + SIG 762 (Woodland) + SIG 762 (Woodland) + SIG 762 (Woodland) + SIG 762 (Bosque) + SIG 762 (лесной) + SIG 762 (leśny) - SG 556 (provisional) spotter - SG 556 (provisional) spotter - SG 556 (provisoire) Observateur - SG 556 (provisional) observador - SG 556 (provisional) корректировщик - SG 556 (prowizoryczny) obserwator + SIG 762 (provisional) spotter + SIG 762 (provisional) spotter + SIG 762 (provisoire) Observateur + SIG 762 (provisional) observador + SIG 762 (provisional) корректировщик + SIG 762 (prowizoryczny) obserwator ASP-1 Kir @@ -1639,25 +1639,25 @@ M14 (oliwkowy) - Navid - Navid - Navid - Navid - Navid + HK 122 + HK 122 + HK 122 + HK 122 + HK 122 - Navid (Hex) - Navid (Hex) - Navid (Hex) - Navid (Hex) - Navid (гекс) + HK 122 (Hex) + HK 122 (Hex) + HK 122 (Hex) + HK 122 (Hex) + HK 122 (гекс) - Navid (Tan) - Navid (Tan) - Navid (Tan) - Navid (Tan) - Navid (бронза) + HK 122 (Tan) + HK 122 (Tan) + HK 122 (Tan) + HK 122 (Tan) + HK 122 (бронза) LWMMG From d6f757e096d3aff809afbed7e4ccb55a33e6d300 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 11:04:12 +0200 Subject: [PATCH 257/276] Enabled scope adjustments for the Khalia (old) optic --- addons/scopes/CfgWeapons.hpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index 6ca522ced79..526282a1b6d 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -71,4 +71,18 @@ class CfgWeapons { }; }; }; + + class optic_KHS_old : ItemCore { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + class ItemInfo : InventoryOpticsItem_Base_F { + class OpticsModes { + class KHS { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; }; From b0876ca39449973c2110883cade7a46d6cb2c621 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 11:06:16 +0200 Subject: [PATCH 258/276] Enables: https://github.com/acemod/ACE3/commit/d64783fca12e7b4bc154c790e106d8135a517ca9 --- addons/realisticnames/CfgWeapons.hpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 3cbe03f4658..8eb3c045779 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -193,7 +193,7 @@ class CfgWeapons { }; // marksmen marksman - /*class DMR_02_base_F: Rifle_Long_Base_F { + class DMR_02_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_02"; //MAR-10 .338"; }; @@ -208,7 +208,6 @@ class CfgWeapons { class srifle_DMR_02_sniper_F: srifle_DMR_02_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_02_sniper"; //MAR-10 .338 (Sand)"; }; - */ class DMR_03_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_03"; //Mk-I EMR 7.62 mm"; }; @@ -236,7 +235,6 @@ class CfgWeapons { class srifle_DMR_03_spotter_F: srifle_DMR_03_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_03_spotter"; //NATO DMR (provisional) spotter"; }; - /* class DMR_04_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_04"; //ASP-1 Kir 12.7 mm"; }; @@ -264,7 +262,6 @@ class CfgWeapons { class srifle_DMR_05_tan_f: srifle_DMR_05_blk_F { displayName = "$STR_ACE_RealisticNames_srifle_DMR_05_tan"; //Cyrus 9.3 mm (Tan)"; }; - */ class DMR_06_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_DMR_06"; //Mk14 7.62 mm"; }; @@ -278,7 +275,6 @@ class CfgWeapons { }; // marksmen mgs - /* class MMG_01_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_01"; //Navid 9.3 mm"; }; @@ -290,7 +286,6 @@ class CfgWeapons { class MMG_01_tan_F: MMG_01_hex_F { displayName = "$STR_ACE_RealisticNames_MMG_01_tan"; //Navid 9.3 mm (Tan)"; }; - */ class MMG_02_base_F: Rifle_Long_Base_F { displayName = "$STR_ACE_RealisticNames_MMG_02"; //SPMG .338"; }; From 33397593213ab5c7198b0b8e03e30cc650125db6 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Mon, 27 Apr 2015 11:58:39 +0200 Subject: [PATCH 259/276] Update stringtable.xml Is this better? SIG 762 -> SIG 556 HK 122 -> HK 121 --- addons/realisticnames/stringtable.xml | 114 +++++++++++++------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index ac642790d28..78e518941be 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1510,60 +1510,60 @@ Noreen Bad News (песочный) - SIG 762 - SIG 762 - SIG 762 - SIG 762 - SIG 762 - SIG 762 + SIG 556 + SIG 556 + SIG 556 + SIG 556 + SIG 556 + SIG 556 - SIG 762 (Black) - SIG 762 (Black) - SIG 762 (Noir) - SIG 762 (Negro) - SIG 762 (черный) - SIG 762 (czarny) + SIG 556 (Black) + SIG 556 (Black) + SIG 556 (Noir) + SIG 556 (Negro) + SIG 556 (черный) + SIG 556 (czarny) - SIG 762 (Khaki) - SIG 762 (Khaki) - SIG 762 (Kaki) - SIG 762 (Caqui) - SIG 762 (хаки) - SIG 762 (khaki) + SIG 556 (Khaki) + SIG 556 (Khaki) + SIG 556 (Kaki) + SIG 556 (Caqui) + SIG 556 (хаки) + SIG 556 (khaki) - SIG 762 (Sand) - SIG 762 (Sand) - SIG 762 (Beige) - SIG 762 (Arena) - SIG 762 (песочный) - SIG 762 (piaskowy) + SIG 556 (Sand) + SIG 556 (Sand) + SIG 556 (Beige) + SIG 556 (Arena) + SIG 556 (песочный) + SIG 556 (piaskowy) - SIG 762 (Camo) - SIG 762 (Camo) - SIG 762 (Camo) - SIG 762 (Camuflaje) - SIG 762 (камо) - SIG 762 (kamuflaż) + SIG 556 (Camo) + SIG 556 (Camo) + SIG 556 (Camo) + SIG 556 (Camuflaje) + SIG 556 (камо) + SIG 556 (kamuflaż) - SIG 762 (Woodland) - SIG 762 (Woodland) - SIG 762 (Woodland) - SIG 762 (Bosque) - SIG 762 (лесной) - SIG 762 (leśny) + SIG 556 (Woodland) + SIG 556 (Woodland) + SIG 556 (Woodland) + SIG 556 (Bosque) + SIG 556 (лесной) + SIG 556 (leśny) - SIG 762 (provisional) spotter - SIG 762 (provisional) spotter - SIG 762 (provisoire) Observateur - SIG 762 (provisional) observador - SIG 762 (provisional) корректировщик - SIG 762 (prowizoryczny) obserwator + SIG 556 (provisional) spotter + SIG 556 (provisional) spotter + SIG 556 (provisoire) Observateur + SIG 556 (provisional) observador + SIG 556 (provisional) корректировщик + SIG 556 (prowizoryczny) obserwator ASP-1 Kir @@ -1639,25 +1639,25 @@ M14 (oliwkowy) - HK 122 - HK 122 - HK 122 - HK 122 - HK 122 + HK 121 + HK 121 + HK 121 + HK 121 + HK 121 - HK 122 (Hex) - HK 122 (Hex) - HK 122 (Hex) - HK 122 (Hex) - HK 122 (гекс) + HK 121 (Hex) + HK 121 (Hex) + HK 121 (Hex) + HK 121 (Hex) + HK 121 (гекс) - HK 122 (Tan) - HK 122 (Tan) - HK 122 (Tan) - HK 122 (Tan) - HK 122 (бронза) + HK 121 (Tan) + HK 121 (Tan) + HK 121 (Tan) + HK 121 (Tan) + HK 121 (бронза) LWMMG From faa17d0e56c73428900223738f17dab808fad653 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Mon, 27 Apr 2015 12:13:09 +0200 Subject: [PATCH 260/276] Update stringtable.xml Noreen Bad News -> Noreen "Bad News" ULR --- addons/realisticnames/stringtable.xml | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 78e518941be..2a929e8266b 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1482,32 +1482,32 @@ VS-121 - Noreen Bad News - Noreen Bad News - Noreen Bad News - Noreen Bad News - Noreen Bad News + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR + Noreen "Bad News" ULR - Noreen Bad News (Black) - Noreen Bad News (Black) - Noreen Bad News (Noir) - Noreen Bad News (Negro) - Noreen Bad News (черный) + Noreen "Bad News" ULR (Black) + Noreen "Bad News" ULR (Black) + Noreen "Bad News" ULR (Noir) + Noreen "Bad News" ULR (Negro) + Noreen "Bad News" ULR (черный) - Noreen Bad News (Camo) - Noreen Bad News (Camo) - Noreen Bad News (Camo) - Noreen Bad News (Camuflaje) - Noreen Bad News (камо) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Camo) + Noreen "Bad News" ULR (Camuflaje) + Noreen "Bad News" ULR (камо) - Noreen Bad News (Sand) - Noreen Bad News (Sand) - Noreen Bad News (Beige) - Noreen Bad News (Arena) - Noreen Bad News (песочный) + Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (Sand) + Noreen "Bad News" ULR (Beige) + Noreen "Bad News" ULR (Arena) + Noreen "Bad News" ULR (песочный) SIG 556 From ecaa23ada2fb4fdf8b1a3ef4144098d7fa32189f Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Mon, 27 Apr 2015 12:17:36 +0200 Subject: [PATCH 261/276] Update stringtable.xml Removed the space in HK121 --- addons/realisticnames/stringtable.xml | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 2a929e8266b..5e9aaa701d1 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1639,25 +1639,25 @@ M14 (oliwkowy) - HK 121 - HK 121 - HK 121 - HK 121 - HK 121 + HK121 + HK121 + HK121 + HK121 + HK121 - HK 121 (Hex) - HK 121 (Hex) - HK 121 (Hex) - HK 121 (Hex) - HK 121 (гекс) + HK121 (Hex) + HK121 (Hex) + HK121 (Hex) + HK121 (Hex) + HK121 (гекс) - HK 121 (Tan) - HK 121 (Tan) - HK 121 (Tan) - HK 121 (Tan) - HK 121 (бронза) + HK121 (Tan) + HK121 (Tan) + HK121 (Tan) + HK121 (Tan) + HK121 (бронза) LWMMG From 3c91f6abe3990876af27d0c05ee00115a90c320e Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 12:28:56 +0200 Subject: [PATCH 262/276] Added ace/module settings for ace_weather: *enableServerController // weather propagation on the server *useACEWeather // disable ace weather *syncRain *syncWind *syncMisc --- addons/weather/ACE_Settings.hpp | 32 ++++++ addons/weather/CfgVehicles.hpp | 46 ++++++++ addons/weather/UI/Icon_Module_Wind_ca.paa | Bin 0 -> 5625 bytes addons/weather/XEH_postServerInit.sqf | 1 - addons/weather/XEH_preInit.sqf | 10 +- addons/weather/config.cpp | 4 +- .../functions/fnc_initModuleSettings.sqf | 34 ++++++ .../functions/fnc_serverController.sqf | 106 +++--------------- .../functions/fnc_updateAceWeather.sqf | 105 +++++++++++++++++ 9 files changed, 238 insertions(+), 100 deletions(-) create mode 100644 addons/weather/ACE_Settings.hpp create mode 100644 addons/weather/CfgVehicles.hpp create mode 100644 addons/weather/UI/Icon_Module_Wind_ca.paa create mode 100644 addons/weather/functions/fnc_initModuleSettings.sqf create mode 100644 addons/weather/functions/fnc_updateAceWeather.sqf diff --git a/addons/weather/ACE_Settings.hpp b/addons/weather/ACE_Settings.hpp new file mode 100644 index 00000000000..14e36983f8c --- /dev/null +++ b/addons/weather/ACE_Settings.hpp @@ -0,0 +1,32 @@ +class ACE_Settings { + class GVAR(enableServerController) { + displayName = "Weather propagation"; + description = "Enables sever side weather propagation"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(useACEWeather) { + displayName = "ACE Weather"; + description = "Overrides the default weather (editor, mission settings) with ACE weather (map based)"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(syncRain) { + displayName = "Sync Rain"; + description = "Synchronizes rain"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(syncWind) { + displayName = "Sync Wind"; + description = "Synchronizes wind"; + typeName = "BOOL"; + value = 1; + }; + class GVAR(syncMisc) { + displayName = "Sync Misc"; + description = "Synchronizes lightnings, rainbow, fog, ..."; + typeName = "BOOL"; + value = 1; + }; +}; diff --git a/addons/weather/CfgVehicles.hpp b/addons/weather/CfgVehicles.hpp new file mode 100644 index 00000000000..7a794bdda07 --- /dev/null +++ b/addons/weather/CfgVehicles.hpp @@ -0,0 +1,46 @@ +class CfgVehicles { + class ACE_Module; + class GVAR(ModuleSettings): ACE_Module { + scope = 2; + displayName = "Weather"; + icon = QUOTE(PATHTOF(UI\Icon_Module_Wind_ca.paa)); + category = "ACE"; + function = QUOTE(DFUNC(initModuleSettings)); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "$STR_ACE_Common_ACETeam"; + class Arguments { + class enableServerController { + displayName = "Weather propagation"; + description = "Enables sever side weather propagation"; + typeName = "BOOL"; + defaultValue = 1; + }; + class useACEWeather { + displayName = "ACE Weather"; + description = "Overrides the default weather (editor, mission settings) with ACE weather (map based)"; + typeName = "BOOL"; + defaultValue = 1; + }; + class syncRain { + displayName = "Sync Rain"; + description = "Synchronizes rain"; + typeName = "BOOL"; + defaultValue = 1; + }; + class syncWind { + displayName = "Sync Wind"; + description = "Synchronizes wind"; + typeName = "BOOL"; + defaultValue = 1; + }; + class syncMisc { + displayName = "Sync Misc"; + description = "Synchronizes lightnings, rainbow, fog, ..."; + typeName = "BOOL"; + defaultValue = 1; + }; + }; + }; +}; diff --git a/addons/weather/UI/Icon_Module_Wind_ca.paa b/addons/weather/UI/Icon_Module_Wind_ca.paa new file mode 100644 index 0000000000000000000000000000000000000000..176fe700a792c16d3cf86ed7ae32e8660b8345dd GIT binary patch literal 5625 zcmd^@UuaWT7{I^A*w#MOPU~VueCR;xgKoK9rOkDgiW3oJ*j8qdQin|Tw3@4Z zD0^_mlodxO8GG_YSCk&`L7L$}abPE9(wUC=p!lSQ7FYiy+~xLKE7h5cQJ4 z{pEi5`=9fjdl%a+EscAdTJ|;i0U(`DcX8g|*h*~ULEO@~tC_eAzr>$4H@6vhZsE7T z2H?9|fbUlTOyYNLhXDpa4H|N8BZGAIf7#LI1W*ipHWFRnk?`p;^=us+=%%zxheyy@5V ze7s#u(b6IM+o96sU9?`9F*$!~Cs|K&J-*!+vZv$H z-)unh<=WJXUxE$oGQZ1Hc035B%kLy2(Z4Vy^Nm-p|EGVl(;Hs!bUO7P&ki#*z-1Sj zZ$Y%$ensJMdlf%naKo#L7M~uk&YP}pOzy#6k=e62fM zen{=Nvv6)e?YCn4oBbEd`Tw?Y00IDhutu@LBB|@5%{YTQX7$H#ut;)xjgaT8Y@@-d zIB~zMn)fa*8ObkAxoM^!m1V>ljikKxai-<5k82@4_A2^vw(0noV##e1#RL5rDUbf* z7;_&>3@h?uf}NMknqjd+bqa$OimHz>`u(|Fu{xmW&%N%o?_5{5o!r0q^K!bM_0);_ zSij*WiCw%YIL96@l51~h4A*>iTIOSnZ#&(57vj&ySht$L^)vRiEe+!zOZ%F=EXw*+ zJ#X!VdxIp-$6nQQY_8COPv>{1SXOhL zoaP5cSWgo>yjAEQ0rQhsvRvv%-iiFaxc(0`?Fk-tcO&cTF%2w3mw6hX9`!>?^0L48 z^zSH7OXg`%maR&tq}QU4Ht%1%?{>Ew%EQJ7=lZrE85e3-4h=pCmjA&7Z@IF2^4FhR ZV}kv-qGCQTeP}!!Jo44F_?a>S@E;o-Cz}8O literal 0 HcmV?d00001 diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index 076b538806b..9941cb20b48 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -9,7 +9,6 @@ GVAR(rain_current_range) = -1+(random 2); // Wind call FUNC(initWind); -GVAR(overcast_multiplier) = 1; GVAR(serverUpdateInterval) = 60; [FUNC(serverController), GVAR(serverUpdateInterval)] call cba_fnc_addPerFrameHandler; diff --git a/addons/weather/XEH_preInit.sqf b/addons/weather/XEH_preInit.sqf index 401ae155c1f..0f49226432c 100644 --- a/addons/weather/XEH_preInit.sqf +++ b/addons/weather/XEH_preInit.sqf @@ -8,21 +8,15 @@ PREP(calculateBarometricPressure); PREP(displayWindInfo); PREP(getMapData); PREP(getWind); +PREP(initModuleSettings); PREP(initWind); PREP(serverController); +PREP(updateAceWeather); PREP(updateHumidity); PREP(updateRain); PREP(updateTemperature); PREP(updateWind); -// Control server side weather propagation -GVAR(enableServerController) = true; - -// Control client side weather effects -GVAR(syncRain) = true; -GVAR(syncWind) = true; // Wind, Gusts, Waves -GVAR(syncMisc) = true; // Lightnings, Rainbow, Fog - // Make sure this data is read before client/server postInit call FUNC(getMapData); diff --git a/addons/weather/config.cpp b/addons/weather/config.cpp index 13e5a0cab26..39cf223518f 100644 --- a/addons/weather/config.cpp +++ b/addons/weather/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { units[] = {}; - weapons[] = {};// "ACE_Kestrel4500" }; + weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; author[] = {"q1184", "Rocko", "esteldunedain","Ruthberg"}; @@ -14,3 +14,5 @@ class CfgPatches { #include "CfgEventhandlers.hpp" #include "CfgWorlds.hpp" #include "RscTitles.hpp" +#include "CfgVehicles.hpp" +#include "ACE_Settings.hpp" \ No newline at end of file diff --git a/addons/weather/functions/fnc_initModuleSettings.sqf b/addons/weather/functions/fnc_initModuleSettings.sqf new file mode 100644 index 00000000000..29bfb7e16d2 --- /dev/null +++ b/addons/weather/functions/fnc_initModuleSettings.sqf @@ -0,0 +1,34 @@ +/* + * Author: Glowbal, Ruthberg + * Module for adjusting the wind deflection settings + * + * Arguments: + * 0: The module logic + * 1: units + * 2: activated + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic", "_units", "_activated"]; +_logic = _this select 0; +_units = _this select 1; +_activated = _this select 2; + +if !(_activated) exitWith {}; + +// Control server side weather propagation +[_logic, QGVAR(enableServerController), "enableServerController"] call EFUNC(common,readSettingFromModule); + +// Overrides the default weather (editor, mission settings) with ACE weather (map based) +[_logic, QGVAR(useACEWeather), "useACEWeather"] call EFUNC(common,readSettingFromModule); + +// Control client side weather effects +[_logic, QGVAR(syncRain), "syncRain"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(syncWind), "syncWind"] call EFUNC(common,readSettingFromModule); // Wind, Gusts, Waves +[_logic, QGVAR(syncMisc), "syncMisc"] call EFUNC(common,readSettingFromModule); // Lightnings, Rainbow, Fog diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index a9ceca38157..d5878fd1aa4 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -1,7 +1,7 @@ /* - * Author: ACE2 Team, esteldunedain, ruthberg + * Author: Ruthberg * - * Calculate the wind and rain evolution on the server. Broadcasts the current and next values to the clients + * Gather weather parameters and broadcast them to the clients * * Argument: * None @@ -13,95 +13,21 @@ if (!GVAR(enableServerController)) exitWith {}; -private ["_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; - -// Rain simulation -if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { - - GVAR(rain_next_period) = ceil((1 + (random 10)) / GVAR(overcast_multiplier)); - GVAR(rain_period_count) = 0; - - _lastRain = GVAR(current_rain); - - if (overcast >= 0.7) then { - _rainOverCast = (overcast - 0.7) / 0.3; - if (GVAR(current_rain) == 0) then { - // Initialize rain with a random strength depending on the current overcast value - GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; - }; - - GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * GVAR(overcast_multiplier)) / 8) * GVAR(rain_current_range); - GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; - - GVAR(rain_current_range) = -1 + (random 2); - } else { - _rainOverCast = 1; - - GVAR(current_rain) = 0; - }; - - _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); - - ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; - TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); - - GVAR(rain_period_start_time) = time; - publicVariable "ACE_RAIN_PARAMS"; -}; - -// Wind simulation -if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { - - GVAR(wind_next_period) = ceil((2 + (random 5)) / GVAR(overcast_multiplier)); - GVAR(wind_period_count) = 0; - - _windDirectionVariance = (90 - (random 180)) * (overcast ^ 2); - _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; - _windDirectionChange = _windDirection - GVAR(current_wind_direction); - if (_windDirectionChange > 180) then { - _windDirectionChange = _windDirectionChange - 360; +if (GVAR(useACEWeather)) then { + // Use location based real world weather data + [] call FUNC(updateAceWeather); +} else { + // Simply replicate the server weather on the clients + if (GVAR(syncRain)) then { + ACE_RAIN_PARAMS = [rain, rain, GVAR(serverUpdateInterval)]; + publicVariable "ACE_RAIN_PARAMS"; }; - if (_windDirectionChange < -180) then { - _windDirectionChange = 360 + _windDirectionChange; + if (GVAR(syncWind)) then { + ACE_WIND_PARAMS = [wind call CBA_fnc_vectDir, 0, wind, 0, GVAR(serverUpdateInterval)]; + publicVariable "ACE_WIND_PARAMS"; }; - - _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); - _windMinDiff = GVAR(min_wind_speed) - GVAR(mean_wind_speed); - - _ratioMax = (random 1) ^ 2; - _ratioMin = (random 1) ^ 2; - - _windSpeed = GVAR(current_wind_speed); - _windSpeedChange = 0; - if ((random 1) < (0.3 max overcast)) then { - _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; - _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + if (GVAR(syncMisc)) then { + ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; + publicVariable "ACE_MISC_PARAMS"; }; - - _transitionTime = GVAR(wind_next_period) * GVAR(serverUpdateInterval); - - TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_transitionTime); - - ACE_WIND_PARAMS = [GVAR(current_wind_direction), - _windDirectionChange, - GVAR(current_wind_speed), - _windSpeedChange, - _transitionTime]; - - GVAR(current_wind_direction) = _windDirection; - GVAR(current_wind_speed) = _windSpeed; - - GVAR(wind_period_start_time) = time; - publicVariable "ACE_WIND_PARAMS"; }; - - -if (GVAR(syncMisc)) then { - ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; - publicVariable "ACE_MISC_PARAMS"; -}; - -GVAR(rain_period_count) = GVAR(rain_period_count) + 1; -GVAR(wind_period_count) = GVAR(wind_period_count) + 1; - -GVAR(overcast_multiplier) = 1 max (2* overcast) min 2; // 0 (@ overcast 0), 2 (@ overcast 1) \ No newline at end of file diff --git a/addons/weather/functions/fnc_updateAceWeather.sqf b/addons/weather/functions/fnc_updateAceWeather.sqf new file mode 100644 index 00000000000..8ed0bb0d109 --- /dev/null +++ b/addons/weather/functions/fnc_updateAceWeather.sqf @@ -0,0 +1,105 @@ +/* + * Author: ACE2 Team, esteldunedain, ruthberg + * + * Updates the wind and rain evolution on the server. Broadcasts the current and next values to the clients + * + * Argument: + * None + * + * Return value: + * None + */ +#include "script_component.hpp" + +private ["_overcastMultiplier", "_lastRain", "_rainOverCast", "_transitionTime", "_windDirectionVariance", "_windSpeed", "_windSpeedChange", "_windMaxDiff", "_windMinDiff", "_windDirection", "_windDirectionChange", "_ratioMin", "_ratioMax"]; + +_overcastMultiplier = 1 max (2* overcast) min 2; // 0 (@ overcast 0), 2 (@ overcast 1) + +// Rain simulation +if (GVAR(syncRain) && GVAR(rain_period_count) > GVAR(rain_next_period)) then { + + GVAR(rain_next_period) = ceil((1 + (random 10)) / _overcastMultiplier); + GVAR(rain_period_count) = 0; + + _lastRain = GVAR(current_rain); + + if (overcast >= 0.7) then { + _rainOverCast = (overcast - 0.7) / 0.3; + if (GVAR(current_rain) == 0) then { + // Initialize rain with a random strength depending on the current overcast value + GVAR(current_rain) = 0.25 + (random 0.25) + (random 0.5) * _rainOverCast; + }; + + GVAR(current_rain) = GVAR(current_rain) + GVAR(current_rain) * ((_rainOverCast * _overcastMultiplier) / 8) * GVAR(rain_current_range); + GVAR(current_rain) = 0.01 max GVAR(current_rain) min 1; + + GVAR(rain_current_range) = -1 + (random 2); + } else { + _rainOverCast = 1; + + GVAR(current_rain) = 0; + }; + + _transitionTime = 1 + (_rainOverCast * 5) + (random (_rainOverCast * 20)); + + ACE_RAIN_PARAMS = [_lastRain, GVAR(current_rain), _transitionTime]; + TRACE_4("",_lastRain,_rainOverCast,_transitionTime,overcast); + + GVAR(rain_period_start_time) = time; + publicVariable "ACE_RAIN_PARAMS"; +}; + +// Wind simulation +if (GVAR(syncWind) && GVAR(wind_period_count) > GVAR(wind_next_period)) then { + + GVAR(wind_next_period) = ceil((2 + (random 5)) / _overcastMultiplier); + GVAR(wind_period_count) = 0; + + _windDirectionVariance = (90 - (random 180)) * (overcast ^ 2); + _windDirection = (360 + GVAR(wind_direction_reference) + _windDirectionVariance) % 360; + _windDirectionChange = _windDirection - GVAR(current_wind_direction); + if (_windDirectionChange > 180) then { + _windDirectionChange = _windDirectionChange - 360; + }; + if (_windDirectionChange < -180) then { + _windDirectionChange = 360 + _windDirectionChange; + }; + + _windMaxDiff = GVAR(mean_wind_speed) - GVAR(max_wind_speed); + _windMinDiff = GVAR(min_wind_speed) - GVAR(mean_wind_speed); + + _ratioMax = (random 1) ^ 2; + _ratioMin = (random 1) ^ 2; + + _windSpeed = GVAR(current_wind_speed); + _windSpeedChange = 0; + if ((random 1) < (0.3 max overcast)) then { + _windSpeed = GVAR(mean_wind_speed) + _windMaxDiff * _ratioMax + _windMinDiff * _ratioMin; + _windSpeedChange = _windSpeed - GVAR(current_wind_speed); + }; + + _transitionTime = GVAR(wind_next_period) * GVAR(serverUpdateInterval); + + TRACE_5("dirCur/dirNew/spdCur/spdNew/period",GVAR(current_wind_direction),_windDirection,GVAR(current_wind_speed),_windSpeed,_transitionTime); + + ACE_WIND_PARAMS = [GVAR(current_wind_direction), + _windDirectionChange, + GVAR(current_wind_speed), + _windSpeedChange, + _transitionTime]; + + GVAR(current_wind_direction) = _windDirection; + GVAR(current_wind_speed) = _windSpeed; + + GVAR(wind_period_start_time) = time; + publicVariable "ACE_WIND_PARAMS"; +}; + + +if (GVAR(syncMisc)) then { + ACE_MISC_PARAMS = [lightnings, rainbow, fogParams, GVAR(temperatureShift), GVAR(badWeatherShift), GVAR(humidityShift)]; + publicVariable "ACE_MISC_PARAMS"; +}; + +GVAR(rain_period_count) = GVAR(rain_period_count) + 1; +GVAR(wind_period_count) = GVAR(wind_period_count) + 1; \ No newline at end of file From 04d3a31b5bda2348408dd455ecd07eaf1f7bc32c Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 12:34:21 +0200 Subject: [PATCH 263/276] Fixed a typo --- addons/weather/functions/fnc_serverController.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf index d5878fd1aa4..2cbdeb581e3 100644 --- a/addons/weather/functions/fnc_serverController.sqf +++ b/addons/weather/functions/fnc_serverController.sqf @@ -23,7 +23,7 @@ if (GVAR(useACEWeather)) then { publicVariable "ACE_RAIN_PARAMS"; }; if (GVAR(syncWind)) then { - ACE_WIND_PARAMS = [wind call CBA_fnc_vectDir, 0, wind, 0, GVAR(serverUpdateInterval)]; + ACE_WIND_PARAMS = [wind call CBA_fnc_vectDir, 0, vectorMagnitude wind, 0, GVAR(serverUpdateInterval)]; publicVariable "ACE_WIND_PARAMS"; }; if (GVAR(syncMisc)) then { From 1b5756d33c3a6d09452aa08a361d47bfa7784520 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 12:47:26 +0200 Subject: [PATCH 264/276] Added weather update interval module setting --- addons/weather/ACE_Settings.hpp | 6 ++++++ addons/weather/CfgVehicles.hpp | 6 ++++++ addons/weather/XEH_postServerInit.sqf | 2 -- addons/weather/functions/fnc_initModuleSettings.sqf | 5 +++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/addons/weather/ACE_Settings.hpp b/addons/weather/ACE_Settings.hpp index 14e36983f8c..d4b5a716cf9 100644 --- a/addons/weather/ACE_Settings.hpp +++ b/addons/weather/ACE_Settings.hpp @@ -29,4 +29,10 @@ class ACE_Settings { typeName = "BOOL"; value = 1; }; + class GVAR(serverUpdateInterval) { + displayName = "Update Interval"; + description = "Defines the interval (seconds) between weather updates"; + typeName = "SCALAR"; + value = 60; + }; }; diff --git a/addons/weather/CfgVehicles.hpp b/addons/weather/CfgVehicles.hpp index 7a794bdda07..3de925e4462 100644 --- a/addons/weather/CfgVehicles.hpp +++ b/addons/weather/CfgVehicles.hpp @@ -41,6 +41,12 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 1; }; + class serverUpdateInterval { + displayName = "Update Interval"; + description = "Defines the interval (seconds) between weather updates"; + typeName = "NUMBER"; + defaultValue = 60; + }; }; }; }; diff --git a/addons/weather/XEH_postServerInit.sqf b/addons/weather/XEH_postServerInit.sqf index 9941cb20b48..5704212b792 100644 --- a/addons/weather/XEH_postServerInit.sqf +++ b/addons/weather/XEH_postServerInit.sqf @@ -9,6 +9,4 @@ GVAR(rain_current_range) = -1+(random 2); // Wind call FUNC(initWind); -GVAR(serverUpdateInterval) = 60; - [FUNC(serverController), GVAR(serverUpdateInterval)] call cba_fnc_addPerFrameHandler; diff --git a/addons/weather/functions/fnc_initModuleSettings.sqf b/addons/weather/functions/fnc_initModuleSettings.sqf index 29bfb7e16d2..eb0eaafc31c 100644 --- a/addons/weather/functions/fnc_initModuleSettings.sqf +++ b/addons/weather/functions/fnc_initModuleSettings.sqf @@ -32,3 +32,8 @@ if !(_activated) exitWith {}; [_logic, QGVAR(syncRain), "syncRain"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(syncWind), "syncWind"] call EFUNC(common,readSettingFromModule); // Wind, Gusts, Waves [_logic, QGVAR(syncMisc), "syncMisc"] call EFUNC(common,readSettingFromModule); // Lightnings, Rainbow, Fog + +// Server weather update interval +[_logic, QGVAR(serverUpdateInterval), "serverUpdateInterval"] call EFUNC(common,readSettingFromModule); + +GVAR(serverUpdateInterval) = 1 max GVAR(serverUpdateInterval) min 600; \ No newline at end of file From 4ebdd88369dcb736618cdb0eef28ba31e5cbda98 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Mon, 27 Apr 2015 13:55:50 +0200 Subject: [PATCH 265/276] Less fictional weapon names ACP-C2 -> Custom Covert II KT2002 Katiba -> KH2002 Khaybar --- addons/realisticnames/stringtable.xml | 64 +++++++++++++-------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 5e9aaa701d1..e3ebea32366 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1062,14 +1062,14 @@ МР-443 "Грач" - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 - ACP-C2 + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II + Custom Covert II FNX-45 Tactical @@ -1242,34 +1242,34 @@ MXM (черный) - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Katiba - KT2002 Катиба + KH2002 Khaybar + KH2002 Khaybar + KH2002 Khaybar + KH2002 Khaybar + KH2002 Khaybar + KH2002 Khaybar + KH2002 Khaybar + KH2002 Хайбаре - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Katiba - KT2002C Катиба + KH2002C Khaybar + KH2002C Khaybar + KH2002C Khaybar + KH2002C Khaybar + KH2002C Khaybar + KH2002C Khaybar + KH2002C Khaybar + KH2002C Хайбаре - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Katiba KGL - KT2002 Катиба KGL + KH2002 Khaybar KGL + KH2002 Khaybar KGL + KH2002 Khaybar KGL + KH2002 Khaybar KGL + KH2002 Khaybar KGL + KH2002 Khaybar KGL + KH2002 Khaybar KGL + KH2002 Хайбаре KGL F2000 (Camo) From 26bd75084d36b71558bfd5ca9487a4ad45867f10 Mon Sep 17 00:00:00 2001 From: Brisse89 Date: Mon, 27 Apr 2015 14:56:57 +0200 Subject: [PATCH 266/276] Update stringtable.xml Khaybar -> Sama --- addons/realisticnames/stringtable.xml | 48 +++++++++++++-------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index e3ebea32366..2966251ec61 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1242,34 +1242,34 @@ MXM (черный) - KH2002 Khaybar - KH2002 Khaybar - KH2002 Khaybar - KH2002 Khaybar - KH2002 Khaybar - KH2002 Khaybar - KH2002 Khaybar - KH2002 Хайбаре + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Sama + KH2002 Сама - KH2002C Khaybar - KH2002C Khaybar - KH2002C Khaybar - KH2002C Khaybar - KH2002C Khaybar - KH2002C Khaybar - KH2002C Khaybar - KH2002C Хайбаре + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Sama + KH2002C Сама - KH2002 Khaybar KGL - KH2002 Khaybar KGL - KH2002 Khaybar KGL - KH2002 Khaybar KGL - KH2002 Khaybar KGL - KH2002 Khaybar KGL - KH2002 Khaybar KGL - KH2002 Хайбаре KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Sama KGL + KH2002 Сама KGL F2000 (Camo) From 40c3bf0f819a6121f3c3706aa6d37cca53801efd Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 15:16:42 +0200 Subject: [PATCH 267/276] Added RHS AFRF/USAF compatibility config --- optionals/compat_rhs_afrf3/CfgAmmo.hpp | 125 ++++++++++++++++++ optionals/compat_rhs_afrf3/CfgWeapons.hpp | 58 ++++++++ optionals/compat_rhs_afrf3/config.cpp | 15 +++ .../compat_rhs_afrf3/script_component.hpp | 5 + optionals/compat_rhs_usf3/CfgAmmo.hpp | 97 ++++++++++++++ optionals/compat_rhs_usf3/CfgWeapons.hpp | 73 ++++++++++ optionals/compat_rhs_usf3/config.cpp | 15 +++ .../compat_rhs_usf3/script_component.hpp | 5 + 8 files changed, 393 insertions(+) create mode 100644 optionals/compat_rhs_afrf3/CfgAmmo.hpp create mode 100644 optionals/compat_rhs_afrf3/CfgWeapons.hpp create mode 100644 optionals/compat_rhs_afrf3/config.cpp create mode 100644 optionals/compat_rhs_afrf3/script_component.hpp create mode 100644 optionals/compat_rhs_usf3/CfgAmmo.hpp create mode 100644 optionals/compat_rhs_usf3/CfgWeapons.hpp create mode 100644 optionals/compat_rhs_usf3/config.cpp create mode 100644 optionals/compat_rhs_usf3/script_component.hpp diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp new file mode 100644 index 00000000000..fec7eca8056 --- /dev/null +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -0,0 +1,125 @@ + +class CfgAmmo +{ + class BulletBase; + class B_556x45_Ball; + class rhs_B_545x39_Ball: B_556x45_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=52.9; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={780, 880, 920}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_B_545x39_Ball_Tracer_Green: rhs_B_545x39_Ball + { + ACE_caliber=0.220; + ACE_bulletLength=0.85; + ACE_bulletMass=49.8; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.168}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={785, 883, 925}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_762x51_Ball; + class rhs_B_762x54_Ball: B_762x51_Ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x54_Ball_Tracer_Green: B_762x51_Ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=149; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.395}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={680, 750, 798, 800}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x54_7N1_Ball: rhs_B_762x54_Ball + { + ACE_caliber=0.312; + ACE_bulletLength=1.14; + ACE_bulletMass=152; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.4}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={700, 800, 820, 833}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_B_762x39_Ball: B_762x51_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=123; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class rhs_B_762x39_Tracer: rhs_B_762x39_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=117; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.275}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={650, 716, 750}; + ACE_barrelLengths[]={10, 16.3, 20}; + }; + class B_9x21_Ball; + class rhs_B_9x19_7N21: B_9x21_Ball + { + ACE_caliber=0.355; + ACE_bulletLength=0.610; + ACE_bulletMass=80.2; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.14}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={445, 460, 480}; + ACE_barrelLengths[]={4, 5, 9}; + }; + class rhs_B_9x18_57N181S: B_9x21_Ball + { + ACE_caliber=0.365; + ACE_bulletLength=0.610; + ACE_bulletMass=92.6; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.125}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={298, 330, 350}; + ACE_barrelLengths[]={3.8, 5, 9}; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp new file mode 100644 index 00000000000..1d9e9f23a1c --- /dev/null +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -0,0 +1,58 @@ + +class CfgWeapons +{ + class hgun_Rook40_F; + class rhs_weap_pya: hgun_Rook40_F + { + ACE_barrelTwist=10; + ACE_barrelLength=4.4; + }; + class Pistol_Base_F; + class rhs_weap_makarov_pmm: rhs_weap_pya + { + ACE_barrelTwist=9.45; + ACE_barrelLength=3.68; + }; + class rhs_weap_ak74m_Base_F; + class rhs_weap_ak74m: rhs_weap_ak74m_Base_F + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class rhs_weap_akm: rhs_weap_ak74m + { + ACE_barrelTwist=7.87; + ACE_barrelLength=16.3; + }; + class rhs_weap_aks74u: rhs_weap_aks74 + { + ACE_barrelTwist=6.3; + ACE_barrelLength=8.3; + }; + class rhs_weap_svd: rhs_weap_ak74m + { + ACE_barrelTwist=9.4; + ACE_barrelLength=24.4; + }; + class rhs_weap_svds: rhs_weap_svdp + { + ACE_barrelTwist=9.4; + ACE_barrelLength=22.2; + }; + class rhs_pkp_base; + class rhs_weap_pkp: rhs_pkp_base + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.9; + }; + class rhs_weap_pkm: rhs_weap_pkp + { + ACE_barrelTwist=9.45; + ACE_barrelLength=25.4; + }; + class rhs_weap_rpk74m: rhs_weap_pkp + { + ACE_barrelTwist=7.68; + ACE_barrelLength=23.2; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/config.cpp b/optionals/compat_rhs_afrf3/config.cpp new file mode 100644 index 00000000000..8b7f9d5ca44 --- /dev/null +++ b/optionals/compat_rhs_afrf3/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhs_c_weapons"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/compat_rhs_afrf3/script_component.hpp b/optionals/compat_rhs_afrf3/script_component.hpp new file mode 100644 index 00000000000..edf3963b1fc --- /dev/null +++ b/optionals/compat_rhs_afrf3/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT rhs_c_weapons_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp new file mode 100644 index 00000000000..bf12ca33133 --- /dev/null +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -0,0 +1,97 @@ + +class CfgAmmo +{ + class BulletBase; + class rhsusf_B_300winmag: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.489; + ACE_bulletMass=220; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.310}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={847, 867, 877}; + ACE_barrelLengths[]={20, 24, 26}; + }; + class B_556x45_Ball; + class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=62; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.307}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={780, 886, 950}; + ACE_barrelLengths[]={10, 15.5, 20}; + }; + class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball + { + ACE_caliber=0.224; + ACE_bulletLength=0.906; + ACE_bulletMass=77; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.361}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={624, 816, 832, 838}; + ACE_barrelLengths[]={7.5, 14.5, 18, 20}; + }; + class rhs_ammo_762x51_M80_Ball: BulletBase + { + ACE_caliber=0.308; + ACE_bulletLength=1.14; + ACE_bulletMass=146; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.2}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; + ACE_barrelLengths[]={10, 16, 20, 24, 26}; + }; + class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=175; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.243}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=7; + ACE_muzzleVelocities[]={750, 780, 790, 794}; + ACE_barrelLengths[]={16, 20, 24, 26}; + }; + class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball + { + ACE_caliber=0.308; + ACE_bulletLength=1.24; + ACE_bulletMass=127; + ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[]={0.377}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ICAO"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={875, 910, 930}; + ACE_barrelLengths[]={13, 16, 20}; + }; + class rhs_ammo_45ACP_MHP: BulletBase + { + ACE_caliber=0.452; + ACE_bulletLength=0.68; + ACE_bulletMass=230; + ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[]={0.195}; + ACE_velocityBoundaries[]={}; + ACE_standardAtmosphere="ASM"; + ACE_dragModel=1; + ACE_muzzleVelocities[]={230, 250, 285}; + ACE_barrelLengths[]={4, 5, 9}; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp new file mode 100644 index 00000000000..c6b4d086531 --- /dev/null +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -0,0 +1,73 @@ + +class CfgWeapons +{ + class Pistol_Base_F; + class Rifle_Base_F; + class srifle_EBR_F; + class rhs_weap_XM2010_Base_F: Rifle_Base_F + { + ACE_barrelTwist=10; + ACE_barrelLength=24; + }; + class arifle_MX_Base_F; + class rhs_weap_m4_Base: arifle_MX_Base_F + { + ACE_barrelTwist=7; + ACE_barrelLength=14.5; + }; + class rhs_weap_mk18: rhs_weap_m4a1 + { + ACE_barrelTwist=7; + ACE_barrelLength=10.3; + }; + class rhs_weap_m16a4: rhs_weap_m4_Base + { + ACE_barrelTwist=7; + ACE_barrelLength=20; + }; + class rhs_M249_base; + class rhs_weap_m249_pip: rhs_M249_base + { + ACE_barrelTwist=7; + ACE_barrelLength=16.3; + }; + class weap_m240_base; + class rhs_weap_m240B: weap_m240_base + { + ACE_barrelTwist=12; + ACE_barrelLength=24.8; + }; + class rhs_weap_m14ebrri: srifle_EBR_F + { + ACE_barrelTwist=12; + ACE_barrelLength=22; + }; + class rhs_weap_sr25: rhs_weap_m14ebrri + { + ACE_barrelTwist=11.25; + ACE_barrelLength=24; + }; + class rhs_weap_sr25_ec: rhs_weap_sr25 + { + ACE_barrelTwist=11.25; + ACE_barrelLength=20; + }; + class rhs_weap_M590_5RD: Rifle_Base_F + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=18.5; + }; + class rhs_weap_M590_8RD: rhs_weap_M590_5RD + { + ACE_barrelTwist=0; + ACE_twistDirection=0; + ACE_barrelLength=20; + }; + class hgun_ACPC2_F; + class rhsusf_weap_m1911a1: hgun_ACPC2_F + { + ACE_barrelTwist=16; + ACE_barrelLength=5; + }; +}; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/config.cpp b/optionals/compat_rhs_usf3/config.cpp new file mode 100644 index 00000000000..bc4d2646975 --- /dev/null +++ b/optionals/compat_rhs_usf3/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhsusf_c_weapons"}; + author[]={"Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" +#include "CfgWeapons.hpp" diff --git a/optionals/compat_rhs_usf3/script_component.hpp b/optionals/compat_rhs_usf3/script_component.hpp new file mode 100644 index 00000000000..c0a5bbf1f43 --- /dev/null +++ b/optionals/compat_rhs_usf3/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT rhsusf_c_weapons_comp + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" From e6e87651346ccd3468172d250e3c059282ab14ca Mon Sep 17 00:00:00 2001 From: Dimas Date: Mon, 27 Apr 2015 15:27:51 +0200 Subject: [PATCH 268/276] Update AUTHORS.txt Added myself --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index dc8fb271301..17ae9dd7c03 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -84,3 +84,4 @@ Asgar Serran Kavinsky Coren OnkelDisMaster +Dimaslg From 44932e4fec78b9e480f4997636328084d5852728 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 15:46:49 +0200 Subject: [PATCH 269/276] Added missing base classes --- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 2 ++ optionals/compat_rhs_usf3/CfgWeapons.hpp | 1 + 2 files changed, 3 insertions(+) diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 1d9e9f23a1c..ea10b518d71 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -24,6 +24,7 @@ class CfgWeapons ACE_barrelTwist=7.87; ACE_barrelLength=16.3; }; + class rhs_weap_aks74; class rhs_weap_aks74u: rhs_weap_aks74 { ACE_barrelTwist=6.3; @@ -34,6 +35,7 @@ class CfgWeapons ACE_barrelTwist=9.4; ACE_barrelLength=24.4; }; + class rhs_weap_svdp; class rhs_weap_svds: rhs_weap_svdp { ACE_barrelTwist=9.4; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index c6b4d086531..ab1ae0029a6 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -15,6 +15,7 @@ class CfgWeapons ACE_barrelTwist=7; ACE_barrelLength=14.5; }; + class rhs_weap_m4a1; class rhs_weap_mk18: rhs_weap_m4a1 { ACE_barrelTwist=7; From 0f4a95fddd9274455159bae11f3e80ccd9f5b015 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 15:48:53 +0200 Subject: [PATCH 270/276] Replaced TABs with Spaces --- optionals/compat_rhs_afrf3/CfgAmmo.hpp | 62 ++++++++-------- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 68 +++++++++--------- optionals/compat_rhs_usf3/CfgAmmo.hpp | 46 ++++++------ optionals/compat_rhs_usf3/CfgWeapons.hpp | 86 +++++++++++------------ 4 files changed, 131 insertions(+), 131 deletions(-) diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp index fec7eca8056..323634f02ca 100644 --- a/optionals/compat_rhs_afrf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -1,10 +1,10 @@ class CfgAmmo { - class BulletBase; - class B_556x45_Ball; - class rhs_B_545x39_Ball: B_556x45_Ball - { + class BulletBase; + class B_556x45_Ball; + class rhs_B_545x39_Ball: B_556x45_Ball + { ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=52.9; @@ -15,9 +15,9 @@ class CfgAmmo ACE_dragModel=7; ACE_muzzleVelocities[]={780, 880, 920}; ACE_barrelLengths[]={10, 16.3, 20}; - }; - class rhs_B_545x39_Ball_Tracer_Green: rhs_B_545x39_Ball - { + }; + class rhs_B_545x39_Ball_Tracer_Green: rhs_B_545x39_Ball + { ACE_caliber=0.220; ACE_bulletLength=0.85; ACE_bulletMass=49.8; @@ -28,10 +28,10 @@ class CfgAmmo ACE_dragModel=7; ACE_muzzleVelocities[]={785, 883, 925}; ACE_barrelLengths[]={10, 16.3, 20}; - }; - class B_762x51_Ball; - class rhs_B_762x54_Ball: B_762x51_Ball - { + }; + class B_762x51_Ball; + class rhs_B_762x54_Ball: B_762x51_Ball + { ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=152; @@ -42,9 +42,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={700, 800, 820, 833}; ACE_barrelLengths[]={16, 20, 24, 26}; - }; - class rhs_B_762x54_Ball_Tracer_Green: B_762x51_Ball - { + }; + class rhs_B_762x54_Ball_Tracer_Green: B_762x51_Ball + { ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=149; @@ -55,9 +55,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={680, 750, 798, 800}; ACE_barrelLengths[]={16, 20, 24, 26}; - }; - class rhs_B_762x54_7N1_Ball: rhs_B_762x54_Ball - { + }; + class rhs_B_762x54_7N1_Ball: rhs_B_762x54_Ball + { ACE_caliber=0.312; ACE_bulletLength=1.14; ACE_bulletMass=152; @@ -68,9 +68,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={700, 800, 820, 833}; ACE_barrelLengths[]={16, 20, 24, 26}; - }; - class rhs_B_762x39_Ball: B_762x51_Ball - { + }; + class rhs_B_762x39_Ball: B_762x51_Ball + { ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=123; @@ -81,9 +81,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={650, 716, 750}; ACE_barrelLengths[]={10, 16.3, 20}; - }; - class rhs_B_762x39_Tracer: rhs_B_762x39_Ball - { + }; + class rhs_B_762x39_Tracer: rhs_B_762x39_Ball + { ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=117; @@ -94,10 +94,10 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={650, 716, 750}; ACE_barrelLengths[]={10, 16.3, 20}; - }; - class B_9x21_Ball; - class rhs_B_9x19_7N21: B_9x21_Ball - { + }; + class B_9x21_Ball; + class rhs_B_9x19_7N21: B_9x21_Ball + { ACE_caliber=0.355; ACE_bulletLength=0.610; ACE_bulletMass=80.2; @@ -108,9 +108,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={445, 460, 480}; ACE_barrelLengths[]={4, 5, 9}; - }; - class rhs_B_9x18_57N181S: B_9x21_Ball - { + }; + class rhs_B_9x18_57N181S: B_9x21_Ball + { ACE_caliber=0.365; ACE_bulletLength=0.610; ACE_bulletMass=92.6; @@ -121,5 +121,5 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={298, 330, 350}; ACE_barrelLengths[]={3.8, 5, 9}; - }; + }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index ea10b518d71..880b9f791f1 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -1,60 +1,60 @@ class CfgWeapons { - class hgun_Rook40_F; - class rhs_weap_pya: hgun_Rook40_F - { + class hgun_Rook40_F; + class rhs_weap_pya: hgun_Rook40_F + { ACE_barrelTwist=10; ACE_barrelLength=4.4; - }; - class Pistol_Base_F; - class rhs_weap_makarov_pmm: rhs_weap_pya - { + }; + class Pistol_Base_F; + class rhs_weap_makarov_pmm: rhs_weap_pya + { ACE_barrelTwist=9.45; ACE_barrelLength=3.68; - }; - class rhs_weap_ak74m_Base_F; - class rhs_weap_ak74m: rhs_weap_ak74m_Base_F - { + }; + class rhs_weap_ak74m_Base_F; + class rhs_weap_ak74m: rhs_weap_ak74m_Base_F + { ACE_barrelTwist=7.87; ACE_barrelLength=16.3; - }; - class rhs_weap_akm: rhs_weap_ak74m - { + }; + class rhs_weap_akm: rhs_weap_ak74m + { ACE_barrelTwist=7.87; ACE_barrelLength=16.3; - }; + }; class rhs_weap_aks74; - class rhs_weap_aks74u: rhs_weap_aks74 - { + class rhs_weap_aks74u: rhs_weap_aks74 + { ACE_barrelTwist=6.3; ACE_barrelLength=8.3; - }; - class rhs_weap_svd: rhs_weap_ak74m - { + }; + class rhs_weap_svd: rhs_weap_ak74m + { ACE_barrelTwist=9.4; ACE_barrelLength=24.4; - }; + }; class rhs_weap_svdp; - class rhs_weap_svds: rhs_weap_svdp - { + class rhs_weap_svds: rhs_weap_svdp + { ACE_barrelTwist=9.4; ACE_barrelLength=22.2; - }; - class rhs_pkp_base; - class rhs_weap_pkp: rhs_pkp_base - { + }; + class rhs_pkp_base; + class rhs_weap_pkp: rhs_pkp_base + { ACE_barrelTwist=9.45; ACE_barrelLength=25.9; - }; - class rhs_weap_pkm: rhs_weap_pkp - { + }; + class rhs_weap_pkm: rhs_weap_pkp + { ACE_barrelTwist=9.45; ACE_barrelLength=25.4; - }; - class rhs_weap_rpk74m: rhs_weap_pkp - { + }; + class rhs_weap_rpk74m: rhs_weap_pkp + { ACE_barrelTwist=7.68; ACE_barrelLength=23.2; - }; + }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index bf12ca33133..68a8c8f7fdb 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -1,9 +1,9 @@ class CfgAmmo { - class BulletBase; - class rhsusf_B_300winmag: BulletBase - { + class BulletBase; + class rhsusf_B_300winmag: BulletBase + { ACE_caliber=0.308; ACE_bulletLength=1.489; ACE_bulletMass=220; @@ -14,10 +14,10 @@ class CfgAmmo ACE_dragModel=7; ACE_muzzleVelocities[]={847, 867, 877}; ACE_barrelLengths[]={20, 24, 26}; - }; - class B_556x45_Ball; - class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball - { + }; + class B_556x45_Ball; + class rhs_ammo_556x45_Mk318_Ball: B_556x45_Ball + { ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=62; @@ -28,9 +28,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={780, 886, 950}; ACE_barrelLengths[]={10, 15.5, 20}; - }; - class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball - { + }; + class rhs_ammo_556x45_Mk262_Ball: B_556x45_Ball + { ACE_caliber=0.224; ACE_bulletLength=0.906; ACE_bulletMass=77; @@ -41,9 +41,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={624, 816, 832, 838}; ACE_barrelLengths[]={7.5, 14.5, 18, 20}; - }; - class rhs_ammo_762x51_M80_Ball: BulletBase - { + }; + class rhs_ammo_762x51_M80_Ball: BulletBase + { ACE_caliber=0.308; ACE_bulletLength=1.14; ACE_bulletMass=146; @@ -54,9 +54,9 @@ class CfgAmmo ACE_dragModel=7; ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; ACE_barrelLengths[]={10, 16, 20, 24, 26}; - }; - class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball - { + }; + class rhs_ammo_762x51_M118_Special_Ball: rhs_ammo_762x51_M80_Ball + { ACE_caliber=0.308; ACE_bulletLength=1.24; ACE_bulletMass=175; @@ -67,9 +67,9 @@ class CfgAmmo ACE_dragModel=7; ACE_muzzleVelocities[]={750, 780, 790, 794}; ACE_barrelLengths[]={16, 20, 24, 26}; - }; - class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball - { + }; + class rhs_ammo_762x51_M993_Ball: rhs_ammo_762x51_M80_Ball + { ACE_caliber=0.308; ACE_bulletLength=1.24; ACE_bulletMass=127; @@ -80,9 +80,9 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={875, 910, 930}; ACE_barrelLengths[]={13, 16, 20}; - }; - class rhs_ammo_45ACP_MHP: BulletBase - { + }; + class rhs_ammo_45ACP_MHP: BulletBase + { ACE_caliber=0.452; ACE_bulletLength=0.68; ACE_bulletMass=230; @@ -93,5 +93,5 @@ class CfgAmmo ACE_dragModel=1; ACE_muzzleVelocities[]={230, 250, 285}; ACE_barrelLengths[]={4, 5, 9}; - }; + }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index ab1ae0029a6..054cfe16dfd 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -1,74 +1,74 @@ class CfgWeapons { - class Pistol_Base_F; - class Rifle_Base_F; - class srifle_EBR_F; - class rhs_weap_XM2010_Base_F: Rifle_Base_F - { + class Pistol_Base_F; + class Rifle_Base_F; + class srifle_EBR_F; + class rhs_weap_XM2010_Base_F: Rifle_Base_F + { ACE_barrelTwist=10; ACE_barrelLength=24; - }; - class arifle_MX_Base_F; - class rhs_weap_m4_Base: arifle_MX_Base_F - { + }; + class arifle_MX_Base_F; + class rhs_weap_m4_Base: arifle_MX_Base_F + { ACE_barrelTwist=7; ACE_barrelLength=14.5; - }; + }; class rhs_weap_m4a1; - class rhs_weap_mk18: rhs_weap_m4a1 - { + class rhs_weap_mk18: rhs_weap_m4a1 + { ACE_barrelTwist=7; ACE_barrelLength=10.3; - }; - class rhs_weap_m16a4: rhs_weap_m4_Base - { + }; + class rhs_weap_m16a4: rhs_weap_m4_Base + { ACE_barrelTwist=7; ACE_barrelLength=20; - }; - class rhs_M249_base; - class rhs_weap_m249_pip: rhs_M249_base - { + }; + class rhs_M249_base; + class rhs_weap_m249_pip: rhs_M249_base + { ACE_barrelTwist=7; ACE_barrelLength=16.3; - }; - class weap_m240_base; - class rhs_weap_m240B: weap_m240_base - { + }; + class weap_m240_base; + class rhs_weap_m240B: weap_m240_base + { ACE_barrelTwist=12; ACE_barrelLength=24.8; - }; - class rhs_weap_m14ebrri: srifle_EBR_F - { + }; + class rhs_weap_m14ebrri: srifle_EBR_F + { ACE_barrelTwist=12; ACE_barrelLength=22; - }; - class rhs_weap_sr25: rhs_weap_m14ebrri - { + }; + class rhs_weap_sr25: rhs_weap_m14ebrri + { ACE_barrelTwist=11.25; ACE_barrelLength=24; - }; - class rhs_weap_sr25_ec: rhs_weap_sr25 - { + }; + class rhs_weap_sr25_ec: rhs_weap_sr25 + { ACE_barrelTwist=11.25; ACE_barrelLength=20; - }; - class rhs_weap_M590_5RD: Rifle_Base_F - { + }; + class rhs_weap_M590_5RD: Rifle_Base_F + { ACE_barrelTwist=0; ACE_twistDirection=0; ACE_barrelLength=18.5; - }; - class rhs_weap_M590_8RD: rhs_weap_M590_5RD - { + }; + class rhs_weap_M590_8RD: rhs_weap_M590_5RD + { ACE_barrelTwist=0; ACE_twistDirection=0; ACE_barrelLength=20; - }; - class hgun_ACPC2_F; - class rhsusf_weap_m1911a1: hgun_ACPC2_F - { + }; + class hgun_ACPC2_F; + class rhsusf_weap_m1911a1: hgun_ACPC2_F + { ACE_barrelTwist=16; ACE_barrelLength=5; - }; + }; }; \ No newline at end of file From e8dec708bcebc0d185eea4b811d12b47fd9e21c7 Mon Sep 17 00:00:00 2001 From: Josuan Albin Date: Mon, 27 Apr 2015 16:18:28 +0200 Subject: [PATCH 271/276] Some french entries and a german duplicate Added some french entries and removed a german duplicate --- addons/interact_menu/stringtable.xml | 6 +++++- addons/overheating/stringtable.xml | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index 1335432f288..48ee00f4751 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -75,18 +75,22 @@ Interaction - Text Max Interakcja - Tekst max + Interaction -Texte Max Interaction - Text Min Interakcja - Tekst min + Interaction - Texte Min Interaction - Shadow Max Interakcja - Cień max + Interaction - Ombre Max Interaction - Shadow Min Interakcja - Cień min + Interaction - Ombre Min
-
+
\ No newline at end of file diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 865b7a82428..557bd6c9156 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -138,7 +138,6 @@ Vérifier la température Fegyverhő ellenőrzése Проверить температуру оружия - Waffentemperatur prüfen
Checking temperature ... From e4f6a7b2fc601e75ad26bce70f2bde98c7df44a7 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 17:35:03 +0200 Subject: [PATCH 272/276] Added scope configs to the RHS compatibility modules --- optionals/compat_rhs_afrf3/CfgWeapons.hpp | 7 +++++++ optionals/compat_rhs_usf3/CfgWeapons.hpp | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 880b9f791f1..49573b164af 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -57,4 +57,11 @@ class CfgWeapons ACE_barrelTwist=7.68; ACE_barrelLength=23.2; }; + + class rhs_acc_sniper_base; + class rhs_acc_pso1m2: rhs_acc_sniper_base { + ACE_ScopeAdjust_Vertical[] = { 0, 0 }; + ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_Increment = 0.5; + }; }; \ No newline at end of file diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 054cfe16dfd..a9791cd6b89 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -71,4 +71,16 @@ class CfgWeapons ACE_barrelTwist=16; ACE_barrelLength=5; }; + + class rhsusf_acc_sniper_base; + class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + }; + class rhsusf_acc_LEUPOLDMK4_2: rhsusf_acc_sniper_base { + ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_Increment = 0.1; + }; }; \ No newline at end of file From fa6a2566e3d415e28852c947dd07ee80e174a493 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 17:48:06 +0200 Subject: [PATCH 273/276] Fixed a syntax error --- addons/atragmx/RscTitles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/atragmx/RscTitles.hpp b/addons/atragmx/RscTitles.hpp index 76f06744dc0..4ae08c20aa2 100644 --- a/addons/atragmx/RscTitles.hpp +++ b/addons/atragmx/RscTitles.hpp @@ -760,7 +760,7 @@ class ATragMX_Display { y=0.265*safezoneH+safezoneY+0.35; strings[]={"Height","Width"}; values[]={1,0}; - onToolBoxSelChanged="GVAR(rangeAssistUseTargetHeight)=((_this select 1)==0)"; + onToolBoxSelChanged=QUOTE(GVAR(rangeAssistUseTargetHeight) = ((_this select 1) == 0)); }; class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD { idc=7003; From 59aba3fb34e33ed5b47fede1d3e4a3f6fb2489a5 Mon Sep 17 00:00:00 2001 From: ruPaladin Date: Mon, 27 Apr 2015 19:33:22 +0300 Subject: [PATCH 274/276] Update stringtable.xml --- addons/medical/stringtable.xml | 68 +++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index e9300161872..ec6b3aa3747 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -4,10 +4,12 @@ INJURIES VERLETZUNGEN + ТРАВМЫ No injuries on this bodypart ... Körperteil nicht verletzt ... + Данная часть тела не повреждена ... Litter Simulation Detail @@ -367,6 +369,7 @@ No entries on this triage card. Keine Einträge auf der Triagekarte + Нет записей. Tourniquet @@ -393,18 +396,22 @@ Diagnose Diagnose + Диагностика Diagnosing ... Diagnostizieren ... + Диагностика ... CPR HLW + Сердечно-легочная реанимация Performing CPR ... HLW durchführen ... + Сердечно-легочная реанимация ... Give Blood IV (1000ml) @@ -1076,10 +1083,12 @@ Personal Aid Kit for in field stitching or advanced treatment W znacznym stopniu poprawia stan pacjenta + Полевая аптчека для продвинутого лечения и зашивания ран Use Personal Aid Kit Verbandpäckchen benutzen + Использовать аптечку Surgical Kit @@ -1114,6 +1123,7 @@ Use Surgical Kit Operationsset benutzen + Использовать хирургический набор Bodybag @@ -1168,6 +1178,7 @@ %1 checked Blood Pressure: %2 %1 kontrollierte Blutdruck: %2 + %1 проверил артериальное давление: %2 You checked %1 @@ -1242,18 +1253,22 @@ Low Niedrig + Низкое Normal Normal + Нормальное High Hoch + Высокое No Blood Pressure Kein Blutdruck + Артериальное давление отсутствует Pulse @@ -1288,18 +1303,22 @@ %1 checked Heart Rate: %2 %1 kontrollierte Herzfrequenz: %2 + %1 проверил пульс: %2 Weak Schwach + Слабый Normal Normal + Нормальный Strong Stark + Сильный You find a Heart Rate of %2 @@ -1403,26 +1422,32 @@ Patient %1<br/>is %2.<br/>%3.<br/>%4 + Пациент %1<br/>%2.<br/>%3.<br/>%4 alive + жив dead + мертв He's lost some blood + Есть кровопотеря He hasn't lost blood + Нет кровопотери He is in pain + Испытывает боль He is not in pain + Не испытывает боли - Bandaged Bandé @@ -1754,142 +1779,167 @@ Scrape Kratzer + Ссадина Minor Scrape Kleiner Kratzer + Малая ссадина Medium Scrape Mittlerer Kratzer + Средняя ссадина Large Scrape Großer Kratzer + Большая ссадина - Avulsion Avulsion + Рваная рана Minor Avulsion Kleine Avulsion + Малая рваная рана Medium Avulsion Mittlere Avulsion + Средняя рваная рана Large Avulsion Große Avulsion + Большая рваная рана - Bruise Prellung + Ушиб Minor Bruise Kleine Prellung + Малый ушиб Medium Bruise Mittlere Prellung + Средний ушиб Large Bruise Große Prellung + Большой ушиб - Crushed tissue Quetschverletzung + Компресионная травма Minor crushed tissue Kleine Quetschverletzung + Малая компрессионная травма Medium crushed tissue Mittlere Quetschverletzung + Средняя компрессионная травма Large crushed tissue Große Quetschverletzung + Большая компрессионная травма - Cut Schnittwunde + Резаная рана Small Cut Kleine Schnittwunde + Малая резаная рана Medium Cut Mittlere Schnittwunde + Средняя резаная рана Large Cut Große Schnittwunde + Большая резаная рана - Tear Riss + Рваная рана Small Tear Kleiner Riss + Малая рваная рана Medium Tear Mittlerer Riss + Средняя рваная рана Large Tear Großer Riss + Большая рваная рана - Velocity Wound Ballistisches Trauma + Огнестрельная рана Smal Velocity Wound Kleines Ballistisches Trauma + Малая огнестрельная рана Medium Velocity Wound Mittleres Ballistisches Trauma + Средняя огнестрельная рана Large Velocity Wound Großes Ballistisches Trauma + Большая огнестрельная рана - Puncture Wound Stichwunde + Колотая рана Minor Puncture Wound Kleine Stichwunde + Малая колотая рана Medium Puncture Wound Mittlere Stichwunde + Средняя колотая рана Large Puncture Wound Große Stichwunde + Большая колотая рана - Broken Femur Gebrochener Oberschenkelknochen + Перелом
From ebbcb8e5e704b811d923a2fdf1644804a6d18c94 Mon Sep 17 00:00:00 2001 From: ulteq Date: Mon, 27 Apr 2015 19:28:46 +0200 Subject: [PATCH 275/276] Fixed a rarely occurring calculation error. --- extensions/advanced_ballistics/AdvancedBallistics.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 4bc9a289334..e62a564dca9 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -461,7 +461,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) if (gridHeight > position[2]) { double angle = atan((gridHeight - position[2]) / 100); - windAttenuation *= pow(cos(angle), 2); + windAttenuation *= pow(abs(cos(angle)), 2); } } } @@ -476,7 +476,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) if (heightAGL > 0 && heightAGL < 20) { double roughnessLength = calculateRoughnessLength(windSourceObstacles[0], windSourceObstacles[1]); - windAttenuation *= (log(heightAGL / roughnessLength) / log(20 / roughnessLength)); + windAttenuation *= abs(log(heightAGL / roughnessLength) / log(20 / roughnessLength)); } } From 7e0fa18ce73457313afe5c6d08d50a82c34697cb Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Mon, 27 Apr 2015 16:07:31 -0500 Subject: [PATCH 276/276] #770 - Hopefully fix LOS check on flashbang --- addons/grenades/CfgAmmo.hpp | 2 +- addons/grenades/functions/fnc_flashbangExplosionEH.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index 0f862307847..0c74f33940a 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -82,7 +82,7 @@ class CfgAmmo { SmokeShellSoundHit3[] = {"A3\Sounds_F\weapons\smokeshell\smoke_3",1.25893,1,100}; SmokeShellSoundLoop1[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop1",0.125893,1,70}; SmokeShellSoundLoop2[] = {"A3\Sounds_F\weapons\smokeshell\smoke_loop2",0.125893,1,70}; - timeToLive = 60; + timeToLive = 6; fuseDistance = 2.3; model = PATHTOF(models\ACE_m84_thrown.p3d); }; diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 67fb2ded9ca..9be24bcc47c 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -56,7 +56,7 @@ _affected = _grenade nearEntities ["CAManBase", 20]; }; } forEach [[0,0,0], [0,0,0.2], [0.1, 0.1, 0.1], [-0.1, -0.1, 0.1]]; TRACE_1("Line of sight count (out of 4)",_losCount); - if (_losCount == 0) then { + if (_losCount <= 1) then { _strength = _strength / 10; };