manual merge

This commit is contained in:
commy2 2016-12-05 20:15:16 +01:00
commit a83267b2ff
430 changed files with 8623 additions and 3210 deletions

View File

@ -11,7 +11,7 @@ stages:
- marked for cleanup
comment:
- 'Hello @{author}! There has been no activity on this ticket for over a period of {days} days. I am automatically replying to let you know we will close this ticket within 1 week due to inactivity and consider this resolved.'
- 'If you believe this in error, please reply with the requested information.'
- 'If you believe this is in error, please reply with the requested information.'
- 'Thank you. :robot:'
action:
close: false
@ -35,7 +35,7 @@ stages:
remove_label:
- marked for cleanup
remind_about_old_ticket:
days: 130
days: 160
labels:
- bug
- critical bug

View File

@ -0,0 +1,22 @@
# No issues and PRs without labels
issues=false
pr-wo-labels=false
# Issues are disabled, don't fetch them
max-issues=0
# Label filters
exclude-labels=by design,can't reproduce,duplicate,question,invalid,wontfix,translation,ignore changelog
bug-labels=conflict,bug,critical bug
enhancement-labels=enhancement,feature request,Focus Feature
# Tag is created before generating changelog for release candidates
unreleased=false
# No section labels, we only want a list of merged PRs (label separation only works for Issues)
simple-list=true
# Misc
author=false
compare-link=false
header-label=## Change Log Summary

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ texHeaders.bin
*.swo
*.biprivatekey
Thumbs.db
CHANGELOG.md

View File

@ -29,6 +29,7 @@ Walter Pearce <jaynus@gmail.com>
# CONTRIBUTORS
[BIG]Bull
11RDP-LoupVert <loupvert@11rdp.fr>
654wak654 <ozanegitmen@gmail.com>
ACCtomeek <tomeek99@gmail.com>
adam3adam <br.ada@seznam.cz>
Adanteh

View File

@ -4,7 +4,7 @@
<p align="center">
<a href="https://github.com/acemod/ACE3/releases/latest">
<img src="https://img.shields.io/badge/Version-3.8.0-blue.svg?style=flat-square" alt="ACE3 Version">
<img src="https://img.shields.io/badge/Version-3.8.2-blue.svg?style=flat-square" alt="ACE3 Version">
</a>
<a href="https://github.com/acemod/ACE3/issues">
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">

Binary file not shown.

View File

@ -69,7 +69,7 @@ class ACE_Settings {
displayName = CSTRING(simulationInterval_DisplayName);
description = CSTRING(simulationInterval_Description);
typeName = "SCALAR";
value = 0.0;
value = 0.05;
};
class GVAR(simulationRadius) {
category = CSTRING(DisplayName);

View File

@ -71,7 +71,7 @@ class CfgVehicles {
displayName = CSTRING(simulationInterval_DisplayName);
description = CSTRING(simulationInterval_Description);
typeName = "NUMBER";
defaultValue = 0.0;
defaultValue = 0.05;
};
class simulationRadius {
displayName = CSTRING(simulationRadius_DisplayName);

View File

@ -2,6 +2,8 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -42,12 +42,6 @@ if (!GVAR(simulateForEveryone) && !(local _unit)) then {
//if (!GVAR(vehicleGunnerEnabled) && !(_unit isKindOf "Man")) then { _abort = true; }; // We currently do not have firedEHs on vehicles
if (GVAR(disabledInFullAutoMode) && getNumber(configFile >> "CfgWeapons" >> _weapon >> _mode >> "autoFire") == 1) then { _abort = true; };
if (_abort || !(GVAR(extensionAvailable))) exitWith {
if (missionNamespace getVariable [QEGVAR(windDeflection,enabled), false]) then {
EGVAR(windDeflection,trackedBullets) pushBack [_projectile, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")];
};
};
// Get Weapon and Ammo Configurations
_AmmoCacheEntry = uiNamespace getVariable format[QGVAR(%1), _ammo];
if (isNil "_AmmoCacheEntry") then {
@ -86,6 +80,12 @@ if (GVAR(ammoTemperatureEnabled) || GVAR(barrelLengthInfluenceEnabled)) then {
};
};
if (_abort || !(GVAR(extensionAvailable))) exitWith {
if (missionNamespace getVariable [QEGVAR(windDeflection,enabled), false]) then {
EGVAR(windDeflection,trackedBullets) pushBack [_projectile, getNumber(configFile >> "CfgAmmo" >> _ammo >> "airFriction")];
};
};
_bulletTraceVisible = false;
if (GVAR(bulletTraceEnabled) && cameraView == "GUNNER") then {
if (currentWeapon ACE_player == binocular ACE_player) then {

View File

@ -30,10 +30,14 @@ if (!hasInterface) exitWith {};
GVAR(ppeBlackout) ppEffectCommit 0.4;
// - GVAR updating and initialization -----------------------------------------
if !(isNull ACE_player) then {
[ACE_player, objNull] call FUNC(handlePlayerChanged);
["unit", FUNC(handlePlayerChanged), true] call CBA_fnc_addPlayerEventHandler;
private _fnc_showStaminaBar = {
private _staminaBarContainer = uiNamespace getVariable [QGVAR(staminaBarContainer), controlNull];
_staminaBarContainer ctrlShow ((!visibleMap) && {(vehicle ACE_player) == ACE_player});
};
["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler;
["visibleMap", _fnc_showStaminaBar, true] call CBA_fnc_addPlayerEventHandler;
["vehicle", _fnc_showStaminaBar, true] call CBA_fnc_addPlayerEventHandler;
// - Duty factors -------------------------------------------------------------
if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then {

View File

@ -2,7 +2,9 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
//#include "initSettings.sqf"
GVAR(staminaBarWidth) = 10 * (((safezoneW / safezoneH) min 1.2) / 40);

View File

@ -22,13 +22,13 @@ private _animType = _animName select [1, 3];
GVAR(isSwimming) = false;
if (_animType in ["idl", "mov"]) then {
if (_animType in ["idl", "mov", "adj"]) then {
switch (_animName select [5, 3]) do {
case ("knl"): {
_duty = 1.5;
};
case ("pne"): {
_duty = 12;
_duty = 10;
};
default {
_duty = 1;
@ -47,9 +47,15 @@ if (_animType in ["idl", "mov"]) then {
};
} else {
// swimming and diving
if (_animType in ["swm", "ssw", "bsw", "dve", "sdv", "bdv"]) then {
_duty = 5;
GVAR(isSwimming) = true;
switch (true) do {
case (_animType in ["swm", "ssw", "bsw"]): {
_duty = 6.5;
GVAR(isSwimming) = true;
};
case (_animType in ["dve", "sdv", "bdv"]): {
_duty = 2.5;
GVAR(isSwimming) = true;
};
};
};

View File

@ -58,7 +58,15 @@ if (GVAR(ppeBlackoutLast) == 1) then {
// - Physical effects ---------------------------------------------------------
if (GVAR(isSwimming)) exitWith {
_unit setAnimSpeedCoef (1 - _fatigue / 3);
_unit setAnimSpeedCoef linearConversion [0.7, 0.9, _fatigue, 1, 0.5, true];
if ((isSprintAllowed _unit) && {_fatigue > 0.7}) then {
[_unit, "blockSprint", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);
} else {
if ((!isSprintAllowed _unit) && {_fatigue < 0.7}) then {
[_unit, "blockSprint", QUOTE(ADDON), false] call EFUNC(common,statusEffect_set);
};
};
};
if ((getAnimSpeedCoef _unit) != 1) then {
_unit setAnimSpeedCoef 1;

View File

@ -11,10 +11,13 @@
*/
#include "script_component.hpp"
params ["_newUnit", "_oldUnit"];
TRACE_2("unit changed",_newUnit,_oldUnit);
if !(isNull _oldUnit) then {
_oldUnit enableStamina true;
_oldUnit removeEventHandler ["AnimChanged", _oldUnit getVariable [QGVAR(animHandler), -1]];
_oldUnit setVariable [QGVAR(animHandler), nil];
TRACE_1("remove old",_oldUnit getVariable QGVAR(animHandler));
_oldUnit setVariable [QGVAR(ae1Reserve), GVAR(ae1Reserve)];
_oldUnit setVariable [QGVAR(ae2Reserve), GVAR(ae2Reserve)];
@ -30,6 +33,7 @@ if (_newUnit getVariable [QGVAR(animHandler), -1] == -1) then {
private _animHandler = _newUnit addEventHandler ["AnimChanged", {
GVAR(animDuty) = _this call FUNC(getAnimDuty);
}];
TRACE_1("add new",_animHandler);
_newUnit setVariable [QGVAR(animHandler), _animHandler];
};

View File

@ -11,6 +11,9 @@
#include "script_component.hpp"
if (!alive ACE_player) exitWith { // Dead people don't breath, Will also handle null (Map intros)
[FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute;
private _staminaBarContainer = uiNamespace getVariable [QGVAR(staminaBarContainer), controlNull];
_staminaBarContainer ctrlSetFade 1;
_staminaBarContainer ctrlCommit 1;
};
private _currentWork = REE;

View File

@ -11,7 +11,7 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
{
{
private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo");
GVAR(ammoMagLookup) setVariable [_ammo, _x];
if (_ammo != "") then { GVAR(ammoMagLookup) setVariable [_ammo, _x]; };
} count (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines"));
nil
} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles");

View File

@ -2,6 +2,8 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -6,126 +6,147 @@
<Russian>Улучшенный бросок гранат</Russian>
<Japanese>アドバンスド投てき</Japanese>
<Polish>Zaawansowane rzucanie</Polish>
<German>Erweitertes Wurfsystem</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Module_Description">
<English>Allows changing advanced throwing behaviour.</English>
<Russian>Позволяет настраивать поведение улучшенного броска гранат.</Russian>
<Japanese>アドバンスド投てきの挙動変更を許可します。</Japanese>
<Polish>Zezwala na zmianę zachowania zaawansowanego trybu rzucania.</Polish>
<German>Erlaubt es, das Verhalten des erweiterten Wurfsystems zu ändern.</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Enable_DisplayName">
<English>Enable Advanced Throwing</English>
<Russian>Включить улучшенный бросок</Russian>
<Japanese>アドバンスド投てきを有効化</Japanese>
<Polish>Aktywuj zaawansowane rzucanie</Polish>
<German>Aktiviere erweitertes Wurfsystem</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Enable_Description">
<English>Enables advanced throwing system.</English>
<Russian>Включает систему улучшенного броска.</Russian>
<Japanese>アドバンスド投てきシステムを有効化</Japanese>
<Polish>Aktywuje system zaawansowanego rzucania.</Polish>
<German>Aktiviert das erweiterte Wurfsystem.</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_DisplayName">
<English>Show Throw Arc</English>
<Russian>Показать траекторию броска</Russian>
<Japanese>軌道を表示</Japanese>
<Polish>Pokaż trasę lotu</Polish>
<German>Zeige Wurfbogen</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_Description">
<English>Enables visualization of the throw arc (where throwable will fly).</English>
<Russian>Включает визуализацию траектории броска (как полетит граната).</Russian>
<Japanese>投てき物の予測軌道の表示を有効化します。</Japanese>
<Polish>Wyświetla wizualizację trasy przelotu granatu.</Polish>
<German>Aktiviert die Visualisierung des Wurfbogens (wohin das Objekt geworfen werden wird).</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_DisplayName">
<English>Show Throwing Mouse Controls</English>
<Russian>Показывать управление мышью</Russian>
<Japanese>投てきのマウス操作を表示</Japanese>
<Polish>Pokaż podpowiedzi sterowania myszą</Polish>
<German>Zeige Maussteuerung beim Werfen</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_Description">
<English>Enables visual cues for mouse controls when throwable is prepared.</English>
<Russian>Включает отображение подсказок по управлению мышью, когда граната подготовлена.</Russian>
<Japanese>投てき物を投げるとき、マウス操作の説明表示を有効化します。</Japanese>
<Polish>Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku.</Polish>
<German>Aktiviert visuelle Hinweise zur Maussteuerung, wenn ein Objekt zum Werfen vorbereitet wird.</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_DisplayName">
<English>Enable Throwables Pick Up</English>
<Russian>Включить подбор гранат</Russian>
<Japanese>投てき物の拾い上げを有効化</Japanese>
<Polish>Zezwól na podnoszenie obiektów miotanych</Polish>
<German>Aktiviere Aufheben von Wurfobjekten</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_Description">
<English>Enables ability to pick up throwables from the ground.</English>
<Russian>Включает возможность подбирать гранаты с земли.</Russian>
<Japanese>地面に落ちている投てき物の拾い上げ動作を有効化します。</Japanese>
<Polish>Umożliwia podnoszenie obiektów miotanych z ziemi.</Polish>
<German>Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben.</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_DisplayName">
<English>Enable Attached Throwables Pick Up</English>
<Russian>Включить подбор прикрепленных гранат</Russian>
<Japanese>拾い上げた投てき物の取り付けを有効化</Japanese>
<Polish>Zezwól na podnoszenie przyczepionych obiektów miotanych</Polish>
<German>Aktiviere erneute Aufnahme befestigter Wurfobjekte</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_Description">
<English>Enables ability to pick up throwables from attached objects.</English>
<Russian>Включает возможность подбирать гранаты, прикрепленные к объектам.</Russian>
<Japanese>オブジェクトに取り付けられていた投てき物を拾い上げられるようにします。</Japanese>
<Polish>Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów.</Polish>
<German>Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen.</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Prepare">
<English>Prepare/Change Throwable</English>
<Russian>Подготовить/заменить гранату</Russian>
<Japanese>機能の起動/変更</Japanese>
<Polish>Przygotuj/zmień ob. miotany</Polish>
<German>Wurfobjekt vorbereiten/wechseln</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_dropModeHold">
<English>Throwable Drop Mode (Hold)</English>
<Russian>Режим броска гранаты (удерживать)</Russian>
<Japanese>投てきモード (押しっぱ)</Japanese>
<Polish>Tryb upuszczania ob. miotanego (przytrzymaj)</Polish>
<German>Wurfobjekt Fallmodus (halten)</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_DropModeToggle">
<English>Throwable Drop Mode (Toggle)</English>
<Russian>Режим броска гранаты (переключить)</Russian>
<Japanese>投てきモード (トグル)</Japanese>
<Polish>Tryb upuszczania ob. miotanego (przełącz)</Polish>
<German>Wurfobjekt Fallmodus (umschalten)</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Primed">
<English>Primed</English>
<Russian>Подготовлена</Russian>
<Japanese>起動した</Japanese>
<Polish>Odbezpieczony</Polish>
<German>Scharf gemacht</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Throw">
<English>Throw</English>
<Russian>Бросить</Russian>
<Japanese>投げる</Japanese>
<Polish>Rzuć</Polish>
<German>Werfen</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ChangeMode">
<English>(Scroll) Change Mode</English>
<Russian>(Скролл) Изменить режим</Russian>
<Japanese>(スクロール) モード変更</Japanese>
<Polish>(Kółko m.) zmień tryb</Polish>
<German>(Scrollen) Modus wechseln</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Extend">
<English>(Scroll) Extend</English>
<Russian>(Скролл) Увеличить</Russian>
<Japanese>(スクロール) 遠くに</Japanese>
<Polish>(Kółko m.) przedłuż</Polish>
<German>(Scrollen) Erweitern</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Cook">
<English>(Click) Cook</English>
<Russian>(Клик) Подготовить</Russian>
<Japanese>(クリック) 起爆</Japanese>
<Polish>(Kliknięcie) Odbezpiecz</Polish>
<German>(Klicken) Abkochen</German>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_PickUp">
<English>Pick Up</English>
<Russian>Подобрать</Russian>
<Japanese>拾い上げる</Japanese>
<Polish>Podnieś</Polish>
<German>Aufheben</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -467,7 +467,7 @@ class CfgWeapons {
};
// Scorpion EVO
class SMG_02_base_F: Rifle_Base_F {
class SMG_02_base_F: Rifle_Short_Base_F {
class Single: Mode_SemiAuto {
minRange = 50; //2;

View File

@ -2,6 +2,10 @@
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_WITH_RECT 160
#define LB_TEXTURES 0x10
class ATragMX_RscText {
idc=-1;
type=0;
@ -93,7 +97,7 @@ class ATragMX_RscToolbox {
class ATragMX_RscListBox {
idc=-1;
type=5;
style=0;
style=LB_TEXTURES;
font="TahomaB";
sizeEx=0.028;
rowHeight=0.03;
@ -113,13 +117,14 @@ class ATragMX_RscListBox {
soundSelect[]={"",0.09,1};
class ScrollBar {
color[]={1,1,1,0.6};
colorActive[]={1,1,1,1};
colorDisabled[]={1,1,1,0.3};
//thumb="\ca\ui\data\igui_scrollbar_thumb_ca.paa";
//arrowFull="\ca\ui\data\igui_arrow_top_active_ca.paa";
//arrowEmpty="\ca\ui\data\igui_arrow_top_ca.paa";
//border="\ca\ui\data\igui_border_scroll_ca.paa";
width=0.05;
color[]={0.15,0.21,0.23,0.3};
colorActive[]={0.15,0.21,0.23,0.3};
colorDisabled[]={0.15,0.21,0.23,0.3};
arrowEmpty="\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
arrowFull="\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
border="\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
thumb="\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
};
class ListScrollBar : ScrollBar {
@ -128,7 +133,6 @@ class ATragMX_RscListBox {
class ATragMX_RscListNBox: ATragMX_RscListBox {
idc=-1;
type=102;
columns[]={0.0, 0.225, 0.475, 0.7};
drawSideArrows=0;
idcLeft=-1;
idcRight=-1;
@ -350,6 +354,7 @@ class ATragMX_Display {
colorBackground[]={0.15,0.21,0.23,0.3};
colorFocused[]={0.15,0.21,0.23,0.2};
text="MV";
action=QUOTE(0 call FUNC(toggle_muzzle_velocity_data));
};
class TEXT_MUZZLE_VELOCITY_OUTPUT: TEXT_BORE_HEIGHT_OUTPUT {
idc=130;
@ -383,18 +388,18 @@ class ATragMX_Display {
y=0.265*safezoneH+safezoneY+0.320;
text="";
};
class TEXT_BAROMETRIC_PRESSURE: TEXT_AIR_FRICTION {
class TEXT_BAROMETRIC_PRESSURE: TEXT_TEMPERATURE {
idc=21;
x=0.550*safezoneW+safezoneX+0.20;
y=0.265*safezoneH+safezoneY+0.355;
text="BP";
};
class TEXT_BAROMETRIC_PRESSURE_OUTPUT: TEXT_TEMPERATURE_OUTPUT {
idc=210;
y=0.265*safezoneH+safezoneY+0.355;
};
class TEXT_RELATIVE_HUMIDITY: TEXT_AIR_FRICTION {
class TEXT_RELATIVE_HUMIDITY: TEXT_BAROMETRIC_PRESSURE {
idc=22;
x=0.550*safezoneW+safezoneX+0.20;
y=0.265*safezoneH+safezoneY+0.390;
text="RH";
};
@ -526,7 +531,7 @@ class ATragMX_Display {
};
class TEXT_ELEVATION_OUTPUT_ABSOLUTE: ATragMX_RscText {
idc=400;
style=160;
style=ST_WITH_RECT+ST_RIGHT;
sizeEx=0.025;
w=0.065;
h=0.032;
@ -606,17 +611,40 @@ class ATragMX_Display {
class TEXT_SCOPE_CLICK_NUMBER: TEXT_GUN_LIST {
idc=2001;
style=ST_CENTER;
w=0.03;
w=0.025;
x=0.550*safezoneW+safezoneX+0.27;
text="4";
action=QUOTE(call FUNC(toggle_solution_setup));
};
class TEXT_CALCULATE: TEXT_SCOPE_UNIT {
class TEXT_OPTIONS: TEXT_GUN_LIST {
idc=3000;
style=ST_RIGHT;
x=0.550*safezoneW+safezoneX+0.3;
text="Calc";
action=QUOTE(call FUNC(calculate_target_solution));
text="Options";
action=QUOTE(false call FUNC(toggle_option_menu));
};
class TEXT_OPTIONS_BACKGROUND: ATragMX_RscButton {
idc=3001;
colorBackground[]={0.15,0.21,0.23,0.2};
colorBackgroundActive[]={0.15,0.21,0.23,0.2};
colorFocused[]={0.15,0.21,0.23,0.2};
x=0.550*safezoneW+safezoneX+0.105;
y=0.265*safezoneH+safezoneY+0.17;
w=0.3;
h=0.535;
offsetPressedX=0.0;
offsetPressedY=0.0;
action=QUOTE(false call FUNC(toggle_option_menu));
};
class TEXT_OPTIONS_LIST_OUTPUT: ATragMX_RscListBox {
idc=3002;
style=0;
w=0.17;
h=0.28;
x=0.550*safezoneW+safezoneX+0.225;
y=0.265*safezoneH+safezoneY+0.355;
sizeEx=0.025;
onMouseButtonClick=QUOTE(true call FUNC(toggle_option_menu));
};
class TEXT_RANGE_CARD_SCOPE_UNIT: TEXT_GUN_PROFILE {
@ -666,6 +694,7 @@ class ATragMX_Display {
};
class TEXT_RANGE_CARD_OUTPUT: ATragMX_RscListNBox {
idc=5007;
columns[]={0.0, 0.225, 0.475, 0.7};
idcLeft=50061;
idcRight=50062;
w=0.285;
@ -674,16 +703,17 @@ class ATragMX_Display {
y=0.265*safezoneH+safezoneY+0.27;
};
class TEXT_GUN_LIST_OUTPUT: ATragMX_RscListBox {
class TEXT_GUN_LIST_OUTPUT: ATragMX_RscListNBox {
idc=6000;
columns[]={-0.05};
w=0.16;
h=0.45;
x=0.550*safezoneW+safezoneX+0.11;
y=0.265*safezoneH+safezoneY+0.24;
sizeEx=0.025;
sizeEx=0.018;
colorSelectBackground[]={0.15,0.21,0.23,0.3};
colorSelectBackground2[]={0.15,0.21,0.23,0.3};
onMouseButtonDblClick=QUOTE(true call FUNC(toggle_gun_list));
onLBDblClick=QUOTE(true call FUNC(toggle_gun_list));
};
class TEXT_GUN_LIST_COLUMN_CAPTION: TEXT_GUN_PROFILE {
idc=6001;
@ -766,8 +796,9 @@ class ATragMX_Display {
class TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE: TEXT_TARGET_RANGE_ASSIST_MEASUREMENT_METHOD {
idc=7003;
style=ST_RIGHT;
x=0.550*safezoneW+safezoneX+0.10;
x=0.550*safezoneW+safezoneX+0.092;
y=0.265*safezoneH+safezoneY+0.4;
w=0.128;
text="Target Size";
};
class TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE {
@ -874,22 +905,22 @@ class ATragMX_Display {
class TEXT_TARGET_SPEED_ASSIST_TARGET_RANGE: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE {
idc=8000;
x=0.550*safezoneW+safezoneX+0.13;
x=0.550*safezoneW+safezoneX+0.12;
text="Target Range";
};
class TEXT_TARGET_SPEED_ASSIST_NUM_TICKS: TEXT_TARGET_RANGE_ASSIST_IMAGE_SIZE {
idc=8001;
x=0.550*safezoneW+safezoneX+0.13;
x=0.550*safezoneW+safezoneX+0.12;
text="Num Ticks";
};
class TEXT_TARGET_SPEED_ASSIST_TIME: TEXT_TARGET_RANGE_ASSIST_ANGLE {
idc=8002;
x=0.550*safezoneW+safezoneX+0.13;
x=0.550*safezoneW+safezoneX+0.12;
text="Time (secs)";
};
class TEXT_TARGET_SPEED_ASSIST_TARGET_ESTIMATED_SPEED: TEXT_TARGET_RANGE_ASSIST_ESTIMATED_RANGE {
idc=8003;
x=0.550*safezoneW+safezoneX+0.13;
x=0.550*safezoneW+safezoneX+0.12;
text="Est Speed";
};
class TEXT_TARGET_SPEED_ASSIST_TARGET_RANGE_INPUT: TEXT_TARGET_RANGE_ASSIST_TARGET_SIZE_INPUT {
@ -1040,6 +1071,8 @@ class ATragMX_Display {
x=0.550*safezoneW+safezoneX+0.12;
y=0.265*safezoneH+safezoneY+0.28;
text="";
onKeyDown=QUOTE(call FUNC(trim_gun_name));
onKeyUp=QUOTE(call FUNC(trim_gun_name));
};
class TEXT_ADD_NEW_GUN_OK: ATragMX_RscButton {
idc=11002;
@ -1468,5 +1501,343 @@ class ATragMX_Display {
y=0.265*safezoneH+safezoneY+0.55;
action=QUOTE(0 call FUNC(toggle_solution_setup));
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE: TEXT_BORE_HEIGHT {
idc=16000;
w=0.22;
y=0.265*safezoneH+safezoneY+0.25;
sizeEx=0.022;
text="Temperature";
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE {
idc=16001;
x=0.550*safezoneW+safezoneX+0.215;
sizeEx=0.022;
text="Muzzle velocity";
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1: ATragMX_RscEdit {
idc=160021;
w=0.082;
h=0.035;
x=0.550*safezoneW+safezoneX+0.128;
y=0.265*safezoneH+safezoneY+0.29;
text="0";
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_2: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160022;
y=0.265*safezoneH+safezoneY+0.325;
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_3: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160023;
y=0.265*safezoneH+safezoneY+0.360;
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_4: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160024;
y=0.265*safezoneH+safezoneY+0.395;
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_5: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160025;
y=0.265*safezoneH+safezoneY+0.430;
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_6: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160026;
y=0.265*safezoneH+safezoneY+0.465;
};
class TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_7: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160027;
y=0.265*safezoneH+safezoneY+0.500;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_1: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_1 {
idc=160031;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_2: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_2 {
idc=160032;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_3: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_3 {
idc=160033;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_4: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_4 {
idc=160034;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_5: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_5 {
idc=160035;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_6: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_6 {
idc=160036;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_MUZZLE_VELOCITY_INPUT_7: TEXT_MUZZLE_VELOCITY_DATA_TEMPERATURE_INPUT_7 {
idc=160037;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_MUZZLE_VELOCITY_DATA_CLEAR: TEXT_TARGET_DATA_NEXT {
idc=16004;
style=ST_CENTER;
h=0.035;
y=0.265*safezoneH+safezoneY+0.3625;
text="Clear";
action=QUOTE(call FUNC(clear_muzzle_velocity_data));
};
class TEXT_MUZZLE_VELOCITY_DATA_QUESTIONMARK: TEXT_MUZZLE_VELOCITY_DATA_CLEAR {
idc=16005;
y=0.265*safezoneH+safezoneY+0.430;
text="?";
action="";
};
class TEXT_MUZZLE_VELOCITY_DATA_DONE: TEXT_TARGET_DATA_DONE {
idc=16006;
action=QUOTE(1 call FUNC(toggle_muzzle_velocity_data));
};
class TEXT_MUZZLE_VELOCITY_DATA_CANCEL: TEXT_TARGET_DATA_CANCEL {
idc=16007;
action=QUOTE(0 call FUNC(toggle_muzzle_velocity_data));
};
class TEXT_MUZZLE_VELOCITY_DATA_PREV: TEXT_TARGET_DATA_PREV {
idc=16008;
};
class TEXT_MUZZLE_VELOCITY_DATA_NEXT: TEXT_TARGET_DATA_NEXT {
idc=16009;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE: TEXT_BORE_HEIGHT {
idc=17000;
w=0.22;
x=0.550*safezoneW+safezoneX+0.15;
y=0.265*safezoneH+safezoneY+0.25;
sizeEx=0.022;
text="Meters";
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE {
idc=17001;
x=0.550*safezoneW+safezoneX+0.235;
sizeEx=0.022;
text="BC-Coef";
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1: ATragMX_RscEdit {
idc=170021;
w=0.082;
h=0.035;
x=0.550*safezoneW+safezoneX+0.128;
y=0.265*safezoneH+safezoneY+0.29;
text="0";
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_2: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170022;
y=0.265*safezoneH+safezoneY+0.325;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_3: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170023;
y=0.265*safezoneH+safezoneY+0.360;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_4: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170024;
y=0.265*safezoneH+safezoneY+0.395;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_5: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170025;
y=0.265*safezoneH+safezoneY+0.430;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_6: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170026;
y=0.265*safezoneH+safezoneY+0.465;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_7: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170027;
y=0.265*safezoneH+safezoneY+0.500;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_1: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_1 {
idc=170031;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_2: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_2 {
idc=170032;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_3: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_3 {
idc=170033;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_4: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_4 {
idc=170034;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_5: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_5 {
idc=170035;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_6: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_6 {
idc=170036;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_C1_BALLISTIC_COEFFICIENT_INPUT_7: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DISTANCE_INPUT_7 {
idc=170037;
x=0.550*safezoneW+safezoneX+0.225;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_QUESTIONMARK: TEXT_TARGET_DATA_NEXT {
idc=17004;
style=ST_CENTER;
w=0.04;
h=0.035;
y=0.265*safezoneH+safezoneY+0.35;
text="?";
action="";
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_CLEAR: TEXT_C1_BALLISTIC_COEFFICIENT_DATA_QUESTIONMARK {
idc=17005;
w=0.07;
y=0.265*safezoneH+safezoneY+0.4175;
text="Clear";
action=QUOTE(call FUNC(clear_c1_ballistic_coefficient_data));
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_DONE: TEXT_TARGET_DATA_DONE {
idc=17006;
action=QUOTE(1 call FUNC(toggle_c1_ballistic_coefficient_data));
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_CANCEL: TEXT_TARGET_DATA_CANCEL {
idc=17007;
action=QUOTE(0 call FUNC(toggle_c1_ballistic_coefficient_data));
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_PREV: TEXT_TARGET_DATA_PREV {
idc=17008;
};
class TEXT_C1_BALLISTIC_COEFFICIENT_DATA_NEXT: TEXT_TARGET_DATA_NEXT {
idc=17009;
};
class TEXT_TRUING_DROP_ZERO_RANGE: ATragMX_RscText {
idc=18000;
style=ST_LEFT;
x=0.550*safezoneW+safezoneX+0.115;
y=0.265*safezoneH+safezoneY+0.220;
w=0.135;
h=0.03;
sizeEx=0.025;
text="ZR=100meters";
};
class TEXT_TRUING_DROP_DROP_UNIT: TEXT_TRUING_DROP_ZERO_RANGE {
idc=18001;
style=ST_LEFT;
x=0.550*safezoneW+safezoneX+0.25;
text="Drop=mil";
};
class TEXT_TRUING_DROP_TARGET_RANGE: TEXT_TRUING_DROP_ZERO_RANGE {
idc=18002;
y=0.265*safezoneH+safezoneY+0.35;
sizeEx=0.027;
text="Target Range";
};
class TEXT_TRUING_DROP_DROP: TEXT_TRUING_DROP_TARGET_RANGE {
idc=18003;
w=0.07;
y=0.265*safezoneH+safezoneY+0.40;
text="Drop";
};
class TEXT_TRUING_DROP_MUZZLE_VELOCITY: TEXT_TRUING_DROP_DROP {
idc=18004;
y=0.265*safezoneH+safezoneY+0.50;
text="MV";
};
class TEXT_TRUING_DROP_C1_BALLISTIC_COEFFICIENT: TEXT_TRUING_DROP_DROP {
idc=18005;
y=0.265*safezoneH+safezoneY+0.55;
text="C1";
};
class TEXT_TRUING_DROP_DROP_OUTPUT: ATragMX_RscEdit {
idc=18006;
style=ST_WITH_RECT+ST_RIGHT;
colorBackground[]={0.15,0.21,0.23,0.3};
colorDisabled[]={0,0,0,1};
w=0.06;
y=0.265*safezoneH+safezoneY+0.40;
x=0.550*safezoneW+safezoneX+0.17;
text="";
};
class TEXT_TRUING_DROP_MUZZLE_VELOCITY_OUTPUT: TEXT_TRUING_DROP_DROP_OUTPUT {
idc=18007;
y=0.265*safezoneH+safezoneY+0.50;
text="";
};
class TEXT_TRUING_DROP_C1_BALLISTIC_COEFFICIENT_OUTPUT: TEXT_TRUING_DROP_DROP_OUTPUT {
idc=18008;
y=0.265*safezoneH+safezoneY+0.55;
text="";
};
class TEXT_TRUING_DROP_SUPER: TEXT_TARGET_A {
idc=18009;
w=0.06;
x=0.550*safezoneW+safezoneX+0.25;
y=0.265*safezoneH+safezoneY+0.30;
text="SUPER";
action=QUOTE(GVAR(truingDropMode) = 0; call FUNC(update_truing_drop_selection));
};
class TEXT_TRUING_DROP_SUB: TEXT_TRUING_DROP_SUPER {
idc=18010;
x=0.550*safezoneW+safezoneX+0.32;
text="SUB";
action=QUOTE(GVAR(truingDropMode) = 1; call FUNC(update_truing_drop_selection));
};
class TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT: ATragMX_RscEdit {
idc=18011;
style=ST_WITH_RECT+ST_RIGHT;
colorDisabled[]={0,0,0,0.6};
w=0.06;
x=0.550*safezoneW+safezoneX+0.25;
y=0.265*safezoneH+safezoneY+0.35;
};
class TEXT_TRUING_DROP_TARGET_RANGE_SUB_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT {
idc=18012;
x=0.550*safezoneW+safezoneX+0.32;
};
class TEXT_TRUING_DROP_DROP_SUPER_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT {
idc=18013;
y=0.265*safezoneH+safezoneY+0.40;
};
class TEXT_TRUING_DROP_DROP_SUB_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUB_INPUT {
idc=18014;
y=0.265*safezoneH+safezoneY+0.40;
};
class TEXT_TRUING_DROP_CALC: TEXT_GUN_LIST {
idc=18015;
style=ST_CENTER;
w=0.11;
x=0.550*safezoneW+safezoneX+0.26;
y=0.265*safezoneH+safezoneY+0.45;
text="Calc";
action=QUOTE(true call FUNC(calculate_truing_drop));
};
class TEXT_TRUING_DROP_MV_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUPER_INPUT {
idc=18016;
y=0.265*safezoneH+safezoneY+0.50;
};
class TEXT_TRUING_DROP_C1_BALLISTIC_COEFFICIENT_INPUT: TEXT_TRUING_DROP_TARGET_RANGE_SUB_INPUT {
idc=18017;
y=0.265*safezoneH+safezoneY+0.55;
};
class TEXT_TRUING_DROP_ACCEPT: TEXT_GUN_LIST {
idc=18018;
w=0.085;
h=0.04;
x=0.550*safezoneW+safezoneX+0.125;
y=0.265*safezoneH+safezoneY+0.60;
text="Accept";
action=QUOTE(1 call FUNC(toggle_truing_drop));
};
class TEXT_TRUING_DROP_CANCEL: TEXT_TRUING_DROP_ACCEPT {
idc=18019;
x=0.550*safezoneW+safezoneX+0.210;
text="Cancel";
action=QUOTE(0 call FUNC(toggle_truing_drop));
};
class TEXT_TRUING_DROP_RESTORE: TEXT_TRUING_DROP_CANCEL {
idc=18020;
x=0.550*safezoneW+safezoneX+0.29525;
text="Restore";
action=QUOTE(true call FUNC(restore_truing_drop));
};
};
};

View File

@ -1,13 +1,17 @@
PREP(add_new_gun);
PREP(calculate_distance_at_velocity);
PREP(calculate_range_card);
PREP(calculate_solution);
PREP(calculate_target_range_assist);
PREP(calculate_target_solution);
PREP(calculate_target_speed_assist);
PREP(calculate_truing_drop);
PREP(can_show);
PREP(change_gun);
PREP(change_target_slot);
PREP(clear_c1_ballistic_coefficient_data);
PREP(clear_muzzle_velocity_data);
PREP(clear_user_data);
PREP(create_dialog);
PREP(cycle_gun_list);
@ -18,17 +22,28 @@ PREP(cycle_scope_unit);
PREP(cycle_target_size_units);
PREP(cycle_target_speed_direction);
PREP(delete_gun);
PREP(evaluate_option_menu_input);
PREP(init);
PREP(insert_c1_ballistic_coefficient_data);
PREP(insert_muzzle_velocity_data);
PREP(parse_input);
PREP(read_gun_list_entries_from_config);
PREP(recalculate_c1_ballistic_coefficient);
PREP(recalculate_muzzle_velocity);
PREP(reset_relative_click_memory);
PREP(restore_atmo_default);
PREP(restore_truing_drop);
PREP(restore_user_data);
PREP(save_gun);
PREP(shift_c1_ballistic_coefficient_data);
PREP(shift_muzzle_velocity_data);
PREP(show_add_new_gun);
PREP(show_atmo_env_data);
PREP(show_c1_ballistic_coefficient_data);
PREP(show_gun_ammo_data);
PREP(show_gun_list);
PREP(show_main_page);
PREP(show_muzzle_velocity_data);
PREP(show_range_card);
PREP(show_range_card_setup);
PREP(show_solution_setup);
@ -36,24 +51,36 @@ PREP(show_target_data);
PREP(show_target_range_assist);
PREP(show_target_speed_assist);
PREP(show_target_speed_assist_timer);
PREP(show_truing_drop);
PREP(sord);
PREP(store_gun_list);
PREP(store_user_data);
PREP(target_speed_assist_timer);
PREP(toggle_atmo_env_data);
PREP(toggle_c1_ballistic_coefficient_data);
PREP(toggle_coriolis);
PREP(toggle_gun_ammo_data);
PREP(toggle_gun_list);
PREP(toggle_muzzle_velocity_data);
PREP(toggle_option_menu);
PREP(toggle_range_card);
PREP(toggle_range_card_setup);
PREP(toggle_solution_setup);
PREP(toggle_target_data);
PREP(toggle_target_range_assist);
PREP(toggle_target_speed_assist);
PREP(toggle_truing_drop);
PREP(trim_gun_name);
PREP(true_c1_ballistic_coefficient);
PREP(true_muzzle_velocity);
PREP(update_atmosphere);
PREP(update_atmo_env_data);
PREP(update_atmo_selection);
PREP(update_c1_ballistic_coefficient_data);
PREP(update_gun);
PREP(update_gun_ammo_data);
PREP(update_inclination_angle);
PREP(update_muzzle_velocity_data);
PREP(update_range_card);
PREP(update_relative_click_memory);
PREP(update_result);
@ -62,6 +89,8 @@ PREP(update_solution_setup);
PREP(update_target);
PREP(update_target_data);
PREP(update_target_selection);
PREP(update_truing_drop_data);
PREP(update_truing_drop_selection);
PREP(update_unit_selection);
PREP(update_zero_range);
PREP(on_close_dialog);

View File

@ -5,44 +5,52 @@
if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then {
GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList";
} else {
// Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model
GVAR(gunList) = [["12.7x108mm" , 820, 100, 0.0657485, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" ],
// Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation, Persistent
GVAR(gunList) = [["12.7x108mm" , 812, 100, 0.0666557, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["12.7x99mm AMAX" , 860, 100, 0.0611565, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" ],
["12.7x99mm" , 900, 100, 0.0582418, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" ],
["12.7x99mm API" , 900, 100, 0.0582418, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.99, 12.9, 38.10, 0.670, 1, "ASM" ],
["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["12.7x99mm" , 892, 100, 0.0588284, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["12.7x54mm" , 300, 100, 0.3394630, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" ],
["12.7x54mm" , 299, 100, 0.3406920, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".408 Chey Tac" , 910, 100, 0.0569400, -0.00038944, 3.81, 0, 2, 10, 120, 0, 0, 26.57, 10.4, 33.02, 0.970, 1, "ASM" ],
[".50 Beowulf" , 562, 100, 0.1262000, -0.00202645, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["9.3×64mm" , 870, 100, 0.0619295, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" ],
[".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00063655, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00044958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".338LM 250gr" , 880, 100, 0.0598469, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.322, 7, "ICAO"],
[".338LM 300gr" , 800, 100, 0.0677343, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.381, 7, "ICAO"],
[".338LM API526" , 895, 100, 0.0588865, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.560, 1, "ASM" ],
["9.3×64mm" , 862, 100, 0.0627652, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".300WM Mk248 Mod0" , 900, 100, 0.0584442, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.268, 7, "ICAO"],
[".300WM Mk248 Mod1" , 867, 100, 0.0610738, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.310, 7, "ICAO"],
[".300WM Berger OTM" , 853, 100, 0.0622179, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.368, 7, "ICAO"],
[".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.760, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x54mmR" , 800, 100, 0.0691878, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO"],
[".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
[".300WM Berger OTM" , 792, 100, 0.0686968, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x51mm M80" , 810, 100, 0.0679374, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.200, 7, "ICAO"],
["7.62x51mm M118LR" , 780, 100, 0.0710319, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
["7.62x51mm Mk316" , 780, 100, 0.0710319, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.243, 7, "ICAO"],
["7.62x51mm Mk319" , 910, 100, 0.0584524, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO"],
["7.62x51mm M993" , 930, 100, 0.0570316, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO"],
["7.62x51mm Subsonic", 320, 100, 0.3059680, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.235, 7, "ICAO"],
["7.62x54mmR" , 812, 100, 0.0678441, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["6.5x39mm" , 800, 100, 0.0683482, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.263, 7, "ICAO"],
["6.5x47mm Lapua" , 800, 100, 0.0682221, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.290, 7, "ICAO"],
["6.5mm Creedmor" , 840, 100, 0.0636501, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.317, 7, "ICAO"],
["7.62x51mm M80" , 802, 100, 0.0690229, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x51mm M993" , 912, 100, 0.0585007, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.56x45mm M855" , 870, 100, 0.0626386, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.151, 7, "ASM" ],
["5.56x45mm Mk262" , 820, 100, 0.0671481, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" ],
["5.56x45mm Mk318" , 880, 100, 0.0615937, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" ],
["5.56x45mm M995" , 869, 100, 0.0626713, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" ]];
["7.62x39mm" , 708, 100, 0.0846559, -0.00151621, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["6.5x39mm" , 766, 100, 0.0725986, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00117956, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.56x45mm M855" , 862, 100, 0.0635456, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.56x45mm M995" , 861, 100, 0.0635355, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true],
["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00116278, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]];
[] call FUNC(clear_user_data);
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
@ -50,5 +58,6 @@ if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) ==
[] call FUNC(init);
[] call FUNC(restore_user_data);
[] call FUNC(read_gun_list_entries_from_config);
[QEGVAR(vector,rangefinderData), {_this call FUNC(sord)}] call CBA_fnc_addEventHandler;

View File

@ -2,6 +2,8 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -6,7 +6,7 @@ class CfgPatches {
units[] = {"ACE_Item_ATragMX"};
weapons[] = {"ACE_ATragMX"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ACE_common", "ACE_weather"};
requiredAddons[] = {"ACE_Advanced_Ballistics", "ACE_common", "ACE_weather"};
author = ECSTRING(common,ACETeam);
authors[] = {"Ruthberg"};
url = ECSTRING(main,URL);

View File

@ -15,13 +15,16 @@
*/
#include "script_component.hpp"
call FUNC(trim_gun_name);
private _gunName = ctrlText 11001;
if (_gunName != "") then {
private _gunProfileEntry = [_gunName, 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.393, 1, "ICAO"],
private _gunProfileEntry = [_gunName, 810, 100, 0.0679, -0.0010350, 3.81, 0, 2, 10, 120, 0, 0, 9.525, 7.82, 25.40, 0.393, 1, "ICAO", [[-15,0],[0,0],[10,0],[15,0],[25,0],[30,0],[35,0]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true];
GVAR(gunList) = GVAR(gunList) + [_gunProfileEntry];
lbAdd [6000, _gunProfileEntry select 0];
lbAdd [6000, _gunName];
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
call FUNC(store_gun_list);
};

View File

@ -0,0 +1,37 @@
/*
* Author: Ruthberg
* Calculates distance at which the bullet velocity drops below the threshold velocity
*
* Arguments:
* theshold velocity <number>
*
* Return Value:
* distance <number
*
* Example:
* 403 call ace_atragmx_fnc_calculate_distance_at_velocity
*
* Public: No
*/
#include "script_component.hpp"
#define __DELTA_T 0.001
if (isNil QGVAR(targetSolutionInput)) exitWith { 0 };
private _thresholdVelocity = _this;
private _velocity = GVAR(targetSolutionInput) select 4;
if (_velocity <= _thresholdVelocity) exitWith { 0 };
private _distance = 0;
while {_velocity > _thresholdVelocity} do {
private _bc = GVAR(targetSolutionInput) select 14;
private _dragModel = GVAR(targetSolutionInput) select 15;
private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _velocity]));
_distance = _distance + _velocity * __DELTA_T;
_velocity = _velocity - (_drag * __DELTA_T);
};
_distance

View File

@ -15,61 +15,16 @@
*/
#include "script_component.hpp"
[] call FUNC(parse_input);
GVAR(rangeCardData) = [];
GVAR(workingMemory) params ["",
"_muzzleVelocity", "",
"_scopeBaseAngle",
"_airFriction",
"_boreHeight", "", "", "", "", "", "",
"_bulletMass",
"_bulletDiameter",
"_barrelTwist",
"_bc",
"_dragModel",
"_atmosphereModel"
];
private _twistDirection = 0;
if (_barrelTwist > 0) then {
_twistDirection = 1;
} else {
if (_barrelTwist < 0) then {
_twistDirection = -1;
};
};
_barrelTwist = abs _barrelTwist;
private _altitude = GVAR(altitude);
private _temperature = GVAR(temperature);
private _barometricPressure = GVAR(barometricPressure);
private _relativeHumidity = GVAR(relativeHumidity);
if (!GVAR(atmosphereModeTBH)) then {
_barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
_relativeHumidity = 50;
};
private _bulletLength = 45.72;
private _stabilityFactor = 1.5;
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
_stabilityFactor = [_bulletDiameter, _bulletLength, _bulletMass, _barrelTwist * 10, _muzzleVelocity, _temperature, _barometricPressure] call EFUNC(advanced_ballistics,calculateStabilityFactor);
};
};
private _latitude = GVAR(latitude) select GVAR(currentTarget);
private _directionOfFire = GVAR(directionOfFire) select GVAR(currentTarget);
private _windSpeed1 = (GVAR(windSpeed1) select GVAR(currentTarget));
private _windSpeed2 = (GVAR(windSpeed2) select GVAR(currentTarget));
private _windDirection = (GVAR(windDirection) select GVAR(currentTarget));
private _inclinationAngle = (GVAR(inclinationAngle) select GVAR(currentTarget));
private _targetSpeed = (GVAR(targetSpeed) select GVAR(currentTarget));
private _targetRange = GVAR(rangeCardEndRange);
if (GVAR(currentUnit) == 1) then {
_targetRange = _targetRange / 1.0936133;
};
GVAR(rangeCardData) = [];
private _solutionInput = +GVAR(targetSolutionInput);
_solutionInput set [ 8, round(_solutionInput select 4)];
_solutionInput set [13, _targetRange];
_solutionInput set [17, true];
private _result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000,
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, true, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution);
private _result = _solutionInput call FUNC(calculate_solution);

View File

@ -51,7 +51,10 @@ params [
];
_windSpeed params ["_windSpeed1", "_windSpeed2"];
private ["_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"];
private ["_tx", "_tz", "_lastBulletPos", "_bulletPos", "_bulletVelocity", "_bulletAccel", "_bulletSpeed", "_gravity", "_deltaT"];
_tx = 0;
_tz = 0;
_lastBulletPos = [0, 0, 0];
_bulletPos = [0, 0, 0];
_bulletVelocity = [0, 0, 0];
_bulletAccel = [0, 0, 0];
@ -74,9 +77,10 @@ _horizontalDeflection = 0;
_spinDrift = 0;
_spinDeflection = 0;
private ["_n", "_range", "_rangeFactor"];
private ["_n", "_range", "_trueRange", "_rangeFactor"];
_n = 0;
_range = 0;
_trueRange = 0;
_rangeFactor = 1;
if (_storeRangeCardData) then {
if (GVAR(currentUnit) == 1) then {
@ -90,22 +94,15 @@ _wind1 = [cos(270 - _windDirection * 30) * _windSpeed1, sin(270 - _windDirection
_wind2 = [cos(270 - _windDirection * 30) * _windSpeed2, sin(270 - _windDirection * 30) * _windSpeed2, 0];
_windDrift = 0;
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
_bc = [_bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel] call EFUNC(advanced_ballistics,calculateAtmosphericCorrection);
_bc = parseNumber(("ace_advanced_ballistics" callExtension format["atmosphericCorrection:%1:%2:%3:%4:%5", _bc, _temperature, _barometricPressure, _relativeHumidity, _atmosphereModel]));
};
private ["_speedTotal", "_stepsTotal", "_speedAverage"];
_speedTotal = 0;
_stepsTotal = 0;
_speedAverage = 0;
private ["_eoetvoesMultiplier"];
_eoetvoesMultiplier = 0;
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
_eoetvoesMultiplier = 2 * (0.0000729 * _muzzleVelocity / -9.80665) * cos(_latitude) * sin(_directionOfFire);
};
_TOF = 0;
_bulletPos set [0, 0];
_bulletPos set [1, 0];
_bulletPos set [2, -(_boreHeight / 100)];
@ -117,19 +114,11 @@ _bulletVelocity set [2, Sin(_scopeBaseAngle) * _muzzleVelocity];
while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
_bulletSpeed = vectorMagnitude _bulletVelocity;
_speedTotal = _speedTotal + _bulletSpeed;
_stepsTotal = _stepsTotal + 1;
_speedAverage = (_speedTotal / _stepsTotal);
_trueVelocity = _bulletVelocity vectorDiff _wind1;
_trueSpeed = vectorMagnitude _trueVelocity;
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
private _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))
};
private _drag = parseNumber(("ace_advanced_ballistics" callExtension format["retard:%1:%2:%3", _dragModel, _bc, _trueSpeed]));
_bulletAccel = (vectorNormalized _trueVelocity) vectorMultiply (-1 * _drag);
} else {
_bulletAccel = _trueVelocity vectorMultiply (_trueSpeed * _airFriction);
@ -137,29 +126,32 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
_bulletAccel = _bulletAccel vectorAdd _gravity;
_lastBulletPos = _bulletPos;
_bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply (_deltaT * 0.5));
_bulletVelocity = _bulletVelocity vectorAdd (_bulletAccel vectorMultiply _deltaT);
_bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply _deltaT);
_bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply (_deltaT * 0.5));
_TOF = _TOF + _deltaT;
if (_storeRangeCardData) then {
_range = GVAR(rangeCardStartRange) + _n * GVAR(rangeCardIncrement);
if ((_bulletPos select 1) * _rangeFactor >= _range && _range <= GVAR(rangeCardEndRange)) then {
if ((_bulletPos select 1) > 0) then {
_elevation = - atan((_bulletPos select 2) / (_bulletPos select 1));
_windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1));
_windDrift = (_wind2 select 0) * (_TOF - (_range / _rangeFactor) / _muzzleVelocity);
_windage2 = - atan(_windDrift / (_bulletPos select 1));
};
if (_range != 0) then {
_lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _range);
_trueRange = _range / _rangeFactor;
if (_trueRange != 0) then {
_tx = (_lastBulletPos select 0) + (_trueRange - (_lastBulletPos select 1)) * ((_bulletPos select 0) - (_lastBulletPos select 0)) / ((_bulletPos select 1) - (_lastBulletPos select 1));
_tz = (_lastBulletPos select 2) + (_trueRange - (_lastBulletPos select 1)) * ((_bulletPos select 2) - (_lastBulletPos select 2)) / ((_bulletPos select 1) - (_lastBulletPos select 1));
_elevation = - atan(_tz / _trueRange);
_windage1 = - atan(_tx / _trueRange);
_windDrift = (_wind2 select 0) * (_TOF - _trueRange / _muzzleVelocity);
_windage2 = - atan(_windDrift / _trueRange);
_lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _trueRange);
};
_kineticEnergy = 0.5 * (_bulletMass / 1000 * (_bulletSpeed ^ 2));
_kineticEnergy = _kineticEnergy * 0.737562149;
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
// Coriolis
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
_horizontalDeflection = 0.0000729 * (_bulletPos select 1) * _TOF * sin(_latitude);
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
_windage1 = _windage1 + _horizontalCoriolis;
_windage2 = _windage2 + _horizontalCoriolis;
@ -180,14 +172,13 @@ while {_TOF < 15 && (_bulletPos select 1) < _targetRange} do {
};
};
if ((_bulletPos select 1) > 0) then {
_elevation = - atan((_bulletPos select 2) / (_bulletPos select 1));
_windage1 = - atan((_bulletPos select 0) / (_bulletPos select 1));
_windDrift = (_wind2 select 0) * (_TOF - _targetRange / _muzzleVelocity);
_windage2 = - atan(_windDrift / (_bulletPos select 1));
};
if (_targetRange != 0) then {
_tx = (_lastBulletPos select 0) + (_targetRange - (_lastBulletPos select 1)) * ((_bulletPos select 0) - (_lastBulletPos select 0)) / ((_bulletPos select 1) - (_lastBulletPos select 1));
_tz = (_lastBulletPos select 2) + (_targetRange - (_lastBulletPos select 1)) * ((_bulletPos select 2) - (_lastBulletPos select 2)) / ((_bulletPos select 1) - (_lastBulletPos select 1));
_elevation = - atan(_tz / _targetRange);
_windage1 = - atan(_tx / _targetRange);
_windDrift = (_wind2 select 0) * (_TOF - _targetRange / _muzzleVelocity);
_windage2 = - atan(_windDrift / _targetRange);
_lead = (_targetSpeed * _TOF) / (Tan(3.38 / 60) * _targetRange);
};
@ -196,7 +187,7 @@ _kineticEnergy = _kineticEnergy * 0.737562149;
if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) && (_bulletPos select 1) > 0) then {
// Coriolis
_horizontalDeflection = 0.0000729 * ((_bulletPos select 1) ^ 2) * sin(_latitude) / _speedAverage;
_horizontalDeflection = 0.0000729 * (_bulletPos select 1) * _TOF * sin(_latitude);
_horizontalCoriolis = - atan(_horizontalDeflection / (_bulletPos select 1));
_windage1 = _windage1 + _horizontalCoriolis;
_windage2 = _windage2 + _horizontalCoriolis;

View File

@ -16,7 +16,7 @@
#include "script_component.hpp"
private _angle = parseNumber(ctrlText 7012);
private _targetSize = parseNumber(ctrlText 7010);
private _targetSize = abs(parseNumber(ctrlText 7010));
if (GVAR(rangeAssistUseTargetHeight)) then {
_targetSize = _targetSize * cos(_angle);
};
@ -43,7 +43,7 @@ switch (GVAR(rangeAssistImageSizeUnit)) do {
_imageSize = _imageSize / 60 / 1.047;
};
};
private _estRange = parseNumber(ctrlText 7013);
private _estRange = abs(parseNumber(ctrlText 7013));
if (GVAR(currentUnit) == 1) then {
_estRange = _estRange / 1.0936133;
};
@ -52,7 +52,7 @@ switch (_this) do {
case 0: {
_targetSize = tan(_imageSize) * _estRange;
if (GVAR(rangeAssistUseTargetHeight)) then {
if (GVAR(rangeAssistUseTargetHeight) && cos(_angle) != 0) then {
_targetSize = _targetSize / cos(_angle);
};
@ -71,8 +71,10 @@ switch (_this) do {
ctrlSetText [7010, Str(Round(_targetSize * 100) / 100)];
};
case 1: {
_imageSize = atan(_targetSize / _estRange);
if (_estRange > 0) then {
_imageSize = atan(_targetSize / _estRange);
};
switch (GVAR(rangeAssistImageSizeUnit)) do {
case 0: {
_imageSize = _imageSize * 6400 / 360;
@ -88,8 +90,10 @@ switch (_this) do {
ctrlSetText [7011, Str(Round(_imageSize * 100) / 100)];
};
case 2: {
_estRange = _targetSize / tan(_imageSize);
if (tan(_imageSize) != 0) then {
_estRange = _targetSize / tan(_imageSize);
};
ctrlSetText [7013, Str(Round(_estRange))];
};
};

View File

@ -52,7 +52,7 @@ if (!GVAR(atmosphereModeTBH)) then {
};
private ["_bulletLength", "_stabilityFactor"];
_bulletLength = 45.72;
_bulletLength = 50 * _bulletMass / ((_bulletDiameter/2)^2);
_stabilityFactor = 1.5;
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
if (_bulletDiameter > 0 && _bulletLength > 0 && _bulletMass > 0 && _barrelTwist > 0) then {
@ -70,9 +70,10 @@ _inclinationAngle = GVAR(inclinationAngle) select GVAR(currentTarget);
_targetSpeed = GVAR(targetSpeed) select GVAR(currentTarget);
_targetRange = GVAR(targetRange) select GVAR(currentTarget);
private ["_result"];
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000,
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude, _directionOfFire] call FUNC(calculate_solution);
GVAR(targetSolutionInput) = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, round(_muzzleVelocity),
[_windSpeed1, _windSpeed2], _windDirection, _inclinationAngle, _targetSpeed, _targetRange, _bc, _dragModel, _atmosphereModel, false, _stabilityFactor, _twistDirection, _latitude, _directionOfFire];
private _result = GVAR(targetSolutionInput) call FUNC(calculate_solution);
GVAR(elevationOutput) set [GVAR(currentTarget), _result select 0];
GVAR(windage1Output) set [GVAR(currentTarget), (_result select 1) select 0];
@ -80,5 +81,8 @@ GVAR(windage2Output) set [GVAR(currentTarget), (_result select 1) select 1];
GVAR(leadOutput) set [GVAR(currentTarget), _result select 2];
GVAR(tofOutput) set [GVAR(currentTarget), _result select 3];
GVAR(velocityOutput) set [GVAR(currentTarget), _result select 4];
GVAR(verticalCoriolisOutput) set [GVAR(currentTarget), _result select 6];
GVAR(horizontalCoriolisOutput) set [GVAR(currentTarget), _result select 7];
GVAR(spinDriftOutput) set [GVAR(currentTarget), _result select 8];
[] call FUNC(update_result);

View File

@ -0,0 +1,107 @@
/*
* Author: Ruthberg
* Calculates the truing drop and updates the output fields
*
* Arguments:
* parse input <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_calculate_truing_drop
*
* Public: No
*/
#include "script_component.hpp"
private _parseInput = _this;
private _transonicRange = GVAR(truingDropRangeData) select 0;
private _subsonicRange = GVAR(truingDropRangeData) select 1;
private _transonicDrop = GVAR(truingDropDropData) select 1;
private _subsonicDrop = GVAR(truingDropDropData) select 2;
if (_parseInput) then {
_transonicRange = 0 max abs(parseNumber(ctrlText 18011)) min 4000;
_subsonicRange = 0 max abs(parseNumber(ctrlText 18012)) min 4000;
if (GVAR(currentUnit) != 2) then {
_transonicRange = _transonicRange * 0.9144;
_subsonicRange = _subsonicRange * 0.9144;
};
_transonicRange = Round(_transonicRange);
_subsonicRange = Round(_subsonicRange);
_subsonicRange = _transonicRange max _subsonicRange;
_transonicDrop = -100 max parseNumber(ctrlText 18013) min 100;
_subsonicDrop = -100 max parseNumber(ctrlText 18014) min 100;
private _dropUnit = GVAR(currentScopeUnit);
if (_dropUnit == 3) then {
switch (GVAR(currentScopeClickUnit)) do {
case 0: { _dropUnit = 1; };
case 1: { _dropUnit = 2; };
case 2: { _dropUnit = 0; };
};
};
switch (_dropUnit) do {
case 0: {
_transonicDrop = _transonicDrop * 3.38;
_subsonicDrop = _subsonicDrop * 3.38;
};
case 2: {
_transonicDrop = _transonicDrop / 1.047;
_subsonicDrop = _subsonicDrop / 1.047;
};
};
_transonicDrop = Round(_transonicDrop * 100) / 100;
_subsonicDrop = Round(_subsonicDrop * 100) / 100;
_subsonicDrop = _transonicDrop max _subsonicDrop;
};
if ((GVAR(truingDropDropData) select 0) == 0 || {!([_transonicRange, _subsonicRange] isEqualTo GVAR(truingDropRangeData))}) then {
if (isNil QGVAR(targetSolutionInput)) then {
call FUNC(calculate_target_solution);
};
private _solutionInput = +GVAR(targetSolutionInput);
if (_transonicRange == 0) then {
_transonicRange = Round(403 call FUNC(calculate_distance_at_velocity));
};
_solutionInput set [13, _transonicRange];
private _result1 = _solutionInput call FUNC(calculate_solution);
_transonicDrop = Round((_result1 select 0) * 100) / 100;
GVAR(truingDropRangeData) set [0, _transonicRange];
GVAR(truingDropDropData) set [1, _transonicDrop];
GVAR(truingDropReferenceDropData) set [0, _transonicDrop];
private _speedOfSound = (_solutionInput select 5) call EFUNC(weather,calculateSpeedOfSound);
if (_subsonicRange == 0) then {
_subsonicRange = _speedOfSound call FUNC(calculate_distance_at_velocity);
if (GVAR(currentUnit) == 2) then {
_subsonicRange = _subsonicRange + 200;
} else {
_subsonicRange = _subsonicRange + 200 * 1.0936133;
};
_subsonicRange = Round(_subsonicRange);
};
_solutionInput set [13, _subsonicRange];
private _result2 = _solutionInput call FUNC(calculate_solution);
_subsonicDrop = Round((_result2 select 0) * 100) / 100;
GVAR(truingDropRangeData) set [1, _subsonicRange];
GVAR(truingDropDropData) set [2, _subsonicDrop];
GVAR(truingDropReferenceDropData) set [1, _subsonicDrop];
} else {
if (_transonicDrop != GVAR(truingDropDropData) select 1 || _subsonicDrop != GVAR(truingDropDropData) select 2) then {
GVAR(truingDropDropData) set [1, _transonicDrop];
GVAR(truingDropDropData) set [2, _subsonicDrop];
if (GVAR(truingDropMode) == 0) then {
call FUNC(true_muzzle_velocity);
} else {
call FUNC(true_c1_ballistic_coefficient);
};
};
};
call FUNC(update_truing_drop_data);

View File

@ -26,6 +26,12 @@ if (_restoreMemory) then {
};
GVAR(currentGun) = _gunID;
[false, false] call FUNC(recalculate_muzzle_velocity);
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
false call FUNC(restore_truing_drop);
[false, false] call FUNC(recalculate_c1_ballistic_coefficient);
};
if (_updateDisplay) then {
lbSetCurSel [6000, GVAR(currentGun)];
};
@ -37,6 +43,8 @@ GVAR(currentScopeClickNumber) = 1 max (GVAR(workingMemory) select 8) min 10;
if (_updateDisplay) then {
[] call FUNC(update_gun);
[] call FUNC(update_gun_ammo_data);
[] call FUNC(update_muzzle_velocity_data);
[] call FUNC(update_c1_ballistic_coefficient_data);
};
GVAR(elevationOutput) set [GVAR(currentTarget), 0];
@ -45,6 +53,9 @@ GVAR(windage2Output) set [GVAR(currentTarget), 0];
GVAR(leadOutput) set [GVAR(currentTarget), 0];
GVAR(tofOutput) set [GVAR(currentTarget), 0];
GVAR(velocityOutput) set [GVAR(currentTarget), 0];
GVAR(verticalCoriolisOutput) set [GVAR(currentTarget), 0];
GVAR(horizontalCoriolisOutput) set [GVAR(currentTarget), 0];
GVAR(spinDriftOutput) set [GVAR(currentTarget), 0];
if (_updateDisplay) then {
[] call FUNC(calculate_target_solution);

View File

@ -17,9 +17,8 @@
private _target = 0 max _this min 3;
call FUNC(parse_input);
[] call FUNC(parse_input);
GVAR(currentTarget) = _target;
call FUNC(update_target_selection);
[] call FUNC(calculate_target_solution);
call FUNC(calculate_target_solution);

View File

@ -0,0 +1,21 @@
/*
* Author: Ruthberg
* Clears the c1 ballistic coefficient data fields
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_clear_c1_ballistic_coefficient_data
*
* Public: No
*/
#include "script_component.hpp"
// Distances
{ctrlSetText [_x, "0"]} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
// Ballistic Coefficients
{ctrlSetText [_x, "0"]} forEach [170031, 170032, 170033, 170034, 170035, 170036, 170037];

View File

@ -0,0 +1,21 @@
/*
* Author: Ruthberg
* Clears the muzzle velocity data fields
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_clear_muzzle_velocity_data
*
* Public: No
*/
#include "script_component.hpp"
// Temperatures
{ctrlSetText [_x, "0"]} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
// Muzzle velocities
{ctrlSetText [_x, "0"]} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];

View File

@ -28,6 +28,7 @@ profileNamespace setVariable ["ACE_ATragMX_temperature", nil];
profileNamespace setVariable ["ACE_ATragMX_barometricPressure", nil];
profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", nil];
profileNamespace setVariable ["ACE_ATragMX_showCoriolis", nil];
profileNamespace setVariable ["ACE_ATragMX_showWind2", nil];
profileNamespace setVariable ["ACE_ATragMX_latitude", nil];
profileNamespace setVariable ["ACE_ATragMX_directionOfFire", nil];

View File

@ -30,8 +30,10 @@ GVAR(showMainPage) call FUNC(show_main_page);
GVAR(showAddNewGun) call FUNC(show_add_new_gun);
GVAR(showAtmoEnvData) call FUNC(show_atmo_env_data);
GVAR(showC1BallisticCoefficientData) call FUNC(show_c1_ballistic_coefficient_data);
GVAR(showGunAmmoData) call FUNC(show_gun_ammo_data);
GVAR(showGunList) call FUNC(show_gun_list);
GVAR(showMuzzleVelocityData) call FUNC(show_muzzle_velocity_data);
GVAR(showRangeCard) call FUNC(show_range_card);
if (GVAR(showRangeCard)) then {
ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 5001);
@ -43,6 +45,7 @@ GVAR(showTargetData) call FUNC(show_target_data);
GVAR(showTargetRangeAssist) call FUNC(show_target_range_assist);
GVAR(showTargetSpeedAssist) call FUNC(show_target_speed_assist);
GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
GVAR(showTruingDrop) call FUNC(show_truing_drop);
[GVAR(currentGun), false, true] call FUNC(change_gun);
@ -50,6 +53,13 @@ GVAR(showTargetSpeedAssistTimer) call FUNC(show_target_speed_assist_timer);
lbAdd [6000, _x select 0];
} forEach GVAR(gunList);
ctrlShow [3001, false];
ctrlShow [3002, false];
{
(__dsp displayCtrl _x) ctrlEnable false;
} forEach [18006, 18007, 18008];
GVAR(active) = true;
GVAR(DialogPFH) = [{

View File

@ -15,10 +15,10 @@
*/
#include "script_component.hpp"
[] call FUNC(parse_input);
GVAR(currentScopeUnit) = (GVAR(currentScopeUnit) + 1) % (count GVAR(scopeUnits));
GVAR(workingMemory) set [6, GVAR(currentScopeUnit)];
true call FUNC(show_main_page);
[] call FUNC(update_scope_unit);
[] call FUNC(update_result);

View File

@ -28,4 +28,4 @@ GVAR(gunList) = GVAR(gunList) - [0];
lbDelete [6000, _index];
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
call FUNC(store_gun_list);

View File

@ -0,0 +1,30 @@
/*
* Author: Ruthberg
* Evalutes input from the option menu
*
* Arguments:
* option menu id <number>
*
* Return Value:
* Nothing
*
* Example:
* 1 call ace_atragmx_fnc_evaluate_option_menu_input
*
* Public: No
*/
#include "script_component.hpp"
params ["_optionID"];
switch (_optionID) do {
case 0: {}; // Accuracy 1st
case 1: { 0 call FUNC(toggle_muzzle_velocity_data); }; // MuzVel Table
case 2: { 0 call FUNC(toggle_c1_ballistic_coefficient_data); }; // Bal Coef Table
case 3: { 0 call FUNC(toggle_target_speed_assist); }; // Target Speed Est
case 4: { 0 call FUNC(toggle_target_range_assist); }; // Target Range Est
case 5: { 0 call FUNC(toggle_truing_drop); }; // Truing Drop
case 6: { 0 call FUNC(toggle_coriolis); }; // Show Coriolis
case 7: { 0 call FUNC(toggle_solution_setup); }; // Set Clicks
case 8: {}; // Gun Note
};

View File

@ -65,18 +65,33 @@ GVAR(targetSpeedDirection) = [1, 1, 1, 1];
GVAR(targetRange) = [0, 0, 0, 0];
GVAR(showWind2) = false;
GVAR(showCoriolis) = false;
GVAR(elevationOutput) = [0, 0, 0, 0];
GVAR(windage1Output) = [0, 0, 0, 0];
GVAR(windage2Output) = [0, 0, 0, 0];
GVAR(leadOutput) = [0, 0, 0, 0];
GVAR(tofOutput) = [0, 0, 0, 0];
GVAR(velocityOutput) = [0, 0, 0, 0];
GVAR(verticalCoriolisOutput) = [0, 0, 0, 0];
GVAR(horizontalCoriolisOutput) = [0, 0, 0, 0];
GVAR(spinDriftOutput) = [0, 0, 0, 0];
GVAR(truingDropMode) = 0;
GVAR(truingDropRangeData) = [0, 0];
GVAR(truingDropDropData) = [0, 0, 0];
GVAR(truingDropReferenceDropData) = [0, 0, 0];
GVAR(truingDropC1) = 0;
GVAR(truingDropMuzzleVelocity) = 0;
GVAR(targetSolutionInput) = nil;
GVAR(showMainPage) = true;
GVAR(showAddNewGun) = false;
GVAR(showAtmoEnvData) = false;
GVAR(showC1BallisticCoefficientData) = false;
GVAR(showGunAmmoData) = false;
GVAR(showGunList) = false;
GVAR(showMuzzleVelocityData) = false;
GVAR(showRangeCard) = false;
GVAR(showRangeCardSetup) = false;
GVAR(showSolutionSetup) = false;
@ -84,3 +99,4 @@ GVAR(showTargetData) = false;
GVAR(showTargetRangeAssist) = false;
GVAR(showTargetSpeedAssist) = false;
GVAR(showTargetSpeedAssistTimer) = false;
GVAR(showTruingDrop) = false;

View File

@ -0,0 +1,55 @@
/*
* Author: Ruthberg
* Inserts entry in the c1 ballistic coefficient vs. distance interpolation table
*
* Arguments:
* transonic range - <NUMBER>
* subsonic range - <NUMBER>
* c1 ballistic coefficient - <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [800, 0.485] call ace_atragmx_fnc_insert_c1_ballistic_coefficient_data
*
* Public: No
*/
#include "script_component.hpp"
params ["_transonicRange", "_subsonicRange", "_c1"];
private _entries = {(_x select 1) > 0} count (GVAR(workingMemory) select 19);
if (_entries > 0) then {
// Insert
private _insertIndex = 0;
private _minDiff = 10000;
{
if (_minDiff > 0 && {(((GVAR(workingMemory) select 19) select _forEachIndex) select 1) == 0}) then {
_insertIndex = _forEachIndex;
_minDiff = 0;
};
private _tr = ((GVAR(workingMemory) select 19) select _forEachIndex) select 0;
private _diff = abs(_subsonicRange - _tr);
if (_diff == 0) exitWith {
_insertIndex = _forEachIndex;
};
if (_diff < _minDiff) then {
_insertIndex = _forEachIndex;
_minDiff = _diff;
};
} forEach (GVAR(workingMemory) select 19);
(GVAR(workingMemory) select 19) set [_insertIndex, [_subsonicRange, 0.1 max _c1 min 2.0]];
} else {
// Reset
private _zeroRange = GVAR(workingMemory) select 2;
private _bc = GVAR(workingMemory) select 15;
GVAR(workingMemory) set [19, [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]];
(GVAR(workingMemory) select 19) set [0, [_zeroRange, _bc]];
(GVAR(workingMemory) select 19) set [1, [_transonicRange + (_subsonicRange - _transonicRange) * 0.75, _bc]];
(GVAR(workingMemory) select 19) set [2, [_subsonicRange, 0.1 max _c1 min 2.0]];
};
call FUNC(update_c1_ballistic_coefficient_data);

View File

@ -0,0 +1,41 @@
/*
* Author: Ruthberg
* Inserts entry in the muzzle velocity vs. temperature interpolation table
*
* Arguments:
* temperature - <NUMBER>
* muzzle velocity - <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [10, 800] call ace_atragmx_fnc_insert_muzzle_velocity_data
*
* Public: No
*/
#include "script_component.hpp"
params ["_temperature", "_muzzleVelocity"];
private _insertIndex = 0;
private _minDiff = 1000;
{
if (_minDiff > 0 && {(((GVAR(workingMemory) select 18) select _forEachIndex) select 1) == 0}) then {
_insertIndex = _forEachIndex;
_minDiff = 0;
};
private _t = ((GVAR(workingMemory) select 18) select _forEachIndex) select 0;
private _diff = abs(_temperature - _t);
if (_diff == 0) exitWith {
_insertIndex = _forEachIndex;
};
if (_diff < _minDiff) then {
_insertIndex = _forEachIndex;
_minDiff = _diff;
};
} forEach (GVAR(workingMemory) select 18);
(GVAR(workingMemory) select 18) set [_insertIndex, [_temperature, 0 max _muzzleVelocity min 1400]];
call FUNC(update_muzzle_velocity_data);

View File

@ -1,6 +1,6 @@
/*
* Author: Ruthberg
* Parses all input fields in the gun, atmosphere and target column and the result input fields
* Parses all input fields in the gun-, atmosphere- and target column, the result input fields and the muzzle velocity data input fields
*
* Arguments:
* Nothing
@ -15,22 +15,98 @@
*/
#include "script_component.hpp"
GVAR(altitude) = -1000 max parseNumber(ctrlText 130030) min 20000;
GVAR(temperature) = -50 max parseNumber(ctrlText 130040) min 160;
GVAR(barometricPressure) = 10 max parseNumber(ctrlText 130050) min 1350;
GVAR(relativeHumidity) = (0 max parseNumber(ctrlText 130060) min 100) / 100;
// Muzzle velocity vs. temperature interpolation data
{
private _temperature = parseNumber(ctrlText _x);
if (GVAR(currentUnit) != 2) then {
_temperature = -50 max _temperature min 160;
_temperature = (_temperature - 32) / 1.8;
} else {
_temperature = -50 max _temperature min 71;
};
((GVAR(workingMemory) select 18) select _forEachIndex) set [0, _temperature];
} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
{
private _muzzleVelocity = abs(parseNumber(ctrlText _x));
if (_muzzleVelocity > 0) then {
if (GVAR(currentUnit) != 2) then {
_muzzleVelocity = 300 max _muzzleVelocity min 4500;
_muzzleVelocity = _muzzleVelocity * 0.3048;
} else {
_muzzleVelocity = 100 max _muzzleVelocity min 1400;
};
};
((GVAR(workingMemory) select 18) select _forEachIndex) set [1, _muzzleVelocity];
} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
// C1 coefficient vs. distance interpolation data
{
private _distance = abs(parseNumber(ctrlText _x));
if (_distance > 0) then {
if (GVAR(currentUnit) == 1) then {
_distance = 25 max _distance min 4000;
_distance = _distance * 0.9144;
} else {
_distance = 25 max _distance min 3700;
};
};
((GVAR(workingMemory) select 19) select _forEachIndex) set [0, _distance];
} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
{
private _c1 = abs(parseNumber(ctrlText _x));
if (_c1 > 0) then {
_c1 = 0.1 max _c1 min 2.0;
};
((GVAR(workingMemory) select 19) select _forEachIndex) set [1, _c1];
} forEach [170031, 170032, 170033, 170034, 170035, 170036, 170037];
GVAR(altitude) = parseNumber(ctrlText 130030);
GVAR(temperature) = parseNumber(ctrlText 130040);
GVAR(barometricPressure) = parseNumber(ctrlText 130050);
GVAR(relativeHumidity) = parseNumber(ctrlText 130060) / 100;
if (GVAR(currentUnit) != 2) then {
GVAR(altitude) = -1000 max GVAR(altitude) min 20000;
GVAR(temperature) = -50 max GVAR(temperature) min 160;
GVAR(barometricPressure) = 10 max GVAR(barometricPressure) min 40;
GVAR(altitude) = GVAR(altitude) * 0.3048;
GVAR(temperature) = (GVAR(temperature) - 32) / 1.8;
GVAR(barometricPressure) = GVAR(barometricPressure) * 33.86389;
} else {
GVAR(altitude) = -300 max GVAR(altitude) min 6100;
GVAR(temperature) = -50 max GVAR(temperature) min 71;
GVAR(barometricPressure) = 340 max GVAR(barometricPressure) min 1350;
};
private ["_inclinationAngleCosine", "_inclinationAngleDegree"];
private ["_windSpeed1", "_windSpeed2", "_targetSpeed", "_targetRange", "_inclinationAngleCosine", "_inclinationAngleDegree"];
_windSpeed1 = parseNumber(ctrlText 140020);
_windSpeed2 = parseNumber(ctrlText 140021);
_targetSpeed = parseNumber(ctrlText 140050);
_targetRange = parseNumber(ctrlText 140060);
if (GVAR(currentUnit) != 2) then {
_windSpeed1 = 0 max _windSpeed1 min 50;
_windSpeed2 = 0 max _windSpeed2 min 50;
_targetSpeed = 0 max _targetSpeed min 50;
_windSpeed1 = _windSpeed1 * 0.44704;
_windSpeed2 = _windSpeed2 * 0.44704;
_targetSpeed = _targetSpeed * 0.44704;
} else {
_windSpeed1 = 0 max _windSpeed1 min 25;
_windSpeed2 = 0 max _windSpeed2 min 25;
_targetSpeed = 0 max _targetSpeed min 25;
};
if (GVAR(currentUnit) == 1) then {
_targetRange = 25 max _targetRange min 4000;
_targetRange = _targetRange * 0.9144;
} else {
_targetRange = 25 max _targetRange min 3700;
};
GVAR(latitude) set [GVAR(currentTarget), -90 max Round(parseNumber(ctrlText 140000)) min 90];
GVAR(directionOfFire) set [GVAR(currentTarget), 0 max abs(Round(parseNumber(ctrlText 140010))) min 359];
GVAR(windSpeed1) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140020)) min 50];
GVAR(windSpeed2) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140021)) min 50];
GVAR(windSpeed1) set [GVAR(currentTarget), _windSpeed1];
GVAR(windSpeed2) set [GVAR(currentTarget), _windSpeed2];
GVAR(windDirection) set [GVAR(currentTarget), 1 max Round(parseNumber(ctrlText 140030)) min 12];
GVAR(targetSpeed) set [GVAR(currentTarget), _targetSpeed];
GVAR(targetRange) set [GVAR(currentTarget), _targetRange];
_inclinationAngleCosine = 0.5 max parseNumber(ctrlText 140041) min 1;
_inclinationAngleDegree = -60 max round(parseNumber(ctrlText 140040)) min 60;
if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)) then {
@ -40,58 +116,62 @@ if (_inclinationAngleDegree != GVAR(inclinationAngle) select GVAR(currentTarget)
GVAR(inclinationAngle) set [GVAR(currentTarget), round(acos(_inclinationAngleCosine))];
};
};
GVAR(targetSpeed) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140050)) min 50];
if ((ctrlText 140051) == ">") then {
GVAR(targetSpeedDirection) set [GVAR(currentTarget), +1];
} else {
GVAR(targetSpeedDirection) set [GVAR(currentTarget), -1];
};
GVAR(targetRange) set [GVAR(currentTarget), 0 max abs(parseNumber(ctrlText 140060)) min 4000];
if (GVAR(currentUnit) != 2) then {
GVAR(windSpeed1) set [GVAR(currentTarget), (GVAR(windSpeed1) select GVAR(currentTarget)) * 0.44704];
GVAR(windSpeed2) set [GVAR(currentTarget), (GVAR(windSpeed2) select GVAR(currentTarget)) * 0.44704];
GVAR(targetSpeed) set [GVAR(currentTarget), (GVAR(targetSpeed) select GVAR(currentTarget)) * 0.44704];
};
if (GVAR(currentUnit) == 1) then {
GVAR(targetRange) set [GVAR(currentTarget), (GVAR(targetRange) select GVAR(currentTarget)) * 0.9144];
};
private ["_boreHeight", "_bulletMass", "_bulletDiameter", "_airFriction", "_rifleTwist", "_muzzleVelocity", "_zeroRange"];
_boreHeight = parseNumber(ctrlText 120000);
_bulletMass = parseNumber(ctrlText 120010);
_bulletDiameter = parseNumber(ctrlText 120020) * 10;
_bulletDiameter = parseNumber(ctrlText 120020);
_airFriction = parseNumber(ctrlText 120030);
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
_airFriction = 0.1 max parseNumber(ctrlText 120030) min 2;
_airFriction = 0.1 max _airFriction min 2;
} else {
_airFriction = parseNumber(ctrlText 120030) / -1000;
_airFriction = _airFriction / -1000;
};
_rifleTwist = parseNumber(ctrlText 120040);
_muzzleVelocity = parseNumber(ctrlText 120050);
_zeroRange = parseNumber (ctrlText 120060);
_zeroRange = parseNumber(ctrlText 120060);
if (GVAR(currentUnit) != 2) then {
_boreHeight = 0.1 max _boreHeight min 5;
_bulletMass = 1 max _bulletMass min 1500;
_bulletDiameter = 0.1 max _bulletDiameter min 1.0;
_rifleTwist = 1 max _rifleTwist min 36;
_muzzleVelocity = 300 max _muzzleVelocity min 4500;
_boreHeight = _boreHeight * 2.54;
_bulletMass = _bulletMass * 0.06479891;
_bulletDiameter = _bulletDiameter * 2.54;
_rifleTwist = _rifleTwist * 2.54;
_muzzleVelocity = _muzzleVelocity / 3.2808399;
_muzzleVelocity = _muzzleVelocity * 0.3048;
} else {
_boreHeight = 0.1 max _boreHeight min 10;
_bulletMass = 1 max _bulletMass min 100;
_bulletDiameter = 0.1 max _bulletDiameter min 2.5;
_rifleTwist = 1 max _rifleTwist min 75;
_muzzleVelocity = 100 max _muzzleVelocity min 1400;
};
_zeroRange = 25 max _zeroRange min 1000;
if (GVAR(currentUnit) == 1) then {
_zeroRange = _zeroRange / 1.0936133;
_zeroRange = _zeroRange * 0.9144;
};
_boreHeight = 0.1 max _boreHeight min 10;
_bulletMass = 1 max _bulletMass min 100;
_bulletDiameter = 1 max _bulletDiameter min 25;
_muzzleVelocity = 100 max _muzzleVelocity min 1400;
_zeroRange = 0 max _zeroRange min 1000;
GVAR(workingMemory) set [5, _boreHeight];
GVAR(workingMemory) set [12, _bulletMass];
GVAR(workingMemory) set [13, _bulletDiameter];
GVAR(workingMemory) set [13, _bulletDiameter * 10];
GVAR(workingMemory) set [14, _rifleTwist];
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
if (_airFriction != GVAR(workingMemory) select 15) then {
(_airFriction - (GVAR(workingMemory) select 15)) call FUNC(shift_c1_ballistic_coefficient_data);
};
GVAR(workingMemory) set [15, _airFriction];
} else {
GVAR(workingMemory) set [4, _airFriction];
};
if (_muzzleVelocity != GVAR(workingMemory) select 1) then {
(_muzzleVelocity - (GVAR(workingMemory) select 1)) call FUNC(shift_muzzle_velocity_data);
};
GVAR(workingMemory) set [1, _muzzleVelocity];
GVAR(workingMemory) set [2, _zeroRange];
@ -101,5 +181,7 @@ GVAR(workingMemory) set [2, _zeroRange];
[] call FUNC(update_atmo_env_data);
[] call FUNC(update_target);
[] call FUNC(update_target_data);
[] call FUNC(update_muzzle_velocity_data);
[] call FUNC(update_c1_ballistic_coefficient_data);
[] call FUNC(store_user_data);

View File

@ -0,0 +1,123 @@
/*
* Author: Ruthberg
* Reads gun list entries from the config and appends them to the gun list
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_read_gun_list_entries_from_config
*
* Public: No
*/
#include "script_component.hpp"
private _validate_preset = {
private _valid = true;
if (count _this != 20) then {
private _errorMsg = format ["Invalid preset array size: %1", count _this];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 0 == "") then {
ERROR("Invalid gun profile name");
_valid = false;
};
if (count (_this select 0) > 14) then {
WARNING("Gun profile name too long (max. allowed 14 characters)");
};
if (_this select 1 < 0 || _this select 1 > 1400) then {
private _errorMsg = format ["Invalid muzzle velocity: %1", _this select 1];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 2 < 25 || _this select 2 > 1000) then {
private _errorMsg = format ["Invalid zero range: %1", _this select 2];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 4 > 0) then {
private _errorMsg = format ["Invalid airFriction value: %1", _this select 4];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 5 < 0.1 || _this select 5 > 10) then {
private _errorMsg = format ["Invalid bore height value: %1", _this select 4];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 12 < 1 || _this select 12 > 100) then {
private _errorMsg = format ["Invalid bullet weight: %1", _this select 12];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 13 < 1 || _this select 13 > 25) then {
private _errorMsg = format ["Invalid bullet diameter: %1", _this select 13];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 14 < 1 || _this select 14 > 75) then {
private _errorMsg = format ["Invalid rifle twist: %1", _this select 14];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 15 < 0.1 || _this select 15 > 2.0) then {
private _errorMsg = format ["Invalid ballistic coefficient: %1", _this select 15];
ERROR(_errorMsg);
_valid = false;
};
if (_this select 16 != 1) then {
private _errorMsg = format ["Invalid drag model: %1", _this select 16];
ERROR(_errorMsg);
_valid = false;
};
if (!((_this select 17) in ["ASM", "ICAO"])) then {
private _errorMsg = format ["Invalid atmosphere model: %1", _this select 17];
ERROR(_errorMsg);
_valid = false;
};
if (count (_this select 18) != 7) then {
private _errorMsg = format ["Invalid muzzle velocity table array size: %1", count (_this select 18)];
ERROR(_errorMsg);
_valid = false;
} else {
{
if (count _x != 2) exitWith {
private _errorMsg = format ["Invalid muzzle velocity table subarray size: %1", count _x];
ERROR(_errorMsg);
_valid = false;
};
} forEach (_this select 18);
};
if (count (_this select 19) != 7) then {
private _errorMsg = format ["Invalid drag coefficient table array size: %1", count (_this select 19)];
ERROR(_errorMsg);
_valid = false;
} else {
{
if (count _x != 2) exitWith {
private _errorMsg = format ["Invalid drag coefficient table subarray size: %1", count _x];
ERROR(_errorMsg);
_valid = false;
};
} forEach (_this select 19);
};
_valid
};
{
private _preset = _x >> "preset";
if (isArray(_preset)) then {
private _gun = getArray _preset;
if (_gun call _validate_preset) then {
_gun set [0, (_gun select 0) select [0, 14]];
_gun set [20, false];
GVAR(gunList) = GVAR(gunList) + [_gun];
};
};
} forEach ("true" configClasses (configFile >> "ACE_ATragMX_Presets"));

View File

@ -0,0 +1,61 @@
/*
* Author: Ruthberg
* Recalculates the c1 ballistic coefficient based on the c1 ballistic coefficient vs. distance interpolation input
*
* Arguments:
* parse input <BOOL>
* update display <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_recalculate_c1_ballistic_coefficient
*
* Public: No
*/
#include "script_component.hpp"
params ["_parseInput", "_updateDisplay"];
if (_parseInput) then {
[] call FUNC(parse_input);
};
private _lookupTable = [];
{
if ((_x select 1) > 0) then {
_lookupTable pushBack _x;
};
} forEach (GVAR(workingMemory) select 19);
private _lookupTableSize = count _lookupTable;
if (_lookupTableSize < 2) exitWith {};
_lookupTable sort true;
private ["_lowerIndex", "_upperIndex"];
for "_index" from 1 to (_lookupTableSize - 1) do {
_upperIndex = _index;
_lowerIndex = _upperIndex - 1;
if (((_lookupTable select _index) select 0) >= (GVAR(targetRange) select GVAR(currentTarget))) exitWith {};
};
private ["_lowerDistance", "_upperDistance", "_lowerC1", "_upperC1", "_c1"];
_lowerDistance = (_lookupTable select _lowerIndex) select 0;
_upperDistance = (_lookupTable select _upperIndex) select 0;
_lowerC1 = (_lookupTable select _lowerIndex) select 1;
_upperC1 = (_lookupTable select _upperIndex) select 1;
_c1 = _lowerC1;
if (_lowerDistance != _upperDistance) then {
private _slope = (_upperC1 - _lowerC1) / (_upperDistance - _lowerDistance);
_c1 = _lowerC1 + ((GVAR(targetRange) select GVAR(currentTarget)) - _lowerDistance) * _slope;
};
_c1 = 0.1 max _c1 min 2.0;
if (_c1 != GVAR(workingMemory) select 15) then {
GVAR(workingMemory) set [15, _c1];
if (_updateDisplay) then {
call FUNC(update_gun);
call FUNC(update_gun_ammo_data);
};
};

View File

@ -0,0 +1,61 @@
/*
* Author: Ruthberg
* Recalculates the muzzle velocity based on the muzzle velocity vs. temperature interpolation input
*
* Arguments:
* parse input <BOOL>
* update display <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_recalculate_muzzle_velocity
*
* Public: No
*/
#include "script_component.hpp"
params ["_parseInput", "_updateDisplay"];
if (_parseInput) then {
[] call FUNC(parse_input);
};
private _lookupTable = [];
{
if ((_x select 1) > 0) then {
_lookupTable pushBack _x;
};
} forEach (GVAR(workingMemory) select 18);
private _lookupTableSize = count _lookupTable;
if (_lookupTableSize < 2) exitWith {};
_lookupTable sort true;
private ["_lowerIndex", "_upperIndex"];
for "_index" from 1 to (_lookupTableSize - 1) do {
_upperIndex = _index;
_lowerIndex = _upperIndex - 1;
if (((_lookupTable select _index) select 0) >= GVAR(temperature)) exitWith {};
};
private ["_lowerTemperature", "_upperTemperature", "_lowerMuzzleVelocity", "_upperMuzzleVelocity", "_muzzleVelocity"];
_lowerTemperature = (_lookupTable select _lowerIndex) select 0;
_upperTemperature = (_lookupTable select _upperIndex) select 0;
_lowerMuzzleVelocity = (_lookupTable select _lowerIndex) select 1;
_upperMuzzleVelocity = (_lookupTable select _upperIndex) select 1;
_muzzleVelocity = _lowerMuzzleVelocity;
if (_lowerTemperature != _upperTemperature) then {
private _slope = (_upperMuzzleVelocity - _lowerMuzzleVelocity) / (_upperTemperature - _lowerTemperature);
_muzzleVelocity = _lowerMuzzleVelocity + (GVAR(temperature) - _lowerTemperature) * _slope;
};
_muzzleVelocity = 100 max _muzzleVelocity min 1400;
if (_muzzleVelocity != GVAR(workingMemory) select 1) then {
GVAR(workingMemory) set [1, _muzzleVelocity];
if (_updateDisplay) then {
call FUNC(update_gun);
call FUNC(update_gun_ammo_data);
};
};

View File

@ -0,0 +1,33 @@
/*
* Author: Ruthberg
* Restores the truing drop defaults
*
* Arguments:
* update display <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_restore_truing_drop
*
* Public: No
*/
#include "script_component.hpp"
private _updateDisplay = _this;
GVAR(truingDropMode) = 0;
GVAR(truingDropRangeData) = [0, 0];
GVAR(truingDropDropData) = [0, 0, 0];
GVAR(truingDropReferenceDropData) = [0, 0, 0];
GVAR(truingDropC1) = 0;
GVAR(truingDropMuzzleVelocity) = 0;
// Resets input fields
call FUNC(update_truing_drop_selection);
if (_updateDisplay) then {
// Repopulates input fields
false call FUNC(calculate_truing_drop);
};

View File

@ -26,6 +26,7 @@ GVAR(barometricPressure) = 340 max (profileNamespace getVariable ["ACE_ATragMX_b
GVAR(relativeHumidity) = 0 max (profileNamespace getVariable ["ACE_ATragMX_relativeHumidity", 0.5]) min 1;
GVAR(showWind2) = profileNamespace getVariable ["ACE_ATragMX_showWind2", false];
GVAR(showCoriolis) = profileNamespace getVariable ["ACE_ATragMX_showCoriolis", true];
GVAR(latitude) = profileNamespace getVariable ["ACE_ATragMX_latitude", [38, 38, 38, 38]];
GVAR(directionOfFire) = profileNamespace getVariable ["ACE_ATragMX_directionOfFire", [0, 0, 0, 0]];
GVAR(windSpeed1) = profileNamespace getVariable ["ACE_ATragMX_windSpeed1", [0, 0, 0, 0]];

View File

@ -25,4 +25,4 @@ lbClear 6000;
lbAdd [6000, _x select 0];
} forEach GVAR(gunList);
profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)];
call FUNC(store_gun_list);

View File

@ -0,0 +1,25 @@
/*
* Author: Ruthberg
* Shifts all c1 ballistic coefficient entries in the c1 ballistic coefficient vs. distance interpolation table
*
* Arguments:
* ballistic coefficient - <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* 10 call ace_atragmx_fnc_shift_c1_ballistic_coefficient_data
*
* Public: No
*/
#include "script_component.hpp"
if (_this == 0) exitWith {};
{
private _c1 = _x select 1;
if (_c1 > 0) then {
((GVAR(workingMemory) select 19) select _forEachIndex) set [1, 0.1 max (_c1 + _this) min 2];
}
} forEach (GVAR(workingMemory) select 19);

View File

@ -0,0 +1,25 @@
/*
* Author: Ruthberg
* Shifts all muzzle velocity entries in the muzzle velocity vs. temperature interpolation table
*
* Arguments:
* velocity - <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* 10 call ace_atragmx_fnc_shift_muzzle_velocity_data
*
* Public: No
*/
#include "script_component.hpp"
if (_this == 0) exitWith {};
{
private _velocity = _x select 1;
if (_velocity > 0) then {
((GVAR(workingMemory) select 18) select _forEachIndex) set [1, 0 max (_velocity + _this) min 1400];
}
} forEach (GVAR(workingMemory) select 18);

View File

@ -0,0 +1,30 @@
/*
* Author: Ruthberg
* Shows/Hides the c1 ballistic coefficient data controls
*
* Arguments:
* visible - <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* false call ace_atragmx_fnc_show_c1_ballistic_coefficient_data
*
* Public: No
*/
#include "script_component.hpp"
GVAR(showC1BallisticCoefficientData) = _this;
{ctrlShow [_x, _this]} forEach [17000, 17001, 170021, 170022, 170023, 170024, 170025, 170026, 170027, 170031, 170032, 170033, 170034, 170035, 170036, 170037, 17004, 17005, 17006, 17007, 17008, 17009];
if (_this) then {
if (GVAR(currentUnit) != 1) then {
ctrlSetText [17000, "Meters"];
} else {
ctrlSetText [17000, "Yards"];
};
ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 170031);
[] call FUNC(update_c1_ballistic_coefficient_data);
};

View File

@ -21,6 +21,18 @@ GVAR(showMainPage) = _this;
500, 501, 502, 503, 600, 601, 602, 603, 1000, 1001, 1002, 1003, 1004, 2000, 2001, 3000, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008];
if (_this) then {
if (GVAR(showCoriolis)) then {
ctrlSetText [4003, "Hold"];
ctrlSetText [4004, "Cor"];
ctrlSetText [4005, "Spin"];
{ctrlShow [_x, false]} forEach [402, 4006, 4007];
} else {
ctrlSetText [4003, "Abs"];
ctrlSetText [4004, "Rel"];
ctrlSetText [4005, "Cur"];
private _visible = (GVAR(currentScopeUnit) == 3);
{ctrlShow [_x, _visible]} forEach [401, 402, 411, 412, 4004, 4005, 4006, 4007];
};
if (GVAR(atmosphereModeTBH)) then {
{ctrlShow [_x, false]} forEach [23, 230];
} else {

View File

@ -0,0 +1,25 @@
/*
* Author: Ruthberg
* Shows/Hides the muzzle velocity data controls
*
* Arguments:
* visible - <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* false call ace_atragmx_fnc_show_muzzle_velocity_data
*
* Public: No
*/
#include "script_component.hpp"
GVAR(showMuzzleVelocityData) = _this;
{ctrlShow [_x, _this]} forEach [16000, 16001, 160021, 160022, 160023, 160024, 160025, 160026, 160027, 160031, 160032, 160033, 160034, 160035, 160036, 160037, 16004, 16005, 16006, 16007, 16008, 16009];
if (_this) then {
ctrlSetFocus ((uiNamespace getVariable "ATragMX_Display") displayCtrl 160031);
[] call FUNC(update_muzzle_velocity_data);
};

View File

@ -0,0 +1,43 @@
/*
* Author: Ruthberg
* Shows/Hides the truing drop controls
*
* Arguments:
* visible - <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_show_truing_drop
*
* Public: No
*/
#include "script_component.hpp"
GVAR(showTruingDrop) = _this;
{ctrlShow [_x, _this]} forEach [18000, 18001, 18002, 18003, 18004, 18005, 18006, 18007, 18008, 18009, 18010, 18011, 18012, 18013, 18014, 18015, 18016, 18017, 18018, 18019, 18020];
if (_this) then {
if (GVAR(currentUnit) == 2) then {
ctrlSetText [18000, format["ZR=%1meters", Round(GVAR(workingMemory) select 2)]];
} else {
ctrlSetText [18000, format["ZR=%1yards", Round((GVAR(workingMemory) select 2) * 1.0936133)]];
};
private _dropUnit = GVAR(currentScopeUnit);
if (_dropUnit == 3) then {
switch (GVAR(currentScopeClickUnit)) do {
case 0: { _dropUnit = 1; };
case 1: { _dropUnit = 2; };
case 2: { _dropUnit = 0; };
};
};
switch (_dropUnit) do {
case 0: { ctrlSetText [18001, "Drop=mils"]; };
case 1: { ctrlSetText [18001, "Drop=tmoa"]; };
case 2: { ctrlSetText [18001, "Drop=smoa"]; };
};
false call FUNC(calculate_truing_drop);
call FUNC(update_truing_drop_selection);
};

View File

@ -0,0 +1,25 @@
/*
* Author: Ruthberg
* Saves the persistent gun list entries into profileNamespace
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_store_user_data
*
* Public: No
*/
#include "script_component.hpp"
private _gunList = [];
{
if (_x select 20) then {
_gunList pushBack _x;
};
} forEach GVAR(gunList);
profileNamespace setVariable ["ACE_ATragMX_gunList", _gunList];

View File

@ -28,6 +28,7 @@ profileNamespace setVariable ["ACE_ATragMX_barometricPressure", GVAR(barometricP
profileNamespace setVariable ["ACE_ATragMX_relativeHumidity", GVAR(relativeHumidity)];
profileNamespace setVariable ["ACE_ATragMX_showWind2", GVAR(showWind2)];
profileNamespace setVariable ["ACE_ATragMX_showCoriolis", GVAR(showCoriolis)];
profileNamespace setVariable ["ACE_ATragMX_latitude", GVAR(latitude)];
profileNamespace setVariable ["ACE_ATragMX_directionOfFire", GVAR(directionOfFire)];
profileNamespace setVariable ["ACE_ATragMX_windSpeed1", GVAR(windSpeed1)];

View File

@ -20,7 +20,11 @@ if (ctrlVisible 13000) then {
true call FUNC(show_main_page);
if (_this == 1) then {
GVAR(truingDropDropData) set [0, 0];
[true, true] call FUNC(recalculate_muzzle_velocity);
call FUNC(calculate_target_solution);
} else {
call FUNC(update_atmo_env_data);
};
} else {
true call FUNC(show_atmo_env_data);

View File

@ -0,0 +1,33 @@
/*
* Author: Ruthberg
* Toggles the c1 ballistic coefficient data screen on/off
*
* Arguments:
* Apply new data? <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* 1 call ace_atragmx_fnc_toggle_c1_ballistic_coefficient_data
*
* Public: No
*/
#include "script_component.hpp"
if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {};
if (ctrlVisible 17000) then {
false call FUNC(show_c1_ballistic_coefficient_data);
true call FUNC(show_main_page);
if (_this == 1) then {
[true, true] call FUNC(recalculate_c1_ballistic_coefficient);
call FUNC(calculate_target_solution);
} else {
call FUNC(update_c1_ballistic_coefficient_data);
};
} else {
true call FUNC(show_c1_ballistic_coefficient_data);
false call FUNC(show_main_page);
};

View File

@ -0,0 +1,19 @@
/*
* Author: Ruthberg
* Toggles the coriolis and spin drift output on/off
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_toggle_coriolis
*
* Public: No
*/
#include "script_component.hpp"
GVAR(showCoriolis) = !GVAR(showCoriolis);
true call FUNC(show_main_page);

View File

@ -20,8 +20,11 @@ if (ctrlVisible 12000) then {
true call FUNC(show_main_page);
if (_this == 1) then {
GVAR(truingDropDropData) set [0, 0];
call FUNC(update_zero_range);
call FUNC(calculate_target_solution);
} else {
call FUNC(update_gun_ammo_data);
};
} else {
true call FUNC(show_gun_ammo_data);

View File

@ -0,0 +1,33 @@
/*
* Author: Ruthberg
* Toggles the muzzle velocity data screen on/off
*
* Arguments:
* Apply new data? <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* 1 call ace_atragmx_fnc_toggle_muzzle_velocity_data
*
* Public: No
*/
#include "script_component.hpp"
if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {};
if (ctrlVisible 16000) then {
false call FUNC(show_muzzle_velocity_data);
true call FUNC(show_main_page);
if (_this == 1) then {
[true, true] call FUNC(recalculate_muzzle_velocity);
call FUNC(calculate_target_solution);
} else {
call FUNC(update_muzzle_velocity_data);
};
} else {
true call FUNC(show_muzzle_velocity_data);
false call FUNC(show_main_page);
};

View File

@ -0,0 +1,51 @@
/*
* Author: Ruthberg
* Toggles the option menu on/off
*
* Arguments:
* open menu item <BOOL>
*
* Return Value:
* Nothing
*
* Example:
* 1 call ace_atragmx_fnc_toggle_option_menu
*
* Public: No
*/
#include "script_component.hpp"
if (ctrlVisible 3001) then {
if (_this) then {
private _optionID = lbCurSel 3002;
if (_optionID > 0) then {
ctrlShow [3001, false];
ctrlShow [3002, false];
[_optionID] call FUNC(evaluate_option_menu_input);
};
} else {
ctrlShow [3001, false];
ctrlShow [3002, false];
};
} else {
lbClear 3002;
lbAdd [3002, "Accuracy 1st"];
lbAdd [3002, "Muz Vel Table"];
lbAdd [3002, "Drag Coef Table"];
lbAdd [3002, "Target Speed Est"];
lbAdd [3002, "Target Range Est"];
lbAdd [3002, "Truing Drop"];
if (GVAR(showCoriolis)) then {
lbAdd [3002, "Show Coriolis *"];
} else {
lbAdd [3002, "Show Coriolis"];
};
lbAdd [3002, "Set Clicks"];
lbAdd [3002, "Gun Note"];
lbSetCurSel [3002, 0];
ctrlShow [3001, true];
ctrlShow [3002, true];
};

View File

@ -21,6 +21,8 @@ if (ctrlVisible 14000) then {
if (_this == 1) then {
call FUNC(calculate_target_solution);
} else {
call FUNC(update_target_data);
};
} else {
true call FUNC(show_target_data);

View File

@ -0,0 +1,39 @@
/*
* Author: Ruthberg
* Toggles the truing drop screen on/off
*
* Arguments:
* Apply new data? <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* 1 call ace_atragmx_fnc_toggle_truing_drop
*
* Public: No
*/
#include "script_component.hpp"
if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) exitWith {};
if (ctrlVisible 18000) then {
false call FUNC(show_truing_drop);
true call FUNC(show_main_page);
if (_this == 1) then {
if (GVAR(truingDropMode) == 0) then {
[GVAR(temperature), GVAR(truingDropMuzzleVelocity)] call FUNC(insert_muzzle_velocity_data);
[false, true] call FUNC(recalculate_muzzle_velocity);
} else {
[GVAR(truingDropRangeData) select 0, GVAR(truingDropRangeData) select 1, GVAR(truingDropC1)] call FUNC(insert_c1_ballistic_coefficient_data);
[false, true] call FUNC(recalculate_c1_ballistic_coefficient);
};
call FUNC(calculate_target_solution);
} else {
call FUNC(update_truing_drop_data);
};
} else {
false call FUNC(show_main_page);
true call FUNC(show_truing_drop);
};

View File

@ -0,0 +1,18 @@
/*
* Author: Ruthberg
* Trims the gun name input field
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_trim_gun_name
*
* Public: No
*/
#include "script_component.hpp"
ctrlSetText [11001, (ctrlText 11001) select [0, 14]];

View File

@ -0,0 +1,43 @@
/*
* Author: Ruthberg
* Trues the c1 ballistic coefficient
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_true_c1_ballistic_coefficient
*
* Public: No
*/
#include "script_component.hpp"
private _referenceDrop = GVAR(truingDropDropData) select 0;
private _actualDrop = GVAR(truingDropDropData) select 2;
if (Round(_actualDrop * 10) / 10 == Round(_referenceDrop * 10) / 10) exitWith {};
private _step = 0.01;
if (_actualDrop > _referenceDrop) then {
_step = -0.01;
};
private _solutionInput = +GVAR(targetSolutionInput);
_solutionInput set [ 8, 200];
_solutionInput set [13, GVAR(truingDropRangeData) select 1];
private _c1 = _solutionInput select 14;
{
_step = _step * _x;
while { _actualDrop * _step < _referenceDrop * _step } do {
_c1 = _c1 + _step;
_solutionInput set [14, _c1];
private _result = _solutionInput call FUNC(calculate_solution);
_referenceDrop = (_result select 0);
};
} forEach [1, -0.1];
GVAR(truingDropC1) = _c1;

View File

@ -0,0 +1,43 @@
/*
* Author: Ruthberg
* Trues the muzzle velocity
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_true_muzzle_velocity
*
* Public: No
*/
#include "script_component.hpp"
private _referenceDrop = GVAR(truingDropDropData) select 0;
private _actualDrop = GVAR(truingDropDropData) select 1;
if (Round(_actualDrop * 10) / 10 == Round(_referenceDrop * 10) / 10) exitWith {};
private _step = 10;
if (_actualDrop > _referenceDrop) then {
_step = -10;
};
private _solutionInput = +GVAR(targetSolutionInput);
_solutionInput set [ 8, 200];
_solutionInput set [13, GVAR(truingDropRangeData) select 0];
private _muzzleVelocity = _solutionInput select 4;
{
_step = _step * _x;
while { _actualDrop * _step < _referenceDrop * _step } do {
_muzzleVelocity = _muzzleVelocity + _step;
_solutionInput set [4, _muzzleVelocity];
private _result = _solutionInput call FUNC(calculate_solution);
_referenceDrop = (_result select 0);
};
} forEach [1, -0.1];
GVAR(truingDropMuzzleVelocity) = _muzzleVelocity;

View File

@ -0,0 +1,25 @@
/*
* Author: Ruthberg
* Updates the c1 ballistic coefficient data fields
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_update_c1_ballistic_coefficient_data
*
* Public: No
*/
#include "script_component.hpp"
// Distances
if (GVAR(currentUnit) != 1) then {
{ctrlSetText [_x, Str(Round(((GVAR(workingMemory) select 19) select _forEachIndex) select 0))]} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
} else {
{ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 19) select _forEachIndex) select 0) * 1.0936133))]} forEach [170021, 170022, 170023, 170024, 170025, 170026, 170027];
};
// Ballistic coefficients
{ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 19) select _forEachIndex) select 1) * 1000) / 1000)]} forEach [170031, 170032, 170033, 170034, 170035, 170036, 170037];

View File

@ -68,7 +68,7 @@ if (GVAR(currentUnit) == 2) then {
ctrlSetText [12000, "Bore (inches)"];
ctrlSetText [12001, "Bullet Weight (grains)"];
ctrlSetText [12002, "Bullet Diam (inches)"];
ctrlSetText [12004, "Rifle Twist (inches/trn)"];
ctrlSetText [12004, "Rifle Twist (in/trn)"];
ctrlSetText [12005, "Muzzle Velocity (feet/sec)"];
};

View File

@ -0,0 +1,28 @@
/*
* Author: Ruthberg
* Updates the muzzle velocity data fields
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_update_muzzle_velocity_data
*
* Public: No
*/
#include "script_component.hpp"
if (GVAR(currentUnit) == 2) then {
// Temperatures
{ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 18) select _forEachIndex) select 0) * 10) / 10)]} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
// Muzzle velocities
{ctrlSetText [_x, Str(Round(((GVAR(workingMemory) select 18) select _forEachIndex) select 1))]} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
} else {
// Temperatures
{ctrlSetText [_x, Str(Round(((((GVAR(workingMemory) select 18) select _forEachIndex) select 0) * 1.8 + 32) * 10) / 10)]} forEach [160021, 160022, 160023, 160024, 160025, 160026, 160027];
// Muzzle velocities
{ctrlSetText [_x, Str(Round((((GVAR(workingMemory) select 18) select _forEachIndex) select 1) * 3.2808399))]} forEach [160031, 160032, 160033, 160034, 160035, 160036, 160037];
};

View File

@ -15,17 +15,28 @@
*/
#include "script_component.hpp"
private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_wind2", "_windageRel", "_windageCur", "_lead", "_clickSize", "_clickNumber", "_clickInterval"];
private ["_elevationAbs", "_elevationRel", "_elevationCur", "_windageAbs", "_windageRel", "_windageCur", "_wind2", "_lead", "_clickSize", "_clickNumber", "_clickInterval"];
_elevationAbs = GVAR(elevationOutput) select GVAR(currentTarget);
_elevationRel = 0;
_elevationCur = 0;
_windageAbs = GVAR(windage1Output) select GVAR(currentTarget);
_windageRel = 0;
_windageCur = 0;
_wind2 = GVAR(windage2Output) select GVAR(currentTarget);
_elevationCur = GVAR(workingMemory) select 10;
_windageCur = GVAR(workingMemory) select 11;
if (GVAR(showCoriolis)) then {
_elevationRel = GVAR(verticalCoriolisOutput) select GVAR(currentTarget);
_windageRel = GVAR(horizontalCoriolisOutput) select GVAR(currentTarget);
_windageCur = GVAR(spinDriftOutput) select GVAR(currentTarget);
} else {
_elevationCur = GVAR(workingMemory) select 10;
_windageCur = GVAR(workingMemory) select 11;
_elevationRel = _elevationAbs - _elevationCur;
_windageRel = _windageAbs - _windageCur;
_elevationRel = _elevationAbs - _elevationCur;
_windageRel = _windageAbs - _windageCur;
};
_lead = GVAR(leadOutput) select GVAR(currentTarget);

View File

@ -0,0 +1,77 @@
/*
* Author: Ruthberg
* Updates the truing drop data fields
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_update_truing_drop_data
*
* Public: No
*/
#include "script_component.hpp"
if (GVAR(currentUnit) == 2) then {
ctrlSetText [18011, Str(Round(GVAR(truingDropRangeData) select 0))];
ctrlSetText [18012, Str(Round(GVAR(truingDropRangeData) select 1))];
} else {
ctrlSetText [18011, Str(Round((GVAR(truingDropRangeData) select 0) * 1.0936133))];
ctrlSetText [18012, Str(Round((GVAR(truingDropRangeData) select 1) * 1.0936133))];
};
if (GVAR(truingDropMode) == 0) then {
GVAR(truingDropDropData) set [0, GVAR(truingDropReferenceDropData) select 0];
} else {
GVAR(truingDropDropData) set [0, GVAR(truingDropReferenceDropData) select 1];
};
private _dropUnit = GVAR(currentScopeUnit);
if (_dropUnit == 3) then {
switch (GVAR(currentScopeClickUnit)) do {
case 0: { _dropUnit = 1; };
case 1: { _dropUnit = 2; };
case 2: { _dropUnit = 0; };
};
};
private _dropData = +GVAR(truingDropDropData);
switch (_dropUnit) do {
case 0: {
_dropData set [0, (_dropData select 0) / 3.38];
_dropData set [1, (_dropData select 1) / 3.38];
_dropData set [2, (_dropData select 2) / 3.38];
};
case 2: {
_dropData set [0, (_dropData select 0) * 1.047];
_dropData set [1, (_dropData select 1) * 1.047];
_dropData set [2, (_dropData select 2) * 1.047];
};
};
ctrlSetText [18006, Str(Round((_dropData select 0) * 100) / 100)];
ctrlSetText [18013, Str(Round((_dropData select 1) * 100) / 100)];
ctrlSetText [18014, Str(Round((_dropData select 2) * 100) / 100)];
if (GVAR(currentUnit) != 2) then {
ctrlSetText [18007, Str(Round((GVAR(workingMemory) select 1) * 3.2808399))];
ctrlSetText [18016, Str(Round((GVAR(workingMemory) select 1) * 3.2808399))];
if (GVAR(truingDropMuzzleVelocity) > 0) then {
ctrlSetText [18016, Str(Round(GVAR(truingDropMuzzleVelocity) * 3.2808399))];
};
} else {
ctrlSetText [18007, Str(Round(GVAR(workingMemory) select 1))];
ctrlSetText [18016, Str(Round(GVAR(workingMemory) select 1))];
if (GVAR(truingDropMuzzleVelocity) > 0) then {
ctrlSetText [18016, Str(Round(GVAR(truingDropMuzzleVelocity)))];
};
};
ctrlSetText [18008, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
ctrlSetText [18017, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];
if (GVAR(truingDropC1) > 0) then {
ctrlSetText [18017, Str(Round(GVAR(truingDropC1) * 1000) / 1000)];
};

View File

@ -0,0 +1,43 @@
/*
* Author: Ruthberg
* Updates the truing drop input method
*
* Arguments:
* Nothing
*
* Return Value:
* Nothing
*
* Example:
* call ace_atragmx_fnc_update_truing_drop_selection
*
* Public: No
*/
#include "script_component.hpp"
#define __dsp (uiNamespace getVariable "ATragMX_Display")
(__dsp displayCtrl 18009) ctrlEnable true;
(__dsp displayCtrl 18010) ctrlEnable true;
if (GVAR(truingDropMode) == 0) then {
(__dsp displayCtrl 18009) ctrlEnable false;
{
(__dsp displayCtrl _x) ctrlEnable true;
} forEach [18011, 18013, 18016];
{
(__dsp displayCtrl _x) ctrlEnable false;
} forEach [18012, 18014, 18017];
ctrlSetFocus (__dsp displayCtrl 18011);
} else {
(__dsp displayCtrl 18010) ctrlEnable false;
{
(__dsp displayCtrl _x) ctrlEnable true;
} forEach [18012, 18014, 18017];
{
(__dsp displayCtrl _x) ctrlEnable false;
} forEach [18011, 18013, 18016];
ctrlSetFocus (__dsp displayCtrl 18012);
};
[] call FUNC(update_truing_drop_data);

View File

@ -27,5 +27,7 @@
[] call FUNC(update_atmo_env_data);
[] call FUNC(update_target);
[] call FUNC(update_target_data);
[] call FUNC(update_muzzle_velocity_data);
[] call FUNC(update_c1_ballistic_coefficient_data);
[] call FUNC(update_result);

View File

@ -15,8 +15,7 @@
*/
#include "script_component.hpp"
private ["_scopeBaseAngle"];
_scopeBaseAngle = (GVAR(workingMemory) select 3);
[] call FUNC(parse_input);
private ["_bulletMass", "_boreHeight", "_airFriction", "_muzzleVelocity", "_bc", "_dragModel", "_atmosphereModel"];
_bulletMass = GVAR(workingMemory) select 12;
@ -28,23 +27,25 @@ _dragModel = GVAR(workingMemory) select 16;
_atmosphereModel = GVAR(workingMemory) select 17;
private ["_zeroRange"];
_zeroRange = Round(parseNumber(ctrlText 120060));
if (GVAR(currentUnit) == 1) then {
_zeroRange = _zeroRange / 1.0936133;
};
if (_zeroRange < 10) exitWith {
GVAR(workingMemory) set [2, _zeroRange];
GVAR(workingMemory) set [3, 0];
};
_zeroRange = GVAR(workingMemory) select 2;
private ["_altitude", "_temperature", "_barometricPressure", "_relativeHumidity"];
_altitude = GVAR(altitude);
_temperature = GVAR(temperature);
_barometricPressure = GVAR(barometricPressure);
_relativeHumidity = GVAR(relativeHumidity);
if (!GVAR(atmosphereModeTBH)) then {
_barometricPressure = 1013.25 * (1 - (0.0065 * _altitude) / (273.15 + _temperature + 0.0065 * _altitude)) ^ 5.255754495;
_relativeHumidity = 50;
};
private ["_result"];
_result = [_scopeBaseAngle, _bulletMass, _boreHeight, _airFriction, _muzzleVelocity, _temperature, _barometricPressure, _relativeHumidity, 1000, [0, 0], 0, 0, 0, _zeroRange, _bc, _dragModel, _atmosphereModel, false, 1.5, 0, 0, 0] call FUNC(calculate_solution);
private _scopeBaseAngle = if (!(missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])) then {
private _zeroAngle = "ace_advanced_ballistics" callExtension format ["zeroAngleVanilla:%1:%2:%3:%4", _zeroRange, _muzzleVelocity, _airFriction, _boreHeight];
(parseNumber _zeroAngle)
} else {
private _zeroAngle = "ace_advanced_ballistics" callExtension format ["zeroAngle:%1:%2:%3:%4:%5:%6:%7:%8:%9", _zeroRange, _muzzleVelocity, _boreHeight, _temperature, _barometricPressure, _relativeHumidity, _bc, _dragModel, _atmosphereModel];
(parseNumber _zeroAngle)
};
GVAR(workingMemory) set [2, _zeroRange];
GVAR(workingMemory) set [3, _scopeBaseAngle + (_result select 0) / 60];
GVAR(workingMemory) set [3, _scopeBaseAngle];

View File

@ -16,4 +16,4 @@
#include "\z\ace\addons\main\script_macros.hpp"
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 1.7
#define ATRAGMX_PROFILE_NAMESPACE_VERSION 2.0

View File

@ -2,6 +2,8 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -2,6 +2,8 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -8,8 +8,6 @@ class CfgAmmo {
class B_556x45_Ball : BulletBase {
airFriction=-0.00126466;
hit=8;
typicalSpeed=750;
tracerScale = 1;
tracerStartTime=0.073; // M856 tracer burns out to 800m
tracerEndTime=1.57123; // Time in seconds calculated with ballistics calculator
@ -26,10 +24,6 @@ class CfgAmmo {
};
class ACE_556x45_Ball_Mk262 : B_556x45_Ball {
airFriction=-0.00109563;
caliber=0.8;
deflecting=18;
hit=11;
typicalSpeed=836;
ACE_caliber=5.69;
ACE_bulletLength=23.012;
ACE_bulletMass=4.9896;
@ -43,10 +37,6 @@ class CfgAmmo {
};
class ACE_556x45_Ball_Mk318 : B_556x45_Ball {
airFriction=-0.00123318;
caliber=0.8;
deflecting=18;
hit=9;
typicalSpeed=886;
ACE_caliber=5.69;
ACE_bulletLength=23.012;
ACE_bulletMass=4.0176;
@ -61,9 +51,6 @@ class CfgAmmo {
class ACE_556x45_Ball_M995_AP : B_556x45_Ball {
airFriction=-0.00123272;
caliber=1.6;
deflecting=18;
hit=6;
typicalSpeed=869;
ACE_caliber=5.69;
ACE_bulletLength=23.012;
ACE_bulletMass=4.5359237;
@ -79,12 +66,8 @@ class CfgAmmo {
class ACE_B_556x45_Ball_Tracer_Dim: B_556x45_Ball_Tracer_Red {
nvgOnly = 1;
};
class ACE_545x39_Ball_7N6M : B_556x45_Ball {
airFriction=-0.00114744;
caliber=0.6;
deflecting=18;
hit=7;
typicalSpeed=880;
class B_545x39_Ball_F : BulletBase {
airFriction=-0.00116278;
ACE_caliber=5.588;
ACE_bulletLength=21.59;
ACE_bulletMass=3.42792;
@ -93,35 +76,27 @@ class CfgAmmo {
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={780, 880, 920};
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
class B_556x45_Ball_Tracer_Green;
class ACE_545x39_Ball_7T3M : B_556x45_Ball_Tracer_Green {
airFriction=-0.00114744;
caliber=0.6;
deflecting=18;
hit=7;
typicalSpeed=883;
tracerStartTime=0.073; // 7T3M tracer burns out to 850m
tracerEndTime=1.70236; // Time in seconds calculated with ballistics calculator
ACE_caliber=5.588;
ACE_bulletLength=21.59;
ACE_bulletMass=3.22704;
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="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={785, 883, 925};
ACE_barrelLengths[]={254.0, 414.02, 508.0};
ACE_muzzleVelocities[]={735, 883, 892};
ACE_barrelLengths[]={206.5, 414.02, 508.0};
};
class B_56x15_dual: BulletBase {
tracerScale = 0.5;
};
class B_580x42_Ball_F: BulletBase {
airFriction=-0.00117956;
ACE_caliber=5.9944;
ACE_bulletLength=24.2;
ACE_bulletMass=4.15;
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.156};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={790, 930, 950};
ACE_barrelLengths[]={369.0, 463.0, 600.0};
};
class B_65x39_Caseless : BulletBase {
airFriction=-0.00075308;
typicalSpeed=800;
tracerScale = 1.1; //1.0;
ACE_caliber=6.706;
ACE_bulletLength=32.893;
@ -144,7 +119,6 @@ class CfgAmmo {
};
class ACE_65x47_Ball_Scenar: B_65x39_Caseless {
airFriction=-0.00067037;
typicalSpeed=820 ;
caliber=0.9;
ACE_caliber=6.706;
ACE_bulletLength=34.646;
@ -159,7 +133,6 @@ class CfgAmmo {
};
class ACE_65_Creedmor_Ball: B_65x39_Caseless {
airFriction=-0.00060887;
typicalSpeed=860 ;
caliber=1.1;
ACE_caliber=6.706;
ACE_bulletLength=36.22;
@ -178,8 +151,6 @@ class CfgAmmo {
};
class B_762x51_Ball : BulletBase {
airFriction=-0.00100957;
typicalSpeed=833;
hit=9;
tracerScale = 1.2; //0.6;
tracerStartTime=0.073; // Based on the British L5A1 which burns out to 1000m
tracerEndTime=2.15957; // Time in seconds calculated with ballistics calculator
@ -278,54 +249,6 @@ class CfgAmmo {
ACE_muzzleVelocities[]={305, 325, 335, 340};
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_30_06_M1_Ball : B_762x51_Ball {
airFriction=-0.00080900;
typicalSpeed=800;
caliber=2.0;
hit=10;
ACE_caliber=7.823;
ACE_bulletLength=30.734;
ACE_bulletMass=11.2752;
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[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_7_Remington_Magnum_Ball : B_762x51_Ball {
airFriction=-0.00056738;
typicalSpeed=820;
caliber=2.1;
hit=8;
ACE_caliber=7.214;
ACE_bulletLength=38.837;
ACE_bulletMass=11.664;
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[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_243_Winchester_Ball : B_762x51_Ball {
airFriction=-0.00067875;
typicalSpeed=915;
caliber=2.3;
hit=6;
ACE_caliber=6.172;
ACE_bulletLength=32.563;
ACE_bulletMass=11.664;
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[]={254.0, 406.4, 508.0, 609.6, 660.4};
};
class ACE_762x67_Ball_Mk248_Mod_0 : B_762x51_Ball {
airFriction=-0.00070530;
caliber=1.8;
@ -376,23 +299,6 @@ class CfgAmmo {
};
class B_762x54_Ball: B_762x51_Ball {
airFriction=-0.00100023;
typicalSpeed=820;
ACE_caliber=7.925;
ACE_bulletLength=28.956;
ACE_bulletMass=9.8496;
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[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_762x54_Ball_7N14 : B_762x51_Ball {
airFriction=-0.00100023;
caliber=1.5;
hit=15;
typicalSpeed=820;
ACE_caliber=7.925;
ACE_bulletLength=28.956;
ACE_bulletMass=9.8496;
@ -407,8 +313,6 @@ class CfgAmmo {
class B_762x54_Tracer_Green;
class ACE_762x54_Ball_7T2 : B_762x54_Tracer_Green {
airFriction=-0.00103989;
caliber=1.5;
hit=15;
typicalSpeed=800;
tracerStartTime=0.073; // Based on the 7T2 which burns three seconds
tracerEndTime=3;
@ -423,27 +327,8 @@ class CfgAmmo {
ACE_muzzleVelocities[]={680, 750, 798, 800};
ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4};
};
class ACE_762x35_Ball : B_762x51_Ball {
airFriction=-0.00128942;
caliber=1.5;
hit=11;
typicalSpeed=790;
ACE_caliber=7.823;
ACE_bulletLength=29.286;
ACE_bulletMass=8.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.349, 0.338, 0.330, 0.310};
ACE_velocityBoundaries[]={792, 610, 488};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=1;
ACE_muzzleVelocities[]={620, 655, 675};
ACE_barrelLengths[]={228.6, 406.4, 508.0};
};
class ACE_762x39_Ball : B_762x51_Ball {
class B_762x39_Ball_F : BulletBase {
airFriction=-0.00151621;
hit=12;
caliber=1.5;
typicalSpeed=716;
ACE_caliber=7.823;
ACE_bulletLength=28.956;
ACE_bulletMass=7.9704;
@ -455,29 +340,9 @@ class CfgAmmo {
ACE_muzzleVelocities[]={650, 716, 750};
ACE_barrelLengths[]={254.0, 414.02, 508.0};
};
class ACE_762x39_Ball_57N231P : B_762x54_Tracer_Green {
airFriction=-0.00151621;
hit=12;
caliber=1.5;
typicalSpeed=716;
tracerStartTime = 0.073; //57N231P tracer burns out to 800m
tracerEndTime = 2.082; //Time in seconds calculated with ballistics calculator
ACE_caliber=7.823;
ACE_bulletLength=28.956;
ACE_bulletMass=7.5816;
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[]={254.0, 414.02, 508.0};
};
class B_9x21_Ball : BulletBase {
airFriction=-0.00226847;
typicalSpeed=390;
airFriction=-0.00208292;
tracerScale = 0.5;
hit=6;
ACE_caliber=9.042;
ACE_bulletLength=15.494;
ACE_bulletMass=7.452;
@ -486,31 +351,14 @@ class CfgAmmo {
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=1;
ACE_muzzleVelocities[]={440, 460, 480};
ACE_barrelLengths[]={101.6, 127.0, 228.6};
ACE_muzzleVelocities[]={380, 390, 420, 435};
ACE_barrelLengths[]={93.5, 101.6, 127.0, 228.6};
};
class B_9x21_Ball_Tracer_Green: B_9x21_Ball {
tracerScale = 0.5;
};
class ACE_9x18_Ball_57N181S : B_9x21_Ball {
hit=5;
airFriction=-0.00190333;
typicalSpeed=298;
ACE_caliber=9.271;
ACE_bulletLength=15.494;
ACE_bulletMass=6.00048;
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[]={96.52, 127.0, 228.6};
};
class ACE_9x19_Ball : B_9x21_Ball {
airFriction=-0.0018577;
typicalSpeed=370;
hit=6;
airFriction=-0.0019835;
ACE_caliber=9.017;
ACE_bulletLength=15.494;
ACE_bulletMass=8.0352;
@ -522,54 +370,8 @@ class CfgAmmo {
ACE_muzzleVelocities[]={340, 370, 400};
ACE_barrelLengths[]={101.6, 127.0, 228.6};
};
class ACE_10x25_Ball : B_9x21_Ball {
airFriction=-0.00181928;
typicalSpeed=425;
hit=7;
ACE_caliber=12.7;
ACE_bulletLength=19.406;
ACE_bulletMass=10.692;
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="ICAO";
ACE_dragModel=1;
ACE_muzzleVelocities[]={360, 400, 430};
ACE_barrelLengths[]={101.6, 117.094, 228.6};
};
class ACE_765x17_Ball: B_9x21_Ball {
airFriction=-0.00163356;
typicalSpeed=282;
hit=7;
ACE_caliber=7.938;
ACE_bulletLength=15.494;
ACE_bulletMass=4.212;
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[]={101.6, 127.0, 228.6};
};
class ACE_303_Ball : ACE_762x51_Ball_M118LR {
airFriction=-0.0008349;
typicalSpeed=761;
caliber=2.0;
ACE_caliber=7.899;
ACE_bulletLength=31.166;
ACE_bulletMass=11.2752;
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[]={508.0, 609.6, 660.4};
};
class B_93x64_Ball : BulletBase {
airFriction=-0.00108571;
typicalSpeed=880;
ACE_caliber=9.296;
ACE_bulletLength=34.29;
ACE_bulletMass=14.904;
@ -583,39 +385,40 @@ class CfgAmmo {
};
class B_408_Ball : BulletBase {
timeToLive=10;
airFriction=-0.00038944;
typicalSpeed=910;
tracerScale = 1.3; //1.2;
airFriction=-0.00044958;
tracerScale = 1.3;
ACE_caliber=10.363;
ACE_bulletLength=54.0;
ACE_bulletMass=26.568;
ACE_bulletLength=55.1942;
ACE_bulletMass=27.1507; // 419 gr
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.97};
ACE_ballisticCoefficients[]={0.434};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ASM";
ACE_dragModel=1;
ACE_muzzleVelocities[]={910};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={867};
ACE_barrelLengths[]={736.6};
};
class ACE_106x83mm_Ball : B_408_Ball {
class ACE_408_Ball : BulletBase {
timeToLive=10;
airFriction=-0.00052047;
ACE_caliber=10.566;
ACE_bulletLength=53.061;
ACE_bulletMass=25.7904;
airFriction=-0.00063655;
typicalSpeed=1067;
tracerScale = 1.3;
ACE_caliber=10.363;
ACE_bulletLength=41.4528;
ACE_bulletMass=19.7637; // 305 gr
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.72};
ACE_ballisticCoefficients[]={0.279};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ASM";
ACE_dragModel=1;
ACE_muzzleVelocities[]={960};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
ACE_muzzleVelocities[]={1067};
ACE_barrelLengths[]={736.6};
};
class B_338_Ball : BulletBase {
timeToLive=10;
airFriction=-0.00059133;
typicalSpeed=915;
ACE_caliber=8.585;
ACE_bulletLength=39.573;
ACE_bulletMass=16.2;
@ -629,7 +432,6 @@ class CfgAmmo {
};
class B_338_NM_Ball : BulletBase {
airFriction=-0.00052201;
typicalSpeed=820;
ACE_caliber=8.585;
ACE_bulletLength=43.18;
ACE_bulletMass=19.44;
@ -649,7 +451,7 @@ class CfgAmmo {
ACE_bulletLength=43.18;
ACE_bulletMass=19.44;
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_ballisticCoefficients[]={0.368};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=7;
@ -665,19 +467,18 @@ class CfgAmmo {
ACE_bulletLength=38.989;
ACE_bulletMass=16.3941242;
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.560};
ACE_ballisticCoefficients[]={0.290};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ICAO";
ACE_dragModel=1;
ACE_muzzleVelocities[]={880, 915, 925};
ACE_barrelLengths[]={508.0, 660.4, 711.2};
ACE_dragModel=7;
ACE_muzzleVelocities[]={880, 895, 900};
ACE_barrelLengths[]={508.0, 685.8, 711.2};
};
class B_127x33_Ball: BulletBase {
tracerScale = 1.3; //1.2;
};
class B_127x54_Ball : BulletBase {
airFriction=-0.00019268;
typicalSpeed=300;
tracerScale = 1.3;//
ACE_caliber=12.954;
ACE_bulletLength=64.516;
@ -693,7 +494,6 @@ class CfgAmmo {
class B_127x99_Ball : BulletBase {
timeToLive=10;
airFriction=-0.00057503;
typicalSpeed=900;
tracerScale = 1.3; //1.2;
ACE_caliber=12.954;
ACE_bulletLength=58.674;
@ -706,10 +506,9 @@ class CfgAmmo {
ACE_muzzleVelocities[]={900};
ACE_barrelLengths[]={736.6};
};
class ACE_127x99_API : BulletBase {
class ACE_127x99_API : B_127x99_Ball {
timeToLive=10;
airFriction=-0.00057503;
typicalSpeed=900;
tracerScale = 1.3;//
hit=25;
caliber=4.0;
@ -727,7 +526,6 @@ class CfgAmmo {
class ACE_127x99_Ball_AMAX : B_127x99_Ball {
timeToLive=10;
airFriction=-0.00036645;
typicalSpeed=860;
caliber=3.0;
ACE_caliber=12.954;
ACE_bulletLength=64.516;
@ -743,7 +541,6 @@ class CfgAmmo {
class B_127x108_Ball : BulletBase {
timeToLive=10;
airFriction=-0.00063800;
typicalSpeed=820;
tracerScale = 1.3; //1.5;
ACE_caliber=12.979;
ACE_bulletLength=64.008;
@ -758,7 +555,6 @@ class CfgAmmo {
};
class B_45ACP_Ball : BulletBase {
airFriction=-0.00081221;
typicalSpeed=250;
tracerScale = 0.6;
ACE_caliber=11.481;
ACE_bulletLength=17.272;
@ -771,6 +567,19 @@ class CfgAmmo {
ACE_muzzleVelocities[]={230, 250, 285};
ACE_barrelLengths[]={101.6, 127.0, 228.6};
};
class B_50BW_Ball_F : BulletBase {
airFriction=-0.00202645;
ACE_caliber=12.7;
ACE_bulletLength=24.13;
ACE_bulletMass=21.7076;
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.21};
ACE_velocityBoundaries[]={};
ACE_standardAtmosphere="ASM";
ACE_dragModel=1;
ACE_muzzleVelocities[]={510, 550, 596};
ACE_barrelLengths[]={304.8, 406.4, 609.6};
};
class B_19mm_HE: BulletBase {
tracerScale = 1;
};

View File

@ -2,6 +2,15 @@
class CfgMagazines {
class CA_Magazine;
class 30Rnd_580x42_Mag_F: CA_Magazine {
initSpeed = 930;
};
class 100Rnd_580x42_Mag_F: 30Rnd_580x42_Mag_F {
initSpeed = 930;
};
class 20Rnd_650x39_Cased_Mag_F: CA_Magazine {
initSpeed = 760;
};
class 30Rnd_65x39_caseless_mag: CA_Magazine {
initSpeed = 760;
};
@ -47,6 +56,10 @@ class CfgMagazines {
descriptionShort = CSTRING(30Rnd_65x39_caseless_green_mag_Tracer_DimDescription);
};
class 30Rnd_545x39_Mag_F: CA_Magazine {
initSpeed = 735;
};
class 30Rnd_556x45_Stanag: CA_Magazine {
};
class ACE_30Rnd_556x45_Stanag_M995_AP_mag: 30Rnd_556x45_Stanag {
@ -84,6 +97,14 @@ class CfgMagazines {
picture = "\A3\weapons_f\data\ui\m_20stanag_red_ca.paa";
};
class 200Rnd_556x45_Box_F: CA_Magazine {
initSpeed = 872;
};
class 30Rnd_762x39_Mag_F: CA_Magazine {
initSpeed = 715;
};
class 20Rnd_762x51_Mag: CA_Magazine {
initSpeed = 833;
};
@ -219,17 +240,35 @@ class CfgMagazines {
class ACE_30Rnd_65x47_Scenar_mag: 30Rnd_65x39_caseless_mag {
author = ECSTRING(common,ACETeam);
ammo = "ACE_65x47_Ball_Scenar";
initSpeed = 761;
displayName = CSTRING(30Rnd_65x47_Scenar_mag_Name);
displayNameShort = CSTRING(30Rnd_65x47_Scenar_mag_NameShort);
descriptionShort = CSTRING(30Rnd_65x47_Scenar_mag_Description);
};
class ACE_20Rnd_65x47_Scenar_mag: 20Rnd_650x39_Cased_Mag_F {
author = ECSTRING(common,ACETeam);
ammo = "ACE_65x47_Ball_Scenar";
initSpeed = 779;
displayName = CSTRING(20Rnd_65x47_Scenar_mag_Name);
displayNameShort = CSTRING(20Rnd_65x47_Scenar_mag_NameShort);
descriptionShort = CSTRING(20Rnd_65x47_Scenar_mag_Description);
};
class ACE_30Rnd_65_Creedmor_mag: 30Rnd_65x39_caseless_mag {
author = ECSTRING(common,ACETeam);
ammo = "ACE_65_Creedmor_Ball";
initSpeed = 815;
displayName = CSTRING(30Rnd_65_Creedmor_mag_Name);
displayNameShort = CSTRING(30Rnd_65_Creedmor_mag_NameShort);
descriptionShort = CSTRING(30Rnd_65_Creedmor_mag_Description);
};
class ACE_20Rnd_65_Creedmor_mag: 20Rnd_650x39_Cased_Mag_F {
author = ECSTRING(common,ACETeam);
ammo = "ACE_65_Creedmor_Ball";
initSpeed = 808;
displayName = CSTRING(20Rnd_65_Creedmor_mag_Name);
displayNameShort = CSTRING(20Rnd_65_Creedmor_mag_NameShort);
descriptionShort = CSTRING(20Rnd_65_Creedmor_mag_Description);
};
class 10Rnd_338_Mag;
class ACE_10Rnd_338_300gr_HPBT_Mag: 10Rnd_338_Mag {
author = ECSTRING(common,ACETeam);
@ -247,6 +286,18 @@ class CfgMagazines {
descriptionShort = CSTRING(10Rnd_338_API526_Mag_Description);
initSpeed = 880;
};
class 7Rnd_408_Mag: CA_Magazine {
initSpeed = 867;
};
class ACE_7Rnd_408_305gr_Mag: 7Rnd_408_Mag {
author = ECSTRING(common,ACETeam);
ammo = "ACE_408_Ball";
displayName = CSTRING(7Rnd_408_305gr_Mag_Name);
displayNameShort = CSTRING(7Rnd_408_305gr_Mag_NameShort);
descriptionShort = CSTRING(7Rnd_408_305gr_Mag_Description);
initSpeed = 1067;
};
class 5Rnd_127x108_Mag;
class ACE_5Rnd_127x99_Mag: 5Rnd_127x108_Mag {
@ -276,7 +327,7 @@ class CfgMagazines {
class 30Rnd_9x21_Mag: CA_Magazine {
initSpeed = 450;
initSpeed = 390;
};
class ACE_30Rnd_9x19_mag: 30Rnd_9x21_Mag {
author = ECSTRING(common,ACETeam);
@ -287,6 +338,10 @@ class CfgMagazines {
initSpeed = 370;
};
class 10Rnd_50BW_Mag_F: CA_Magazine {
initSpeed = 552;
};
class 11Rnd_45ACP_Mag: CA_Magazine {
initSpeed = 250;
};
@ -308,7 +363,10 @@ class CfgMagazines {
};
class 16Rnd_9x21_Mag: 30Rnd_9x21_Mag {
initSpeed = 450;
initSpeed = 390;
};
class 10Rnd_9x21_Mag: 16Rnd_9x21_Mag {
initSpeed = 390;
};
class ACE_16Rnd_9x19_mag: 16Rnd_9x21_Mag {
author = ECSTRING(common,ACETeam);

View File

@ -13,7 +13,9 @@ class CfgVehicles {
class NATO_Box_Base;
class Box_NATO_Wps_F: NATO_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
};
};
@ -26,6 +28,7 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1);
MACRO_ADDMAGAZINE(ACE_10Rnd_338_300gr_HPBT_Mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_338_API526_Mag,4);
MACRO_ADDMAGAZINE(ACE_7Rnd_408_305gr_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);
@ -34,7 +37,9 @@ class CfgVehicles {
class Box_NATO_Ammo_F: NATO_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_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);
@ -46,6 +51,7 @@ class CfgVehicles {
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_7Rnd_408_305gr_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);
@ -67,6 +73,7 @@ class CfgVehicles {
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_7Rnd_408_305gr_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);
@ -76,7 +83,9 @@ class CfgVehicles {
class ReammoBox_F;
class B_supplyCrate_F: ReammoBox_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_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);
@ -92,7 +101,9 @@ class CfgVehicles {
class EAST_Box_Base;
class Box_East_Wps_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
@ -102,7 +113,9 @@ class CfgVehicles {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_556x45_Stanag_Tracer_Dim,1);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
@ -110,7 +123,9 @@ class CfgVehicles {
class Box_East_Ammo_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
@ -118,7 +133,9 @@ class CfgVehicles {
class Box_East_Support_F: EAST_Box_Base {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,6);
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_10Rnd_762x54_Tracer_mag,4);
};
@ -182,7 +199,9 @@ class CfgVehicles {
class C_supplyCrate_F: ReammoBox_F {
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65_Creedmor_mag,4);
};
};
@ -217,10 +236,13 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_100Rnd_65x39_caseless_mag_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_200Rnd_65x39_cased_Box_Tracer_Dim,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_30Rnd_65x47_Scenar_mag,4);
MACRO_ADDMAGAZINE(ACE_20Rnd_65_Creedmor_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_7Rnd_408_305gr_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);

View File

@ -27,6 +27,17 @@ class CfgWeapons {
};
};
class DMR_07_base_F: Rifle_Long_Base_F {
initSpeed = -1.06051;
ACE_barrelTwist = 228.6;
ACE_barrelLength = 640.0;
magazines[] = {
"20Rnd_650x39_Cased_Mag_F",
"ACE_20Rnd_65x47_Scenar_mag",
"ACE_20Rnd_65_Creedmor_mag"
};
};
class DMR_06_base_F: Rifle_Long_Base_F {
class Single: Mode_SemiAuto {
dispersion = 0.00029; // radians. Equal to 1.00 MOA.
@ -112,7 +123,7 @@ class CfgWeapons {
"ACE_30Rnd_65x47_Scenar_mag",
"ACE_30Rnd_65_Creedmor_mag"
};
initSpeed = -1.018;
initSpeed = -1.01842;
ACE_barrelTwist=228.6;
ACE_barrelLength=457.2;
class Single: Single {
@ -142,6 +153,14 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.859238;
ACE_barrelTwist=177.8;
ACE_barrelLength=264.0;
};
class arifle_SPAR_02_base_F: Rifle_Base_F {
initSpeed = -0.934282;
ACE_barrelTwist=177.8;
ACE_barrelLength=368.0;
};
class arifle_SPAR_03_base_F: Rifle_Base_F {
magazines[] = {
@ -154,6 +173,9 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.984394;
ACE_barrelTwist=279.4;
ACE_barrelLength=508.0;
};
/* Other */
@ -163,21 +185,26 @@ class CfgWeapons {
"200Rnd_65x39_cased_Box_Tracer",
"ACE_200Rnd_65x39_cased_Box_Tracer_Dim"
};
initSpeed = -0.9763;
initSpeed = -0.976974;
ACE_barrelTwist=177.8;
ACE_barrelLength=317.5;
};
class LMG_Zafir_F: Rifle_Long_Base_F {
initSpeed = -1.0;
initSpeed = -1.00333;
ACE_barrelTwist=304.8;
ACE_barrelLength=459.74;
};
class LMG_03_base_F: Rifle_Long_Base_F {
initSpeed = -1.02002;
ACE_barrelTwist=177.8;
ACE_barrelLength=414.02;
};
class Tavor_base_F: Rifle_Base_F {};
class mk20_base_F: Rifle_Base_F {};
/* SMGs */
class SDAR_base_F: Rifle_Base_F {
initSpeed = -0.989;
initSpeed = -1.211;
class Single: Mode_SemiAuto {
dispersion = 0.0008727; // radians. Equal to 3 MOA.
};
@ -190,9 +217,6 @@ class CfgWeapons {
dispersion = 0.0008727; // radians. Equal to 3 MOA.
};
};
class pdw2000_base_F: Rifle_Short_Base_F {};
class SMG_01_Base: Rifle_Short_Base_F {};
class SMG_02_base_F: Rifle_Base_F {};
/* Pistols */
@ -200,13 +224,13 @@ class CfgWeapons {
class Pistol_Base_F: Pistol {};
class hgun_P07_F: Pistol_Base_F {
initSpeed = -0.9778;
initSpeed = -1.0;
ACE_barrelTwist=254.0;
ACE_barrelLength=101.6;
};
class hgun_Rook40_F: Pistol_Base_F {
initSpeed = -1.0;
initSpeed = -1.03077;
ACE_barrelTwist=254.0;
ACE_barrelLength=111.76;
};
@ -228,18 +252,57 @@ class CfgWeapons {
ACE_barrelTwist=406.4;
ACE_barrelLength=76.2;
};
class hgun_PDW2000_F: pdw2000_base_F {
initSpeed = -1.157;
class hgun_Pistol_01_F: Pistol_Base_F {
initSpeed = -0.974359;
ACE_barrelTwist=254.0;
ACE_barrelLength=93.5;
};
class pdw2000_base_F: Rifle_Short_Base_F {
initSpeed = -1.09615;
ACE_barrelTwist=228.6;
ACE_barrelLength=177.8;
};
/* Rifles */
class arifle_AKS_base_F: Rifle_Base_F {
initSpeed = -1.0;
ACE_barrelTwist=160.02;
ACE_barrelLength=206.5;
};
class arifle_AKM_base_F: Rifle_Base_F {
initSpeed = -1.0014;
ACE_barrelTwist = 199.898;
ACE_barrelLength = 414.02;
};
class arifle_AK12_base_F: Rifle_Base_F {
initSpeed = -1.0014;
ACE_barrelTwist = 199.898;
ACE_barrelLength = 414.02;
};
class arifle_CTAR_base_F: Rifle_Base_F {
initSpeed = -1.0;
ACE_barrelTwist = 244.0;
ACE_barrelLength = 463.0;
};
class arifle_CTARS_base_F: Rifle_Base_F {
initSpeed = -1.04301;
ACE_barrelTwist = 244.0;
ACE_barrelLength = 600.0;
};
class arifle_ARX_base_F: Rifle_Base_F {
initSpeed = -1.02052;
ACE_barrelTwist = 228.6;
ACE_barrelLength = 463.0;
};
class arifle_Katiba_F: arifle_katiba_Base_F {
magazines[] = {
"30Rnd_65x39_caseless_green",
"30Rnd_65x39_caseless_green_mag_Tracer",
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
};
initSpeed = -1.08;
initSpeed = -1.08355;
ACE_barrelTwist=203.2;
ACE_barrelLength=728.98;
};
@ -249,7 +312,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_green_mag_Tracer",
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
};
initSpeed = -1.07;
initSpeed = -1.07105;
ACE_barrelTwist=203.2;
ACE_barrelLength=680.72;
};
@ -259,7 +322,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_green_mag_Tracer",
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim"
};
initSpeed = -1.08;
initSpeed = -1.08355;
ACE_barrelTwist=203.2;
ACE_barrelLength=728.98;
};
@ -269,7 +332,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -0.99;
initSpeed = -0.990132;
ACE_barrelTwist=228.6;
ACE_barrelLength=368.3;
};
@ -295,7 +358,7 @@ class CfgWeapons {
"30Rnd_65x39_caseless_mag_Tracer",
"ACE_30Rnd_65x39_caseless_mag_Tracer_Dim"
};
initSpeed = -0.965;
initSpeed = -0.963816;
ACE_barrelTwist=203.2;
ACE_barrelLength=266.7;
};
@ -323,11 +386,16 @@ class CfgWeapons {
ACE_barrelTwist=285.75;
ACE_barrelLength=457.2;
};
class SMG_02_F: SMG_02_base_F {
initSpeed = -1.054;
class SMG_02_base_F: Rifle_Short_Base_F {
initSpeed = -1.10288;
ACE_barrelTwist=254.0;
ACE_barrelLength=195.58;
};
class SMG_05_base_F: Rifle_Short_Base_F {
initSpeed = -1.04058;
ACE_barrelTwist=254.0;
ACE_barrelLength=115.0;
};
class arifle_TRG20_F: Tavor_base_F {
magazines[] = {
"30Rnd_556x45_Stanag",
@ -358,7 +426,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.989;
initSpeed = -0.988043;
ACE_barrelTwist=177.8;
ACE_barrelLength=459.74;
};
@ -375,7 +443,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.989;
initSpeed = -0.988043;
ACE_barrelTwist=177.8;
ACE_barrelLength=459.74;
};
@ -398,7 +466,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.98;
initSpeed = -0.980978;
ACE_barrelTwist=177.8;
ACE_barrelLength=441.96;
};
@ -415,7 +483,7 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.956;
initSpeed = -0.962648;
ACE_barrelTwist=177.8;
ACE_barrelLength=406.4;
};
@ -432,12 +500,12 @@ class CfgWeapons {
"ACE_30Rnd_556x45_Stanag_Mk318_mag",
"ACE_30Rnd_556x45_Stanag_Tracer_Dim"
};
initSpeed = -0.956;
initSpeed = -0.962648;
ACE_barrelTwist=177.8;
ACE_barrelLength=406.4;
};
class SMG_01_F: SMG_01_Base {
initSpeed = -1.016;
class SMG_01_Base: Rifle_Short_Base_F {
initSpeed = -1.0175;
ACE_barrelTwist=406.4;
ACE_barrelLength=139.7;
};
@ -461,7 +529,7 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.9724;
initSpeed = -0.972389;
ACE_barrelTwist=304.8;
ACE_barrelLength=457.2;
};
@ -473,6 +541,10 @@ class CfgWeapons {
};
*/
class srifle_LRR_F: LRR_base_F {
magazines[] = {
"7Rnd_408_Mag",
"ACE_7Rnd_408_305gr_Mag"
};
initSpeed = -1.0;
ACE_barrelTwist=330.2;
ACE_barrelLength=736.6;
@ -498,7 +570,7 @@ class CfgWeapons {
"ACE_20Rnd_762x67_Mk248_Mod_1_Mag",
"ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag"
};
initSpeed = -0.962;
initSpeed = -0.961749;
ACE_barrelTwist=254.0;
ACE_barrelLength=508.0;
};
@ -513,7 +585,7 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.9843;
initSpeed = -0.984394;
ACE_barrelTwist=254.0;
ACE_barrelLength=508.0;
};
@ -538,12 +610,12 @@ class CfgWeapons {
"ACE_20Rnd_762x51_M993_AP_Mag",
"ACE_20Rnd_762x51_Mag_SD"
};
initSpeed = -0.9916;
initSpeed = -0.992197;
ACE_barrelTwist=304.8;
ACE_barrelLength=558.8;
};
class MMG_01_hex_F: MMG_01_base_F {
initSpeed = -1.0;
initSpeed = -0.997073;
ACE_barrelTwist=359.918;
ACE_barrelLength=549.91;
};

View File

@ -1,6 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Ballistics">
<!-- QBU -->
<Key ID="STR_ACE_Ballistics_20Rnd_65x47_Scenar_mag_Name">
<English>6.5x47mm 20Rnd Mag (HPBT Scenar)</English>
<French>Ch. 6.5x47mm 20Cps (HPBT Scenar)</French>
<Spanish>Cargador de 20 balas de 6.5x47mm (HPBT Scenar)</Spanish>
<Polish>Magazynek 6,5x47mm 20rd (HPBT Scenar)</Polish>
<Russian>Магазин из 20-ти 6,5x47 мм (экспансивные Scenar)</Russian>
<German>6,5x47mm 20-Patronen-Magazin (HPBT Scenar)</German>
<Italian>6.5x47mm 20Rnd Mag (HPBT Scenar)</Italian>
<Czech>6.5x47mm 20náb. Zásobník (HPBT Scenar)</Czech>
<Portuguese>Carregador 6.5x47mm com 20 cartuchos (HPBT Scenar)</Portuguese>
<Hungarian>6,5x47mm 20-lövedékes tár (HPBT Scenar)</Hungarian>
<Japanese>6.5x47mm 20発入り 弾倉 (HPBT Scenar)</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_20Rnd_65x47_Scenar_mag_NameShort">
<English>6.5mm Lapua</English>
<French>6.5mm Lapua</French>
<Spanish>6.5mm Lapua</Spanish>
<Polish>6,5mm Lapua</Polish>
<Russian>6,5 мм Lapua</Russian>
<German>6,5mm Lapua</German>
<Italian>6.5mm Lapua</Italian>
<Czech>6.5mm Lapua</Czech>
<Portuguese>6.5mm Lapua</Portuguese>
<Hungarian>6,5mm Lapua</Hungarian>
<Japanese>6.5mm Lapua</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_20Rnd_65x47_Scenar_mag_Description">
<English>Caliber: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: QBU-88</English>
<French>Calibre: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Cartouches: 20</French>
<Spanish>Calibre: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: QBU-88</Spanish>
<Polish>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Pociski: 20</Polish>
<Russian>Калибр: 6,5x47 мм (экспансивные Scenar)&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются с: QBU-88</Russian>
<German>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Patronen: 20&lt;br /&gt;Eingesetzt von: QBU-88</German>
<Italian>Calibro: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: QBU-88</Italian>
<Czech>Ráže: 6.5x47mm (HPBT Scenar)&lt;br /&gt;Nábojů: 20&lt;br /&gt;Použití u: QBU-88</Czech>
<Portuguese>Calibre: 6.5x47mm (HPBT Scenar)&lt;br/&gt;Cartuchos: 20&lt;br/&gt;Usado em: QBU-88</Portuguese>
<Hungarian>Kaliber: 6,5x47mm (HPBT Scenar)&lt;br /&gt;Lövedékek: 20&lt;br /&gt;Használható: QBU-88</Hungarian>
<Japanese>口径: 6.5x47mm (HPBT Scenar)&amp;lt;br /&amp;gt;装填数: 20&amp;lt;br /&amp;gt;次で使用: QBU-88</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_20Rnd_65_Creedmor_mag_Name">
<English>6.5mm Creedmor 20Rnd Mag</English>
<Polish>Magazynek 6,5mm Creedmor 20rd</Polish>
<Italian>6.5mm Creedmor 20Rnd Mag</Italian>
<Russian>Магазин из 20-ти 6,5 мм Creedmor</Russian>
<German>6,5mm Creedmor 20-Patronen-Magazin</German>
<Spanish>Cargador de 20 balas Creedmor de 6.5mm</Spanish>
<French>Ch. 6.5mm Creedmor 20Cps</French>
<Czech>6.5mm Creedmor 20náb. Zásobník</Czech>
<Portuguese>Carregador 6.5mm com 20 cartuchos Creedmor</Portuguese>
<Hungarian>6,5mm Creedmor 20-lövedékes tár</Hungarian>
<Japanese>6.5mm Creedmor 20発入り 弾倉</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_20Rnd_65_Creedmor_mag_NameShort">
<English>6.5mm CM</English>
<French>6.5mm CM</French>
<Spanish>6.5mm CM</Spanish>
<Polish>6,5mm CM</Polish>
<Russian>6,5 мм CM</Russian>
<German>6,5mm CM</German>
<Italian>6.5mm CM</Italian>
<Czech>6.5mm CM</Czech>
<Portuguese>6.5mm CM</Portuguese>
<Hungarian>6,5mm CM</Hungarian>
<Japanese>6.5mm CM</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_20Rnd_65_Creedmor_mag_Description">
<English>Caliber: 6.5x47mm Creedmor&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: QBU-88</English>
<Polish>Kaliber: 6,5x47mm Creedmor&lt;br /&gt;Pociski: 20&lt;br /&gt;Używany w: QBU-88</Polish>
<German>Kaliber: 6,5x47mm Creedmor&lt;br /&gt;Patronen: 20&lt;br /&gt;Eingesetzt von: QBU-88</German>
<French>Calibre: 6.5x47mm Creedmor &lt;br /&gt;Cartouches: 20&lt;br /&gt;Utilisé avec: QBU-88</French>
<Italian>Calibro: 6.5mm Creedmor&lt;br /&gt;Munizioni: 20&lt;br /&gt;In uso su: QBU-88</Italian>
<Spanish>Calibre: 6.5mm Creedmor&lt;br /&gt;Balas: 20&lt;br /&gt;Se usa en: QBU-88</Spanish>
<Russian>Калибр: 6,5x47мм Creedmor&lt;br /&gt;Патронов: 20&lt;br /&gt;Используются c: QBU-88</Russian>
<Czech>Ráže: 6.5x47mm Creedmor&lt;br /&gt;Nábojů: 20&lt;br /&gt;Použití u: QBU-88</Czech>
<Portuguese>Calibre: 6.5x47mm Creedmor&lt;br/&gt;Cartuchos: 20&lt;br/&gt;Usado em: QBU-88</Portuguese>
<Hungarian>Kaliber: 6,5x47mm Creedmor&lt;br /&gt;Lövedékek: 20&lt;br /&gt;Használható: QBU-88</Hungarian>
<Japanese>口径: 6.5x47mm Creedmor&amp;lt;br /&amp;gt;装填数: 20&amp;lt;br /&amp;gt;次で使用: QBU-88</Japanese>
</Key>
<!-- MX -->
<Key ID="STR_ACE_Ballistics_30Rnd_65x39_caseless_mag_Tracer_DimName">
<English>6.5mm 30Rnd Tracer IR-DIM Mag</English>
@ -1607,6 +1686,45 @@
<Hungarian>Kaliber: 8,6x70mm (API526)&lt;br /&gt;Lövedékek: 10</Hungarian>
<Japanese>口径: 8.6x70mm (API526)&amp;lt;br /&amp;gt;装填数: 10</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_7Rnd_408_305gr_Mag_Name">
<English>.408 7Rnd Mag (305gr)</English>
<French>Ch. .408 7Cps (305gr)</French>
<Spanish>Cargador de 7 balas de .408 (305gr)</Spanish>
<Polish>Magazynek .408 7rd (305gr)</Polish>
<Russian>Магазин из 7-ти .408 (305gr)</Russian>
<German>.408 7-Patronen-Magazin (305gr)</German>
<Italian>.408 7Rnd Mag (305gr)</Italian>
<Czech>.408 7náb. Zásobník (305gr)</Czech>
<Portuguese>Carregador .408 (305gr) com 7 cartuchos </Portuguese>
<Hungarian>.408 7-lövedékes tár (305gr)</Hungarian>
<Japanese>.408 7発入り 弾倉 (305gr)</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_7Rnd_408_305gr_Mag_NameShort">
<English>.408</English>
<French>.408</French>
<Spanish>.408</Spanish>
<Polish>.408</Polish>
<Russian>.408</Russian>
<German>.408</German>
<Italian>.408</Italian>
<Czech>.408</Czech>
<Portuguese>.408</Portuguese>
<Hungarian>.408</Hungarian>
<Japanese>.408</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_7Rnd_408_305gr_Mag_Description">
<English>Caliber: .408 CheyTac (305gr)&lt;br /&gt;Rounds: 7</English>
<French>Calibre: .408 CheyTac (305gr)&lt;br /&gt;Cartouches: 7</French>
<Spanish>Calibre: .408 CheyTac (305gr)&lt;br /&gt;Balas: 7</Spanish>
<Polish>Kaliber: .408 CheyTac (305gr)&lt;br /&gt;Pociski: 7</Polish>
<Russian>Калибр: .408 CheyTac (305gr)&lt;br /&gt;Патронов: 7</Russian>
<German>Kaliber: .408 CheyTac (305gr)&lt;br /&gt;Patronen: 7</German>
<Italian>Calibro: .408 CheyTac (305gr)&lt;br /&gt;Munizioni: 7</Italian>
<Czech>Ráže: .408 CheyTac (305gr)&lt;br /&gt;Nábojů: 7</Czech>
<Portuguese>Calibre: .408 CheyTac (305gr)&lt;br/&gt;Cartuchos: 7</Portuguese>
<Hungarian>Kaliber: .408 CheyTac (305gr)&lt;br /&gt;Lövedékek: 7</Hungarian>
<Japanese>口径: .408 CheyTac (305gr)&amp;lt;br /&amp;gt;装填数: 7</Japanese>
</Key>
<Key ID="STR_ACE_Ballistics_5Rnd_127x99_Mag_Name">
<English>12.7x99mm 5Rnd Mag</English>
<French>Ch. 12.7x99mm 5Cps</French>

View File

@ -2,7 +2,9 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
GVAR(captivityEnabled) = false;

View File

@ -259,12 +259,17 @@ class CfgVehicles {
GVAR(space) = 4;
};
// jets
// planes (off by default as most are attack jets)
class Plane: Air {
GVAR(space) = 0;
GVAR(hasCargo) = 0;
};
class Plane_Base_F: Plane {};
class Plane_Civil_01_base_F: Plane_Base_F { // Tanoa Civilian Prop Plane
GVAR(space) = 2;
GVAR(hasCargo) = 1;
};
class VTOL_Base_F;
class VTOL_01_base_F: VTOL_Base_F {
GVAR(space) = 4;

View File

@ -2,7 +2,9 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
GVAR(initializedItemClasses) = [];
GVAR(initializedVehicleClasses) = [];

View File

@ -21,7 +21,7 @@ TRACE_2("params",_player,_object);
if (!([_player, _object, []] call EFUNC(common,canInteractWith))) exitWith {false};
private _nearestVehicle = [_player] call FUNC(findNearestVehicle);
private _nearestVehicle = [_player, _object] call FUNC(findNearestVehicle);
if (_nearestVehicle isKindOf "Cargo_Base_F" || isNull _nearestVehicle) then {
{

View File

@ -20,6 +20,11 @@ params [["_item", "", [objNull,""]], "_vehicle"];
if (speed _vehicle > 1 || {((getPos _vehicle) select 2) > 3}) exitWith {TRACE_1("vehicle not stable",_vehicle); false};
if (_item isEqualType objNull && {{alive _x && {getText (configFile >> "CfgVehicles" >> typeOf _x >> "simulation") != "UAVPilot"}} count crew _item > 0}) exitWith {
TRACE_1("item is occupied",_item);
false
};
private _itemSize = [_item] call FUNC(getSizeItem);
private _validItem = false;
if (_item isEqualType "") then {

View File

@ -1,35 +1,41 @@
/*
* Author: Glowbal
* Get nearest vehicle from unit, priority: Car-Air-Tank-Ship.
* Get nearest vehicle from unit that is not excluded, priority: Car-Air-Tank-Ship.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Object to exclude <OBJECT>
*
* Return Value:
* Vehicle in Distance <OBJECT>
*
* Example:
* [unit] call ace_cargo_fnc_findNearestVehicle
* [unit, object] call ace_cargo_fnc_findNearestVehicle
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit"];
params ["_unit","_object"];
private _loadCar = nearestObject [_unit, "car"];
if (_unit distance _loadCar <= MAX_LOAD_DISTANCE) exitWith {_loadCar};
private _loadCar = nearestObjects [_unit, ["car"], MAX_LOAD_DISTANCE];
_loadCar deleteAt (_loadCar find _object);
if !(_loadCar isEqualTo []) exitWith {_loadCar select 0};
private _loadHelicopter = nearestObject [_unit, "air"];
if (_unit distance _loadHelicopter <= MAX_LOAD_DISTANCE) exitWith {_loadHelicopter};
private _loadHelicopter = nearestObjects [_unit, ["air"], MAX_LOAD_DISTANCE];
_loadHelicopter deleteAt (_loadHelicopter find _object);
if !(_loadHelicopter isEqualTo []) exitWith {_loadHelicopter select 0};
private _loadTank = nearestObject [_unit, "tank"];
if (_unit distance _loadTank <= MAX_LOAD_DISTANCE) exitWith {_loadTank};
private _loadTank = nearestObjects [_unit, ["tank"], MAX_LOAD_DISTANCE];
_loadTank deleteAt (_loadTank find _object);
if !(_loadTank isEqualTo []) exitWith {_loadTank select 0};
private _loadShip = nearestObject [_unit, "ship"];
if (_unit distance _loadShip <= MAX_LOAD_DISTANCE) exitWith {_loadShip};
private _loadShip = nearestObjects [_unit, ["ship"], MAX_LOAD_DISTANCE];
_loadShip deleteAt (_loadShip find _object);;
if !(_loadShip isEqualTo []) exitWith {_loadShip select 0};
private _loadContainer = nearestObject [_unit,"Cargo_base_F"];
if (_unit distance _loadContainer <= MAX_LOAD_DISTANCE) exitWith {_loadContainer};
private _loadContainer = nearestObjects [_unit, ["Cargo_base_F"], MAX_LOAD_DISTANCE];
_loadContainer deleteAt (_loadContainer find _object);
if !(_loadContainer isEqualTo []) exitWith {_loadContainer select 0};
objNull

View File

@ -19,7 +19,7 @@
params ["_player", "_object"];
TRACE_2("params",_player,_object);
private _vehicle = [_player] call FUNC(findNearestVehicle);
private _vehicle = [_player, _object] call FUNC(findNearestVehicle);
if ((isNull _vehicle) || {_vehicle isKindOf "Cargo_Base_F"}) then {
{

View File

@ -44,7 +44,7 @@ class CfgWeapons {
descriptionShort = CSTRING(Shield_Empty_DescriptionShort);
model = "\A3\weapons_F\ammo\mag_univ.p3d";
picture = QPATHTOF(UI\ace_chemlight_shield_x_ca.paa);
scope = 1;
scope = 2;
class ItemInfo: InventoryItem_Base_F {
mass = 1;
};

View File

@ -3,6 +3,8 @@
ADDON = false;
LOG(MSG_INIT);
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
ADDON = true;

View File

@ -5,16 +5,19 @@
<English>Chemlights</English>
<Japanese>ケミライト</Japanese>
<Polish>Świetliki</Polish>
<German>Knicklichter</German>
</Key>
<Key ID="STR_ACE_Chemlights_Action_Prepare">
<English>Prepare %1</English>
<Japanese>%1 をつかう</Japanese>
<Polish>Przygotuj %1</Polish>
<German>%1 vorbereiten</German>
</Key>
<Key ID="STR_ACE_Chemlights_Action_Prepare_Done">
<English>%1&lt;br/&gt;Prepared</English>
<Japanese>%1&amp;lt;br/&amp;gt; をつかった</Japanese>
<Polish>%1&lt;br/&gt;Przygotowany</Polish>
<German>%1&lt;br/&gt;vorbereitet</German>
</Key>
<Key ID="STR_ACE_Chemlights_Inventory_Full">
<English>No inventory space</English>
@ -33,180 +36,216 @@
<English>[ACE] Chemlights</English>
<Japanese>[ACE] ケミライト</Japanese>
<Polish>[ACE] Świetliki</Polish>
<German>[ACE] Knicklichter</German>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DisplayName">
<English>Chemlight (Orange)</English>
<Japanese>ケミライト (オレンジ)</Japanese>
<Polish>Świetlik (pomarańczowy)</Polish>
<German>Knicklicht (orange)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DisplayNameShort">
<English>Orange Light</English>
<Japanese>オレンジ色</Japanese>
<Polish>Pomarańczowe światło</Polish>
<German>Oranges Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DescriptionShort">
<English>Type: Light - Orange&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - オレンジ&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - pomarańczowe&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - orange&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_White_DisplayName">
<English>Chemlight (White)</English>
<Japanese>ケミライト (白)</Japanese>
<Polish>Świetlik (biały)</Polish>
<German>Knicklicht (weiß)</German>
</Key>
<Key ID="STR_ACE_Chemlights_White_DisplayNameShort">
<English>White Light</English>
<Japanese>白色</Japanese>
<Polish>Białe światło</Polish>
<German>Weißes Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_White_DescriptionShort">
<English>Type: Light - White&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 白&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - białe&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - weiß&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DisplayName">
<English>Chemlight (Hi Red)</English>
<Japanese>ケミライト (高輝度 赤)</Japanese>
<Polish>Świetlik (jaskrawy czerwony)</Polish>
<German>Knicklicht (rot, hell)</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DisplayNameShort">
<English>Red Hi Light</English>
<Japanese>高輝度の赤色</Japanese>
<Polish>Jaskrawe czerwone światło</Polish>
<German>Helles, rotes Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DescriptionShort">
<English>Type: Light - Red Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 赤 (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe czerwone (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - rot, hell (5 Minuten)&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayName">
<English>Chemlight (Hi Yellow)</English>
<Japanese>ケミライト (高輝度 黄)</Japanese>
<Polish>Świetlik (jaskrawy żółty)</Polish>
<German>Knicklicht (gelb, hell)</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayNameShort">
<English>Yellow Hi Light</English>
<Japanese>高輝度の黄色</Japanese>
<Polish>Jaskrawe żółte światło</Polish>
<German>Helles, gelbes Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DescriptionShort">
<English>Type: Light - Yellow Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 黄 (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe żółte (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - gelb, hell (5 Minuten)&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DisplayName">
<English>Chemlight (Hi Orange)</English>
<Japanese>ケミライト (高輝度 オレンジ)</Japanese>
<Polish>Świetlik (jaskrawy pomarańczowy)</Polish>
<German>Knicklicht (orange, hell)</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DisplayNameShort">
<English>Orange Hi Light</English>
<Japanese>高輝度のオレンジ</Japanese>
<Polish>Jaskrawe pomarańczowe światło</Polish>
<German>Helles, oranges Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DescriptionShort">
<English>Type: Light - Orange Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 オレンジ (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe pomarańczowe (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - orange, hell (5 Minuten)&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayName">
<English>Chemlight (Hi White)</English>
<Japanese>ケミライト (高輝度 白)</Japanese>
<Polish>Świetlik (jaskrawy biały)</Polish>
<German>Knicklicht (weiß, hell)</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayNameShort">
<English>White Hi Light</English>
<Japanese>高輝度の白色</Japanese>
<Polish>Jaskrawe białe światło</Polish>
<German>Helles, weißes Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DescriptionShort">
<English>Type: Light - White Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 白 (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe białe (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - weiß, hell (5 Minuten)&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DisplayName">
<English>Chemlight (IR)</English>
<Japanese>ケミライト (IR)</Japanese>
<Polish>Świetlik (podczerwony)</Polish>
<German>Knicklicht (IR)</German>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DisplayNameShort">
<English>IR Light</English>
<Japanese>赤外線光</Japanese>
<Polish>Światło podczerwone</Polish>
<German>IR-Knicklicht</German>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DescriptionShort">
<English>Type: Light - Infrared&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 赤外線&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - podczerwone&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<German>Typ: Licht - infrarot&lt;br /&gt;Anzahl: 1&lt;br /&gt;Benutzt in: Hand</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Empty_DisplayName">
<English>Chemlight Shield (Empty)</English>
<Japanese>ケミライト シールド (空)</Japanese>
<Polish>Osłona na świetlik (pusta)</Polish>
<German>Knicklicht-Abschirmung (leer)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Empty_DescriptionShort">
<English>Shield for chemlights. Combine with chemlight to prepare reading light.</English>
<Japanese>ケミライトを入れられます。シールドとケミライトを組み合わせることで、照明にもなりえます。</Japanese>
<Polish>Osłona na świetliki. Połącz ją ze świetlikiem by stworzyć lampkę do czytania.</Polish>
<German>Abschirmung für Knicklichter. Mit Knicklicht kombinieren, um Leselicht zu erhalten.</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DisplayName">
<English>Chemlight Shield (Green)</English>
<Japanese>ケミライト シールド (緑)</Japanese>
<Polish>Osłona na świetlik (zielona)</Polish>
<German>Knicklicht-Abschirmung (grün)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DescriptionShort">
<English>Green reading light.</English>
<Japanese>緑色の照明。</Japanese>
<Polish>Zielona lampka.</Polish>
<German>Grünes Leselicht.</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DisplayName">
<English>Chemlight Shield (Red)</English>
<Japanese>ケミライト シールド (赤)</Japanese>
<Polish>Osłona na świetlik (czerwona)</Polish>
<German>Knicklicht-Abschirmung (rot)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DescriptionShort">
<English>Red reading light.</English>
<Japanese>赤色の照明。</Japanese>
<Polish>Czerwona lampka.</Polish>
<German>Rotes Leselicht.</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DisplayName">
<English>Chemlight Shield (Blue)</English>
<Japanese>ケミライト シールド (青)</Japanese>
<Polish>Osłona na świetlik (niebieska)</Polish>
<German>Knicklicht-Abschirmung (blau)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DescriptionShort">
<English>Blue reading light.</English>
<Japanese>青色の照明。</Japanese>
<Polish>Niebieska lampka.</Polish>
<German>Blaues Leselicht.</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DisplayName">
<English>Chemlight Shield (Yellow)</English>
<Japanese>ケミライト シールド (黄)</Japanese>
<Polish>Osłona na świetlik (żółta)</Polish>
<German>Knicklicht-Abschirmung (gelb)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DescriptionShort">
<English>Yellow reading light.</English>
<Japanese>黄色の照明。</Japanese>
<Polish>Żółta lampka.</Polish>
<German>Gelbes Leselicht.</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DisplayName">
<English>Chemlight Shield (Orange)</English>
<Japanese>ケミライト シールド (オレンジ)</Japanese>
<Polish>Osłona na świetlik (pomarańczowa)</Polish>
<German>Knicklicht-Abschirmung (orange)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DescriptionShort">
<English>Orange reading light.</English>
<Japanese>オレンジの照明。</Japanese>
<Polish>Pomarańczowa lampka.</Polish>
<German>Oranges Leselicht.</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DisplayName">
<English>Chemlight Shield (White)</English>
<Japanese>ケミライト シールド (白)</Japanese>
<Polish>Osłona na świetlik (biała)</Polish>
<German>Knicklicht-Abschirmung (weiß)</German>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DescriptionShort">
<English>White reading light.</English>
<Japanese>白の照明。</Japanese>
<German>Weißes Leselicht.</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -142,6 +142,7 @@ PREP(setHearingCapability);
PREP(setName);
PREP(setParameter);
PREP(setPitchBankYaw);
PREP(setPlayerOwner);
PREP(setProne);
PREP(setSetting);
PREP(setSettingFromConfig);

View File

@ -3,7 +3,9 @@
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
GVAR(syncedEvents) = [] call CBA_fnc_hashCreate;
GVAR(showHudHash) = [] call CBA_fnc_hashCreate;

View File

@ -0,0 +1,54 @@
/*
* Author: PabstMirror
* Sets the player's owner id as a variable on his player ojbect.
* Should be called on all machines (including server)
* Note: Needs to wait for CBA_clientID to be recieved from server.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_common_fnc_setPlayerOwner
*
* Public: No
*/
// #define DEBUG_MODE_FULL
#include "script_component.hpp"
if (missionNameSpace getVariable [QGVAR(setPlayerOwnerRunning), false]) exitWith {};
GVAR(setPlayerOwnerRunning) = true;
if (isServer) then {
addMissionEventHandler ["HandleDisconnect", {
params ["_dcPlayer"];
TRACE_1("HandleDisconnect eh",_dcPlayer);
if (!isNil {_dcPlayer getVariable QGVAR(playerOwner)}) then {
_dcPlayer setVariable [QGVAR(playerOwner), nil, true];
};
}];
};
if (hasInterface) then {
[{
(!isNil "CBA_clientID") && {CBA_clientID > -1}
}, {
TRACE_1("CBA_clientID ready",CBA_clientID);
["unit", {
params ["_newUnit", "_oldUnit"];
TRACE_2("unit changed",_newUnit,_oldUnit);
if ((_oldUnit getVariable [QGVAR(playerOwner), -1]) == CBA_clientID) then {
_oldUnit setVariable [QGVAR(playerOwner), nil, true];
};
if (alive _newUnit) then {
_newUnit setVariable [QGVAR(playerOwner), CBA_clientID, true];
};
}, true] call CBA_fnc_addPlayerEventHandler;
}, []] call CBA_fnc_waitUntilAndExecute;
};

View File

@ -38,13 +38,13 @@ _bounds params ["_boundsMin", "_boundsMax"];
_boundsMin params ["_boundsMinX", "_boundsMinY", "_boundsMinZ"];
_boundsMax params ["_boundsMaxX", "_boundsMaxY", "_boundsMaxZ"];
_boundsMinX = _boundsMinX - _marginsX + _offsetsX;
_boundsMinY = _boundsMinY - _marginsY + _offsetsY;
_boundsMinZ = _boundsMinZ - _marginsZ + _offsetsZ;
_boundsMinX = ((_boundsMinX - _marginsX) min 0) + _offsetsX;
_boundsMinY = ((_boundsMinY - _marginsY) min 0) + _offsetsY;
_boundsMinZ = ((_boundsMinZ - _marginsZ) min 0) + _offsetsZ;
_boundsMaxX = _boundsMaxX + _marginsX + _offsetsX;
_boundsMaxY = _boundsMaxY + _marginsY + _offsetsY;
_boundsMaxZ = _boundsMaxZ + _marginsZ + _offsetsZ;
_boundsMaxX = ((_boundsMaxX + _marginsX) max 0) + _offsetsX;
_boundsMaxY = ((_boundsMaxY + _marginsY) max 0) + _offsetsY;
_boundsMaxZ = ((_boundsMaxZ + _marginsZ) max 0) + _offsetsZ;
private _boundsCorners = [
[_boundsMinX, _boundsMinY, _boundsMinZ],

Some files were not shown because too many files have changed in this diff Show More