diff --git a/README.md b/README.md index 7e1ffe1672..72b1336b57 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@

- ACE version - - + ACE download diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 9d3708959c..dd19f1d0d4 100644 Binary files a/ace_advanced_ballistics.dll and b/ace_advanced_ballistics.dll differ diff --git a/ace_medical.dll b/ace_medical.dll index cab14d4a19..1f4f71d5ca 100644 Binary files a/ace_medical.dll and b/ace_medical.dll differ diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 63942ca799..eed6e20be3 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -30,142 +30,166 @@ Zaawansowana balistyka Balística avanzada Erweiterte Ballistik + Pokročilá balistika Advanced Ballistics Zaawansowana balistyka Balística avanzada Erweiterte Ballistik + Pokročilá balistika Enables advanced ballistics Aktywuje zaawansowaną balistykę Activa la balística avanzada Aktiviert die erweiterte Ballistik + Aktivuje pokročilou balistiku Enabled For Snipers Activada para francotiradores Akt. dla snajperów Für Scharfschützen aktiviert + Povoleno pro odstřelovače Enables advanced ballistics for non local snipers (when using high power optics) Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica) Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki) Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung) + Aktivuje pokročilou balistiku pro nelokální odstřelovače (když používá výkonnou optiku) Enabled For Group Members Activada para miembros de grupo Akt. dla czł. grupy Für Gruppenmitglieder aktiviert + Povoleno pro členy skupiny Enables advanced ballistics for non local group members Activada la balística avanzada para miembros de grupo no locales Aktywuje zaawansowaną balistykę dla nielokalnych członków grupy Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder + Aktivuje pokročilou balistiku pro nelokální členy skupiny Enabled For Everyone Activada para todos Akt. dla wszystkich Für jeden aktiviert + Povoleno pro všechny Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer) Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador). Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia) Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen) + Aktivovat pokročilou balistiku pro všechny nelokální hráče (aktivace této možnosti způsobuje pokles snímu za sekundu během těžké přestřelky v multiplayeru) Always Enabled For Group Members Zawsze akt. dla czł. grupy Siempre activada para miembros de grupo Für Gruppenmitglieder immer aktiviert + Vždy povoleno pro členy skupiny Always enables advanced ballistics when a group member fires Aktywuje zaawansowaną balistykę dla wszystkich członków grupy Activada la balística avanzada siempre cuando miembros de grupo disparan Aktiviert die erweiterte Ballistik immer, wenn ein Gruppenmitglied schießt + Aktivuje pokročilou balistiku pro členy skupiny Disabled In FullAuto Mode Wył. podczas ognia auto. Desactivada en modo automático Beim vollautomatischen Feuern deaktiviert + Zakázáno v automatickém režimu střelby Disables the advanced ballistics during full auto fire Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego Desactivada la balística avanzada durante el fuego automático Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern + Zákáže pokročilou balistiku během střelby v režimu automat Enable Ammo Temperature Simulation Symulacja temp. amunicji Activar simulación de temperatura de munición Simulation der Munitionstemperatur aktivieren + Povolit simulaci teploty munice Muzzle velocity varies with ammo temperature Prędkość wylotowa pocisku jest zależna od temperatury amunicji La velocidad de salida varía con la temperatura de la munición Munitionstemperatur hat Einfluss auf die Mündungsgeschwindigkeit + Úsťová rychlost je závislá na teplotě munice Enable Barrel Length Simulation Symulacja długości lufy Habilitar la simulación de longitud del cañón Simulation der Lauflänge aktivieren + Povolit simulaci délky hlavně Muzzle velocity varies with barrel length Prędkość wylotowa pocisku jest zależna od długości lufy La velocidad de salidal varía con la longitud del cañón Lauflänge beeinflusst Mündungsgeschwindigkeit + Úsťová rychlost je závislá na délce hlavně Enable Bullet Trace Effect Efekt smugi pocisku Activar el efecto trazador de la bala Geschossspureffekt aktivieren + Povolit efekt trasírek Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics) Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę) Activa el efecto trazador de la balas de gran calibre (solo visible cuando se mira a través de una mira telescópica) Aktiviere Geschossspureffekt für hohe Kaliber (bei Benutzung von Optiken mit starker Vergrößerung) + Aktivuje efekt trasírek z vysokokaliberních zbraní (viditelné pouze skrze výkonnou optiku) Simulation Interval Interwał symulacji Intervalo de simulación Simulationsintervall + Interval simulace Defines the interval between every calculation step Określa interwał pomiędzy każdym krokiem kalkulacji Define el intervalo entre cada cálculo Legt das Intervall zwischen den Berechnungsschritten fest + Určuje interval mezi každým výpočtem Simulation Radius Zasięg symulacji Radio de simulación Simulationsradius + Rozsah simulace Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków Define el radio alrededor del jugador (en metros) en el cual se aplica la balística avanzada a los proyectiles Gibt den Radius (in Metern) um den Spieler an, bei dem die erweiterte Ballistik auf Geschosse angewendet wird + Určuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektil Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki. + Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice. - + \ No newline at end of file diff --git a/addons/apl/data/plech.paa b/addons/apl/data/plech.paa new file mode 100644 index 0000000000..240e1ce03f Binary files /dev/null and b/addons/apl/data/plech.paa differ diff --git a/addons/atragmx/initKeybinds.sqf b/addons/atragmx/initKeybinds.sqf index 730ec4daed..c2ab01d217 100644 --- a/addons/atragmx/initKeybinds.sqf +++ b/addons/atragmx/initKeybinds.sqf @@ -11,4 +11,26 @@ false }, {false}, -[0, [false, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key) \ No newline at end of file +[0, [false, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key) + + +//Add deviceKey entry: +private ["_conditonCode", "_toggleCode", "_closeCode"]; +_conditonCode = { + [] call FUNC(can_show); +}; +_toggleCode = { + // Conditions: canInteract + if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {}; + if (GVAR(active)) exitWith { + closeDialog 0; + }; + // Statement + [] call FUNC(create_dialog); +}; +_closeCode = { + if (GVAR(active)) exitWith { + closeDialog 0; + }; +}; +[(localize LSTRING(Name)), QUOTE(PATHTOF(UI\ATRAG_Icon.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew); diff --git a/addons/attach/functions/fnc_detach.sqf b/addons/attach/functions/fnc_detach.sqf index 90c305329b..92df83b5c1 100644 --- a/addons/attach/functions/fnc_detach.sqf +++ b/addons/attach/functions/fnc_detach.sqf @@ -60,7 +60,7 @@ if (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) then detach _attachedObject; _attachedObject setPos ((getPos _unit) vectorAdd [0, 0, -1000]); // Delete attached item after 0.5 seconds - [{deleteVehicle (_this select 0)}, [_attachedObject], 0.5, 0] call EFUNC(common,waitAndExecute); + [{deleteVehicle (_this select 0)}, [_attachedObject], 2] call EFUNC(common,waitAndExecute); } else { // Delete attached item deleteVehicle _attachedObject; diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index 96e4f720a6..171d7936b8 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -1597,6 +1597,7 @@ [ACE] Skrzynka z amunicją [ACE] Caja de suministros de munición [ACE] Munitionskiste + [ACE] Bedna s municí - + \ No newline at end of file diff --git a/addons/captives/CfgVehicles.hpp b/addons/captives/CfgVehicles.hpp index 3a3b0722fb..746a1c4b63 100644 --- a/addons/captives/CfgVehicles.hpp +++ b/addons/captives/CfgVehicles.hpp @@ -56,15 +56,12 @@ class CfgVehicles { priority = 2.2; hotkey = "L"; }; - class ACE_FriskPerson { - displayName = CSTRING(FriskPerson); - distance = 2; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canFriskPerson)); - statement = QUOTE([ARR_2(_player, _target)] call FUNC(doFriskPerson)); - showDisabled = 0; - //icon = ""; //@todo - priority = 3; - hotkey = "F"; + class GVAR(UnloadCaptive) { + displayName = CSTRING(UnloadCaptive); + distance = 4; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); + priority = 1.2; }; }; }; @@ -111,13 +108,6 @@ class CfgVehicles { exceptions[] = {"isNotEscorting"}; \ priority = 1.2; \ }; \ - class GVAR(UnloadCaptive) { \ - displayName = CSTRING(UnloadCaptive); \ - distance = 4; \ - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \ - statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \ - priority = 1.2; \ - }; \ }; \ }; diff --git a/addons/captives/functions/fnc_canEscortCaptive.sqf b/addons/captives/functions/fnc_canEscortCaptive.sqf index 85bd8bbd3e..1d9480fd0b 100644 --- a/addons/captives/functions/fnc_canEscortCaptive.sqf +++ b/addons/captives/functions/fnc_canEscortCaptive.sqf @@ -23,4 +23,6 @@ PARAMS_2(_unit,_target); (_target getVariable [QGVAR(isHandcuffed), false]) && {isNull (attachedTo _target)} && {alive _target} && -{!(_target getVariable ["ACE_isUnconscious", false])} +{!(_target getVariable ["ACE_isUnconscious", false])} && +{(vehicle _unit) == _unit} && +{(vehicle _target) == _target} diff --git a/addons/captives/functions/fnc_canUnloadCaptive.sqf b/addons/captives/functions/fnc_canUnloadCaptive.sqf index a86bdae588..59e798a24c 100644 --- a/addons/captives/functions/fnc_canUnloadCaptive.sqf +++ b/addons/captives/functions/fnc_canUnloadCaptive.sqf @@ -3,15 +3,14 @@ * Check if the unit can unload a captive from the vehicle. * * Arguments: - * 0: Unit that wants to unload a captive - * 1: A captive. ObjNull for the first escorted captive - * 2: Vehicle to unload a captive from + * 0: Unit that wants to unload a captive (player) + * 1: A captive loaded in a vehicle * * Return Value: * The return value * * Example: - * [player, bob, car1] call ACE_captives_fnc_canUnloadCaptive; + * [player, bob] call ACE_captives_fnc_canUnloadCaptive; * * Public: No */ @@ -19,10 +18,6 @@ private ["_cargo"]; -PARAMS_2(_unit,_vehicle); +PARAMS_2(_player,_unit); -_cargo = crew _vehicle; // Can also unload from driver, gunner, commander, turret positions. They shouldn't be there anyway. - -_cargo = [_cargo, {_this getVariable [QGVAR(isHandcuffed), false]}] call EFUNC(common,filter); - -count _cargo > 0 +((vehicle _unit) != _unit) && {_unit getVariable [QGVAR(isHandcuffed), false]} diff --git a/addons/captives/functions/fnc_doUnloadCaptive.sqf b/addons/captives/functions/fnc_doUnloadCaptive.sqf index b7fa57a7bb..5d95189742 100644 --- a/addons/captives/functions/fnc_doUnloadCaptive.sqf +++ b/addons/captives/functions/fnc_doUnloadCaptive.sqf @@ -4,29 +4,18 @@ * * Arguments: * 0: Unit that wants to unload a captive - * 1: Vehicle to unload a captive from. + * 1: A captive loaded in a vehicle * * Return Value: * Nothing * * Example: - * [bob, car] call ACE_captives_fnc_doUnloadCaptive + * [bob, prisoner] call ACE_captives_fnc_doUnloadCaptive * * Public: No */ #include "script_component.hpp" -PARAMS_2(_unit,_vehicle); +PARAMS_2(_unit,_target); -private ["_cargo", "_target"]; - -_cargo = crew _vehicle; // Can also unload from driver, gunner, commander, turret positions. They shouldn't be there anyway. - -_cargo = [_cargo, {_this getVariable [QGVAR(isHandcuffed), false]}] call EFUNC(common,filter); - -if ((count _cargo) > 0) then { - _target = _cargo select 0; - ["MoveOutCaptive", [_target], [_target]] call EFUNC(common,targetEvent); -} else { - ERROR("No captive to unload"); -}; +["MoveOutCaptive", [_target], [_target]] call EFUNC(common,targetEvent); diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 45dec9ce51..19ab9050a3 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -162,42 +162,50 @@ Skapituluj jednostkę Hacer que la unidad se rinda Einheit kapitulieren lassen + Vzdávající se jednotka Sync a unit to make them surrender.<br />Source: ace_captives Zsynchronizuj z jednostką, aby skapitulowała.<br />Źródło: ace_captives Sincroniza una unidad para hacer que se rinda.<br />Fuente: ace_captives Einheit synchronisieren, um sie kapitulieren zu lassen.<br />Quelle: ace_captives + Synchronizuj s jednotkou, která se má vzdát.<br />Zdroj: ace_captives Captives Settings Ustawienia więźniów Ajustes de prisioneros + Nastavení zajatce Controls settings for surrender and cable ties Moduł ten kontroluje ustawienia kapitulacji oraz opasek zaciskowych Ajustes de control para rendición y precintos + Toto kontroluje nastavení kapitulace a pout Can handcuff own side Skuwanie sojuszników Se puede esposar el bando propio + Může spoutat spolubojovníky Can players cabletie units on their own side Czy gracze mogą skuwać sojuszników? Pueden los jugadores esposar unidades en su propio bando + Mohou hráči spoutat jednotky na své straně Allow surrendering Pozwól kapitulować Permitir rendición + Povolit vzdávání Players can surrender after holstering their weapon Gracze mogą skapitulować po schowaniu swojej broni do kabury Los jugadores pueden rendirse después de enfundar su arma + Hráč se může vzdát poté, co si skryje zbraň \ No newline at end of file diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 97cddb84a3..3796a4fdc8 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -41,6 +41,8 @@ ["fixFloating", DFUNC(fixFloating)] call FUNC(addEventhandler); ["fixPosition", DFUNC(fixPosition)] call FUNC(addEventhandler); +["unloadPersonEvent", DFUNC(unloadPersonLocal)] call FUNC(addEventhandler); + ["lockVehicle", { _this setVariable [QGVAR(lockStatus), locked _this]; _this lock 2; @@ -101,6 +103,52 @@ if(!isServer) then { call FUNC(checkFiles); + +// Create a pfh to wait until all postinits are ready and settings are initialized +[{ + PARAMS_1(_args); + EXPLODE_1_PVT(_args,_waitingMsgSent); + // If post inits are not ready then wait + if !(SLX_XEH_MACHINE select 8) exitWith {}; + + // If settings are not initialized then wait + if (isNil QGVAR(settings) || {(!isServer) && (isNil QEGVAR(modules,serverModulesRead))}) exitWith { + if (!_waitingMsgSent) then { + _args set [0, true]; + diag_log text format["[ACE] Waiting on settings from server"]; + }; + }; + + [(_this select 1)] call cba_fnc_removePerFrameHandler; + + diag_log text format["[ACE] Settings received from server"]; + + // Event so that ACE_Modules have their settings loaded: + ["InitSettingsFromModules", []] call FUNC(localEvent); + + // Load user settings from profile + if (hasInterface) then { + call FUNC(loadSettingsFromProfile); + call FUNC(loadSettingsLocalizedText); + }; + + diag_log text format["[ACE] Settings initialized"]; + + //Event that settings are safe to use: + ["SettingsInitialized", []] call FUNC(localEvent); + +}, 0, [false]] call cba_fnc_addPerFrameHandler; + + +["SettingsInitialized", { + [ + GVAR(checkPBOsAction), + GVAR(checkPBOsCheckAll), + call compile GVAR(checkPBOsWhitelist) + ] call FUNC(checkPBOs) +}] call FUNC(addEventHandler); + + /***************************************************************/ /***************************************************************/ /***************************************************************/ @@ -269,47 +317,41 @@ if(isMultiplayer && { ACE_time > 0 || isNull player } ) then { }, 0, []] call cba_fnc_addPerFrameHandler; }; -["SettingsInitialized", { - [ - GVAR(checkPBOsAction), - GVAR(checkPBOsCheckAll), - call compile GVAR(checkPBOsWhitelist) - ] call FUNC(checkPBOs) -}] call FUNC(addEventHandler); +//Device Handler: +GVAR(deviceKeyHandlingArray) = []; +GVAR(deviceKeyCurrentIndex) = -1; + +["ACE3 Equipment", QGVAR(openDevice), (localize "STR_ACE_Common_toggleHandheldDevice"), +{ + [] call FUNC(deviceKeyFindValidIndex); + if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false}; + [] call ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 3); + true +}, +{false}, +[0xC7, [false, false, false]], false] call cba_fnc_addKeybind; //Home Key + +["ACE3 Equipment", QGVAR(closeDevice), (localize "STR_ACE_Common_closeHandheldDevice"), +{ + [] call FUNC(deviceKeyFindValidIndex); + if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false}; + [] call ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 4); + true +}, +{false}, +[0xC7, [false, true, false]], false] call cba_fnc_addKeybind; //CTRL + Home Key + +["ACE3 Equipment", QGVAR(cycleDevice), (localize "STR_ACE_Common_cycleHandheldDevices"), +{ + [1] call FUNC(deviceKeyFindValidIndex); + if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false}; + _displayName = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 0); + _iconImage = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 1); + [_displayName, _iconImage] call FUNC(displayTextPicture); + true +}, +{false}, +[0xC7, [true, false, false]], false] call cba_fnc_addKeybind; //SHIFT + Home Key + GVAR(commonPostInited) = true; - -// Create a pfh to wait until all postinits are ready and settings are initialized -[{ - PARAMS_1(_args); - EXPLODE_1_PVT(_args,_waitingMsgSent); - // If post inits are not ready then wait - if !(SLX_XEH_MACHINE select 8) exitWith {}; - - // If settings are not initialized then wait - if (isNil QGVAR(settings)) exitWith { - if (!_waitingMsgSent) then { - _args set [0, true]; - diag_log text format["[ACE] Waiting on settings from server"]; - }; - }; - - [(_this select 1)] call cba_fnc_removePerFrameHandler; - - diag_log text format["[ACE] Settings received from server"]; - - // Event so that ACE_Modules have their settings loaded: - ["InitSettingsFromModules", []] call FUNC(localEvent); - - // Load user settings from profile - if (hasInterface) then { - call FUNC(loadSettingsFromProfile); - call FUNC(loadSettingsLocalizedText); - }; - - diag_log text format["[ACE] Settings initialized"]; - - //Event that settings are safe to use: - ["SettingsInitialized", []] call FUNC(localEvent); - -}, 0, [false]] call cba_fnc_addPerFrameHandler; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index d16f4878be..72e85e4b6b 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -11,7 +11,6 @@ PREP(addCanInteractWithCondition); PREP(addLineToDebugDraw); PREP(addSetting); PREP(addToInventory); -PREP(adminKick); PREP(ambientBrightness); PREP(applyForceWalkStatus); PREP(ASLToPosition); @@ -35,6 +34,8 @@ PREP(currentChannel); PREP(debug); PREP(debugModule); PREP(defineVariable); +PREP(deviceKeyFindValidIndex); +PREP(deviceKeyRegisterNew); PREP(disableAI); PREP(disableUserInput); PREP(displayIcon); diff --git a/addons/common/functions/fnc_adminKick.sqf b/addons/common/functions/fnc_adminKick.sqf deleted file mode 100644 index bc9afd9fcb..0000000000 --- a/addons/common/functions/fnc_adminKick.sqf +++ /dev/null @@ -1,8 +0,0 @@ -// by commy2 -#include "script_component.hpp" - -private "_name"; - -_name = name (_this select 0); - -[_name, "{if (serverCommandAvailable '#kick') then {serverCommand format['#kick %1', _this]}}"] call FUNC(execRemoteFnc); diff --git a/addons/common/functions/fnc_checkPBOs.sqf b/addons/common/functions/fnc_checkPBOs.sqf index f239074b0b..4733f1a81f 100644 --- a/addons/common/functions/fnc_checkPBOs.sqf +++ b/addons/common/functions/fnc_checkPBOs.sqf @@ -67,24 +67,26 @@ if (!isServer) then { //[_error, "{systemChat _this}"] call FUNC(execRemoteFnc); diag_log text _error; - _text = composeText [lineBreak, parseText format ["%1", _text]]; + if (_mode < 2) then { + _text = composeText [lineBreak, parseText format ["%1", _text]]; - _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer; - _rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true]; + _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer; + _rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true]; - disableSerialization; - _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint"; - _ctrlHint ctrlSetStructuredText _text; + disableSerialization; + _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint"; + _ctrlHint ctrlSetStructuredText _text; - if (_mode == 0) then { - sleep 10; - _rscLayer cutFadeOut 0.2; + if (_mode == 0) then { + sleep 10; + _rscLayer cutFadeOut 0.2; + }; }; if (_mode == 2) then { - sleep 10; - waitUntil {alive player}; - [player] call FUNC(adminKick); + waitUntil {alive player}; // To be able to show list if using checkAll + _text = composeText [parseText format ["%1", _text]]; + ["[ACE] ERROR", _text, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); }; }; }; diff --git a/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf b/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf new file mode 100644 index 0000000000..a8418cd4cd --- /dev/null +++ b/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf @@ -0,0 +1,45 @@ +/* + * Author: PabstMirror + * Finds next valid index for the device array. + * + * Arguments: + * 0: Offset from currentIndex (use 1 to find next valid after current) or a displayName string or + * + * Return Value: + * The new index (-1 if no valid) + * + * Example: + * [] call ace_common_fnc_deviceKeyFindValidIndex + * ["kestral4500"] call ace_common_fnc_deviceKeyFindValidIndex + * + * Public: No + */ +#include "script_component.hpp" + +DEFAULT_PARAM(0,_searchOffsetOrName,0); + +private ["_validIndex", "_offsetBy", "_realIndex", "_offset"]; + +_validIndex = -1; + +if ((typeName _searchOffsetOrName) == "STRING") then { + { + if ((_x select 0) == _searchOffsetOrName) exitWith { + _validIndex = _forEachIndex; + }; + } forEach GVAR(deviceKeyHandlingArray); +} else { + if ((count GVAR(deviceKeyHandlingArray)) > 0) then { + _baseIndex = if (GVAR(deviceKeyCurrentIndex) == -1) then {0} else {GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName}; + for "_offset" from _baseIndex to ((count GVAR(deviceKeyHandlingArray)) - 1 + _baseIndex) do { + _realIndex = _offset % (count GVAR(deviceKeyHandlingArray)); + if ([] call ((GVAR(deviceKeyHandlingArray) select _realIndex) select 2)) exitWith { + _validIndex = _realIndex; + }; + }; + }; +}; + +GVAR(deviceKeyCurrentIndex) = _validIndex; + +GVAR(deviceKeyCurrentIndex) diff --git a/addons/common/functions/fnc_deviceKeyRegisterNew.sqf b/addons/common/functions/fnc_deviceKeyRegisterNew.sqf new file mode 100644 index 0000000000..88ffa84af7 --- /dev/null +++ b/addons/common/functions/fnc_deviceKeyRegisterNew.sqf @@ -0,0 +1,25 @@ +/* + * Author: PabstMirror + * Finds next valid index for the device array. + * + * Arguments: + * 0: Localized Device Display Name + * 1: Image + * 2: Condtion Code (do they have the device) + * 3: Toggle Code (on home press) + * 4: Close Code (on ctrl-home press) + * + * Return Value: + * Nothing + * + * Example: + * [(localize "STR_ACE_microdagr_itemName"), QUOTE(PATHTOF(images\microDAGR_item.paa)), _conditionCode, _toggleCode, _closeCode] call ace_common_fnc_deviceKeyRegisterNew + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_5(_displayName,_iconImage,_conditionCode,_toggleCode,_closeCode); + +GVAR(deviceKeyHandlingArray) pushBack [_displayName,_iconImage,_conditionCode,_toggleCode,_closeCode]; +[] call FUNC(deviceKeyFindValidIndex); diff --git a/addons/common/functions/fnc_isPlayer.sqf b/addons/common/functions/fnc_isPlayer.sqf index 772fae1746..91e54a51c1 100644 --- a/addons/common/functions/fnc_isPlayer.sqf +++ b/addons/common/functions/fnc_isPlayer.sqf @@ -1,15 +1,21 @@ /* - * Author: bux578, commy2 + * Author: bux578, commy2, akalegman * * Checks if a unit is a player / curator controlled unit. * Currently returns false for non-local remote controlled zeus units. (Remotes from another zeus machine) * * Arguments: * 0: unit to be checked (object) + * 1: exclude remote controlled units (boolean) * * Return Value: * Bool: is unit a player? */ #include "script_component.hpp" -isPlayer (_this select 0) || {_this select 0 == call FUNC(player)} +private ["_unit", "_excludeRemoteControlled"]; + +_unit = _this select 0; +_excludeRemoteControlled = if (count _this > 1) then {_this select 1} else {false}; + +isPlayer _unit || (!_excludeRemoteControlled && {_unit == call FUNC(player)}) diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf index a927858f9a..23d33e4bfe 100644 --- a/addons/common/functions/fnc_unloadPersonLocal.sqf +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -15,21 +15,41 @@ #define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson)) -private ["_vehicle", "_loaded", "_emptyPos"]; -PARAMS_1(_unit); -_vehicle = vehicle _unit; +private ["_loaded", "_emptyPos"]; +PARAMS_2(_unit,_vehicle); -if (_vehicle == _unit) exitwith {false;}; -if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;}; +if (driver _vehicle == _unit) exitwith {TRACE_1("Exiting on Failed Driver Check", driver _vehicle == _unit); false;}; +TRACE_1("Vehicle Check", driver _vehicle == _unit); +if !(speed _vehicle <1 && (((getPos _vehicle) select 2) < 2)) exitwith {TRACE_1("Exiting on Failed speed check", getPosASL _vehicle == _unit); false;}; +TRACE_1("getPosASL Vehicle Check", getPos _vehicle); -_emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]); -if (count _emptyPos == 0) exitwith {false}; +_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 13, typeof _unit]); +if (count _emptyPos == 0) exitwith {false}; //consider displaying text saying there are no safe places to exit the vehicle -_unit setPos _emptyPos; unassignVehicle _unit; -if (!alive _unit) then { - _unit action ["Eject", vehicle _unit]; -}; +[_unit] orderGetIn false; +TRACE_1("Ejecting", alive _unit); +_unit action ["Eject", vehicle _unit]; +[ { + private "_anim"; + PARAMS_2(_unit,_emptyPos); + _unit setPosASL (_emptyPos call EFUNC(common,PositiontoASL)); + if (!([_unit] call FUNC(isAwake))) then { + TRACE_1("Check if isAwake", [_unit] call FUNC(isAwake)); + if (driver _unit == _unit) then { + _anim = [_unit] call EFUNC(common,getDeathAnim); + [_unit, _anim, 1, true] call EFUNC(common,doAnimation); + [{ + _unit = _this select 0; + _anim = _this select 1; + if ((_unit getVariable "ACE_isUnconscious") and (animationState _unit != _anim)) then { + [_unit, _anim, 2, true] call EFUNC(common,doAnimation); + }; + }, [_unit, _anim], 0.5, 0] call EFUNC(common,waitAndExecute); + }; + }; +},[_unit,_emptyPos], 0.5, 0] call EFUNC(common,waitAndExecute); + [_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide); @@ -37,8 +57,4 @@ _loaded = _vehicle getvariable [QGVAR(loaded_persons),[]]; _loaded = _loaded - [_unit]; _vehicle setvariable [QGVAR(loaded_persons),_loaded,true]; -if (!([_unit] call FUNC(isAwake))) then { - [_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation); -}; - -true; +true \ No newline at end of file diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index c773c1f4a2..7d0de1b584 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -475,78 +475,103 @@ Sprawdzaj PBO Comprobar PBOs Überprüfe PBOs + Zkontrolovat PBO Sprawdzaj spójność addonów z serwerem Este módulo verifica la integridad de los addons con los que iniciamos el simulador Dieses Modul überprüft ob jeder Spieler die richtigen PBO-Dateien hat. + Zjistit addon který je v souladu se serverem Action Akcja Acción Aktion + Akce What to do with people who do not have the right PBOs? Co zrobić z graczami, którzy nie mają właściwych PBO? ¿Qué hacer con la gente que no tiene correctamente los PBOs? Was soll mit Leuten passieren, die nicht die richtigen PBOs haben? + Co udělat s lidmi, co nemají správné addony? Warn once Ostrzeż raz Avisar una vez Einmal verwarnen + Upozornit jednou Warn (permanent) Ostrzeżenie (permanentne) Avisar (permanente) Immer verwarnen + Upozornit (permanentně) Kick Kick Expulsar Kicken + Vyhodit Check all addons Sprawdź wsz. addony Comprobar todos los addons Alle Addons überprüfen + Zkontrolovat všechny addony Check all addons instead of only those of ACE? Sprawdzaj wszystkie addony czy tylko te z ACE? Comprobar todos los addons en vez de solo los del ACE Alle Addons anstatt nur ACE überprüfen? + Zkontrolovat všechny addony namísto jen těch od ACE? Whitelist Biała lista Lista blanca Whitelist + Seznam povolených What addons are allowed regardless? Jakie addony są dozwolone? Qué addons están permitidos igualmente Welche Addons werden dennoch erlaubt? + Jaké addony jsou povoleny? LSD Vehicles Pojazdy LSD Vehículos LSD LSD-Fahrzeuge + LSD vozidla Adds LSD effect to synchronized vehicle Dodaje efekt LSD pod zsynchronizowany pojazd Añade el efecto LSD al vehículo sincronizado Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzu + Přidá LSD efekt pro synchronizované vozidla + + + Toggle Handheld Device + Seleccionar dispositivo de mano + + + Close Handheld Device + Cerrar dispositivo de mano + + + Cycle Handheld Devices + Cambiar dispositivos de mano - + \ No newline at end of file diff --git a/addons/dagr/XEH_postInit.sqf b/addons/dagr/XEH_postInit.sqf index b788d85411..39f2a7ea28 100644 --- a/addons/dagr/XEH_postInit.sqf +++ b/addons/dagr/XEH_postInit.sqf @@ -1,8 +1,13 @@ #include "script_component.hpp" +if (!hasInterface) exitWith {}; + #include "initKeybinds.sqf" +GVAR(outputPFH) = -1; + GVAR(run) = false; +GVAR(hidden) = true; GVAR(menuRun) = false; GVAR(useDegrees) = true; GVAR(updateInterval) = 0.5; diff --git a/addons/dagr/functions/fnc_menuInit.sqf b/addons/dagr/functions/fnc_menuInit.sqf index ae1eed9a2b..739f41df0b 100644 --- a/addons/dagr/functions/fnc_menuInit.sqf +++ b/addons/dagr/functions/fnc_menuInit.sqf @@ -69,7 +69,7 @@ GVAR(showOutOfSpace) = false; GVAR(PWR) = false; GVAR(menuRun) = true; [{ - if (!dialog || GVAR(PWR)) exitWith { + if (!dialog || GVAR(PWR) || !GVAR(menuRun)) exitWith { closeDialog 266860; GVAR(menuRun) = false; [_this select 1] call CBA_fnc_removePerFrameHandler; diff --git a/addons/dagr/functions/fnc_outputData.sqf b/addons/dagr/functions/fnc_outputData.sqf index a1b8edd9bf..ff7429fa0a 100644 --- a/addons/dagr/functions/fnc_outputData.sqf +++ b/addons/dagr/functions/fnc_outputData.sqf @@ -27,11 +27,14 @@ __background ctrlSetText QUOTE(PATHTOF(UI\dagr_gps.paa)); -[{ +if (GVAR(outputPFH) != -1) exitWith {}; + +GVAR(outputPFH) = [{ private ["_pos", "_mapSize", "_gridConfig", "_offsetX", "_offsetY", "_stepX", "_stepY", "_xgrid", "_ygrid", "_xcoord", "_ycoord", "_speed", "_dagrHeading", "_dagrGrid", "_dagrElevation", "_dagrSpeed", "_dagrTime", "_elevation"]; // Abort Condition if !(GVAR(run) && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith { + GVAR(outputPFH) = -1; 135471 cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; diff --git a/addons/dagr/functions/fnc_outputWP.sqf b/addons/dagr/functions/fnc_outputWP.sqf index ac8ab0a6c7..d1fc2a47f2 100644 --- a/addons/dagr/functions/fnc_outputWP.sqf +++ b/addons/dagr/functions/fnc_outputWP.sqf @@ -27,11 +27,14 @@ __background ctrlSetText QUOTE(PATHTOF(UI\dagr_wp.paa)); -[{ +if (GVAR(outputPFH) != -1) exitWith {}; + +GVAR(outputPFH) = [{ private ["_pos", "_mapSize", "_gridConfig", "_offsetX", "_offsetY", "_stepX", "_stepY", "_xGrid", "_yGrid", "_xCoord", "_yCoord", "_dagrHeading", "_dagrGrid", "_bearing", "_MYpos", "_WPpos", "_dagrDistance", "_distance"]; // Abort Condition if !(GVAR(run) && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith { + GVAR(outputPFH) = -1; 135471 cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; diff --git a/addons/dagr/functions/fnc_toggleOverlay.sqf b/addons/dagr/functions/fnc_toggleOverlay.sqf index 981dfb5fbe..1fcb87d0ff 100644 --- a/addons/dagr/functions/fnc_toggleOverlay.sqf +++ b/addons/dagr/functions/fnc_toggleOverlay.sqf @@ -14,27 +14,41 @@ */ #include "script_component.hpp" -if (cameraView == "GUNNER") exitWith {}; - GVAR(run) = !GVAR(run); if (GVAR(run)) then { - switch (toUpper GVAR(displaySelection)) do { - case "WP" : { - call FUNC(outputWP); - }; - case "VECTOR" : { - call FUNC(outputVector); - }; - case "DATA" : { - call FUNC(outputData); - }; + if (GVAR(menuRun) && dialog) then { + GVAR(menuRun) = false; + closeDialog 0; }; + GVAR(hidden) = true; [{ EXPLODE_1_PVT(_this select 0,_vehicle); - if (!GVAR(run) || (!alive ACE_player) || (cameraView == "GUNNER") || (vehicle ACE_player != _vehicle)) exitWith { + if (!GVAR(run) || (!alive ACE_player) || (vehicle ACE_player != _vehicle)) exitWith { + GVAR(run) = false; 135471 cutText ["", "PLAIN"]; [_this select 1] call CBA_fnc_removePerFrameHandler; }; + if (cameraView == "GUNNER") then { + if (!GVAR(hidden)) then { + GVAR(hidden) = true; + 135471 cutText ["", "PLAIN"]; + }; + } else { + if (GVAR(hidden)) then { + GVAR(hidden) = false; + switch (toUpper GVAR(displaySelection)) do { + case "WP" : { + call FUNC(outputWP); + }; + case "VECTOR" : { + call FUNC(outputVector); + }; + case "DATA" : { + call FUNC(outputData); + }; + }; + }; + }; }, 0.1, [vehicle ACE_player]] call CBA_fnc_addPerFrameHandler; }; diff --git a/addons/dagr/initKeybinds.sqf b/addons/dagr/initKeybinds.sqf index a0a1107a08..5fbee3a3b4 100644 --- a/addons/dagr/initKeybinds.sqf +++ b/addons/dagr/initKeybinds.sqf @@ -3,8 +3,8 @@ { // Conditions: canInteract if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; - if !([_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false}; - + if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false}; + // Statement if (!GVAR(menuRun)) then { [] call FUNC(menuInit); @@ -14,17 +14,46 @@ true }, {false}, -[199, [false, true, false]], false] call cba_fnc_addKeybind; // (CTRL + Home) +[0, [false, true, false]], false] call cba_fnc_addKeybind; // (empty default key) ["ACE3 Equipment", QGVAR(ToggleKey), "Toggle DAGR", { // Conditions: canInteract if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; - if !([_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false}; - + if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false}; + // Statement [] call FUNC(toggleOverlay); true }, {false}, -[199, [false, false, false]], false] call cba_fnc_addKeybind; // (Home) +[0, [false, false, false]], false] call cba_fnc_addKeybind; // (empty default key) + +//Add deviceKey entry: +private ["_conditonCode", "_toggleCode", "_closeCode"]; +_conditonCode = { + ([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)); +}; +_toggleCode = { + // Conditions: canInteract + if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {}; + + // Statement + [] call FUNC(toggleOverlay); + if (!GVAR(run)) then { + [] call FUNC(menuInit); + }; +}; +_closeCode = { + // Statement + if (GVAR(run)) then { + //If dispaly is open, close it: + [] call FUNC(toggleOverlay); + }; + if (dialog && GVAR(menuRun)) then { + //If dialog is open, close it: + GVAR(menuRun) = false; + closeDialog 0; + }; +}; +["DAGR", QUOTE(PATHTOF(UI\DAGR_Icon.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew); diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 956f004635..d1eb18d6b4 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -50,4 +50,4 @@ Нести - + \ No newline at end of file diff --git a/addons/explosives/ACE_Settings.hpp b/addons/explosives/ACE_Settings.hpp index 038f06291d..ef6a723d5b 100644 --- a/addons/explosives/ACE_Settings.hpp +++ b/addons/explosives/ACE_Settings.hpp @@ -7,4 +7,10 @@ class ACE_Settings { value = 1; typeName = "BOOL"; }; + class GVAR(ExplodeOnDefuse) { + displayName = CSTRING(ExplodeOnDefuse_DisplayName); + description = CSTRING(ExplodeOnDefuse_Description); + value = 1; + typeName = "BOOL"; + }; }; diff --git a/addons/explosives/CfgAmmo.hpp b/addons/explosives/CfgAmmo.hpp index c6d70bc64a..8299a979b3 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -69,25 +69,52 @@ class CfgAmmo { /*class DemoCharge_Remote_Ammo_Scripted: DemoCharge_Remote_Ammo; class SatchelCharge_Remote_Ammo_Scripted: SatchelCharge_Remote_Ammo;*/ - + class IEDUrbanBig_Remote_Ammo: PipeBombBase { - mineTrigger = "RangeTrigger"; triggerWhenDestroyed = 1; - soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; + ACE_explodeOnDefuse = 0.02; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; }; - class IEDLandBig_Remote_Ammo: PipeBombBase { + class IEDUrbanBig_Command_Ammo: IEDUrbanBig_Remote_Ammo { + mineTrigger = "RemoteTrigger"; + }; + class IEDUrbanBig_Range_Ammo: IEDUrbanBig_Remote_Ammo { mineTrigger = "RangeTrigger"; - triggerWhenDestroyed = 1; - soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; }; + class IEDUrbanSmall_Remote_Ammo: PipeBombBase { - mineTrigger = "RangeTrigger"; triggerWhenDestroyed = 1; - soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; + ACE_explodeOnDefuse = 0.02; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; + }; + class IEDUrbanSmall_Command_Ammo: IEDUrbanSmall_Remote_Ammo { + mineTrigger = "RemoteTrigger"; }; - class IEDLandSmall_Remote_Ammo: PipeBombBase { + class IEDUrbanSmall_Range_Ammo: IEDUrbanSmall_Remote_Ammo { mineTrigger = "RangeTrigger"; + }; + + class IEDLandBig_Remote_Ammo: PipeBombBase { triggerWhenDestroyed = 1; - soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40}; + ACE_explodeOnDefuse = 0.02; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; + }; + class IEDLandBig_Command_Ammo: IEDLandBig_Remote_Ammo { + mineTrigger = "RemoteTrigger"; + }; + class IEDLandBig_Range_Ammo: IEDLandBig_Remote_Ammo { + mineTrigger = "RangeTrigger"; + }; + + class IEDLandSmall_Remote_Ammo: PipeBombBase { + triggerWhenDestroyed = 1; + ACE_explodeOnDefuse = 0.02; + soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; + }; + class IEDLandSmall_Command_Ammo: IEDLandSmall_Remote_Ammo { + mineTrigger = "RemoteTrigger"; + }; + class IEDLandSmall_Range_Ammo: IEDLandSmall_Remote_Ammo { + mineTrigger = "RangeTrigger"; }; }; diff --git a/addons/explosives/CfgMagazines.hpp b/addons/explosives/CfgMagazines.hpp index 83ab8d1932..39d08917c3 100644 --- a/addons/explosives/CfgMagazines.hpp +++ b/addons/explosives/CfgMagazines.hpp @@ -44,10 +44,11 @@ class CfgMagazines { ACE_SetupObject = "ACE_Explosives_Place_Claymore"; ACE_DelayTime = 1.5; class ACE_Triggers { - SupportedTriggers[] = {"Command"}; + SupportedTriggers[] = {"Command", "MK16_Transmitter"}; class Command { - FuseTime = 0.5; + FuseTime = 0.5; }; + class MK16_Transmitter: Command {}; }; }; @@ -95,45 +96,51 @@ class CfgMagazines { }; }; }; - + class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig"; class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"}; + SupportedTriggers[] = {"Command", "DeadmanSwitch", "Cellphone", "PressurePlate"}; class Command { FuseTime = 0.5; + ammo = "IEDUrbanBig_Command_Ammo"; }; class DeadmanSwitch:Command {}; class Cellphone:Command {}; class PressurePlate { - displayName = CSTRING(SLAME_Magnetic); + displayName = CSTRING(PressurePlate); digDistance = 0; - ammo = "IEDUrbanBig_Remote_Ammo"; + ammo = "IEDUrbanBig_Range_Ammo"; pitch = 0; }; - }; + }; }; + class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig"; class ACE_Triggers: ACE_Triggers { + class Command: Command { + ammo = "IEDLandBig_Command_Ammo"; + }; class PressurePlate: PressurePlate { - ammo = "IEDLandBig_Remote_Ammo"; + ammo = "IEDLandBig_Range_Ammo"; }; }; }; class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall"; class ACE_Triggers { - SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"}; + SupportedTriggers[] = {"Command", "DeadmanSwitch", "Cellphone", "PressurePlate"}; class Command { FuseTime = 0.5; + ammo = "IEDUrbanSmall_Command_Ammo"; }; class DeadmanSwitch: Command {}; class Cellphone: Command {}; class PressurePlate { - displayName = CSTRING(SLAME_Magnetic); + displayName = CSTRING(PressurePlate); digDistance = 0; - ammo = "IEDUrbanSmall_Remote_Ammo"; + ammo = "IEDUrbanSmall_Range_Ammo"; pitch = 0; }; }; @@ -141,8 +148,11 @@ class CfgMagazines { class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag { ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall"; class ACE_Triggers: ACE_Triggers { + class Command: Command { + ammo = "IEDLandSmall_Command_Ammo"; + }; class PressurePlate: PressurePlate { - ammo = "IEDLandSmall_Remote_Ammo"; + ammo = "IEDLandSmall_Range_Ammo"; }; }; }; diff --git a/addons/explosives/CfgModule.hpp b/addons/explosives/CfgModule.hpp index d5bad207a5..239ecd4e17 100644 --- a/addons/explosives/CfgModule.hpp +++ b/addons/explosives/CfgModule.hpp @@ -20,6 +20,12 @@ class ACE_ModuleExplosive: ACE_Module { typeName = "BOOL"; defaultValue = 1; }; + class ExplodeOnDefuse { + displayName = "$STR_ACE_Explosive_ExplodeOnDefuse_DisplayName"; + description = "$STR_ACE_Explosive_ExplodeOnDefuse_Description"; + typeName = "BOOL"; + defaultValue = 1; + }; }; class ModuleDescription { description = CSTRING(Module_Description); diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index 204c6aca73..4ede0654fa 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -103,7 +103,7 @@ class CfgVehicles { statement = ""; insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions);); showDisabled = 0; - exceptions[] = {}; + exceptions[] = {"isNotSwimming"}; priority = 5; icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa)); }; @@ -114,7 +114,7 @@ class CfgVehicles { condition = "true"; statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;); showDisabled = 0; - exceptions[] = {}; + exceptions[] = {"isNotSwimming"}; priority = 5; icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa"; }; diff --git a/addons/explosives/ExplosivesUI.hpp b/addons/explosives/ExplosivesUI.hpp index 9eb2bad49a..6e6374af12 100644 --- a/addons/explosives/ExplosivesUI.hpp +++ b/addons/explosives/ExplosivesUI.hpp @@ -15,7 +15,7 @@ class RscEdit; class Rsc_ACE_CallScreen_Edit:RscEdit { canModify = 1; - colorBackground[] = {0,0,0,1}; + colorBackground[] = {0,0,0,0}; colorText[] = {0,0,0,1}; colorDisabled[] = {1,1,1,0.25}; colorSelection[] = { diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index 28a14b25a5..e0c7f7c85d 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" EXPLODE_2_PVT(_this,_unit,_explosive); -if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith { +if (GVAR(ExplodeOnDefuse) && (random 1.0) < getNumber(ConfigFile >> "CfgAmmo" >> typeOf _explosive >> "ACE_explodeOnDefuse")) exitWith { [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); }; diff --git a/addons/explosives/functions/fnc_module.sqf b/addons/explosives/functions/fnc_module.sqf index 4080b41bde..56225d8ca8 100644 --- a/addons/explosives/functions/fnc_module.sqf +++ b/addons/explosives/functions/fnc_module.sqf @@ -27,5 +27,7 @@ if !(_activated) exitWith {}; call EFUNC(Common,readSettingFromModule); [_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"] call EFUNC(Common,readSettingFromModule); +[_logic, QGVAR(ExplodeOnDefuse),"ExplodeOnDefuse"] + call EFUNC(Common,readSettingFromModule); diag_log text "[ACE]: Explosive Module Initialized."; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 839f8a1582..abd6d83e26 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -510,35 +510,47 @@ System ładunków wybuchowych Sistema de explosivos Sprengstoffsystem + Systém výbušnin Require specialists? Wymagaj specjalistów? ¿Requiere especialista? Benötigt Sprengstoffexperten? + Vyžadovat specialistu? Require explosive specialists to disable explosives? Default: No Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie Requiere especialista en explosivos para desactivar explosivos?. Por defecto: No Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein + Vyžadovat specialistu na zneškodnění výbušniny? Výchozí: Ne Punish non-specialists? Karaj nie-specjalistów? ¿Penalizar a los no especialistas? Bestrafe Nicht-Sprengstoffexperten? + Potrestat, pokud není specialista? Increase the time it takes to complete actions for non-specialists? Default: Yes Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak Aumenta el tiempo que lleva completar acciones para los no especialstas?. Por defecto: Si Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja + Zvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: Ano + + + Explode on defusal? + + + Enable certain explosives to explode on defusal? Default: Yes Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem. Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern. + Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin. diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 2e0522a13d..fb25760e94 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -6,59 +6,69 @@ Symulacja fragmentacji Simulación de fragmentación Splittersimulation + Simulace fragmentace Enable the ACE Fragmentation Simulation Activa la simulación de fragmentación ACE Aktywuje symulację fragmentacji ACE Aktiviere die ACE-Splittersimulation + Povolit ACE simulaci fragmentace Spalling Simulation Simulación de astillamiento Symulacja odprysków Explosionssimulation + Simulace úlomků Enable the ACE Spalling Simulation Activa la simulación de astillamiento ACE Aktywuje symulację odprysków ACE Aktiviere ACE-Explosionssimulation + Povolit ACE simulaci úlomků Maximum Projectiles Tracked Máximos proyectiles rastreados Maks. liczba śledzonych pocisków Maximalzahl der verfolgten Projektile + Maximální počet sledovaných projektilů This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( >200 rounds in the air at once) Este ajuste controla la cantidad máxima de proyectiles del sistema de fragmentación y astillamiento de los que se hará un seguimiento en cualquier momento dado. Si se disparan más proyectiles, no serán rastreados. Baja esta opción si no deseas una bajada de FPS en escenarios con muchos proyectiles (>200 proyectiles en el aire a la vez) To ustawienie kontroluje maksymalną ilość pocisków, jakie fragmentacja i odpryski symulują w danym momencie. Jeżeli więcej pocisków będzie wystrzelonych, wtedy nie będą one śledzone. Zmniejsz tą opcję jeżeli nie chcesz odczuwać spadków FPS podczas ciężkiej wymiany ognia (więcej niż 200 pocisków w powietrzu na raz). Diese Einstellung steuert die maximale Anzahl an Projektilen, die das Splitter- und Explosionssystem gleichzeitig verfolgen wird. Wenn mehr Projektile abgefeuert werden, werden sie nicht verfolgt werden. Diese Einstellung zu verringern, kann FPS-Einbrüche bei Szenarien mit vielen Projektilen verhindern (>200 Objekte gleichzeitig in der Luft) + Toto nastavení kontroluje maximální množství projektilů z fragmentace a úlomků, která jsou sledována v dané době. Pokud je vystřeleno více projektilů, tak nebudou sledovány. Snižte toto nastavení pokud si nepřejete propady FPS v situacích, kde je velké množství projektilů ( >200 nábojů najednou ve vzduchu) Maximum Projectiles Per Frame Máximos proyectiles por cuadro Maximale Anzahl an Projektilen pro Frame Maks. liczba pocisków na klatkę + Maximální počet projektilů ze jeden snímek The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further. Ilość obliczeń wykonywanych przez symulację odprysków w danej klatce. Ta opcja pomaga rozprzestrzenić obliczenia odprysków na więcej klatek, zmniejszając spadek FPS jeszcze bardziej. Gibt die Anzahl der Explosionverfolgungsberechnungen an, die gleichzeitig ausgeführt werden. Das kann dabei helfen den FPS-Einfluss abzuschwächen, wenn Teile über mehrere Frames hinweg verfolgt werden. El número de cálculos de esquirlas que se hará en cualquier cuadro. Esto ayuda a dispersar el impacto en FPS del seguimiento de esquirlas de balas a través de múltiples cuadros, lo que limita aún más su impacto. + Počet úlomků v daném snímku. Toto pomáhá rozšířit FPS dopad sledovaného úlomku napříč více snímky, omezuje jeho vliv ještě více. (SP Only) Frag/Spall Debug Tracing (Solo SP) Seguimiento de depuración de Fragmentación/Astillamiento (Tylko SP) Wizualny debug odł./odpr. + (Pouze SP) Debug sledování Frag/Úlomků (SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only. (Solo SP) Requiere un reinicio misión/editor. Permite el seguimiento visual de la fragmentación y astillamientos de los proyectiles en modo SP. (Tylko SP) Wymaga restartu misji/edytora. Aktywuje wizualne śledzenie odłamków oraz odprysków w trybie gry Single Player. (nur SP) Splitter-/Explosions-Debugging + (Pouze SP) Vyžaduje restart mise/editoru. Aktivuje vizuální stopování fragmentace a úlomů pouze v režimu jednoho hráče. \ No newline at end of file diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index 0c74f33940..61f20eb935 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -3,6 +3,7 @@ class CfgAmmo { class FlareBase: FlareCore { intensity = 20000; flareSize = 12; + timeToLive = 60; }; class F_40mm_White: FlareBase { intensity = 40000; @@ -10,7 +11,7 @@ class CfgAmmo { }; class F_20mm_White: FlareBase { intensity = 20000; - flareSize = 12; + flareSize = 6; }; class F_Signal_Green: FlareBase { intensity = 20000; @@ -19,6 +20,7 @@ class CfgAmmo { class Flare_82mm_AMOS_White: FlareCore { intensity = 80000; flareSize = 12; + timeToLive = 60; }; class F_20mm_Red: F_20mm_White {}; diff --git a/addons/hearing/CfgSounds.hpp b/addons/hearing/CfgSounds.hpp index ac64f42c4e..2d757041be 100644 --- a/addons/hearing/CfgSounds.hpp +++ b/addons/hearing/CfgSounds.hpp @@ -11,4 +11,12 @@ class CfgSounds { sound[] = {QUOTE(PATHTOF(sounds\ACE_earringing_heavy.wav)),8,1.7}; titles[] = {}; }; + class ACE_Combat_Deafness { + sound[] = {QUOTE(PATHTOF(sounds\deafness.ogg)),3,1}; + titles[] = {}; + }; + class ACE_Ring_Backblast { + sound[] = {QUOTE(PATHTOF(sounds\backblast_ring.ogg)),1,1}; + titles[] = {}; + }; }; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index 01b05e5f50..ad7fddcd98 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -6,6 +6,13 @@ GVAR(currentDeafness) = 0; GVAR(newStrength) = 0; GVAR(playerVehAttenuation) = 1; +GVAR(beep) = false; +GVAR(beep2) = false; +GVAR(time2) = 0; +GVAR(time3) = 0; +GVAR(time4) = 0; +GVAR(earRingingPFH) = -1; + // Spawn volume updating process [FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler; @@ -15,6 +22,14 @@ GVAR(playerVehAttenuation) = 1; //Reset deafness on respawn (or remote control player switch) ["playerChanged", { + ACE_player setVariable [QGVAR(dv), 0]; + ACE_player setVariable [QGVAR(prior), 0]; + ACE_player setvariable [QGVAR(deaf), false]; + GVAR(beep) = false; + GVAR(beep2) = false; + GVAR(time2) = 0; + GVAR(time3) = 0; + GVAR(time4) = 0; GVAR(currentDeafness) = 0; GVAR(newStrength) = 0; }] call EFUNC(common,addEventhandler); diff --git a/addons/hearing/config.cpp b/addons/hearing/config.cpp index 777c44dd8f..1007b2095d 100644 --- a/addons/hearing/config.cpp +++ b/addons/hearing/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { weapons[] = {"ACE_EarPlugs"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; - author[] = {"KoffeinFlummi", "esteldunedain", "HopeJ", "commy2"}; + author[] = {"KoffeinFlummi", "esteldunedain", "HopeJ", "commy2", "Rocko", "Rommel", "Ruthberg"}; authorUrl = "https://github.com/KoffeinFlummi/"; VERSION_CONFIG; }; diff --git a/addons/hearing/functions/fnc_earRinging.sqf b/addons/hearing/functions/fnc_earRinging.sqf index 2460e0fd5c..96482f5b79 100644 --- a/addons/hearing/functions/fnc_earRinging.sqf +++ b/addons/hearing/functions/fnc_earRinging.sqf @@ -1,56 +1,92 @@ /* - * Author: KoffeinFlummi, commy2 - * Creates ear ringing effect with set strength. + * Author: KoffeinFlummi, commy2, Rocko, Rommel, Ruthberg + * Ear ringing PFH * * Arguments: - * 0: Unit (player) + * 0: unit * 1: strength of ear ringing (Number between 0 and 1) * * Return Value: * None * * Example: - * [clientExplosionEvent] call ace_hearing_fnc_earRinging + * [_unit, _strength] call ace_hearing_fnc_earRinging * * Public: No */ #include "script_component.hpp" -private ["_unit", "_strength"]; +if (GVAR(DisableEarRinging)) exitWith {}; -_unit = _this select 0; -_strength = _this select 1; +PARAMS_2(_unit,_strength); + +if (isNull _unit) exitWith {}; +if (_strength < 0.05) exitWith {}; if (_unit getVariable ["ACE_hasEarPlugsin", false]) then { _strength = _strength / 4; }; -GVAR(newStrength) = GVAR(newStrength) max _strength; +_unit setVariable [QGVAR(dv), (_unit getVariable [QGVAR(dv), 0]) + _strength]; -if (missionNamespace getVariable [QGVAR(isEarRingingPlaying), false]) exitWith {}; +if (GVAR(earRingingPFH) != -1) exitWith {}; +GVAR(earRingingPFH) = [{ + EXPLODE_1_PVT(_this select 0,_unit); + private ["_prior"]; + _prior = (_unit getvariable [QGVAR(dv), 0]) min 20; + + if (!alive _unit || _prior <= 0) exitWith { + _unit setVariable [QGVAR(dv), 0]; + _unit setVariable [QGVAR(prior), 0]; + GVAR(beep) = false; + GVAR(beep2) = false; + GVAR(time2) = 0; + GVAR(time3) = 0; + GVAR(time4) = 0; + GVAR(earRingingPFH) = -1; + [_this select 1] call cba_fnc_removePerFrameHandler; + }; + + if (((_unit getvariable [QGVAR(dv), 0]) - (_unit getvariable [QGVAR(prior), 0])) > 2) then { + if (ACE_time > GVAR(time3)) then { + GVAR(beep2) = false; + }; + if (!GVAR(beep2)) then { + playSound "ACE_Combat_Deafness"; + GVAR(beep2) = true; + GVAR(time3) = ACE_time + 5; + }; + }; + + _unit setvariable [QGVAR(prior), _prior]; + GVAR(volume) = (1 - (_prior / 20)) max 0; + + if (_prior > 19.75) then { + _unit setvariable [QGVAR(deaf), true]; + } else { + _unit setvariable [QGVAR(deaf), false]; + }; + + if ((_unit getvariable [QGVAR(deaf), false]) && {ACE_time > GVAR(time4)}) then { + playSound "ACE_Combat_Deafness"; + GVAR(beep2) = true; + GVAR(time3) = ACE_time + 10; + GVAR(time4) = ACE_time + 30; + }; -if (GVAR(DisableEarRinging)) exitWith {}; - -if (_strength > 0.75) exitWith { - playSound "ACE_EarRinging_Heavy"; - GVAR(isEarRingingPlaying) = true; - [ - {GVAR(isEarRingingPlaying) = false;}, [], 7.0, 0.25 - ] call EFUNC(common,waitAndExecute); -}; -if (_strength > 0.5) exitWith { - playSound "ACE_EarRinging_Medium"; - GVAR(isEarRingingPlaying) = true; - [ - {GVAR(isEarRingingPlaying) = false;}, [], 5.0, 0.25 - ] call EFUNC(common,waitAndExecute); -}; -if (_strength > 0.2) exitWith { - playSound "ACE_EarRinging_Weak"; - GVAR(isEarRingingPlaying) = true; - GVAR(isEarRingingPlaying) = true; - [ - {GVAR(isEarRingingPlaying) = false;}, [], 3.0, 0.25 - ] call EFUNC(common,waitAndExecute); -}; + // Hearing takes longer to return to normal after it hits rock bottom + _unit setvariable [QGVAR(dv), _prior - (0.5 * (GVAR(volume) max 0.1))]; + + if (_prior > 10) then { + //check if the ringing is already being played + if (ACE_time > GVAR(time2)) then { + GVAR(beep) = false; + }; + if (!GVAR(beep)) then { + playSound "ACE_Ring_Backblast"; + GVAR(time2) = ACE_time + 22; + GVAR(beep) = true; + }; + }; +}, 1, [_unit]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/hearing/functions/fnc_explosionNear.sqf b/addons/hearing/functions/fnc_explosionNear.sqf index b213a1304a..cb9202618f 100644 --- a/addons/hearing/functions/fnc_explosionNear.sqf +++ b/addons/hearing/functions/fnc_explosionNear.sqf @@ -1,5 +1,5 @@ /* - * Author: KoffeinFlummi, commy2 + * Author: KoffeinFlummi, commy2, Ruthberg * Handles deafness due to explosions going off near the player. * * Arguments: @@ -16,12 +16,10 @@ */ #include "script_component.hpp" -private ["_unit", "_damage", "_strength"]; +PARAMS_2(_unit,_damage); -_unit = _this select 0; -_damage = _this select 1; - -_strength = (_damage * 2) min 1; +private ["_strength"]; +_strength = 0 max _damage; if (_strength < 0.01) exitWith {}; [{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index b456b3b872..4164f81b33 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -21,7 +21,7 @@ */ #include "script_component.hpp" -private ["_silencer", "_audibleFireCoef", "_audibleFire", "_loudness", "_strength", "_vehAttenuation"]; +private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation", "_magazine", "_muzzles", "_weaponMagazines", "_muzzleMagazines", "_ammoType", "_initSpeed", "_ammoConfig", "_caliber", "_parentClasses"]; PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo); @@ -30,10 +30,11 @@ if (!GVAR(enableCombatDeafness)) exitWith {}; //Only run if firedNear object is player or player's vehicle: if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {}; if (_weapon in ["Throw", "Put"]) exitWith {}; +if (_distance > 50) exitWith {}; _vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)}; -if (_distance < 1) then {_distance = 1;}; +_distance = 1 max _distance; _silencer = switch (_weapon) do { case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0}; @@ -47,10 +48,51 @@ if (_silencer != "") then { _audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire"); }; -_audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); +_weaponMagazines = missionNamespace getVariable [format[QEGVAR(common,weaponMagazines_%1),_weapon], []]; +if (count _weaponMagazines == 0) then { + _muzzles = getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles"); + _weaponMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"); + { + if (_x != "this") then { + _muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines"); + _weaponMagazines append _muzzleMagazines; + }; + } forEach _muzzles; + { + _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); + _weaponMagazines set [_forEachIndex, [_x, _ammoType]]; + } forEach _weaponMagazines; + missionNamespace setVariable [format[QEGVAR(common,weaponMagazines_%1),_weapon], _weaponMagazines]; +}; -_loudness = _audibleFireCoef * _audibleFire / 64; -_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off +_magazine = ""; +{ + EXPLODE_2_PVT(_x,_magazineType,_ammoType) + if (_ammoType == _ammo) exitWith { + _magazine = _magazineType; + }; +} forEach _weaponMagazines; + +if (_magazine == "") exitWith {}; + +_initSpeed = getNumber(configFile >> "CfgMagazines" >> _magazine >> "initSpeed"); +_ammoConfig = (configFile >> "CfgAmmo" >> _ammo); +_parentClasses = [_ammoConfig, true] call BIS_fnc_returnParents; +_caliber = getNumber(_ammoConfig >> "ACE_caliber"); +_caliber = switch (true) do { + case ("ShellBase" in _parentClasses): { 80 }; + case ("RocketBase" in _parentClasses): { 200 }; + case ("MissileBase" in _parentClasses): { 600 }; + case ("SubmunitionBase" in _parentClasses): { 80 }; + default { + if (_caliber <= 0) then { 6.5 } else { _caliber }; + }; +}; +_loudness = (_caliber ^ 1.25 / 10) * (_initspeed / 1000) * _audibleFireCoef / 5; +_strength = _vehAttenuation * (_loudness - (_loudness / 50 * _distance)); // linear drop off + +//systemChat format["%1 : %2 : %3", _strength, _initSpeed, _parentClasses]; +//systemChat format["%1 : %2 : %3", _weapon, _magazine, _initSpeed]; if (_strength < 0.01) exitWith {}; diff --git a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf index a7285d5e2b..7d48ca7b34 100644 --- a/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf +++ b/addons/hearing/functions/fnc_updatePlayerVehAttenuation.sqf @@ -15,6 +15,8 @@ */ #include "script_component.hpp" +private ["_effectType", "_newAttenuation", "_turretConfig", "_turretPath", "_vehicle"]; + _vehicle = vehicle ACE_player; if (isNull _vehicle) exitWith {}; diff --git a/addons/hearing/functions/fnc_updateVolume.sqf b/addons/hearing/functions/fnc_updateVolume.sqf index 2e1db5c770..cfec318dc0 100644 --- a/addons/hearing/functions/fnc_updateVolume.sqf +++ b/addons/hearing/functions/fnc_updateVolume.sqf @@ -1,5 +1,5 @@ /* - * Author: commy2 and esteldunedain + * Author: commy2 and esteldunedain and Ruthberg * Updates and applys the current deafness. Called every 0.1 sec from a PFEH. * * Arguments: @@ -15,19 +15,16 @@ */ #include "script_component.hpp" -#define STRENGHTODEAFNESS 3 -#define MAXDEAFNESS 1.1 - private ["_recoverRate", "_volume"]; // Exit if combat deafness is disabled if !(GVAR(enableCombatDeafness)) exitWith {}; // Check if new noises increase deafness -if (GVAR(newStrength) * STRENGHTODEAFNESS > GVAR(currentDeafness)) then { - GVAR(currentDeafness) = GVAR(newStrength) * STRENGHTODEAFNESS min MAXDEAFNESS; +GVAR(newStrength) = (((ACE_player getvariable [QGVAR(dv), 0]) min 20) / 20) ^ 2; +if (GVAR(newStrength) > GVAR(currentDeafness)) then { + GVAR(currentDeafness) = GVAR(newStrength); }; -GVAR(newStrength) = 0; // Recover rate is slower if deafness is severe _recoverRate = 0.01; diff --git a/addons/hearing/sounds/backblast_ring.ogg b/addons/hearing/sounds/backblast_ring.ogg new file mode 100644 index 0000000000..8d6207e326 Binary files /dev/null and b/addons/hearing/sounds/backblast_ring.ogg differ diff --git a/addons/hearing/sounds/deafness.ogg b/addons/hearing/sounds/deafness.ogg new file mode 100644 index 0000000000..52314e374e Binary files /dev/null and b/addons/hearing/sounds/deafness.ogg differ diff --git a/addons/hearing/sounds/flashbang_ring.ogg b/addons/hearing/sounds/flashbang_ring.ogg new file mode 100644 index 0000000000..0374cb413c Binary files /dev/null and b/addons/hearing/sounds/flashbang_ring.ogg differ diff --git a/addons/hearing/sounds/muzzleblast_ring1.ogg b/addons/hearing/sounds/muzzleblast_ring1.ogg new file mode 100644 index 0000000000..c164e93c02 Binary files /dev/null and b/addons/hearing/sounds/muzzleblast_ring1.ogg differ diff --git a/addons/hearing/sounds/muzzleblast_ring2.ogg b/addons/hearing/sounds/muzzleblast_ring2.ogg new file mode 100644 index 0000000000..3b6331e011 Binary files /dev/null and b/addons/hearing/sounds/muzzleblast_ring2.ogg differ diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 7a3d3d785a..35b847c5d1 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -114,23 +114,27 @@ Słuch Audición Gehör + Sluch Enable combat deafness? Wł. głuchotę bojową ¿Habilitar sordera de combate? Aktiviere Taubheit im Gefecht? + Povolit ztrátu sluchu? Enable combat deafness? Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów Habilita la sordera de combate Aktiviere Taubheit im Gefecht? + Povolit ztrátu sluchu? Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu. Dieses Modul aktiviert/deaktiviert die Taubheit im Gefecht. Wenn aktiviert, können Spieler ohne Gehörschutz taub werden, wenn eine Waffe in ihrer Nähe abgefeuert wird oder eine Explosion stattfindet. + Ztráta sluchu je možná ve chvíly, kdy se v bezprostřední blízkosti střílí z velkorážní zbraně nebo při bombardování a osoba je bez ochrany sluchu (např. špunty). Tento modul umožňuje tuto věc povolit nebo zakázat. - + \ No newline at end of file diff --git a/addons/huntir/CfgVehicles.hpp b/addons/huntir/CfgVehicles.hpp index 9e24473243..bc8ed4fc83 100644 --- a/addons/huntir/CfgVehicles.hpp +++ b/addons/huntir/CfgVehicles.hpp @@ -19,16 +19,45 @@ class CfgVehicles { class Parachute_02_base_F; class ACE_HuntIR: Parachute_02_base_F { - scope = 1; + author = ECSTRING(common,ACETeam); + castDriverShadow = 0; destrType = "DestructDefault"; displayName = "HuntIR"; model = PATHTOF(data\huntir.p3d); - castDriverShadow = 0; - soundEnviron[] = {"z\ace\addons\apl\sounds\padak_let", 0.316228, 1, 80}; + scope = 1; soundCrash[] = {"", db-30, 1 }; + soundEnviron[] = {"z\ace\addons\apl\sounds\padak_let", 0.316228, 1, 80}; soundLandCrash[] = {"", db-30, 1 }; soundWaterCrash[] = {"", db10, 1 }; - mapSize = 0; + class HitPoints { + class HitEngine { + armor = 0; + material = -1; + name = ""; + visual = ""; + radius = 0; + passThrough = 0; + explosionShielding = 0; + }; + class HitParachute { + armor = 0.0001; + material = -1; + name = "parachute"; + visual = ""; + radius = 0.2; + passThrough = 1; + explosionShielding = 0; + }; + class HitCamera { + armor = 0.001; + material = -1; + name = "camera"; + visual = ""; + radius = 0.025; + passThrough = 1; + explosionShielding = 1; + }; + }; }; class Item_Base_F; @@ -56,4 +85,14 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20); }; }; + + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + MACRO_ADDITEM(ACE_HuntIR_monitor,5); + }; + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20); + }; + }; }; diff --git a/addons/huntir/data/huntir.p3d b/addons/huntir/data/huntir.p3d index ebf349672e..a1c5b94e99 100644 Binary files a/addons/huntir/data/huntir.p3d and b/addons/huntir/data/huntir.p3d differ diff --git a/addons/huntir/functions/fnc_cam.sqf b/addons/huntir/functions/fnc_cam.sqf index e922b2cbc1..264c0c74b6 100644 --- a/addons/huntir/functions/fnc_cam.sqf +++ b/addons/huntir/functions/fnc_cam.sqf @@ -65,12 +65,12 @@ GVAR(no_cams) sort true; [{ GVAR(nearHuntIRs) = ACE_player nearEntities ["ACE_HuntIR", HUNTIR_MAX_TRANSMISSION_RANGE]; { - if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {damage _x < 0.5}) then { + if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then { GVAR(no_cams) pushBack _x; }; } forEach GVAR(nearHuntIRs); { - if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {damage _x >= 0.5}) then { + if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {_x getHitPointDamage "HitCamera" >= 0.25}) then { GVAR(no_cams) deleteAt _forEachIndex; if (_forEachIndex < GVAR(cur_cam)) then { GVAR(cur_cam) = GVAR(cur_cam) - 1; @@ -125,7 +125,7 @@ GVAR(no_cams) sort true; }; }; - private ["_cam_coord_y", "_cam_coord_x", "_speed", "_cam_time", "_cam_pos"]; + private ["_cam_coord_y", "_cam_coord_x", "_cam_time", "_cam_pos"]; GVAR(logic) setPosATL (GVAR(pos) vectorAdd [0, 0, -5]); GVAR(logic) setDir GVAR(ROTATE); @@ -138,8 +138,7 @@ GVAR(no_cams) sort true; ctrlSetText [1, format["%1 m", round(GVAR(pos) select 2)]]; ctrlSetText [2, format["%1", GVAR(cur_cam) + 1]]; - _speed = 1 max abs((velocity GVAR(huntIR)) select 2); - _cam_time = ((GVAR(pos) select 2) - 20) / _speed; + _cam_time = ACE_time - (GVAR(huntIR) getVariable [QGVAR(startTime), ACE_time]); ctrlSetText [3, format["%1 s", round(_cam_time)]]; _cam_pos = getPosVisual GVAR(huntIR); _cam_pos = format ["X = %1, Y = %2", round (_cam_pos select 0), round (_cam_pos select 1)]; diff --git a/addons/huntir/functions/fnc_handleFired.sqf b/addons/huntir/functions/fnc_handleFired.sqf index 91367ac864..23c7df04f0 100644 --- a/addons/huntir/functions/fnc_handleFired.sqf +++ b/addons/huntir/functions/fnc_handleFired.sqf @@ -31,17 +31,20 @@ if (_ammo != "F_HuntIR") exitWith {}; private ["_huntir"]; _huntir = createVehicle ["ACE_HuntIR", _position, [], 0, "FLY"]; _huntir setPosATL _position; + _huntir setVariable [QGVAR(startTime), ACE_time, true]; [{ EXPLODE_1_PVT(_this select 0,_huntir); - private ["_deltaT"]; if (isNull _huntir) exitWith { [_this select 1] call CBA_fnc_removePerFrameHandler; }; - if (damage _huntir > 0) then { - _deltaT = ACE_time - (_huntir getVariable [QGVAR(lastTime), ACE_time]); - _huntir setVelocity (velocity _huntir vectorAdd [0, 0, -9.8066 * (damage _huntir) * _deltaT]); - _huntir setVariable [QGVAR(lastTime), ACE_time]; + private ["_parachuteDamage", "_velocity"]; + _parachuteDamage = _huntir getHitPointDamage "HitParachute"; + if (_parachuteDamage > 0) then { + _velocity = velocity _huntir; + _velocity set [2, -1 min -20 * sqrt(_parachuteDamage)]; + _huntir setVelocity _velocity; + _huntir setVectorUp [0, 0, 1]; }; - }, 0.1, [_huntir]] call CBA_fnc_addPerFrameHandler; - }, [getPosATL _projectile vectorAdd [0, 0, 400]], 5, 0] call EFUNC(common,waitAndExecute); + }, 0, [_huntir]] call CBA_fnc_addPerFrameHandler; + }, [getPosATL _projectile vectorAdd [0, 0, 50]], 2, 0] call EFUNC(common,waitAndExecute); }, [_projectile], 5, 0] call EFUNC(common,waitAndExecute); diff --git a/addons/huntir/functions/fnc_huntir.sqf b/addons/huntir/functions/fnc_huntir.sqf index 585a49a6ac..f8aed93880 100644 --- a/addons/huntir/functions/fnc_huntir.sqf +++ b/addons/huntir/functions/fnc_huntir.sqf @@ -61,7 +61,7 @@ createDialog "ace_huntir_cam_dialog_off"; if (_elapsedTime > 10) then { GVAR(state) = "noGDS"; }; - if (_elapsedTime > 5 && {count _nearestHuntIRs > 0}) then { + if (_elapsedTime > 5 && {{_x getHitPointDamage "HitCamera" < 0.25} count _nearestHuntIRs > 0}) then { GVAR(state) = "connecting"; }; }; diff --git a/addons/huntir/stringtable.xml b/addons/huntir/stringtable.xml index 51c2104bfe..45c6b19392 100644 --- a/addons/huntir/stringtable.xml +++ b/addons/huntir/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -170,7 +170,7 @@ Esc - Exit help ESC - Hilfe verlassen Esc - Exit help - Esc - Ukončit Pomoc + Esc - Ukončit pomoc Esc - Выйти из помощи Esc - Exit help Esc - wyjście z ekranu Pomocy diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index cd3b19a845..6737729092 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -221,21 +221,25 @@ Interaction menu background Tło menu interakcji Fondo del menú de interacción + Pozadí menu interakce Blur the background while the interaction menu is open. Rozmywa lub przyciemnia tło na czas otwarcia menu interakcji Desenfocar el fondo mientras el menú de interacción está abierto. + Rozmazat obraz pokud je interakční menu otevřené. Blur screen Rozmycie ekranu Pantalla de desenfoque + Rozmazaný obraz Black Przyciemnienie ekranu Negra + Černý obraz \ No newline at end of file diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index f83fd26344..3ad40ba7cb 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -548,6 +548,30 @@ class CfgVehicles { }; }; }; + + class StaticMGWeapon: StaticWeapon {}; + class HMG_01_base_F: StaticMGWeapon {}; + class HMG_01_high_base_F: HMG_01_base_F { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[-0.172852,0.164063,-0.476091]"; + }; + }; + }; + class AA_01_base_F: StaticMGWeapon { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[0,0.515869,-0.200671]"; + }; + }; + }; + class AT_01_base_F: StaticMGWeapon { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + position = "[0,0.515869,-0.200671]"; + }; + }; + }; class thingX; class ReammoBox_F: thingX { diff --git a/addons/interaction/functions/fnc_addPassengersActions.sqf b/addons/interaction/functions/fnc_addPassengersActions.sqf index 7ee56415bf..fe557e7ada 100644 --- a/addons/interaction/functions/fnc_addPassengersActions.sqf +++ b/addons/interaction/functions/fnc_addPassengersActions.sqf @@ -23,15 +23,24 @@ private ["_actions"]; _actions = []; { - private ["_unit"]; + private ["_unit", "_icon"]; _unit = _x; if ((_unit != _player) && {(getText (configFile >> "CfgVehicles" >> (typeOf _x) >> "simulation")) != "UAVPilot"}) then { + _icon = switch _unit do { + case (driver _vehicle): { QUOTE(A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_driver_ca.paa) }; + case (gunner _vehicle): { QUOTE(A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_gunner_ca.paa) }; + case (commander _vehicle): { QUOTE(A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_commander_ca.paa) }; + default { "" }; + }; + if (_unit getVariable [QEGVAR(captives,isHandcuffed), false]) then { + _icon = QUOTE(PATHTOEF(captives,UI\handcuff_ca.paa)); + }; _actions pushBack [ [ str(_unit), [_unit, true] call EFUNC(common,getName), - "", + _icon, {}, {true}, {_this call FUNC(addPassengerActions);}, diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index a1dad1a8e0..c1a9d463e9 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -77,7 +77,7 @@ Right Leg Rechtes Bein Pierna derecha - Pravá hona + Pravá noha Prawa noga Jambe droite Правая нога @@ -632,7 +632,7 @@ Dołącz do zielonych Entrar em Verde Belépés a Zöldbe - Připojit k zeleným + Připojit k zeleným Присоединиться к Зеленой группе Rejoindre vert Unirsi al team verde @@ -691,7 +691,7 @@ Has dejado el equipo Tu as quitté l'équipe Opuściłeś drużynę - Opustil si tým + Opustil jsi tým Вы покинули группу Você deixou a Equipe Hai lasciato il team @@ -798,23 +798,27 @@ System interakcji Sistema de interacción Interaktionssystem + Systém interakce Enable Team Management Wł. zarządzanie drużyną Habilitar gestión de equipos Aktiviere Gruppenverwaltung + Povolit správu týmu Should players be allowed to use the Team Management Menu? Default: Yes Czy gracze mogą korzystać z menu zarządzania drużyną? Domyślnie: Tak ¿Deben tener permitido los jugadores el uso del menu de gestión de equipos? Por defecto: Si Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja + Mohou hráči použít menu správy týmu? Výchozí: Ano Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn. Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe. + Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. - + \ No newline at end of file diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index 36da24d2d2..3e293fcb9c 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -7,7 +7,7 @@ TRACE_1("enter", _this); private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire", "_constraintBottom"]; private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"]; -private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"]; +private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"]; private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"]; private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"]; @@ -44,24 +44,24 @@ _magazineConfig = if ((currentMagazine _currentShooter) != "") then { [] }; -//Only enable if both weapon and currentMagazine are enabled (bandaid to allow firing the "AP" missle) -if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1} || {(count _magazineConfig) < 1} || {(getNumber ((_magazineConfig select 0) >> "enabled")) != 1}) exitWith { +//If weapon does not have "javelin enabled", then exit PFEH +if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1}) exitWith { __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - + if(!isNil "_fireDisabledEH") then { _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); }; - + [(_this select 1)] call cba_fnc_removePerFrameHandler; uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil]; }; // Find a target within the optic range _newTarget = objNull; - + // Bail on fast movement if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. ACE_player switchCamera "INTERNAL"; @@ -69,19 +69,20 @@ if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && // Refresh the firemode [] call FUNC(showFireMode); - - -// bail on not loaded -if( (vehicle ACE_player) != ACE_player) then { - if( (vehicle player) magazineTurretAmmo ["1Rnd_GAT_missiles", [0]] < 1) exitWith { - TRACE_1("No turret ammo, exit", ""); + +_ammo = _currentShooter ammo (currentWeapon _currentShooter); +// not loaded or not "javelin enabled" for magazine, hide targeting and enable firing +if ((_ammo == 0) || {(count _magazineConfig) < 1} || {(getNumber ((_magazineConfig select 0) >> "enabled")) != 1}) exitWith { + __JavelinIGUITargeting ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + __JavelinIGUITargetingConstraints ctrlShow false; + + if(!isNil "_fireDisabledEH") then { + _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); }; -} else { - if (ACE_player ammo (currentWeapon ACE_player) < 1 ) exitWith { - TRACE_1("No ammo, exit", ""); - }; }; - + _range = parseNumber (ctrlText __JavelinIGUIRangefinder); TRACE_1("Viewing range", _range); if (_range > 50 && {_range < 2500}) then { @@ -113,7 +114,7 @@ _zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selecti _randomPosWithinBounds = [(_zamerny select 0) + 1 - (random 2.0),(_zamerny select 1) + 1 - (random 2.0),(_zamerny select 2) + 0.5 - (random 1.0)]; _apos = worldToScreen (_currentTarget modelToWorld _randomPosWithinBounds); - + _aposX = 0; _aposY = 0; if (count _apos < 2) then { @@ -124,7 +125,7 @@ if (count _apos < 2) then { _aposY = (_apos select 1) + _offsetY; }; -if((call CBA_fnc_getFoV) select 1 > 9) then { +if((call CBA_fnc_getFoV) select 1 > 9) then { __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; __JavelinIGUIWFOV ctrlSetTextColor __ColorGray; } else { @@ -134,9 +135,9 @@ if((call CBA_fnc_getFoV) select 1 > 9) then { FUNC(disableFire) = { _firedEH = _this select 0; - + if(_firedEH < 0 && difficulty > 0) then { - _firedEH = [ACE_player, "DefaultAction", {true}, { + _firedEH = [ACE_player, "DefaultAction", {true}, { _canFire = (_this select 1) getVariable["ace_missileguidance_target", nil]; if(!isNil "_canFire") exitWith { false }; true @@ -146,7 +147,7 @@ FUNC(disableFire) = { }; FUNC(enableFire) = { _firedEH = _this select 0; - + if(_firedEH > 0 && difficulty > 0) then { [ACE_player, "DefaultAction", _firedEH] call EFUNC(common,removeActionEventHandler); }; @@ -157,38 +158,38 @@ if (isNull _newTarget) then { // No targets found _currentTarget = objNull; _lockTime = 0; - + __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - - _currentShooter setVariable ["ace_missileguidance_target",nil, false]; - + + _currentShooter setVariable ["ace_missileguidance_target",nil, false]; + // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); } else { _fov = [] call CBA_fnc_getFoV; TRACE_1("FOV", _fov); if (_newTarget distance ACE_player < 2500 - && {(call CBA_fnc_getFoV) select 1 > 9} - && { (currentVisionMode ACE_player == 2)} - && GVAR(isLockKeyDown) - ) then { + && {(call CBA_fnc_getFoV) select 1 > 9} + && { (currentVisionMode ACE_player == 2)} + && GVAR(isLockKeyDown) + ) then { // Lock on after 3 seconds - if(_currentTarget != _newTarget) then { + if(_currentTarget != _newTarget) then { TRACE_1("New Target, reseting locking", _newTarget); _lockTime = ACE_diagTime; _currentTarget = _newTarget; - + playSound "ACE_Javelin_Locking"; } else { if(ACE_diagTime - _lockTime > __LOCKONTIME + _randomLockInterval) then { TRACE_2("LOCKED!", _currentTarget, _lockTime); - + __JavelinIGUISeek ctrlSetTextColor __ColorGreen; - + __JavelinIGUITargeting ctrlShow true; __JavelinIGUITargetingConstrains ctrlShow false; __JavelinIGUITargetingGate ctrlShow true; @@ -198,34 +199,34 @@ if (isNull _newTarget) then { //__JavelinIGUITargetingLineV ctrlSetPosition [_aposX,ctrlPosition __JavelinIGUITargetingLineV select 1]; //__JavelinIGUITargetingLineH ctrlSetPosition [ctrlPosition __JavelinIGUITargetingLineH select 0,_aposY]; //{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingLineH,__JavelinIGUITargetingLineV]; - + _boundsInput = if (_currentTarget isKindOf "CAManBase") then { [_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "body"]; } else { [_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "zamerny"]; }; - + _bpos = _boundsInput call EFUNC(common,worldToScreenBounds); _minX = ((_bpos select 0) + _offsetX) max _constraintLeft; _minY = ((_bpos select 1) + _offsetY) max _constraintTop; _maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH); _maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH); - + TRACE_4("", _boundsInput, _bpos, _minX, _minY); - + __JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY]; __JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY]; __JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY]; __JavelinIGUITargetingGateBR ctrlSetPosition [_maxX,_maxY]; - + {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; - + _currentShooter setVariable["ace_missileguidance_target", _currentTarget, false]; - + // Allow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire); - + if(ACE_diagTime > _soundTime) then { playSound "ACE_Javelin_Locked"; _soundTime = ACE_diagTime + 0.25; @@ -233,31 +234,31 @@ if (isNull _newTarget) then { } else { __JavelinIGUITargeting ctrlShow true; __JavelinIGUITargetingGate ctrlShow true; - __JavelinIGUITargetingConstrains ctrlShow true; + __JavelinIGUITargetingConstrains ctrlShow true; __JavelinIGUITargetingLines ctrlShow false; _currentShooter setVariable["ace_missileguidance_target", nil, false]; - + _boundsInput = if (_currentTarget isKindOf "CAManBase") then { [_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"]; } else { [_newTarget,[-1,-1,-1],_currentTarget selectionPosition "zamerny"]; }; - + _bpos = _boundsInput call EFUNC(common,worldToScreenBounds); - + _minX = ((_bpos select 0) + _offsetX) max _constraintLeft; _minY = ((_bpos select 1) + _offsetY) max _constraintTop; _maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH); _maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH); - + TRACE_4("", _boundsInput, _bpos, _minX, _minY); - + __JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY]; __JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY]; __JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY]; __JavelinIGUITargetingGateBR ctrlSetPosition [_maxX,_maxY]; - + {_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR]; if(ACE_diagTime > _soundTime) then { @@ -265,25 +266,25 @@ if (isNull _newTarget) then { _soundTime = ACE_diagTime + 0.25; }; // Disallow fire - _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); + _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); }; }; - } else { + } else { // No targets found _currentTarget = objNull; _lockTime = 0; - + __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUITargeting ctrlShow false; __JavelinIGUITargetingGate ctrlShow false; __JavelinIGUITargetingLines ctrlShow false; __JavelinIGUITargetingConstraints ctrlShow false; - + _currentShooter setVariable ["ace_missileguidance_target",nil, false]; - + // Disallow fire _fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire); - }; + }; }; //TRACE_2("", _newTarget, _currentTarget); diff --git a/addons/javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf index f5fab59497..0332c132e9 100644 --- a/addons/javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -20,7 +20,7 @@ __JavelinIGUITargetingLines ctrlShow false; uiNameSpace setVariable [QGVAR(arguments), [ - 0, // Last runtime + ACE_diagTime, // Last runtime objNull, // currentTargetObject 0, // Run Time 0, // Lock Time diff --git a/addons/kestrel4500/CfgVehicles.hpp b/addons/kestrel4500/CfgVehicles.hpp index 6e2fc1cba5..12b428316f 100644 --- a/addons/kestrel4500/CfgVehicles.hpp +++ b/addons/kestrel4500/CfgVehicles.hpp @@ -11,24 +11,24 @@ class CfgVehicles { priority = 0.1; icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); exceptions[] = {"notOnMap"}; - }; - class GVAR(show) { - displayName = CSTRING(ShowKestrel); - condition = QUOTE(call FUNC(canShow) && !GVAR(Overlay)); - statement = QUOTE(call FUNC(displayKestrel)); - showDisabled = 0; - priority = 0.2; - icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); - exceptions[] = {"notOnMap", "isNotInside"}; - }; - class GVAR(hide) { - displayName = CSTRING(HideKestrel); - condition = QUOTE(GVAR(Overlay)); - statement = QUOTE(call FUNC(displayKestrel)); - showDisabled = 0; - priority = 0.3; - icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); - exceptions[] = {"notOnMap", "isNotInside"}; + class GVAR(show) { + displayName = CSTRING(ShowKestrel); + condition = QUOTE(call FUNC(canShow) && !GVAR(Overlay)); + statement = QUOTE(call FUNC(displayKestrel)); + showDisabled = 0; + priority = 0.2; + icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); + exceptions[] = {"notOnMap", "isNotInside"}; + }; + class GVAR(hide) { + displayName = CSTRING(HideKestrel); + condition = QUOTE(GVAR(Overlay)); + statement = QUOTE(call FUNC(displayKestrel)); + showDisabled = 0; + priority = 0.3; + icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa)); + exceptions[] = {"notOnMap", "isNotInside"}; + }; }; }; }; diff --git a/addons/kestrel4500/initKeybinds.sqf b/addons/kestrel4500/initKeybinds.sqf index ab06dc2d2c..2a691bbe4f 100644 --- a/addons/kestrel4500/initKeybinds.sqf +++ b/addons/kestrel4500/initKeybinds.sqf @@ -24,3 +24,36 @@ }, {false}, [0, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key) + + +//Add deviceKey entry: +private ["_conditonCode", "_toggleCode", "_closeCode"]; +_conditonCode = { + [] call FUNC(canShow); +}; +_toggleCode = { + // Conditions: canInteract + if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {}; + + // Statement + if (!GVAR(Overlay)) then { + //If no overlay, show it: + [] call FUNC(displayKestrel); + } else { + //If overlay is up, switch to dialog: + [] call FUNC(createKestrelDialog); + }; +}; +_closeCode = { + // Statement + if (GVAR(Overlay)) then { + //If dispaly is open, close it: + GVAR(Overlay) = false; + }; + if (dialog && {!isNull (uiNamespace getVariable ["Kestrel4500_Display", displayNull])}) then { + //If dialog is open, close it: + GVAR(Kestrel4500) = false; + closeDialog 0; + }; +}; +[(localize LSTRING(Name)), QUOTE(PATHTOF(UI\Kestrel4500.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew); diff --git a/addons/laserpointer/ACE_Settings.hpp b/addons/laserpointer/ACE_Settings.hpp new file mode 100644 index 0000000000..0536db730d --- /dev/null +++ b/addons/laserpointer/ACE_Settings.hpp @@ -0,0 +1,6 @@ +class ACE_Settings { + class GVAR(enabled) { + typeName = "BOOL"; + value = 1; + }; +}; diff --git a/addons/laserpointer/XEH_postInit.sqf b/addons/laserpointer/XEH_postInit.sqf index 81b2da2473..133931578a 100644 --- a/addons/laserpointer/XEH_postInit.sqf +++ b/addons/laserpointer/XEH_postInit.sqf @@ -1,7 +1,7 @@ // by commy2 #include "script_component.hpp" -// fixes laser when being captured. Needed, because the selectionpsoition of the right hand is used +// fixes laser when being captured. Needed, because the selectionPosition of the right hand is used ["SetHandcuffed", {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call EFUNC(common,addEventHandler); //If user has ASDG JR without the compat patch, then ace's' laser pointers won't be compatible with anything @@ -14,26 +14,28 @@ if !(hasInterface) exitWith {}; GVAR(nearUnits) = []; -// @todo. Maybe move to common? -[{ - private "_nearUnits"; - _nearUnits = []; - - { - _nearUnits append crew _x; - - if (count _nearUnits > 10) exitWith { - _nearUnits resize 10; - }; - - } forEach nearestObjects [positionCameraToWorld [0,0,0], ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV - - GVAR(nearUnits) = _nearUnits; - -} , 5, []] call CBA_fnc_addPerFrameHandler; - -addMissionEventHandler ["Draw3D", { - call FUNC(onDraw); -}]; - #include "initKeybinds.sqf" + +["SettingsInitialized", { + //If not enabled, dont't add draw eventhandler or PFEH (for performance) + if (!GVAR(enabled)) exitWith {}; + + // @todo. Maybe move to common? + [{ + private "_nearUnits"; + _nearUnits = []; + { + _nearUnits append crew _x; + if (count _nearUnits > 10) exitWith { + _nearUnits resize 10; + }; + } forEach nearestObjects [positionCameraToWorld [0,0,0], ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV + + GVAR(nearUnits) = _nearUnits; + + } , 5, []] call CBA_fnc_addPerFrameHandler; + + addMissionEventHandler ["Draw3D", { + call FUNC(onDraw); + }]; +}] call EFUNC(common,addEventHandler); diff --git a/addons/laserpointer/config.cpp b/addons/laserpointer/config.cpp index 5ca5ce3470..d368512257 100644 --- a/addons/laserpointer/config.cpp +++ b/addons/laserpointer/config.cpp @@ -12,6 +12,7 @@ class CfgPatches { }; }; +#include "ACE_Settings.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" diff --git a/addons/laserpointer/functions/fnc_drawLaserpoint.sqf b/addons/laserpointer/functions/fnc_drawLaserpoint.sqf index 93a421a094..e69fc5e271 100644 --- a/addons/laserpointer/functions/fnc_drawLaserpoint.sqf +++ b/addons/laserpointer/functions/fnc_drawLaserpoint.sqf @@ -1,6 +1,8 @@ // by commy2 and esteldunedain #include "script_component.hpp" +private ["_p0", "_p1", "_p0Pos", "_offV1", "_offV2", "_offV3", "_camPos", "_intermediatePos", "_iteration", "_light", "_line", "_pL", "_pL2", "_pX", "_size", "_units", "_fnc_getDistanceToTerrain", "_fnc_doesIntersectWithMan"]; + // init object /*if (isNil QGVAR(laserdot)) then { _light = "#lightpoint" createVehicleLocal [0,0,0]; @@ -14,7 +16,7 @@ GVAR(laserdot) = _light; };*/ -EXPLODE_3_PVT(_this,_unit,_range,_isGreen); +EXPLODE_4_PVT(_this,_unit,_range,_isGreen,_brightness); _p0Pos = _unit modelToWorldVisual (_unit selectionPosition "righthand"); @@ -47,7 +49,7 @@ _p1 = _p0 vectorAdd (_v1 vectorMultiply _range); //Debugaaa = lineIntersectsObjs [_p0, _p1, objNull, _unit, false, 2]; _fnc_getDistanceToTerrain = { - private "_distance"; + private ["_distance"]; _pX = + _p0; _line = [_p0, _pX]; @@ -55,9 +57,7 @@ _fnc_getDistanceToTerrain = { _distance = _this; _iteration = _distance; - while { - _iteration > 0.05 / 2 - } do { + while {_iteration > 0.05 / 2} do { _iteration = _iteration / 2; _pX = _p0 vectorAdd (_v1 vectorMultiply _distance); diff --git a/addons/laserpointer/functions/fnc_onDraw.sqf b/addons/laserpointer/functions/fnc_onDraw.sqf index c1e955d028..09663f9ecf 100644 --- a/addons/laserpointer/functions/fnc_onDraw.sqf +++ b/addons/laserpointer/functions/fnc_onDraw.sqf @@ -1,18 +1,19 @@ // by commy2 #include "script_component.hpp" -_brightness = 2 - call EFUNC(common,ambientBrightness); -_isIR = currentVisionMode ACE_player; +private ["_brightness", "_cacheName", "_isIR", "_laser", "_laserID", "_weapon"]; +_isIR = currentVisionMode ACE_player; if (_isIR == 2) exitWith {}; _isIR = _isIR == 1; +_brightness = 2 - call EFUNC(common,ambientBrightness); + { _weapon = currentWeapon _x; _laser = switch (_weapon) do { - case (""): {""}; case (primaryWeapon _x): { primaryWeaponItems _x select 1; }; @@ -34,7 +35,7 @@ _isIR = _isIR == 1; }; if (_laserID > 0 && {_x isFlashlightOn _weapon}) then { - [_x, 50, _laserID == 2 || _isIR] call FUNC(drawLaserpoint); + [_x, 50, (_laserID == 2 || _isIR), _brightness] call FUNC(drawLaserpoint); }; }; diff --git a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf index 4927e7db13..99549ec18f 100644 --- a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf +++ b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf @@ -37,6 +37,11 @@ _nextPointer = getText (_config >> "ACE_nextModeClass"); if (_nextPointer == "") exitWith {}; +//If system disabled, don't switch to a laser: +private "_nextPointerIsLaser"; +_nextPointerIsLaser = getNumber (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_laserpointer"); +if ((!GVAR(enabled)) && {_nextPointerIsLaser == 1}) exitWith {}; + // disable inheritance for this entry, because addons claim this as a base class for convenience if !((_config >> "ACE_nextModeClass") in configProperties [_config, "true", false]) exitWith {}; diff --git a/addons/logistics_wirecutter/functions/fnc_isFence.sqf b/addons/logistics_wirecutter/functions/fnc_isFence.sqf index 1ab97a67af..4c247b268a 100644 --- a/addons/logistics_wirecutter/functions/fnc_isFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_isFence.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" //find is case sensitive, so keep everything lowercase -#define FENCE_TYPENAMES ["land_net_fence_4m_f", "land_net_fence_8m_f", "land_net_fenced_8m_f", "land_new_wiredfence_5m_f", "land_new_wiredfence_10m_dam_f", "land_new_wiredfence_10m_f", "land_pipe_fence_4m_f", "land_pipe_fence_4mnolc_f", "land_sportground_fence_f", "land_wired_fence_4m_f", "land_wired_fence_4md_f", "land_wired_fence_8m_f", "land_wired_fence_8md_f", "land_razorwire_f"] +#define FENCE_TYPENAMES ["land_net_fence_4m_f", "land_net_fence_8m_f", "land_net_fenced_8m_f", "land_new_wiredfence_5m_f", "land_new_wiredfence_10m_dam_f", "land_new_wiredfence_10m_f", "land_pipe_fence_4m_f", "land_pipe_fence_4mnolc_f", "land_sportground_fence_f", "land_wired_fence_4m_f", "land_wired_fence_4md_f", "land_wired_fence_8m_f", "land_wired_fence_8md_f", "land_razorwire_f", "ace_concertinawire"] #define FENCE_P3DS ["mil_wiredfence_f.p3d","wall_indfnc_3.p3d", "wall_indfnc_9.p3d", "wall_indfnc_corner.p3d", "pletivo_wired.p3d", "wall_fen1_5.p3d"] diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 707ec21b63..b94cde4b31 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -4,8 +4,8 @@ #define PREFIX ace #define MAJOR 3 -#define MINOR 0 -#define PATCHLVL 1 +#define MINOR 1 +#define PATCHLVL 2 #define BUILD 0 #define VERSION MAJOR.MINOR.PATCHLVL.BUILD diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 373275d6b9..7d5a9dda5a 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -6,94 +6,110 @@ Mapa Mapa Karte + Mapa Map illumination? Oświetlenie mapy ¿Iluminación de mapa? Kartenausleuchtung + Osvětlení mapy Calculate dynamic map illumination based on light conditions? Oblicza dynamiczne oświetlenie mapy bazujące na warunkach oświetleniowych Calcula la iluminación dinámica del mapa basandose en las condiciones de luz Berechne die Kartenauslichtung anhand des Umgebungslichts? + Vypočítat dynamické osvětlení mapy na základně světelných podmínek? Map shake? Drżenie mapy ¿Temblor de mapa? Kamerawackeln + Třesení mapy? Make map shake when walking? Ekran mapy drży podczas ruchu Hace que el mapa tiemble cuando caminas Kamerawackeln beim Gehen? + Umožnit třesení mapy za pochodu? Limit map zoom? Ograniczony zoom ¿Limitar el zoom de mapa? Kartenzoom einschränken + Omezit přiblížení mapy? Limit the amount of zoom available for the map? Ogranicza maksymalny stopień przybliżenia mapy Limita la cantidad de zoom disponible para el mapa Zoomstufe der Karte einschränken? + Omezit stupeň přiblížení pro mapu? Show cursor coordinates? Koordynaty pod kursorem ¿Mostrar coordenadas de cursor? Zeige Cursor-Koordinaten? + Zobrazit souřadnice u kurzoru? Show the grid coordinates on the mouse pointer? Pokazuje pod kursorem koordynaty wskazanego kwadratu mapy Muestra las coordenadas de la cuadricula en el puntero del ratón Gitter-Koordinaten auf dem Mauszeiger anzeigen? + Zobrazit souřadnice u kurzoru v mapě? Moduł ten pozwala dostosować opcje widoku ekranu mapy. Dieses Modul erweitert die Kartenfunktionen. + Tento modul umožňuje přizpůsobit mapu s obrazem. Blue Force Tracking Blue Force Tracking Seguimiento de fuerzas amigas Blue Force Tracking + Blue Force Tracking Interval Interwał Intervalo Intervall + Interval How often the markers should be refreshed (in seconds) Jak często markery powinny być odświeżane (w sekundach) Frecuencia de actualización de los marcadores (en segundos) Wie oft sollen die Markierungen aktualisiert werden (in Sekunden) + Jak často budou značky aktualizovány (v sekundách) Hide AI groups? Ukryj grupy AI ¿Ocultar grupos de IA? KI-Gruppen verstecken? + Skrýt AI skupiny? Hide markers for 'AI only' groups? Ukrywa markery dla grup złożonych tylko z AI Oculta las marcas de grupos 'solo IA' Verstecke Marker für "nur KI"-Gruppen? + Skrýt značky pouze pro AI skupiny? Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT. Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen. + Umožňuje sledovat přátelské jednokty na mapě v rámci BFT. - + \ No newline at end of file diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index 8e7a98fd16..8eacf39006 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -219,7 +219,7 @@ class ACE_Medical_Actions { items[] = {"ACE_personalAidKit"}; treatmentLocations[] = {QGVAR(useLocation_PAK)}; requiredMedic = QGVAR(medicSetting_PAK); - treatmentTime = 10; + treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime)); callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal)); itemConsumed = QGVAR(consumeItem_PAK); animationPatient = ""; @@ -328,6 +328,7 @@ class ACE_Medical_Advanced { class Large { name = CSTRING(Wounds_Abrasion_Large); minDamage = 0.3; + maxDamage = 0.5; bleedingRate = 0.0002; }; }; diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index 0eec23142f..2b28e91882 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -59,6 +59,10 @@ class ACE_Settings { typeName = "SCALAR"; values[] = {"Disabled", "50/50", "Enabled"}; }; + class GVAR(remoteControlledAI) { + typeName = "BOOL"; + value = 1; + }; class GVAR(preventInstaDeath) { typeName = "BOOL"; value = 0; @@ -134,6 +138,12 @@ class ACE_Settings { value = 1; }; class GVAR(healHitPointAfterAdvBandage) { + displayName = CSTRING(healHitPointAfterAdvBandage); + typeName = "BOOL"; + value = 0; + }; + class GVAR(painIsOnlySuppressed) { + displayName = CSTRING(painIsOnlySuppressed); typeName = "BOOL"; value = 1; }; diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp index c862801f29..c8a4528ca5 100644 --- a/addons/medical/CfgVehicles.hpp +++ b/addons/medical/CfgVehicles.hpp @@ -106,6 +106,12 @@ class CfgVehicles { }; }; }; + class remoteControlledAI { + displayName = CSTRING(MedicalSettings_remoteControlledAI_DisplayName); + description = CSTRING(MedicalSettings_remoteControlledAI_Description); + typeName = "BOOL"; + defaultValue = 1; + }; class preventInstaDeath { displayName = CSTRING(MedicalSettings_preventInstaDeath_DisplayName); description = CSTRING(MedicalSettings_preventInstaDeath_Description); @@ -221,7 +227,18 @@ class CfgVehicles { displayName = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName); description = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_Description); }; - + class healHitPointAfterAdvBandage { + displayName = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_DisplayName); + description = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description); + typeName = "BOOL"; + defaultValue = 0; + }; + class painIsOnlySuppressed { + displayName = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_DisplayName); + description = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_Description); + typeName = "BOOL"; + defaultValue = 1; + }; }; class ModuleDescription { description = CSTRING(AdvancedMedicalSettings_Module_Description); @@ -666,7 +683,7 @@ class CfgVehicles { EGVAR(dragging,dragDirection) = 0; class ACE_Actions { class ACE_MainActions { - displayName = CSTRING(MainAction); + displayName = ECSTRING(interaction,MainAction); distance = 5; condition = QUOTE(true); statement = ""; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index d3c2275751..a932ee5c9d 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -40,6 +40,7 @@ PREP(handleDamage_caching); PREP(handleDamage_fractures); PREP(handleDamage_internalInjuries); PREP(handleDamage_wounds); +PREP(handleDamage_woundsOld); PREP(handleUnitVitals); PREP(handleKilled); PREP(handleLocal); @@ -76,6 +77,7 @@ PREP(treatmentAdvanced_CPR); PREP(treatmentAdvanced_CPRLocal); PREP(treatmentAdvanced_fullHeal); PREP(treatmentAdvanced_fullHealLocal); +PREP(treatmentAdvanced_fullHealTreatmentTime); PREP(treatmentAdvanced_medication); PREP(treatmentAdvanced_medicationLocal); PREP(treatmentAdvanced_surgicalKit_onProgress); @@ -111,6 +113,8 @@ PREP(handleCreateLitter); GVAR(injuredUnitCollection) = []; GVAR(IVBags) = []; +DFUNC(handleDamage_assignWounds) = if ("ace_medical" callExtension "version" == "") then { DFUNC(handleDamage_woundsOld) } else { DFUNC(handleDamage_wounds)}; + call FUNC(parseConfigForInjuries); GVAR(HITPOINTS) = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; diff --git a/addons/medical/functions/fnc_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index 96c7251d6b..a73f32265a 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -24,4 +24,4 @@ _drag = if (count _this > 2) then {_this select 2} else {false}; if (vehicle _target == _target) exitwith {}; if (([_target] call EFUNC(common,isAwake))) exitwith {}; -[_target] call EFUNC(common,unloadPerson) \ No newline at end of file +["unloadPersonEvent", _target, [_target, vehicle _target]] call EFUNC(common,targetEvent) \ No newline at end of file diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf index 35e8b900fb..9da0d065ed 100644 --- a/addons/medical/functions/fnc_handleDamage_advanced.sqf +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -42,7 +42,7 @@ _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; [_unit] call FUNC(handleDamage_advancedSetDamage); _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); -[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_wounds); +[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds); // TODO Disabled until implemented fully //if (GVAR(enableAirway)) then { diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index 042d9c702b..9760770d71 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -18,7 +18,7 @@ #include "script_component.hpp" -private ["_unit", "_selectionName","_damage", "_source","_projectile","_hitSelections","_hitPoints","_newDamage","_cache_hitpoints","_cache_projectiles","_cache_params","_cache_damages"]; +private ["_unit", "_selectionName", "_damage", "_source", "_projectile", "_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"]; _unit = _this select 0; _selectionName = _this select 1; _damage = _this select 2; @@ -46,21 +46,29 @@ if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isN }; }; -// From AGM medical: -// Exclude falling damage to everything other than legs; reduce structural damage. -if (((velocity _unit) select 2 < -5) && {(vehicle _unit == _unit)}) then { +// Handle falling damage +_impactVelocity = (velocity _unit) select 2; +if (_impactVelocity < -5 && {vehicle _unit == _unit}) then { _unit setVariable [QGVAR(isFalling), true]; + _unit setVariable [QGVAR(impactVelocity), _impactVelocity]; +}; +if (_unit getVariable [QGVAR(isFalling), false]) then { + if !(_selectionName in ["", "leg_l", "leg_r"]) then { + if (_selectionName == "body") then { + _newDamage = _newDamage * abs(_unit getVariable [QGVAR(impactVelocity), _impactVelocity]) / 50; + } else { + _newDamage = _newDamage * 0.5; + }; + } else { + if (_selectionName == "") then { + _selectionName = ["leg_l", "leg_r"] select (floor(random 2)); + _this set [1, _selectionName]; + }; + _newDamage = _newDamage * 0.7; + }; _projectile = "falling"; _this set [4, "falling"]; }; -if (_unit getVariable [QGVAR(isFalling), false] && {!(_selectionName in ["", "leg_l", "leg_r"])}) exitWith {0}; -if (_unit getVariable [QGVAR(isFalling), false]) then { - if (_selectionName == "") then { - _selectionName = ["leg_l", "leg_r"] select (floor(random 2)); - }; - _this set [1, _selectionName]; - _newDamage = _newDamage * 0.7; -}; // Finished with the current frame, reset variables // Note: sometimes handleDamage spans over 2 or even 3 frames. @@ -95,7 +103,7 @@ if (_selectionName != "") then { private ["_index","_otherDamage"]; _index = _cache_projectiles find _projectile; // Check if the current projectile has already been handled once - if (_index >= 0) exitwith { + if (_index >= 0 && {_projectile != "falling"}) exitwith { _cache_damages = _unit getVariable QGVAR(cachedDamages); // Find the previous damage this projectile has done _otherDamage = (_cache_damages select _index); diff --git a/addons/medical/functions/fnc_handleDamage_woundsOld.sqf b/addons/medical/functions/fnc_handleDamage_woundsOld.sqf new file mode 100644 index 0000000000..1034ba9cae --- /dev/null +++ b/addons/medical/functions/fnc_handleDamage_woundsOld.sqf @@ -0,0 +1,143 @@ +/* + * Author: Glowbal + * Handling of the open wounds & injuries upon the handleDamage eventhandler. + * + * Arguments: + * 0: Unit That Was Hit + * 1: Name Of Hit Selection + * 2: Amount Of Damage + * 3: Shooter or source of the damage + * 4: Type of the damage done + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"]; +_unit = _this select 0; +_selectionName = _this select 1; +_damage = _this select 2; +_typeOfProjectile = _this select 3; +_typeOfDamage = _this select 4; + +// Convert the selectionName to a number and ensure it is a valid selection. +_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber); +if (_bodyPartn < 0) exitwith {}; + +// Get the injury type information. Format: [typeDamage thresholds, selectionSpecific, woundTypes] +_injuryTypeInfo = missionNamespace getvariable [format[QGVAR(woundInjuryType_%1), _typeOfDamage],[[], false, []]]; + +// This are the available injuries for this damage type. Format [[classtype, selections, bloodloss, minimalDamage, pain], ..] +_allInjuriesForDamageType = _injuryTypeInfo select 2; +// It appears we are dealing with an unknown type of damage. + +if (count _allInjuriesForDamageType == 0) then { + // grabbing the configuration for unknown damage type + _injuryTypeInfo = missionNamespace getvariable [QGVAR(woundInjuryType_unknown),[[], false, []]]; + _allInjuriesForDamageType = _injuryTypeInfo select 2; +}; + +// find the available injuries for this damage type and damage amount +_highestPossibleSpot = -1; +_highestPossibleDamage = -1; +_allPossibleInjuries = []; +{ + _damageLevels = _x select 4; + _minDamage = _damageLevels select 0; + _maxDamage = _damageLevels select 1; + + // Check if the damage is higher as the min damage for the specific injury + if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then { + //_classType = _x select 0; + _selections = _x select 1; + //_bloodLoss = _x select 2; + //_pain = _x select 3; + + // Check if the injury can be applied to the given selection name + if ("All" in _selections || _selectionName in _selections) then { + + // Find the wound which has the highest minimal damage, so we can use this later on for adding the correct injuries + if (_minDamage > _highestPossibleDamage) then { + _highestPossibleSpot = _foreachIndex; + _highestPossibleDamage = _minDamage; + }; + + // Store the valid possible injury for the damage type, damage amount and selection + _allPossibleInjuries pushback _x; + }; + }; +}foreach _allInjuriesForDamageType; + +// No possible wounds available for this damage type or damage amount. +if (_highestPossibleSpot < 0) exitwith {}; + +// Administration for open wounds and ids +_openWounds = _unit getvariable[QGVAR(openWounds), []]; +_woundID = _unit getvariable[QGVAR(lastUniqueWoundID), 1]; + +_painToAdd = 0; +_woundsCreated = []; +{ + if (_x select 0 <= _damage) exitwith { + for "_i" from 0 to (1+ floor(random(_x select 1)-1)) /* step +1 */ do { + + // Find the injury we are going to add. Format [ classID, allowdSelections, bloodloss, painOfInjury, minimalDamage] + _toAddInjury = if (random(1) >= 0.85) then {_allInjuriesForDamageType select _highestPossibleSpot} else {_allPossibleInjuries select (floor(random (count _allPossibleInjuries)));}; + _toAddClassID = _toAddInjury select 0; + _foundIndex = -1; + + _bodyPartNToAdd = if (_injuryTypeInfo select 1) then {_bodyPartn} else {floor(random(6))}; + // If the injury type is selection part specific, we will check if one of those injury types already exists and find the spot for it.. + if ((_injuryTypeInfo select 1)) then { + { + // Check if we have an id of the given class on the given bodypart already + if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith { + _foundIndex = _foreachIndex; + }; + }foreach _openWounds; + }; + + _injury = []; + if (_foundIndex < 0) then { + // Create a new injury. Format [ID, classID, bodypart, percentage treated, bloodloss rate] + _injury = [_woundID, _toAddInjury select 0, _bodyPartNToAdd, 1, _toAddInjury select 2]; + + // Since it is a new injury, we will have to add it to the open wounds array to store it + _openWounds pushback _injury; + + // New injuries will also increase the wound ID + _woundID = _woundID + 1; + } else { + // We already have one of these, so we are just going to increase the number that we have of it with a new one. + _injury = _openWounds select _foundIndex; + _injury set [3, (_injury select 3) + 1]; + }; + // Store the injury so we can process it later correctly. + _woundsCreated pushback _injury; + + // Collect the pain that is caused by this injury + _painToAdd = _painToAdd + (_toAddInjury select 3); + }; + }; +}foreach (_injuryTypeInfo select 0); // foreach damage thresholds + +_unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC]; + +// Only update if new wounds have been created +if (count _woundsCreated > 0) then { +// _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true]; +}; + +if (USE_WOUND_EVENT_SYNC) then { + // Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries. + { + // ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent); + }foreach _woundsCreated; +}; + +_painLevel = _unit getvariable [QGVAR(pain), 0]; +_unit setvariable [QGVAR(pain), _painLevel + _painToAdd]; diff --git a/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf index cf884e0ab0..5263044583 100644 --- a/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf @@ -33,3 +33,5 @@ if !(_activated) exitWith {}; [_logic, QGVAR(consumeItem_SurgicalKit), "consumeItem_SurgicalKit"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(useLocation_PAK), "useLocation_PAK"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(useLocation_SurgicalKit), "useLocation_SurgicalKit"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(healHitPointAfterAdvBandage), "healHitPointAfterAdvBandage"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(painIsOnlySuppressed), "painIsOnlySuppressed"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_moduleMedicalSettings.sqf b/addons/medical/functions/fnc_moduleMedicalSettings.sqf index 296b4f1d56..00b7a15fcf 100644 --- a/addons/medical/functions/fnc_moduleMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleMedicalSettings.sqf @@ -30,6 +30,7 @@ if !(_activated) exitWith {}; [_logic, QGVAR(playerDamageThreshold), "playerDamageThreshold"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(AIDamageThreshold), "AIDamageThreshold"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(enableUnconsciousnessAI), "enableUnconsciousnessAI"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(remoteControlledAI), "remoteControlledAI"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(preventInstaDeath), "preventInstaDeath"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(bleedingCoefficient), "bleedingCoefficient"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(painCoefficient), "painCoefficient"] call EFUNC(common,readSettingFromModule); diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index b5360aa8df..3298c0a869 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -48,7 +48,7 @@ if (_unit == ACE_player) then { // if we have unconsciousness for AI disabled, we will kill the unit instead _isDead = false; -if (!([_unit] call EFUNC(common,isPlayer)) && !_force) then { +if (!([_unit, GVAR(remoteControlledAI)] call EFUNC(common,isPlayer)) && !_force) then { _enableUncon = _unit getVariable [QGVAR(enableUnconsciousnessAI), GVAR(enableUnconsciousnessAI)]; if (_enableUncon == 0 or {_enableUncon == 1 and (random 1) < 0.5}) then { [_unit, true] call FUNC(setDead); diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf new file mode 100644 index 0000000000..108bdd4a5d --- /dev/null +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealTreatmentTime.sqf @@ -0,0 +1,26 @@ +/* + * Author: Ruthberg + * Calculates the personal aid kit treatment time based on amount of damage to heal + * + * Arguments: + * unit + * + * Return Value: + * treatment time + * + * Example: + * [_target] call ace_medical_fnc_treatmentAdvanced_fullHealTreatmentTime + * + * Public: No + */ +#include "script_component.hpp" + +private ["_target", "_totalDamage"]; +_target = _this; +_totalDamage = 0; + +{ + _totalDamage = _totalDamage + _x; +} forEach (_target getVariable [QGVAR(bodyPartStatus), []]); + +(10 max (_totalDamage * 10) min 120) diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf index 4936d0e412..c4ba840398 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf @@ -60,21 +60,25 @@ _heartRate = _target getvariable [QGVAR(heartRate), 70]; if (alive _target) then { if (_heartRate > 0) then { if (_heartRate <= 45) then { - [_target, ((_hrIncreaseLow select 0) + random((_hrIncreaseLow select 1))), (_hrIncreaseLow select 2), _hrCallback] call FUNC(addHeartRateAdjustment); + [_target, ((_hrIncreaseLow select 0) + random ((_hrIncreaseLow select 1) - (_hrIncreaseLow select 0))), (_hrIncreaseLow select 2), _hrCallback] call FUNC(addHeartRateAdjustment); } else { if (_heartRate > 120) then { - [_target, ((_hrIncreaseHigh select 0) + random((_hrIncreaseHigh select 1))), (_hrIncreaseHigh select 2), _hrCallback] call FUNC(addHeartRateAdjustment); + [_target, ((_hrIncreaseHigh select 0) + random ((_hrIncreaseHigh select 1) - (_hrIncreaseHigh select 0))), (_hrIncreaseHigh select 2), _hrCallback] call FUNC(addHeartRateAdjustment); } else { - [_target, ((_hrIncreaseNorm select 0) + random((_hrIncreaseNorm select 1))), (_hrIncreaseNorm select 2), _hrCallback] call FUNC(addHeartRateAdjustment); + [_target, ((_hrIncreaseNorm select 0) + random ((_hrIncreaseNorm select 1) - (_hrIncreaseNorm select 0))), (_hrIncreaseNorm select 2), _hrCallback] call FUNC(addHeartRateAdjustment); }; }; }; }; if (_painReduce > 0) then { - // Reduce the pain level + // Reduce pain _painSuppress = _target getvariable [QGVAR(painSuppress), 0]; _target setvariable [QGVAR(painSuppress), (_painSuppress + _painReduce) max 0]; + if (!GVAR(painIsOnlySuppressed)) then { + _pain = _target getvariable [QGVAR(pain), 0]; + _target setvariable [QGVAR(pain), (_pain - _painReduce) max 0, true]; + }; }; _resistance = _target getvariable [QGVAR(peripheralResistance), 100]; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 543a2e6ae9..6fa58bb759 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1591,6 +1591,7 @@ Żadna Nada Keine + Žádný Weak @@ -2204,6 +2205,20 @@ Pravá noha Perna Direita + + Bandaging removes bloodstains + Bandagieren entfernt Blutflecken + Bandażowanie usuwa ślady krwi + Obvázání odstraňuje skvrny od krve + El vendaje elimina las manchas de sangre + + + Pain is only temporarily suppressed + Schmerzen werden nur vorübergehend unterdrückt + Ból jest tymczasowo zwalczany + Bolest je potlačena pouze dočasně + El dolor se suprime solo temporalmente + Pain Effect Type Schmerzeffekt-Typ @@ -2714,6 +2729,7 @@ ACE Opcje medyczne Médico ACE ACE-Medicsystem + ACE Zdravotnické Medical Settings [ACE] @@ -2721,6 +2737,7 @@ Ustawienia medyczne [ACE] Ajustes médicos [ACE] Medizinische Einstellungen [ACE] + Lékařské nastavení [ACE] Medical Level @@ -2728,6 +2745,7 @@ Poziom medyczny Nivel médico Medizinisches Level + Úroveň medického What is the medical simulation level? @@ -2735,6 +2753,7 @@ Jaki jest poziom symulacji medycznej? ¿Cuál es el nivel de simulación médica? Wie hoch soll das medizinische Simulationslevel sein? + Jaká je úroveň lékařské simulace? Basic @@ -2742,6 +2761,7 @@ Podstawowy Básico Standard + Základní Advanced @@ -2749,6 +2769,7 @@ Zaawansowany Avanzado Erweitert + Pokročilé Medics setting @@ -2756,12 +2777,14 @@ Poziom medyków Configuración médica Medizinische Einstellungen + Úroveň zdravotníků What is the level of detail prefered for medics? Каков уровень подробностей для медиков? Jaki jest poziom detali medycznych wyświetlanych dla medyków? ¿Cuál es el nivel de detalle preferido para los médicos? + Jaká úroveň detailů je preferována pro zdravotníky? Disable medics @@ -2769,6 +2792,7 @@ Wyłącz medyków Desactivar médicos Sanitäter deaktivieren + Zakázat zdravotníky Enable Litter @@ -2776,6 +2800,7 @@ Aktywuj odpadki Activar restos médicos Abfälle aktivieren + Povolit odpadky Enable litter being created upon treatment @@ -2783,6 +2808,7 @@ Twórz odpadki medyczne podczas leczenia Activar los restos médicos que se crean en el tratamiento Aktiviere Abfälle, wenn eine Behandlung durchgeführt wurde + Vytváří odpad zdravotnického materiálu pří léčení Life time of litter objects @@ -2790,6 +2816,7 @@ Długość życia odpadków Tiempo de vida de los restos médicos Dauer des angezeigten Abfalls + Životnost pro odpadky How long should litter objects stay? In seconds. -1 is forever. @@ -2797,6 +2824,7 @@ Ile czasu musi upłynąć, aby odpadki zaczęły znikać? W sekundach. -1 dla nieskończoności. ¿Por cuánto tiempo deben permanecer los restos médicos? En segundos. -1 es para siempre. Wie lange sollen Abfälle am Boden liegen (in Sekunden)? -1 ist für immer. + Za jak dlouho začnou odpadky mizet? V sekundách. -1 navždy. Enable Screams @@ -2804,6 +2832,7 @@ Aktywuj wrzaski Activar gritos Schreie aktivieren + Povolit křik Enable screaming by injuried units @@ -2811,6 +2840,7 @@ Aktywuj wrzeszczenie z bólu przez ranne jednostki Activar gritos para unidades heridas Aktiviere Schreie bei verletzten Einheiten + Povolit křičení zraněných jednotek Player Damage @@ -2818,6 +2848,7 @@ Próg obrażeń graczy Daño de jugador Spielerschaden + Poškození hráče What is the damage a player can take before being killed? @@ -2825,6 +2856,7 @@ Jaki jest próg obrażeń, jakie gracz może otrzymać zanim zostanie zabity? ¿Cuál es el daño que un jugador puede sufrir antes de morir? Wie viel Schaden kann ein Spieler erleiden, bevor er getötet wird? + Jaké poškození může hráč dostat než bude zabit? AI Damage @@ -2832,6 +2864,7 @@ Próg obrażeń AI Daño IA KI-Schaden + Poškození AI What is the damage an AI can take before being killed? @@ -2839,6 +2872,7 @@ Jaki jest próg obrażeń, jakie AI może otrzymać zanim zostanie zabite? ¿Cuál es el daño que la IA puede sufrir antes de morir? Wie viel Schaden kann eine KI erleiden, bis sie getötet wird? + Jaké poškození může AI dostat než bude zabito? AI Unconsciousness @@ -2846,6 +2880,7 @@ Nieprzytomność AI Inconsciencia IA KI-Bewusstlosigkeit + Bezvědomí AI Allow AI to go unconscious @@ -2853,6 +2888,15 @@ Czy AI może być nieprzytomne od odniesionych obrażeń? Permita a la IA caer inconsciente KI kann bewusstlos werden + Umožňuje AI upadnout do bezvědomí + + + Remote Controlled AI + IA controlada remotamente + + + Treat remote controlled units as AI not players? + ¿Tratar unidades remotamente controladas como IA? Disabled @@ -2860,6 +2904,7 @@ Wyłączone Activado Deaktiviert + Zakázáno Enabled @@ -2867,6 +2912,7 @@ Włączone Desactivado Aktiviert + Povoleno Prevent instant death @@ -2874,6 +2920,7 @@ Wył. natychmiast. śmierć Prevenir muerte instantánea Verhindere direkten Tod + Zabránit okamžité smrti Have a unit move to unconscious instead of death @@ -2881,6 +2928,7 @@ Spraw, aby jednostka została przeniesiona do stanu nieprzytomności zamiast ginąć na miejscu od śmiertelnych obrażeń Mover una unidad a inconsciente en vez de a muerta Lässt eine Einheit bewusstlos werden anstatt zu sterben + Jednotka upadne do bezvědomí namísto smrti Bleeding coefficient @@ -2888,6 +2936,7 @@ Mnożnik krwawienia Coeficiente de sangrado Verblutungsmultiplikator + Koeficient krvácení Coefficient to modify the bleeding speed @@ -2895,6 +2944,7 @@ Mnożnik modyfikujący prędkość wykrwawiania się Coeficiente para modificar la velocidad de sangrado Multiplikator um die Verblutungsgeschwindigkeit zu verändern + Koeficient rychlosti krvácení Pain coefficient @@ -2902,6 +2952,7 @@ Mnożnik bólu Coeficiente de dolor Schmerzmultiplikator + Koeficient bolesti Coefficient to modify the pain intensity @@ -2909,6 +2960,7 @@ Mnożnik modyfikujący intensywność bólu Coeficiente para modificar la intensidad del dolor Multiplikator um den Schmerzintensität zu verändern + Koeficient intenzity bolesti Sync status @@ -2916,6 +2968,7 @@ Synchronizuj status Sincronizador estado Status synchronisieren + Synchronizovat status Keep unit status synced. Recommended on. @@ -2923,6 +2976,7 @@ Utrzymuj synchronizację statusu jednostek. Zalecane zostawienie tej opcji włączonej. Mantener el estado de la unidad sincronizado. Recomendado activado Status der Einheit synchron halten. Sollte aktiviert bleiben. + Udržuje status jednotky synchronizovaný. Doporučeno zapnout. Provides a medical system for both players and AI. @@ -2930,6 +2984,7 @@ Moduł ten dostarcza system medyczny dla graczy oraz AI. Proporciona un sistema médico para jugadores e IA. Aktiviert ein medizinisches System für Spieler und KI. + Poskytuje zdravotní systém pro hráče a AI. Advanced Medical Settings [ACE] @@ -2937,6 +2992,7 @@ Zaawansowane ustawienia medyczne [ACE] Ajustes médicos avanzados [ACE] Erweiterte medizinische Einstellungen [ACE] + Pokročilé zdravotnické nastavení [ACE] Enabled for @@ -2944,6 +3000,7 @@ Aktywne dla Hablitado para Aktiviert für + Povoleno pro Select what units the advanced medical system will be enabled for @@ -2951,6 +3008,7 @@ Wybierz dla kogo zaawansowany system medyczny będzie aktywny Seleccione para qué unidades será habilitado el sistema médico avanzado Wähle aus welche Einheiten das erweiterte medizinische System haben + Vyberte, pro jaké jednotky bude pokročilý zdravotní systém povolen Players only @@ -2958,6 +3016,7 @@ Tylko dla graczy Solo jugadores Nur Spieler + Pouze hráči Players and AI @@ -2965,6 +3024,7 @@ Gracze oraz AI Jugadors e IA Spieler und KI + Hráči a AI Enable Advanced wounds @@ -2972,6 +3032,7 @@ Akt. zaawansowane rany Activa heridas avanzadas Aktiviere erweiterte Wunden + Povolit pokročilé zranění Allow reopening of bandaged wounds? @@ -2979,6 +3040,7 @@ Pozwól na otwieranie się zabandażowanych ran? Permitir la reapertura de las heridas vendadas? Erlaube das Öffnen von bandagierten Wunden? + Umožnit znovuotevření zavázané rány? Vehicle Crashes @@ -2986,6 +3048,7 @@ Obrażenia od kolizji Accidentes de vehículos Fahrzeugunfälle + Poškození z kolize Do units take damage from a vehicle crash? @@ -2993,6 +3056,7 @@ Czy jednostki otrzymują obrażenia w wyniku kolizji pojazdów? ¿Las unidades reciben daño de un accidente de tráfico? Bekommen Einheiten von Fahrzeugunfällen Schaden? + Dostane jednotka poškození při autonehodě? Allow PAK @@ -3000,6 +3064,7 @@ Ust. apteczek osobistych Permitir EPA Erlaube Erstehilfekasten + Povolit osobní lékárničky Who can use the PAK for full heal? @@ -3007,6 +3072,7 @@ Kto może skorzystać z apteczki osobistej w celu pełnego uleczenia? ¿Quién puede utilizar el EPA para una cura completa? Wer kann den Erstehilfekasten für eine Endheilung verwenden? + Kdo může použít osobní lékárničku pro plné vyléčení? Anyone @@ -3014,6 +3080,7 @@ Wszyscy Nadie Jeder + Kdokoliv Medics only @@ -3021,6 +3088,7 @@ Tylko medycy Solo médicos Nur Sanitäter + Pouze zdravotník Doctors only @@ -3028,6 +3096,7 @@ Tylko doktorzy Solo doctores Nur Ärzte + Pouze doktor Remove PAK on use @@ -3035,6 +3104,7 @@ Usuń apteczkę po użyciu Eliminar EPA después del uso Entferne Erstehilfekasten bei Verwendung + Odebrat osobní lékárničku po použití Should PAK be removed on usage? @@ -3042,6 +3112,7 @@ Czy apteczka osobista powinna zniknąć z ekwipunku po jej użyciu? El EPA será eliminado después de usarlo Sollen Erstehilfekästen bei Verwendung entfernt werden? + Má se osobní lékárnička odstranit po použití? Locations PAK @@ -3049,6 +3120,7 @@ Ogr. apteczek osobistych Ubicacions del EPA Orte für Erstehilfekasten + Lokace osobní lékárničky Where can the personal aid kit be used? @@ -3056,6 +3128,7 @@ Gdzie można korzystać z apteczek osobistych? ¿Dónde se puede utilizar el equipo de primeros auxilios? Wo kann der Erstehilfekasten verwendet werden? + Kde může být osobní lékárnička použita? Anywhere @@ -3063,6 +3136,7 @@ Wszędzie Donde sea Überall + Kdekoliv Medical vehicles @@ -3070,6 +3144,7 @@ Pojazdy medyczne Vehiculos médicos Medizinische Fahrzeuge + Zdravotnická vozidla Medical facility @@ -3077,6 +3152,7 @@ Budynki medyczne Centro médico Medizinische Einrichtungen + Zdravotnické zařízení Vehicles & facility @@ -3084,6 +3160,7 @@ Pojazdy i budynki medyczne Vehículos y centros Fahrzeuge & Einrichtungen + Vozidla a zařízení Disabled @@ -3091,6 +3168,7 @@ Wyłączone Desactivado Deaktiviert + Zakázáno Allow Surgical kit (Adv) @@ -3098,6 +3176,7 @@ Ust. zestawu chirurg. Permitir equipo quirúrgico (Avanzado) Erlaube Operationskasten + Povolit chirurgickou soupravu (Pokr.) Who can use the surgical kit? @@ -3105,6 +3184,7 @@ Kto może skorzystać z zestawu chirurgicznego w celu zszycia ran? ¿Quién puede utilizar el equipo quirúrgico? Wer kann den Operationskasten verwenden? + Kdo může použít chirurgickou soupravu? Remove Surgical kit (Adv) @@ -3112,6 +3192,7 @@ Usuń zest. chir. po użyciu Eliminar equipo quirúrgico (Avanzado) Enrtferne Operationskasten (erweitert) + Odebrat chirurgickou soupravu (Pokr.) Should Surgical kit be removed on usage? @@ -3119,6 +3200,7 @@ Czy zestaw chirurgiczny powinien zniknąć z ekwipunku po jego użyciu? Eliminar el equipo quirúrgico después del uso Entferne Operationskästen bei Verwendung? + Odebrat chirurgickou soupravu po použití? Locations Surgical kit (Adv) @@ -3126,6 +3208,7 @@ Ogr. zestawu chirurg. Ubicaciones del equipo quirúrgico (Avanzado) Orte für Operationskästen (erweitert) + Lokace chirurgické soupravy (Pokr.) Where can the Surgical kit be used? @@ -3133,6 +3216,35 @@ Gdzie można korzystać z zestawu chirurgicznego? Dónde se puede utilizar el equipo quirúrgico Wo kann der Operationskasten verwendet werden? + Kde může být použita chirurgická souprava? + + + Bloodstains + Blutflecken + Plamy krwi + Skvrny od krve + Manchas de sangre + + + Bandaging removes bloodstains + Bandagieren entfernt Blutflecken + Bandażowanie usuwa ślady krwi + Obvázání odstraňuje skvrny od krve + El vendaje elimina las manchas de sangre + + + Pain suppression + Schmerzunterdrückung + Zwalczanie bólu + Potlačení bolesti + Supresión del dolor + + + Pain is only temporarily suppressed, not removed + Schmerzen werden nur vorübergehend unterdrückt, nicht entfernt + Ból jest tylko tymczasowo zwalczany, nie jest usuwany trwale + Bolest je potlačena, ale jen dočastně + El dolor se suprime solo temporalmente, no se elimina. Configure the treatment settings from ACE Medical @@ -3140,6 +3252,7 @@ Skonfiguruj zaawansowane ustawienia leczenia systemu medycznego ACE Configure las opciones de tratamiento del ACE Médico Behandlungseinstellungen vom ACE-Medical konfigurieren + Konfigurace nastavení léčby ze zdravotnické systému ACE Revive Settings [ACE] @@ -3147,6 +3260,7 @@ Ustawienia wskrzeszania [ACE] Sistema de resucitado [ACE] Wiederbelebungseinstellungen [ACE] + Nastavení oživení [ACE] Enable Revive @@ -3154,6 +3268,7 @@ Aktywuj wskrzeszanie Habilitar resucitado Erlaube Wiederbelebung + Povolit oživení Enable a basic revive system @@ -3161,6 +3276,7 @@ Aktywuj podstawowy system wskrzeszania Habilitar un sistema básico de resucitado Aktiviere Standard-Wiederbelebungssystem + Povolit základní systém oživení Max Revive time @@ -3168,6 +3284,7 @@ Maks. czas agonii Tiempo máximo de resucitado Maximale Wiederbelebungszeit + Maximální čas pro oživení Max amount of seconds a unit can spend in revive state @@ -3175,6 +3292,7 @@ Maksymalna długość agonii w sekundach (czas na wskrzeszenie) Cantidad máxima de segundos que una unidad puede gastar en estado de resucitación Maximale Zeitspanne in Sekunden die eine Einheit im Wiederbelebungszustand verbringen kann + Maximální doba v agónii v sekundách Max Revive lives @@ -3182,6 +3300,7 @@ Maks. ilość wskrzeszeń Vidas máximas de resucitado Maximale Leben bei Wiederbelebung + Maximální počet oživení Max amount of lives a unit. 0 or -1 is disabled. @@ -3189,6 +3308,7 @@ Maksymalna ilość wskrzeszeń. Wpisz 0 lub -1 aby wyłączyć. Cantidad máxima de vidas por unidad. 0 o -1 es desactivado. Maximale Anzahl von Leben einer Einheit. 0 or -1 bedeutet deaktiviert. + Maximální počet životu pro jednotku. 0 nebo -1 je zakázáno. Provides a medical system for both players and AI. @@ -3196,6 +3316,7 @@ Moduł ten aktywuje podstawowy system wskrzeszania. Jednostka po otrzymaniu śmiertelnych obrażeń przechodzi do stanu agonii, która trwa określoną długość czasu. W tym czasie aby wskrzesić i jednocześnie odratować jednostkę należy opatrzeć jej rany i wykonać RKO. Proporciona un sistema médico para jugadores e IA. Aktiviert das Medicsystem für Spieler und KI. + Poskytuje zdravotní systém pro hráče a AI. Set Medic Class [ACE] @@ -3203,6 +3324,7 @@ Ustaw klasę medyka [ACE] Establecer case médica [ACE] Setze Sanitäterklassen [ACE] + Určit třídu medika [ACE] List @@ -3210,6 +3332,7 @@ Lista Lista Liste + Seznam List of unit names that will be classified as medic, separated by commas. @@ -3217,6 +3340,7 @@ Lista nazw jednostek, które są sklasyfikowane jako medycy, oddzielone przecinkami. Lista de los nombres de las unidades que se clasifican como médico, separados por comas. Liste von Namen, die als Sanitäter verwendet werden. Wird durch Kommas getrennt. + Seznam osob které budou klasifikovány jako zdravotník, oddělené čárkami. Is Medic @@ -3224,12 +3348,14 @@ Klasa medyczna Es médico Ist Sanitäter + Je zdravotník Dieses Modul legt fest welche Einheit ein Sanitäter ist. + Tento modul určuje, která jednotka je zdravotník. None @@ -3237,6 +3363,7 @@ Żadna Nada Keine + Žádný Regular medic @@ -3244,6 +3371,7 @@ Zwykły medyk Médico regular Normaler Sanitäter + Řadový zdravotník Doctor (Only Advanced Medics) @@ -3251,6 +3379,7 @@ Doktor (tylko zaawansowani medycy) Doctor (Solo medicina avanzada) Arzt (nur erweiterte Sanitäter) + Doktor (Pouze pokročilý zdravotníci) Assigns the ACE medic class to a unit @@ -3258,6 +3387,7 @@ Moduł ten przypisuje klasę medyka ACE do jednostek. Asigna la clase médico ACE a una unidad Weise die ACE-Sanitäterklasse einer Einheit zu + Přiřadí ACE třídu zdravotníka do jednotky Set Medical Vehicle [ACE] @@ -3265,6 +3395,7 @@ Ustaw pojazd medyczny [ACE] Establecer vehículos médicos [ACE] Setze medizinisches Fahrzeug [ACE] + Určit zdravotnické vozidlo [ACE] List @@ -3272,6 +3403,7 @@ Lista Lista Liste + Seznam List of vehicles that will be classified as medical vehicle, separated by commas. @@ -3279,6 +3411,7 @@ Lista nazw pojazdów, które są sklasyfikowane jako pojazdy medyczne, oddzielone przecinkami. Lista de los vehículos que se clasifican como vehículo médicos, separados por comas. Liste ovn Fahrzeugen, die als medizinische Fahrzeuge verwendet werden. Wird durch Kommas getrennt. + Seznam vozidel které budou klasifikovány jako zdravotnická vozidla, oddělené čárkami. Is Medical Vehicle @@ -3286,6 +3419,7 @@ Jest pojazdem med. Es vehículo médico Ist medizinisches Fahrzeug + Je zdravotnické vozidlo Whatever or not the objects in the list will be a medical vehicle. @@ -3293,6 +3427,7 @@ Czy pojazdy z tej listy są pojazdami medycznymi. Cualquiera de la lista o fuera de ella será un vehículo médico. Leg fest ob das Objekt in der Liste ein medizinisches Fahrzeug ist. + Ať už jsou nebo nejsou objekty v seznamu budou zdravotnická vozidla. Assigns the ACE medic class to a unit @@ -3300,6 +3435,7 @@ Moduł ten pozwala na przypisanie danym pojazdom statusu pojazdów medycznych. Wewnątrz takiego pojazdu można wykonywać zaawansowane zabiegi medyczne. Asigna la clase médico ACE a una unidad Weist die ACE-Sanitäterklasse einer Einheit zu + Přiřadí ACE třídu zdravotníka do jednotky Set Medical Facility [ACE] @@ -3307,6 +3443,7 @@ Ustaw budynek medyczny [ACE] Establece el centro médico [ACE] Setze medizinische Einrichtung [ACE] + Určit zdravotnické zařízení [ACE] Is Medical Facility @@ -3314,6 +3451,7 @@ Jest budynkiem med. Es centro médico Ist eine medizinische Einrichtung + Je zdravotnické zařízení Registers an object as a medical facility @@ -3321,6 +3459,7 @@ Przypisuje danemu obiektowi status budynku medycznego Registra un objeto como un centro médico Definiert ein Objekt als medizinische Einrichtung + Registruje objekt jako zdravotnické zařízení Defines an object as a medical facility. This allows for more advanced treatments. Can be used on buildings and vehicles. @@ -3328,6 +3467,7 @@ Moduł ten pozwala przypisać status budynku medycznego danemu obiektowi. Budynek taki pozwala na wykonywanie zaawansowanych zabiegów medycznych. Może być użyte na pojazdach i budynkach. Define un objeto como un centro médico. Esto permite tratamientos más avanzados. Se puede utilizar en edificios y vehículos. Definiert ein Objekt als medizinische Einrichtung. Das ermöglicht weitere Behandlungen. Kann bei Gebäuden und Fahrzeugen verwendet werden. + Definuje objekt jako zdravotnické zařízení. To umožňuje více pokročilé léčení. Může být použito na budovy nebo na vozidla. [ACE] Medical Supply Crate (Basic) @@ -3335,6 +3475,7 @@ [ACE] Skrzynka z zapasami medycznymi (podstawowa) [ACE] Caja de suministros médicos (Básica) [ACE] Medizinische Kiste (standard) + [ACE] Zdravotnické zásoby (základní) [ACE] Medical Supply Crate (Advanced) @@ -3342,6 +3483,7 @@ [ACE] Skrzynka z zapasami medycznymi (zaawansowana) [ACE] Caja de suministros médicos (Avanzada) [ACE] Medizinische Kiste (erweitert) + [ACE] Zdravotnické zásoby (pokročilé) Yes @@ -3368,4 +3510,4 @@ No - + \ No newline at end of file diff --git a/addons/microdagr/CfgVehicles.hpp b/addons/microdagr/CfgVehicles.hpp index d07903dbc1..d70dcc8c6f 100644 --- a/addons/microdagr/CfgVehicles.hpp +++ b/addons/microdagr/CfgVehicles.hpp @@ -3,34 +3,28 @@ class CfgVehicles { class CAManBase: Man { class ACE_SelfActions { class ACE_Equipment { - class GVAR(show) { - //Opens the mini map - displayName = CSTRING(show); - condition = QUOTE(([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) && {GVAR(currentShowMode) != DISPLAY_MODE_DISPLAY}); - statement = QUOTE([DISPLAY_MODE_DISPLAY] call FUNC(openDisplay)); - showDisabled = 0; - priority = 0.2; - icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa)); - exceptions[] = {"notOnMap", "isNotInside"}; - }; class GVAR(configure) { //Opens the dialog displayName = CSTRING(configure); condition = QUOTE(([DISPLAY_MODE_DIALOG] call FUNC(canShow)) && {GVAR(currentShowMode) != DISPLAY_MODE_DIALOG}); statement = QUOTE([DISPLAY_MODE_DIALOG] call FUNC(openDisplay)); - showDisabled = 0; - priority = 0.1; - icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa)); - exceptions[] = {"notOnMap", "isNotInside"}; - }; - class GVAR(close) { - displayName = CSTRING(closeUnit); - condition = QUOTE(GVAR(currentShowMode) != DISPLAY_MODE_CLOSED); - statement = QUOTE([DISPLAY_MODE_CLOSED] call FUNC(openDisplay)); - showDisabled = 0; - priority = 0.3; icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa)); exceptions[] = {"notOnMap", "isNotInside"}; + class GVAR(show) { + //Opens the mini map + displayName = CSTRING(show); + condition = QUOTE(([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) && {GVAR(currentShowMode) != DISPLAY_MODE_DISPLAY}); + statement = QUOTE([DISPLAY_MODE_DISPLAY] call FUNC(openDisplay)); + icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa)); + exceptions[] = {"notOnMap", "isNotInside"}; + }; + class GVAR(close) { + displayName = CSTRING(closeUnit); + condition = QUOTE(GVAR(currentShowMode) != DISPLAY_MODE_CLOSED); + statement = QUOTE([DISPLAY_MODE_CLOSED] call FUNC(openDisplay)); + icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa)); + exceptions[] = {"notOnMap", "isNotInside"}; + }; }; }; }; diff --git a/addons/microdagr/XEH_clientInit.sqf b/addons/microdagr/XEH_clientInit.sqf index 3b77a6bc33..736403cb5f 100644 --- a/addons/microdagr/XEH_clientInit.sqf +++ b/addons/microdagr/XEH_clientInit.sqf @@ -3,33 +3,21 @@ if (!hasInterface) exitWith {}; -//Add Keybinds: -["ACE3 Equipment", QGVAR(openGPS), (localize LSTRING(toggleUnit)), -{ - // canInteractWith (can use on map) - if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!("ACE_microDAGR" in (items ace_player))) exitWith {false}; - +//Add deviceKey entry: +private ["_conditonCode", "_toggleCode", "_closeCode"]; +_conditonCode = { + ("ACE_microDAGR" in (items ACE_player)) +}; +_toggleCode = { + if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {}; [] call FUNC(openDisplay); //toggle display mode - true; -}, -{false}, -[0xC7, [false, false, false]], false] call cba_fnc_addKeybind; //Home Key +}; +_closeCode = { + if (GVAR(currentShowMode) == DISPLAY_MODE_CLOSED) exitWith {}; + [DISPLAY_MODE_CLOSED] call FUNC(openDisplay); +}; +[(localize LSTRING(itemName)), QUOTE(PATHTOF(images\microDAGR_item.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew); -["ACE3 Equipment", QGVAR(closeGPS), (localize LSTRING(closeUnit)), -{ - // canInteractWith (can use on map) - if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if (!("ACE_microDAGR" in (items ace_player))) exitWith {false}; - if (GVAR(currentShowMode) == DISPLAY_MODE_CLOSED) exitWith {false}; - - [DISPLAY_MODE_CLOSED] call FUNC(openDisplay); //close unit - true; -}, -{false}, -[0xC7, [false, true, false]], false] call cba_fnc_addKeybind; //CTRL + Home Key //Add Eventhandler: ["RangerfinderData", {_this call FUNC(recieveRangefinderData)}] call EFUNC(common,addEventHandler); diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index a13e8d5541..4a933fc993 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -270,7 +270,7 @@ Zeige MicroDAGR Mostrar MicroDAGR Показать MicroDAGR - Ukázat MicroDAGR GPS + Ukázat MicroDAGR Pokaż MicroDAGR Afficher MicroDAGR MicroDAGR mutatása @@ -282,7 +282,7 @@ Konfiguriere MicroDAGR Configurar MicroDAGR Настроить MicroDAGR - Konfigurovat MicroDAGR GPS + Konfigurovat MicroDAGR Konfiguruj MicroDAGR Configurer MicroDAGR MicroDAGR konfigurálása @@ -294,7 +294,7 @@ Schließe MicroDAGR Cerrar MicroDAGR Закрыть MicroDAGR - Zavřít MicroDAGR GPS + Zavřít MicroDAGR Zamknij MicroDAGR Fermer MicroDAGR MicroDAGR elrejtése @@ -305,41 +305,48 @@ MicroDAGR Map Fill Wypełnienie mapy MicroDAGR Relleno del mapa MicroDAGR + MicroDAGR - Vyplnění mapy MicroDAGR Map Fill Wypełnienie mapy MicroDAGR Relleno del mapa MicroDAGR + MicroDAGR - Vyplnění mapy How much map data is filled on MicroDAGR's Jak duża część informacji mapy jest załadowana do MicroDAGR? Cuanta información está disponible en el mapa del MicroDAG Wie viel Daten auf einem MicroDAGR zu sehen sind + Kolik informací je načteno do MicroDAGR? Full Satellite + Buildings Pełna satelitarna + budynki Satelite completo + Edificios Satellitenbild + Gebäude + Satelit + Budovy Topographical + Roads Topograficzna + drogi Topografico + Carreteras Topografisch + Straßen + Topografické + Cesty None (Cannot use map view) Żadna (wyłącza ekran mapy) Nada (No se puede el mapa) Keine (kann keine Kartenansicht verwenden) + Žádný (Nelze použít zobrazení mapy) Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap.<br />Source: microDAGR.pbo Moduł ten pozwala kontrolować jak duża ilość informacji jest załadowana do przedmiotów MicroDAGR. Mniejsza ilość danych ogranicza widok mapy pokazując mniej rzeczy na minimapie.<br />Źródło: microDAGR.pbo Controla la cantidad de información disponible en el microDAGR. Menos datos limitan la vista del mapa a mostrar menos en el minimapa.<br />Fuente: microDAGR.pbo Steuert wie viel Daten auf dem microDAGR zu sehen ist. Weniger Daten schränken die Kartenansicht ein, um mehr auf der Minimap zu sehen.<br />Quelle: microDAGR.pbo + Tento modul umožňuje kontrolovat, kolik informací je obsaženo v MicroDAGR. Menší množství dat omezené zobrazením mapy ukazují méně věcí na minimapě.<br />Zdroj: microDAGR.pbo - + \ No newline at end of file diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 0d9ef54d07..5069556078 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -20,6 +20,7 @@ class CfgVehicles { class ACE_Comanche_Test : B_Heli_Attack_01_F { scope = 1; + scopeCurator = 0; displayName = "ACE_Comanche_Test"; author = "ACE Team"; class Library { diff --git a/addons/missileguidance/config.cpp b/addons/missileguidance/config.cpp index 42b849b902..591a4f1c5e 100644 --- a/addons/missileguidance/config.cpp +++ b/addons/missileguidance/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {}; + units[] = {"ACE_Comanche_Test"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_laser"}; diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index ee5b02bb4b..4c18c2f4c7 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -102,18 +102,21 @@ Wyłącz Desactivado Aus + Vypnout Player Only Tylko gracz Solo jugador Nur Spieler + Pouze hráči Player and AI Gracz oraz AI Jugador e IA Spieler und KI + Hráči a AI - + \ No newline at end of file diff --git a/addons/missionmodules/stringtable.xml b/addons/missionmodules/stringtable.xml index 86d9725af2..2cdd0ba8a6 100644 --- a/addons/missionmodules/stringtable.xml +++ b/addons/missionmodules/stringtable.xml @@ -6,102 +6,119 @@ ACE Moduły misji Módulo de misiones ACE ACE-Missionsmodule + ACE Moduly mise Ambiance Sounds [ACE] Dźwięki [ACE] [ACE] Sonidos ambiente Umgebungsgeräusche [ACE] + Zvuky prostředí [ACE] Sounds Dźwięki Sonidos Sounds + Zvuky Class names of the ambiance sounds to be played. Seperated by ',' Class name-y dźwięków do odtwarzania. Oddzielone przy użyciu ',' Class names de los sonidos ambiente que se reproducirán. Separados por ',' Klassennamen der Umgebungsgeräusche, die abgespielt werden sollen. Getrennt durch "," + Class names zvuků prostředí, které budou přehrány. Oddělené ',' Minimal Distance Minimalny dystans Distancia mínima Mindestabstand + Minimální vzdálenost Used for calculating a random position and sets the minimal distance between the players and the played sound file(s) Używany do obliczania losowej pozycji a także ustawia minimalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi Usado para calcular una posición aleatoria y establecer la distancia mínima entre los jugadores y los ficheros de sonido reproducidos Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Mindestabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest + Používá se pro výpočet náhodné pozice a určuje minimální vzdálenost mezi hráči a přehrávaným zvukem. Maximum Distance Maksymalny dystans Distancia máxima Maximalabstand + Maximální vzdálenost Used for calculating a random position and sets the maximum distance between the players and the played sound file(s) Używany do obliczania losowej pozycji a także ustawia maksymalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi Usado para calcular una posición aleatoria y establecer la distancia máxima entre los jugadores y los ficheros de sonido reproducidos Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Maximalabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest + Používá se pro výpočet náhodné pozice a určuje maximální vzdálenost mezi hráči a přehrávaným zvukem. Minimal Delay Minimalne opóźnienie Retraso mínimo Minimale Verzögerung + Minimální prodleva Minimal delay between sounds played Minimalne opóźnienie pomiędzy odtwarzanymi dźwiękami Retraso mínimo entre los sonidos reproducidos Minimale Verzögerung zwischen abzuspielenden Sounds + Minimální prodleva mezi přehrávanými zvuky Maximum Delay Maksymalne opóźnienie Retraso máximo Maximale Verzögerung + Maximální prodleva Maximum delay between sounds played Maksymalne opóźnienie pomiędzy odtwarzanymi dźwiękami Retraso máximo entre los sonidos reproducidos Maximale Verzögerung zwischen abzuspielenden Sounds + Maximální prodleva mezi přehrávanými zvuky Follow Players Podążaj za graczami Seguir jugadores Spielern folgen + Následovat hráče Follow players. If set to false, loop will play sounds only nearby logic position. Podążaj za graczami. Jeżeli ustawione na 'Nie', pętla będzie odtwarzana tylko w pobliżu pozycji logiki. Seguir jugadores. Si esta desabilitado (false), se reproducirán sonidos en bucle solo cerca de la posición lógica. Spielern folgen. Wenn auf falsch gesetzt, werden Sounds nur in der Nähe des Logikmoduls abgespielt. + Následuj hráče. Pokud je FALSE, smyčka zvuku bude přehrávána na nejbližší pozici logiki. Volume Głośność Volumen Lautstärke + Hlasitost The volume of the sounds played Głośność odtwarzanych dźwięków Volumen de los sonidos reproducidos Lautstärke der abzuspielenden Sounds + Hlasitost přehrávaného zvuku Ambiance sounds loop (synced across MP) Pętla odtwarzania dzwięków (synchronizowana na MP) Bucle de sonidos ambiente (sincronizados en MP) Umgebungsgeräusch-Schleife (im MP synchronisiert) + Smyčka okkolního zvuku (synchronizováno v MP) - + \ No newline at end of file diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index d5559609e3..e3a80bdee7 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -54,47 +54,55 @@ Moździerz MK6 - Ustawienia Ajustes MK6 MK6-Einstellungen + MK6 - Nastavení Air Resistance Opór powietrza Resistencia al aire Luftwiderstand + Odpor vzduchu For Player Shots, Model Air Resistance and Wind Effects Modeluj opór powietrza oraz wpływ wiatru na tor lotu pocisku dla strzałów z moździerza MK6 przez graczy Para disparos del jugador, modelo de resistencia al aire y efectos de viento Für Spielerschüsse, Luftwiderstand und Windeffekte + Pro hráčovu střelbu, Model odporu vzduchu a povětrných podmínek Allow MK6 Computer Komputer MK6 Habilitar ordenador del MK6 Erlaube MK6-Computer + MK6 - Povolit počítač Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance) Zezwól na komputer i dalmierz (opcja ta MUSI zostać wyłączona jeżeli aktywowałeś opór powietrza) Muestra el ordenador y el medidor de distancia (DEBEN ser quitados si se activa la resistecia al aire) Zeige den Computer und den Entfernungsmesser an (diese MÜSSEN entfernt werden, wenn der Luftwiderstand aktiviert ist) + Zobrazit počítač a dálkoměr (toto MUSÍ být odstraněno pokud je zapnut odpor vzduchu) Allow MK6 Compass Kompas MK6 Habilitar brujula del MK6 Erlaube MK6-Kompass + MK6 - Povolit kompas Show the MK6 Digital Compass Pokaż kompas MK6 Muestra la brujula digital en el MK6 Zeige MK6-Digitaler-Kompass + MK6 - Zobrazit digitální kompas Moduł ten pozwala dostosować ustawienia moździerza MK6. Dieses Modul erlaubt das Einstellen des MK6-Mörsers. + Tento modul umožňuje nastavení minometu MK6. - + \ No newline at end of file diff --git a/addons/modules/XEH_postInit.sqf b/addons/modules/XEH_postInit.sqf index 170c2e8c24..f7b652ab44 100644 --- a/addons/modules/XEH_postInit.sqf +++ b/addons/modules/XEH_postInit.sqf @@ -43,4 +43,9 @@ }; }; }foreach GVAR(moduleInitCollection); + + if (isServer) then { + GVAR(serverModulesRead) = true; + publicVariable QGVAR(serverModulesRead); + }; }] call EFUNC(common,addEventhandler); diff --git a/addons/mx2a/stringtable.xml b/addons/mx2a/stringtable.xml index ca95a97c2e..951a606a7a 100644 --- a/addons/mx2a/stringtable.xml +++ b/addons/mx2a/stringtable.xml @@ -5,12 +5,14 @@ MX-2A MX-2A MX-2A + MX-2A Thermal imaging device Wärmebildgerät Monokular termowizyjny Dispositivo de imagen térmica + Termální dalekohled \ No newline at end of file diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 34f2d0cec2..2d2fb1a26c 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -114,155 +114,182 @@ Ustawienia imion Etiquetas de nombre Namensanzeigen + Jmenovky Player Names View Dist. Zasięg imion graczy Distancia de vision para nombres de jugadores Spielernamen-Distanz + Vzdálenost zobrazení jména hráčů Distance in meters at which player names are shown. Default: 5 Dystans w metrach, na którym wyświetlane są imiona graczy. Domyślnie: 5 Distancia en metros a la que se muestran los nombres de los jugadores. Por defecto: 5 Distanz in Metern bei der Spielernamen angezeigt werden. Standard: 5 + Vzdálenost v metrech pro zobrazení jména. Výchozí: 5 Show name tags for AI? Imiona AI ¿Mostrar nombres para la IA? Zeige Namensanzeigen für KI? + Zobrazit jmenovky pro AI? Show the name and rank tags for friendly AI units? Default: Do not force Pokaż imiona i rangi przyjaznych jednostek AI? Domyślnie: Nie wymuszaj Muestra etiquetas de nombre y rango para las unidades IA amigas? Por defecto: No forzar Zeige den Namen und Rang für freundliche KI-Einheiten? Standard: nicht erwzingen + Zobrazit jména a hodnosti pro spřátelené AI jednotky? Výchozí: Nevynucovat Do Not Force Nie wymuszaj No forzar Nicht erzwingen + Nevynucovat Force Hide Wymuś ukrycie Ocultar forzado Verstecken erzwingen + Vynuceno skrýt Force Show Wymuś wyświetlanie Mostrar forzado Anzeigen erzwingen + Vynuceno zobrazit Show crew info? Pokaż załogę ¿Mostrar información de la tripulación? Zeige Besatzungsinfo? + Zobrazit informace o posádce? Show vehicle crew info, or by default allows players to choose it on their own. Default: Do Not Force Pokaż informacje o obsadzie pojazdu, lub pozwól graczom ustawić tą opcje według własnego uznania. Domyślnie: Nie wymuszaj Muestra información de la tripulación, o por defecto permite a los jugadores elegirlo. Por defecto: No forzar Zeige Fahrzeugbesatzungsinfo oder erlaube Spielern es auszuwählen. Standard: nicht erzwingen. + Zobrazit informace o posádce, nebo nechat aby si hráč vybral sám. Výchozí: Nevynucovat Show for Vehicles Pokaż dla pojazdów Mostrar para vehiculos Zeige bei Fahrzeugen + Zobrazit pro vozidla Show cursor NameTag for vehicle commander (only if client has name tags enabled)Default: No Pokazuj imię dowódcy pojazdu nad pojazdem (tylko jeżeli klient ma włączone imiona graczy). Domyślnie: Nie Muestra etiquetas de nombre en el cursor para el comandante del vehiculo (solo si el cliente tiene las etiquetas de nombre activadas) Por defecto: No Zeige Maus-Namensanzeigen für Fahrzeugkommandanten (nur wenn der Client Namensanzeigen aktiviert hat). Standard: Nein + Zobrazit jmenovky pro velitele vozidla (pouze pokud má klient jmenovky povolené). Výchozí: Ne This module allows you to customize settings and range of Name Tags. Moduł ten pozwala dostosować ustawienia i zasięg wyświetlania imion. Dieses Modul erlaubt die Einstellungen der Anzeigenamen zu verändern. Este módulo permite personalizar la configuración y la distancia de las Etiquetas de nombre. + Tento modul umožňuje si přizpůsobit nastavení a vzdálenost jmenovky. Disabled Wyłączone Desactivado Deaktiviert + Zakázáno Enabled Włączone Activado Aktiviert + Povoleno Only on Cursor Tylko pod kursorem Solo cursor Nur bei Maus + Pouze na kurzor Only on Keypress Tylko po wciśnięciu klawisza Solo al pulsar tecla Nur bei Tastendruck + Pouze na klávesu Only on Cursor and Keypress Tylko pod kursorem i po wciśnięciu klawisza En cursor y al pulsar tecla Nur Maus und Tastendruck + Pouze na kurzor a klávesu Force Show Only on Cursor Wymuś pod kursorem Forzar mostrar solo en el cursor + Vynuceno zobrazit pouze na kurzor Force Show Only on Keypress Wymuś po wciśnięciu klawisza Forzar mostrar solo al pulsar tecla + Vynuceno zobrazit pouze na klávesu Force Show Only on Cursor and Keypress Wymuś pod kursorem i po wciśnięciu klawisza Forzar mostrar en el cursor y al pulsar tecla + Vynuceno zobrazit pouze na kurzor a klávesu Use Nametag settings Użyj ustawień imion Usar ajustes de etiquetas de nombre Verwende Namenanzeigen + Použít nastavení jmenovky Always Show All Zawsze pokazuj wszystkie Mostrar siempre todo Immer alle zeigen + Vždy zobrazit vše Show player names and set their activation. Default: Enabled Opcja ta pozwala dostosować sposób wyświetlania imion nad głowami graczy. Opcja "Tylko po wciśnięciu klawisza" wyświetla imiona tylko przytrzymania klawisza "Modyfikator" dostępnego w menu ustawień addonów -> ACE3. Mostrar nombres de los jugadores y establecer su activación. Predeterminado: Habilitado + Zobrazit jména hráčů a nastavit jejich aktivaci. Výchozí: Povoleno Effect of sound waves above the heads of speaking players after holding the PTT key. This option works with TFAR and ACRE2. Opcja ta pozwala dostosować sposób wyświetlania efektu fal dźwiękowych nad głowami mówiących graczy, wyświetlanych po przytrzymaniu klawisza PTT. Opcja ta współpracuje z TFAR oraz ACRE2. Efecto de ondas sonoras encima de las cabezas de los jugadores que hablan después de mantener la tecla PTT. Esta opción funciona con TFAR y ACRE2. + Efekt zvukových vln nad hlavami hráčů když mluví skrz PTT klávesu. Tato volba funguje s TFAR a ACRE2. Nametags Size Rozmiar imion Tamaño de las Etiquetas de nombre + Velikost jmenovky Text and Icon Size Scaling Skalowanie tekstu oraz ikon Escala del texto y el icono + Velikost textu a ikon \ No newline at end of file diff --git a/addons/optionsmenu/ACE_Settings.hpp b/addons/optionsmenu/ACE_Settings.hpp index 9ebaf65095..0badbad660 100644 --- a/addons/optionsmenu/ACE_Settings.hpp +++ b/addons/optionsmenu/ACE_Settings.hpp @@ -6,4 +6,10 @@ class ACE_Settings { displayName = CSTRING(uiScaing); values[] = {"$str_medium", "$str_large", "$str_very_large"}; }; + class GVAR(showNewsOnMainMenu) { + value = 1; + typeName = "BOOL"; + isClientSettable = 1; + displayName = CSTRING(showNewsOnMainMenu_name); + }; }; diff --git a/addons/optionsmenu/gui/define.hpp b/addons/optionsmenu/gui/define.hpp index cb4fe1b509..2a3fffc736 100644 --- a/addons/optionsmenu/gui/define.hpp +++ b/addons/optionsmenu/gui/define.hpp @@ -7,6 +7,9 @@ class ACE_gui_staticBase; class ACE_gui_listNBox; class ACE_gui_comboBoxBase; class RscXSliderH; +class RscControlsGroupNoScrollbars; +class RscHTML; +class RscText; #ifndef ACE_DEFINE_H diff --git a/addons/optionsmenu/gui/pauseMenu.hpp b/addons/optionsmenu/gui/pauseMenu.hpp index d009d78049..d80547f2b6 100644 --- a/addons/optionsmenu/gui/pauseMenu.hpp +++ b/addons/optionsmenu/gui/pauseMenu.hpp @@ -98,12 +98,73 @@ class RscDisplayInterruptEditor3D: RscStandardDisplay { class RscDisplayMain: RscStandardDisplay { //Hide the button if there is no world (-world=empty) //Seems odd to use onMouseMoving, but I don't want to overload onLoad - onMouseMoving = "((_this select 0) displayCtrl 80085) ctrlShow (missionName != '');"; + onMouseMoving = QUOTE(((_this select 0) displayCtrl 80085) ctrlShow (missionName != ''); _this execVM QUOTE(QUOTE(PATHTOF(script_loadMainMenuBox.sqf)));); + class controls { class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase { action = "if (missionName != '') then {createDialog 'ACE_settingsMenu';};"; y = "4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY"; idc = 80085; }; + + class ACE_news: RscControlsGroupNoScrollbars { + idc = 80086; + x = "safezoneX + safezoneW - (16 *(((safezoneW / safezoneH) min 1.2) / 40))"; + y = "safezoneY + (18.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))"; + w = "15 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "4.95 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + class controls { + class ACE_NewsTitle: RscText { + text = CSTRING(aceNews); + colorBackground[] = {(162/255),(28/255),(28/255),0.8}; + idc = -1; + x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "0 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "15 *(((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + class ACE_VersionInfo: RscText { + idc = 68; + x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "15 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0,0,0,0.5}; + }; + class ACE_NewsBackground: RscText { + idc = -1; + x = "0 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "2.2 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "15 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "5.75 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorBackground[] = {0,0,0,0.5}; + }; + class ACE_NewsText: RscHTML { + idc = 69; + x = "0.5 * (((safezoneW / safezoneH) min 1.2) / 40)"; + y = "2.2 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + w = "14 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "2.75 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + + shadow = 0; + class H1 { + font = "PuristaMedium"; + fontBold = "PuristaLight"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)"; + }; + class H2: H1 { + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + font = "PuristaLight"; + }; + class P: H1 { + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + fontBold = "PuristaLight"; + }; + colorBold[] = {0.6,0.6,0.6,1}; + colorLink[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorLinkActive[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + }; + }; + }; }; }; diff --git a/addons/optionsmenu/script_component.hpp b/addons/optionsmenu/script_component.hpp index 7b86dbe0dd..d25caa2c42 100644 --- a/addons/optionsmenu/script_component.hpp +++ b/addons/optionsmenu/script_component.hpp @@ -1,6 +1,6 @@ #define COMPONENT optionsmenu -#define DEBUG_MODE_FULL +// #define DEBUG_MODE_FULL #include "\z\ace\addons\main\script_mod.hpp" diff --git a/addons/optionsmenu/script_loadMainMenuBox.sqf b/addons/optionsmenu/script_loadMainMenuBox.sqf new file mode 100644 index 0000000000..9c556e5128 --- /dev/null +++ b/addons/optionsmenu/script_loadMainMenuBox.sqf @@ -0,0 +1,31 @@ +/* + * Author: PabstMirror + * Loads the version info HTML box from main menu + * + * Arguments: + * 0: Display (from onMouseMoving) + * + * Return Value: + * None + * + * Example: + * onMouseMovingEvent execVM "script_loadMainMenuBox.sqf"; + * + * Public: No + */ +#include "script_component.hpp" + +if (missionNamespace getVariable [QGVAR(newsLoaded), false]) exitWith {}; +GVAR(newsLoaded) = true; + +//Need to load from profileNamespace because ace_settings might not be init if world = empty +if (profileNamespace getVariable [QGVAR(showNewsOnMainMenu), true]) then { + ((_this select 0) displayCtrl 80086) ctrlShow true; + + private ["_version"]; + _version = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr"); + ((_this select 0) displayCtrl 68) ctrlSetText format ["Installed Version: %1", _version]; + ((_this select 0) displayCtrl 69) htmlLoad "http://ace3mod.com/version.html"; +} else { + ((_this select 0) displayCtrl 80086) ctrlShow false; +}; diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index ff7713073a..cbd9d642bf 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -246,76 +246,97 @@ Pozwól na eksport ustawień [ACE] [ACE] Permitir exportar configuración Erlaube Config-Export [ACE] + Povolit export natavení [ACE] Allow Zezwól Permitir Erlaube + Povolit Allow export of all settings to a server config formatted. Zezwól na eksport wszystkich ustawień do formatu konfiguracji serwera. Permitir la exportación de todos los ajustes de configuración a un servidor con formato. Erlaube alle Einstellungen in einer Server-Config zu exportieren. + Povolit exportovat všechna nastavení do formátu server configu. When allowed, you have access to the settings modification and export in SP. Clicking export will place the formated config on your clipboard. Jeżeli ustawione na zezwól, wtedy będziesz mieć dostęp do ekranu modyfikacji wszystich ustawień i zmiennych ACE, a także będziesz mieć możliwość eksportu tychże ustawień do formatu rozpoznawalnego przez userconfig serwera. Kliknięcie opcji Eksportuj skopiuje wszystkie ustawienia do schowka. Działa tylko w trybie SP. Cuando esta permitido, se tiene acceso a los ajustes de modificación y exportación en SP. Pulsar en exportar copiara la configuración al portapapeles. Wenn erlaubt, können die Einstellungsmodifikationen angezeigt und im SP exportiert werden. Wenn auf "Exportieren" geklickt wird, wird eine formatierte Config-Datei in der Zwischenablage abgespeichert. + Pokud je povoleno, budete mít přístup k modifikaci nastavení a exportování v SP. Kliknutím na export umístníte formátovaný config do vaší schránky. Hide Ukryj Ocultar Verstecken + Skrýt Top right, downwards Po prawej u góry, w dół Arriba a la derecha, hacia abajo Open rechts, nach unten + Vpravo nahoře, dolů Top right, to the left Po prawej u góry, do lewej Arriba a la derecha, hacia la izquierda Von rechts nach links + Vpravo nahoře, do leva Top left, downwards Po lewej u góry, w dół Arriba a la izquierda, hacia abajo Von links, nach unten + Vlevo nahoře, dolů Top left, to the right Po lewej u góry, do prawej Arriba a la izquierda, hacia la derecha Oben links nach rechts + Vlevo nahoře, do prava Top Góra Arriba Oben + Nahoře Bottom Dół Abajo Unten + Dole Debug To Clipboard Debuguj do schowka Depurar al portapapeles + Debug do schránky Sends debug information to RPT and clipboard. Wysyła informacje o debugowaniu do RPT oraz schowka. Envía información de depuración al RPT y el portapapeles. + Pošle debug informace do RPT a schránky. + + + ACE News + Noticias ACE + + + Show News on Main Menu + Mostrar noticias en el menú principal \ No newline at end of file diff --git a/addons/rangecard/stringtable.xml b/addons/rangecard/stringtable.xml index f663340017..535059456e 100644 --- a/addons/rangecard/stringtable.xml +++ b/addons/rangecard/stringtable.xml @@ -5,36 +5,43 @@ Range Card Tabela balistyczna Tarjeta de distancias + Vzdálenostní tabulka 50 METER increments -- MRAD/MRAD (reticle/turrets) Co 50 metrów - MRAD/MRAD (siatka/pokrętło) Incrementos de 50 METROS -- MRAD/MRAD (retícula/torretas) + Přidat 50 METRŮ -- MRAD/MRAD (síťka/věže) Open Range Card Otwórz tabelę balistyczną Abrir tarjeta de distancias + Otevřít vzdálenostní tabulku Open Range Card Copy Otwórz kopię tabeli balistycznej Abrir copia de tarjeta de distancias + Otevřít kopii vzdálenostní tabulky Open Range Card Otwórz tabelę balistyczną Abrir tarjeta de distancias + Otevřít vzdálenostní tabulku Open Range Card Copy Otwórz kopię tabeli balistycznej Abrir copia de tarjeta de distancias + Otevřít kopii vzdálenostní tabulky Copy Range Card Skopiuj tabelę balistyczną Copiar tarjeta de distancias + Kopírovat vzdálenostní tabulku \ No newline at end of file diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 54a6c1e869..483242835f 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -426,7 +426,7 @@ KamAZ Transport KamAZ de transporte KamAZ transportowy - KAMAZ Valník + KamAZ Valník KamAZ Transport КамАЗ Траспортный KamAZ Transporte @@ -438,7 +438,7 @@ KamAZ Transport (bedeckt) KamAZ de transporte (cubierto) KamAZ Transportowy (zakryty) - KAMAZ Valník (krytý) + KamAZ Valník (krytý) KamAZ Transport (bâché) КамАЗ Траспортный (крытый) KamAZ Transporte (coberto) @@ -450,7 +450,7 @@ KamAZ Munition KamAZ de munición KamAZ Amunicyjny - KAMAZ Muniční + KamAZ Muniční KamAZ Munitions КамАЗ Боеприпасы KamAZ Munições @@ -462,7 +462,7 @@ KamAZ Treibstoff KamAZ de combustible KamAZ cysterna - KAMAZ Cisterna + KamAZ Cisterna KamAZ Citerne КамАЗ Заправщик KamAZ Combustível @@ -474,7 +474,7 @@ KamAZ Instandsetzung KamAZ de reparación KamAZ Naprawczy - KAMAZ Opravárenský + KamAZ Opravárenský KamAZ Réparation КамАЗ Ремонтный KamAZ Reparador diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 3b45a38953..40bb04f53a 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -150,67 +150,79 @@ System odrodzenia Sistema de reaparición Respawn-System + Systém znovuzrození Save Gear? Zapisać ekwipunek? ¿Guardar equipo? Ausrüstung speichern? + Uložit výbavu? Respawn with the gear a soldier had just before his death? Odradzaj z ekwipunkiem jaki żołnierz miał tuż przed swoją śmiercią? Reaparece con el equipo que el soldado tenía justo antes de morir Mit der Ausrüstung, die ein Soldat vor seinem Tod hatte, respawnen? + Znovuubjevit s výbavou kterou měl voják před smrtí? Remove bodies? Usuwać ciała? ¿Eliminar cuerpos? Körper entfernen? + Odstranit těla? Remove player bodies after disconnect? Usuwaj ciała graczy po rozłączeniu z serwera? Elimina los cuerpos de los jugadores cuando se desconecten Entferne Spielerkörper nach dem Trennen einer Verbindung? + Odstranit hráčova těla po odpojení? Moduł ten pozwala dostosować ustawienia odrodzenia (respawnu). Dieses Modul erlaubt es die Respawn-Einstellungen anzupassen. + Tento modul umožňuje nastavení znovuzrození (spawn). Friendly Fire Messages Wiadomości Friendly Fire Mensajes de fuego amigo Freundbeschuss-Nachrichten + Upozornění na přátelskou střelbu Użycie tego modułu na misji spowoduje wyświetlenie wiadomości na czacie w przypadku, kiedy zostanie popełniony friendly fire - wyświetlona zostanie wtedy wiadomość kto kogo zabił. + Zobrazí zprávu v chatu v případě, když budete střílet na vlastní jednotky. Ve zprávě se zobrazí kdo na koho střílel, popř. kdo koho zabil. Rallypoint System System punktu zbiórki Sistema de punto de reunión Rallypoint-System + Systém shromáždění Moduł ten pozwala zastosować na misji "punkt zbiórki", do którego można szybko przeteleportować się z "bazy". Wymaga postawienia odpowiednich obiektów na mapie - bazy oraz flagi. Obydwa dostępne są w kategorii Puste -> ACE Odrodzenie. + Tento modul umožňuje určit místo shromaždiště, kam se mohou jednokty rychle teleportovat ze "základny". Toto vyžaduje vhodné objekty v mapě - základna a vlajka. Oba dva můžete najít v kategorii Prázdné -> ACE Oživení. Move Rallypoint Przenieś punkt zbiórki Mover punto de reunión Bewege Rallypoint + Přesun na shromaždiště ACE Respawn ACE Odrodzenie Reaparición ACE ACE-Respawn + ACE Znovuzrození - + \ No newline at end of file diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 16582b3d6d..4656504545 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -30,82 +30,96 @@ System zmiany stron Sistema de cambio de unidad Einheiten-Switch-System? + Systém výměny stran Switch to West? Zmiana na Zachód? ¿Cambiar a Oeste? Nach BLUFOR wechseln? + Přesunout k BLUFOR? Allow switching to west units? Pozwolić zmieniać graczom stronę na Zachód? ¿Permitir cambios a unidades del Oeste? Erlaube das Wechseln zu BLUFOR-Einheiten? + Povolit přesun k BLUFOR? Switch to East? Zmiana na Wschód? ¿Cambiar a Este? Nach OPFOR wechseln? + Přesunout k OPFOR? Allow switching to east units? Pozwolić zmieniać graczom stronę na Wschód? ¿Permitir cambios a unidades del Este? Erlaube das Wechseln zu OPFOR-Einheiten? + Povolit přesun k OPFOR? Switch to Independent? Zmiana na Ruch Oporu? ¿Cambiar a Independiente? Nach INDFOR wechseln? + Přesunout k INDFOR? Allow switching to independent units? Pozwolić zmieniać stronę na Ruch Oporu? ¿Permitir cambios a unidades Independientes? Erlaube das Wechseln zu INDFOR-Einheiten? + Povolit přesun k INDFOR? Switch to Civilian? Zmiana na Cywili? ¿Cambiar a Civil? Nach CIVILIAN wechseln? + Přesunout k CIVILISTŮM? Allow switching to civilian units? Pozwolić zmieniać stronę na Cywili? ¿Permitir cambios a unidades Civiles Erlaube das Wechseln zu CIVILIAN-Einheiten? + Povolit přesun k CIVILISTŮM? Enable Safe Zone? Aktywuj bezp. strefę? ¿Habilitar zona segura? Aktiviere Sicherheitszone? + Povolit bezpečné oblasti? Enable a safe zone around enemy units? Players can't switch to units inside of the safe zone. Aktywuje bezpieczną strefę wokół jednostek przeciwnika. Gracze nie mogą zmieniać strony wewnątrz tej strefy. Habilita una zona segura alrededor de las unidades enemigas. Los jugadores no pueden cambiar de unidad dentro de la zona segura. Aktiviere eine Sicherheitszone um feindliche Einheiten? Spieler können nicht zu Einheiten in der Sicherheitszone wechseln. + Povolit bezpečnou zónu kolem nepřátelských jednotek? Hráči se nemohou změnit strany/jednotky uvnitř bezpečné zóny. Safe Zone Radius Promień bezp. strefy Radio de la zona segura Sicherheitszonenradius + Oblast bezpečné zóny The safe zone around players from a different team. Default: 200 Promień bezpiecznej strefy wokół graczy z innych drużyn. Domyślnie: 200 La zona segura alrededor de los jugadores de distintos equipos. Por defecto: 200 Die Sicherheitszone um Spieler von einem anderen Team. Standard: 200 + Bezpečná zóna kolem hráče z jiných týmu. Výchozí: 200 + Tento modul umožňuje přepínání mazi dostupnými stranami. - + \ No newline at end of file diff --git a/addons/tacticalladder/$PBOPREFIX$ b/addons/tacticalladder/$PBOPREFIX$ new file mode 100644 index 0000000000..7d7735bb9e --- /dev/null +++ b/addons/tacticalladder/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\tacticalladder \ No newline at end of file diff --git a/addons/tacticalladder/CfgEventHandlers.hpp b/addons/tacticalladder/CfgEventHandlers.hpp new file mode 100644 index 0000000000..737cae5e43 --- /dev/null +++ b/addons/tacticalladder/CfgEventHandlers.hpp @@ -0,0 +1,11 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + }; +}; diff --git a/addons/tacticalladder/CfgVehicles.hpp b/addons/tacticalladder/CfgVehicles.hpp new file mode 100644 index 0000000000..d180ccae40 --- /dev/null +++ b/addons/tacticalladder/CfgVehicles.hpp @@ -0,0 +1,96 @@ + +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_TacticalLadders { + displayName = CSTRING(Deploy); + condition = QUOTE((backpack ACE_player) == QUOTE(QUOTE(ACE_TacticalLadder_Pack))); + statement = QUOTE(call FUNC(deployTL)); + exceptions[] = {}; + showDisabled = 1; + priority = 4; + }; + }; + }; + + class Bag_Base; + class ACE_TacticalLadder_Pack: Bag_Base { + scope = 2; + displayName = CSTRING(DisplayName); + descriptionShort = ""; + model = PATHTOF(data\ace_tacticalladder_pack.p3d); + picture = PATHTOF(UI\ace_tactical_ladder_pack_ca.paa); + maximumLoad = 0; + mass = 50; + }; + + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportBackpacks { + class _xx_ACE_TacticalLadder_Pack { + backpack = "ACE_TacticalLadder_Pack"; + count = 3; + }; + }; + }; + + class House; + class ACE_Tactical_Ladder: House { + XEH_ENABLED; + displayName = CSTRING(DisplayName); + class DestructionEffects {}; + model = PATHTOF(data\ace_tacticalladder.p3d); + animated = 1; + autocenter = 0; + featureSize = 12; + ladders[] = {{"start","end"}}; + class AnimationSources { + class rotate { + source = "user"; + animPeriod = 1e-007; + }; + class extract_1 { + source = "user"; + animPeriod = 1e-007; + }; + class extract_2: extract_1 {}; + class extract_3: extract_1 {}; + class extract_4: extract_1 {}; + class extract_5: extract_1 {}; + class extract_6: extract_1 {}; + class extract_7: extract_1 {}; + class extract_8: extract_1 {}; + class extract_9: extract_1 {}; + class extract_10: extract_1 {}; + class extract_11: extract_1 {}; + }; + class ACE_Actions { + class ACE_MainActions { + selection = "roadway"; + distance = 5; + condition = "true"; + class ACE_PickUp { + selection = ""; + displayName = CSTRING(Pickup); + distance = 4; + condition = QUOTE((backpack ACE_player) == ''); + statement = QUOTE([ARR_2(_target,_player)] call FUNC(pickupTL)); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + }; + class ACE_Position { + selection = ""; + displayName = CSTRING(Position); + distance = 4; + condition = "true"; + statement = QUOTE([ARR_2(_target,_player)] call FUNC(positionTL)); + showDisabled = 0; + exceptions[] = {}; + priority = 5; + }; + }; + }; + }; +}; diff --git a/addons/tacticalladder/README.md b/addons/tacticalladder/README.md new file mode 100644 index 0000000000..ff6b8ecad3 --- /dev/null +++ b/addons/tacticalladder/README.md @@ -0,0 +1,10 @@ +ace_tacticalladder +=============== + +Adds a packable tactical ladder. + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [Ruthberg] (http://github.com/Ulteq) \ No newline at end of file diff --git a/addons/tacticalladder/UI/ace_tactical_ladder_pack_ca.paa b/addons/tacticalladder/UI/ace_tactical_ladder_pack_ca.paa new file mode 100644 index 0000000000..8388a8e605 Binary files /dev/null and b/addons/tacticalladder/UI/ace_tactical_ladder_pack_ca.paa differ diff --git a/addons/tacticalladder/XEH_postInit.sqf b/addons/tacticalladder/XEH_postInit.sqf new file mode 100644 index 0000000000..f0091ec7fa --- /dev/null +++ b/addons/tacticalladder/XEH_postInit.sqf @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +GVAR(ladder) = objNull; +GVAR(cancelTime) = 0; +GVAR(currentStep) = 3; +GVAR(currentAngle) = 0; + +// Cancel tactical ladder deployment if the interact menu is opened +["interactMenuOpened", { + if ((ACE_time > GVAR(cancelTime)) && !isNull GVAR(ladder)) then { + GVAR(ladder) call FUNC(cancelTLdeploy); + }; +}] call EFUNC(common,addEventHandler); + +[{(_this select 0) call FUNC(handleScrollWheel);}] call EFUNC(Common,addScrollWheelEventHandler); diff --git a/addons/tacticalladder/XEH_preInit.sqf b/addons/tacticalladder/XEH_preInit.sqf new file mode 100644 index 0000000000..e434974c9a --- /dev/null +++ b/addons/tacticalladder/XEH_preInit.sqf @@ -0,0 +1,12 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(cancelTLdeploy); +PREP(confirmTLdeploy); +PREP(deployTL); +PREP(handleScrollWheel); +PREP(pickupTL); +PREP(positionTL); + +ADDON = true; diff --git a/addons/tacticalladder/config.cpp b/addons/tacticalladder/config.cpp new file mode 100644 index 0000000000..02740639fe --- /dev/null +++ b/addons/tacticalladder/config.cpp @@ -0,0 +1,15 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_apl", "ace_interaction"}; + author[] = {"Rocko", "Ruthberg"}; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/tacticalladder/data/ace_ladder_co.paa b/addons/tacticalladder/data/ace_ladder_co.paa new file mode 100644 index 0000000000..d550108068 Binary files /dev/null and b/addons/tacticalladder/data/ace_ladder_co.paa differ diff --git a/addons/tacticalladder/data/ace_tacticalladder.p3d b/addons/tacticalladder/data/ace_tacticalladder.p3d new file mode 100644 index 0000000000..3126601117 Binary files /dev/null and b/addons/tacticalladder/data/ace_tacticalladder.p3d differ diff --git a/addons/tacticalladder/data/ace_tacticalladder_pack.p3d b/addons/tacticalladder/data/ace_tacticalladder_pack.p3d new file mode 100644 index 0000000000..e7b565ff11 Binary files /dev/null and b/addons/tacticalladder/data/ace_tacticalladder_pack.p3d differ diff --git a/addons/tacticalladder/data/model.cfg b/addons/tacticalladder/data/model.cfg new file mode 100644 index 0000000000..1fc8840d4f --- /dev/null +++ b/addons/tacticalladder/data/model.cfg @@ -0,0 +1,283 @@ +class CfgSkeletons { + class Default { + isDiscrete = 1; + skeletonInherit = ""; + skeletonBones[] = {}; + }; + class ace_tacticalladder_skeleton: Default { + isDiscrete = 0; + skeletonInherit = ""; + skeletonBones[] = { + "base","", + "1","base", + "2","1", + "3","2", + "4","3", + "5","4", + "6","5", + "7","6", + "8","7", + "9","8", + "10","9", + "11","10", + "step","11" + }; + }; + class OFP2_ManSkeleton { + isDiscrete = 0; + skeletonInherit = ""; + skeletonBones[] = { + "Pelvis","", + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", + "Camera","Pelvis", + "weapon","Spine1", + "launcher","Spine1", + //Head skeleton in hierarchy + "neck","Spine3", + "neck1","neck", + "head","neck1", + "HeadCutScene","head", + "jaw","head", + "chin","head", + "jaw_rf","head", + "jaw_rm","head", + "jaw_rs","head", + "jaw_lf","head", + "jaw_lm","head", + "jaw_ls","head", + "ear_r","head", + "ear_l","head", + "lip_lc","head", + "lip_lwlb","head", + "lip_lwlf","head", + "lip_lwm","head", + "lip_lwrf","head", + "lip_lwrb","head", + "lip_rc","head", + "lip_uprb","head", + "lip_uprf","head", + "lip_upm","head", + "lip_uplf","head", + "lip_uplb","head", + "nose_tip","head", + "nose_r","head", + "nose_l","head", + "zig_lt","head", + "zig_lm","head", + "zig_lb","head", + "zig_rt","head", + "zig_rm","head", + "zig_rb","head", + "cheek_r","head", + "cheek_l","head", + "eyebrow_lb","head", + "eyebrow_lm","head", + "eyebrow_lf","head", + "corr","head", + "eyebrow_rf","head", + "eyebrow_rm","head", + "eyebrow_rb","head", + "eye_upr","head", + "eye_lwr","head", + "eye_upl","head", + "eye_lwl","head", + "cheek_rf","head", + "cheek_rm","head", + "cheek_rb","head", + "cheek_lf","head", + "cheek_lm","head", + "cheek_lb","head", + "forehead_l","head", + "forehead_m","head", + "forehead_r","head", + "l_eye","head", + "r_eye","head", + "l_pupila","head", + "r_pupila","head", + "neck_t","head", + "neck_b","head", + "neck_r","head", + "neck_l","head", + "tongue_b","head", + "tongue_m","head", + "tongue_f","head", + //Left upper side + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", + //Right upper side + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot" + }; + // location of pivot points (local axes) for hierarchical animation + //pivotsModel="ca\Anims\Characters\Data\Skeleton\SkeletonPivots.p3d"; + pivotsModel=""; + }; +}; + +class CfgModels { + class Default { + sectionsInherit=""; + sections[] = {""}; + skeletonName = ""; + }; + class ace_tacticalladder { + skeletonName = "ace_tacticalladder_skeleton"; + sections[] = { "roadway" }; + sectionsInherit = ""; + class Animations { + class rotate { + type = "rotation"; + source = ""; + sourceAddress = "clamp"; + selection = "base"; + axis = "axis_rotate"; + minValue = 0; + maxValue = 90; + angle0="rad 0"; + angle1="rad +90"; + }; + class extract_1 { + type = "translation"; + source = ""; + selection = "1"; + axis = "axis_1"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + minPhase = 0; + maxPhase = 1; + offset0 = 0; + offset1 = 0.82; + }; + class extract_2: extract_1 { + selection = "2"; + axis = "axis_2"; + }; + class extract_3: extract_1 { + selection = "3"; + axis = "axis_3"; + }; + class extract_4: extract_1 { + selection = "4"; + axis = "axis_4"; + }; + class extract_5: extract_1 { + selection = "5"; + axis = "axis_5"; + }; + class extract_6: extract_1 { + selection = "6"; + axis = "axis_6"; + }; + class extract_7: extract_1 { + selection = "7"; + axis = "axis_7"; + }; + class extract_8: extract_1 { + selection = "8"; + axis = "axis_8"; + }; + class extract_9: extract_1 { + selection = "9"; + axis = "axis_9"; + }; + class extract_10: extract_1 { + selection = "10"; + axis = "axis_10"; + }; + class extract_11: extract_1 { + selection = "11"; + axis = "axis_11"; + }; + }; + }; + class ArmaMan: Default { + htMin=60; + htMax=1800; + afMax=30; + mfMax=0; + mFact=1; + tBody=37; + sections[]= { + "osobnost", + "Head_Injury", + "Body_Injury", + "l_leg_injury", + "l_arm_injury", + "r_arm_injury", + "r_leg_injury", + "injury_body", + "injury_legs", + "injury_hands", + "clan", + "clan_sign", + "Camo", + "CamoB", + "Camo1", + "Camo2", + "personality", + "hl", + "injury_head" + }; + skeletonName="OFP2_ManSkeleton"; + }; + class ace_tacticalladder_pack: ArmaMan { + }; +}; \ No newline at end of file diff --git a/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf b/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf new file mode 100644 index 0000000000..63a97d97e9 --- /dev/null +++ b/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf @@ -0,0 +1,32 @@ +/* + * Author: Rocko, Ruthberg + * Cancel tactical ladder deployment + * + * Arguments: + * 0: ladder + * + * Return Value: + * None + * + * Example: + * [_ladder] call ace_tacticalladder_fnc_cancelTLdeploy; + * + * Public: No + */ +#include "script_component.hpp" + +#define __ANIMS ["extract_1","extract_2","extract_3","extract_4","extract_5","extract_6","extract_7","extract_8","extract_9","extract_10","extract_11"] + +PARAMS_1(_ladder); + +detach _ladder; +_ladder animate ["rotate", 0]; +{ + _ladder animate [_x, 0]; +} forEach __ANIMS; + +call EFUNC(interaction,hideMouseHint); +[ACE_player, "DefaultAction", ACE_player getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler); +[ACE_player, "zoomtemp", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); + +GVAR(ladder) = objNull; diff --git a/addons/tacticalladder/functions/fnc_confirmTLdeploy.sqf b/addons/tacticalladder/functions/fnc_confirmTLdeploy.sqf new file mode 100644 index 0000000000..93263c6aa0 --- /dev/null +++ b/addons/tacticalladder/functions/fnc_confirmTLdeploy.sqf @@ -0,0 +1,32 @@ +/* + * Author: Rocko, Ruthberg + * Confirm tactical ladder deployment + * + * Arguments: + * 0: ladder + * + * Return Value: + * Success? + * + * Example: + * [_ladder] call ace_tacticalladder_fnc_confirmTLdeploy; + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_1(_ladder); + +private ["_pos1", "_pos2"]; +_pos1 = getPosASL GVAR(ladder); +_pos2 = (GVAR(ladder) modelToWorld (GVAR(ladder) selectionPosition "check2")) call EFUNC(common,positionToASL); +if (lineIntersects [_pos1, _pos2, GVAR(ladder)]) exitWith { false }; + +call EFUNC(interaction,hideMouseHint); +[ACE_player, "DefaultAction", ACE_player getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler); +[ACE_player, "zoomtemp", ACE_player getVariable [QGVAR(Cancel), -1]] call EFUNC(Common,removeActionEventHandler); + +detach _ladder; +GVAR(ladder) = objNull; + +true diff --git a/addons/tacticalladder/functions/fnc_deployTL.sqf b/addons/tacticalladder/functions/fnc_deployTL.sqf new file mode 100644 index 0000000000..7ad135ca90 --- /dev/null +++ b/addons/tacticalladder/functions/fnc_deployTL.sqf @@ -0,0 +1,34 @@ +/* + * Author: Rocko, Ruthberg + * Deploy tactical ladder + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * call ace_tacticalladder_fnc_deployTL; + * + * Public: No + */ +#include "script_component.hpp" + +if ((backpack ACE_player) != "ACE_TacticalLadder_Pack") exitWith {}; + +private ["_pos", "_offset", "_ladder"]; + +removeBackpack ACE_player; + +_pos = ACE_player modelToWorld [0,0,0]; +_offset = if ((ACE_player call CBA_fnc_getUnitAnim select 0) == "prone") then { 1 } else {0.8}; +_pos set [0, (_pos select 0) + (sin (direction ACE_player) * _offset)]; +_pos set [1, (_pos select 1) + (cos (direction ACE_player) * _offset)]; +_pos set [2, [ACE_player] call CBA_fnc_realHeight]; + +_ladder = "ACE_Tactical_Ladder" createVehicle _pos; +_ladder setPos _pos; +_ladder setDir (direction ACE_player); + +ACE_player reveal _ladder; diff --git a/addons/tacticalladder/functions/fnc_handleScrollWheel.sqf b/addons/tacticalladder/functions/fnc_handleScrollWheel.sqf new file mode 100644 index 0000000000..d08cb6e208 --- /dev/null +++ b/addons/tacticalladder/functions/fnc_handleScrollWheel.sqf @@ -0,0 +1,48 @@ +/* + * Author: Rocko, Ruthberg + * Handles lengthening and tilting of the ladder + * + * Arguments: + * Amount scrolled + * + * Return Value: + * Handled + * + * Example: + * 1 call ace_tacticalladder_fnc_handleScrollWheel; + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_1(_scroll); + +if (isNull GVAR(ladder)) exitWith { false }; + +if (GETMVAR(ACE_Modifier,0) == 0) then { + private ["_currentStep"]; + // Lengthening + if (_scroll > 0) then { + _currentStep = GVAR(currentStep); + if (_currentStep == 11) exitWith {}; + _currentStep = _currentStep + 1; + if (GVAR(ladder) animationPhase (format["extract_%1", _currentStep]) == 0) then { + GVAR(ladder) animate [format["extract_%1", _currentStep], 1]; + GVAR(currentStep) = _currentStep; + }; + }; + if (_scroll < 0) then { + _currentStep = GVAR(currentStep); + if (_currentStep == 3) exitWith {}; + if (GVAR(ladder) animationPhase (format["extract_%1", _currentStep]) == 1) then { + GVAR(ladder) animate [format["extract_%1", _currentStep], 0]; + GVAR(currentStep) = _currentStep - 1; + }; + }; +} else { + // Tilting + GVAR(currentAngle) = 0 max (GVAR(currentAngle) + _scroll) min 90; + GVAR(ladder) animate ["rotate", GVAR(currentAngle)]; +}; + +true \ No newline at end of file diff --git a/addons/tacticalladder/functions/fnc_pickupTL.sqf b/addons/tacticalladder/functions/fnc_pickupTL.sqf new file mode 100644 index 0000000000..c603f1feca --- /dev/null +++ b/addons/tacticalladder/functions/fnc_pickupTL.sqf @@ -0,0 +1,26 @@ +/* + * Author: Rocko, Ruthberg + * Pick up tactical ladder + * + * Arguments: + * 0: ladder + * 1: unit + * + * Return Value: + * Success? + * + * Example: + * [_ladder, _unit] call ace_tacticalladder_fnc_pickupTL; + * + * Public: No + */ +#include "script_component.hpp" + +if ((backpack ACE_player) != "") exitWith { false }; + +PARAMS_2(_ladder,_unit); + +deleteVehicle _ladder; +_unit addBackpack "ACE_TacticalLadder_Pack"; + +true diff --git a/addons/tacticalladder/functions/fnc_positionTL.sqf b/addons/tacticalladder/functions/fnc_positionTL.sqf new file mode 100644 index 0000000000..103792c851 --- /dev/null +++ b/addons/tacticalladder/functions/fnc_positionTL.sqf @@ -0,0 +1,52 @@ +/* + * Author: Rocko, Ruthberg + * Position tactical ladder + * + * Arguments: + * 0: sandbag + * 1: unit + * + * Return Value: + * None + * + * Example: + * [_ladder, _unit] call ace_tacticalladder_fnc_positionTL; + * + * Public: No + */ +#include "script_component.hpp" + +#define __ANIMS ["extract_1","extract_2","extract_3","extract_4","extract_5","extract_6","extract_7","extract_8","extract_9","extract_10","extract_11"] + +PARAMS_2(_ladder,_unit); + +{ + _ladder animate [_x, 0]; +} forEach __ANIMS; + +_unit switchMove "amovpercmstpslowwrfldnon_player_idlesteady03"; +_ladder attachTo [_unit, [0, 0.75, 0], ""]; // Position ladder in front of player + +_ladder animate ["rotate", 0]; +{ + _ladder animate [_x, 1]; +} forEach ["extract_1", "extract_2", "extract_3"]; // Extract ladder at head height (extract_3) + +GVAR(ladder) = _ladder; +GVAR(cancelTime) = ACE_time + 1; // Workaround to prevent accidental canceling +GVAR(currentStep) = 3; +GVAR(currentAngle) = 0; + +[localize LSTRING(Deploy), localize LSTRING(Drop), localize LSTRING(Adjust)] call EFUNC(interaction,showMouseHint); + +ACE_player setVariable [QGVAR(Deploy), + [ACE_player, "DefaultAction", + {!isNull GVAR(ladder)}, + {GVAR(ladder) call FUNC(confirmTLdeploy);} +] call EFUNC(common,AddActionEventHandler)]; + +ACE_player setVariable [QGVAR(Cancel), + [ACE_player, "zoomtemp", + {!isNull GVAR(ladder)}, + {GVAR(ladder) call FUNC(cancelTLdeploy);} +] call EFUNC(common,AddActionEventHandler)]; diff --git a/addons/tacticalladder/functions/script_component.hpp b/addons/tacticalladder/functions/script_component.hpp new file mode 100644 index 0000000000..53bdb8be62 --- /dev/null +++ b/addons/tacticalladder/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\tacticalladder\script_component.hpp" \ No newline at end of file diff --git a/addons/tacticalladder/script_component.hpp b/addons/tacticalladder/script_component.hpp new file mode 100644 index 0000000000..9905216ae7 --- /dev/null +++ b/addons/tacticalladder/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT tacticalladder +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_TACTICALLADDER + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_TACTICALLADDER + #define DEBUG_SETTINGS DEBUG_SETTINGS_TACTICALLADDER +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/tacticalladder/stringtable.xml b/addons/tacticalladder/stringtable.xml new file mode 100644 index 0000000000..962cc9e6ae --- /dev/null +++ b/addons/tacticalladder/stringtable.xml @@ -0,0 +1,67 @@ + + + + + Telescopic Ladder + Teleskopleiter + Телескопическая лестница + Drabina teleskopowa + Escalera telescópica + Telescopic Ladder + Teleskopický žebřík + Telescopic Ladder + Telescopic Ladder + + + Deploy ladder + Leiter aufbauen + Установить лестницу + Rozłóż drabinę + Despelgar escalera + Deploy ladder + Rozložit žebřík + Deploy ladder + Deploy ladder + + + Drop ladder + Leiter ablegen + Положить лестницу + Zostaw drabinę + Soltar escalera + Drop ladder + Položit žebřík + Drop ladder + Drop ladder + + + Adjust ladder + Leiter einstellen + Reguluj drabinę + Upravit žebřík + Ajustar escalera + + + Position ladder + Leiter positionieren + Перенести лестницу + Postaw drabinę + Colocar escalera + Position ladder + Umístit žebřík + Position ladder + Position ladder + + + Pickup ladder + Leiter aufnehmen + Взять лестницу + Zabierz drabinę + Recoger escalera + Pickup ladder + Vzít žebřík + Pickup ladder + Pickup ladder + + + \ No newline at end of file diff --git a/addons/tripod/stringtable.xml b/addons/tripod/stringtable.xml index 893fb2b398..baf20b9854 100644 --- a/addons/tripod/stringtable.xml +++ b/addons/tripod/stringtable.xml @@ -8,7 +8,7 @@ Trójnóg snajperski SSWT Kit SSWT Kit - SSWT sada + SSWT souprava SSWT Kit SSWT Kit @@ -19,7 +19,7 @@ Postaw trójnóg snajperski Place SSWT Kit Place SSWT Kit - Rozlož sadu SSWT + Rozlož souprava SSWT Place SSWT Kit Place SSWT Kit @@ -27,21 +27,25 @@ Pick up SSWT Kit Podnieś trójnóg snajperski Coger equipo SSWT + Zvednout SSWT soupravu Adjust SSWT Kit Reguluj trójnóg snajperski Ajustar equipo SSWT + Regulovat SSWT soupravu Done Gotowe Hecho + Hotovo + Modifier, adjust + Modyfikator, regulacja + Modificador, ajuste + + Modifikátor, regulace \ No newline at end of file diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index 3cfbac7518..23d8b380b9 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -138,78 +138,91 @@ Ustawienie blokady pojazdów Configuración del cierre del vehiculo Fahrzeugsperreinstellungen + Nastavení zámku vozidla Lock Vehicle Inventory Zablokuj ekwipunek pojazdu Bloquear inventario del vehículo Sperre Fahrzeuginventar + Inventář zamčeného vozidla Locks the inventory of locked vehicles Blokuje dostęp do ekwipunku pojazdu Bloquea el inventario de los vehículos cerrados Sperrt das Inventar von gesperrten Fahrzeugen + Zamknout inventář u zamčených vozidel Vehicle Starting Lock State Początkowy stan blok. poj. Estado inicial del cierre en vehículos Fahrzeuge spawnen gesperrt + Počáteční stav zámku vozidla Set lock state for all vehicles (removes ambiguous lock states) Ustawia początkowy stan blokady dla wszystkich pojazdów (usuwa dwuznaczne stany blokady) Establece el estado de cierre para todos los vehículos (elimina estados de cierre ambiguos) Setze Sperrstatus für alle Fahrzeuge (entfernt unklare Sperrzustände) + Nastavit stav zámku u všech vozidel (odstraňuje nejednoznačné stavy zámků) As Is Jak jest Está Unverändert + Jak je Locked Zablokowany Cerrado Gesperrt + Zamčeno Unlocked Odblokowany Abierto Offen + Odemčeno Default Lockpick Strength Czas włamywania Durabilidad de la ganzua por defecto Standard-Pick-Stärke + Výchozí síla páčidla Default Time to lockpick (in seconds). Default: 10 Domyślny czas potrzebny na otwarcie pojazdu (w sekundach). Domyślnie: 10 Tiempo por defecto para forzar cerradura (en segundos). Por defecto: 10 Standardzeit um ein Schloss zu knacken (in Sekunden). Standard: 10 + Čas k vypáčení zámku (v sekundách). Výchozí: 10 Settings for lockpick strength and initial vehicle lock state. Removes ambiguous lock states.<br />Source: vehiclelock.pbo Ustawienia czasu włamywania oraz domyślnego stanu blokady pojazdów. Wyłącza dwuznaczne ustawienia blokady. Moduł ten umożliwia więc np. zamknięcie pojazdów przeciwnika na klucz tak, że gracze bez odpowiedniego sprzętu (wytrycha) nie będą mogli ich używać.<br />Źródło: vehiclelock.pbo Ajustes de la durabilidad de la ganzua y el estado inicial del cierre de los vehículos. Elimina estados de cierre ambiguos.<br />Fuente: vehiclelock.pbo Einstellungen für Pick-Stärke und anfänglichen Fahrzeugsperrzustand. Entfernt unklare Sperrzustände.<br />Quelle: vehiclelock.pbo + Nastavení síly vypáčení a počáteční stav zámku vozidla. Odstraňuje nejednoznačné stavy zámků.<br />Zdroj: vehiclelock.pbo Vehicle Key Assign Przydział kluczyka do pojazdu Asignacion de la llave del vehículo Fahrzeugschlüsselzuweisung + Přidělení klíče k vozidlu Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start.<br />Source: vehiclelock.pbo Zsynchronizuj z pojazdami i graczami. Rozda klucze dla graczy dla każdego zsynchronizowanego pojazdu. Działa tylko na pojazdy obecne na misji od samego początku (postawione w edytorze).<br />Źródło: vehiclelock.pbo Sincronizar con vehiculos y jugadores. Distribuirá llaves personalizadas a los jugadores para todos los vehículos sincronizados. Solo valido para objetos presentes al inicio de la mision.<br />Fuente: vehiclelock.pbo Synchronisiere mit Fahrzeugen und Spielern. Wird eigene Schlüssel an Spieler für jedes synchronisierte Fahrzeuge aushändigen. Nur gültig für am Missionsstart existierende Fahrzeuge.<br />Quelle: vehiclelock.pbo + Synchronizuj s vozidly a hráči. Hráč dostane klíč ke každému synchonizovanému vozidlu. Platné pouze pro objekty přítomné na začátku mise.<br />Zdroj: vehiclelock.pbo - + \ No newline at end of file diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index bfd7db7a81..9cb7fcde2e 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -5,126 +5,151 @@ View Distance Limiter Ogranicznik zasięgu widzenia Limitador de distancia de visión + Omezovač dohlednosti Allows limiting maximum view distance that can be set by players. Pozwala ustawić maksymalny limit zasięgu widzenia. Permite limitar la distancia máxima de visión que se puede establecer por los jugadores. + Umožňuje určit maximální dohlednost, kterou si může hráč nastavit Enable ACE viewdistance Wł. zasięg widzenia ACE Habilitar distancia de visión ACE + Povolit ACE dohlednost Enables ACE viewdistance Aktywuje możliwość zmiany zasięgu widzenia w menu ustawień ACE Habilita la distancia de visión ACE + Povolit ACE dohlednost View Distance Limit Limit zas. widzenia Limite de distancia de visión + Limit dohlednosti Sets the limit for how high clients can raise their view distance (up to 10000) Ustawia maksymalny limit zasięgu widzenia jaki mogą ustawić gracze (do 10000) Establece el límite de cuan alta pueden aumentar los clientes la distancia de visión (hasta 10.000) + Stanoví limit jak daleko si může client zvýšit dohlednost (do 10000) Limit for client's view distance set here and can overridden by module Limit zasięgu widzenia jest ustawiany tutaj i może zostać nadpisany poprzez moduł Establecer aqui el límite para la distancia de visión de los clientes. Puede ser anulado por módulo + Limit dohlednoti pro klienty se nastavuje zde a může být potlačeno pomocí modulu. Client View Distance (On Foot) Zasięg widzenia (piechota) Distancia de visión del cliente (A pie) + Dohlednost (Pěšák) Changes in game view distance when the player is on foot. Zmienia zasięg widzenia kiedy gracz porusza się na piechotę. Cambia en juego la distancia de visión cuando el jugador va a pie. + Změna dohlednosti pro hráče pokud jde po svých. Client View Distance (Land Vehicle) Zasięg widzenia (pojazdy naziemne) Distancia de visión del cliente (Vehículo terrestre) + Dohlednost (Pozemní technika) Changes in game view distance when the player is in a land vehicle. Zmienia zasięg widzenia kiedy gracz porusza się pojazdami naziemnymi. Cambia en juego la distancia de visión cuando el jugador va en un vehículo terrestre. + Změna dohlednosti pro hráče pokud je v pozemní technice. Client View Distance (Air Vehicle) Zasięg widzenia (pojazdy lotnicze) Distancia de visión del cliente (Vehículo aéreo) + Dohlednost (Vzdušná technika) Changes in game view distance when the player is in an air vehicle. Zmienia zasięg widzenia kiedy gracz porusza się pojazdami lotniczymi. Cambia en juego la distancia de visión cuando el jugador va en un vehículo aéreo. + Změna dohlednosti pro hráče pokud je ve vzdušné technice. Dynamic Object View Distance Dynamiczny zasięg rysowania obiektów Distancia de visión dinámica de objetos + Dynamická dohlednost objektů Sets the object view distance as a coefficient of the view distance. Zmienia zasięg rysowania obiektów jako mnożnik zasięgu widzenia. Establece la distancia de visión de objetos como un coeficiente de la distancia de visión. + Nastaví objekt dohlednosti jako koeficient dohlednosti. Off Wyłącz Apagada + Vypnout Very Low Bardzo niski Muy baja + Velmi málo Low Niski Baja + Málo Medium Średni Media + Středně High Wysoki Alta + Hodně Very High Bardzo wysoki Muy alta + Velmi hodně View Distance: Zasięg widzenia: Distancia de visión: + Dohlednost: Object View Distance is Zasięg widzenia obiektów wynosi La distancia de visión de objetos es: + Dohlednost objektů je That option is invalid! The limit is Ta opcja jest nieprawidłowa! Limit wynosi Esta opción no es valida! El limite es + Tato volba je neplatná! Limit je Video Settings Ustawienia wideo Ajustes de vídeo + Nastavení videa \ No newline at end of file diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index fb6814dd1f..c6f779358f 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -8,6 +8,8 @@ GVAR(humidityShift) = (5 - random 10) / 100; GVAR(wind_period_start_time) = ACE_time; GVAR(rain_period_start_time) = ACE_time; +GVAR(ACE_rain) = rain; + "ACE_WIND_PARAMS" addPublicVariableEventHandler { GVAR(wind_period_start_time) = ACE_time; }; "ACE_RAIN_PARAMS" addPublicVariableEventHandler { GVAR(rain_period_start_time) = ACE_time; }; "ACE_MISC_PARAMS" addPublicVariableEventHandler { @@ -41,4 +43,9 @@ simulWeatherSync; [FUNC(updateTemperature), 20, []] call CBA_fnc_addPerFrameHandler; [FUNC(updateHumidity), 20, []] call CBA_fnc_addPerFrameHandler; [FUNC(updateWind), 1, []] call CBA_fnc_addPerFrameHandler; -[FUNC(updateRain), 2, []] call CBA_fnc_addPerFrameHandler; \ No newline at end of file +[FUNC(updateRain), 2, []] call CBA_fnc_addPerFrameHandler; +[{ + if (GVAR(syncRain)) then { + 0 setRain GVAR(ACE_rain); + }; +}, 0, []] call CBA_fnc_addPerFrameHandler; \ No newline at end of file diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index ab89ea7225..ced8641f61 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -14,12 +14,11 @@ if (!GVAR(syncRain)) exitWith {}; if (!isNil "ACE_RAIN_PARAMS") then { - EXPLODE_3_PVT(ACE_RAIN_PARAMS,_oldRain,_newRain,_period); private ["_periodPosition", "_periodPercent"]; _periodPosition = (ACE_time - GVAR(rain_period_start_time)) min _period; _periodPercent = (_periodPosition / _period) min 1; - 0 setRain (_oldRain + (_newRain - _oldRain) * _periodPercent); + GVAR(ACE_Rain) = (_oldRain + (_newRain - _oldRain) * _periodPercent); }; diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 3443bb4b47..54069425a4 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -18,84 +18,98 @@ Pogoda Clima Wetter + Počasí Multiplayer synchronized ACE weather module Synchronizowana pogoda ACE Modulo climático del ACE sincronizado en multijugador ACE-Wettermodul (synchron im Multiplayer) + Synchronizovat ACE počasí v multiplayeru Weather propagation Zmiany pogody Propagación del clima Wetterübertragung + Změny počasí Enables server side weather propagation Aktywuje zmiany pogody po stronie serwera Permite al servidor controlar la propagación del clima Aktiviere serverseitige Wetterübertragung + Aktivuje změny počasí na straně serveru ACE Weather Pogoda ACE Clima ACE ACE-Wetter + ACE počasí Overrides the default weather (editor, mission settings) with ACE weather (map based) Nadpisuje domyślne ustawienia pogody (edytor, wywiad) przy użyciu pogody ACE (zależna od mapy) Sobreescribe el sistema climático por defecto (editor, ajustes de mision) con clima del ACE (basado en el mapa) Überschreibt das Standardwetter (Editor, Missionseinstellungen) mit dem ACE-Wetter (kartenbasiert) + Přepíše výchozí počasí (editor, nastavení mise) s ACE počasím (podle mapy) Sync Rain Synchronizuj deszcz Sincronizar lluvia Regen synchronisieren + Synchronizuj déšť Synchronizes rain Synchronizuje deszcz Sincroniza la lluvia Synchronisiert den Regen + Synchronizace deště Sync Wind Synchronizuj wiatr Sincronizar viento Wind synchronisieren + Synchronizuj vítr Synchronizes wind Synchronizuje wiatr Sincroniza el viento Synchronisiert den Wind + Synchronizace větru Sync Misc Synchronizuj różne Sincronizar otros Sonstiges synchronisieren + Synchronizuj různé Synchronizes lightnings, rainbow, fog, ... Synchronizuje pioruny, tęcze, mgłę, ... Sincroniza relampagos, arcoiris, niebla ... Synchronisiert Blitze, Regenbögen, Nebel, ... + Synchronizace blesků, duhy, mlhy, ... Update Interval Interwał aktualizacji Intervalo de actualización Aktualisierungsintervall + Interval aktualizace Defines the interval (seconds) between weather updates Określa interwał (sekundy) pomiędzy aktualizacjami pogody Defina el intervalo (en segundos) entre actualizacions de clima Definiert das Intervall (in Sekunden) zwischen Wetteraktualisierungen + Určit interval (v sekundách) mezi aktualizacemi počasí - + \ No newline at end of file diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 9a9a051fec..a361681e59 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -65,60 +65,70 @@ Wind Deflection Wpływ wiatru Desviación por viento + Účinky větru Wind Deflection Wpływ wiatru Desviación por viento Windablenkung + Účinky větru Enables wind deflection Aktywuje wpływ wiatru na trajektorię lotu pocisków Activa la desviación por viento Aktiviert Windablenkung + Umožňit vliv větru Vehicle Enabled Włączone dla pojazdów Habilitada en vehículos Fahrzeuge aktiviert + Vozidla povolena Enables wind deflection for static/vehicle gunners Aktywuje wpływ wiatru na trajektorię lotu pocisków dla broni statycznej i na pojazdach Habilita la desviación por viento para artilleros estaticos/de vehículos Aktiviere Windablenkung für statische oder Fahrzeugschützen + Umožnit vliv větru pro střelce z vozidla/statiky Simulation Interval Interwał symulacji Intervalo de simulación Simulationsintervall + Interval simulace Defines the interval between every calculation step Określa interwał pomiędzy każdym krokiem kalkulacji Define el intervalo entre cada calculo Definiert das Intervall zwischen jedem Berechnungsschritt + Určuje interval mezi každým výpočtem Simulation Radius Zasięg symulacji Radio de simulación Simulationsradius + Oblast simulace Defines the radius around the player (in meters) at which projectiles are wind deflected Określa obszar naokoło gracza (w metrach), na którym pociski są znoszone przez wiatr Define el radio alrededor del jugador (en metros) en el cual los proyectiles son desviados por el viento Gibt den Radius (in Metern) um den Spieler an, in dem Projektile vom Wind beeinflusst werden + Definuje oblast kolem hráče (v metrech) v které je projektil ovlivněn větrem Wind influence on projectiles trajectory Wpływ wiatru na trajektorię lotu pocisków Influencia del viento en la trayectoria de proyectiles Windeinfluss auf die Geschossbahnen + Vítr ovlivňuje trajektorii projektilu - + \ No newline at end of file diff --git a/addons/yardage450/stringtable.xml b/addons/yardage450/stringtable.xml index 9f48308a8a..c7cb16b83b 100644 --- a/addons/yardage450/stringtable.xml +++ b/addons/yardage450/stringtable.xml @@ -5,18 +5,21 @@ Yardage 450 Yardage 450 Yardage 450 + Yardage 450 Laser Rangefinder Laserentfernungsmesser Dalmierz laserowy Telémetro láser + Laserový dálkoměr Yardage 450 - Power Button Yardage 450 - Einschalt-Taste Yardage 450 - Przycisk zasilania Yardage 450 - Botón de encendido + Yardage 450 - Tlačítko napájení \ No newline at end of file diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index f2f6b4e57b..8ddde63cc8 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -5,86 +5,103 @@ Zeus Settings Ustawienia Zeusa Ajustes Zeus + Nastavení Zeuse Provides control over various aspects of Zeus. Pozwala kontrolować różne aspekty Zeusa. Proporciona control sobre diversos aspectos de Zeus. + Poskytuje kontrolu na různými aspekty Zeuse. Ascension Messages Wiad. o nowym Zeusie Mensajes de ascensión + Zpráva o novém Zeusovi Display global popup messages when a player is assigned as Zeus. Wyświetlaj globalną wiadomość kiedy gracz zostanie przydzielony jako Zeus Mostrar mensajes emergentes globales cuando a un jugador se le asigna como Zeus. + Zobrazit globální zprávu když je hráč přiřazen jako Zeus. Zeus Eagle Orzeł Zeusa Águila Zeus + Orel Zeuse Spawn an eagle that follows the Zeus camera. Spawnuj orła, który podąrza za kamerą Zeusa. Generar un águila que sigue la cámara Zeus. + Vytvoří orla, který následuje kameru Zeuse. Wind Sounds Dźwięki wiatru Sonidos de viento + Zvuky větru Play wind sounds when Zeus remote controls a unit. Odtwarzaj dźwięki wiatru kiedy Zeus zdalnie kontroluje jednostkę. Reproduce sonidos de viento cuando Zeus controle remotamente una unidad. + Přehrát varování (vítr) když Zeus převezmě kontrolu nad jednotkou. Ordnance Warning Ostrz. o ostrzale arty. Advertencia de artefactos explosivos + Varování před dělostřelectvem Play a radio warning when Zeus uses ordnance. Odtwarzaj wiadomość radiową kiedy Zeus używa artylerii. Reproduce un aviso de radio cuando Zeus utiliza artefactos explosivos. + Přehrát varování (rádio) když Zeus použije dělostřelectvo. Reveal Mines Pokazuj miny Revelar minas + Odhalit miny Reveal mines to allies and place map markers. Pokazuj znaczniki min dla sojuszników i twórz markery na mapie w miejscu min. Revelar minas a aliados y establecer marcadores de mapa. + Odhalí miny pro spojence a umístnit jejich značku na mapu. Reveal to Allies Pokaż dla sojuszników Revelar a aliados + Odhalit pro spojence Allies + Map Markers Sojusznicy + markery na mapie Aliados + Marcas de mapa + Spojenci + Značky na mapě Toggle Captive Przełącz więźnia Alternar cautivo + Přepnout - Vězeň Toggle Surrender Przełącz kapitulację Alternar rendición + Přepnout - Vzdávání Toggle Unconscious Przełącz nieprzytomność Alternar inconsciencia + Přepnout - Bezvědomí Unit must be alive @@ -114,6 +131,7 @@ Unit must not be captive Jednostka nie może być więźniem La unidad no debe estar cautiva + Jednotka nemí být vězeň Place on a unit @@ -121,7 +139,7 @@ Es wurde nichts ausgewählt Nada bajo el ratón Nada debaixo do mouse - Nic není vybráno + Umístni na jednotku Nie ma nic pod kursorem Ничего не выделено Semmi sincs az egér alatt @@ -131,6 +149,7 @@ Requires an addon that is not present Wymaga addonu, który nie jest obecny Requiere un addon que no está presente + Vyžaduje addon, který není přítomen \ No newline at end of file diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md index 9a2880b319..5264760785 100644 --- a/documentation/development/setting-up-the-development-environment.md +++ b/documentation/development/setting-up-the-development-environment.md @@ -17,8 +17,8 @@ This page describes how you can setup your development environment for ACE3, all - A properly setup P-drive - Run ArmA 3 and Arma 3 Tools directly from steam once to install registry entries (and again after every update) - Python 3.x, available [here](http://www.python.org) -- The following Mikero Tools (available [here](https://dev.withsix.com/projects/mikero-pbodll/files)): DePBO, Rapify, MakePBO, PBOProject -- A properly setup PATH variable (containing Python and the Mikero tools) +- The following Mikero Tools (available [here](https://dev.withsix.com/projects/mikero-pbodll/files)): DePBO, DeOgg, Rapify, MakePBO, PBOProject +- A properly setup PATH variable (containing Python ,the Mikero tools and git) ## 2. Why so complicated? diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 8d990ec0d2..c5c0a6c7a3 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -236,9 +236,9 @@ extern "C" void __stdcall RVExtension(char *output, int outputSize, const char *function) { ZERO_OUTPUT(); - + std::stringstream outputStr; if (!strcmp(function, "version")) { - int n = sprintf(output, "%s", ACE_FULL_VERSION_STR); + strncpy(output, ACE_FULL_VERSION_STR, outputSize); EXTENSION_RETURN(); } @@ -258,7 +258,11 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) velocity = strtod(strtok_s(NULL, ":", &next_token), NULL); retard = calculateRetard(dragModel, ballisticCoefficient, velocity); - int n = sprintf(output, "%f", retard); + // int n = sprintf(output, "%f", retard); + + outputStr << retard; + strncpy(output, outputStr.str().c_str(), outputSize); + EXTENSION_RETURN(); } else if (!strcmp(mode, "atmosphericCorrection")) { double ballisticCoefficient = 1.0; @@ -274,7 +278,9 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) atmosphereModel = strtok_s(NULL, ":", &next_token); ballisticCoefficient = calculateAtmosphericCorrection(ballisticCoefficient, temperature, pressure, humidity, atmosphereModel); - int n = sprintf(output, "%f", ballisticCoefficient); + //int n = sprintf(output, "%f", ballisticCoefficient); + outputStr << ballisticCoefficient; + strncpy(output, outputStr.str().c_str(), outputSize); EXTENSION_RETURN(); } else if (!strcmp(mode, "new")) { unsigned int index = 0; @@ -369,7 +375,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) bulletDatabase[index].frames = 0.0; bulletDatabase[index].randSeed = 0; - int n = sprintf(output, "%s", ""); + strncpy(output, "", outputSize); EXTENSION_RETURN(); } else if (!strcmp(mode, "simulate")) { // simulate:0:[-0.109985,542.529,-3.98301]:[3751.57,5332.23,214.252]:[0.598153,2.38829,0]:28.6:0:0.481542:0:215.16 @@ -586,8 +592,9 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) velocityOffset[1] += (distribution(bulletDatabase[index].randGenerator) * 0.8 - 0.4) * coef; velocityOffset[2] += (distribution(bulletDatabase[index].randGenerator) * 0.8 - 0.4) * coef; }; - - int n = sprintf(output, "_bullet setVelocity (_bulletVelocity vectorAdd [%f, %f, %f]); _bullet setPosASL (_bulletPosition vectorAdd [%f, %f, %f]);", velocityOffset[0], velocityOffset[1], velocityOffset[2], positionOffset[0], positionOffset[1], positionOffset[2]); + + outputStr << "_bullet setVelocity (_bulletVelocity vectorAdd [" << velocityOffset[0] << "," << velocityOffset[1] << "," << velocityOffset[2] << "]); _bullet setPosASL (_bulletPosition vectorAdd [" << positionOffset[0] << "," << positionOffset[1] << "," << positionOffset[2] << "]);"; + strncpy(output, outputStr.str().c_str(), outputSize); EXTENSION_RETURN(); } else if (!strcmp(mode, "set")) { int height = 0; @@ -602,7 +609,7 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) map->gridBuildingNums.push_back(numObjects); map->gridSurfaceIsWater.push_back(surfaceIsWater); - int n = sprintf(output, "%s", ""); + strncpy(output, outputStr.str().c_str(), outputSize); EXTENSION_RETURN(); } else if (!strcmp(mode, "init")) { int mapSize = 0; @@ -617,7 +624,8 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) map = &mapDatabase[worldName]; if (map->gridHeights.size() == gridCells) { - int n = sprintf(output, "%s", "Terrain already initialized"); + outputStr << "Terrain already initialized"; + strncpy(output, outputStr.str().c_str(), outputSize); EXTENSION_RETURN(); } @@ -630,10 +638,9 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) map->gridBuildingNums.reserve(gridCells); map->gridSurfaceIsWater.reserve(gridCells); - int n = sprintf(output, "%s", ""); + strncpy(output, outputStr.str().c_str(), outputSize); EXTENSION_RETURN(); } - - int n = sprintf(output, "%s", ""); + strncpy(output, outputStr.str().c_str(), outputSize); EXTENSION_RETURN(); } diff --git a/extensions/medical/handleDamage.cpp b/extensions/medical/handleDamage.cpp index b388845ac5..e36d8994b0 100644 --- a/extensions/medical/handleDamage.cpp +++ b/extensions/medical/handleDamage.cpp @@ -96,7 +96,8 @@ namespace ace { } else { - injuryToAdd = information.at(0); + int indexNewInjuryToAdd = rand() % information.size(); + injuryToAdd = information.at(indexNewInjuryToAdd); } int bodyPartID = selection; diff --git a/mod.cpp b/mod.cpp index f9ae718fdc..c078328e53 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.0.1"; +name = "Advanced Combat Environment 3.1.2"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.0.1"; +description = "ACE3 - Version 3.1.2"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/optionals/compat_cup/CfgAmmo.hpp b/optionals/compat_cup/CfgAmmo.hpp index a3cafcfbb0..f5ba34fc7e 100644 --- a/optionals/compat_cup/CfgAmmo.hpp +++ b/optionals/compat_cup/CfgAmmo.hpp @@ -4,6 +4,7 @@ class CfgAmmo class B_762x51_Ball; class B_127x99_Ball; class CUP_B_545x39_Ball: BulletBase { + airFriction=-0.0011204; ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.42792; @@ -16,6 +17,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Green: CUP_B_545x39_Ball { + airFriction=-0.0011204; ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.22704; @@ -28,6 +30,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Red: BulletBase { + airFriction=-0.0011204; ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.22704; @@ -40,6 +43,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_White: BulletBase { + airFriction=-0.0011204; ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.22704; @@ -52,6 +56,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_545x39_Ball_Tracer_Yellow: BulletBase { + airFriction=-0.0011204; ACE_caliber=5.588; ACE_bulletLength=21.59; ACE_bulletMass=3.22704; @@ -64,6 +69,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x39_Ball: BulletBase { + airFriction=-0.00150173; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=7.9704; @@ -76,6 +82,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x39_Ball_Tracer_Green: BulletBase { + airFriction=-0.00150173; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=7.5816; @@ -88,6 +95,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class B_762x39mm_KLT: BulletBase { + airFriction=-0.00150173; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=7.5816; @@ -100,6 +108,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_9x18_Ball: BulletBase { + airFriction=-0.00180193; ACE_caliber=9.271; ACE_bulletLength=15.494; ACE_bulletMass=6.00048; @@ -112,6 +121,7 @@ class CfgAmmo ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Green: BulletBase { + airFriction=-0.00180193; ACE_caliber=9.271; ACE_bulletLength=15.494; ACE_bulletMass=6.00048; @@ -124,6 +134,7 @@ class CfgAmmo ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Red: BulletBase { + airFriction=-0.00180193; ACE_caliber=9.271; ACE_bulletLength=15.494; ACE_bulletMass=6.00048; @@ -136,6 +147,7 @@ class CfgAmmo ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_Tracer_Yellow: BulletBase { + airFriction=-0.00180193; ACE_caliber=9.271; ACE_bulletLength=15.494; ACE_bulletMass=6.00048; @@ -148,6 +160,7 @@ class CfgAmmo ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x18_Ball_White_Tracer: BulletBase { + airFriction=-0.00180193; ACE_caliber=9.271; ACE_bulletLength=15.494; ACE_bulletMass=6.00048; @@ -160,6 +173,7 @@ class CfgAmmo ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_9x19_Ball: BulletBase { + airFriction=-0.00205726; ACE_caliber=9.017; ACE_bulletLength=15.494; ACE_bulletMass=8.0352; @@ -172,6 +186,7 @@ class CfgAmmo ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class CUP_B_762x51_noTracer: B_762x51_Ball { + airFriction=-0.00099036; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -184,6 +199,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_303_Ball: BulletBase { + airFriction=-0.00082199; ACE_caliber=7.899; ACE_bulletLength=31.166; ACE_bulletMass=11.2752; @@ -196,6 +212,7 @@ class CfgAmmo ACE_barrelLengths[]={508.0, 609.6, 660.4}; }; class CUP_B_127x107_Ball_Green_Tracer: BulletBase { + airFriction=-0.00062618; ACE_caliber=12.979; ACE_bulletLength=64.008; ACE_bulletMass=48.276; @@ -208,6 +225,7 @@ class CfgAmmo ACE_barrelLengths[]={728.98}; }; class CUP_B_127x108_Ball_Green_Tracer: BulletBase { + airFriction=-0.00062618; ACE_caliber=12.979; ACE_bulletLength=64.008; ACE_bulletMass=48.276; @@ -220,6 +238,7 @@ class CfgAmmo ACE_barrelLengths[]={728.98}; }; class CUP_B_762x54_Ball_White_Tracer: BulletBase { + airFriction=-0.00101742; ACE_caliber=7.925; ACE_bulletLength=28.956; ACE_bulletMass=9.6552; @@ -232,6 +251,7 @@ class CfgAmmo ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Red_Tracer: BulletBase { + airFriction=-0.00101742; ACE_caliber=7.925; ACE_bulletLength=28.956; ACE_bulletMass=9.6552; @@ -244,6 +264,7 @@ class CfgAmmo ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Green_Tracer: BulletBase { + airFriction=-0.00101742; ACE_caliber=7.925; ACE_bulletLength=28.956; ACE_bulletMass=9.6552; @@ -256,6 +277,7 @@ class CfgAmmo ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x54_Ball_Yellow_Tracer: BulletBase { + airFriction=-0.00101742; ACE_caliber=7.925; ACE_bulletLength=28.956; ACE_bulletMass=9.6552; @@ -268,6 +290,7 @@ class CfgAmmo ACE_barrelLengths[]={406.4, 508.0, 609.6, 660.4}; }; class CUP_B_9x39_SP5: BulletBase { + airFriction=-0.00075274; ACE_caliber=9.246; ACE_bulletLength=31.496; ACE_bulletMass=16.2; @@ -280,6 +303,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 414.02, 508.0}; }; class CUP_B_762x51_Tracer_Green: BulletBase { + airFriction=-0.00099036; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -292,6 +316,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_Red: BulletBase { + airFriction=-0.00099036; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -304,6 +329,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_Yellow: BulletBase { + airFriction=-0.00099036; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -316,6 +342,7 @@ class CfgAmmo ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; }; class CUP_B_762x51_Tracer_White: BulletBase { + airFriction=-0.00099036; ACE_caliber=7.823; ACE_bulletLength=28.956; ACE_bulletMass=9.4608; @@ -340,6 +367,7 @@ class CfgAmmo ACE_barrelLengths[]={728.98}; }; class CUP_B_9x18_SD: BulletBase { + airFriction=-0.00180193; ACE_caliber=9.271; ACE_bulletLength=15.494; ACE_bulletMass=6.00048; @@ -352,6 +380,7 @@ class CfgAmmo ACE_barrelLengths[]={96.52, 127.0, 228.6}; }; class CUP_B_765x17_Ball: BulletBase { + airFriction=-0.00173452; ACE_caliber=7.938; ACE_bulletLength=15.494; ACE_bulletMass=4.212; @@ -364,6 +393,7 @@ class CfgAmmo ACE_barrelLengths[]={101.6, 127.0, 228.6}; }; class CUP_B_145x115_AP_Green_Tracer: BulletBase { + airFriction=-0.00059041; ACE_caliber=14.884; ACE_bulletLength=50.8; ACE_bulletMass=65.448; @@ -376,6 +406,7 @@ class CfgAmmo ACE_barrelLengths[]={1346.2}; }; class CUP_B_127x99_Ball_White_Tracer: B_127x99_Ball { + airFriction=-0.00057503; ACE_caliber=12.954; ACE_bulletLength=58.674; ACE_bulletMass=41.9256; @@ -388,15 +419,16 @@ class CfgAmmo ACE_barrelLengths[]={736.6}; }; class CUP_B_86x70_Ball_noTracer: BulletBase { + airFriction=-0.0005788; ACE_caliber=8.585; - ACE_bulletLength=43.18; - ACE_bulletMass=19.44; + ACE_bulletLength=39.573; + ACE_bulletMass=16.2; 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.322}; ACE_velocityBoundaries[]={}; ACE_standardAtmosphere="ICAO"; ACE_dragModel=7; - ACE_muzzleVelocities[]={820, 826, 830}; - ACE_barrelLengths[]={609.6, 673.1, 711.2}; + ACE_muzzleVelocities[]={880, 915, 925}; + ACE_barrelLengths[]={508.0, 660.4, 711.2}; }; }; \ No newline at end of file diff --git a/optionals/compat_cup/CfgMagazines.hpp b/optionals/compat_cup/CfgMagazines.hpp index b05b0c3efd..469476734c 100644 --- a/optionals/compat_cup/CfgMagazines.hpp +++ b/optionals/compat_cup/CfgMagazines.hpp @@ -45,4 +45,223 @@ class CfgMagazines { modelSpecial = ""; mass = 0; }; + + class CA_Magazine; + class 30Rnd_556x45_Stanag; + class CUP_30Rnd_545x39_AK_M: CA_Magazine { + initSpeed = 880; + }; + class CUP_30Rnd_TE1_Green_Tracer_545x39_AK_M: CA_Magazine { + initSpeed = 880; + }; + class CUP_30Rnd_TE1_Red_Tracer_545x39_AK_M: CA_Magazine { + initSpeed = 880; + }; + class CUP_30Rnd_TE1_White_Tracer_545x39_AK_M: CA_Magazine { + initSpeed = 880; + }; + class CUP_30Rnd_TE1_Yellow_Tracer_545x39_AK_M: CA_Magazine { + initSpeed = 880; + }; + class CUP_75Rnd_TE4_LRT4_Green_Tracer_545x39_RPK_M: CA_Magazine { + initSpeed = 880; + }; + class CUP_30Rnd_762x39_AK47_M: CA_Magazine { + initSpeed = 750; + }; + class CUP_64Rnd_9x19_Bizon_M: CA_Magazine { + initSpeed = 350; + }; + class CUP_64Rnd_Green_Tracer_9x19_Bizon_M: CA_Magazine { + initSpeed = 350; + }; + class CUP_64Rnd_Red_Tracer_9x19_Bizon_M: CA_Magazine { + initSpeed = 350; + }; + class CUP_64Rnd_White_Tracer_9x19_Bizon_M: CA_Magazine { + initSpeed = 350; + }; + class CUP_64Rnd_Yellow_Tracer_9x19_Bizon_M: CA_Magazine { + initSpeed = 350; + }; + class CUP_5x_22_LR_17_HMR_M: CA_Magazine { + initSpeed = 830; + }; + class CUP_10x_303_M: CA_Magazine { + initSpeed = 765; + }; + class CUP_20Rnd_762x51_FNFAL_M: CA_Magazine { + initSpeed = 833; + }; + class CUP_5Rnd_127x108_KSVK_M: CA_Magazine { + initSpeed = 820; + }; + class CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M: CA_Magazine { + initSpeed = 833; + }; + class CUP_100Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M: CUP_100Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M { + initSpeed = 833; + }; + class CUP_200Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M: CA_Magazine { + initSpeed = 833; + }; + class CUP_200Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M: CA_Magazine { + initSpeed = 833; + }; + class CUP_100Rnd_TE4_LRT4_762x54_PK_Tracer_Green_M: CA_Magazine { + initSpeed = 800; + }; + class CUP_10Rnd_762x54_SVD_M: CA_Magazine { + initSpeed = 800; + }; + class CUP_10Rnd_9x39_SP5_VSS_M: CA_Magazine { + initSpeed = 300; + }; + class CUP_20Rnd_9x39_SP5_VSS_M: CA_Magazine { + initSpeed = 300; + }; + class CUP_5Rnd_127x99_as50_M: CA_Magazine { + initSpeed = 900; + }; + class CUP_20Rnd_762x51_DMR: CA_Magazine { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_DMR: CUP_20Rnd_762x51_DMR { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_DMR: CUP_20Rnd_762x51_DMR { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_DMR: CUP_20Rnd_762x51_DMR { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_White_Tracer_762x51_DMR: CUP_20Rnd_762x51_DMR { + initSpeed = 833; + }; + class CUP_20Rnd_762x51_B_SCAR: CA_Magazine { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_SCAR: CUP_20Rnd_762x51_B_SCAR { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_SCAR: CUP_20Rnd_762x51_B_SCAR { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_SCAR: CUP_20Rnd_762x51_B_SCAR { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_White_Tracer_762x51_SCAR: CUP_20Rnd_762x51_B_SCAR { + initSpeed = 833; + }; + class CUP_20Rnd_762x51_B_M110: CA_Magazine { + initSpeed = 833; + }; + class CUP_5Rnd_762x51_M24: CA_Magazine { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Yellow_Tracer_762x51_M110: CUP_20Rnd_762x51_B_M110 { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Red_Tracer_762x51_M110: CUP_20Rnd_762x51_B_M110 { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_Green_Tracer_762x51_M110: CUP_20Rnd_762x51_B_M110 { + initSpeed = 833; + }; + class CUP_20Rnd_TE1_White_Tracer_762x51_M110: CUP_20Rnd_762x51_B_M110 { + initSpeed = 833; + }; + class CUP_30Rnd_556x45_G36: 30Rnd_556x45_Stanag { + initSpeed = 920; + }; + class CUP_30Rnd_TE1_Red_Tracer_556x45_G36: CUP_30Rnd_556x45_G36 { + initSpeed = 920; + }; + class CUP_30Rnd_TE1_Green_Tracer_556x45_G36: CUP_30Rnd_556x45_G36 { + initSpeed = 920; + }; + class CUP_30Rnd_TE1_Yellow_Tracer_556x45_G36: CUP_30Rnd_556x45_G36 { + initSpeed = 920; + }; + class CUP_100Rnd_556x45_BetaCMag: 30Rnd_556x45_Stanag { + initSpeed = 920; + }; + class CUP_100Rnd_TE1_Red_Tracer_556x45_BetaCMag: CUP_100Rnd_556x45_BetaCMag { + initSpeed = 920; + }; + class CUP_100Rnd_TE1_Green_Tracer_556x45_BetaCMag: CUP_100Rnd_556x45_BetaCMag { + initSpeed = 920; + }; + class CUP_100Rnd_TE1_Yellow_Tracer_556x45_BetaCMag: CUP_100Rnd_556x45_BetaCMag { + initSpeed = 920; + }; + class CUP_200Rnd_TE4_Green_Tracer_556x45_M249: CA_Magazine { + initSpeed = 920; + }; + class CUP_200Rnd_TE4_Red_Tracer_556x45_M249: CUP_200Rnd_TE4_Green_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_200Rnd_TE4_Yellow_Tracer_556x45_M249: CUP_200Rnd_TE4_Green_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_200Rnd_TE1_Red_Tracer_556x45_M249: CUP_200Rnd_TE4_Red_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_100Rnd_TE4_Green_Tracer_556x45_M249: CA_Magazine { + initSpeed = 920; + }; + class CUP_100Rnd_TE4_Red_Tracer_556x45_M249: CUP_100Rnd_TE4_Green_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_100Rnd_TE4_Yellow_Tracer_556x45_M249: CUP_100Rnd_TE4_Green_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_200Rnd_TE4_Green_Tracer_556x45_L110A1: CUP_200Rnd_TE4_Green_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_200Rnd_TE4_Red_Tracer_556x45_L110A1: CUP_200Rnd_TE4_Red_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_200Rnd_TE4_Yellow_Tracer_556x45_L110A1: CUP_200Rnd_TE4_Yellow_Tracer_556x45_M249 { + initSpeed = 920; + }; + class CUP_30Rnd_556x45_Stanag: CA_Magazine { + initSpeed = 920; + }; + class CUP_20Rnd_556x45_Stanag: CUP_30Rnd_556x45_Stanag { + initSpeed = 920; + }; + class CUP_10Rnd_127x99_M107: CA_Magazine { + initSpeed = 900; + }; + class CUP_10Rnd_762x51_CZ750: CA_Magazine { + initSpeed = 833; + }; + class CUP_10Rnd_762x51_CZ750_Tracer: CUP_10Rnd_762x51_CZ750 { + initSpeed = 833; + }; + class CUP_50Rnd_UK59_762x54R_Tracer: CA_Magazine { + initSpeed = 800; + }; + class CUP_8Rnd_9x18_Makarov_M: CA_Magazine { + initSpeed = 300; + }; + class CUP_8Rnd_9x18_MakarovSD_M: CUP_8Rnd_9x18_Makarov_M { + initSpeed = 300; + }; + class CUP_6Rnd_45ACP_M: CA_Magazine { + initSpeed = 250; + }; + class CUP_17Rnd_9x19_glock17: CA_Magazine { + initSpeed = 370; + }; + class CUP_5Rnd_86x70_L115A1: CA_Magazine { + initSpeed = 915; + }; + class CUP_20Rnd_B_765x17_Ball_M: CA_Magazine { + initSpeed = 290; + }; + class CUP_30Rnd_9x19_MP5: CA_Magazine { + initSpeed = 400; + }; }; \ No newline at end of file diff --git a/optionals/compat_cup/CfgWeapons.hpp b/optionals/compat_cup/CfgWeapons.hpp index e897384343..76d442ee53 100644 --- a/optionals/compat_cup/CfgWeapons.hpp +++ b/optionals/compat_cup/CfgWeapons.hpp @@ -5,175 +5,217 @@ class CfgWeapons class Rifle_Long_Base_F; class Launcher_Base_F; class CUP_hgun_Colt1911 : Pistol_Base_F { + initSpeed=-1.04; ACE_barrelTwist=406.4; ACE_barrelLength=127.0; }; class CUP_sgun_AA12 : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=0.0; ACE_twistDirection=0; ACE_barrelLength=457.2; }; class CUP_arifle_AK_Base : Rifle_Base_F { + initSpeed=-0.95467; ACE_barrelTwist=240.03; ACE_barrelLength=414.02; }; class CUP_arifle_AK107_Base : CUP_arifle_AK_Base { + initSpeed=-1.0; ACE_barrelTwist=199.898; ACE_barrelLength=414.02; }; class CUP_arifle_AKS_Base : CUP_arifle_AK_Base { + initSpeed=-0.95467; ACE_barrelTwist=199.898; ACE_barrelLength=414.02; }; class CUP_arifle_AKS74U : CUP_arifle_AK_Base { + initSpeed=-0.88636; ACE_barrelTwist=160.02; ACE_barrelLength=210.82; }; class CUP_arifle_AK74; class CUP_arifle_RPK74 : CUP_arifle_AK74 { + initSpeed=-1.0; ACE_barrelTwist=195.072; ACE_barrelLength=589.28; }; class CUP_srifle_AS50 : Rifle_Long_Base_F { + initSpeed=-1.0; ACE_barrelTwist=381.0; ACE_barrelLength=736.6; }; class CUP_srifle_AWM_Base : Rifle_Long_Base_F { + initSpeed=-1.00547; ACE_barrelTwist=279.4; ACE_barrelLength=685.8; }; class CUP_smg_bizon : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=231.14; }; class CUP_hgun_Compact : Pistol_Base_F { + initSpeed=-0.97778; ACE_barrelTwist=248.92; ACE_barrelLength=94.996; }; class CUP_srifle_CZ750 : Rifle_Long_Base_F { + initSpeed=-1.0; ACE_barrelTwist=304.8; ACE_barrelLength=660.4; }; class CUP_arifle_CZ805_Base : Rifle_Base_F { + initSpeed=-0.87283; ACE_barrelTwist=304.8; ACE_barrelLength=355.6; }; class CUP_arifle_CZ805_A1 : CUP_arifle_CZ805_Base { + initSpeed=-0.93696; ACE_barrelTwist=304.8; ACE_barrelLength=355.6; }; class CUP_arifle_CZ805_A2 : CUP_arifle_CZ805_Base { + initSpeed=-0.87283; ACE_barrelTwist=304.8; ACE_barrelLength=276.86; }; class CUP_srifle_DMR : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=304.8; ACE_barrelLength=558.8; }; class CUP_hgun_Duty : Pistol_Base_F { + initSpeed=-0.97778; ACE_barrelTwist=248.92; ACE_barrelLength=94.996; }; class CUP_arifle_FNFAL : Rifle_Base_F { + initSpeed=-0.98796; ACE_barrelTwist=304.8; ACE_barrelLength=533.4; }; class CUP_arifle_G36_Base; class CUP_arifle_G36A : CUP_arifle_G36_Base { + initSpeed=-0.99357; ACE_barrelTwist=177.8; ACE_barrelLength=480; }; class CUP_arifle_G36K : CUP_arifle_G36A { + initSpeed=-0.90761; ACE_barrelTwist=177.8; ACE_barrelLength=318; }; class CUP_arifle_G36C : Rifle_Base_F { + initSpeed=-0.81522; ACE_barrelTwist=177.8; ACE_barrelLength=228; }; class CUP_arifle_MG36 : CUP_arifle_G36C { + initSpeed=-0.99457; ACE_barrelTwist=177.8; ACE_barrelLength=480; }; class CUP_hgun_Glock17 : Pistol_Base_F { + initSpeed=-0.9595; ACE_barrelTwist=248.92; ACE_barrelLength=114.046; }; class CUP_srifle_CZ550 : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=304.8; ACE_barrelLength=599.999; }; class CUP_srifle_ksvk : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=457.2; ACE_barrelLength=999.998; }; class CUP_lmg_L7A2 : Rifle_Long_Base_F { + initSpeed=-1.0; ACE_barrelTwist=304.8; ACE_barrelLength=629.92; }; class CUP_arifle_L85A2_Base : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=177.8; ACE_barrelLength=518.16; }; class CUP_arifle_L86A2_Base: Rifle_Base_F { + initSpeed=-0.97826; ACE_barrelTwist=177.8; ACE_barrelLength=646; }; class CUP_lmg_L110A1 : Rifle_Long_Base_F { + initSpeed=-0.93044; ACE_barrelTwist=177.8; ACE_barrelLength=347.98; }; class CUP_srifle_LeeEnfield : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=254.0; ACE_barrelLength=640.08; }; class CUP_hgun_M9 : Pistol_Base_F { + initSpeed=-1.0; ACE_barrelTwist=248.92; ACE_barrelLength=124.46; }; class CUP_srifle_M14 : Rifle_Base_F { + initSpeed=-0.99160; ACE_barrelTwist=304.8; ACE_barrelLength=558.8; }; class CUP_arifle_M16_Base : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=355.6; ACE_barrelLength=508.0; }; class CUP_arifle_M16A4_Base; class CUP_arifle_M4_Base : CUP_arifle_M16A4_Base { + initSpeed=-0.94565; ACE_barrelTwist=177.8; ACE_barrelLength=368.3; }; class CUP_arifle_M4A1; class CUP_srifle_Mk12SPR : CUP_arifle_M4A1 { + initSpeed=-0.98696; ACE_barrelTwist=177.8; ACE_barrelLength=457.2; }; class CUP_srifle_M24_des : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=285.75; ACE_barrelLength=609.6; }; class CUP_lmg_M60A4 : Rifle_Long_Base_F { + initSpeed=-0.96639; ACE_barrelTwist=304.8; ACE_barrelLength=431.8; }; class CUP_srifle_M107_Base : Rifle_Long_Base_F { + initSpeed=-1.0; ACE_barrelTwist=381.0; ACE_barrelLength=736.6; }; class CUP_srifle_M110 : Rifle_Base_F { + initSpeed=-0.98558; ACE_barrelTwist=279.4; ACE_barrelLength=508.0; }; class CUP_lmg_M240 : Rifle_Long_Base_F { + initSpeed=-1.00600; ACE_barrelTwist=304.8; ACE_barrelLength=629.92; }; class CUP_lmg_M249_para : Rifle_Long_Base_F { + initSpeed=-0.96739; ACE_barrelTwist=177.8; ACE_barrelLength=414.02; }; class CUP_lmg_M249 : Rifle_Long_Base_F { + initSpeed=-0.98696; ACE_barrelTwist=177.8; ACE_barrelLength=457.2; }; @@ -183,153 +225,204 @@ class CfgWeapons ACE_barrelLength=469.9; }; class CUP_hgun_Makarov : Pistol_Base_F { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=93.472; }; class CUP_hgun_MicroUzi : Pistol_Base_F { + initSpeed=-1.0; ACE_barrelTwist=248.92; ACE_barrelLength=127.0; }; class CUP_lmg_Mk48_Base : Rifle_Long_Base_F { + initSpeed=-0.98558; ACE_barrelTwist=304.8; ACE_barrelLength=501.65; }; class CUP_smg_MP5SD6 : Rifle_Base_F { + initSpeed=-0.9375; ACE_barrelTwist=254.0; ACE_barrelLength=144.78; }; class CUP_smg_MP5A5 : CUP_smg_MP5SD6 { + initSpeed=-1.0; ACE_barrelTwist=254.0; ACE_barrelLength=226.06; - }; + }; + class CUP_smg_EVO : Rifle_Base_F { + initSpeed=-0.975; + ACE_barrelTwist=254.0; + ACE_barrelLength=195.58; + }; class CUP_hgun_PB6P9 : Pistol_Base_F { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=104.14; }; class CUP_hgun_Phantom : Pistol_Base_F { + initSpeed=-1.0; ACE_barrelTwist=246.38; ACE_barrelLength=119.38; }; class CUP_lmg_PKM : Rifle_Long_Base_F { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=645.16; }; class CUP_lmg_Pecheneg : CUP_lmg_PKM { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=657.86; }; class CUP_hgun_TaurusTracker455 : Pistol_Base_F { + initSpeed=-0.92; ACE_barrelTwist=304.8; ACE_barrelLength=101.6; }; class CUP_arifle_Sa58_base; class CUP_arifle_Sa58P : CUP_arifle_Sa58_base { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=391.16; }; class CUP_arifle_Sa58V : CUP_arifle_Sa58P { + initSpeed=-1.0; + ACE_barrelTwist=240.03; + ACE_barrelLength=391.16; + }; + class CUP_arifle_Sa58RIS1 : CUP_arifle_Sa58_base { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=391.16; }; class CUP_hgun_SA61 : Pistol_Base_F { + initSpeed=-1.0; ACE_barrelTwist=406.4; ACE_barrelLength=114.3; }; class CUP_sgun_Saiga12K: Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=0.0; ACE_twistDirection=0; ACE_barrelLength=429.26; }; class CUP_arifle_SCAR_L_Base; class CUP_arifle_Mk16_CQC : CUP_arifle_SCAR_L_Base { + initSpeed=-0.84783; ACE_barrelTwist=177.8; ACE_barrelLength=254.0; }; class CUP_arifle_Mk16_STD : CUP_arifle_SCAR_L_Base { + initSpeed=-0.93696; ACE_barrelTwist=177.8; ACE_barrelLength=355.6; }; class CUP_arifle_Mk16_SV : CUP_arifle_SCAR_L_Base { + initSpeed=-0.98696; ACE_barrelTwist=177.8; ACE_barrelLength=457.2; }; class CUP_arifle_Mk17_Base; - class CUP_arifle_Mk17_CQC : CUP_arifle_Mk17_Base { + class CUP_arifle_Mk17_CQC : CUP_arifle_Mk17_Base { + initSpeed=-0.90144; ACE_barrelTwist=304.8; ACE_barrelLength=330.2; }; - class CUP_arifle_Mk17_STD : CUP_arifle_Mk17_Base { + class CUP_arifle_Mk17_STD : CUP_arifle_Mk17_Base { + initSpeed=-0.96154; ACE_barrelTwist=304.8; ACE_barrelLength=406.4; }; - class CUP_arifle_Mk20 : CUP_arifle_Mk17_Base { + class CUP_arifle_Mk20 : CUP_arifle_Mk17_Base { + initSpeed=-0.98558; ACE_barrelTwist=304.8; ACE_barrelLength=508.0; }; class CUP_srifle_SVD : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=238.76; ACE_barrelLength=619.76; }; class CUP_lmg_UK59 : Rifle_Long_Base_F { + initSpeed=-0.9625; ACE_barrelTwist=381.0; ACE_barrelLength=551.18; }; class MGun; class CUP_DSHKM_W : MGun { + initSpeed=-1.0; ACE_barrelTwist=381.0; ACE_barrelLength=1069.34; }; class CUP_KPVT_W : MGun { + initSpeed=-1.0; ACE_barrelTwist=454.914; ACE_barrelLength=1346.2; }; class CUP_M242_W; class CUP_KPVB_W : CUP_M242_W { + initSpeed=-1.0; ACE_barrelTwist=454.914; ACE_barrelLength=1346.2; }; class MGunCore; class CUP_M134 : MGunCore { + initSpeed=-1.0; ACE_barrelTwist=304.8; ACE_barrelLength=558.8; }; class CUP_M240_veh_W : Rifle_Long_Base_F { + initSpeed=-1.0; ACE_barrelTwist=304.8; ACE_barrelLength=629.92; }; class CUP_PKT_W : MGun { + initSpeed=-1.0; ACE_barrelTwist=240.03; ACE_barrelLength=722.122; }; class CUP_srifle_VSSVintorez : Rifle_Base_F { + initSpeed=-0.93334; ACE_barrelTwist=210.82; ACE_barrelLength=200.66; }; class CUP_arifle_XM8_Base : Rifle_Base_F { + initSpeed=-1.0; ACE_barrelTwist=177.8; ACE_barrelLength=317.5; }; class CUP_arifle_XM8_Carbine : CUP_arifle_XM8_Base { + initSpeed=-0.90760; ACE_barrelTwist=177.8; ACE_barrelLength=317.5; }; class CUP_arifle_xm8_sharpshooter : CUP_arifle_XM8_Base { + initSpeed=-1.0; ACE_barrelTwist=177.8; ACE_barrelLength=508.0; }; class CUP_arifle_xm8_SAW : CUP_arifle_XM8_Base { + initSpeed=-1.0; ACE_barrelTwist=177.8; ACE_barrelLength=508.0; }; class CUP_arifle_XM8_Compact : CUP_arifle_XM8_Base { + initSpeed=-0.81522; ACE_barrelTwist=177.8; ACE_barrelLength=228.6; }; class CUP_arifle_XM8_Railed_Base : Rifle_Base_F { + initSpeed=-0.90760; ACE_barrelTwist=177.8; ACE_barrelLength=317.5; }; class CUP_arifle_XM8_Carbine_FG : CUP_arifle_XM8_Base { + initSpeed=-0.90870; + ACE_barrelTwist=177.8; + ACE_barrelLength=317.5; + }; + class CUP_arifle_XM8_Carbine_GL : CUP_arifle_XM8_Base { + initSpeed=-0.90870; ACE_barrelTwist=177.8; ACE_barrelLength=317.5; }; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index d3c9111c09..e2e1efc00e 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -6,74 +6,56 @@ class CfgWeapons class srifle_EBR_F; class launch_O_Titan_F; - class rhs_weap_XM2010_Base_F: Rifle_Base_F - { + class rhs_weap_XM2010_Base_F: Rifle_Base_F { ACE_barrelTwist=254.0; ACE_barrelLength=609.6; }; class arifle_MX_Base_F; - class rhs_weap_m4_Base: arifle_MX_Base_F - { + class rhs_weap_m4_Base: arifle_MX_Base_F { ACE_barrelTwist=177.8; ACE_barrelLength=368.3; }; class rhs_weap_m4a1; - class rhs_weap_mk18: rhs_weap_m4a1 - { + class rhs_weap_mk18: rhs_weap_m4a1 { ACE_barrelTwist=177.8; ACE_barrelLength=261.62; }; - class rhs_weap_m16a4: rhs_weap_m4_Base - { + class rhs_weap_m16a4: rhs_weap_m4_Base { ACE_barrelTwist=177.8; ACE_barrelLength=508.0; }; - class rhs_M249_base; - class rhs_weap_m249_pip: rhs_M249_base - { - ACE_barrelTwist=177.8; - ACE_barrelLength=414.02; - }; - class weap_m240_base; - class rhs_weap_m240B: weap_m240_base - { + class rhs_weap_m240_base; + class rhs_weap_m240B: rhs_weap_m240_base { ACE_barrelTwist=304.8; ACE_barrelLength=629.92; }; - class rhs_weap_m14ebrri: srifle_EBR_F - { + class rhs_weap_m14ebrri: srifle_EBR_F { ACE_barrelTwist=304.8; ACE_barrelLength=558.8; }; - class rhs_weap_sr25: rhs_weap_m14ebrri - { + class rhs_weap_sr25: rhs_weap_m14ebrri { ACE_barrelTwist=285.75; ACE_barrelLength=609.6; }; - class rhs_weap_sr25_ec: rhs_weap_sr25 - { + class rhs_weap_sr25_ec: rhs_weap_sr25 { ACE_barrelTwist=285.75; ACE_barrelLength=508.0; }; - class rhs_weap_M590_5RD: Rifle_Base_F - { + class rhs_weap_M590_5RD: Rifle_Base_F { ACE_barrelTwist=0.0; ACE_twistDirection=0; ACE_barrelLength=469.9; }; - class rhs_weap_M590_8RD: rhs_weap_M590_5RD - { + class rhs_weap_M590_8RD: rhs_weap_M590_5RD { ACE_barrelTwist=0.0; ACE_twistDirection=0; ACE_barrelLength=508.0; }; class hgun_ACPC2_F; - class rhsusf_weap_m1911a1: hgun_ACPC2_F - { + class rhsusf_weap_m1911a1: hgun_ACPC2_F { ACE_barrelTwist=406.4; ACE_barrelLength=127.0; }; - class rhsusf_acc_sniper_base; class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base { ACE_ScopeAdjust_Vertical[] = { -4, 30 }; @@ -87,7 +69,6 @@ class CfgWeapons ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; }; - class rhs_weap_fgm148 : launch_O_Titan_F { ace_javelin_enabled = 1; weaponInfoType = "ACE_RscOptics_javelin"; diff --git a/tools/make.py b/tools/make.py index 11c2bf25b5..b6146a8d9f 100644 --- a/tools/make.py +++ b/tools/make.py @@ -1079,16 +1079,16 @@ See the make.cfg file for additional build options. if build_tool == "pboproject": try: nobinFilePath = os.path.join(work_drive, prefix, module, "$NOBIN$") + backup_config(module) if (not os.path.isfile(nobinFilePath)): - backup_config(module) convert_config(module) version_stamp_pboprefix(module,commit_id) if os.path.isfile(nobinFilePath): print_green("$NOBIN$ Found. Proceeding with non-binarizing!") - cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"addons")] + cmd = [makepboTool, "-P","-A","-L","-G","-X=*.backup", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"addons")] else: if check_external: @@ -1222,7 +1222,7 @@ See the make.cfg file for additional build options. except Exception as e: print_yellow("Cancel or some error detected: {}".format(e)) - + finally: copy_important_files(module_root_parent,os.path.join(release_dir, project))